From d4c688f8f89ca496bcb4b61d5150151fdfb3a3ed Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Sun, 27 Sep 2020 13:51:56 +0800 Subject: [PATCH 001/229] executor, expression: set the evalType of hybrid type as ETInt in VecEvalBool (#20221) --- executor/aggregate.go | 4 ++-- executor/executor_test.go | 14 ++++++++++++++ expression/expression.go | 10 +++++++--- expression/expression_test.go | 4 ++-- expression/util_test.go | 2 +- 5 files changed, 26 insertions(+), 8 deletions(-) diff --git a/executor/aggregate.go b/executor/aggregate.go index 58fd9b9cb613a..e1311636c0326 100644 --- a/executor/aggregate.go +++ b/executor/aggregate.go @@ -452,7 +452,7 @@ func getGroupKey(ctx sessionctx.Context, input *chunk.Chunk, groupKey [][]byte, return nil, err } - if err := expression.EvalExpr(ctx, item, input, buf); err != nil { + if err := expression.EvalExpr(ctx, item, tp.EvalType(), input, buf); err != nil { expression.PutColumn(buf) return nil, err } @@ -1110,7 +1110,7 @@ func (e *vecGroupChecker) evalGroupItemsAndResolveGroups(item expression.Express return err } defer e.releaseBuffer(col) - err = expression.EvalExpr(e.ctx, item, chk, col) + err = expression.EvalExpr(e.ctx, item, eType, chk, col) if err != nil { return err } diff --git a/executor/executor_test.go b/executor/executor_test.go index cf83ebd453ca1..035d7631bfa31 100644 --- a/executor/executor_test.go +++ b/executor/executor_test.go @@ -3167,6 +3167,12 @@ func (s *testSuite) TestBit(c *C) { tk.MustExec("insert into t values ('12345678')") _, err = tk.Exec("insert into t values ('123456789')") c.Assert(err, NotNil) + + tk.MustExec("drop table if exists t") + tk.MustExec("create table t (c1 bit(64))") + tk.MustExec("insert into t values (0xffffffffffffffff)") + tk.MustExec("insert into t values ('12345678')") + tk.MustQuery("select * from t where c1").Check(testkit.Rows("\xff\xff\xff\xff\xff\xff\xff\xff", "12345678")) } func (s *testSuite) TestEnum(c *C) { @@ -3183,6 +3189,10 @@ func (s *testSuite) TestEnum(c *C) { tk.MustExec("insert into t values ()") tk.MustExec("insert into t values (null), ('1')") tk.MustQuery("select c + 1 from t where c = 1").Check(testkit.Rows("2")) + + tk.MustExec("delete from t") + tk.MustExec("insert into t values(1), (2), (3)") + tk.MustQuery("select * from t where c").Check(testkit.Rows("a", "b", "c")) } func (s *testSuite) TestSet(c *C) { @@ -3201,6 +3211,10 @@ func (s *testSuite) TestSet(c *C) { tk.MustExec("insert into t values ()") tk.MustExec("insert into t values (null), ('1')") tk.MustQuery("select c + 1 from t where c = 1").Check(testkit.Rows("2")) + + tk.MustExec("delete from t") + tk.MustExec("insert into t values(3)") + tk.MustQuery("select * from t where c").Check(testkit.Rows("a,b")) } func (s *testSuite) TestSubqueryInValues(c *C) { diff --git a/expression/expression.go b/expression/expression.go index 36be2a14475fc..7062e6fedf5d3 100644 --- a/expression/expression.go +++ b/expression/expression.go @@ -322,12 +322,15 @@ func VecEvalBool(ctx sessionctx.Context, exprList CNFExprs, input *chunk.Chunk, defer deallocateZeroSlice(isZero) for _, expr := range exprList { eType := expr.GetType().EvalType() + if expr.GetType().Hybrid() { + eType = types.ETInt + } buf, err := globalColumnAllocator.get(eType, n) if err != nil { return nil, nil, err } - if err := EvalExpr(ctx, expr, input, buf); err != nil { + if err := EvalExpr(ctx, expr, eType, input, buf); err != nil { return nil, nil, err } @@ -463,8 +466,9 @@ func toBool(sc *stmtctx.StatementContext, eType types.EvalType, buf *chunk.Colum // EvalExpr evaluates this expr according to its type. // And it selects the method for evaluating expression based on // the environment variables and whether the expression can be vectorized. -func EvalExpr(ctx sessionctx.Context, expr Expression, input *chunk.Chunk, result *chunk.Column) (err error) { - evalType := expr.GetType().EvalType() +// Note: the input argument `evalType` is needed because of that when `expr` is +// of the hybrid type(ENUM/SET/BIT), we need the invoker decide the actual EvalType. +func EvalExpr(ctx sessionctx.Context, expr Expression, evalType types.EvalType, input *chunk.Chunk, result *chunk.Column) (err error) { if expr.Vectorized() && ctx.GetSessionVars().EnableVectorizedExpression { switch evalType { case types.ETInt: diff --git a/expression/expression_test.go b/expression/expression_test.go index b6b88506fabc5..2ecdc12f465eb 100644 --- a/expression/expression_test.go +++ b/expression/expression_test.go @@ -203,12 +203,12 @@ func (s *testEvaluatorSuite) TestEvalExpr(c *C) { var err error c.Assert(colExpr.Vectorized(), IsTrue) ctx.GetSessionVars().EnableVectorizedExpression = false - err = EvalExpr(ctx, colExpr, input, colBuf) + err = EvalExpr(ctx, colExpr, colExpr.GetType().EvalType(), input, colBuf) if err != nil { c.Fatal(err) } ctx.GetSessionVars().EnableVectorizedExpression = true - err = EvalExpr(ctx, colExpr, input, colBuf2) + err = EvalExpr(ctx, colExpr, colExpr.GetType().EvalType(), input, colBuf2) if err != nil { c.Fatal(err) } diff --git a/expression/util_test.go b/expression/util_test.go index 0b3c4242e9fc6..b86968c9675db 100644 --- a/expression/util_test.go +++ b/expression/util_test.go @@ -371,7 +371,7 @@ func (s *testUtilSuite) TestHashGroupKey(c *check.C) { bufs[j] = bufs[j][:0] } var err error - err = EvalExpr(ctx, colExpr, input, colBuf) + err = EvalExpr(ctx, colExpr, colExpr.GetType().EvalType(), input, colBuf) if err != nil { c.Fatal(err) } From ddba4fe39be2c702403ab12653d3d3d6940f3f29 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Mon, 28 Sep 2020 11:10:40 +0800 Subject: [PATCH 002/229] cherry pick #20247 to release-4.0 (#20253) --- metrics/grafana/tidb_runtime.json | 4 +-- metrics/metrics.go | 1 + metrics/server.go | 8 ++++++ server/http_handler.go | 7 ++++- server/http_status.go | 25 +++++++++++++++++ util/gogc.go | 45 +++++++++++++++++++++++++++++++ 6 files changed, 87 insertions(+), 3 deletions(-) create mode 100644 util/gogc.go diff --git a/metrics/grafana/tidb_runtime.json b/metrics/grafana/tidb_runtime.json index 12a18a89d1a53..d5bab22fd0cc3 100644 --- a/metrics/grafana/tidb_runtime.json +++ b/metrics/grafana/tidb_runtime.json @@ -142,7 +142,7 @@ "refId": "A" }, { - "expr": "go_memstats_next_gc_bytes{instance=~\"$instance\"} / 2", + "expr": "go_memstats_next_gc_bytes{instance=~\"$instance\"} / (1 + tidb_server_gogc{instance=~\"$instance\"} / 100)", "format": "time_series", "hide": false, "intervalFactor": 1, @@ -150,7 +150,7 @@ "refId": "H" }, { - "expr": "go_memstats_heap_alloc_bytes{instance=~\"$instance\"} - go_memstats_next_gc_bytes{instance=~\"$instance\"} / 2", + "expr": "go_memstats_heap_alloc_bytes{instance=~\"$instance\"} - go_memstats_next_gc_bytes{instance=~\"$instance\"} / (1 + tidb_server_gogc{instance=~\"$instance\"} / 100)", "format": "time_series", "hide": false, "intervalFactor": 1, diff --git a/metrics/metrics.go b/metrics/metrics.go index 89cd3d0ae0006..843f2675a71e4 100644 --- a/metrics/metrics.go +++ b/metrics/metrics.go @@ -163,4 +163,5 @@ func RegisterMetrics() { prometheus.MustRegister(TiKVTTLLifeTimeReachCounter) prometheus.MustRegister(TiKVNoAvailableConnectionCounter) prometheus.MustRegister(MaxProcs) + prometheus.MustRegister(GOGC) } diff --git a/metrics/server.go b/metrics/server.go index c753f9612638b..74645e90b354c 100644 --- a/metrics/server.go +++ b/metrics/server.go @@ -161,6 +161,14 @@ var ( Name: "maxprocs", Help: "The value of GOMAXPROCS.", }) + + GOGC = prometheus.NewGauge( + prometheus.GaugeOpts{ + Namespace: "tidb", + Subsystem: "server", + Name: "gogc", + Help: "The value of GOGC", + }) ) // ExecuteErrorToLabel converts an execute error to label. diff --git a/server/http_handler.go b/server/http_handler.go index ade85582e5fa6..a4e82d0d23fdd 100644 --- a/server/http_handler.go +++ b/server/http_handler.go @@ -23,6 +23,7 @@ import ( "math" "net/http" "net/url" + "runtime" "strconv" "strings" "sync/atomic" @@ -1641,7 +1642,9 @@ func (h *mvccTxnHandler) handleMvccGetByTxn(params map[string]string) (interface // serverInfo is used to report the servers info when do http request. type serverInfo struct { - IsOwner bool `json:"is_owner"` + IsOwner bool `json:"is_owner"` + MaxProcs int `json:"max_procs"` + GOGC int `json:"gogc"` *infosync.ServerInfo } @@ -1661,6 +1664,8 @@ func (h serverInfoHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) { return } info.IsOwner = do.DDL().OwnerManager().IsOwner() + info.MaxProcs = runtime.GOMAXPROCS(0) + info.GOGC = util.GetGOGC() writeData(w, info) } diff --git a/server/http_status.go b/server/http_status.go index 3288face50780..bddf3aba14a70 100644 --- a/server/http_status.go +++ b/server/http_status.go @@ -21,6 +21,7 @@ import ( "crypto/x509" "encoding/json" "fmt" + "io/ioutil" "net" "net/http" "net/http/pprof" @@ -178,6 +179,30 @@ func (s *Server) startHTTPServer() { serverMux.HandleFunc("/debug/pprof/profile", pprof.Profile) serverMux.HandleFunc("/debug/pprof/symbol", pprof.Symbol) serverMux.HandleFunc("/debug/pprof/trace", pprof.Trace) + serverMux.HandleFunc("/debug/gogc", func(w http.ResponseWriter, r *http.Request) { + switch r.Method { + case http.MethodGet: + _, err := w.Write([]byte(strconv.Itoa(util.GetGOGC()))) + terror.Log(err) + case http.MethodPost: + body, err := ioutil.ReadAll(r.Body) + if err != nil { + terror.Log(err) + return + } + + val, err := strconv.Atoi(string(body)) + if err != nil { + w.WriteHeader(http.StatusBadRequest) + if _, err := w.Write([]byte(err.Error())); err != nil { + terror.Log(err) + } + return + } + + util.SetGOGC(val) + } + }) serverMux.HandleFunc("/debug/zip", func(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Disposition", fmt.Sprintf(`attachment; filename="tidb_debug"`+time.Now().Format("20060102150405")+".zip")) diff --git a/util/gogc.go b/util/gogc.go new file mode 100644 index 0000000000000..3d49112825901 --- /dev/null +++ b/util/gogc.go @@ -0,0 +1,45 @@ +// Copyright 2020 PingCAP, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// See the License for the specific language governing permissions and +// limitations under the License. + +package util + +import ( + "os" + "runtime/debug" + "strconv" + "sync/atomic" + + "github.com/pingcap/tidb/metrics" +) + +var gogcValue int64 + +func init() { + gogcValue = 100 + if val, err := strconv.Atoi(os.Getenv("GOGC")); err == nil { + gogcValue = int64(val) + } + metrics.GOGC.Set(float64(gogcValue)) +} + +// SetGOGC update GOGC and related metrics. +func SetGOGC(val int) { + debug.SetGCPercent(val) + metrics.GOGC.Set(float64(val)) + atomic.StoreInt64(&gogcValue, int64(val)) +} + +// GetGOGC returns the current value of GOGC. +func GetGOGC() int { + return int(atomic.LoadInt64(&gogcValue)) +} From 7dd1c94d6c54a4e1185dfeb9c4f1d8e6adb5acc0 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Tue, 29 Sep 2020 16:29:05 +0800 Subject: [PATCH 003/229] cherry pick #20023 to release-4.0 (#20260) --- metrics/grafana/tidb.json | 4 ++-- metrics/grafana/tidb_runtime.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/metrics/grafana/tidb.json b/metrics/grafana/tidb.json index fa879b0439740..a67032d9734a3 100644 --- a/metrics/grafana/tidb.json +++ b/metrics/grafana/tidb.json @@ -6665,7 +6665,7 @@ "steppedLine": false, "targets": [ { - "expr": "histogram_quantile(0.99, sum(rate(tidb_tikvclient_request_seconds_bucket{type!=\"GC\"}[1m])) by (le, store))", + "expr": "histogram_quantile(0.99, sum(rate(tidb_tikvclient_request_seconds_bucket{store!=\"0\"}[1m])) by (le, store))", "format": "time_series", "intervalFactor": 2, "legendFormat": "store-{{store}}", @@ -6760,7 +6760,7 @@ "steppedLine": false, "targets": [ { - "expr": "histogram_quantile(0.99, sum(rate(tidb_tikvclient_request_seconds_bucket{type!=\"GC\"}[1m])) by (le,type))", + "expr": "histogram_quantile(0.99, sum(rate(tidb_tikvclient_request_seconds_bucket{store!=\"0\"}[1m])) by (le,type))", "format": "time_series", "intervalFactor": 2, "legendFormat": "{{type}}", diff --git a/metrics/grafana/tidb_runtime.json b/metrics/grafana/tidb_runtime.json index d5bab22fd0cc3..364a4f55ef898 100644 --- a/metrics/grafana/tidb_runtime.json +++ b/metrics/grafana/tidb_runtime.json @@ -1098,7 +1098,7 @@ "steppedLine": false, "targets": [ { - "expr": "histogram_quantile(0.99, sum(rate(tidb_tikvclient_request_seconds_bucket{type!=\"GC\",instance=~\"$instance\"}[30s])) by (le, store))", + "expr": "histogram_quantile(0.99, sum(rate(tidb_tikvclient_request_seconds_bucket{store!=\"0\",instance=~\"$instance\"}[30s])) by (le, store))", "format": "time_series", "intervalFactor": 1, "legendFormat": "tidb-to-store{{store}}", From c6d337e170d444586d9f2e08a0b424875d0d2467 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Thu, 1 Oct 2020 10:18:10 +0800 Subject: [PATCH 004/229] executor, server: reduce connect/disconnect log spam (#19308) (#20321) Signed-off-by: ti-srebot --- executor/set.go | 6 +++--- server/server.go | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/executor/set.go b/executor/set.go index b4bbf85b84611..08744aeb47a26 100644 --- a/executor/set.go +++ b/executor/set.go @@ -212,11 +212,11 @@ func (e *SetExecutor) setSysVariable(name string, v *expression.VarAssignment) e terror.Log(err) } } - if name != variable.AutoCommit { + if scopeStr == scopeGlobal { logutil.BgLogger().Info(fmt.Sprintf("set %s var", scopeStr), zap.Uint64("conn", sessionVars.ConnectionID), zap.String("name", name), zap.String("val", valStr)) } else { - // Some applications will set `autocommit` variable before query. - // This will print too many unnecessary log info. + // Clients are often noisy in setting session variables such as + // autocommit, timezone, query cache logutil.BgLogger().Debug(fmt.Sprintf("set %s var", scopeStr), zap.Uint64("conn", sessionVars.ConnectionID), zap.String("name", name), zap.String("val", valStr)) } diff --git a/server/server.go b/server/server.go index e02d5a8b6ad54..cfbd9bddb602b 100644 --- a/server/server.go +++ b/server/server.go @@ -391,10 +391,10 @@ func (s *Server) onConn(conn *clientConn) { return } - logutil.Logger(ctx).Info("new connection", zap.String("remoteAddr", conn.bufReadConn.RemoteAddr().String())) + logutil.Logger(ctx).Debug("new connection", zap.String("remoteAddr", conn.bufReadConn.RemoteAddr().String())) defer func() { - logutil.Logger(ctx).Info("connection closed") + logutil.Logger(ctx).Debug("connection closed") }() s.rwlock.Lock() s.clients[conn.connectionID] = conn From 12afe636aae5d81c0148a674bf630f56733f6ca0 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Sat, 3 Oct 2020 17:29:10 +0800 Subject: [PATCH 005/229] tikv, server: turn on grpc channelz to help diagnosis and add wait conn establish metric (#16263) (#20077) Signed-off-by: ti-srebot --- metrics/grafana/tidb.json | 104 +++++++++++++++++++++++++++++++++++-- metrics/metrics.go | 1 + metrics/tikvclient.go | 8 +++ server/http_status.go | 2 + store/tikv/client_batch.go | 9 +++- 5 files changed, 118 insertions(+), 6 deletions(-) diff --git a/metrics/grafana/tidb.json b/metrics/grafana/tidb.json index a67032d9734a3..f9ea9f5f383a8 100644 --- a/metrics/grafana/tidb.json +++ b/metrics/grafana/tidb.json @@ -11365,7 +11365,7 @@ "dashLength": 10, "dashes": false, "datasource": "${DS_TEST-CLUSTER}", - "description": "kv storage batch processing unvailable durations", + "description": "kv storage batch client wait new connection establish duration", "editable": true, "error": false, "fill": 1, @@ -11376,7 +11376,7 @@ "x": 16, "y": 16 }, - "id": 180, + "id": 204, "legend": { "alignAsTable": true, "avg": false, @@ -11402,7 +11402,7 @@ "steppedLine": false, "targets": [ { - "expr": "histogram_quantile(0.95, sum(rate(tidb_tikvclient_batch_client_unavailable_seconds_bucket[1m])) by (le, instance))", + "expr": "histogram_quantile(0.9999, sum(rate(tidb_tikvclient_batch_client_wait_connection_establish_bucket[1m])) by (le, instance))", "format": "time_series", "intervalFactor": 2, "legendFormat": "{{instance}}", @@ -11414,7 +11414,7 @@ "timeFrom": null, "timeRegions": [], "timeShift": null, - "title": "Batch Client Unavailable Duration 95", + "title": "Wait Connection Establish Duration", "tooltip": { "msResolution": false, "shared": true, @@ -11537,6 +11537,100 @@ "align": false, "alignLevel": null } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "${DS_TEST-CLUSTER}", + "description": "kv storage batch processing unvailable durations", + "editable": true, + "error": false, + "fill": 1, + "grid": {}, + "gridPos": { + "h": 7, + "w": 8, + "x": 16, + "y": 23 + }, + "id": 180, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "links": [], + "nullPointMode": "null as zero", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "histogram_quantile(0.95, sum(rate(tidb_tikvclient_batch_client_unavailable_seconds_bucket[1m])) by (le, instance))", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "{{instance}}", + "refId": "A", + "step": 10 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Batch Client Unavailable Duration 95", + "tooltip": { + "msResolution": false, + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "s", + "label": null, + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } } ], "title": "Batch Client", @@ -11544,7 +11638,7 @@ } ], "refresh": "30s", - "schemaVersion": 18, + "schemaVersion": 20, "style": "dark", "tags": [], "time": { diff --git a/metrics/metrics.go b/metrics/metrics.go index 843f2675a71e4..e8f6d22d87b2d 100644 --- a/metrics/metrics.go +++ b/metrics/metrics.go @@ -153,6 +153,7 @@ func RegisterMetrics() { prometheus.MustRegister(TiKVStatusCounter) prometheus.MustRegister(TiKVBatchWaitDuration) prometheus.MustRegister(TiKVBatchClientUnavailable) + prometheus.MustRegister(TiKVBatchClientWaitEstablish) prometheus.MustRegister(TiKVRangeTaskStats) prometheus.MustRegister(TiKVRangeTaskPushDuration) prometheus.MustRegister(HandleSchemaValidate) diff --git a/metrics/tikvclient.go b/metrics/tikvclient.go index 31f9b83f3da05..8a311af3eee44 100644 --- a/metrics/tikvclient.go +++ b/metrics/tikvclient.go @@ -190,6 +190,14 @@ var ( Buckets: prometheus.ExponentialBuckets(0.001, 2, 28), // 1ms ~ 1.5days Help: "batch client unavailable", }) + TiKVBatchClientWaitEstablish = prometheus.NewHistogram( + prometheus.HistogramOpts{ + Namespace: "tidb", + Subsystem: "tikvclient", + Name: "batch_client_wait_connection_establish", + Buckets: prometheus.ExponentialBuckets(0.001, 2, 20), // 1ms ~ 1000s + Help: "batch client wait new connection establish", + }) TiKVRangeTaskStats = prometheus.NewGaugeVec( prometheus.GaugeOpts{ diff --git a/server/http_status.go b/server/http_status.go index bddf3aba14a70..8e626f04d6178 100644 --- a/server/http_status.go +++ b/server/http_status.go @@ -48,6 +48,7 @@ import ( "github.com/soheilhy/cmux" "github.com/tiancaiamao/appdash/traceapp" "go.uber.org/zap" + "google.golang.org/grpc/channelz/service" static "sourcegraph.com/sourcegraph/appdash-data" ) @@ -336,6 +337,7 @@ func (s *Server) startStatusServerAndRPCServer(serverMux *http.ServeMux) { s.statusServer = &http.Server{Addr: s.statusAddr, Handler: CorsHandler{handler: serverMux, cfg: s.cfg}} s.grpcServer = NewRPCServer(s.cfg, s.dom, s) + service.RegisterChannelzServiceToServer(s.grpcServer) go util.WithRecovery(func() { err := s.grpcServer.Serve(grpcL) diff --git a/store/tikv/client_batch.go b/store/tikv/client_batch.go index f6a8fb24b305b..9ea06738d6057 100644 --- a/store/tikv/client_batch.go +++ b/store/tikv/client_batch.go @@ -277,7 +277,14 @@ func (c *batchCommandsClient) failPendingRequests(err error) { } func (c *batchCommandsClient) waitConnReady() (err error) { - dialCtx, cancel := context.WithTimeout(context.Background(), c.dialTimeout) + if c.conn.GetState() == connectivity.Ready { + return + } + start := time.Now() + defer func() { + metrics.TiKVBatchClientWaitEstablish.Observe(time.Since(start).Seconds()) + }() + dialCtx, cancel := context.WithTimeout(context.Background(), dialTimeout) for { s := c.conn.GetState() if s == connectivity.Ready { From cb4c1cdb1320509ea7737112a10607b2eff0df4c Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Sat, 3 Oct 2020 17:43:40 +0800 Subject: [PATCH 006/229] expression: avoid constant propagate for the hybrid types (#20258) (#20297) Signed-off-by: ti-srebot --- expression/constant_propagation.go | 7 ++++++- expression/integration_test.go | 19 +++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/expression/constant_propagation.go b/expression/constant_propagation.go index 264bb0dd5494a..f236ad722b3d0 100644 --- a/expression/constant_propagation.go +++ b/expression/constant_propagation.go @@ -228,7 +228,8 @@ func (s *propConstSolver) propagateColumnEQ() { if fun, ok := s.conditions[i].(*ScalarFunction); ok && fun.FuncName.L == ast.EQ { lCol, lOk := fun.GetArgs()[0].(*Column) rCol, rOk := fun.GetArgs()[1].(*Column) - if lOk && rOk && lCol.GetType().Collate == rCol.GetType().Collate { + // TODO: Enable hybrid types in ConstantPropagate. + if lOk && rOk && lCol.GetType().Collate == rCol.GetType().Collate && !lCol.GetType().Hybrid() && !rCol.GetType().Hybrid() { lID := s.getColID(lCol) rID := s.getColID(rCol) s.unionSet.Union(lID, rID) @@ -301,6 +302,10 @@ func (s *propConstSolver) pickNewEQConds(visited []bool) (retMapper map[int]*Con } continue } + // TODO: Enable hybrid types in ConstantPropagate. + if col.GetType().Hybrid() { + continue + } visited[i] = true updated, foreverFalse := s.tryToUpdateEQList(col, con) if foreverFalse { diff --git a/expression/integration_test.go b/expression/integration_test.go index 2f183607a47ce..69b62de08e757 100755 --- a/expression/integration_test.go +++ b/expression/integration_test.go @@ -7077,3 +7077,22 @@ func (s *testIntegrationSuite) TestIssue17476(c *C) { tk.MustQuery(`SELECT count(*) FROM (table_float JOIN table_int_float_varchar AS tmp3 ON (tmp3.col_varchar_6 AND NULL) IS NULL);`).Check(testkit.Rows("154")) tk.MustQuery(`SELECT * FROM (table_int_float_varchar AS tmp3) WHERE (col_varchar_6 AND NULL) IS NULL AND col_int_6=0;`).Check(testkit.Rows("13 0 -0.1 ")) } + +func (s *testIntegrationSuite) TestIssue20180(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t;") + tk.MustExec("drop table if exists t1;") + tk.MustExec("create table t(a enum('a', 'b'), b tinyint);") + tk.MustExec("create table t1(c varchar(20));") + tk.MustExec("insert into t values('b', 0);") + tk.MustExec("insert into t1 values('b');") + tk.MustQuery("select * from t, t1 where t.a= t1.c;").Check(testkit.Rows("b 0 b")) + tk.MustQuery("select * from t, t1 where t.b= t1.c;").Check(testkit.Rows("b 0 b")) + tk.MustQuery("select * from t, t1 where t.a = t1.c and t.b= t1.c;").Check(testkit.Rows("b 0 b")) + + tk.MustExec("drop table if exists t;") + tk.MustExec("create table t(a enum('a','b'));") + tk.MustExec("insert into t values('b');") + tk.MustQuery("select * from t where a > 1 and a = \"b\";").Check(testkit.Rows("b")) +} From 2e0965da63749eb58fe503d2fc2a8b5e4e6bc0a8 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Sat, 3 Oct 2020 17:56:40 +0800 Subject: [PATCH 007/229] distsql: add metrics for coprocessor cache (#19979) (#20293) Signed-off-by: ti-srebot --- distsql/select_result.go | 7 +++ executor/inspection_summary.go | 1 + infoschema/metric_table_def.go | 6 +++ metrics/distsql.go | 8 +++ metrics/grafana/tidb.json | 95 ++++++++++++++++++++++++++++++++++ metrics/metrics.go | 1 + store/tikv/coprocessor.go | 10 +++- 7 files changed, 126 insertions(+), 2 deletions(-) diff --git a/distsql/select_result.go b/distsql/select_result.go index 300996fddf517..91fac037a2ec8 100644 --- a/distsql/select_result.go +++ b/distsql/select_result.go @@ -43,6 +43,9 @@ import ( var ( errQueryInterrupted = terror.ClassExecutor.NewStd(errno.ErrQueryInterrupted) + + coprCacheHistogramHit = metrics.DistSQLCoprCacheHistogram.WithLabelValues("hit") + coprCacheHistogramMiss = metrics.DistSQLCoprCacheHistogram.WithLabelValues("miss") ) var ( @@ -153,6 +156,10 @@ func (r *selectResult) fetchResp(ctx context.Context) error { break } } + if r.stats != nil { + coprCacheHistogramHit.Observe(float64(r.stats.CoprCacheHitNum)) + coprCacheHistogramMiss.Observe(float64(len(r.stats.copRespTime) - int(r.stats.CoprCacheHitNum))) + } return nil } diff --git a/executor/inspection_summary.go b/executor/inspection_summary.go index 8ff8b7a4c64d2..37aef042a62f9 100644 --- a/executor/inspection_summary.go +++ b/executor/inspection_summary.go @@ -140,6 +140,7 @@ var inspectionSummaryRules = map[string][]string{ "tidb_distsql_partial_scan_key_num", "tidb_distsql_qps", "tidb_distsql_scan_key_num", + "tidb_distsql_copr_cache", "tidb_region_cache_ops", "tidb_batch_client_pending_req_count", "tidb_batch_client_unavailable_duration", diff --git a/infoschema/metric_table_def.go b/infoschema/metric_table_def.go index 2f4be0f0811d4..4e09f23bc40f5 100644 --- a/infoschema/metric_table_def.go +++ b/infoschema/metric_table_def.go @@ -2495,6 +2495,12 @@ var MetricTableMap = map[string]MetricTableDef{ Labels: []string{"instance", "type"}, Comment: "The total time of distsql execution(second)", }, + "tidb_distsql_copr_cache": { + Comment: "The quantile of TiDB distsql coprocessor cache", + PromQL: "histogram_quantile($QUANTILE, sum(rate(tidb_distsql_copr_cache_buckets{$LABEL_CONDITIONS}[$RANGE_DURATION])) by (type,instance))", + Labels: []string{"instance", "type"}, + Quantile: 0.95, + }, "tidb_execute_total_count": { PromQL: "sum(increase(tidb_session_execute_duration_seconds_count{$LABEL_CONDITIONS}[$RANGE_DURATION])) by (instance,sql_type)", Labels: []string{"instance", "sql_type"}, diff --git a/metrics/distsql.go b/metrics/distsql.go index 6074b63c3e82f..9eef1c62f0310 100644 --- a/metrics/distsql.go +++ b/metrics/distsql.go @@ -52,4 +52,12 @@ var ( Help: "number of partial results for each query.", }, ) + DistSQLCoprCacheHistogram = prometheus.NewHistogramVec( + prometheus.HistogramOpts{ + Namespace: "tidb", + Subsystem: "distsql", + Name: "copr_cache", + Help: "coprocessor cache hit, evict and miss number", + Buckets: prometheus.ExponentialBuckets(1, 2, 16), + }, []string{LblType}) ) diff --git a/metrics/grafana/tidb.json b/metrics/grafana/tidb.json index f9ea9f5f383a8..9da8590c56178 100644 --- a/metrics/grafana/tidb.json +++ b/metrics/grafana/tidb.json @@ -5897,6 +5897,101 @@ "alignLevel": null } }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "${DS_TEST-CLUSTER}", + "description": "TiDB coprocessor cache hit, evict and miss number", + "editable": true, + "error": false, + "fill": 1, + "grid": {}, + "gridPos": { + "h": 7, + "w": 8, + "x": 16, + "y": 163 + }, + "id": 175, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": true, + "min": false, + "rightSide": true, + "show": true, + "sort": "avg", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 2, + "links": [], + "nullPointMode": "null as zero", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "histogram_quantile(1, sum(rate(tidb_distsql_copr_cache_buckets[1m])) by (type))", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{type}}", + "refId": "A", + "step": 40 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Coprocessor Cache", + "tooltip": { + "msResolution": false, + "shared": true, + "sort": 2, + "value_type": "cumulative" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "none", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, { "aliasColors": {}, "bars": false, diff --git a/metrics/metrics.go b/metrics/metrics.go index e8f6d22d87b2d..65cc4d3491fdb 100644 --- a/metrics/metrics.go +++ b/metrics/metrics.go @@ -76,6 +76,7 @@ func RegisterMetrics() { prometheus.MustRegister(DDLWorkerHistogram) prometheus.MustRegister(DeploySyncerHistogram) prometheus.MustRegister(DistSQLPartialCountHistogram) + prometheus.MustRegister(DistSQLCoprCacheHistogram) prometheus.MustRegister(DistSQLQueryHistogram) prometheus.MustRegister(DistSQLScanKeysHistogram) prometheus.MustRegister(DistSQLScanKeysPartialHistogram) diff --git a/store/tikv/coprocessor.go b/store/tikv/coprocessor.go index c00b6416b7f6f..ba6ecaac67f75 100644 --- a/store/tikv/coprocessor.go +++ b/store/tikv/coprocessor.go @@ -45,8 +45,11 @@ import ( "go.uber.org/zap" ) -var tikvTxnRegionsNumHistogramWithCoprocessor = metrics.TiKVTxnRegionsNumHistogram.WithLabelValues("coprocessor") -var tikvTxnRegionsNumHistogramWithBatchCoprocessor = metrics.TiKVTxnRegionsNumHistogram.WithLabelValues("batch_coprocessor") +var ( + tikvTxnRegionsNumHistogramWithCoprocessor = metrics.TiKVTxnRegionsNumHistogram.WithLabelValues("coprocessor") + tikvTxnRegionsNumHistogramWithBatchCoprocessor = metrics.TiKVTxnRegionsNumHistogram.WithLabelValues("batch_coprocessor") + coprCacheHistogramEvict = metrics.DistSQLCoprCacheHistogram.WithLabelValues("evict") +) // CopClient is coprocessor client. type CopClient struct { @@ -719,6 +722,9 @@ func (worker *copIteratorWorker) handleTask(ctx context.Context, task *copTask, remainTasks = remainTasks[1:] } } + if worker.store.coprCache != nil && worker.store.coprCache.cache.Metrics != nil { + coprCacheHistogramEvict.Observe(float64(worker.store.coprCache.cache.Metrics.KeysEvicted())) + } } // handleTaskOnce handles single copTask, successful results are send to channel. From e50b78e51a6becc68de04f4ddad0040b9228784f Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Sat, 3 Oct 2020 18:10:40 +0800 Subject: [PATCH 008/229] statistics: fix the display of bounds for indexes with `date/time` columns. (#19961) (#20074) Signed-off-by: ti-srebot --- executor/analyze.go | 2 +- executor/show_stats.go | 16 +++++++---- executor/show_stats_test.go | 27 +++++++++++++++++++ statistics/feedback.go | 6 ++--- statistics/histogram.go | 13 ++++++--- statistics/histogram_test.go | 2 +- util/codec/codec.go | 52 ++++++++++++++++++++++++++++++++++-- util/codec/codec_test.go | 6 ++--- 8 files changed, 105 insertions(+), 19 deletions(-) diff --git a/executor/analyze.go b/executor/analyze.go index 6d1cc07d827fe..fbd0d963e6042 100755 --- a/executor/analyze.go +++ b/executor/analyze.go @@ -1222,7 +1222,7 @@ type analyzeIndexIncrementalExec struct { func analyzeIndexIncremental(idxExec *analyzeIndexIncrementalExec) analyzeResult { startPos := idxExec.oldHist.GetUpper(idxExec.oldHist.Len() - 1) - values, _, err := codec.DecodeRange(startPos.GetBytes(), len(idxExec.idxInfo.Columns)) + values, _, err := codec.DecodeRange(startPos.GetBytes(), len(idxExec.idxInfo.Columns), nil, nil) if err != nil { return analyzeResult{Err: err, job: idxExec.job} } diff --git a/executor/show_stats.go b/executor/show_stats.go index 0c1461821528c..79b1c97a7dfb7 100644 --- a/executor/show_stats.go +++ b/executor/show_stats.go @@ -139,14 +139,20 @@ func (e *ShowExec) appendTableForStatsBuckets(dbName, tblName, partitionName str if statsTbl.Pseudo { return nil } + colNameToType := make(map[string]byte, len(statsTbl.Columns)) for _, col := range statsTbl.Columns { - err := e.bucketsToRows(dbName, tblName, partitionName, col.Info.Name.O, 0, col.Histogram) + err := e.bucketsToRows(dbName, tblName, partitionName, col.Info.Name.O, 0, col.Histogram, nil) if err != nil { return errors.Trace(err) } + colNameToType[col.Info.Name.O] = col.Histogram.Tp.Tp } for _, idx := range statsTbl.Indices { - err := e.bucketsToRows(dbName, tblName, partitionName, idx.Info.Name.O, len(idx.Info.Columns), idx.Histogram) + idxColumnTypes := make([]byte, 0, len(idx.Info.Columns)) + for i := 0; i < len(idx.Info.Columns); i++ { + idxColumnTypes = append(idxColumnTypes, colNameToType[idx.Info.Columns[i].Name.O]) + } + err := e.bucketsToRows(dbName, tblName, partitionName, idx.Info.Name.O, len(idx.Info.Columns), idx.Histogram, idxColumnTypes) if err != nil { return errors.Trace(err) } @@ -156,17 +162,17 @@ func (e *ShowExec) appendTableForStatsBuckets(dbName, tblName, partitionName str // bucketsToRows converts histogram buckets to rows. If the histogram is built from index, then numOfCols equals to number // of index columns, else numOfCols is 0. -func (e *ShowExec) bucketsToRows(dbName, tblName, partitionName, colName string, numOfCols int, hist statistics.Histogram) error { +func (e *ShowExec) bucketsToRows(dbName, tblName, partitionName, colName string, numOfCols int, hist statistics.Histogram, idxColumnTypes []byte) error { isIndex := 0 if numOfCols > 0 { isIndex = 1 } for i := 0; i < hist.Len(); i++ { - lowerBoundStr, err := statistics.ValueToString(hist.GetLower(i), numOfCols) + lowerBoundStr, err := statistics.ValueToString(e.ctx.GetSessionVars(), hist.GetLower(i), numOfCols, idxColumnTypes) if err != nil { return errors.Trace(err) } - upperBoundStr, err := statistics.ValueToString(hist.GetUpper(i), numOfCols) + upperBoundStr, err := statistics.ValueToString(e.ctx.GetSessionVars(), hist.GetUpper(i), numOfCols, idxColumnTypes) if err != nil { return errors.Trace(err) } diff --git a/executor/show_stats_test.go b/executor/show_stats_test.go index 1aae306c9ef7a..87d667a886a37 100644 --- a/executor/show_stats_test.go +++ b/executor/show_stats_test.go @@ -82,6 +82,33 @@ func (s *testShowStatsSuite) TestShowStatsBuckets(c *C) { result.Check(testkit.Rows("test t a 0 0 1 1 1 1", "test t b 0 0 1 1 1 1", "test t idx 1 0 1 1 (1, 1) (1, 1)")) result = tk.MustQuery("show stats_buckets where column_name = 'idx'") result.Check(testkit.Rows("test t idx 1 0 1 1 (1, 1) (1, 1)")) + + tk.MustExec("drop table t") + tk.MustExec("create table t (`a` datetime, `b` int, key `idx`(`a`, `b`))") + tk.MustExec("insert into t values (\"2020-01-01\", 1)") + tk.MustExec("analyze table t") + result = tk.MustQuery("show stats_buckets").Sort() + result.Check(testkit.Rows("test t a 0 0 1 1 2020-01-01 00:00:00 2020-01-01 00:00:00", "test t b 0 0 1 1 1 1", "test t idx 1 0 1 1 (2020-01-01 00:00:00, 1) (2020-01-01 00:00:00, 1)")) + result = tk.MustQuery("show stats_buckets where column_name = 'idx'") + result.Check(testkit.Rows("test t idx 1 0 1 1 (2020-01-01 00:00:00, 1) (2020-01-01 00:00:00, 1)")) + + tk.MustExec("drop table t") + tk.MustExec("create table t (`a` date, `b` int, key `idx`(`a`, `b`))") + tk.MustExec("insert into t values (\"2020-01-01\", 1)") + tk.MustExec("analyze table t") + result = tk.MustQuery("show stats_buckets").Sort() + result.Check(testkit.Rows("test t a 0 0 1 1 2020-01-01 2020-01-01", "test t b 0 0 1 1 1 1", "test t idx 1 0 1 1 (2020-01-01, 1) (2020-01-01, 1)")) + result = tk.MustQuery("show stats_buckets where column_name = 'idx'") + result.Check(testkit.Rows("test t idx 1 0 1 1 (2020-01-01, 1) (2020-01-01, 1)")) + + tk.MustExec("drop table t") + tk.MustExec("create table t (`a` timestamp, `b` int, key `idx`(`a`, `b`))") + tk.MustExec("insert into t values (\"2020-01-01\", 1)") + tk.MustExec("analyze table t") + result = tk.MustQuery("show stats_buckets").Sort() + result.Check(testkit.Rows("test t a 0 0 1 1 2020-01-01 00:00:00 2020-01-01 00:00:00", "test t b 0 0 1 1 1 1", "test t idx 1 0 1 1 (2020-01-01 00:00:00, 1) (2020-01-01 00:00:00, 1)")) + result = tk.MustQuery("show stats_buckets where column_name = 'idx'") + result.Check(testkit.Rows("test t idx 1 0 1 1 (2020-01-01 00:00:00, 1) (2020-01-01 00:00:00, 1)")) } func (s *testShowStatsSuite) TestShowStatsHasNullValue(c *C) { diff --git a/statistics/feedback.go b/statistics/feedback.go index 545d5875049f0..fb709eaaf3893 100644 --- a/statistics/feedback.go +++ b/statistics/feedback.go @@ -182,11 +182,11 @@ func (q *QueryFeedback) DecodeToRanges(isIndex bool) ([]*ranger.Range, error) { if isIndex { var err error // As we do not know the origin length, just use a custom value here. - lowVal, _, err = codec.DecodeRange(low.GetBytes(), 4) + lowVal, _, err = codec.DecodeRange(low.GetBytes(), 4, nil, nil) if err != nil { return nil, errors.Trace(err) } - highVal, _, err = codec.DecodeRange(high.GetBytes(), 4) + highVal, _, err = codec.DecodeRange(high.GetBytes(), 4, nil, nil) if err != nil { return nil, errors.Trace(err) } @@ -911,7 +911,7 @@ func ConvertDatumsType(vals []types.Datum, ft *types.FieldType, loc *time.Locati } func decodeColumnBounds(data []byte, ft *types.FieldType) ([]types.Datum, error) { - vals, _, err := codec.DecodeRange(data, 1) + vals, _, err := codec.DecodeRange(data, 1, nil, nil) if err != nil { return nil, err } diff --git a/statistics/histogram.go b/statistics/histogram.go index cbc0c4888e285..66e8f9f3f3677 100644 --- a/statistics/histogram.go +++ b/statistics/histogram.go @@ -27,6 +27,7 @@ import ( "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/kv" "github.com/pingcap/tidb/sessionctx/stmtctx" + "github.com/pingcap/tidb/sessionctx/variable" "github.com/pingcap/tidb/tablecodec" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/chunk" @@ -268,12 +269,16 @@ func ResetAnalyzeFlag(flag int64) int64 { // ValueToString converts a possible encoded value to a formatted string. If the value is encoded, then // idxCols equals to number of origin values, else idxCols is 0. -func ValueToString(value *types.Datum, idxCols int) (string, error) { +func ValueToString(vars *variable.SessionVars, value *types.Datum, idxCols int, idxColumnTypes []byte) (string, error) { if idxCols == 0 { return value.ToString() } + var loc *time.Location + if vars != nil { + loc = vars.Location() + } // Ignore the error and treat remaining part that cannot decode successfully as bytes. - decodedVals, remained, err := codec.DecodeRange(value.GetBytes(), idxCols) + decodedVals, remained, err := codec.DecodeRange(value.GetBytes(), idxCols, idxColumnTypes, loc) // Ignore err explicit to pass errcheck. _ = err if len(remained) > 0 { @@ -285,9 +290,9 @@ func ValueToString(value *types.Datum, idxCols int) (string, error) { // BucketToString change the given bucket to string format. func (hg *Histogram) BucketToString(bktID, idxCols int) string { - upperVal, err := ValueToString(hg.GetUpper(bktID), idxCols) + upperVal, err := ValueToString(nil, hg.GetUpper(bktID), idxCols, nil) terror.Log(errors.Trace(err)) - lowerVal, err := ValueToString(hg.GetLower(bktID), idxCols) + lowerVal, err := ValueToString(nil, hg.GetLower(bktID), idxCols, nil) terror.Log(errors.Trace(err)) return fmt.Sprintf("num: %d lower_bound: %s upper_bound: %s repeats: %d", hg.bucketCount(bktID), lowerVal, upperVal, hg.Buckets[bktID].Repeat) } diff --git a/statistics/histogram_test.go b/statistics/histogram_test.go index cc22d2f0762f6..cd0196501a1d4 100644 --- a/statistics/histogram_test.go +++ b/statistics/histogram_test.go @@ -135,7 +135,7 @@ func (s *testStatisticsSuite) TestValueToString4InvalidKey(c *C) { // Append invalid flag. bytes = append(bytes, 20) datum := types.NewDatum(bytes) - res, err := ValueToString(&datum, 3) + res, err := ValueToString(nil, &datum, 3, nil) c.Assert(err, IsNil) c.Assert(res, Equals, "(1, 0.5, \x14)") } diff --git a/util/codec/codec.go b/util/codec/codec.go index 597701b04bae3..79d3d07ddde90 100644 --- a/util/codec/codec.go +++ b/util/codec/codec.go @@ -724,7 +724,8 @@ func Decode(b []byte, size int) ([]types.Datum, error) { // DecodeRange decodes the range values from a byte slice that generated by EncodeKey. // It handles some special values like `MinNotNull` and `MaxValueDatum`. -func DecodeRange(b []byte, size int) ([]types.Datum, []byte, error) { +// loc can be nil and only used in when the corresponding type is `mysql.TypeTimestamp`. +func DecodeRange(b []byte, size int, idxColumnTypes []byte, loc *time.Location) ([]types.Datum, []byte, error) { if len(b) < 1 { return nil, b, errors.New("invalid encoded key: length of key is zero") } @@ -734,13 +735,26 @@ func DecodeRange(b []byte, size int) ([]types.Datum, []byte, error) { values = make([]types.Datum, 0, size) ) + i := 0 for len(b) > 1 { var d types.Datum - b, d, err = DecodeOne(b) + if idxColumnTypes == nil { + b, d, err = DecodeOne(b) + } else { + if i >= len(idxColumnTypes) { + return values, b, errors.New("invalid length of index's columns") + } + if idxColumnTypes[i] == mysql.TypeDatetime || idxColumnTypes[i] == mysql.TypeTimestamp || idxColumnTypes[i] == mysql.TypeDate { + b, d, err = DecodeAsDateTime(b, idxColumnTypes[i], loc) + } else { + b, d, err = DecodeOne(b) + } + } if err != nil { return values, b, errors.Trace(err) } values = append(values, d) + i++ } if len(b) == 1 { @@ -833,6 +847,40 @@ func DecodeOne(b []byte) (remain []byte, d types.Datum, err error) { return b, d, nil } +// DecodeAsDateTime decodes on datum from []byte of `KindMysqlTime`. +func DecodeAsDateTime(b []byte, tp byte, loc *time.Location) (remain []byte, d types.Datum, err error) { + if len(b) < 1 { + return nil, d, errors.New("invalid encoded key") + } + flag := b[0] + b = b[1:] + switch flag { + case uintFlag: + var v uint64 + b, v, err = DecodeUint(b) + if err != nil { + return b, d, err + } + t := types.NewTime(types.ZeroCoreTime, tp, 0) + err = t.FromPackedUint(v) + if err == nil { + if tp == mysql.TypeTimestamp && !t.IsZero() && loc != nil { + err = t.ConvertTimeZone(time.UTC, loc) + if err != nil { + return b, d, err + } + } + d.SetMysqlTime(t) + } + default: + return b, d, errors.Errorf("invalid encoded key flag %v", flag) + } + if err != nil { + return b, d, errors.Trace(err) + } + return b, d, nil +} + // CutOne cuts the first encoded value from b. // It will return the first encoded item and the remains as byte slice. func CutOne(b []byte) (data []byte, remain []byte, err error) { diff --git a/util/codec/codec_test.go b/util/codec/codec_test.go index eb5ebad971fc7..9d6ed77263e84 100644 --- a/util/codec/codec_test.go +++ b/util/codec/codec_test.go @@ -1013,14 +1013,14 @@ func chunkForTest(c *C, sc *stmtctx.StatementContext, datums []types.Datum, tps } func (s *testCodecSuite) TestDecodeRange(c *C) { - _, _, err := DecodeRange(nil, 0) + _, _, err := DecodeRange(nil, 0, nil, nil) c.Assert(err, NotNil) datums := types.MakeDatums(1, "abc", 1.1, []byte("def")) rowData, err := EncodeValue(nil, nil, datums...) c.Assert(err, IsNil) - datums1, _, err := DecodeRange(rowData, len(datums)) + datums1, _, err := DecodeRange(rowData, len(datums), nil, nil) c.Assert(err, IsNil) for i, datum := range datums1 { cmp, err := datum.CompareDatum(nil, &datums[i]) @@ -1030,7 +1030,7 @@ func (s *testCodecSuite) TestDecodeRange(c *C) { for _, b := range []byte{NilFlag, bytesFlag, maxFlag, maxFlag + 1} { newData := append(rowData, b) - _, _, err := DecodeRange(newData, len(datums)+1) + _, _, err := DecodeRange(newData, len(datums)+1, nil, nil) c.Assert(err, IsNil) } } From 9518e90887c0b38eb11fdd7c014a956c9d0ed230 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Sat, 3 Oct 2020 18:24:32 +0800 Subject: [PATCH 009/229] types: fix FLOAT data overflow check (#20067) (#20158) (#20252) --- executor/insert_test.go | 11 +++++++++++ types/datum.go | 2 +- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/executor/insert_test.go b/executor/insert_test.go index 1f19a66cb82c5..6f0c1b0e01dbe 100644 --- a/executor/insert_test.go +++ b/executor/insert_test.go @@ -891,6 +891,17 @@ func (s *testSuite3) TestDMLCast(c *C) { tk.MustQuery(`select * from t`).Check(testkit.Rows()) } +func (s *testSuite3) TestInsertFloatOverflow(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk.MustExec(`drop table if exists t;`) + tk.MustExec("create table t(col1 FLOAT, col2 FLOAT(10,2), col3 DOUBLE, col4 DOUBLE(10,2), col5 DECIMAL, col6 DECIMAL(10,2));") + _, err := tk.Exec("insert into t values (-3.402823466E+68, -34028234.6611, -1.7976931348623157E+308, -17976921.34, -9999999999, -99999999.99);") + c.Assert(err.Error(), Equals, "[types:1264]Out of range value for column 'col1' at row 1") + _, err = tk.Exec("insert into t values (-34028234.6611, -3.402823466E+68, -1.7976931348623157E+308, -17976921.34, -9999999999, -99999999.99);") + c.Assert(err.Error(), Equals, "[types:1264]Out of range value for column 'col2' at row 1") +} + // There is a potential issue in MySQL: when the value of auto_increment_offset is greater // than that of auto_increment_increment, the value of auto_increment_offset is ignored // (https://dev.mysql.com/doc/refman/8.0/en/replication-options-master.html#sysvar_auto_increment_increment), diff --git a/types/datum.go b/types/datum.go index 4c1958a953b77..c0c747969ed78 100644 --- a/types/datum.go +++ b/types/datum.go @@ -897,7 +897,7 @@ func ProduceFloatWithSpecifiedTp(f float64, target *FieldType, sc *stmtctx.State return f, errors.Trace(err) } } - if mysql.HasUnsignedFlag(target.Flag) && f < 0 { + if (mysql.HasUnsignedFlag(target.Flag) && f < 0) || (target.Tp == mysql.TypeFloat && (f > math.MaxFloat32 || f < -math.MaxFloat32)) { return 0, overflow(f, target.Tp) } return f, nil From 74fac6050bd51feb004342ca5218c057e84881d2 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Sat, 3 Oct 2020 18:54:40 +0800 Subject: [PATCH 010/229] planner: fix wrong message when `group by` a window or agg func with an `as` (#17572) (#20249) Signed-off-by: ti-srebot --- planner/core/logical_plan_builder.go | 12 ++++++------ planner/core/logical_plan_test.go | 4 +++- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/planner/core/logical_plan_builder.go b/planner/core/logical_plan_builder.go index 6ec466b941b24..ff5e68e9730e6 100644 --- a/planner/core/logical_plan_builder.go +++ b/planner/core/logical_plan_builder.go @@ -1823,12 +1823,12 @@ func (g *gbyResolver) Leave(inNode ast.Node) (ast.Node, bool) { } ret := g.fields[pos-1].Expr ret.Accept(extractor) - if len(extractor.AggFuncs) != 0 { - g.err = ErrWrongGroupField.GenWithStackByArgs(g.fields[pos-1].Text()) - return inNode, false - } - if _, ok := ret.(*ast.WindowFuncExpr); ok { - g.err = ErrWrongGroupField.GenWithStackByArgs(g.fields[pos-1].Text()) + if len(extractor.AggFuncs) != 0 || ast.HasWindowFlag(ret) { + fieldName := g.fields[pos-1].AsName.String() + if fieldName == "" { + fieldName = g.fields[pos-1].Text() + } + g.err = ErrWrongGroupField.GenWithStackByArgs(fieldName) return inNode, false } return ret, true diff --git a/planner/core/logical_plan_test.go b/planner/core/logical_plan_test.go index c32dc29fd3220..9b541555980c5 100644 --- a/planner/core/logical_plan_test.go +++ b/planner/core/logical_plan_test.go @@ -1238,8 +1238,10 @@ func (s *testPlanSuite) TestNameResolver(c *C) { {"delete a from (select * from t ) as a, t", "[planner:1288]The target table a of the DELETE is not updatable"}, {"delete b from (select * from t ) as a, t", "[planner:1109]Unknown table 'b' in MULTI DELETE"}, {"select '' as fakeCol from t group by values(fakeCol)", "[planner:1054]Unknown column '' in 'VALUES() function'"}, - {"update t, (select * from ht) as b set b.a = t.a", "[planner:1288]The target table b of the UPDATE is not updatable"}, + {"update t, (select * from t) as b set b.a = t.a", "[planner:1288]The target table b of the UPDATE is not updatable"}, {"select row_number() over () from t group by 1", "[planner:1056]Can't group on 'row_number() over ()'"}, + {"select row_number() over () as x from t group by 1", "[planner:1056]Can't group on 'x'"}, + {"select sum(a) as x from t group by 1", "[planner:1056]Can't group on 'x'"}, } ctx := context.Background() From b782b0179465db768da3af0d2e717a93276089fd Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Sat, 3 Oct 2020 19:21:45 +0800 Subject: [PATCH 011/229] executor: fix a bug that the generated column does ... (#20193) (#20216) --- executor/executor.go | 4 ++++ executor/union_scan.go | 5 +++++ expression/integration_test.go | 15 +++++++++++++++ 3 files changed, 24 insertions(+) diff --git a/executor/executor.go b/executor/executor.go index c30fb18846637..21f57bf5a6176 100644 --- a/executor/executor.go +++ b/executor/executor.go @@ -1719,6 +1719,10 @@ func FillVirtualColumnValue(virtualRetTypes []*types.FieldType, virtualColumnInd if err != nil { return err } + // Handle the bad null error. + if (mysql.HasNotNullFlag(columns[idx].Flag) || mysql.HasPreventNullInsertFlag(columns[idx].Flag)) && castDatum.IsNull() { + castDatum = table.GetZeroValue(columns[idx]) + } virCols.AppendDatum(i, &castDatum) } req.SetCol(idx, virCols.Column(i)) diff --git a/executor/union_scan.go b/executor/union_scan.go index 917e96eb357cd..71b1b968970aa 100644 --- a/executor/union_scan.go +++ b/executor/union_scan.go @@ -19,6 +19,7 @@ import ( "sync" "github.com/pingcap/parser/model" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/expression" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/table" @@ -180,6 +181,10 @@ func (us *UnionScanExec) Next(ctx context.Context, req *chunk.Chunk) error { if err != nil { return err } + // Handle the bad null error. + if (mysql.HasNotNullFlag(us.columns[idx].Flag) || mysql.HasPreventNullInsertFlag(us.columns[idx].Flag)) && castDatum.IsNull() { + castDatum = table.GetZeroValue(us.columns[idx]) + } mutableRow.SetDatum(idx, castDatum) } diff --git a/expression/integration_test.go b/expression/integration_test.go index 69b62de08e757..7c552226a5202 100755 --- a/expression/integration_test.go +++ b/expression/integration_test.go @@ -7044,6 +7044,21 @@ func (s *testIntegrationSerialSuite) TestIssue17233(c *C) { tk.MustQuery("SELECT view_10.col_1 FROM view_4 JOIN view_10").Check(testkit.Rows("16", "16", "16", "16", "16", "18", "18", "18", "18", "18", "19", "19", "19", "19", "19")) } +func (s *testIntegrationSuite) TestIssue17767(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t0;") + tk.MustExec("CREATE TABLE t0(c0 INTEGER AS (NULL) NOT NULL, c1 INT);") + tk.MustExec("CREATE INDEX i0 ON t0(c0, c1);") + tk.MustExec("INSERT IGNORE INTO t0(c1) VALUES (0);") + tk.MustQuery("SELECT * FROM t0").Check(testkit.Rows("0 0")) + + tk.MustExec("begin") + tk.MustExec("INSERT IGNORE INTO t0(c1) VALUES (0);") + tk.MustQuery("SELECT * FROM t0").Check(testkit.Rows("0 0", "0 0")) + tk.MustExec("rollback") +} + func (s *testIntegrationSuite) TestIssue19596(c *C) { tk := testkit.NewTestKit(c, s.store) tk.MustExec("use test") From 4d54559b82136a2f0ef23dc3402b3cb5439f1f29 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Sat, 3 Oct 2020 19:35:40 +0800 Subject: [PATCH 012/229] sessionctx/variable: fix cannot select session scope ScopeNone variable (#19584) (#19944) Signed-off-by: ti-srebot --- session/session_test.go | 7 +++---- sessionctx/variable/varsutil.go | 2 +- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/session/session_test.go b/session/session_test.go index 9f0d9568d5ebb..7584d5c8b935c 100644 --- a/session/session_test.go +++ b/session/session_test.go @@ -685,10 +685,9 @@ func (s *testSessionSuite) TestGetSysVariables(c *C) { // Test ScopeNone tk.MustExec("select @@performance_schema_max_mutex_classes") tk.MustExec("select @@global.performance_schema_max_mutex_classes") - _, err = tk.Exec("select @@session.performance_schema_max_mutex_classes") - c.Assert(terror.ErrorEqual(err, variable.ErrIncorrectScope), IsTrue, Commentf("err %v", err)) - _, err = tk.Exec("select @@local.performance_schema_max_mutex_classes") - c.Assert(terror.ErrorEqual(err, variable.ErrIncorrectScope), IsTrue, Commentf("err %v", err)) + // For issue 19524, test + tk.MustExec("select @@session.performance_schema_max_mutex_classes") + tk.MustExec("select @@local.performance_schema_max_mutex_classes") } func (s *testSessionSuite) TestRetryResetStmtCtx(c *C) { diff --git a/sessionctx/variable/varsutil.go b/sessionctx/variable/varsutil.go index 101127c68fad6..d7cf6b8e49c40 100644 --- a/sessionctx/variable/varsutil.go +++ b/sessionctx/variable/varsutil.go @@ -228,7 +228,7 @@ func ValidateGetSystemVar(name string, isGlobal bool) error { return ErrUnknownSystemVar.GenWithStackByArgs(name) } switch sysVar.Scope { - case ScopeGlobal, ScopeNone: + case ScopeGlobal: if !isGlobal { return ErrIncorrectScope.GenWithStackByArgs(name, "GLOBAL") } From 6efcee0abf3b3b43ff5d009128e342660bcc054e Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Sat, 3 Oct 2020 20:05:40 +0800 Subject: [PATCH 013/229] DDL: check table-level check constraint when create table (#20202) (#20214) Signed-off-by: ti-srebot Signed-off-by: AilinKid <314806019@qq.com> --- ddl/db_test.go | 13 +++++++++++++ ddl/ddl_api.go | 6 ++++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/ddl/db_test.go b/ddl/db_test.go index 7e26c838862c5..0af29701a0853 100644 --- a/ddl/db_test.go +++ b/ddl/db_test.go @@ -4604,6 +4604,19 @@ func (s *testDBSuite2) TestDDLWithInvalidTableInfo(c *C) { c.Assert(err.Error(), Equals, "[parser:1064]You have an error in your SQL syntax; check the manual that corresponds to your TiDB version for the right syntax to use line 1 column 94 near \"then (b / a) end));\" ") } +func (s *testDBSuite7) TestCreateTableIngoreCheckConstraint(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use " + s.schemaName) + tk.MustExec("drop table if exists table_constraint_check") + tk.MustExec("CREATE TABLE admin_user (enable bool, CHECK (enable IN (0, 1)));") + c.Assert(tk.Se.GetSessionVars().StmtCtx.WarningCount(), Equals, uint16(1)) + tk.MustQuery("show warnings").Check(testutil.RowsWithSep("|", "Warning|1064|You have an error in your SQL syntax; check the manual that corresponds to your TiDB version for the right syntax to use line 1 column 63 near \");\"The CHECK clause is parsed but ignored by all storage engines. ")) + tk.MustQuery("show create table admin_user").Check(testutil.RowsWithSep("|", ""+ + "admin_user CREATE TABLE `admin_user` (\n"+ + " `enable` tinyint(1) DEFAULT NULL\n"+ + ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin")) +} + func (s *testDBSuite6) TestAlterOrderBy(c *C) { s.tk = testkit.NewTestKit(c, s.store) s.tk.MustExec("use " + s.schemaName) diff --git a/ddl/ddl_api.go b/ddl/ddl_api.go index b5da39a3b83ee..0da443b5c99ce 100644 --- a/ddl/ddl_api.go +++ b/ddl/ddl_api.go @@ -1215,8 +1215,10 @@ func buildTableInfo( } if constr.Tp == ast.ConstraintFulltext { - sc := ctx.GetSessionVars().StmtCtx - sc.AppendWarning(ErrTableCantHandleFt) + ctx.GetSessionVars().StmtCtx.AppendWarning(ErrTableCantHandleFt.GenWithStackByArgs()) + continue + } + if constr.Tp == ast.ConstraintCheck { continue } // build index info. From 8a406016dbb9961ad3205d8ac59c0f40f46222a7 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Sat, 3 Oct 2020 20:19:40 +0800 Subject: [PATCH 014/229] expression: fix inaccurate error info for year column out of range (#18871) (#20170) Signed-off-by: ti-srebot --- executor/insert_test.go | 5 +++++ executor/write_test.go | 2 +- types/datum.go | 2 +- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/executor/insert_test.go b/executor/insert_test.go index 6f0c1b0e01dbe..24d8a12184c3f 100644 --- a/executor/insert_test.go +++ b/executor/insert_test.go @@ -271,6 +271,11 @@ func (s *testSuite3) TestInsertWrongValueForField(c *C) { tk.MustExec(`create table t1(a bigint);`) _, err := tk.Exec(`insert into t1 values("asfasdfsajhlkhlksdaf");`) c.Assert(terror.ErrorEqual(err, table.ErrTruncatedWrongValueForField), IsTrue) + + tk.MustExec(`drop table if exists t;`) + tk.MustExec(`create table t (a year);`) + _, err = tk.Exec(`insert into t values(2156);`) + c.Assert(err.Error(), Equals, `[types:1264]Out of range value for column 'a' at row 1`) } func (s *testSuite3) TestInsertDateTimeWithTimeZone(c *C) { diff --git a/executor/write_test.go b/executor/write_test.go index d024abbc2ba1b..e00b5543bb1b5 100644 --- a/executor/write_test.go +++ b/executor/write_test.go @@ -1469,7 +1469,7 @@ func (s *testSuite8) TestUpdate(c *C) { tk.MustExec("drop table t") tk.MustExec("CREATE TABLE `t` ( `c1` year DEFAULT NULL, `c2` year DEFAULT NULL, `c3` date DEFAULT NULL, `c4` datetime DEFAULT NULL, KEY `idx` (`c1`,`c2`))") _, err = tk.Exec("UPDATE t SET c2=16777215 WHERE c1>= -8388608 AND c1 < -9 ORDER BY c1 LIMIT 2") - c.Assert(err.Error(), Equals, "cannot convert datum from bigint to type year.") + c.Assert(err.Error(), Equals, "[types:1690]DECIMAL value is out of range in '(4, 0)'") tk.MustExec("update (select * from t) t set c1 = 1111111") diff --git a/types/datum.go b/types/datum.go index c0c747969ed78..e9a14008d7fd9 100644 --- a/types/datum.go +++ b/types/datum.go @@ -1356,7 +1356,7 @@ func (d *Datum) convertToMysqlYear(sc *stmtctx.StatementContext, target *FieldTy } y, err = AdjustYear(y, adjust) if err != nil { - _, err = invalidConv(d, target.Tp) + err = ErrOverflow.GenWithStackByArgs("DECIMAL", fmt.Sprintf("(%d, %d)", target.Flen, target.Decimal)) } ret.SetInt64(y) return ret, err From 81388ab89cd6af68cedc76077db8e2ff95a63c4d Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Sat, 3 Oct 2020 20:33:40 +0800 Subject: [PATCH 015/229] trace: tee logs to runtime/trace output (#19994) (#20182) Signed-off-by: ti-srebot --- executor/adapter.go | 4 ++++ server/conn.go | 9 ++++++++- util/logutil/log.go | 38 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 50 insertions(+), 1 deletion(-) diff --git a/executor/adapter.go b/executor/adapter.go index 226527b5373ab..26296ba23bd1b 100644 --- a/executor/adapter.go +++ b/executor/adapter.go @@ -17,6 +17,7 @@ import ( "context" "fmt" "math" + "runtime/trace" "strconv" "strings" "sync/atomic" @@ -882,6 +883,9 @@ func (a *ExecStmt) LogSlowQuery(txnTS uint64, succ bool, hasMoreResults bool) { if _, ok := a.StmtNode.(*ast.CommitStmt); ok { slowItems.PrevStmt = sessVars.PrevStmt.String() } + if trace.IsEnabled() { + trace.Log(a.GoCtx, "details", sessVars.SlowLogFormat(slowItems)) + } if costTime < threshold { logutil.SlowQueryLogger.Debug(sessVars.SlowLogFormat(slowItems)) } else { diff --git a/server/conn.go b/server/conn.go index 3de1729cc1759..91fa1fa145b04 100644 --- a/server/conn.go +++ b/server/conn.go @@ -50,6 +50,7 @@ import ( "sync" "sync/atomic" "time" + "unsafe" "github.com/opentracing/opentracing-go" "github.com/pingcap/errors" @@ -915,8 +916,14 @@ func (cc *clientConn) dispatch(ctx context.Context, data []byte) error { if len(sqlType) > 0 { var task *trace.Task ctx, task = trace.NewTask(ctx, sqlType) - trace.Log(ctx, "sql", lc.String()) defer task.End() + + trace.Log(ctx, "sql", lc.String()) + ctx = logutil.WithTraceLogger(ctx, cc.connectionID) + + taskID := *(*uint64)(unsafe.Pointer(task)) + ctx = pprof.WithLabels(ctx, pprof.Labels("trace", strconv.FormatUint(taskID, 10))) + pprof.SetGoroutineLabels(ctx) } } token := cc.server.getToken() diff --git a/util/logutil/log.go b/util/logutil/log.go index 270c70406e0ce..d3a100103b526 100644 --- a/util/logutil/log.go +++ b/util/logutil/log.go @@ -20,6 +20,7 @@ import ( "os" "path/filepath" "runtime" + "runtime/trace" "sort" "strings" "time" @@ -355,6 +356,43 @@ func WithConnID(ctx context.Context, connID uint32) context.Context { return context.WithValue(ctx, ctxLogKey, logger.With(zap.Uint32("conn", connID))) } +// WithTraceLogger attaches trace identifier to context +func WithTraceLogger(ctx context.Context, connID uint32) context.Context { + var logger *zap.Logger + if ctxLogger, ok := ctx.Value(ctxLogKey).(*zap.Logger); ok { + logger = ctxLogger + } else { + logger = zaplog.L() + } + return context.WithValue(ctx, ctxLogKey, wrapTraceLogger(ctx, connID, logger)) +} + +func wrapTraceLogger(ctx context.Context, connID uint32, logger *zap.Logger) *zap.Logger { + return logger.WithOptions(zap.WrapCore(func(core zapcore.Core) zapcore.Core { + tl := &traceLog{ctx: ctx} + traceCore := zaplog.NewTextCore(zaplog.NewTextEncoder(&zaplog.Config{}), tl, tl). + With([]zapcore.Field{zap.Uint32("conn", connID)}) + return zapcore.NewTee(traceCore, core) + })) +} + +type traceLog struct { + ctx context.Context +} + +func (t *traceLog) Enabled(_ zapcore.Level) bool { + return true +} + +func (t *traceLog) Write(p []byte) (n int, err error) { + trace.Log(t.ctx, "log", string(p)) + return len(p), nil +} + +func (t *traceLog) Sync() error { + return nil +} + // WithKeyValue attaches key/value to context. func WithKeyValue(ctx context.Context, key, value string) context.Context { var logger *zap.Logger From 928d9fa3c85b70aead1f8f8e36375d9a3b077754 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Sat, 3 Oct 2020 20:42:55 +0800 Subject: [PATCH 016/229] statistics: prioritize low selectivity indexes in ... (#20038) (#20154) --- planner/core/cbo_test.go | 32 + ...lyzeSuiteTestLowSelIndexGreedySearchT.json | 99365 ++++++++++++++++ planner/core/testdata/analyze_suite_in.json | 6 + planner/core/testdata/analyze_suite_out.json | 16 + statistics/selectivity.go | 14 +- 5 files changed, 99430 insertions(+), 3 deletions(-) create mode 100644 planner/core/testdata/analyzeSuiteTestLowSelIndexGreedySearchT.json diff --git a/planner/core/cbo_test.go b/planner/core/cbo_test.go index 2bd17ee0dbfcc..9f654b0b4da75 100644 --- a/planner/core/cbo_test.go +++ b/planner/core/cbo_test.go @@ -805,6 +805,38 @@ func (s *testAnalyzeSuite) TestLimitCrossEstimation(c *C) { } } +func (s *testAnalyzeSuite) TestLowSelIndexGreedySearch(c *C) { + defer testleak.AfterTest(c)() + store, dom, err := newStoreWithBootstrap() + c.Assert(err, IsNil) + testKit := testkit.NewTestKit(c, store) + defer func() { + dom.Close() + store.Close() + }() + testKit.MustExec("use test") + testKit.MustExec("drop table if exists t") + testKit.MustExec("create table t (a varchar(32) default null, b varchar(10) default null, c varchar(12) default null, d varchar(32) default null, e bigint(10) default null, key idx1 (d,a), key idx2 (a,c), key idx3 (c,b), key idx4 (e))") + err = s.loadTableStats("analyzeSuiteTestLowSelIndexGreedySearchT.json", dom) + c.Assert(err, IsNil) + var input []string + var output []struct { + SQL string + Plan []string + } + // The test purposes are: + // - index `idx2` runs much faster than `idx4` experimentally; + // - estimated row count of IndexLookUp should be 0; + s.testData.GetTestCases(c, &input, &output) + for i, tt := range input { + s.testData.OnRecord(func() { + output[i].SQL = tt + output[i].Plan = s.testData.ConvertRowsToStrings(testKit.MustQuery(tt).Rows()) + }) + testKit.MustQuery(tt).Check(testkit.Rows(output[i].Plan...)) + } +} + func (s *testAnalyzeSuite) TestUpdateProjEliminate(c *C) { store, dom, err := newStoreWithBootstrap() c.Assert(err, IsNil) diff --git a/planner/core/testdata/analyzeSuiteTestLowSelIndexGreedySearchT.json b/planner/core/testdata/analyzeSuiteTestLowSelIndexGreedySearchT.json new file mode 100644 index 0000000000000..ca4a0120899bc --- /dev/null +++ b/planner/core/testdata/analyzeSuiteTestLowSelIndexGreedySearchT.json @@ -0,0 +1,99365 @@ +{ + "database_name": "test", + "table_name": "t", + "columns": { + "b": { + "histogram": { + "ndv": 2, + "buckets": [ + { + "count": 87399192, + "lower_bound": "QUxT", + "upper_bound": "RUNP", + "repeats": 87215220 + } + ] + }, + "cm_sketch": { + "rows": [ + { + "counters": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 98, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + { + "counters": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 98, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + { + "counters": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 98, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + { + "counters": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 98, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + { + "counters": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 98, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + } + ], + "top_n": [ + { + "data": "AgZFQ08=", + "count": 87197679 + }, + { + "data": "AgZBTFM=", + "count": 201415 + } + ], + "default_value": 0 + }, + "null_count": 0, + "tot_col_size": 444408069, + "last_update_version": 419082401542832168, + "correlation": 0.99605 + }, + "a": { + "histogram": { + "ndv": 263360, + "buckets": [ + { + "count": 349596, + "lower_bound": "MTI0MDAwNDAzODY=", + "upper_bound": "NDE=", + "repeats": 17809 + }, + { + "count": 699193, + "lower_bound": "NDI=", + "upper_bound": "SkwxNjQxNjg=", + "repeats": 331 + }, + { + "count": 1048790, + "lower_bound": "SkwxNzA0MDM=", + "upper_bound": "TDMw", + "repeats": 26548 + }, + { + "count": 1424606, + "lower_bound": "TDMx", + "upper_bound": "UDEwMzMwMzA=", + "repeats": 35287 + }, + { + "count": 1861602, + "lower_bound": "UDEwMzM4NzM=", + "upper_bound": "UDEwODgwNDY=", + "repeats": 87721 + }, + { + "count": 2228679, + "lower_bound": "UDEwODgwODU=", + "upper_bound": "UDExMTk4NjM=", + "repeats": 175111 + }, + { + "count": 2578276, + "lower_bound": "UDExMjAzMjY=", + "upper_bound": "UDExMzMzMjQ=", + "repeats": 331 + }, + { + "count": 3111411, + "lower_bound": "UDExMzk0ODA=", + "upper_bound": "UDExNDIwNTI=", + "repeats": 332413 + }, + { + "count": 3740685, + "lower_bound": "UDExNDM3MDM=", + "upper_bound": "UDExNDYwMjA=", + "repeats": 515932 + }, + { + "count": 4099022, + "lower_bound": "UDExNDg2ODU=", + "upper_bound": "UDExNjU1MDc=", + "repeats": 9070 + }, + { + "count": 4623417, + "lower_bound": "UDExNjcy", + "upper_bound": "UDExNzU2NzU=", + "repeats": 437281 + }, + { + "count": 4973014, + "lower_bound": "UDExOTEw", + "upper_bound": "UDEyMDc3NDY=", + "repeats": 331 + }, + { + "count": 5322610, + "lower_bound": "UDEyMTA4MTQ=", + "upper_bound": "UDEyMTYxOTM=", + "repeats": 331 + }, + { + "count": 5680947, + "lower_bound": "UDEyMTYxOTc=", + "upper_bound": "UDEyMzY0OTc=", + "repeats": 26548 + }, + { + "count": 6135423, + "lower_bound": "UDEyMzY4NjU=", + "upper_bound": "UDEyNTg5NzM=", + "repeats": 175111 + }, + { + "count": 6633598, + "lower_bound": "UDEyNTkyMDE=", + "upper_bound": "UDEyNjUwNjE=", + "repeats": 245023 + }, + { + "count": 7297832, + "lower_bound": "UDEyNjU0NjM=", + "upper_bound": "UDEyNjcxNTE=", + "repeats": 419803 + }, + { + "count": 7734828, + "lower_bound": "UDEyNjczNDU=", + "upper_bound": "UDEyODAwNzQ=", + "repeats": 210067 + }, + { + "count": 8617560, + "lower_bound": "UDEyODAxMDM=", + "upper_bound": "UDEzMDE0MDQ=", + "repeats": 550888 + }, + { + "count": 9106995, + "lower_bound": "UDEzMDE5MTM=", + "upper_bound": "UDEzMjAwODc=", + "repeats": 349891 + }, + { + "count": 9474072, + "lower_bound": "UDEzMjgx", + "upper_bound": "UDEzMjk4", + "repeats": 26548 + }, + { + "count": 10077126, + "lower_bound": "UDEzMjk5", + "upper_bound": "UDEzMzExNDY=", + "repeats": 323674 + }, + { + "count": 10444203, + "lower_bound": "UDEzMzEy", + "upper_bound": "UDEzOTE3Mg==", + "repeats": 17809 + }, + { + "count": 10793800, + "lower_bound": "UDEzOTgxOTU=", + "upper_bound": "UDE0Mzc4", + "repeats": 331 + }, + { + "count": 11143396, + "lower_bound": "UDE0Mzc4MDE=", + "upper_bound": "UDE0NjkxNjE=", + "repeats": 331 + }, + { + "count": 11492993, + "lower_bound": "UDE0NzQ1MDQ=", + "upper_bound": "UDE5OTYyODk=", + "repeats": 331 + }, + { + "count": 11851330, + "lower_bound": "UDIwMTg2NDg=", + "upper_bound": "UDIwNjkwNTE=", + "repeats": 26548 + }, + { + "count": 12235886, + "lower_bound": "UDIwNjkxNzQ=", + "upper_bound": "UDIxMjQw", + "repeats": 44026 + }, + { + "count": 12585483, + "lower_bound": "UDIxNjQz", + "upper_bound": "UDI1NjI4", + "repeats": 331 + }, + { + "count": 12935080, + "lower_bound": "UDI1NjM0", + "upper_bound": "UDMzMQ==", + "repeats": 331 + }, + { + "count": 13284677, + "lower_bound": "UDMzMTA4", + "upper_bound": "UDMzODE0Mg==", + "repeats": 131416 + }, + { + "count": 13634273, + "lower_bound": "UDM0MDIy", + "upper_bound": "UDQxNzEwMA==", + "repeats": 331 + }, + { + "count": 13983870, + "lower_bound": "UDQyMjc0OQ==", + "upper_bound": "UDQ1Nzk0MQ==", + "repeats": 331 + }, + { + "count": 14342207, + "lower_bound": "UDQ2NTQw", + "upper_bound": "UDUwNDcz", + "repeats": 35287 + }, + { + "count": 14752983, + "lower_bound": "UDUwNDkx", + "upper_bound": "UDUzMzY2Mg==", + "repeats": 157633 + }, + { + "count": 15155019, + "lower_bound": "UDUzMzY5Nw==", + "upper_bound": "UDU5OTI=", + "repeats": 87721 + }, + { + "count": 15609495, + "lower_bound": "UDYwMTY5MA==", + "upper_bound": "UDY4NDg=", + "repeats": 113938 + }, + { + "count": 15959092, + "lower_bound": "UDY4NDk=", + "upper_bound": "UDY5Mjk5Mg==", + "repeats": 331 + }, + { + "count": 16334908, + "lower_bound": "UDY5NDU5MQ==", + "upper_bound": "UDc3NTAwMg==", + "repeats": 26548 + }, + { + "count": 16719465, + "lower_bound": "UDc3NTEwNw==", + "upper_bound": "UDc4MzYxMQ==", + "repeats": 96460 + }, + { + "count": 17069062, + "lower_bound": "UDc4MzYzNA==", + "upper_bound": "UDgyMjQzMw==", + "repeats": 96460 + }, + { + "count": 17488578, + "lower_bound": "UDgyMjUxMg==", + "upper_bound": "UDg0NjU4Mg==", + "repeats": 96460 + }, + { + "count": 17978013, + "lower_bound": "UDg0NzgwOQ==", + "upper_bound": "UDg4NDM2MQ==", + "repeats": 148894 + }, + { + "count": 18336350, + "lower_bound": "UDg4NDM3Ng==", + "upper_bound": "UDg5MDI0MA==", + "repeats": 44026 + }, + { + "count": 18764606, + "lower_bound": "UDg5MDQ2Mw==", + "upper_bound": "UDkzMTYyOQ==", + "repeats": 105199 + }, + { + "count": 19157902, + "lower_bound": "UDkzMTYzNQ==", + "upper_bound": "UDk3NzQzMw==", + "repeats": 52765 + }, + { + "count": 19647338, + "lower_bound": "UDk4MzM4MA==", + "upper_bound": "UDk5ODQ2Mw==", + "repeats": 140155 + }, + { + "count": 19996935, + "lower_bound": "UDk5ODQ4", + "upper_bound": "UTExMjM2MQ==", + "repeats": 9070 + }, + { + "count": 20346531, + "lower_bound": "UTExMjY3MA==", + "upper_bound": "UTEyNjIwMQ==", + "repeats": 17809 + }, + { + "count": 20696128, + "lower_bound": "UTEyNjQ0OQ==", + "upper_bound": "UTEzMTU2Nw==", + "repeats": 331 + }, + { + "count": 21045725, + "lower_bound": "UTEzMzEwNA==", + "upper_bound": "UTE0NjExOA==", + "repeats": 331 + }, + { + "count": 21395322, + "lower_bound": "UTE0NjU0NA==", + "upper_bound": "UTE2NTk3", + "repeats": 331 + }, + { + "count": 21849798, + "lower_bound": "UTE2NTk5Ng==", + "upper_bound": "UTE2OTQyMg==", + "repeats": 113938 + }, + { + "count": 22330493, + "lower_bound": "UTE2OTQzNQ==", + "upper_bound": "UTE2OTU0MA==", + "repeats": 201328 + }, + { + "count": 22732529, + "lower_bound": "UTE2OTU1MQ==", + "upper_bound": "UTE2OTYwNA==", + "repeats": 192589 + }, + { + "count": 23134566, + "lower_bound": "UTE2OTg3Ng==", + "upper_bound": "UTE3MDAxNw==", + "repeats": 201328 + }, + { + "count": 23571562, + "lower_bound": "UTE3MDAzOA==", + "upper_bound": "UTE3MDEyNA==", + "repeats": 192589 + }, + { + "count": 23956118, + "lower_bound": "UTE3MDEzMg==", + "upper_bound": "UTE3MDIwNQ==", + "repeats": 192589 + }, + { + "count": 24419334, + "lower_bound": "UTE3MDI1Mw==", + "upper_bound": "UTE3MDM2NQ==", + "repeats": 140155 + }, + { + "count": 24891289, + "lower_bound": "UTE3MDM2Ng==", + "upper_bound": "UTE3MDQwNw==", + "repeats": 166372 + }, + { + "count": 25275846, + "lower_bound": "UTE3MDQxOA==", + "upper_bound": "UTE3MDQ1Ng==", + "repeats": 140155 + }, + { + "count": 25730322, + "lower_bound": "UTE3MDUzMQ==", + "upper_bound": "UTE3MDYwNg==", + "repeats": 122677 + }, + { + "count": 26324636, + "lower_bound": "UTE3MDYxOQ==", + "upper_bound": "UTE3MDYzMw==", + "repeats": 271240 + }, + { + "count": 26717932, + "lower_bound": "UTE3MTIzMg==", + "upper_bound": "UTE4MjI3OA==", + "repeats": 61504 + }, + { + "count": 27076269, + "lower_bound": "UTE4MjI4OA==", + "upper_bound": "UTE4NDY1OQ==", + "repeats": 35287 + }, + { + "count": 27522005, + "lower_bound": "UTE4NDc0MA==", + "upper_bound": "UTE4NjQ0Ng==", + "repeats": 166372 + }, + { + "count": 27976481, + "lower_bound": "UTE4NjU0Mg==", + "upper_bound": "UTE4ODEwMQ==", + "repeats": 105199 + }, + { + "count": 28326078, + "lower_bound": "UTE4ODMxOA==", + "upper_bound": "UTE5Mjg4Ng==", + "repeats": 331 + }, + { + "count": 28684414, + "lower_bound": "UTE5MzQ2OA==", + "upper_bound": "UTE5MzUwNg==", + "repeats": 26548 + }, + { + "count": 29034011, + "lower_bound": "UTE5MzUwNw==", + "upper_bound": "UTE5OTY1MQ==", + "repeats": 331 + }, + { + "count": 29540926, + "lower_bound": "UTIwMDA5Ng==", + "upper_bound": "UTM1ODky", + "repeats": 166372 + }, + { + "count": 29890523, + "lower_bound": "UTM1OTM4", + "upper_bound": "UTUzMzI=", + "repeats": 331 + }, + { + "count": 30240120, + "lower_bound": "UTUzOTI2", + "upper_bound": "UTc5OTky", + "repeats": 331 + }, + { + "count": 30589717, + "lower_bound": "UTgwODk0", + "upper_bound": "UjQxODY3", + "repeats": 331 + }, + { + "count": 31157811, + "lower_bound": "UjUwMzA1", + "upper_bound": "VDEwMTc=", + "repeats": 245023 + }, + { + "count": 31507408, + "lower_bound": "VDEwMTk=", + "upper_bound": "VDEzMjU=", + "repeats": 331 + }, + { + "count": 31891965, + "lower_bound": "VDEzMjY=", + "upper_bound": "VDE0NDU=", + "repeats": 52765 + }, + { + "count": 32250301, + "lower_bound": "VDE0NDk=", + "upper_bound": "VDE0OTQ=", + "repeats": 26548 + }, + { + "count": 35352973, + "lower_bound": "VDE0OTU=", + "upper_bound": "VDE0OTU=", + "repeats": 3093937 + }, + { + "count": 35711309, + "lower_bound": "VDE0OTY=", + "upper_bound": "VDE1MDY=", + "repeats": 44026 + }, + { + "count": 36087126, + "lower_bound": "VDE1MDg=", + "upper_bound": "VDE1MjM=", + "repeats": 113938 + }, + { + "count": 36445463, + "lower_bound": "VDE1MjU=", + "upper_bound": "VDE1MzI=", + "repeats": 122677 + }, + { + "count": 36830019, + "lower_bound": "VDE1MzQ=", + "upper_bound": "VDE1NDc=", + "repeats": 52765 + }, + { + "count": 37179616, + "lower_bound": "VDE1NTA=", + "upper_bound": "VDE1NTU=", + "repeats": 9070 + }, + { + "count": 37721491, + "lower_bound": "VDE1NTc=", + "upper_bound": "VDE1NzQ=", + "repeats": 236284 + }, + { + "count": 39425775, + "lower_bound": "VDE1NzY=", + "upper_bound": "VDE1ODY=", + "repeats": 1468483 + }, + { + "count": 39854031, + "lower_bound": "VDE1ODc=", + "upper_bound": "VDE1OTY=", + "repeats": 157633 + }, + { + "count": 40990221, + "lower_bound": "VDE1OTc=", + "upper_bound": "VDE2MDU=", + "repeats": 917926 + }, + { + "count": 41348557, + "lower_bound": "VDE2MDY=", + "upper_bound": "VDE2MTU=", + "repeats": 78982 + }, + { + "count": 41724374, + "lower_bound": "VDE2MTY=", + "upper_bound": "VDE2MTY=", + "repeats": 367369 + }, + { + "count": 42082710, + "lower_bound": "VDE2MTc=", + "upper_bound": "VDE2MzQ=", + "repeats": 9070 + }, + { + "count": 42441047, + "lower_bound": "VDE2MzU=", + "upper_bound": "VDE2NDY=", + "repeats": 52765 + }, + { + "count": 42921743, + "lower_bound": "VDE2NDg=", + "upper_bound": "VDE2NTY=", + "repeats": 253762 + }, + { + "count": 43280079, + "lower_bound": "VDE2NTc=", + "upper_bound": "VDE2NzA=", + "repeats": 70243 + }, + { + "count": 43655896, + "lower_bound": "VDE2NzQ=", + "upper_bound": "VDE2OTE=", + "repeats": 35287 + }, + { + "count": 44014233, + "lower_bound": "VDE2OTI=", + "upper_bound": "VDE2OTY=", + "repeats": 70243 + }, + { + "count": 44363829, + "lower_bound": "VDE2OTk=", + "upper_bound": "VDE3MjA=", + "repeats": 17809 + }, + { + "count": 44722166, + "lower_bound": "VDE3MjQ=", + "upper_bound": "VDE3Mzg=", + "repeats": 26548 + }, + { + "count": 45543718, + "lower_bound": "VDE3NDI=", + "upper_bound": "VDE3NTQ=", + "repeats": 524671 + }, + { + "count": 45945755, + "lower_bound": "VDE3NTY=", + "upper_bound": "VDE3NjA=", + "repeats": 87721 + }, + { + "count": 46435190, + "lower_bound": "VDE3NjI=", + "upper_bound": "VDE3NzI=", + "repeats": 236284 + }, + { + "count": 46863446, + "lower_bound": "VDE3Nzc=", + "upper_bound": "VDE4MDE=", + "repeats": 140155 + }, + { + "count": 47213043, + "lower_bound": "VDE4MDQ=", + "upper_bound": "VDE4MjM=", + "repeats": 35287 + }, + { + "count": 48628910, + "lower_bound": "VDE4MjQ=", + "upper_bound": "VDE4MzE=", + "repeats": 1319920 + }, + { + "count": 49039686, + "lower_bound": "VDE4MzI=", + "upper_bound": "VDE4NDk=", + "repeats": 87721 + }, + { + "count": 49467942, + "lower_bound": "VDE4NTA=", + "upper_bound": "VDE4Njk=", + "repeats": 210067 + }, + { + "count": 49869978, + "lower_bound": "VDE4NzA=", + "upper_bound": "VDE4ODQ=", + "repeats": 52765 + }, + { + "count": 50219575, + "lower_bound": "VDE4ODk=", + "upper_bound": "VDE5MDQ=", + "repeats": 26548 + }, + { + "count": 50612872, + "lower_bound": "VDE5MDY=", + "upper_bound": "VDE5MTk=", + "repeats": 253762 + }, + { + "count": 51041128, + "lower_bound": "VDE5MjA=", + "upper_bound": "VDE5Mzc=", + "repeats": 218806 + }, + { + "count": 51408204, + "lower_bound": "VDE5Mzg=", + "upper_bound": "VDE5NTI=", + "repeats": 44026 + }, + { + "count": 52002519, + "lower_bound": "VDE5NTk=", + "upper_bound": "VDE5Nzg=", + "repeats": 306196 + }, + { + "count": 53907821, + "lower_bound": "VDE5ODE=", + "upper_bound": "VDE5ODY=", + "repeats": 1844260 + }, + { + "count": 54257418, + "lower_bound": "VDE5ODg=", + "upper_bound": "VDIwNjI=", + "repeats": 9070 + }, + { + "count": 54738113, + "lower_bound": "VDIwNjM=", + "upper_bound": "VDIwNzk=", + "repeats": 131416 + }, + { + "count": 55096450, + "lower_bound": "VDIwODE=", + "upper_bound": "VDIwOTA=", + "repeats": 9070 + }, + { + "count": 55481007, + "lower_bound": "VDIwOTI=", + "upper_bound": "VDIwOTc=", + "repeats": 262501 + }, + { + "count": 57430009, + "lower_bound": "VDIwOTg=", + "upper_bound": "VDIxMDg=", + "repeats": 1914172 + }, + { + "count": 57910704, + "lower_bound": "VDIxMTE=", + "upper_bound": "VDIxMzA=", + "repeats": 148894 + }, + { + "count": 62140825, + "lower_bound": "VDIxMzQ=", + "upper_bound": "VDIxMzQ=", + "repeats": 4221268 + }, + { + "count": 62534121, + "lower_bound": "VDIxMzg=", + "upper_bound": "VDIxNTE=", + "repeats": 245023 + }, + { + "count": 62883718, + "lower_bound": "VDIxNTI=", + "upper_bound": "VDIxNjk=", + "repeats": 61504 + }, + { + "count": 63233315, + "lower_bound": "VDIxNzU=", + "upper_bound": "VDIyMTA=", + "repeats": 9070 + }, + { + "count": 63582912, + "lower_bound": "VDIyMTE=", + "upper_bound": "VDIyNDk=", + "repeats": 35287 + }, + { + "count": 64054867, + "lower_bound": "VDIyNTA=", + "upper_bound": "VDIyNjU=", + "repeats": 271240 + }, + { + "count": 65208537, + "lower_bound": "VDIyNjc=", + "upper_bound": "VDIyODA=", + "repeats": 804319 + }, + { + "count": 65619313, + "lower_bound": "VDIyODE=", + "upper_bound": "VDIyOTM=", + "repeats": 175111 + }, + { + "count": 67716893, + "lower_bound": "VDIyOTU=", + "upper_bound": "VDIyOTY=", + "repeats": 2053996 + }, + { + "count": 69429918, + "lower_bound": "VDIzMDI=", + "upper_bound": "VDIzMDM=", + "repeats": 1695697 + }, + { + "count": 69788254, + "lower_bound": "VDIzMDU=", + "upper_bound": "VDIzMDk=", + "repeats": 26548 + }, + { + "count": 70190291, + "lower_bound": "VDIzMTI=", + "upper_bound": "VDIzMTU=", + "repeats": 279979 + }, + { + "count": 70784605, + "lower_bound": "VDIzMTY=", + "upper_bound": "VDIzMjY=", + "repeats": 454759 + }, + { + "count": 71134202, + "lower_bound": "VDIzMjc=", + "upper_bound": "VDIzMzY=", + "repeats": 9070 + }, + { + "count": 71597418, + "lower_bound": "VDIzMzc=", + "upper_bound": "VDIzNTI=", + "repeats": 175111 + }, + { + "count": 72628728, + "lower_bound": "VDIzNTM=", + "upper_bound": "VDIzNTc=", + "repeats": 874231 + }, + { + "count": 72978325, + "lower_bound": "VDIzNTk=", + "upper_bound": "VDIzNzU=", + "repeats": 26548 + }, + { + "count": 73389101, + "lower_bound": "VDIzNzc=", + "upper_bound": "VDIzNzc=", + "repeats": 402325 + }, + { + "count": 73747438, + "lower_bound": "VDIzNzg=", + "upper_bound": "VDIzOTE=", + "repeats": 17809 + }, + { + "count": 74149474, + "lower_bound": "VDIzOTI=", + "upper_bound": "VDI0MDE=", + "repeats": 70243 + }, + { + "count": 74770008, + "lower_bound": "VDI0MDI=", + "upper_bound": "VDI0MzE=", + "repeats": 349891 + }, + { + "count": 75137085, + "lower_bound": "VDI0MzQ=", + "upper_bound": "VDI0NDE=", + "repeats": 26548 + }, + { + "count": 75512901, + "lower_bound": "VDI0NDQ=", + "upper_bound": "VDI0NTk=", + "repeats": 44026 + }, + { + "count": 75958637, + "lower_bound": "VDI0NjA=", + "upper_bound": "VDI0Njc=", + "repeats": 236284 + }, + { + "count": 76316974, + "lower_bound": "VDI0Njk=", + "upper_bound": "VDI0OTE=", + "repeats": 113938 + }, + { + "count": 76675311, + "lower_bound": "VDI0OTQ=", + "upper_bound": "VDI1MzE=", + "repeats": 105199 + }, + { + "count": 77059867, + "lower_bound": "VDI1MzI=", + "upper_bound": "VDI1NTY=", + "repeats": 70243 + }, + { + "count": 77453163, + "lower_bound": "VDI1NjM=", + "upper_bound": "VDI1ODY=", + "repeats": 44026 + }, + { + "count": 77811500, + "lower_bound": "VDI1OTA=", + "upper_bound": "VDI2MjM=", + "repeats": 9070 + }, + { + "count": 78283456, + "lower_bound": "VDI2MjY=", + "upper_bound": "VDI2NTA=", + "repeats": 227545 + }, + { + "count": 78676752, + "lower_bound": "VDI2NTE=", + "upper_bound": "VDI2NTc=", + "repeats": 44026 + }, + { + "count": 79253587, + "lower_bound": "VDI2NjA=", + "upper_bound": "VDI2NzM=", + "repeats": 402325 + }, + { + "count": 79620663, + "lower_bound": "VDI2NzQ=", + "upper_bound": "VDI3MDA=", + "repeats": 17809 + }, + { + "count": 80005220, + "lower_bound": "VDI3MDk=", + "upper_bound": "VDI3MTE=", + "repeats": 262501 + }, + { + "count": 80363557, + "lower_bound": "VDI3MTU=", + "upper_bound": "VDI3MzA=", + "repeats": 44026 + }, + { + "count": 80713153, + "lower_bound": "VDI3MzE=", + "upper_bound": "VDI3Mzc=", + "repeats": 331 + }, + { + "count": 81071490, + "lower_bound": "VDI3Mzk=", + "upper_bound": "VDI3NTQ=", + "repeats": 9070 + }, + { + "count": 81421087, + "lower_bound": "VDI3NTU=", + "upper_bound": "VDI3Nzc=", + "repeats": 331 + }, + { + "count": 81788163, + "lower_bound": "VDI3ODA=", + "upper_bound": "VDI4MTQ=", + "repeats": 35287 + }, + { + "count": 82198940, + "lower_bound": "VDI4MTU=", + "upper_bound": "VDI4MzQ=", + "repeats": 157633 + }, + { + "count": 82627196, + "lower_bound": "VDI4MzY=", + "upper_bound": "VDI4NTM=", + "repeats": 175111 + }, + { + "count": 83037972, + "lower_bound": "VDI4NTc=", + "upper_bound": "VDI4NjA=", + "repeats": 332413 + }, + { + "count": 83466228, + "lower_bound": "VDI4NjE=", + "upper_bound": "VDI4NzY=", + "repeats": 87721 + }, + { + "count": 83815825, + "lower_bound": "VDI4Nzc=", + "upper_bound": "VDI5NDk=", + "repeats": 331 + }, + { + "count": 84200381, + "lower_bound": "VDI5NTE=", + "upper_bound": "VDMwMDE=", + "repeats": 35287 + }, + { + "count": 84549978, + "lower_bound": "VDMwMDc=", + "upper_bound": "VDMwODA=", + "repeats": 331 + }, + { + "count": 84952014, + "lower_bound": "VDMwODU=", + "upper_bound": "VDMyMDg=", + "repeats": 70243 + }, + { + "count": 85301611, + "lower_bound": "VDMyMDk=", + "upper_bound": "VDMyODA=", + "repeats": 35287 + }, + { + "count": 85756087, + "lower_bound": "VDMyODM=", + "upper_bound": "VDMzMDk=", + "repeats": 262501 + }, + { + "count": 86140643, + "lower_bound": "VDMzMTA=", + "upper_bound": "VDMzNDQ=", + "repeats": 78982 + }, + { + "count": 86490240, + "lower_bound": "VDMzNDY=", + "upper_bound": "VDMzNzE=", + "repeats": 331 + }, + { + "count": 86839837, + "lower_bound": "VDMzNzM=", + "upper_bound": "VDMzOTM=", + "repeats": 331 + }, + { + "count": 87224393, + "lower_bound": "VDMzOTc=", + "upper_bound": "VDQ=", + "repeats": 96460 + }, + { + "count": 87399192, + "lower_bound": "VDg=", + "upper_bound": "VjQwOTU3MTY=", + "repeats": 331 + } + ] + }, + "cm_sketch": { + "rows": [ + { + "counters": [ + 1050, + 6651, + 5776, + 18999, + 5235, + 2368, + 848, + 4533, + 5467, + 23699, + 16143, + 49061, + 7631, + 4404, + 10081, + 7161, + 483, + 10708, + 2207, + 6298, + 1455, + 17281, + 2766, + 2872, + 6490, + 9744, + 121462, + 159149, + 758, + 38463, + 14209, + 14153, + 44890, + 12625, + 10873, + 1366, + 36163, + 4916, + 11204, + 41635, + 18021, + 22353, + 3401, + 4328, + 1551, + 25816, + 6449, + 4475, + 1194, + 5447, + 6686, + 1286, + 31758, + 28074, + 28792, + 2145, + 1098, + 33383, + 64328, + 86773, + 1055, + 12205, + 3682, + 8172, + 2218, + 2063, + 85978, + 2752, + 4981, + 2093, + 89399, + 21374, + 5896, + 6417, + 4078, + 2000, + 38477, + 78039, + 15280, + 72661, + 1059, + 4949, + 7613, + 3547, + 17160, + 6023, + 6858, + 19509, + 6867, + 10017, + 13131, + 980, + 2094, + 42089, + 337863, + 2060, + 8319, + 17594, + 22303, + 6245, + 21681, + 2966, + 2709, + 33736, + 18025, + 3224, + 95820, + 104230, + 4475, + 2570, + 2731, + 1281, + 813, + 6349, + 8435, + 2149, + 2081, + 2365, + 5673, + 11971, + 11765, + 24272, + 38335, + 18243, + 7611, + 93819, + 8846, + 1728, + 69038, + 22543, + 995, + 1158, + 14523, + 54155, + 1908, + 27747, + 20085, + 10077, + 714, + 1773, + 38147, + 10262, + 8073, + 4528, + 842, + 25064, + 63842, + 988, + 1927, + 1863, + 4278, + 8753, + 8033, + 86971, + 7290, + 4398, + 1119, + 9342, + 9190, + 26258, + 55529, + 12980, + 96625, + 3469, + 5496, + 4782, + 4956, + 18018, + 6272, + 57210, + 309818, + 101621, + 2797, + 2476, + 18911, + 3116, + 30324, + 1741, + 9944, + 35256, + 1434, + 35937, + 1462, + 62493, + 46111, + 4718, + 911, + 576, + 9844, + 98034, + 5674, + 17006, + 193968, + 71894, + 1320, + 7531, + 6225, + 910, + 46321, + 523, + 14745, + 4289, + 1976, + 7238, + 85041, + 5761, + 19356, + 7737, + 4618, + 4087, + 13784, + 4716, + 9892, + 4148, + 28171, + 9030, + 103577, + 3352, + 2581, + 710, + 36179, + 4802, + 61447, + 8829, + 7591, + 66487, + 989, + 21935, + 8862, + 4990, + 67249, + 2486, + 1297, + 8997, + 2007, + 4399, + 2031, + 7017, + 4355, + 799, + 15233, + 36619, + 169158, + 7413, + 2810, + 95442, + 1262, + 124091, + 10492, + 219884, + 2614, + 2249, + 37682, + 5253, + 15393, + 2202, + 4607, + 2283, + 17354, + 34348, + 114299, + 6298, + 27857, + 749, + 5245, + 1701, + 131337, + 62925, + 9299, + 1803, + 13260, + 80011, + 14505, + 19378, + 17022, + 124320, + 68210, + 3309, + 5221, + 12523, + 12965, + 122906, + 23596, + 8355, + 3045, + 87797, + 1572, + 20294, + 4998, + 116274, + 5325, + 123134, + 38496, + 47399, + 3546, + 1884, + 28768, + 241189, + 1991, + 5638, + 28068, + 2075, + 118152, + 44455, + 9518, + 16114, + 122679, + 11755, + 210480, + 6938, + 23072, + 5319, + 2192, + 1174, + 1177, + 47227, + 37730, + 9982, + 16014, + 953, + 6216, + 241030, + 28348, + 1560, + 219086, + 2006, + 18037, + 31611, + 2191, + 9785, + 80376, + 891, + 2396, + 11562, + 9816, + 55541, + 46412, + 6473, + 47269, + 1019, + 776, + 6637, + 1872, + 15147, + 4427, + 4321, + 32578, + 12944, + 3772, + 4566, + 13621, + 3150, + 1246, + 40708, + 18593, + 7169, + 2798, + 18325, + 2794, + 2274, + 27756, + 32315, + 9691, + 5022, + 198657, + 1531, + 15057, + 115592, + 4864, + 9996, + 15426, + 8712, + 7030, + 17804, + 36412, + 3894, + 841, + 7486, + 2802, + 1071, + 64550, + 24675, + 39691, + 14682, + 994, + 5246, + 2235, + 7870, + 4974, + 3680, + 57907, + 17220, + 6289, + 45116, + 7993, + 1224, + 1928, + 216564, + 6017, + 1286, + 80351, + 28005, + 37005, + 5058, + 18357, + 7736, + 4291, + 1133, + 10266, + 3939, + 1188, + 6203, + 2081, + 1215, + 15174, + 2900, + 6092, + 2345, + 3561, + 3967, + 14537, + 143031, + 2982, + 70601, + 138653, + 3730, + 22320, + 5180, + 4959, + 28517, + 24162, + 24561, + 182957, + 6227, + 2186, + 79986, + 8161, + 9843, + 55398, + 161609, + 1196, + 58779, + 26444, + 47477, + 26820, + 24694, + 3378, + 150740, + 48989, + 30520, + 2116, + 31023, + 8380, + 1845, + 40320, + 116654, + 3251, + 10282, + 20585, + 2219, + 1383, + 3880, + 7972, + 41498, + 19077, + 23012, + 25889, + 10391, + 832, + 45622, + 6155, + 1681, + 22009, + 7191, + 3200, + 4226, + 2284, + 1175, + 8051, + 1513, + 1559, + 156630, + 6060, + 1438, + 3224, + 25956, + 5577, + 4028, + 2324, + 41625, + 21262, + 840, + 5026, + 1338, + 10853, + 12864, + 76620, + 65277, + 3722, + 17038, + 43104, + 33509, + 7866, + 738, + 13943, + 4616, + 30407, + 2036, + 14611, + 75237, + 939, + 12002, + 6624, + 58901, + 23731, + 1189, + 6827, + 36432, + 3697, + 6290, + 44008, + 6776, + 2448, + 3938, + 9156, + 15758, + 19615, + 10678, + 788, + 720, + 12411, + 33761, + 57892, + 17791, + 21937, + 5116, + 49031, + 7684, + 887, + 23674, + 2480, + 6534, + 46859, + 1007, + 11443, + 3707, + 8370, + 30759, + 4629, + 3379, + 161626, + 874, + 733, + 5630, + 13520, + 6957, + 108441, + 2530, + 1557, + 12575, + 15385, + 2160, + 3382, + 11774, + 9421, + 9262, + 3924, + 974, + 32111, + 1206, + 2653, + 33953, + 2621, + 42490, + 72422, + 67797, + 245791, + 80245, + 60450, + 279102, + 231937, + 1536, + 3513, + 1075, + 3025, + 209199, + 11513, + 3571, + 27813, + 7097, + 7301, + 11440, + 3149, + 951, + 14836, + 9837, + 7824, + 190840, + 29844, + 3233, + 6511, + 8983, + 86883, + 3792, + 17678, + 629, + 10839, + 10955, + 47170, + 20794, + 28520, + 39848, + 5835, + 4441, + 2315, + 7609, + 17642, + 928, + 2134, + 7895, + 66151, + 4518, + 24193, + 17442, + 1041, + 1953, + 76362, + 20544, + 38614, + 59693, + 3947, + 5389, + 22876, + 29259, + 2468, + 43535, + 24363, + 2765, + 32858, + 44512, + 19567, + 61623, + 60962, + 33306, + 9968, + 960, + 2248, + 6566, + 7065, + 2121, + 20610, + 635, + 2558, + 2349, + 9732, + 6612, + 17886, + 189674, + 5328, + 28588, + 1533, + 30754, + 31669, + 2353, + 5632, + 1060, + 1771, + 30212, + 18842, + 1453, + 6330, + 1369, + 22078, + 4096, + 24249, + 58774, + 17390, + 2578, + 16495, + 7907, + 3738, + 1154, + 9041, + 4414, + 2013, + 2581, + 1102, + 35033, + 4539, + 16539, + 18441, + 2735, + 113495, + 25347, + 2855, + 6604, + 5569, + 4175, + 11862, + 536, + 162661, + 930, + 2090, + 8540, + 724, + 5506, + 11301, + 9949, + 55707, + 2546, + 27869, + 4653, + 1381, + 43196, + 51530, + 33773, + 4669, + 78414, + 950, + 12839, + 14717, + 17833, + 16520, + 12590, + 21300, + 14536, + 124516, + 22339, + 16681, + 163878, + 1796, + 7615, + 15399, + 1365, + 12373, + 7267, + 27176, + 4653, + 98647, + 214773, + 65836, + 2738, + 92927, + 12086, + 123892, + 55212, + 24381, + 43121, + 4790, + 9306, + 2066, + 1835, + 1421, + 49097, + 1274, + 2584, + 31069, + 10279, + 9725, + 7871, + 26408, + 14986, + 17514, + 7655, + 9702, + 163758, + 1253, + 6988, + 3802, + 20734, + 135959, + 1501, + 169002, + 610, + 96220, + 6097, + 1250, + 1684, + 48978, + 5636, + 5021, + 31430, + 17738, + 18615, + 51635, + 4277, + 50961, + 765, + 9251, + 213173, + 7342, + 2487, + 55850, + 1544, + 13437, + 1648, + 5025, + 15132, + 1694, + 946, + 11749, + 45805, + 16638, + 26962, + 4241, + 33744, + 9625, + 30105, + 13654, + 32403, + 1110, + 95973, + 7248, + 26312, + 15920, + 85843, + 3433, + 12578, + 46129, + 33099, + 6958, + 6448, + 4199, + 31440, + 3370, + 5091, + 13559, + 47201, + 21719, + 6452, + 15233, + 7078, + 3500, + 134352, + 4081, + 3121, + 692, + 21988, + 100256, + 47895, + 8226, + 53020, + 2499, + 3908, + 8718, + 674, + 1331, + 4593, + 4796, + 2431, + 150305, + 21529, + 110309, + 10011, + 15413, + 15814, + 20337, + 749, + 161248, + 1671, + 110440, + 12025, + 620, + 23161, + 42045, + 12918, + 17080, + 1424, + 21212, + 6114, + 63320, + 34046, + 36533, + 11441, + 1265, + 751, + 67147, + 8320, + 50314, + 41363, + 13760, + 61753, + 23977, + 2363, + 2703, + 4421, + 1425, + 5129, + 1509, + 661, + 3517, + 11950, + 144688, + 17713, + 4154, + 12795, + 1762, + 33996, + 3791, + 45567, + 857, + 54765, + 528, + 92847, + 43977, + 25958, + 20740, + 13195, + 1240, + 3727, + 6302, + 57392, + 8153, + 167001, + 162529, + 1318, + 24086, + 110861, + 1464, + 54403, + 6043, + 72809, + 13942, + 8126, + 14262, + 1740, + 34219, + 26792, + 16418, + 21905, + 998, + 7523, + 558, + 28941, + 5174, + 7045, + 31264, + 2217, + 14860, + 5807, + 8636, + 31169, + 9650, + 163768, + 50846, + 628, + 46023, + 14359, + 872, + 9311, + 19419, + 15927, + 4102, + 790, + 29709, + 14009, + 582, + 2073, + 17412, + 2783, + 65309, + 11243, + 1117, + 6390, + 283644, + 1691, + 6635, + 24112, + 8521, + 7067, + 3036, + 1801, + 13237, + 5604, + 1476, + 3310, + 2489, + 3632, + 7901, + 4802, + 6581, + 8993, + 28142, + 1649, + 28634, + 24657, + 40034, + 14558, + 7632, + 94890, + 54392, + 2127, + 1768, + 24563, + 1808, + 9740, + 1223, + 3188, + 3779, + 10790, + 3702, + 3560, + 11308, + 6518, + 130754, + 980, + 35831, + 17822, + 2135, + 1174, + 24521, + 4229, + 3191, + 6589, + 63330, + 8523, + 7058, + 8305, + 4555, + 29547, + 52834, + 6459, + 51251, + 2858, + 23621, + 15832, + 117570, + 140421, + 4880, + 10166, + 1981, + 3047, + 3585, + 4573, + 41097, + 7880, + 26040, + 5437, + 12705, + 824, + 2111, + 192121, + 23681, + 2277, + 9816, + 4367, + 22870, + 14862, + 4363, + 27137, + 2462, + 963, + 14823, + 6355, + 71249, + 7168, + 32007, + 9033, + 5042, + 25032, + 2899, + 13737, + 89286, + 51936, + 2277, + 71214, + 23403, + 75958, + 28959, + 7972, + 8478, + 1253, + 737, + 96655, + 430, + 18443, + 38109, + 9220, + 484524, + 17652, + 3553, + 4208, + 28721, + 945, + 37837, + 6016, + 74569, + 13251, + 932, + 14555, + 85105, + 20712, + 8154, + 2043, + 17738, + 231788, + 33690, + 19577, + 5535, + 11034, + 8082, + 12822, + 698, + 6938, + 8723, + 65730, + 42805, + 7881, + 13682, + 13006, + 178646, + 127642, + 9489, + 25382, + 32020, + 941, + 5068, + 28202, + 38303, + 14696, + 9497, + 26096, + 15681, + 968, + 14875, + 66250, + 78362, + 5697, + 1798, + 8495, + 723, + 3394, + 18560, + 761, + 1039, + 3461, + 110322, + 2679, + 777, + 10035, + 945, + 118463, + 33747, + 1989, + 4325, + 17685, + 3173, + 1633, + 2955, + 31443, + 7762, + 7455, + 7971, + 6174, + 3343, + 1014, + 6868, + 2341, + 36628, + 2655, + 3027, + 5506, + 6981, + 9409, + 125834, + 887, + 89559, + 53337, + 11992, + 4250, + 7285, + 162933, + 856, + 14746, + 4399, + 8907, + 2085, + 21470, + 17317, + 1371, + 11739, + 55149, + 947, + 128828, + 10255, + 73838, + 36071, + 17981, + 3410, + 84509, + 51658, + 21192, + 13206, + 24289, + 2233, + 33074, + 515, + 6108, + 26854, + 916, + 3172, + 2718, + 79314, + 1056, + 7953, + 1680, + 22102, + 4158, + 94438, + 992, + 138719, + 5435, + 7121, + 2903, + 26959, + 2179, + 4713, + 35792, + 3406, + 12875, + 3222, + 15033, + 137973, + 4719, + 11860, + 4256, + 197140, + 21011, + 8139, + 34232, + 4828, + 159829, + 5807, + 120436, + 102820, + 14992, + 20824, + 158216, + 1409, + 10490, + 7579, + 2599, + 127413, + 2997, + 20502, + 95101, + 1232, + 9093, + 2510, + 2608, + 25691, + 18583, + 8968, + 20400, + 11041, + 112518, + 2741, + 3974, + 7367, + 8252, + 3310, + 6161, + 5669, + 123022, + 2131, + 3448, + 28354, + 7397, + 665, + 11084, + 3600, + 5899, + 156784, + 2749, + 9121, + 1204, + 1481, + 5733, + 8786, + 22749, + 2395, + 4553, + 12803, + 23485, + 12261, + 1609, + 5861, + 3448, + 7961, + 3854, + 49310, + 2166, + 14262, + 168750, + 43150, + 92342, + 21572, + 60476, + 66081, + 49968, + 27183, + 3863, + 7647, + 1469, + 61472, + 5349, + 16368, + 4008, + 166628, + 988, + 287224, + 70726, + 1978, + 30021, + 29640, + 7323, + 186886, + 28542, + 5945, + 36751, + 180563, + 20070, + 3440, + 26504, + 8692, + 907, + 44876, + 8169, + 944, + 29647, + 190766, + 16550, + 208670, + 411980, + 633, + 6086, + 10096, + 41387, + 28406, + 21421, + 1732, + 3376, + 745, + 4510, + 17013, + 9805, + 13264, + 43432, + 11952, + 58241, + 17162, + 602, + 30461, + 8071, + 238948, + 1278, + 124235, + 3252, + 51185, + 4210, + 1516, + 109421, + 69764, + 58012, + 12192, + 2777, + 3071, + 1297, + 18038, + 4338, + 19569, + 9952, + 8689, + 171892, + 101251, + 18953, + 9103, + 14618, + 55855, + 123185, + 23160, + 1075, + 82253, + 1321, + 14697, + 6440, + 886, + 9294, + 22234, + 109577, + 14811, + 7802, + 214943, + 14379, + 56123, + 21417, + 2109, + 15149, + 14235, + 834, + 13357, + 152833, + 53580, + 9449, + 41219, + 30182, + 14941, + 415, + 101958, + 35320, + 46706, + 24510, + 20722, + 47795, + 2911, + 8698, + 10046, + 202268, + 11382, + 66887, + 129995, + 11649, + 4914, + 2978, + 9052, + 252093, + 21715, + 5401, + 29763, + 5131, + 7877, + 33727, + 200297, + 100529, + 1256, + 1026, + 7429, + 714, + 21034, + 102939, + 34677, + 31870, + 23964, + 2579, + 3512, + 174543, + 2924, + 19618, + 1615, + 5990, + 77111, + 132757, + 10676, + 50536, + 18698, + 35825, + 593, + 15185, + 114653, + 10528, + 51800, + 6730, + 6269, + 67910, + 5782, + 3218, + 49678, + 48553, + 987, + 15041, + 4966, + 199414, + 3831, + 6025, + 3425, + 18693, + 1482, + 7721, + 20487, + 20757, + 41355, + 19421, + 10511, + 26828, + 12618, + 2478, + 30099, + 12968, + 8764, + 13082, + 9835, + 26838, + 2555, + 52560, + 3938, + 3888, + 29880, + 12431, + 6825, + 71212, + 4963, + 2591, + 9053, + 3123, + 3679, + 14243, + 3133, + 2844, + 15784, + 1519, + 620, + 43747, + 24986, + 1287, + 192360, + 24584, + 90415, + 1333, + 2047, + 8043, + 15375, + 31194, + 192371, + 37857, + 24863, + 7154, + 4277, + 64568, + 88418, + 3193, + 18792, + 1221, + 25620, + 4157, + 3312, + 9790, + 2106, + 440, + 25592, + 28669, + 16555, + 11202, + 1031, + 451, + 1069, + 48933, + 4142, + 3089, + 51651, + 702, + 5836, + 79579, + 11549, + 26699, + 1428, + 10961, + 9945, + 2297, + 49999, + 21630, + 12972, + 3928, + 6801, + 22736, + 10409, + 1020, + 12062, + 43901, + 5451, + 5069, + 33763, + 25032, + 9026, + 5766, + 3914, + 5713, + 4478, + 118252, + 2927, + 32791, + 82951, + 4595, + 250491, + 48894, + 77358, + 4699, + 3342, + 6683, + 948, + 20151, + 17636, + 59805, + 42847, + 13359, + 4056, + 19728, + 21211, + 12156, + 3853, + 3176, + 2145, + 37117, + 2496, + 9489, + 1082, + 29230, + 3485, + 3664, + 4509, + 4645, + 1402, + 8294, + 169792, + 643, + 10387, + 60367, + 97064, + 3570, + 7514, + 32137, + 30282, + 6633, + 67683, + 16413, + 8042, + 4124, + 32086, + 47122, + 4043, + 14897, + 61575, + 92700, + 9347, + 7900, + 36874, + 11040, + 1660, + 155708, + 8089, + 24131, + 106715, + 10773, + 11060, + 97699, + 189553, + 7281, + 9488, + 14170, + 8693, + 9810, + 5529, + 936, + 5477, + 724, + 4001, + 1292, + 6660, + 1673, + 8015, + 40965, + 18094, + 5516, + 37059, + 1081, + 69531, + 17966, + 5734, + 503, + 59062, + 5036, + 15111, + 784, + 114738, + 55426, + 696, + 10919, + 69811, + 16116, + 14475, + 1829, + 1384, + 2261, + 36494, + 1670, + 5379, + 6949, + 4546, + 12611, + 2442, + 74918, + 20164, + 56660, + 985, + 72721, + 8132, + 40925, + 6013, + 5542, + 18123, + 162852, + 67397, + 2401, + 2219, + 114674, + 14710, + 4362, + 7902, + 20406, + 57812, + 917, + 3890, + 801, + 33020, + 116115, + 11345, + 159961, + 44698, + 20783, + 2387, + 9841, + 51376, + 75398, + 16228, + 1031, + 14606, + 13709, + 159258, + 40076, + 5996, + 2111, + 88333, + 6939, + 29440, + 20447, + 9337, + 46732, + 24154, + 6642, + 201479, + 1939, + 717, + 3191, + 65599, + 25554, + 2042, + 34170, + 779, + 17383, + 5697, + 59202, + 1826, + 4418, + 52031, + 6792, + 24155, + 6217, + 125606, + 3334, + 538, + 4221, + 921, + 27373, + 1188, + 7919, + 64800, + 47483, + 25153, + 5509, + 20587, + 671, + 2659, + 11709, + 5481, + 34105, + 9316, + 2170, + 25824, + 11906, + 60378, + 4495, + 10549, + 8856, + 747, + 35369, + 6793, + 837, + 3348, + 172974, + 12293, + 2634, + 12126, + 13389, + 2450, + 7193, + 6099, + 13115, + 1064, + 7614, + 251030, + 41997, + 115404, + 18878, + 141817, + 7655, + 17008, + 66809, + 19756, + 48644, + 15074, + 1109, + 133831, + 55302, + 25071, + 260541, + 2526, + 34555, + 33514, + 21565, + 27473, + 2155, + 4309, + 26469, + 191273, + 28569, + 7249, + 18383, + 24391, + 18192, + 30916, + 11422, + 22971, + 5332, + 52834, + 36251, + 166609, + 25714, + 2180, + 19100, + 4155, + 283181, + 5538, + 114217, + 56992, + 18820, + 18975, + 1749, + 53432, + 35475, + 5047, + 220082, + 115573, + 4986, + 807, + 14593, + 47125, + 15753, + 130834, + 33092, + 79857, + 64977, + 42476, + 5219, + 1883, + 5304, + 674, + 1045, + 6568, + 35669, + 11956, + 112673, + 531, + 15501, + 4968, + 12235, + 62118, + 29373, + 30292, + 43009, + 20886, + 829, + 872, + 5221, + 1049, + 627, + 10476, + 1434, + 1143, + 42128, + 919, + 6017, + 17701, + 31853, + 12265, + 7303, + 9491, + 36621, + 17671, + 29749, + 3048, + 78055, + 6337, + 1889, + 41458, + 959, + 5684, + 1556, + 6040, + 54635, + 13744, + 3799, + 16509, + 39109, + 32785, + 4038, + 31911, + 9242, + 17639, + 140168, + 53131, + 6867, + 15007, + 3580, + 3457, + 153585, + 8061, + 1103, + 145797, + 3715, + 1937, + 40045, + 30595, + 701, + 1499, + 22602, + 988, + 7662, + 5099, + 12136, + 34347, + 4878, + 5408, + 67297, + 5359, + 6217, + 936, + 163996, + 7155, + 1395, + 31870, + 1014, + 38339, + 741, + 10920, + 25515, + 2107, + 2982, + 23505, + 70379, + 39659, + 42085, + 209156, + 24538, + 13421, + 11936, + 972, + 2277, + 3886, + 16120, + 89422, + 27005, + 11022, + 22085, + 37168, + 16280, + 14840, + 1440, + 67262, + 25866, + 3158, + 124793, + 5375, + 15435, + 10869, + 4554, + 7998, + 6565, + 7365, + 17973, + 1620, + 22344, + 6191, + 27839, + 1264, + 11608, + 30912, + 3323, + 5961, + 9929, + 14284, + 23299, + 13627, + 13861, + 67780, + 9089, + 6786, + 2526, + 2040, + 7305, + 172037, + 24274, + 23742, + 6707, + 44374, + 172966, + 77377, + 6652, + 8693, + 132752, + 8438, + 25423, + 9845, + 140151, + 495, + 4616, + 18739, + 2800, + 19823, + 23021, + 44757, + 1080, + 2488, + 6678, + 9953, + 2115, + 82642, + 1606, + 2619, + 36302, + 29892, + 185319, + 6446, + 2875, + 18525, + 17152, + 1298, + 4223, + 23812, + 5295 + ] + }, + { + "counters": [ + 21242, + 1651, + 3222, + 1676, + 8610, + 7676, + 5906, + 2330, + 1866, + 9180, + 11327, + 24698, + 11312, + 3970, + 20628, + 7347, + 1599, + 17084, + 59309, + 2651, + 22089, + 2845, + 5520, + 8681, + 1423, + 12950, + 23560, + 36725, + 8536, + 16960, + 105613, + 142042, + 11131, + 3601, + 1188, + 56912, + 11167, + 12000, + 74012, + 48195, + 51074, + 67463, + 2177, + 8450, + 2796, + 5808, + 18557, + 7007, + 188997, + 21321, + 8513, + 10382, + 8063, + 66603, + 7236, + 79903, + 18701, + 2943, + 97364, + 62724, + 24622, + 9361, + 119258, + 3644, + 3371, + 24524, + 21905, + 7890, + 3004, + 16693, + 33173, + 2550, + 22397, + 15003, + 1436, + 5616, + 1357, + 6876, + 4459, + 9867, + 70240, + 1213, + 82157, + 58952, + 41878, + 15999, + 15836, + 3093, + 54141, + 30753, + 51153, + 3392, + 9533, + 7549, + 27724, + 33719, + 11292, + 809, + 37072, + 62374, + 14330, + 6659, + 1942, + 24744, + 26104, + 23223, + 39200, + 1527, + 2931, + 81425, + 59040, + 7803, + 18844, + 3357, + 15084, + 38562, + 14954, + 33930, + 28024, + 33269, + 6971, + 17560, + 1257, + 196778, + 16629, + 187606, + 10237, + 15567, + 24026, + 1962, + 2869, + 7522, + 1126, + 71129, + 181073, + 2726, + 113220, + 5516, + 5483, + 43142, + 9063, + 85511, + 2256, + 265708, + 6310, + 1737, + 15756, + 197889, + 92714, + 21614, + 13579, + 12803, + 4081, + 825, + 29347, + 92582, + 660, + 467, + 121160, + 1023, + 86236, + 1150, + 4951, + 68158, + 8028, + 2530, + 8040, + 14744, + 11293, + 4787, + 1121, + 30378, + 3495, + 3699, + 2229, + 123594, + 1873, + 2976, + 11433, + 77438, + 70815, + 2982, + 11057, + 3038, + 4152, + 3262, + 872, + 10078, + 69395, + 15444, + 2805, + 107586, + 12996, + 4548, + 6329, + 33381, + 10412, + 18782, + 1660, + 33162, + 4004, + 15826, + 1074, + 2156, + 9245, + 7789, + 2768, + 3207, + 57390, + 21604, + 1578, + 4855, + 5533, + 825, + 2313, + 158401, + 68995, + 876, + 104480, + 4148, + 589, + 5820, + 20139, + 28638, + 5543, + 95026, + 37079, + 2381, + 116081, + 81548, + 4880, + 19512, + 2488, + 11921, + 1517, + 20273, + 1567, + 28980, + 41667, + 23749, + 34508, + 161703, + 27958, + 18109, + 1774, + 8993, + 1460, + 47055, + 1292, + 3222, + 31206, + 60205, + 34647, + 78839, + 32608, + 4359, + 2555, + 102234, + 135359, + 2090, + 736, + 5407, + 634, + 20916, + 70323, + 29295, + 7935, + 40991, + 2560, + 46630, + 60697, + 14836, + 12234, + 82409, + 20167, + 5005, + 2518, + 4006, + 4381, + 19385, + 12891, + 6597, + 15563, + 613, + 29472, + 11889, + 2351, + 1736, + 156091, + 78145, + 5298, + 13681, + 2183, + 12043, + 2633, + 18355, + 101094, + 22759, + 4162, + 21386, + 2504, + 75251, + 1623, + 18509, + 14558, + 20850, + 7271, + 2551, + 2173, + 6530, + 6430, + 1182, + 2531, + 5504, + 11664, + 10554, + 4134, + 4749, + 9173, + 38034, + 88086, + 45910, + 2005, + 79758, + 5618, + 241087, + 7840, + 917, + 1030, + 54383, + 13673, + 58804, + 27226, + 8466, + 17526, + 41295, + 2975, + 5496, + 23883, + 13964, + 10382, + 874, + 14054, + 57224, + 1426, + 8149, + 2073, + 168043, + 2768, + 17011, + 2673, + 57389, + 1632, + 4555, + 31255, + 123888, + 12966, + 1941, + 38325, + 24034, + 3364, + 3930, + 83451, + 1702, + 107783, + 3813, + 5580, + 5500, + 2411, + 62057, + 19931, + 4845, + 7572, + 1020, + 136260, + 2104, + 3046, + 2404, + 659, + 13982, + 10618, + 28264, + 4358, + 4421, + 3857, + 3824, + 13396, + 60593, + 10357, + 2930, + 963, + 2357, + 3614, + 88087, + 22653, + 46761, + 181460, + 3954, + 12362, + 91217, + 18546, + 259523, + 20105, + 19698, + 9439, + 1241, + 45869, + 4975, + 29073, + 11712, + 9500, + 8111, + 11248, + 6696, + 46179, + 20856, + 10709, + 29591, + 18104, + 11681, + 1679, + 7998, + 7658, + 120727, + 15209, + 67089, + 4085, + 162490, + 1828, + 18056, + 3838, + 12483, + 19941, + 29225, + 27318, + 6305, + 13179, + 13719, + 42234, + 166887, + 58459, + 5848, + 2580, + 15325, + 27241, + 11141, + 10679, + 2968, + 37561, + 802, + 24897, + 11009, + 8800, + 35629, + 9022, + 34751, + 32545, + 7900, + 6259, + 35820, + 8279, + 1715, + 32534, + 698, + 920, + 1366, + 11143, + 39157, + 28948, + 211137, + 12003, + 13289, + 19566, + 5790, + 826, + 3124, + 6839, + 37689, + 4655, + 90207, + 1297, + 872, + 20749, + 2148, + 13210, + 40989, + 508, + 170566, + 212223, + 3881, + 1562, + 22030, + 115825, + 4517, + 1769, + 38853, + 3018, + 491, + 47653, + 1223, + 140049, + 7127, + 11403, + 39425, + 47286, + 23068, + 78497, + 742, + 1387, + 30088, + 1205, + 2269, + 2150, + 120780, + 62156, + 157553, + 7134, + 10909, + 10108, + 13457, + 14664, + 7957, + 11182, + 3174, + 46946, + 33206, + 5809, + 8370, + 912, + 6921, + 1390, + 4245, + 6159, + 187331, + 6349, + 5423, + 13938, + 14063, + 1300, + 3509, + 11105, + 48492, + 30337, + 902, + 55152, + 67306, + 3445, + 6894, + 934, + 1152, + 6605, + 3435, + 9096, + 1375, + 85173, + 6889, + 50912, + 84883, + 4201, + 20623, + 9030, + 7242, + 758, + 23656, + 330137, + 3922, + 3336, + 776, + 21096, + 8248, + 5993, + 6753, + 1068, + 35224, + 19595, + 138201, + 119043, + 1344, + 4246, + 78450, + 4435, + 29739, + 2593, + 47589, + 50665, + 5482, + 63205, + 3452, + 17085, + 10017, + 183399, + 22358, + 26194, + 1203, + 20325, + 5088, + 51844, + 11629, + 7839, + 13521, + 95988, + 11837, + 36533, + 100311, + 5606, + 102615, + 16871, + 15905, + 98250, + 7168, + 5567, + 2838, + 21521, + 2777, + 4665, + 1283, + 1176, + 9871, + 4238, + 76151, + 218595, + 21774, + 54816, + 65622, + 7433, + 44964, + 11307, + 3225, + 10649, + 34730, + 20843, + 2944, + 11042, + 25883, + 777, + 35264, + 20496, + 8743, + 1596, + 38279, + 2132, + 8651, + 27164, + 98922, + 1382, + 24214, + 218532, + 4810, + 1107, + 609, + 6091, + 3269, + 20789, + 23178, + 919, + 57764, + 5355, + 78919, + 34321, + 2950, + 13960, + 66782, + 5212, + 11825, + 8128, + 134801, + 14752, + 11471, + 7148, + 6636, + 6608, + 16802, + 10000, + 34267, + 13965, + 11857, + 2399, + 3968, + 2413, + 11804, + 15870, + 116648, + 1268, + 3859, + 4136, + 540, + 16647, + 374323, + 1373, + 4134, + 22828, + 58234, + 6242, + 40058, + 15519, + 51495, + 6777, + 6365, + 2145, + 1962, + 34150, + 31297, + 2255, + 6962, + 1719, + 233940, + 603, + 20506, + 10364, + 722, + 8940, + 20418, + 47802, + 4160, + 25205, + 17523, + 5000, + 10388, + 1490, + 4031, + 35408, + 37510, + 3567, + 21020, + 40085, + 27559, + 10230, + 1058, + 37383, + 3723, + 9684, + 2424, + 4439, + 7811, + 2116, + 76081, + 3054, + 52287, + 17457, + 42083, + 4451, + 26516, + 29039, + 88418, + 11708, + 82148, + 26244, + 458, + 5534, + 5520, + 25968, + 11388, + 305012, + 9465, + 52056, + 49487, + 4235, + 107847, + 59957, + 8039, + 742, + 6929, + 1215, + 8989, + 1533, + 1915, + 5866, + 11411, + 15579, + 2360, + 59472, + 27840, + 40893, + 208416, + 42679, + 1165, + 26087, + 34565, + 8588, + 7655, + 2494, + 20300, + 192064, + 4033, + 36259, + 15141, + 13833, + 2070, + 982, + 77892, + 1883, + 23844, + 16504, + 5837, + 32093, + 80330, + 7985, + 9179, + 5955, + 10463, + 741, + 4136, + 100828, + 13199, + 1326, + 1274, + 92470, + 4531, + 38795, + 589, + 55510, + 14969, + 27081, + 2475, + 28907, + 274424, + 12279, + 37842, + 29046, + 12203, + 3142, + 24728, + 26229, + 136494, + 12239, + 9211, + 2933, + 20871, + 54948, + 6197, + 9640, + 127274, + 4376, + 14448, + 1604, + 115618, + 4004, + 10763, + 1653, + 121582, + 163769, + 24950, + 74835, + 697, + 22595, + 9953, + 11394, + 20310, + 9545, + 525, + 733, + 3952, + 9192, + 11588, + 3486, + 3620, + 8688, + 28264, + 110767, + 8949, + 4554, + 49607, + 66873, + 84264, + 77742, + 14020, + 4521, + 1032, + 1132, + 42058, + 1225, + 26799, + 104551, + 24625, + 5814, + 60052, + 29214, + 6491, + 9066, + 1576, + 8276, + 2174, + 2551, + 3451, + 2213, + 7635, + 9065, + 6280, + 5431, + 1121, + 64270, + 8300, + 15961, + 65724, + 17943, + 1719, + 5229, + 1097, + 9084, + 11042, + 14795, + 63419, + 3275, + 1671, + 53371, + 22791, + 10206, + 16175, + 197261, + 29981, + 43957, + 7516, + 4177, + 2409, + 58681, + 3597, + 25308, + 3506, + 27697, + 1433, + 2996, + 4275, + 3607, + 3124, + 6129, + 22345, + 50042, + 8649, + 2450, + 29792, + 161882, + 6623, + 1232, + 6420, + 7585, + 25332, + 56920, + 5606, + 6441, + 174976, + 3127, + 4560, + 1476, + 337, + 7159, + 262781, + 871, + 10923, + 473, + 178169, + 65611, + 12401, + 3934, + 22271, + 36607, + 3018, + 26077, + 46855, + 1518, + 27011, + 1458, + 3753, + 9015, + 3297, + 1040, + 6467, + 37697, + 757, + 29312, + 7210, + 3623, + 19745, + 3269, + 4084, + 17114, + 556, + 36217, + 462, + 137117, + 1236, + 1127, + 11849, + 951, + 1073, + 61855, + 7114, + 7727, + 12546, + 4281, + 47727, + 4934, + 4548, + 9278, + 33311, + 4183, + 19927, + 11211, + 3184, + 10019, + 13437, + 8612, + 71793, + 9310, + 35545, + 2407, + 56910, + 3192, + 5238, + 163161, + 69620, + 1702, + 5366, + 31847, + 23831, + 22702, + 6175, + 7166, + 4559, + 2683, + 8660, + 1396, + 23234, + 4184, + 2625, + 5018, + 2791, + 3464, + 5319, + 6094, + 1107, + 16154, + 15314, + 1891, + 217556, + 37623, + 161646, + 114046, + 3641, + 4034, + 14950, + 23829, + 147423, + 2352, + 1053, + 12090, + 291052, + 6695, + 1298, + 23291, + 22791, + 8947, + 5084, + 2236, + 74699, + 18998, + 8027, + 5438, + 1216, + 2362, + 6498, + 2124, + 9755, + 5566, + 41637, + 20334, + 39778, + 4609, + 532, + 9582, + 8608, + 1506, + 3275, + 6986, + 5820, + 89043, + 75455, + 4135, + 2239, + 11970, + 1051, + 936, + 11523, + 1386, + 158933, + 15436, + 31356, + 12438, + 3213, + 113657, + 16146, + 66495, + 11104, + 5466, + 29417, + 1590, + 2827, + 8951, + 4593, + 95164, + 25125, + 26913, + 15181, + 14260, + 1366, + 69389, + 41626, + 33326, + 5553, + 8741, + 48756, + 11842, + 10488, + 8004, + 12168, + 144219, + 80973, + 4396, + 3038, + 22073, + 3991, + 14325, + 2196, + 13189, + 56353, + 23390, + 48942, + 783, + 29107, + 22455, + 271933, + 676, + 22206, + 108110, + 1087, + 1066, + 69117, + 1196, + 6002, + 6570, + 1034, + 58700, + 552, + 67021, + 929, + 8908, + 5525, + 1198, + 10697, + 45102, + 5398, + 307643, + 21152, + 26862, + 3907, + 1883, + 5461, + 4684, + 5313, + 241583, + 5435, + 14295, + 10535, + 24235, + 38736, + 77900, + 6497, + 26371, + 5703, + 2337, + 40293, + 3736, + 1153, + 1709, + 3974, + 5919, + 25015, + 48634, + 13387, + 37977, + 46857, + 43125, + 7239, + 3139, + 19427, + 5780, + 8659, + 102544, + 15304, + 4585, + 6275, + 4309, + 12024, + 11891, + 24263, + 27718, + 28151, + 1171, + 4947, + 6256, + 1398, + 1427, + 3101, + 15402, + 4420, + 49800, + 99844, + 180074, + 11543, + 58344, + 2307, + 4850, + 11262, + 3556, + 8735, + 5375, + 88712, + 12584, + 2374, + 4230, + 31618, + 15366, + 9592, + 2023, + 5168, + 16302, + 12047, + 1329, + 840, + 55994, + 3154, + 9902, + 166468, + 8069, + 1988, + 11457, + 4017, + 2885, + 17247, + 9067, + 15058, + 4558, + 19948, + 2497, + 10178, + 13720, + 98997, + 7154, + 12895, + 1207, + 753, + 56850, + 1038, + 27720, + 6329, + 82889, + 146202, + 4059, + 21400, + 804, + 37033, + 22855, + 22302, + 7043, + 18039, + 22574, + 2070, + 16763, + 1295, + 109268, + 4744, + 1049, + 7809, + 27224, + 3301, + 7353, + 2340, + 3766, + 8360, + 16476, + 1029, + 862, + 89312, + 3650, + 1155, + 4862, + 5807, + 8078, + 80704, + 15698, + 8845, + 63364, + 1360, + 8598, + 2738, + 5862, + 1036, + 21347, + 546, + 76811, + 7371, + 16355, + 35620, + 24225, + 14624, + 36183, + 87137, + 2683, + 1104, + 3697, + 2579, + 982, + 6279, + 9529, + 1850, + 21049, + 180551, + 736, + 459, + 121130, + 7052, + 13257, + 35333, + 30155, + 47575, + 13683, + 12604, + 11195, + 3669, + 19985, + 8430, + 7914, + 46823, + 8035, + 1835, + 9370, + 44099, + 8890, + 4865, + 1034, + 14401, + 6838, + 4208, + 29669, + 7391, + 10912, + 32878, + 4044, + 7755, + 9071, + 2195, + 22897, + 5582, + 9053, + 28534, + 4729, + 0, + 1299, + 2113, + 88126, + 5264, + 30298, + 13074, + 3519, + 16087, + 22988, + 3920, + 6284, + 3399, + 130834, + 34554, + 3166, + 3672, + 953, + 3873, + 2124, + 4087, + 955, + 2783, + 12154, + 47958, + 5246, + 117837, + 4527, + 939, + 47665, + 3683, + 2419, + 9543, + 10893, + 10713, + 1292, + 1040, + 5613, + 6188, + 4698, + 156420, + 7252, + 1263, + 97326, + 5057, + 7610, + 54183, + 6657, + 4487, + 3363, + 5361, + 10311, + 1478, + 7226, + 1564, + 34054, + 19421, + 50170, + 4855, + 43259, + 58744, + 9918, + 7764, + 1531, + 6347, + 923, + 132872, + 88272, + 267517, + 7003, + 9878, + 11538, + 3121, + 210166, + 28472, + 10435, + 10602, + 12871, + 3936, + 53120, + 114068, + 28851, + 94878, + 1326, + 2301, + 156374, + 2892, + 13155, + 9902, + 58538, + 8669, + 3720, + 9813, + 2184, + 7755, + 155129, + 2198, + 1504, + 64152, + 6030, + 28121, + 2087, + 3482, + 681, + 18925, + 4966, + 220696, + 33588, + 2395, + 7023, + 12557, + 5939, + 1974, + 9921, + 7404, + 435694, + 5276, + 1277, + 1099, + 1010, + 1643, + 58704, + 7823, + 9419, + 12610, + 17644, + 1250, + 93607, + 10608, + 736, + 104371, + 23859, + 22506, + 12116, + 16909, + 31282, + 9582, + 7780, + 4698, + 42875, + 13508, + 3797, + 6382, + 3802, + 6114, + 879, + 717, + 175205, + 48554, + 3093, + 937, + 8650, + 1596, + 31254, + 45403, + 226836, + 44782, + 19879, + 2092, + 10929, + 38189, + 5174, + 7853, + 17266, + 15932, + 30631, + 19963, + 2146, + 1514, + 1134, + 2521, + 3961, + 7602, + 20471, + 79544, + 40141, + 8497, + 1110, + 698, + 43880, + 34060, + 796, + 1441, + 2452, + 8660, + 14544, + 2679, + 837, + 4532, + 26926, + 174109, + 4560, + 44605, + 11982, + 6280, + 3036, + 31098, + 36629, + 2571, + 3714, + 19025, + 13474, + 11980, + 12246, + 408, + 1781, + 44419, + 186210, + 6984, + 10886, + 62146, + 323053, + 76326, + 3846, + 1708, + 6475, + 646, + 2871, + 169372, + 4357, + 1859, + 3272, + 164023, + 2781, + 13030, + 44668, + 2691, + 2241, + 8335, + 6193, + 1590, + 4915, + 10014, + 21399, + 5498, + 162658, + 115509, + 31572, + 3368, + 1695, + 8490, + 2057, + 14661, + 6144, + 9381, + 35533, + 81441, + 66914, + 6572, + 5609, + 6544, + 4626, + 2944, + 7877, + 28769, + 3454, + 7030, + 146822, + 2983, + 6846, + 178121, + 170350, + 3131, + 97051, + 155787, + 10569, + 19240, + 453, + 10524, + 999, + 17231, + 17571, + 8778, + 2425, + 56195, + 70253, + 8060, + 1950, + 3011, + 1557, + 41726, + 944, + 26975, + 549, + 4111, + 7313, + 15973, + 22419, + 33648, + 11055, + 4795, + 38210, + 11867, + 15122, + 15036, + 87803, + 13165, + 103038, + 4208, + 1514, + 92018, + 1748, + 2760, + 149761, + 899, + 15229, + 55703, + 8265, + 15314, + 9766, + 37139, + 205254, + 16980, + 36446, + 17179, + 1317, + 45216, + 5238, + 22800, + 5220, + 19231, + 1222, + 11420, + 4430, + 5077, + 4006, + 14401, + 26497, + 876, + 17436, + 2669, + 9709, + 47629, + 36689, + 7116, + 2720, + 1457, + 9889, + 13795, + 28662, + 174987, + 1548, + 3541, + 36841, + 24716, + 1712, + 38596, + 22847, + 20051, + 12317, + 3406, + 21098, + 157128, + 1283, + 8949, + 26281, + 79940, + 2915, + 11188, + 791, + 5494, + 22164, + 5326, + 68119, + 14526, + 7888, + 8721, + 1826, + 29550, + 4830, + 114219, + 2677, + 1119, + 10247, + 23934, + 1272, + 47034, + 3467, + 2039, + 2014, + 695, + 150213, + 11739, + 2298, + 8271, + 18517, + 57402, + 13556, + 1936, + 38584, + 44901, + 7777, + 58505, + 90183, + 37617, + 35276, + 1359, + 160734, + 11185, + 5511, + 14224, + 33448, + 3843, + 2840, + 41425, + 22108, + 9856, + 381151, + 33288, + 15539, + 47886, + 10406, + 4153, + 7296, + 26602, + 1318, + 1918, + 15187, + 3797, + 4056, + 5710, + 11425, + 81295, + 11092, + 6574, + 3456, + 4340, + 1473, + 10430, + 8127, + 43435, + 27931, + 18629, + 1171, + 7385, + 255668, + 11752, + 1460, + 5396, + 4732, + 74511, + 1175, + 5793, + 5858, + 54185, + 2540, + 1362, + 3591, + 13827, + 4520, + 176324, + 6089, + 11965, + 5504, + 6450, + 9141, + 5576, + 1051, + 21441, + 6790, + 1559, + 6439, + 80308, + 8173, + 25597, + 24861, + 8336, + 985, + 878, + 178395, + 12886, + 17406, + 22897, + 14517, + 4011, + 5352, + 1871, + 42528, + 9412, + 4844, + 164905, + 11224, + 51570, + 4203, + 9732, + 13905, + 6248, + 52108, + 46208, + 105915, + 19859, + 7277, + 1660, + 6445, + 2932, + 38796, + 9556, + 3211, + 11579, + 19840, + 84057, + 68335, + 11737, + 66139, + 3731, + 12588, + 18375, + 8612, + 14670, + 9108, + 84822, + 5620, + 1089, + 7817, + 326961, + 179409, + 9221, + 2996, + 35226, + 16778, + 721, + 3149, + 167976, + 5639, + 33802, + 12777, + 58944, + 9295, + 9087, + 3862, + 164520, + 38182, + 8420, + 7461, + 16499, + 6628, + 276710, + 7483, + 177590, + 61125, + 5015, + 18776, + 29908, + 61171, + 23688, + 29051, + 12766, + 1333, + 16582, + 1241, + 1310, + 3665, + 106270, + 69399, + 5253, + 26730, + 18376, + 149973, + 41949, + 1448, + 6039, + 3791, + 40926, + 6672, + 5438, + 6994, + 33677, + 1175, + 6058, + 32126, + 830, + 7736, + 8454, + 74177, + 16229, + 52632, + 5706, + 24086, + 1788, + 4734, + 7084, + 1895, + 16427, + 1420, + 29952, + 1447, + 4487, + 56156, + 9859, + 15043, + 47819, + 43742, + 110147, + 4749, + 167359, + 28607, + 155888, + 24324, + 37369, + 6387, + 8161, + 76256, + 232319, + 2133, + 40603, + 10858, + 4202, + 940, + 9315, + 4135, + 37912, + 32115, + 14551, + 6459, + 15409, + 37292, + 984, + 6362, + 1838, + 4819, + 1746, + 2530, + 77388, + 46149, + 41954, + 24302, + 50728, + 56967, + 899, + 202301, + 5243, + 144841, + 9324, + 3159, + 59327, + 4271, + 1175, + 6826, + 1023, + 3845, + 16941, + 991, + 3728, + 13639, + 5664, + 30922, + 2982, + 7005, + 2741, + 38188, + 17884, + 5413, + 6346, + 6256, + 2127, + 1076, + 14361, + 192266, + 283226, + 2980, + 612, + 3584, + 1729, + 1542, + 4743, + 68549, + 4192, + 4318, + 36175, + 10274, + 32521, + 2088, + 4713, + 23963, + 49149, + 12251, + 2471, + 6026, + 1290, + 6440, + 22782, + 45448, + 10629, + 12443, + 60596, + 2123, + 7791, + 8975, + 8502, + 209755, + 5937, + 1165, + 219612 + ] + }, + { + "counters": [ + 2595, + 1363, + 3062, + 102227, + 4918, + 4503, + 37025, + 37203, + 3833, + 3133, + 1885, + 43257, + 8977, + 23212, + 6516, + 5020, + 1894, + 219574, + 28583, + 8677, + 21609, + 35521, + 11297, + 22754, + 17257, + 2630, + 6529, + 3970, + 36794, + 19734, + 30036, + 4226, + 64257, + 7158, + 51120, + 71197, + 4865, + 1342, + 10758, + 11695, + 7422, + 74089, + 2690, + 15806, + 21573, + 4027, + 15721, + 4248, + 3694, + 6027, + 10672, + 486, + 1676, + 199274, + 19688, + 4658, + 77489, + 21836, + 96706, + 85318, + 14080, + 1595, + 12761, + 4701, + 3526, + 15762, + 31397, + 3711, + 7681, + 7915, + 41995, + 56727, + 15684, + 2824, + 5410, + 20031, + 58748, + 265374, + 1896, + 360873, + 1104, + 4217, + 343337, + 6448, + 1527, + 608, + 5641, + 21537, + 8546, + 7459, + 157715, + 1427, + 17594, + 32607, + 46414, + 1127, + 19770, + 1270, + 1074, + 16997, + 163917, + 2426, + 48883, + 1576, + 5563, + 99824, + 1224, + 1309, + 13159, + 8227, + 6186, + 4405, + 25089, + 25627, + 3767, + 87716, + 6638, + 105493, + 15449, + 7875, + 3677, + 28153, + 1341, + 25869, + 4999, + 19592, + 713, + 101725, + 1221, + 6516, + 11721, + 1788, + 1252, + 4930, + 4134, + 7186, + 27161, + 1652, + 172894, + 3900, + 7093, + 1540, + 43709, + 114745, + 9060, + 140190, + 3689, + 12680, + 81065, + 60350, + 1671, + 5490, + 20344, + 5539, + 12393, + 211520, + 6094, + 42061, + 11414, + 6371, + 11415, + 2159, + 4116, + 50842, + 2477, + 6248, + 16614, + 88196, + 10605, + 50542, + 119152, + 6037, + 2111, + 85344, + 6883, + 7170, + 11713, + 45091, + 3552, + 17592, + 9023, + 817, + 45681, + 18289, + 6630, + 10980, + 1658, + 25090, + 2458, + 1852, + 108101, + 856, + 9427, + 2258, + 112959, + 14348, + 3404, + 1896, + 5493, + 7475, + 3145, + 18869, + 6704, + 27277, + 9556, + 91347, + 10670, + 1849, + 2987, + 827, + 2822, + 84197, + 11015, + 34582, + 4092, + 3226, + 36275, + 13494, + 10633, + 12224, + 1016, + 11929, + 1508, + 6216, + 5703, + 5780, + 38288, + 4387, + 2426, + 4060, + 3617, + 37834, + 189300, + 28074, + 183951, + 121452, + 2204, + 3063, + 9587, + 10716, + 6203, + 3020, + 26513, + 76648, + 4287, + 60743, + 34865, + 25116, + 905, + 21161, + 13060, + 23197, + 394, + 59004, + 4333, + 25387, + 74046, + 78148, + 7568, + 11949, + 2676, + 12635, + 58724, + 29803, + 14841, + 68901, + 2299, + 4275, + 7652, + 13039, + 14810, + 2827, + 2859, + 5510, + 12318, + 59580, + 7761, + 38254, + 2684, + 5445, + 19835, + 3824, + 11276, + 16883, + 4414, + 8770, + 5741, + 36057, + 3300, + 4107, + 7503, + 4660, + 38735, + 3612, + 40602, + 6739, + 17478, + 1732, + 57920, + 8610, + 191291, + 9384, + 33186, + 6350, + 6806, + 4413, + 13135, + 3827, + 6288, + 24266, + 58486, + 1466, + 17837, + 271241, + 10195, + 4817, + 44643, + 10505, + 1910, + 6258, + 4277, + 29740, + 191163, + 19667, + 5193, + 81565, + 13010, + 3668, + 874, + 0, + 28312, + 49695, + 27019, + 34981, + 17649, + 47910, + 4068, + 63901, + 1207, + 2766, + 161487, + 163845, + 1397, + 3648, + 6150, + 7254, + 21165, + 45606, + 49616, + 2992, + 33838, + 8104, + 4880, + 13947, + 31082, + 618, + 15020, + 3734, + 45996, + 2603, + 3453, + 15710, + 30701, + 17909, + 9691, + 7452, + 33796, + 3495, + 5109, + 2867, + 3083, + 23137, + 36338, + 5459, + 45500, + 19591, + 12187, + 53953, + 1508, + 2557, + 3342, + 7156, + 20707, + 3867, + 938, + 39570, + 5954, + 83326, + 647, + 6756, + 37522, + 45277, + 18757, + 160934, + 213563, + 15663, + 74845, + 948, + 16871, + 520, + 1545, + 5787, + 75535, + 161916, + 2372, + 3782, + 7199, + 1089, + 11255, + 47601, + 22683, + 4138, + 98846, + 52740, + 85429, + 10011, + 27856, + 1140, + 36750, + 31948, + 24863, + 3792, + 7851, + 873, + 3208, + 52665, + 6723, + 67265, + 209623, + 3188, + 42562, + 19871, + 8273, + 5269, + 8324, + 5366, + 2812, + 5848, + 1361, + 17559, + 19429, + 2130, + 1386, + 14767, + 20871, + 56571, + 58230, + 2994, + 1556, + 11195, + 21487, + 13122, + 1974, + 3524, + 58268, + 6825, + 17537, + 2129, + 13488, + 2630, + 22242, + 106721, + 26836, + 3430, + 492, + 27031, + 16403, + 5723, + 12072, + 3811, + 136948, + 4045, + 1142, + 5649, + 2621, + 5606, + 46359, + 1762, + 1750, + 27488, + 10989, + 960, + 95605, + 1820, + 174987, + 90232, + 255077, + 2699, + 25829, + 21636, + 22976, + 8162, + 2669, + 9001, + 4162, + 153632, + 83443, + 1334, + 4480, + 2396, + 33433, + 6440, + 458, + 14609, + 1468, + 47085, + 46195, + 1868, + 32467, + 2932, + 3052, + 2950, + 5776, + 3439, + 46929, + 10856, + 92937, + 3595, + 27654, + 3928, + 6614, + 17283, + 14998, + 2449, + 16214, + 2954, + 2525, + 6286, + 27946, + 25074, + 2810, + 1047, + 3685, + 3902, + 28199, + 36638, + 1251, + 151562, + 5671, + 2368, + 5799, + 822, + 4597, + 1483, + 170153, + 16410, + 17131, + 8929, + 145968, + 104597, + 15052, + 9172, + 10790, + 1089, + 41643, + 1488, + 7704, + 3375, + 2190, + 15108, + 2947, + 14795, + 31982, + 10278, + 141720, + 89573, + 211597, + 6827, + 8955, + 52961, + 1152, + 126408, + 26375, + 4473, + 4060, + 4202, + 20583, + 3594, + 493, + 70049, + 731, + 2324, + 4508, + 8437, + 1096, + 77807, + 24305, + 7677, + 3552, + 2382, + 5056, + 5031, + 28021, + 14327, + 4643, + 11120, + 2807, + 1308, + 21641, + 9174, + 25051, + 3972, + 51703, + 4380, + 7406, + 31623, + 63388, + 1954, + 144638, + 1938, + 12987, + 206838, + 38788, + 64211, + 117863, + 60210, + 12441, + 4233, + 7149, + 7640, + 706, + 26280, + 57249, + 4154, + 3124, + 2584, + 26730, + 1435, + 2632, + 713, + 12672, + 766, + 11666, + 4169, + 2682, + 4463, + 12174, + 24444, + 29143, + 3398, + 37593, + 5388, + 5969, + 15408, + 93254, + 13037, + 10752, + 14219, + 221649, + 163666, + 148554, + 5261, + 1550, + 14389, + 12313, + 16353, + 12577, + 2541, + 17980, + 25311, + 116178, + 31601, + 3149, + 3374, + 993, + 11866, + 292159, + 1680, + 9310, + 8424, + 3850, + 10664, + 8577, + 7040, + 8364, + 3389, + 4405, + 29346, + 9577, + 20353, + 951, + 14792, + 114326, + 10929, + 86344, + 23460, + 3002, + 41561, + 3530, + 1644, + 12274, + 2991, + 6721, + 9129, + 62673, + 19191, + 33392, + 12426, + 5297, + 3374, + 31531, + 3317, + 6301, + 622, + 5680, + 17191, + 5056, + 8400, + 6726, + 1154, + 2946, + 3515, + 2354, + 510, + 6152, + 86092, + 78159, + 3419, + 2064, + 13358, + 2877, + 36310, + 8555, + 1255, + 52138, + 2639, + 624, + 12109, + 27786, + 140307, + 33745, + 3696, + 14900, + 9503, + 3764, + 8451, + 7606, + 9998, + 1474, + 1043, + 4879, + 4271, + 1497, + 5764, + 7346, + 15778, + 192985, + 13421, + 1637, + 15987, + 39303, + 1593, + 256786, + 49811, + 16051, + 18286, + 1234, + 21656, + 5277, + 84786, + 16861, + 1408, + 12315, + 50026, + 43624, + 4869, + 13202, + 7326, + 37655, + 5382, + 141093, + 64464, + 16793, + 41603, + 5268, + 27331, + 6974, + 6464, + 27512, + 2095, + 165130, + 15330, + 2759, + 1898, + 20758, + 162051, + 3849, + 3281, + 11822, + 56968, + 49163, + 4149, + 8442, + 10986, + 18736, + 4937, + 27706, + 5513, + 23901, + 5151, + 13593, + 2155, + 103937, + 954, + 2083, + 26094, + 1528, + 2051, + 3871, + 1737, + 1152, + 56609, + 5515, + 13872, + 2958, + 5832, + 14597, + 5804, + 15153, + 36003, + 4520, + 17230, + 1048, + 2676, + 62915, + 5659, + 98968, + 59031, + 603, + 73807, + 36436, + 250312, + 1599, + 25477, + 4393, + 1111, + 13571, + 1110, + 51975, + 5030, + 1688, + 1107, + 3953, + 2794, + 150808, + 185336, + 12714, + 3711, + 12173, + 42786, + 4616, + 4309, + 22081, + 1097, + 60007, + 48624, + 1864, + 1179, + 5410, + 935, + 160776, + 1503, + 18678, + 51149, + 270297, + 1622, + 5965, + 60481, + 23321, + 2136, + 7634, + 6731, + 6051, + 19237, + 1709, + 4663, + 67102, + 26963, + 36049, + 9060, + 182253, + 3487, + 62790, + 15964, + 19586, + 57977, + 10208, + 11147, + 27822, + 103317, + 1978, + 34639, + 141480, + 116184, + 548, + 27790, + 10255, + 21137, + 46064, + 2349, + 263758, + 4864, + 29599, + 10193, + 49207, + 1014, + 21461, + 45652, + 35582, + 5859, + 7513, + 3643, + 79255, + 60172, + 6495, + 3006, + 2192, + 6832, + 2230, + 11482, + 6595, + 34386, + 53636, + 115681, + 35202, + 252591, + 511, + 2077, + 3261, + 13277, + 4592, + 5910, + 3911, + 4976, + 52271, + 31949, + 11596, + 4050, + 11476, + 84855, + 9800, + 6879, + 43102, + 1851, + 1606, + 74970, + 64314, + 92709, + 71168, + 194906, + 4477, + 225744, + 2604, + 3032, + 1242, + 7573, + 75894, + 10741, + 14693, + 605, + 12523, + 1215, + 26611, + 2169, + 1797, + 12238, + 7713, + 81013, + 14063, + 874, + 7350, + 4567, + 61602, + 25082, + 3607, + 19899, + 5452, + 5093, + 6094, + 4053, + 2383, + 57077, + 106289, + 33194, + 15945, + 847, + 980, + 20112, + 152726, + 22178, + 2672, + 143978, + 86157, + 96073, + 8605, + 1683, + 31637, + 17620, + 7239, + 73201, + 16508, + 72368, + 118369, + 156576, + 48855, + 6498, + 86127, + 48885, + 2018, + 7235, + 8716, + 128864, + 97023, + 12311, + 21139, + 24905, + 5800, + 16209, + 841, + 24945, + 1639, + 1583, + 55176, + 45605, + 5005, + 2043, + 10193, + 1400, + 25253, + 2041, + 26812, + 22167, + 18051, + 10337, + 27568, + 968, + 11222, + 34852, + 10052, + 2393, + 21149, + 32807, + 563, + 14155, + 85843, + 732, + 6199, + 17772, + 57604, + 8210, + 4066, + 4550, + 6705, + 2741, + 3292, + 3162, + 882, + 9497, + 41462, + 5754, + 10603, + 175231, + 32532, + 6722, + 54746, + 10580, + 136889, + 68715, + 30984, + 7591, + 18864, + 5234, + 11131, + 1844, + 17848, + 29013, + 17594, + 6363, + 34606, + 8253, + 10300, + 15461, + 8318, + 2944, + 3962, + 27702, + 25955, + 8309, + 4100, + 1080, + 4876, + 1553, + 13320, + 4886, + 8079, + 8945, + 72836, + 2023, + 10267, + 105145, + 10745, + 28545, + 40357, + 6995, + 1130, + 834, + 4432, + 19048, + 1791, + 60261, + 43301, + 34913, + 21225, + 10466, + 35450, + 7429, + 2457, + 48701, + 2692, + 47649, + 1224, + 3165, + 808, + 131575, + 31185, + 4960, + 1464, + 86634, + 666, + 2764, + 1456, + 143187, + 1100, + 820, + 137037, + 173297, + 2973, + 1266, + 12423, + 17013, + 4615, + 1693, + 15577, + 2584, + 4358, + 19716, + 42924, + 1002, + 128165, + 6959, + 15030, + 2566, + 34485, + 1512, + 6740, + 11479, + 1046, + 17303, + 9381, + 25289, + 16190, + 40326, + 19019, + 4967, + 8073, + 10058, + 833, + 1464, + 32944, + 3982, + 10252, + 38170, + 160042, + 115435, + 795, + 66036, + 62858, + 30394, + 48580, + 28325, + 17136, + 9305, + 38865, + 18807, + 73949, + 11599, + 1669, + 70071, + 3808, + 188168, + 14216, + 112600, + 146060, + 6906, + 57194, + 6056, + 4829, + 12304, + 2086, + 111607, + 9165, + 968, + 3183, + 1392, + 75363, + 31807, + 246057, + 18212, + 3282, + 2994, + 4030, + 4505, + 3422, + 174899, + 50517, + 7487, + 6773, + 168998, + 1116, + 10697, + 11803, + 6539, + 2056, + 1792, + 10524, + 7598, + 18203, + 9132, + 28654, + 71416, + 23574, + 14364, + 6727, + 1686, + 1052, + 81485, + 28818, + 13777, + 27845, + 5738, + 1397, + 6055, + 778, + 52580, + 17575, + 5631, + 7490, + 176326, + 1087, + 7688, + 22998, + 860, + 8957, + 2509, + 1335, + 103341, + 8724, + 34864, + 6096, + 1778, + 26240, + 10612, + 2042, + 7598, + 20926, + 31597, + 56873, + 8595, + 8096, + 619, + 5486, + 32231, + 59292, + 9357, + 3828, + 5226, + 1491, + 10331, + 1842, + 61111, + 344441, + 8335, + 98050, + 21305, + 23523, + 121127, + 24912, + 6609, + 10041, + 7382, + 3761, + 9226, + 4763, + 12174, + 6401, + 8527, + 3216, + 10214, + 2141, + 11914, + 6095, + 121497, + 11518, + 13203, + 84470, + 985, + 80623, + 34625, + 29413, + 44881, + 20623, + 4392, + 48843, + 10329, + 14803, + 4257, + 76840, + 432, + 6404, + 1709, + 671, + 718, + 59828, + 8385, + 45973, + 41328, + 7758, + 247832, + 198579, + 160845, + 8922, + 155607, + 13524, + 9644, + 2466, + 9027, + 1825, + 16418, + 21006, + 54374, + 1417, + 6783, + 1131, + 10586, + 128739, + 51716, + 2584, + 14852, + 13510, + 60307, + 4061, + 17078, + 888, + 2730, + 30570, + 93892, + 2983, + 15275, + 7421, + 165292, + 61802, + 10217, + 17486, + 4739, + 18178, + 26910, + 980, + 13129, + 10926, + 4061, + 689, + 3148, + 920, + 57378, + 199314, + 2473, + 6599, + 2997, + 7379, + 88167, + 5334, + 8348, + 14375, + 1385, + 2735, + 1987, + 5730, + 5745, + 13762, + 3496, + 4470, + 188949, + 3634, + 9292, + 1404, + 7830, + 17124, + 43363, + 8871, + 3137, + 155464, + 1756, + 1128, + 33016, + 3020, + 20005, + 50001, + 7668, + 1281, + 169312, + 3421, + 6987, + 6724, + 96965, + 23352, + 105152, + 16491, + 8570, + 998, + 2438, + 18782, + 11090, + 118376, + 4838, + 17440, + 2981, + 27789, + 2206, + 1484, + 1092, + 2139, + 884, + 9533, + 104511, + 2760, + 1403, + 56204, + 560, + 566, + 16052, + 94976, + 5591, + 916, + 18105, + 1130, + 14095, + 55519, + 19103, + 1847, + 2834, + 465, + 5541, + 14608, + 4586, + 19921, + 19488, + 6254, + 2422, + 42989, + 10816, + 44914, + 1039, + 54809, + 9447, + 4575, + 1368, + 35093, + 29357, + 7684, + 9387, + 4698, + 45201, + 10529, + 3541, + 21420, + 1344, + 7395, + 134106, + 21806, + 7340, + 23426, + 6019, + 3235, + 29921, + 1110, + 1575, + 5151, + 22785, + 166086, + 57547, + 1313, + 177466, + 7332, + 2470, + 4369, + 104727, + 47985, + 5756, + 3115, + 478, + 84460, + 914, + 1155, + 14845, + 1961, + 3479, + 21649, + 9217, + 373, + 11486, + 26635, + 28865, + 9090, + 10980, + 1141, + 1255, + 52286, + 57703, + 2327, + 5134, + 2032, + 2127, + 1499, + 1983, + 2418, + 25064, + 107492, + 3375, + 49364, + 4253, + 5883, + 3523, + 22052, + 21611, + 13298, + 575, + 260775, + 4172, + 118427, + 60034, + 2291, + 65108, + 4334, + 958, + 1442, + 22577, + 4265, + 7093, + 11078, + 46190, + 4989, + 47571, + 15201, + 5083, + 7379, + 15246, + 4991, + 51296, + 41428, + 53487, + 31569, + 11601, + 11056, + 24954, + 12423, + 12679, + 13693, + 4514, + 2475, + 3136, + 11898, + 4768, + 1397, + 8906, + 3879, + 70196, + 5312, + 12230, + 58000, + 9383, + 4541, + 5490, + 1052, + 3834, + 3864, + 6585, + 4022, + 24879, + 66459, + 1134, + 28795, + 30117, + 16157, + 25411, + 3690, + 1430, + 930, + 13496, + 713, + 10913, + 3237, + 52090, + 11171, + 5000, + 875, + 11837, + 18250, + 10407, + 7315, + 2142, + 116898, + 22032, + 1386, + 14205, + 20709, + 47752, + 19121, + 320118, + 158808, + 6511, + 224433, + 43494, + 12731, + 54970, + 14569, + 4654, + 16559, + 29726, + 1562, + 130052, + 3871, + 163642, + 99619, + 37429, + 3893, + 5885, + 5115, + 3094, + 29194, + 1955, + 51930, + 77297, + 2114, + 3787, + 4131, + 3788, + 2571, + 5422, + 28314, + 22650, + 61103, + 23397, + 9187, + 1682, + 119588, + 105224, + 935, + 3725, + 9510, + 618, + 2033, + 6289, + 1257, + 2596, + 102317, + 36171, + 6488, + 1851, + 4888, + 16672, + 162413, + 1000, + 16183, + 1245, + 32198, + 4053, + 19049, + 14122, + 643, + 5159, + 3600, + 11304, + 95429, + 1070, + 1334, + 1023, + 1322, + 52005, + 4567, + 7707, + 4233, + 2005, + 4472, + 1580, + 75416, + 7625, + 9819, + 14176, + 14228, + 16576, + 1132, + 13106, + 52873, + 10459, + 199860, + 23691, + 5359, + 32094, + 114101, + 14976, + 37510, + 16012, + 4185, + 20753, + 9737, + 5122, + 48385, + 33445, + 1129, + 989, + 17147, + 893, + 24864, + 1057, + 2296, + 27378, + 10401, + 7198, + 32561, + 2120, + 8307, + 215406, + 21610, + 160843, + 22375, + 9109, + 3498, + 28050, + 36603, + 6516, + 39604, + 3291, + 825, + 4546, + 92958, + 33472, + 61774, + 28181, + 52326, + 1044, + 2242, + 2856, + 3397, + 17971, + 727, + 7963, + 2367, + 8406, + 10502, + 5549, + 1327, + 12588, + 15677, + 95075, + 808, + 6617, + 22805, + 5807, + 38062, + 713, + 1041, + 91130, + 133986, + 14239, + 4390, + 57422, + 5968, + 37833, + 6169, + 152564, + 9529, + 23808, + 19307, + 10605, + 2390, + 30481, + 3124, + 52809, + 2033, + 38015, + 15405, + 60365, + 20081, + 23187, + 22685, + 176244, + 6209, + 2185, + 71376, + 42133, + 198870, + 4319, + 5291, + 37299, + 18268, + 4329, + 43168, + 32887, + 10488, + 15669, + 38032, + 6146, + 10285, + 87339, + 1321, + 11329, + 701, + 2946, + 719, + 5885, + 4517, + 29111, + 2896, + 6753, + 1917, + 16711, + 10530, + 7029, + 15761, + 8889, + 54718, + 22480, + 1081, + 1378, + 5173, + 3550, + 16697, + 5723, + 16657, + 70232, + 4554, + 4957, + 5795, + 1438, + 669, + 45101, + 1653, + 1042, + 16074, + 45451, + 16441, + 8854, + 10176, + 517, + 983, + 8006, + 1693, + 11006, + 11301, + 7695, + 4796, + 1272, + 917, + 27498, + 12861, + 9520, + 3225, + 6043, + 87360, + 19269, + 9036, + 1036, + 169241, + 5936, + 1310, + 1908, + 1543, + 7489, + 3880, + 34997, + 3850, + 19927, + 2422, + 28250, + 86041, + 7277, + 8018, + 4110, + 2089, + 1458, + 77201, + 1223, + 7257, + 39846, + 76826, + 838, + 2878, + 7027, + 26300, + 20273, + 25276, + 24521, + 1703, + 510, + 30844, + 15659, + 10456, + 861, + 23757, + 4330, + 595, + 26455, + 12838, + 166810, + 124151, + 77522, + 6556, + 1017, + 195807, + 7431, + 3126, + 4652, + 4645, + 6140, + 12836, + 62135, + 3048, + 21876, + 4355, + 1675, + 1157, + 78114, + 8812, + 1463, + 756, + 11475, + 33753, + 1167, + 21583, + 3714, + 6217, + 3630, + 81324, + 278525, + 160778, + 8758, + 7736, + 22447, + 54820, + 1562, + 1029, + 6802, + 13418, + 169671, + 12775, + 3680, + 1741, + 426, + 100600, + 2441, + 57548, + 27617, + 12056, + 9388, + 2150, + 1683, + 6346, + 1152, + 17347, + 2896, + 6334, + 8278, + 9701, + 4269, + 7845, + 92225, + 113775, + 4599, + 1363, + 6581, + 2059, + 14572, + 18571, + 6031, + 56057, + 577, + 76450, + 6245, + 49355, + 7610, + 155606, + 105325, + 51184, + 21301, + 19481, + 30799, + 50855, + 60081, + 8634, + 34238, + 1459, + 5996, + 1367, + 27891, + 106726, + 2157, + 34255, + 2019, + 79799, + 1235, + 4426, + 34235, + 50073, + 7742, + 127676, + 39968, + 21344, + 110586, + 1252, + 183981, + 1908, + 24872, + 5550, + 32351, + 184197, + 2366, + 1740, + 1275, + 7675, + 1280, + 1754, + 134287, + 1534, + 22751, + 37253, + 33371, + 187712, + 10076, + 604, + 20786, + 65331, + 2166, + 44969, + 83989, + 192823, + 6500, + 62253, + 1571 + ] + }, + { + "counters": [ + 11191, + 7387, + 23990, + 23944, + 6212, + 39200, + 16312, + 57199, + 2447, + 1103, + 78554, + 1423, + 10149, + 3041, + 2814, + 2932, + 101357, + 2765, + 5079, + 112174, + 1728, + 1436, + 6156, + 15058, + 2928, + 4697, + 4503, + 1648, + 1684, + 7798, + 4366, + 32599, + 109361, + 61495, + 38296, + 6836, + 3762, + 854, + 243317, + 4971, + 112645, + 82622, + 4514, + 4568, + 14751, + 23883, + 3340, + 40537, + 26093, + 2404, + 47089, + 14882, + 1989, + 27481, + 30328, + 843, + 20941, + 5323, + 89083, + 6395, + 10517, + 17299, + 3693, + 8135, + 221937, + 51166, + 14917, + 3408, + 1980, + 47325, + 113049, + 1303, + 88460, + 2676, + 3952, + 58382, + 72955, + 33755, + 2204, + 29188, + 116632, + 5652, + 2071, + 6353, + 55577, + 15670, + 5007, + 17304, + 166633, + 12452, + 25126, + 2282, + 21249, + 28918, + 1777, + 128552, + 179074, + 4999, + 8544, + 159865, + 3824, + 12895, + 1652, + 1743, + 10196, + 37149, + 167176, + 18109, + 2852, + 3142, + 65083, + 7474, + 764, + 44332, + 4569, + 15359, + 907, + 37416, + 5279, + 30905, + 2504, + 127470, + 7784, + 1000, + 45857, + 206011, + 2605, + 85539, + 81647, + 8674, + 2874, + 4811, + 2205, + 3181, + 914, + 26348, + 8230, + 2216, + 31414, + 7031, + 832, + 12696, + 46574, + 656, + 5202, + 8845, + 58798, + 2283, + 19655, + 34684, + 5249, + 15826, + 8385, + 9666, + 4837, + 20205, + 615, + 4678, + 8545, + 79977, + 45809, + 5228, + 1431, + 17497, + 19047, + 3763, + 74933, + 40142, + 23224, + 81668, + 52665, + 1147, + 5415, + 151833, + 104366, + 60358, + 66628, + 20884, + 17163, + 6181, + 171813, + 30247, + 22194, + 19869, + 2117, + 95725, + 5604, + 168899, + 12282, + 12502, + 10136, + 4471, + 3060, + 1832, + 1010, + 19962, + 9506, + 64435, + 12280, + 13363, + 7214, + 11410, + 5100, + 21332, + 4551, + 1585, + 54344, + 192556, + 9454, + 1425, + 23461, + 69669, + 6201, + 75330, + 5278, + 9712, + 4817, + 2505, + 995, + 6689, + 94006, + 1110, + 129509, + 15596, + 1697, + 6199, + 35846, + 3749, + 4215, + 1137, + 11808, + 19191, + 77797, + 10674, + 7404, + 124246, + 21749, + 43864, + 23981, + 2968, + 926, + 74130, + 4962, + 17861, + 637, + 24352, + 4299, + 5285, + 118994, + 102082, + 12111, + 1990, + 8841, + 5567, + 18075, + 9122, + 212972, + 12939, + 239305, + 153445, + 10771, + 25847, + 14091, + 35319, + 4666, + 21399, + 930, + 576, + 8924, + 4005, + 1825, + 1747, + 10650, + 13805, + 785, + 13133, + 710, + 9397, + 3053, + 5873, + 1879, + 6834, + 5499, + 4290, + 29723, + 170166, + 1985, + 8358, + 30736, + 2232, + 9626, + 8619, + 110547, + 29031, + 70543, + 8990, + 321956, + 15012, + 4393, + 14014, + 8595, + 24208, + 54232, + 11769, + 142006, + 10169, + 76810, + 32292, + 3235, + 1447, + 2235, + 7835, + 2065, + 26771, + 25269, + 967, + 2125, + 1636, + 34907, + 3420, + 130131, + 6131, + 8594, + 11230, + 662, + 7573, + 170865, + 108146, + 8373, + 43407, + 2401, + 55065, + 6964, + 37483, + 3556, + 69570, + 1144, + 22893, + 29708, + 1175, + 1064, + 1739, + 1039, + 1462, + 2472, + 18997, + 20046, + 3889, + 5086, + 9798, + 163755, + 3331, + 477, + 22653, + 3501, + 95612, + 70096, + 23336, + 1566, + 19185, + 49985, + 1697, + 22767, + 31039, + 18168, + 8799, + 6890, + 11330, + 52569, + 15682, + 8000, + 971, + 12512, + 4410, + 44708, + 656, + 3405, + 24310, + 1530, + 1260, + 1554, + 37602, + 4908, + 89461, + 10673, + 2150, + 4522, + 119125, + 15724, + 2249, + 1175, + 23163, + 25551, + 18831, + 2900, + 17091, + 18837, + 13979, + 20206, + 168709, + 1664, + 44253, + 6604, + 1392, + 8621, + 109891, + 4100, + 8131, + 68560, + 6880, + 105303, + 1869, + 7796, + 5951, + 11298, + 1363, + 2366, + 3587, + 118972, + 1873, + 143092, + 5741, + 2856, + 163770, + 12468, + 962, + 558, + 55623, + 78184, + 27677, + 3845, + 3341, + 4389, + 18807, + 58945, + 102735, + 18052, + 4164, + 19999, + 244579, + 1154, + 1239, + 8131, + 4235, + 12607, + 89854, + 8986, + 64409, + 4374, + 19133, + 13274, + 188850, + 9526, + 39149, + 41561, + 19733, + 15135, + 6398, + 2799, + 236009, + 12647, + 4774, + 12553, + 30507, + 40226, + 4277, + 7729, + 29521, + 22516, + 26806, + 966, + 1611, + 51154, + 34000, + 5088, + 70349, + 30655, + 20865, + 4141, + 34352, + 136205, + 48137, + 24083, + 6551, + 2547, + 3725, + 8009, + 625, + 7383, + 9111, + 67490, + 122351, + 2123, + 47444, + 20754, + 1841, + 26744, + 42289, + 5408, + 30792, + 17530, + 945, + 156209, + 9665, + 5967, + 6905, + 5440, + 4549, + 1877, + 914, + 13112, + 3749, + 38126, + 9462, + 9398, + 56089, + 19196, + 312489, + 5154, + 3960, + 876, + 862, + 55480, + 1512, + 11240, + 491, + 3582, + 1171, + 190036, + 47756, + 4055, + 3978, + 10506, + 1380, + 6071, + 4128, + 12398, + 12438, + 995, + 971, + 11912, + 1954, + 2629, + 2164, + 4458, + 608, + 3024, + 70836, + 14115, + 10796, + 18362, + 8318, + 4441, + 55543, + 1953, + 6306, + 115564, + 1515, + 12219, + 18658, + 84714, + 10526, + 205509, + 7437, + 1481, + 6459, + 3840, + 31137, + 44246, + 126465, + 29247, + 1174, + 4960, + 7151, + 3197, + 6793, + 65847, + 96604, + 92295, + 13236, + 1580, + 2085, + 1640, + 38953, + 30440, + 15319, + 13384, + 19381, + 6280, + 8707, + 6624, + 158281, + 16243, + 15771, + 989, + 635, + 187060, + 1609, + 6410, + 6022, + 2750, + 69129, + 800, + 18833, + 103666, + 133856, + 14527, + 18023, + 55341, + 39639, + 13221, + 157080, + 47413, + 10839, + 15841, + 9370, + 2125, + 5130, + 5966, + 11575, + 26256, + 22193, + 5981, + 38697, + 9681, + 4216, + 7197, + 5296, + 54230, + 30005, + 9324, + 475, + 50370, + 23736, + 1609, + 24737, + 80585, + 8662, + 42063, + 13967, + 5866, + 444, + 16203, + 699, + 89864, + 11820, + 7022, + 11746, + 11755, + 1129, + 4436, + 4239, + 16873, + 2893, + 1559, + 10772, + 11579, + 5783, + 5368, + 57616, + 6629, + 54862, + 6592, + 93792, + 2610, + 5919, + 80298, + 41156, + 1241, + 3584, + 896, + 4640, + 10547, + 561, + 2796, + 82506, + 6209, + 13533, + 125334, + 9821, + 7935, + 9305, + 7516, + 197828, + 6357, + 2114, + 5217, + 1290, + 87568, + 32473, + 51970, + 858, + 6352, + 157495, + 10078, + 10764, + 15442, + 7629, + 664, + 86532, + 3804, + 2341, + 9477, + 1610, + 105589, + 15242, + 9192, + 777, + 17946, + 137911, + 40026, + 18912, + 1385, + 15253, + 8752, + 570, + 5593, + 24932, + 1496, + 38208, + 14545, + 249580, + 33400, + 7289, + 9022, + 3770, + 74984, + 2353, + 2629, + 94178, + 36891, + 24519, + 2392, + 7535, + 9276, + 2034, + 4977, + 9132, + 40889, + 17970, + 1367, + 981, + 1113, + 92285, + 48190, + 1068, + 152253, + 930, + 23194, + 0, + 2559, + 4548, + 5491, + 7822, + 5995, + 6373, + 74178, + 3919, + 7292, + 92558, + 6095, + 2082, + 112433, + 27633, + 1252, + 2079, + 26132, + 14313, + 4105, + 4314, + 16412, + 5989, + 12525, + 12406, + 13254, + 784, + 32859, + 10330, + 20716, + 27225, + 131866, + 24138, + 21270, + 927, + 7565, + 6484, + 1998, + 1027, + 11170, + 16598, + 7146, + 3685, + 1433, + 1533, + 20785, + 8274, + 3753, + 6511, + 32104, + 101187, + 3749, + 53143, + 8169, + 1766, + 41746, + 5789, + 100884, + 537, + 869, + 8433, + 652, + 2337, + 7820, + 48898, + 69828, + 10227, + 131752, + 4011, + 2509, + 165421, + 57058, + 802, + 5454, + 73592, + 22968, + 10542, + 72633, + 13545, + 20347, + 9249, + 7205, + 5478, + 5908, + 5179, + 18155, + 11226, + 9894, + 3868, + 6003, + 18089, + 44490, + 782, + 20408, + 1634, + 5058, + 29603, + 32996, + 9230, + 16670, + 172514, + 21843, + 12159, + 2471, + 6276, + 5669, + 204317, + 17316, + 27775, + 66561, + 21918, + 484, + 7060, + 30753, + 12224, + 11102, + 889, + 11020, + 13238, + 622, + 6126, + 9438, + 38710, + 137442, + 4535, + 3564, + 16445, + 29006, + 16197, + 1179, + 15490, + 1515, + 2530, + 4528, + 178558, + 2840, + 80064, + 5550, + 13962, + 34778, + 75373, + 2359, + 22880, + 894, + 29651, + 15669, + 5306, + 31537, + 9633, + 36636, + 2048, + 11110, + 4086, + 23410, + 2324, + 9192, + 4858, + 2121, + 920, + 8573, + 5176, + 6792, + 11011, + 2290, + 40398, + 8518, + 3880, + 4303, + 16120, + 17781, + 37404, + 34037, + 138824, + 4224, + 125697, + 11325, + 12326, + 6668, + 26156, + 20397, + 1846, + 5802, + 6328, + 1508, + 3457, + 4640, + 5193, + 16583, + 6558, + 18335, + 11667, + 11348, + 1806, + 8768, + 3489, + 603, + 157457, + 116027, + 39387, + 9580, + 4438, + 3415, + 1725, + 36049, + 712, + 91197, + 5330, + 37076, + 34160, + 5317, + 11988, + 1472, + 2686, + 86141, + 1669, + 26902, + 115361, + 15377, + 5860, + 19400, + 1440, + 5866, + 16857, + 40511, + 9019, + 28097, + 1309, + 29058, + 47669, + 92936, + 11883, + 25763, + 35501, + 6965, + 23171, + 6609, + 1275, + 3388, + 2923, + 30501, + 2213, + 27211, + 8627, + 1235, + 18146, + 3866, + 107121, + 870, + 10002, + 40381, + 6775, + 553, + 18402, + 17645, + 1520, + 29891, + 7257, + 7241, + 18150, + 2294, + 2016, + 7338, + 27871, + 24005, + 36896, + 2540, + 4709, + 923, + 44922, + 747, + 15376, + 3113, + 19513, + 15967, + 196442, + 3544, + 48240, + 11341, + 626, + 23911, + 5269, + 10531, + 9229, + 4350, + 5911, + 1181, + 6561, + 1371, + 4155, + 1967, + 33273, + 1586, + 4597, + 2272, + 1061, + 45863, + 2876, + 26944, + 8455, + 78815, + 9776, + 17277, + 1767, + 8429, + 24453, + 86708, + 5777, + 3473, + 47330, + 8384, + 550, + 39923, + 20344, + 324095, + 14487, + 586, + 10493, + 4142, + 14209, + 19920, + 2110, + 3792, + 8107, + 5302, + 66585, + 151407, + 5571, + 10246, + 1050, + 37380, + 2011, + 23371, + 66934, + 7654, + 50482, + 16355, + 8552, + 27003, + 19691, + 14710, + 21156, + 2220, + 5197, + 6468, + 34008, + 15187, + 3716, + 10859, + 132487, + 255847, + 5131, + 8834, + 90489, + 40392, + 4606, + 13075, + 14775, + 2766, + 56032, + 2094, + 145392, + 17491, + 218484, + 4089, + 7039, + 27331, + 22653, + 69035, + 1386, + 13582, + 35004, + 14653, + 17292, + 63500, + 25514, + 3194, + 185648, + 625, + 76173, + 71312, + 19209, + 1742, + 2820, + 15547, + 4772, + 8639, + 7447, + 2079, + 1890, + 2451, + 6899, + 1170, + 1513, + 2826, + 92930, + 1293, + 116567, + 16108, + 14348, + 7661, + 26493, + 31550, + 60905, + 2282, + 163648, + 27199, + 1358, + 4107, + 5763, + 13418, + 3482, + 6028, + 72987, + 16064, + 41307, + 52015, + 13390, + 14267, + 2339, + 25935, + 9207, + 1851, + 27301, + 2754, + 25761, + 12836, + 7196, + 99473, + 17053, + 10695, + 7425, + 80922, + 7283, + 2584, + 653, + 38022, + 2011, + 23267, + 9926, + 8523, + 752, + 6362, + 81978, + 5087, + 7931, + 750, + 22809, + 12725, + 7069, + 2136, + 11243, + 902, + 2417, + 1142, + 17067, + 268428, + 7770, + 9984, + 77759, + 7586, + 164870, + 22016, + 133845, + 7030, + 31651, + 5215, + 51108, + 99944, + 3779, + 2086, + 736, + 30682, + 884, + 805, + 12908, + 993, + 40669, + 1052, + 6578, + 32491, + 7479, + 1032, + 203588, + 1323, + 80366, + 8430, + 504, + 12856, + 171020, + 14235, + 12897, + 53878, + 21717, + 10657, + 32037, + 35808, + 5431, + 46355, + 22824, + 5115, + 16702, + 1917, + 5814, + 5742, + 19876, + 13780, + 197928, + 1118, + 266377, + 86070, + 6765, + 6890, + 7487, + 2540, + 1477, + 3573, + 5127, + 21048, + 5818, + 219460, + 1401, + 12143, + 449, + 1348, + 4761, + 5752, + 200175, + 6347, + 1018, + 175113, + 19425, + 14492, + 40942, + 26744, + 743, + 6606, + 5412, + 5702, + 16480, + 6528, + 3781, + 7860, + 653, + 1402, + 1781, + 10889, + 125841, + 18034, + 8510, + 21481, + 194151, + 187962, + 176807, + 14224, + 8612, + 2127, + 907, + 4648, + 17601, + 12931, + 8381, + 16327, + 1573, + 2344, + 1933, + 1207, + 50706, + 20295, + 15985, + 70080, + 86671, + 160013, + 32629, + 4122, + 64236, + 32736, + 10811, + 1094, + 52901, + 8301, + 1863, + 4513, + 6364, + 1632, + 80989, + 7758, + 1690, + 64644, + 22509, + 3408, + 603, + 53633, + 75710, + 6409, + 6496, + 7540, + 20905, + 32367, + 21249, + 10795, + 36342, + 9949, + 964, + 1021, + 202857, + 3499, + 8586, + 2080, + 501, + 78283, + 12043, + 27114, + 233196, + 27418, + 14460, + 154075, + 12103, + 18786, + 35491, + 1750, + 14408, + 4819, + 16234, + 66998, + 5467, + 52577, + 7996, + 13729, + 16246, + 14557, + 7329, + 9136, + 39223, + 9498, + 159147, + 1422, + 10115, + 1417, + 44199, + 5793, + 4824, + 3513, + 2491, + 11532, + 81953, + 189918, + 129671, + 49512, + 2377, + 972, + 1180, + 1795, + 17868, + 33370, + 6273, + 707, + 21423, + 4136, + 2099, + 2424, + 12743, + 1155, + 2733, + 14976, + 40667, + 1004, + 66590, + 51823, + 29219, + 38829, + 2930, + 5924, + 23987, + 5845, + 85317, + 31760, + 2277, + 4655, + 56870, + 26814, + 24409, + 5857, + 70028, + 104282, + 2400, + 7030, + 2377, + 9138, + 49484, + 60271, + 2868, + 33069, + 21518, + 39530, + 3772, + 34415, + 2699, + 901, + 3259, + 7620, + 958, + 29506, + 24438, + 480, + 7986, + 254283, + 2874, + 3140, + 13748, + 1070, + 2903, + 2443, + 885, + 4835, + 92080, + 5276, + 11779, + 5064, + 1661, + 7130, + 4166, + 1660, + 1978, + 2105, + 21669, + 11194, + 3293, + 11351, + 163088, + 6999, + 2373, + 50942, + 41427, + 27759, + 19903, + 1207, + 9119, + 461, + 40287, + 68495, + 5626, + 7434, + 744, + 53805, + 55352, + 106000, + 902, + 567, + 11219, + 883, + 2191, + 34805, + 2906, + 5070, + 6449, + 6599, + 25846, + 4647, + 6807, + 76659, + 626, + 5671, + 12848, + 2776, + 90371, + 1814, + 5961, + 27551, + 35954, + 4825, + 1336, + 5881, + 5464, + 2081, + 5657, + 19802, + 32027, + 52684, + 51473, + 16331, + 2876, + 21190, + 33580, + 7331, + 18082, + 965, + 49103, + 2231, + 4839, + 7567, + 8845, + 6006, + 18316, + 7274, + 1599, + 6876, + 34912, + 11325, + 741, + 3594, + 72849, + 3567, + 9554, + 20079, + 7165, + 1996, + 1128, + 183918, + 20201, + 2794, + 41236, + 2800, + 2119, + 777, + 1671, + 11234, + 2743, + 786, + 2845, + 168865, + 3113, + 23303, + 18303, + 5966, + 8018, + 9418, + 15066, + 18947, + 21416, + 1061, + 4426, + 24703, + 12599, + 9268, + 9711, + 60862, + 5516, + 20419, + 3244, + 9910, + 8285, + 1643, + 16676, + 5890, + 13400, + 14330, + 13711, + 3633, + 28697, + 7346, + 20084, + 2339, + 1837, + 49920, + 2650, + 138340, + 33931, + 52039, + 66744, + 74475, + 3335, + 11148, + 1518, + 162753, + 162344, + 47369, + 52832, + 1445, + 1532, + 508, + 157084, + 16353, + 215791, + 2352, + 37315, + 4290, + 128463, + 3860, + 5362, + 742, + 55997, + 4907, + 8843, + 656, + 1147, + 149065, + 45152, + 18293, + 27076, + 29180, + 786, + 861, + 1045, + 1250, + 13780, + 2243, + 8807, + 44310, + 21778, + 3319, + 268009, + 4750, + 3018, + 22339, + 3519, + 1599, + 58820, + 4989, + 48944, + 1533, + 7529, + 8768, + 6097, + 4418, + 2824, + 20735, + 26586, + 5675, + 10115, + 17844, + 2723, + 14025, + 14212, + 8517, + 47407, + 6988, + 19153, + 102074, + 62742, + 3975, + 41787, + 9847, + 57966, + 21060, + 5425, + 3722, + 4319, + 16402, + 40325, + 3784, + 3491, + 41495, + 2806, + 982, + 53847, + 121612, + 13914, + 1329, + 104343, + 12866, + 9777, + 58373, + 7730, + 2841, + 20153, + 54637, + 4897, + 2875, + 3484, + 9484, + 31605, + 65156, + 62302, + 28335, + 39023, + 10814, + 3306, + 10602, + 1003, + 43508, + 225450, + 171934, + 20190, + 147169, + 7404, + 9624, + 5048, + 984, + 14652, + 1321, + 60596, + 46105, + 12188, + 25326, + 72905, + 203930, + 85397, + 1241, + 10106, + 48014, + 5229, + 128623, + 44845, + 28860, + 1582, + 3518, + 10712, + 16004, + 27906, + 6616, + 505, + 3227, + 8065, + 1169, + 20472, + 16213, + 5607, + 24345, + 44728, + 15589, + 810, + 184442, + 886, + 147486, + 17279, + 2132, + 3085, + 3734, + 805, + 1014, + 29404, + 168704, + 102793, + 3872, + 5282, + 17049, + 6602, + 629, + 7566, + 68902, + 94432, + 38749, + 81645, + 1058, + 118977, + 24721, + 19608, + 1450, + 23679, + 182249, + 15279, + 26559, + 123500, + 9266, + 10689, + 10583, + 7422, + 5574, + 56833, + 2040, + 24335, + 12055, + 5819, + 16761, + 895, + 105511, + 12409, + 1457, + 493, + 23337, + 1232, + 80490, + 9410, + 5088, + 1016, + 50036, + 3433, + 8505, + 33581, + 28070, + 16066, + 1010, + 95899, + 9943, + 16623, + 11291, + 10845, + 6406, + 85003, + 5271, + 248327, + 8114, + 9937, + 18506, + 61443, + 14714, + 42952, + 1460, + 5728, + 1069, + 3688, + 7663, + 55655, + 1331, + 71907, + 37630, + 3072, + 5261, + 1618, + 26063, + 71124, + 86833, + 2580, + 12571, + 79008, + 115624, + 28501, + 68970, + 16340, + 1262, + 12116, + 804, + 92830, + 11026, + 12572, + 12159, + 15903, + 49732, + 178543, + 9538, + 1143, + 2348, + 35003, + 2778, + 433265, + 3194, + 6646, + 47486, + 3013, + 272568, + 3066, + 12223, + 5261, + 581, + 7708, + 59610, + 3728, + 2067, + 895, + 2775, + 78834, + 49527, + 4410, + 4192, + 16178, + 2707, + 58449, + 4070, + 98925, + 1124, + 1471, + 6070, + 33947, + 62774, + 223291, + 4598, + 8524, + 11444, + 45771, + 7967, + 3956, + 52453, + 14600, + 512, + 37262, + 4492, + 12555, + 830, + 29482, + 2416, + 84708, + 4257, + 12957, + 2649, + 19504, + 14675, + 14503, + 3715, + 31259, + 5572, + 7082, + 13263, + 88735, + 13393, + 4020, + 32679, + 74097, + 4697, + 6014, + 1149, + 927, + 1567, + 79893, + 8036, + 56866, + 4320, + 6483, + 144387, + 2702, + 28826, + 717, + 4035, + 2581, + 27731, + 36436, + 2814, + 36961, + 18556, + 28854, + 44776, + 4469, + 14161, + 4109, + 3818, + 3860, + 24215, + 9780, + 2680, + 29176, + 40877, + 1315, + 6203, + 682, + 3572, + 74660, + 3263, + 5537, + 1354, + 3163, + 17453, + 3334, + 27261, + 3526, + 14664, + 7563, + 53194, + 69779, + 43283, + 3564, + 3172, + 1122, + 2000, + 17593, + 4349, + 3971, + 1367, + 280220, + 778, + 819, + 65200, + 1892, + 29834, + 10844, + 5791, + 6472, + 31507, + 27651, + 43737, + 2658, + 16899, + 3452, + 1521, + 3598, + 91343, + 657, + 34485, + 7330, + 23361, + 42129, + 7789, + 3867, + 4089, + 16410, + 5445, + 2644, + 17942, + 46107, + 3076, + 22053, + 1767, + 6144, + 1335, + 24444, + 67054, + 8626, + 194967, + 8612, + 591, + 76697, + 5458, + 33415, + 25999, + 2507, + 21919, + 37266, + 13429, + 74006, + 5186, + 16647 + ] + }, + { + "counters": [ + 1312, + 3224, + 52071, + 9545, + 23574, + 1299, + 10759, + 34587, + 25185, + 2457, + 184773, + 28934, + 2156, + 2382, + 74527, + 4960, + 2049, + 67067, + 1588, + 34465, + 895, + 3291, + 14234, + 6629, + 2734, + 1170, + 23928, + 23865, + 49092, + 1996, + 2168, + 6192, + 65206, + 12452, + 37054, + 10578, + 13983, + 77495, + 6684, + 4227, + 19320, + 10131, + 1090, + 17973, + 17977, + 11756, + 86718, + 276499, + 4279, + 18920, + 10184, + 8226, + 32056, + 1220, + 95872, + 20125, + 1067, + 17472, + 21935, + 67240, + 567, + 1798, + 25746, + 10040, + 61644, + 254235, + 3305, + 41445, + 1716, + 3309, + 22041, + 4786, + 23849, + 15674, + 15426, + 9657, + 85051, + 19525, + 2595, + 18792, + 3616, + 99467, + 3393, + 4946, + 808, + 4430, + 1310, + 13606, + 37135, + 83694, + 2257, + 7526, + 52530, + 8766, + 85753, + 1181, + 81685, + 5033, + 4803, + 4890, + 6070, + 14805, + 1663, + 18207, + 12185, + 1839, + 3482, + 1707, + 1406, + 19902, + 2238, + 2221, + 9072, + 30047, + 33336, + 7874, + 821, + 2568, + 3382, + 4996, + 20949, + 70909, + 8908, + 7064, + 38281, + 7450, + 29365, + 2490, + 4766, + 8085, + 20797, + 11799, + 2646, + 116234, + 2190, + 1226, + 65660, + 4705, + 203929, + 12520, + 8416, + 679, + 2521, + 3739, + 4220, + 33999, + 6350, + 9923, + 5634, + 16130, + 11249, + 164685, + 3568, + 2471, + 2849, + 6084, + 6158, + 1681, + 10483, + 1902, + 2986, + 65297, + 27766, + 150644, + 3876, + 95295, + 1366, + 18001, + 1387, + 8718, + 128626, + 12670, + 38883, + 6070, + 1660, + 8117, + 16554, + 20949, + 1301, + 82473, + 1874, + 180072, + 4124, + 5571, + 2580, + 37890, + 83896, + 10096, + 1993, + 54673, + 11683, + 11791, + 49086, + 11441, + 66731, + 2829, + 8444, + 2057, + 1343, + 19335, + 59507, + 10081, + 116560, + 70373, + 5106, + 6521, + 5393, + 3668, + 13522, + 7283, + 24063, + 868, + 2382, + 1879, + 1859, + 4842, + 29912, + 15987, + 6900, + 341354, + 200684, + 419, + 14291, + 34012, + 28204, + 1152, + 88710, + 2101, + 1291, + 4057, + 12487, + 3432, + 129204, + 217940, + 21384, + 2661, + 3271, + 24816, + 2559, + 29140, + 13658, + 644, + 16377, + 21322, + 16251, + 1371, + 2337, + 17022, + 4130, + 17784, + 69194, + 15784, + 1632, + 2647, + 3580, + 55169, + 3906, + 169765, + 29435, + 36401, + 10516, + 19567, + 13144, + 1339, + 12098, + 8264, + 95169, + 33652, + 112419, + 156753, + 4774, + 61008, + 1248, + 189528, + 80211, + 146913, + 2641, + 4868, + 39040, + 6407, + 12603, + 6951, + 86953, + 3955, + 2351, + 10374, + 21680, + 33295, + 17289, + 1975, + 3716, + 12668, + 74303, + 4699, + 914, + 1731, + 4755, + 5388, + 2878, + 6862, + 22892, + 24513, + 10226, + 30986, + 6321, + 6502, + 1847, + 7583, + 7117, + 12828, + 4163, + 2335, + 2131, + 8026, + 22905, + 4868, + 13489, + 167629, + 20598, + 5311, + 3451, + 4411, + 8343, + 1716, + 11626, + 12916, + 92609, + 2591, + 1706, + 3978, + 66161, + 9061, + 11928, + 38366, + 16231, + 4199, + 178773, + 5121, + 1459, + 338929, + 2849, + 119171, + 15348, + 5113, + 4354, + 152866, + 780, + 155504, + 11771, + 180413, + 6703, + 5994, + 6823, + 3756, + 586, + 2023, + 5120, + 2026, + 6816, + 701, + 4599, + 8380, + 54663, + 7703, + 1410, + 113673, + 58698, + 21715, + 370910, + 4364, + 118127, + 7416, + 48447, + 24900, + 6681, + 1470, + 33213, + 28087, + 769, + 19941, + 36360, + 3370, + 5638, + 6120, + 5088, + 29373, + 62304, + 60259, + 226182, + 267615, + 4219, + 3394, + 194448, + 73616, + 46599, + 38685, + 1237, + 792, + 31326, + 729, + 9037, + 5237, + 3294, + 8693, + 7413, + 3011, + 72321, + 24797, + 650, + 6675, + 654, + 145419, + 35427, + 35756, + 4650, + 9772, + 48718, + 6600, + 509688, + 11107, + 1231, + 275347, + 8764, + 9015, + 10609, + 7937, + 2278, + 78751, + 923, + 6651, + 2621, + 1533, + 9017, + 1098, + 5696, + 22934, + 27911, + 59654, + 899, + 4571, + 73840, + 30283, + 22687, + 3327, + 2622, + 858, + 121920, + 22173, + 9506, + 4958, + 162770, + 7138, + 59775, + 1949, + 701, + 4170, + 3750, + 6672, + 4657, + 9272, + 9067, + 29393, + 94934, + 7136, + 21010, + 10155, + 2299, + 744, + 14003, + 2065, + 7222, + 48996, + 5023, + 19619, + 56209, + 1435, + 37300, + 8224, + 136194, + 1231, + 5106, + 4552, + 48831, + 11580, + 17822, + 11337, + 74495, + 5904, + 16238, + 10315, + 730, + 90569, + 5435, + 43558, + 44837, + 76317, + 553, + 7242, + 55848, + 2631, + 9998, + 951, + 353818, + 6396, + 1388, + 17332, + 1794, + 65301, + 2978, + 156229, + 98894, + 36454, + 15529, + 10465, + 50802, + 12555, + 5362, + 421529, + 20584, + 24673, + 671, + 2057, + 1341, + 63972, + 7904, + 14845, + 5901, + 4038, + 18729, + 12297, + 8629, + 1084, + 12952, + 18151, + 3281, + 7010, + 842, + 37047, + 5330, + 12395, + 1653, + 10134, + 19538, + 96477, + 9581, + 4261, + 41097, + 37927, + 2973, + 22129, + 9438, + 16852, + 8449, + 31129, + 2108, + 1305, + 7160, + 730, + 10688, + 4152, + 57838, + 4285, + 45814, + 11685, + 4149, + 149162, + 12157, + 7738, + 49801, + 12512, + 4544, + 11951, + 2918, + 7615, + 1885, + 1682, + 604, + 15015, + 47487, + 21740, + 9215, + 4033, + 6956, + 15491, + 10319, + 57212, + 21605, + 5635, + 4529, + 11252, + 32567, + 53999, + 7031, + 5896, + 3479, + 10813, + 104317, + 10735, + 57772, + 53670, + 22240, + 66210, + 91753, + 11308, + 2634, + 6148, + 2489, + 15945, + 1677, + 2342, + 5035, + 6732, + 17442, + 2292, + 3047, + 5113, + 15439, + 1729, + 16859, + 18459, + 25713, + 141048, + 155625, + 14359, + 43928, + 1547, + 1275, + 914, + 8757, + 4660, + 18824, + 122575, + 2338, + 2146, + 3730, + 24169, + 6058, + 5011, + 3459, + 1423, + 5106, + 25363, + 131697, + 5232, + 34239, + 19207, + 12986, + 178610, + 130111, + 52244, + 32426, + 17428, + 9015, + 29629, + 3526, + 3347, + 11982, + 13871, + 2960, + 86136, + 11935, + 1752, + 5156, + 8358, + 6306, + 21717, + 6546, + 4105, + 13903, + 867, + 3659, + 17314, + 147717, + 6150, + 22678, + 94559, + 50030, + 19941, + 457, + 510, + 66971, + 12777, + 13798, + 1646, + 5168, + 4677, + 45111, + 171040, + 5108, + 165502, + 15975, + 2441, + 70011, + 150230, + 26109, + 822, + 24217, + 9012, + 15804, + 794, + 21816, + 7147, + 8160, + 1396, + 1405, + 4691, + 10384, + 2596, + 13345, + 2316, + 6219, + 83700, + 4023, + 8734, + 1065, + 8455, + 4034, + 6328, + 23415, + 6467, + 76332, + 3786, + 4218, + 1143, + 3347, + 1628, + 1179, + 13926, + 1005, + 3236, + 21337, + 92872, + 104202, + 1384, + 3113, + 4081, + 26266, + 326, + 2046, + 6422, + 2487, + 14865, + 61872, + 54607, + 16944, + 1632, + 23198, + 40082, + 2029, + 130968, + 3130, + 21947, + 1268, + 5492, + 1904, + 3425, + 2053, + 2366, + 68871, + 8875, + 35821, + 8932, + 238563, + 23023, + 3071, + 39869, + 86011, + 5823, + 12469, + 6762, + 25197, + 15247, + 21749, + 2450, + 11722, + 80538, + 8213, + 3014, + 21885, + 179839, + 35819, + 249166, + 7665, + 21614, + 6848, + 28229, + 1609, + 9511, + 15390, + 36530, + 1234, + 994, + 633, + 2346, + 22758, + 60980, + 612, + 29815, + 2572, + 15694, + 2827, + 78824, + 7099, + 44448, + 17023, + 11012, + 42175, + 231043, + 1865, + 1213, + 1325, + 25538, + 13045, + 27878, + 46610, + 4302, + 7270, + 2136, + 30006, + 24543, + 26595, + 6864, + 10084, + 5867, + 211666, + 19501, + 88967, + 1019, + 29806, + 206756, + 37192, + 10788, + 129033, + 30447, + 666, + 169152, + 20678, + 1236, + 117840, + 2803, + 3645, + 9381, + 1318, + 23782, + 5336, + 5908, + 4419, + 4949, + 1243, + 121180, + 6072, + 738, + 6405, + 75443, + 41689, + 2917, + 11105, + 8965, + 11250, + 6879, + 20612, + 175307, + 25152, + 5055, + 11143, + 6118, + 10662, + 11543, + 6819, + 6330, + 227027, + 33510, + 4694, + 3328, + 18787, + 23814, + 7171, + 29556, + 1015, + 4983, + 26006, + 1000, + 36916, + 4495, + 1364, + 4472, + 44483, + 2919, + 2145, + 31723, + 4535, + 6399, + 1503, + 11770, + 2292, + 986, + 97176, + 3846, + 1854, + 27123, + 1512, + 44705, + 2949, + 6423, + 5958, + 752, + 9129, + 14238, + 46862, + 21293, + 1809, + 60511, + 6376, + 107120, + 168959, + 3661, + 1031, + 1166, + 30427, + 26196, + 598, + 1913, + 18739, + 20635, + 56713, + 8568, + 98254, + 34530, + 8074, + 8568, + 7076, + 8959, + 13668, + 11924, + 3726, + 18775, + 210116, + 30589, + 4562, + 7387, + 12677, + 64674, + 10457, + 44239, + 3271, + 1844, + 159133, + 1713, + 18359, + 10358, + 4499, + 2065, + 3494, + 24978, + 15714, + 21803, + 2640, + 83069, + 1111, + 9442, + 34855, + 6095, + 6148, + 4877, + 2765, + 39663, + 42055, + 14011, + 27790, + 35248, + 16792, + 25306, + 71354, + 8800, + 38404, + 55090, + 1233, + 1701, + 73774, + 2146, + 70842, + 2939, + 67480, + 3929, + 1962, + 4619, + 82396, + 41190, + 12166, + 7785, + 6034, + 18924, + 22190, + 9445, + 8315, + 32574, + 10475, + 8782, + 28542, + 2119, + 1541, + 7525, + 132111, + 2166, + 7293, + 21157, + 63214, + 6977, + 3439, + 215698, + 6444, + 78019, + 101566, + 3602, + 13939, + 678, + 1303, + 9432, + 29683, + 13980, + 1004, + 26104, + 20479, + 16908, + 2331, + 1820, + 11731, + 13956, + 1320, + 14959, + 125420, + 1492, + 12947, + 56053, + 21405, + 1070, + 1747, + 139876, + 16655, + 65264, + 27024, + 36540, + 10095, + 146062, + 7348, + 2325, + 11595, + 1092, + 61003, + 8436, + 16104, + 4128, + 164011, + 1018, + 124096, + 613, + 1035, + 1857, + 18392, + 157325, + 38275, + 1852, + 114311, + 51621, + 19205, + 3392, + 18207, + 54943, + 7960, + 39151, + 18716, + 1815, + 1545, + 6423, + 2304, + 5525, + 48366, + 1165, + 10024, + 4003, + 8516, + 2318, + 43237, + 165742, + 9278, + 3402, + 9377, + 65770, + 13654, + 2032, + 2536, + 726, + 5509, + 3438, + 24136, + 22902, + 1602, + 3691, + 4428, + 11063, + 2836, + 675, + 1338, + 3135, + 135004, + 48958, + 25082, + 606, + 15123, + 19188, + 18309, + 32337, + 2311, + 114292, + 55378, + 5065, + 1929, + 1185, + 29634, + 9077, + 957, + 44017, + 533, + 13246, + 2836, + 33350, + 3918, + 29106, + 134620, + 1321, + 10192, + 688, + 19175, + 11720, + 192682, + 2965, + 14711, + 19780, + 2852, + 10203, + 7487, + 20819, + 20961, + 3463, + 6917, + 6176, + 59216, + 2892, + 1148, + 6482, + 24459, + 753, + 43469, + 7545, + 3749, + 13966, + 29547, + 46033, + 14885, + 31475, + 5167, + 38890, + 13011, + 5481, + 26049, + 7062, + 759, + 5114, + 22108, + 779, + 6690, + 188391, + 4364, + 12518, + 8081, + 12553, + 11242, + 7438, + 13099, + 922, + 4827, + 462, + 185850, + 4378, + 6746, + 9890, + 178434, + 40384, + 8543, + 14006, + 23657, + 3513, + 2862, + 564, + 11313, + 1691, + 43167, + 3876, + 3621, + 6349, + 786, + 29468, + 1857, + 9257, + 73125, + 11628, + 3384, + 29051, + 8814, + 2949, + 2498, + 50696, + 12526, + 1189, + 11032, + 63688, + 43353, + 881, + 6474, + 28731, + 564, + 1598, + 63475, + 27955, + 270913, + 2029, + 75782, + 2135, + 38176, + 1580, + 6641, + 1701, + 1043, + 17579, + 33245, + 1295, + 218303, + 79172, + 1539, + 27194, + 1979, + 1753, + 10841, + 27716, + 1621, + 26227, + 785, + 7882, + 16138, + 2326, + 24199, + 11564, + 67542, + 5078, + 16754, + 711, + 3930, + 9008, + 29160, + 33029, + 8578, + 12462, + 29298, + 2327, + 85345, + 6942, + 10950, + 3017, + 26248, + 3990, + 53157, + 2476, + 3181, + 4397, + 6428, + 17568, + 12152, + 11194, + 2179, + 1575, + 599, + 6171, + 69846, + 9644, + 46020, + 1121, + 30450, + 3074, + 152545, + 1225, + 16846, + 14558, + 8933, + 20823, + 1239, + 12685, + 56780, + 3222, + 104401, + 973, + 291476, + 193876, + 11830, + 28260, + 3094, + 2428, + 3033, + 1334, + 2007, + 9794, + 3917, + 8349, + 85782, + 2395, + 10040, + 24526, + 19591, + 24606, + 24603, + 35454, + 39204, + 30551, + 13450, + 48399, + 611, + 12438, + 6931, + 8881, + 5709, + 65209, + 3907, + 16487, + 12184, + 190973, + 26853, + 1470, + 6030, + 32435, + 3347, + 129297, + 9570, + 6593, + 19972, + 2423, + 72447, + 1033, + 35728, + 6625, + 787, + 6839, + 12453, + 1073, + 855, + 8302, + 40149, + 3351, + 27521, + 25617, + 982, + 3545, + 4583, + 74123, + 1042, + 2033, + 8095, + 267600, + 7822, + 2044, + 4720, + 155553, + 4639, + 1986, + 44612, + 134365, + 62483, + 1276, + 19270, + 10515, + 4667, + 35826, + 419, + 2046, + 76103, + 41315, + 41781, + 1031, + 30746, + 38893, + 51990, + 1343, + 7671, + 8459, + 42178, + 5632, + 12064, + 9454, + 86828, + 2499, + 9018, + 1157, + 14647, + 4660, + 2616, + 8920, + 3171, + 16406, + 7805, + 2455, + 5231, + 31745, + 5696, + 16411, + 17032, + 156814, + 6364, + 5651, + 8385, + 1606, + 27250, + 9823, + 116418, + 1747, + 24442, + 659, + 1328, + 1482, + 3940, + 37846, + 44803, + 8534, + 1975, + 19443, + 8670, + 1102, + 53488, + 20763, + 3919, + 2853, + 16159, + 3133, + 71337, + 862, + 609, + 643, + 0, + 35941, + 1682, + 82612, + 1046, + 10942, + 28953, + 7017, + 3305, + 37168, + 6958, + 58749, + 1647, + 15373, + 18590, + 9108, + 101687, + 24192, + 10238, + 3132, + 21464, + 111268, + 5468, + 6423, + 1591, + 108783, + 20040, + 1622, + 8620, + 8217, + 6579, + 2277, + 2777, + 5937, + 1538, + 32376, + 25673, + 5439, + 99309, + 1381, + 1957, + 168261, + 4221, + 12300, + 753, + 16931, + 39074, + 2891, + 13781, + 24154, + 14435, + 14445, + 1141, + 8280, + 13389, + 11880, + 28516, + 642, + 16862, + 24323, + 1875, + 5396, + 14519, + 9718, + 5112, + 92784, + 2479, + 70585, + 8043, + 1730, + 81411, + 13995, + 35794, + 55053, + 93806, + 217791, + 11671, + 3352, + 12160, + 2862, + 900, + 20291, + 5134, + 45430, + 130967, + 55624, + 1455, + 50839, + 4267, + 4027, + 46199, + 18144, + 2782, + 103911, + 140308, + 3449, + 1806, + 699, + 36065, + 19822, + 17173, + 27964, + 2690, + 138503, + 19307, + 3369, + 7634, + 11883, + 65172, + 14125, + 6239, + 854, + 7419, + 2131, + 17524, + 1359, + 64983, + 92416, + 27542, + 45512, + 138935, + 2909, + 9573, + 99775, + 10182, + 4593, + 5884, + 1881, + 6013, + 1941, + 62738, + 17333, + 6182, + 36422, + 64973, + 6782, + 2688, + 1580, + 859, + 3975, + 992, + 13096, + 44360, + 17466, + 4509, + 54629, + 2035, + 6649, + 45688, + 2338, + 3839, + 1273, + 45825, + 3319, + 63959, + 3657, + 5711, + 8040, + 35902, + 60371, + 20261, + 6072, + 6482, + 36596, + 4124, + 3782, + 33523, + 8159, + 34196, + 11584, + 4968, + 9571, + 61961, + 10186, + 10695, + 1180, + 85139, + 25498, + 593, + 2345, + 4611, + 49623, + 4587, + 3822, + 6105, + 1855, + 131015, + 45492, + 32360, + 1646, + 21853, + 57850, + 14155, + 21411, + 60397, + 9025, + 177124, + 32806, + 11241, + 6727, + 1045, + 216373, + 37719, + 107157, + 6170, + 12691, + 11695, + 820, + 8318, + 709, + 5282, + 8493, + 39673, + 9205, + 2958, + 38346, + 109290, + 5811, + 1625, + 3305, + 46874, + 3047, + 3146, + 26881, + 6333, + 30304, + 1201, + 6998, + 6117, + 938, + 30940, + 1848, + 1570, + 9301, + 2153, + 33427, + 1456, + 108419, + 57706, + 10118, + 71306, + 46003, + 8616, + 8480, + 103268, + 19993, + 26492, + 20839, + 13879, + 5810, + 1163, + 69351, + 3501, + 9455, + 3050, + 3645, + 658, + 69229, + 6085, + 5497, + 19719, + 110417, + 1613, + 8053, + 4633, + 3069, + 65716, + 82908, + 78645, + 49418, + 3436, + 223720, + 42268, + 4390, + 4896, + 1360, + 142786, + 31901, + 22183, + 5974, + 6436, + 136056, + 12673, + 769, + 25753, + 2486, + 14847, + 6788, + 3112, + 117094, + 1253, + 13955, + 11388, + 5445, + 3814, + 3484, + 66060, + 28794, + 6520, + 3083, + 4144, + 17847, + 1557, + 1028, + 9046, + 28229, + 38245, + 3754, + 1965, + 4116, + 6043, + 2135, + 47080, + 2336, + 7306, + 3534, + 1315, + 34112, + 262858, + 8937, + 14355, + 9460, + 24259, + 4132, + 35550, + 916, + 3244, + 98351, + 19817, + 778, + 48085, + 39894, + 5188, + 10522, + 30003, + 14718, + 725, + 8771, + 106615, + 12139, + 19971, + 50105, + 5640, + 32216, + 23952, + 4539, + 61556, + 4187, + 1282, + 18578, + 174827, + 6286, + 5929, + 6937, + 662, + 16977, + 48140, + 4292, + 2520, + 2671, + 35078, + 1678, + 17861, + 40666, + 3771, + 7776, + 14345, + 15939, + 7365, + 3846, + 831, + 6107, + 3179, + 8495, + 1871, + 35951, + 1330, + 4351, + 163855, + 2284, + 11598, + 26889, + 61625, + 36043, + 174087, + 1264, + 10426, + 14713, + 5228, + 1594, + 4472, + 472, + 537, + 4773, + 1650, + 40996, + 6268, + 81631, + 10315, + 44007, + 8671, + 6080, + 19223, + 44806, + 156758, + 2124, + 1168, + 4711, + 114472, + 55438, + 30381, + 3851, + 1453, + 25891, + 24868, + 5274, + 1604, + 2367, + 37311, + 27198, + 19579, + 5235, + 23563, + 47191, + 10431, + 5546, + 82320, + 1020, + 2719, + 131667, + 7058, + 1554, + 49080, + 1538, + 204476, + 17862, + 3060, + 54611, + 8939, + 1051, + 6816, + 10848, + 2478, + 16910, + 5669, + 165109, + 8195, + 81953, + 9579, + 5980, + 7533, + 50150, + 18309, + 7527, + 83592, + 16563, + 8666, + 24671, + 14914, + 37735, + 50267, + 3862, + 8237, + 1740, + 29848, + 63882, + 40956, + 1568, + 5677, + 68702, + 5919, + 225038, + 153599, + 21168, + 45355, + 1478, + 147841, + 4924, + 22922, + 6803, + 1456, + 10090, + 8175, + 106271, + 11617, + 9628, + 31807, + 25777, + 25461, + 1893, + 5299, + 4933, + 7117, + 2585, + 166565, + 15151, + 855, + 29315, + 1535, + 10935, + 12929, + 16124, + 22130, + 3716, + 165638, + 7210, + 9426, + 1439, + 212900, + 4132, + 1177, + 1464, + 5447, + 33577, + 4768, + 585, + 9680, + 3092, + 26329, + 21669, + 1424, + 276512, + 3096, + 1981, + 69572, + 4825, + 230949, + 4758, + 6980, + 3010, + 26781, + 23088, + 8110, + 766, + 4920, + 5155, + 61408, + 153688, + 108155, + 7509, + 110205, + 14861, + 7982, + 36957, + 959, + 7897, + 162501, + 3774, + 2259, + 53361, + 65212, + 831, + 62728, + 55234, + 2510, + 3357, + 5100, + 16338, + 8448, + 12964, + 8158, + 1788, + 3625, + 9357, + 68947, + 18104, + 21372, + 9031, + 877, + 97321, + 50854, + 813, + 9690, + 8106, + 4264, + 55719, + 7590, + 1771, + 12519, + 32038, + 27413, + 3498, + 51046, + 7231, + 40028, + 5419, + 2629, + 1245, + 903, + 12150, + 13068, + 109838, + 2967, + 647, + 6587, + 2595, + 43109, + 11027, + 307951, + 1756, + 21584, + 66429, + 8060, + 275047 + ] + } + ], + "top_n": [ + { + "data": "AgpUMjEzNA==", + "count": 4242373 + }, + { + "data": "AgpUMjY1Mg==", + "count": 192452 + }, + { + "data": "AgpUMTkxOQ==", + "count": 230644 + }, + { + "data": "AgpUMjEwOA==", + "count": 1863248 + }, + { + "data": "AgpUMTYxNg==", + "count": 277998 + }, + { + "data": "AgpUMjM3Nw==", + "count": 365715 + }, + { + "data": "AhBQMTMyMDA4Nw==", + "count": 383172 + }, + { + "data": "AgpUMjA3MQ==", + "count": 180759 + }, + { + "data": "AgpUMjMyNg==", + "count": 509388 + }, + { + "data": "AgpUMjI5Ng==", + "count": 1845058 + }, + { + "data": "AgpUMTc1OQ==", + "count": 265415 + }, + { + "data": "AgpUMTk4Ng==", + "count": 2024641 + }, + { + "data": "AhBQMTMzMTE0Ng==", + "count": 323934 + }, + { + "data": "AgpUMTk3OA==", + "count": 260046 + }, + { + "data": "AhBQMTE0NjAyMA==", + "count": 566012 + }, + { + "data": "AhBQMTE3NTY3NQ==", + "count": 408522 + }, + { + "data": "AgpUMjMxNQ==", + "count": 262842 + }, + { + "data": "AgpUMTY1Ng==", + "count": 287954 + }, + { + "data": "AgpUMzMwOQ==", + "count": 202080 + }, + { + "data": "AgpUMjg2MA==", + "count": 305493 + }, + { + "data": "AgpUMjcxMQ==", + "count": 287248 + }, + { + "data": "AgpUMTgzMQ==", + "count": 1247690 + }, + { + "data": "AgpUMjY3Mw==", + "count": 455423 + }, + { + "data": "AhBQMTI2NzE1MQ==", + "count": 387311 + }, + { + "data": "Ag5QODg0Mzc2", + "count": 274286 + }, + { + "data": "AgpUMjA5Nw==", + "count": 249413 + }, + { + "data": "AgpUMjQzMQ==", + "count": 289750 + }, + { + "data": "AhBQMTMwMTQwNA==", + "count": 570748 + }, + { + "data": "AhBQMTE0MjA1Mg==", + "count": 335599 + }, + { + "data": "AgpUMTQ5NQ==", + "count": 3059803 + }, + { + "data": "AgpUMTYwNQ==", + "count": 905982 + }, + { + "data": "AgpUMTU1MQ==", + "count": 217916 + }, + { + "data": "AgpUMTU4Ng==", + "count": 1515788 + }, + { + "data": "AgpUMTc1NA==", + "count": 529339 + }, + { + "data": "AgpUMjI2NQ==", + "count": 267658 + }, + { + "data": "AgpUMjMwMw==", + "count": 1566780 + }, + { + "data": "AgpUMjM1Nw==", + "count": 778283 + }, + { + "data": "AgpUMjI4MA==", + "count": 622771 + }, + { + "data": "Ag5RMTcwNjMz", + "count": 156060 + }, + { + "data": "AgpUMjczNQ==", + "count": 229183 + } + ], + "default_value": 0 + }, + "null_count": 0, + "tot_col_size": 688725305, + "last_update_version": 419082401529724998, + "correlation": 0.059051 + }, + "e": { + "histogram": { + "ndv": 4264448, + "buckets": [ + { + "count": 1118709, + "lower_bound": "MQ==", + "upper_bound": "MQ==", + "repeats": 1109873 + }, + { + "count": 1590665, + "lower_bound": "Mg==", + "upper_bound": "Mw==", + "repeats": 235973 + }, + { + "count": 1966481, + "lower_bound": "NA==", + "upper_bound": "Nw==", + "repeats": 61193 + }, + { + "count": 2359778, + "lower_bound": "OA==", + "upper_bound": "MTI=", + "repeats": 78671 + }, + { + "count": 2744334, + "lower_bound": "MTM=", + "upper_bound": "MTk=", + "repeats": 43715 + }, + { + "count": 3093931, + "lower_bound": "MjA=", + "upper_bound": "MzM=", + "repeats": 20 + }, + { + "count": 3443528, + "lower_bound": "MzQ=", + "upper_bound": "NTI=", + "repeats": 20 + }, + { + "count": 3793124, + "lower_bound": "NTM=", + "upper_bound": "Njg=", + "repeats": 26237 + }, + { + "count": 4151461, + "lower_bound": "NzA=", + "upper_bound": "ODY=", + "repeats": 8759 + }, + { + "count": 4518538, + "lower_bound": "ODc=", + "upper_bound": "MTA5", + "repeats": 17498 + }, + { + "count": 4894354, + "lower_bound": "MTEx", + "upper_bound": "MTM2", + "repeats": 26237 + }, + { + "count": 5252691, + "lower_bound": "MTM3", + "upper_bound": "MTY0", + "repeats": 17498 + }, + { + "count": 5602288, + "lower_bound": "MTY1", + "upper_bound": "MTg5", + "repeats": 20 + }, + { + "count": 5951884, + "lower_bound": "MTkw", + "upper_bound": "MjE1", + "repeats": 17498 + }, + { + "count": 6301481, + "lower_bound": "MjE2", + "upper_bound": "MjQ3", + "repeats": 20 + }, + { + "count": 6659818, + "lower_bound": "MjQ4", + "upper_bound": "Mjc1", + "repeats": 8759 + }, + { + "count": 7009415, + "lower_bound": "Mjc2", + "upper_bound": "MzA1", + "repeats": 20 + }, + { + "count": 7359011, + "lower_bound": "MzA2", + "upper_bound": "MzQz", + "repeats": 20 + }, + { + "count": 7708608, + "lower_bound": "MzQ0", + "upper_bound": "Mzgx", + "repeats": 20 + }, + { + "count": 8058205, + "lower_bound": "Mzgy", + "upper_bound": "NDI3", + "repeats": 20 + }, + { + "count": 8416542, + "lower_bound": "NDI4", + "upper_bound": "NDY5", + "repeats": 8759 + }, + { + "count": 8766138, + "lower_bound": "NDcw", + "upper_bound": "NTEz", + "repeats": 20 + }, + { + "count": 9115735, + "lower_bound": "NTE0", + "upper_bound": "NTU0", + "repeats": 20 + }, + { + "count": 9474072, + "lower_bound": "NTU1", + "upper_bound": "NjMw", + "repeats": 17498 + }, + { + "count": 9823669, + "lower_bound": "NjMx", + "upper_bound": "Njk5", + "repeats": 20 + }, + { + "count": 10173265, + "lower_bound": "NzAx", + "upper_bound": "NzY5", + "repeats": 20 + }, + { + "count": 10522862, + "lower_bound": "Nzcw", + "upper_bound": "ODM4", + "repeats": 20 + }, + { + "count": 10872459, + "lower_bound": "ODQ0", + "upper_bound": "OTMx", + "repeats": 8759 + }, + { + "count": 11222056, + "lower_bound": "OTMy", + "upper_bound": "MTAzMg==", + "repeats": 20 + }, + { + "count": 11571653, + "lower_bound": "MTAzMw==", + "upper_bound": "MTEyMw==", + "repeats": 8759 + }, + { + "count": 11921249, + "lower_bound": "MTEyNA==", + "upper_bound": "MTIxNA==", + "repeats": 20 + }, + { + "count": 12270846, + "lower_bound": "MTIxNw==", + "upper_bound": "MTMwNg==", + "repeats": 20 + }, + { + "count": 12629183, + "lower_bound": "MTMxNQ==", + "upper_bound": "MTQxMA==", + "repeats": 8759 + }, + { + "count": 12978780, + "lower_bound": "MTQxMQ==", + "upper_bound": "MTU3Ng==", + "repeats": 20 + }, + { + "count": 13337116, + "lower_bound": "MTU3Nw==", + "upper_bound": "MTY3Mg==", + "repeats": 8759 + }, + { + "count": 13686713, + "lower_bound": "MTY3Mw==", + "upper_bound": "MTc1Mw==", + "repeats": 20 + }, + { + "count": 14036310, + "lower_bound": "MTc2MQ==", + "upper_bound": "MTg2Mg==", + "repeats": 20 + }, + { + "count": 14394646, + "lower_bound": "MTg2Mw==", + "upper_bound": "MjAwOA==", + "repeats": 8759 + }, + { + "count": 14744243, + "lower_bound": "MjAxMQ==", + "upper_bound": "MjEzNg==", + "repeats": 20 + }, + { + "count": 15093840, + "lower_bound": "MjEzNw==", + "upper_bound": "MjI2MQ==", + "repeats": 20 + }, + { + "count": 15443437, + "lower_bound": "MjI2Mw==", + "upper_bound": "MjQwMw==", + "repeats": 20 + }, + { + "count": 15801773, + "lower_bound": "MjQwNg==", + "upper_bound": "MjUyOA==", + "repeats": 8759 + }, + { + "count": 16151370, + "lower_bound": "MjUzMQ==", + "upper_bound": "MjY2MQ==", + "repeats": 20 + }, + { + "count": 16500967, + "lower_bound": "MjY2NA==", + "upper_bound": "MjgyMA==", + "repeats": 20 + }, + { + "count": 16850564, + "lower_bound": "MjgzMQ==", + "upper_bound": "Mjk3OQ==", + "repeats": 20 + }, + { + "count": 17200160, + "lower_bound": "Mjk4OA==", + "upper_bound": "MzE2Ng==", + "repeats": 20 + }, + { + "count": 17549757, + "lower_bound": "MzE2OA==", + "upper_bound": "MzM5OA==", + "repeats": 20 + }, + { + "count": 17899354, + "lower_bound": "MzQwMQ==", + "upper_bound": "MzU3Ng==", + "repeats": 20 + }, + { + "count": 18248951, + "lower_bound": "MzU3OA==", + "upper_bound": "Mzc4Mg==", + "repeats": 20 + }, + { + "count": 18598548, + "lower_bound": "Mzc4OA==", + "upper_bound": "NDAwMQ==", + "repeats": 20 + }, + { + "count": 18948144, + "lower_bound": "NDAxMw==", + "upper_bound": "NDE4NA==", + "repeats": 20 + }, + { + "count": 19297741, + "lower_bound": "NDE4OA==", + "upper_bound": "NDM3Mg==", + "repeats": 8759 + }, + { + "count": 19647338, + "lower_bound": "NDM3Nw==", + "upper_bound": "NDU4OQ==", + "repeats": 20 + }, + { + "count": 19996935, + "lower_bound": "NDU5Mw==", + "upper_bound": "NDgyMQ==", + "repeats": 20 + }, + { + "count": 20346531, + "lower_bound": "NDgzNg==", + "upper_bound": "NTA0NQ==", + "repeats": 17498 + }, + { + "count": 20696128, + "lower_bound": "NTA1MA==", + "upper_bound": "NTMzOQ==", + "repeats": 20 + }, + { + "count": 21045725, + "lower_bound": "NTM0OQ==", + "upper_bound": "NTYxNg==", + "repeats": 20 + }, + { + "count": 21395322, + "lower_bound": "NTYxOA==", + "upper_bound": "NTg5MA==", + "repeats": 8759 + }, + { + "count": 21744918, + "lower_bound": "NTg5OQ==", + "upper_bound": "NjE3OQ==", + "repeats": 20 + }, + { + "count": 22094515, + "lower_bound": "NjE4MA==", + "upper_bound": "NjQwMQ==", + "repeats": 20 + }, + { + "count": 22444112, + "lower_bound": "NjQxNg==", + "upper_bound": "NjY1OQ==", + "repeats": 20 + }, + { + "count": 22793709, + "lower_bound": "NjY2Nw==", + "upper_bound": "Njk4Mw==", + "repeats": 20 + }, + { + "count": 23143306, + "lower_bound": "Njk4OQ==", + "upper_bound": "NzI3MQ==", + "repeats": 20 + }, + { + "count": 23492902, + "lower_bound": "NzI3OQ==", + "upper_bound": "NzYwNA==", + "repeats": 8759 + }, + { + "count": 23842499, + "lower_bound": "NzYxNQ==", + "upper_bound": "Nzk3Mw==", + "repeats": 20 + }, + { + "count": 24192096, + "lower_bound": "Nzk3NA==", + "upper_bound": "ODIxNQ==", + "repeats": 20 + }, + { + "count": 24541693, + "lower_bound": "ODIxNg==", + "upper_bound": "ODYzNQ==", + "repeats": 20 + }, + { + "count": 24891289, + "lower_bound": "ODYzNw==", + "upper_bound": "ODk5NA==", + "repeats": 20 + }, + { + "count": 25240886, + "lower_bound": "ODk5OA==", + "upper_bound": "OTMzNQ==", + "repeats": 20 + }, + { + "count": 25590483, + "lower_bound": "OTMzNg==", + "upper_bound": "OTY5NA==", + "repeats": 20 + }, + { + "count": 25940080, + "lower_bound": "OTcxMw==", + "upper_bound": "MTAwMDk=", + "repeats": 20 + }, + { + "count": 26289676, + "lower_bound": "MTAwMTM=", + "upper_bound": "MTAyODg=", + "repeats": 20 + }, + { + "count": 26639273, + "lower_bound": "MTAyOTc=", + "upper_bound": "MTA3MDc=", + "repeats": 20 + }, + { + "count": 26988870, + "lower_bound": "MTA3MTg=", + "upper_bound": "MTEwODA=", + "repeats": 8759 + }, + { + "count": 27338467, + "lower_bound": "MTEwODQ=", + "upper_bound": "MTE0MDg=", + "repeats": 20 + }, + { + "count": 27688064, + "lower_bound": "MTE0MjY=", + "upper_bound": "MTE3NzY=", + "repeats": 20 + }, + { + "count": 28037660, + "lower_bound": "MTE3ODQ=", + "upper_bound": "MTIxNTA=", + "repeats": 20 + }, + { + "count": 28387257, + "lower_bound": "MTIxNzY=", + "upper_bound": "MTI1MzE=", + "repeats": 20 + }, + { + "count": 28736854, + "lower_bound": "MTI1NTA=", + "upper_bound": "MTMwNzE=", + "repeats": 20 + }, + { + "count": 29086451, + "lower_bound": "MTMxMTY=", + "upper_bound": "MTM0NTk=", + "repeats": 20 + }, + { + "count": 29436047, + "lower_bound": "MTM0Njk=", + "upper_bound": "MTM5NDY=", + "repeats": 20 + }, + { + "count": 29785644, + "lower_bound": "MTM5NDk=", + "upper_bound": "MTQzMjE=", + "repeats": 20 + }, + { + "count": 30135241, + "lower_bound": "MTQzMjg=", + "upper_bound": "MTQ3NDk=", + "repeats": 20 + }, + { + "count": 30484838, + "lower_bound": "MTQ3NTQ=", + "upper_bound": "MTUxOTM=", + "repeats": 20 + }, + { + "count": 30834434, + "lower_bound": "MTUxOTY=", + "upper_bound": "MTU2Mjk=", + "repeats": 20 + }, + { + "count": 31184031, + "lower_bound": "MTU2NDA=", + "upper_bound": "MTYwMzU=", + "repeats": 20 + }, + { + "count": 31533628, + "lower_bound": "MTYwMzY=", + "upper_bound": "MTY0Mjk=", + "repeats": 20 + }, + { + "count": 31883225, + "lower_bound": "MTY0NTk=", + "upper_bound": "MTY5Mzc=", + "repeats": 20 + }, + { + "count": 32232822, + "lower_bound": "MTY5Njg=", + "upper_bound": "MTczMDU=", + "repeats": 20 + }, + { + "count": 32582418, + "lower_bound": "MTczNDc=", + "upper_bound": "MTc3OTk=", + "repeats": 20 + }, + { + "count": 32932015, + "lower_bound": "MTc4Mzk=", + "upper_bound": "MTgyNTg=", + "repeats": 20 + }, + { + "count": 33281612, + "lower_bound": "MTgyNjA=", + "upper_bound": "MTg2ODg=", + "repeats": 8759 + }, + { + "count": 33631209, + "lower_bound": "MTg3MDI=", + "upper_bound": "MTkxMzg=", + "repeats": 20 + }, + { + "count": 33980805, + "lower_bound": "MTkxNTI=", + "upper_bound": "MTk1OTM=", + "repeats": 20 + }, + { + "count": 34330402, + "lower_bound": "MTk1OTc=", + "upper_bound": "MjAyMTU=", + "repeats": 20 + }, + { + "count": 34679999, + "lower_bound": "MjAyMzY=", + "upper_bound": "MjA5NDU=", + "repeats": 20 + }, + { + "count": 35029596, + "lower_bound": "MjA5NjM=", + "upper_bound": "MjE1NTQ=", + "repeats": 20 + }, + { + "count": 35379192, + "lower_bound": "MjE2MDI=", + "upper_bound": "MjIxMjY=", + "repeats": 20 + }, + { + "count": 35728789, + "lower_bound": "MjIxNjk=", + "upper_bound": "MjI3NjU=", + "repeats": 20 + }, + { + "count": 36078386, + "lower_bound": "MjI3NzA=", + "upper_bound": "MjMyNDQ=", + "repeats": 20 + }, + { + "count": 36427983, + "lower_bound": "MjMyNjg=", + "upper_bound": "MjM4NDU=", + "repeats": 20 + }, + { + "count": 36777579, + "lower_bound": "MjM4NjE=", + "upper_bound": "MjQ0ODk=", + "repeats": 20 + }, + { + "count": 37127176, + "lower_bound": "MjQ1MjA=", + "upper_bound": "MjUzNTY=", + "repeats": 20 + }, + { + "count": 37476773, + "lower_bound": "MjUzODc=", + "upper_bound": "MjU4OTc=", + "repeats": 20 + }, + { + "count": 37826370, + "lower_bound": "MjU5NTk=", + "upper_bound": "MjY1Mzg=", + "repeats": 20 + }, + { + "count": 38175967, + "lower_bound": "MjY1NTU=", + "upper_bound": "MjcxNTk=", + "repeats": 20 + }, + { + "count": 38525563, + "lower_bound": "MjcxODA=", + "upper_bound": "Mjc2Nzk=", + "repeats": 20 + }, + { + "count": 38875160, + "lower_bound": "Mjc2ODM=", + "upper_bound": "MjgyNzE=", + "repeats": 20 + }, + { + "count": 39224757, + "lower_bound": "MjgyNzc=", + "upper_bound": "MjkwNzc=", + "repeats": 20 + }, + { + "count": 39574354, + "lower_bound": "MjkwODU=", + "upper_bound": "Mjk3Njk=", + "repeats": 20 + }, + { + "count": 39923950, + "lower_bound": "Mjk3ODA=", + "upper_bound": "MzA1MDc=", + "repeats": 20 + }, + { + "count": 40273547, + "lower_bound": "MzA1MTI=", + "upper_bound": "MzEwNzM=", + "repeats": 20 + }, + { + "count": 40623144, + "lower_bound": "MzEwOTc=", + "upper_bound": "MzE4NDI=", + "repeats": 20 + }, + { + "count": 40972741, + "lower_bound": "MzE4NzI=", + "upper_bound": "MzI2MTk=", + "repeats": 20 + }, + { + "count": 41322337, + "lower_bound": "MzI2MjI=", + "upper_bound": "MzM0MzM=", + "repeats": 20 + }, + { + "count": 41671934, + "lower_bound": "MzM0Mzg=", + "upper_bound": "MzQyOTQ=", + "repeats": 20 + }, + { + "count": 42021531, + "lower_bound": "MzQzMzk=", + "upper_bound": "MzUxNTE=", + "repeats": 20 + }, + { + "count": 42371128, + "lower_bound": "MzUxNjU=", + "upper_bound": "MzU5MDE=", + "repeats": 20 + }, + { + "count": 42720725, + "lower_bound": "MzU5MDg=", + "upper_bound": "MzY3MDA=", + "repeats": 20 + }, + { + "count": 43070321, + "lower_bound": "MzY3MTk=", + "upper_bound": "Mzc3NDU=", + "repeats": 20 + }, + { + "count": 43419918, + "lower_bound": "Mzc4MTM=", + "upper_bound": "Mzg2ODk=", + "repeats": 20 + }, + { + "count": 43769515, + "lower_bound": "Mzg2OTA=", + "upper_bound": "Mzk4Mjg=", + "repeats": 20 + }, + { + "count": 44119112, + "lower_bound": "Mzk5NTg=", + "upper_bound": "NDA1OTc=", + "repeats": 20 + }, + { + "count": 44477448, + "lower_bound": "NDA1OTk=", + "upper_bound": "NDE2MzA=", + "repeats": 8759 + }, + { + "count": 44827045, + "lower_bound": "NDE2NzY=", + "upper_bound": "NDIzNzk=", + "repeats": 20 + }, + { + "count": 45176642, + "lower_bound": "NDIzOTg=", + "upper_bound": "NDM1Mjg=", + "repeats": 20 + }, + { + "count": 45526239, + "lower_bound": "NDM1Mjk=", + "upper_bound": "NDQzNzQ=", + "repeats": 20 + }, + { + "count": 45875835, + "lower_bound": "NDQ0MDg=", + "upper_bound": "NDUzMzE=", + "repeats": 20 + }, + { + "count": 46225432, + "lower_bound": "NDUzNzA=", + "upper_bound": "NDYzODU=", + "repeats": 20 + }, + { + "count": 46575029, + "lower_bound": "NDYzOTQ=", + "upper_bound": "NDc0NDM=", + "repeats": 20 + }, + { + "count": 46924626, + "lower_bound": "NDc0NDQ=", + "upper_bound": "NDgwNTU=", + "repeats": 20 + }, + { + "count": 47274222, + "lower_bound": "NDgwNzU=", + "upper_bound": "NDg5MjA=", + "repeats": 20 + }, + { + "count": 47623819, + "lower_bound": "NDg5Mzk=", + "upper_bound": "NTAxMjQ=", + "repeats": 20 + }, + { + "count": 47973416, + "lower_bound": "NTAyMDQ=", + "upper_bound": "NTEzMzk=", + "repeats": 20 + }, + { + "count": 48323013, + "lower_bound": "NTEzOTM=", + "upper_bound": "NTIyMzg=", + "repeats": 8759 + }, + { + "count": 48672610, + "lower_bound": "NTIyNDQ=", + "upper_bound": "NTM0MTg=", + "repeats": 20 + }, + { + "count": 49022206, + "lower_bound": "NTM0NjA=", + "upper_bound": "NTQ3MTg=", + "repeats": 20 + }, + { + "count": 49371803, + "lower_bound": "NTQ3ODA=", + "upper_bound": "NTYwMzc=", + "repeats": 20 + }, + { + "count": 49721400, + "lower_bound": "NTYwNTY=", + "upper_bound": "NTcyNDU=", + "repeats": 20 + }, + { + "count": 50070997, + "lower_bound": "NTcyNDg=", + "upper_bound": "NTg2NzA=", + "repeats": 20 + }, + { + "count": 50420593, + "lower_bound": "NTg2ODg=", + "upper_bound": "NTk5NzE=", + "repeats": 20 + }, + { + "count": 50770190, + "lower_bound": "NTk5OTc=", + "upper_bound": "NjEyNjU=", + "repeats": 20 + }, + { + "count": 51119787, + "lower_bound": "NjEyNjg=", + "upper_bound": "NjIyODU=", + "repeats": 20 + }, + { + "count": 51469384, + "lower_bound": "NjIyOTE=", + "upper_bound": "NjM2NTM=", + "repeats": 20 + }, + { + "count": 51818980, + "lower_bound": "NjM2Nzc=", + "upper_bound": "NjQ3MDQ=", + "repeats": 20 + }, + { + "count": 52168577, + "lower_bound": "NjQ3NTU=", + "upper_bound": "NjY4Mzc=", + "repeats": 20 + }, + { + "count": 52518174, + "lower_bound": "NjY4NTE=", + "upper_bound": "NjgyMDk=", + "repeats": 20 + }, + { + "count": 52867771, + "lower_bound": "NjgyNTA=", + "upper_bound": "Njk2Njg=", + "repeats": 20 + }, + { + "count": 53217368, + "lower_bound": "Njk4MDU=", + "upper_bound": "NzEwNTE=", + "repeats": 20 + }, + { + "count": 53566964, + "lower_bound": "NzExMDI=", + "upper_bound": "NzI3Nzc=", + "repeats": 20 + }, + { + "count": 53916561, + "lower_bound": "NzI5NDA=", + "upper_bound": "NzQ2OTE=", + "repeats": 20 + }, + { + "count": 54266158, + "lower_bound": "NzQ3MTk=", + "upper_bound": "NzYzOTI=", + "repeats": 20 + }, + { + "count": 54615755, + "lower_bound": "NzYzOTk=", + "upper_bound": "Nzc5ODE=", + "repeats": 20 + }, + { + "count": 54965351, + "lower_bound": "NzgxMjA=", + "upper_bound": "Nzk2Njc=", + "repeats": 20 + }, + { + "count": 55314948, + "lower_bound": "Nzk2ODU=", + "upper_bound": "ODE1MDI=", + "repeats": 20 + }, + { + "count": 55664545, + "lower_bound": "ODE1MTY=", + "upper_bound": "ODMwMDA=", + "repeats": 20 + }, + { + "count": 56014142, + "lower_bound": "ODMwNDg=", + "upper_bound": "ODQ5NzA=", + "repeats": 20 + }, + { + "count": 56363738, + "lower_bound": "ODUwNzU=", + "upper_bound": "ODY2NTE=", + "repeats": 20 + }, + { + "count": 56713335, + "lower_bound": "ODY2NTM=", + "upper_bound": "ODgyNTA=", + "repeats": 20 + }, + { + "count": 57062932, + "lower_bound": "ODgzMjg=", + "upper_bound": "ODk4NTg=", + "repeats": 20 + }, + { + "count": 57412529, + "lower_bound": "ODk5NDI=", + "upper_bound": "OTE3NjU=", + "repeats": 20 + }, + { + "count": 57762125, + "lower_bound": "OTE3Njc=", + "upper_bound": "OTM4MTA=", + "repeats": 20 + }, + { + "count": 58120462, + "lower_bound": "OTM5MDU=", + "upper_bound": "OTU4Mzc=", + "repeats": 8759 + }, + { + "count": 58470059, + "lower_bound": "OTU4Mzg=", + "upper_bound": "OTg1MjE=", + "repeats": 20 + }, + { + "count": 58819656, + "lower_bound": "OTg3ODE=", + "upper_bound": "MTAxMDI4", + "repeats": 20 + }, + { + "count": 59169252, + "lower_bound": "MTAxMTUy", + "upper_bound": "MTAyOTEz", + "repeats": 20 + }, + { + "count": 59518849, + "lower_bound": "MTAyOTU1", + "upper_bound": "MTA1Mzg3", + "repeats": 20 + }, + { + "count": 59868446, + "lower_bound": "MTA1NDI0", + "upper_bound": "MTA3MDg3", + "repeats": 20 + }, + { + "count": 60218043, + "lower_bound": "MTA3MDk5", + "upper_bound": "MTA4ODA1", + "repeats": 20 + }, + { + "count": 60567640, + "lower_bound": "MTA4ODIx", + "upper_bound": "MTExMDAx", + "repeats": 20 + }, + { + "count": 60917236, + "lower_bound": "MTExMDEy", + "upper_bound": "MTEzNTEy", + "repeats": 20 + }, + { + "count": 61266833, + "lower_bound": "MTEzNTM5", + "upper_bound": "MTE1NjU2", + "repeats": 20 + }, + { + "count": 61616430, + "lower_bound": "MTE1Njg2", + "upper_bound": "MTE4MzA2", + "repeats": 20 + }, + { + "count": 61966027, + "lower_bound": "MTE4MzA4", + "upper_bound": "MTIwNjg0", + "repeats": 20 + }, + { + "count": 62315623, + "lower_bound": "MTIwNzMx", + "upper_bound": "MTIzMzg4", + "repeats": 20 + }, + { + "count": 62665220, + "lower_bound": "MTIzNDMy", + "upper_bound": "MTI2NDIz", + "repeats": 20 + }, + { + "count": 63014817, + "lower_bound": "MTI2NjE4", + "upper_bound": "MTI4OTIx", + "repeats": 20 + }, + { + "count": 63364414, + "lower_bound": "MTI5MDc5", + "upper_bound": "MTMyMjM3", + "repeats": 20 + }, + { + "count": 63714010, + "lower_bound": "MTMyMjY5", + "upper_bound": "MTM2MDk1", + "repeats": 20 + }, + { + "count": 64063607, + "lower_bound": "MTM2MTE2", + "upper_bound": "MTM5NDA2", + "repeats": 20 + }, + { + "count": 64413204, + "lower_bound": "MTM5NDY3", + "upper_bound": "MTQyNzkw", + "repeats": 20 + }, + { + "count": 64762801, + "lower_bound": "MTQyNzk2", + "upper_bound": "MTQ2NDM4", + "repeats": 20 + }, + { + "count": 65112398, + "lower_bound": "MTQ2NTU4", + "upper_bound": "MTUwNTUx", + "repeats": 20 + }, + { + "count": 65461994, + "lower_bound": "MTUwNTY3", + "upper_bound": "MTUzNTM2", + "repeats": 20 + }, + { + "count": 65811591, + "lower_bound": "MTUzNTYy", + "upper_bound": "MTU3MjIx", + "repeats": 20 + }, + { + "count": 66161188, + "lower_bound": "MTU3NjQ1", + "upper_bound": "MTYxMTIz", + "repeats": 20 + }, + { + "count": 66510785, + "lower_bound": "MTYxMjYz", + "upper_bound": "MTY2MjMz", + "repeats": 20 + }, + { + "count": 66860381, + "lower_bound": "MTY2MzEx", + "upper_bound": "MTcwODgx", + "repeats": 20 + }, + { + "count": 67209978, + "lower_bound": "MTcxMDI4", + "upper_bound": "MTc2NzQy", + "repeats": 20 + }, + { + "count": 67559575, + "lower_bound": "MTc3MDY2", + "upper_bound": "MTgyNTk0", + "repeats": 20 + }, + { + "count": 67909172, + "lower_bound": "MTgzMDM5", + "upper_bound": "MTkwNDAw", + "repeats": 20 + }, + { + "count": 68258768, + "lower_bound": "MTkwOTUz", + "upper_bound": "MTk4NzU4", + "repeats": 20 + }, + { + "count": 68608365, + "lower_bound": "MTk4ODI2", + "upper_bound": "MjA1MTYz", + "repeats": 20 + }, + { + "count": 68957962, + "lower_bound": "MjA1Mjc2", + "upper_bound": "MjExNjAz", + "repeats": 20 + }, + { + "count": 69307559, + "lower_bound": "MjExODMw", + "upper_bound": "MjE2NTE5", + "repeats": 20 + }, + { + "count": 69657156, + "lower_bound": "MjE2NzQz", + "upper_bound": "MjI2MDg3", + "repeats": 20 + }, + { + "count": 70006752, + "lower_bound": "MjI2MjQy", + "upper_bound": "MjMyNjIy", + "repeats": 20 + }, + { + "count": 70356349, + "lower_bound": "MjMyOTc3", + "upper_bound": "MjQxMTQw", + "repeats": 20 + }, + { + "count": 70705946, + "lower_bound": "MjQxMzA0", + "upper_bound": "MjUwNTQ1", + "repeats": 20 + }, + { + "count": 71055543, + "lower_bound": "MjUwNjAy", + "upper_bound": "MjU5Mzg0", + "repeats": 20 + }, + { + "count": 71405139, + "lower_bound": "MjU5NDg3", + "upper_bound": "MjcwODg3", + "repeats": 20 + }, + { + "count": 71754736, + "lower_bound": "MjcxMjIz", + "upper_bound": "Mjc5OTU5", + "repeats": 20 + }, + { + "count": 72104333, + "lower_bound": "MjgwMTYx", + "upper_bound": "Mjk0OTgy", + "repeats": 20 + }, + { + "count": 72453930, + "lower_bound": "Mjk1MTcz", + "upper_bound": "MzA4Mzkx", + "repeats": 20 + }, + { + "count": 72803526, + "lower_bound": "MzA4NDgz", + "upper_bound": "MzI0ODM3", + "repeats": 20 + }, + { + "count": 73153123, + "lower_bound": "MzI0OTM5", + "upper_bound": "MzQyMjU4", + "repeats": 20 + }, + { + "count": 73502720, + "lower_bound": "MzQyNjU3", + "upper_bound": "MzU2ODkw", + "repeats": 20 + }, + { + "count": 73852317, + "lower_bound": "MzU3MDYy", + "upper_bound": "Mzc3MTI3", + "repeats": 20 + }, + { + "count": 74201914, + "lower_bound": "Mzc3ODIw", + "upper_bound": "MzkxMzE0", + "repeats": 20 + }, + { + "count": 74551510, + "lower_bound": "MzkxNjE1", + "upper_bound": "NDA3NjE0", + "repeats": 20 + }, + { + "count": 74901107, + "lower_bound": "NDA3NjMy", + "upper_bound": "NDI3ODM5", + "repeats": 20 + }, + { + "count": 75250704, + "lower_bound": "NDI4NzIw", + "upper_bound": "NDQ4MDQ1", + "repeats": 20 + }, + { + "count": 75600301, + "lower_bound": "NDUwNjAz", + "upper_bound": "NDc3MzUw", + "repeats": 20 + }, + { + "count": 75949897, + "lower_bound": "NDc3NDQx", + "upper_bound": "NTExMzQ1", + "repeats": 20 + }, + { + "count": 76299494, + "lower_bound": "NTExNDkx", + "upper_bound": "NTMzOTk4", + "repeats": 20 + }, + { + "count": 76649091, + "lower_bound": "NTM0MDEw", + "upper_bound": "NTU3MjQz", + "repeats": 20 + }, + { + "count": 76998688, + "lower_bound": "NTU3ODAx", + "upper_bound": "NTkwNDc4", + "repeats": 20 + }, + { + "count": 77348284, + "lower_bound": "NTkwOTY3", + "upper_bound": "NjE1OTI0", + "repeats": 20 + }, + { + "count": 77697881, + "lower_bound": "NjE2Njk5", + "upper_bound": "NjUzMjIz", + "repeats": 20 + }, + { + "count": 78047478, + "lower_bound": "NjUzNjIx", + "upper_bound": "NjkwOTEx", + "repeats": 20 + }, + { + "count": 78397075, + "lower_bound": "NjkzMDk4", + "upper_bound": "NzMzMDk2", + "repeats": 20 + }, + { + "count": 78746671, + "lower_bound": "NzM1MjI0", + "upper_bound": "NzczNDA0", + "repeats": 20 + }, + { + "count": 79096268, + "lower_bound": "NzczNjM3", + "upper_bound": "ODM1NzYy", + "repeats": 20 + }, + { + "count": 79445865, + "lower_bound": "ODM2MDgy", + "upper_bound": "ODg0MTk3", + "repeats": 20 + }, + { + "count": 79795462, + "lower_bound": "ODg0OTUz", + "upper_bound": "OTQ1Mjg1", + "repeats": 20 + }, + { + "count": 80145059, + "lower_bound": "OTQ1Mjg3", + "upper_bound": "OTk0OTQ4", + "repeats": 20 + }, + { + "count": 80494655, + "lower_bound": "OTk2NzY1", + "upper_bound": "MTAzOTAzNA==", + "repeats": 20 + }, + { + "count": 80844252, + "lower_bound": "MTAzOTM5Nw==", + "upper_bound": "MTA5NzAwOQ==", + "repeats": 20 + }, + { + "count": 81193849, + "lower_bound": "MTA5Nzc3OA==", + "upper_bound": "MTE1MjAxNg==", + "repeats": 20 + }, + { + "count": 81543446, + "lower_bound": "MTE1MzA1Mg==", + "upper_bound": "MTIwNTQ3Mg==", + "repeats": 20 + }, + { + "count": 81893042, + "lower_bound": "MTIwNjI4NA==", + "upper_bound": "MTI0OTEyNg==", + "repeats": 20 + }, + { + "count": 82242639, + "lower_bound": "MTI1MTY2MA==", + "upper_bound": "MTMyMDcxMQ==", + "repeats": 20 + }, + { + "count": 82592236, + "lower_bound": "MTMyMDk4Mw==", + "upper_bound": "MTM2NjkwOA==", + "repeats": 20 + }, + { + "count": 82941833, + "lower_bound": "MTM2Nzc5OQ==", + "upper_bound": "MTQyMDg2Nw==", + "repeats": 20 + }, + { + "count": 83291429, + "lower_bound": "MTQyMTEyNA==", + "upper_bound": "MTQ3NjAzNg==", + "repeats": 20 + }, + { + "count": 83641026, + "lower_bound": "MTQ3NzEwMg==", + "upper_bound": "MTUyODUxMg==", + "repeats": 20 + }, + { + "count": 83990623, + "lower_bound": "MTUyOTQ4OA==", + "upper_bound": "MTYyMDg1Mw==", + "repeats": 20 + }, + { + "count": 84340220, + "lower_bound": "MTYyMTk2Nw==", + "upper_bound": "MTcwMzM4Nw==", + "repeats": 20 + }, + { + "count": 84689817, + "lower_bound": "MTcxMTc2Nw==", + "upper_bound": "MTgxOTY3Mg==", + "repeats": 20 + }, + { + "count": 85039413, + "lower_bound": "MTgyMjQxMA==", + "upper_bound": "MTkxMjUyOQ==", + "repeats": 20 + }, + { + "count": 85389010, + "lower_bound": "MTkxMjg5OQ==", + "upper_bound": "MjE5ODA4MA==", + "repeats": 20 + }, + { + "count": 85738607, + "lower_bound": "MjIwNTkwMQ==", + "upper_bound": "MjUzNTY5MQ==", + "repeats": 20 + }, + { + "count": 86088204, + "lower_bound": "MjU0NjMxMg==", + "upper_bound": "Mjg2MzM1NA==", + "repeats": 20 + }, + { + "count": 86437800, + "lower_bound": "MjkwMzIyNA==", + "upper_bound": "MzI0NDQxNA==", + "repeats": 20 + }, + { + "count": 86787397, + "lower_bound": "MzI2NzI5MA==", + "upper_bound": "MzU5OTA0Mg==", + "repeats": 20 + }, + { + "count": 87136994, + "lower_bound": "MzYxMTgzOA==", + "upper_bound": "Mzk0NDE0Mg==", + "repeats": 20 + }, + { + "count": 87399192, + "lower_bound": "Mzk1MTg5Nw==", + "upper_bound": "NDIyNTYxNQ==", + "repeats": 20 + } + ] + }, + "cm_sketch": { + "rows": [ + { + "counters": [ + 34369, + 37996, + 37649, + 36983, + 37175, + 46973, + 40106, + 45874, + 30448, + 38932, + 46568, + 36438, + 36476, + 45829, + 33221, + 48051, + 46166, + 37653, + 41324, + 31656, + 36087, + 41867, + 39704, + 45794, + 55984, + 37698, + 42657, + 38277, + 41421, + 38158, + 35734, + 40221, + 31583, + 26399, + 39772, + 37170, + 37639, + 34755, + 28988, + 55983, + 45798, + 43614, + 52651, + 46922, + 37414, + 36893, + 48335, + 38676, + 28496, + 40293, + 42382, + 31166, + 34358, + 61030, + 39535, + 34876, + 48836, + 54847, + 34443, + 41835, + 31717, + 50315, + 41641, + 42732, + 40527, + 42640, + 37426, + 48543, + 40745, + 46318, + 41599, + 33961, + 44884, + 45739, + 39260, + 46117, + 31019, + 38148, + 30635, + 44513, + 40472, + 33241, + 36879, + 35510, + 52300, + 46824, + 32765, + 68839, + 37017, + 37429, + 38878, + 41236, + 39584, + 36921, + 48473, + 33359, + 39556, + 43333, + 37432, + 34731, + 39853, + 54870, + 46884, + 45212, + 42898, + 32037, + 40388, + 41217, + 42812, + 38292, + 36909, + 55170, + 39217, + 39554, + 44862, + 46075, + 46904, + 45241, + 41907, + 43354, + 43941, + 39405, + 35414, + 43466, + 40597, + 41382, + 40984, + 32398, + 41214, + 43383, + 38601, + 43492, + 44660, + 37966, + 32901, + 40106, + 47933, + 35675, + 71476, + 56873, + 32289, + 37786, + 34337, + 30112, + 42653, + 36822, + 33981, + 43794, + 29867, + 43437, + 38624, + 36468, + 34001, + 45458, + 44641, + 43636, + 56936, + 54471, + 33305, + 39615, + 41516, + 42499, + 44693, + 55957, + 36023, + 35089, + 49701, + 38066, + 32097, + 35296, + 35722, + 39110, + 41169, + 29932, + 51952, + 44569, + 37704, + 43702, + 43615, + 43682, + 44837, + 41963, + 38092, + 38264, + 38835, + 43472, + 39441, + 49134, + 40895, + 42796, + 55085, + 41176, + 40760, + 34146, + 34008, + 39504, + 41058, + 33950, + 43339, + 42636, + 38305, + 42782, + 34289, + 45530, + 35938, + 36805, + 37519, + 31434, + 49871, + 38457, + 31395, + 37333, + 36045, + 31982, + 39873, + 37875, + 38956, + 41318, + 52238, + 50052, + 50042, + 36004, + 44959, + 36672, + 39918, + 44056, + 28075, + 47036, + 41706, + 36503, + 33709, + 35364, + 43216, + 40162, + 39259, + 38058, + 47146, + 35288, + 27560, + 38179, + 44290, + 31465, + 46195, + 41290, + 38686, + 46560, + 44392, + 31836, + 30653, + 34353, + 53192, + 35250, + 48466, + 35985, + 37937, + 38462, + 38134, + 47804, + 43596, + 43165, + 43169, + 48861, + 41548, + 36564, + 42765, + 50928, + 34322, + 47629, + 38549, + 57261, + 61296, + 54301, + 35541, + 36339, + 40977, + 31044, + 37678, + 43815, + 31833, + 37509, + 40195, + 40085, + 33514, + 38926, + 42085, + 43714, + 39805, + 27854, + 39448, + 39489, + 38410, + 37810, + 49453, + 42696, + 38966, + 42196, + 46806, + 35467, + 30374, + 47883, + 41402, + 47718, + 42512, + 41885, + 34533, + 58199, + 32578, + 33753, + 49851, + 56949, + 43162, + 30628, + 34652, + 41953, + 34737, + 41995, + 34680, + 36700, + 41087, + 71591, + 39435, + 54364, + 46555, + 32625, + 59795, + 41493, + 28863, + 38681, + 32433, + 39122, + 44134, + 36205, + 34076, + 38534, + 49944, + 42196, + 59020, + 45281, + 38183, + 39194, + 36272, + 38573, + 40826, + 48922, + 27916, + 34354, + 34341, + 33839, + 36379, + 38045, + 63680, + 61411, + 31950, + 33399, + 46901, + 40814, + 30220, + 69108, + 44092, + 44848, + 38313, + 35649, + 33728, + 32612, + 40980, + 41041, + 39487, + 36693, + 41034, + 42913, + 37334, + 52305, + 32640, + 35386, + 40556, + 43992, + 38737, + 43199, + 41100, + 67283, + 39859, + 46873, + 36596, + 48425, + 29556, + 43279, + 58266, + 42022, + 46434, + 37424, + 31421, + 42923, + 32246, + 38051, + 35936, + 41577, + 33989, + 38337, + 31006, + 43553, + 39268, + 37570, + 35805, + 38051, + 36317, + 37970, + 40706, + 36945, + 33413, + 43768, + 37399, + 38866, + 29478, + 35385, + 40503, + 38524, + 42619, + 34622, + 34102, + 75487, + 35449, + 29102, + 39001, + 29427, + 31405, + 44153, + 34165, + 49176, + 49158, + 46036, + 37545, + 61908, + 41772, + 40658, + 53633, + 31606, + 30170, + 41986, + 64626, + 49298, + 55377, + 33768, + 38336, + 34343, + 31032, + 40121, + 33606, + 39384, + 33383, + 37618, + 33101, + 41969, + 36348, + 41628, + 40926, + 46052, + 39979, + 33455, + 42045, + 41943, + 30981, + 46857, + 53925, + 33251, + 33833, + 32999, + 41286, + 41068, + 34972, + 37855, + 43834, + 53143, + 47573, + 50050, + 31602, + 73811, + 40234, + 39366, + 34156, + 39912, + 39300, + 33869, + 68015, + 48179, + 43199, + 50718, + 56470, + 36335, + 36804, + 37342, + 48958, + 51658, + 32453, + 46361, + 47403, + 40373, + 41174, + 29313, + 38115, + 31817, + 39968, + 34915, + 32752, + 33592, + 42320, + 34409, + 34145, + 33304, + 42865, + 36849, + 40604, + 33071, + 38824, + 26182, + 40662, + 39871, + 38657, + 52606, + 41080, + 65341, + 46113, + 36077, + 36303, + 36096, + 41491, + 41848, + 30788, + 42492, + 47119, + 39918, + 58503, + 32588, + 68513, + 54673, + 31291, + 45584, + 42781, + 33528, + 38108, + 35533, + 38260, + 39956, + 38879, + 39950, + 49647, + 44227, + 38031, + 60172, + 36685, + 47635, + 38602, + 35547, + 32841, + 40313, + 37066, + 39597, + 38373, + 34393, + 53129, + 44151, + 27959, + 33629, + 32540, + 38866, + 58766, + 45852, + 40800, + 48109, + 47184, + 32991, + 56847, + 34681, + 38053, + 45677, + 43455, + 33463, + 39645, + 38187, + 40291, + 32290, + 39776, + 35811, + 31417, + 40063, + 44439, + 36658, + 43131, + 41446, + 39397, + 42527, + 45160, + 27542, + 68918, + 48813, + 44378, + 41089, + 34521, + 46823, + 42153, + 29670, + 38828, + 49621, + 46042, + 39532, + 43754, + 39038, + 31612, + 44921, + 57492, + 37542, + 40804, + 60374, + 44622, + 49739, + 31803, + 31317, + 49763, + 32136, + 39139, + 59759, + 38926, + 27505, + 50199, + 42473, + 31483, + 37583, + 41393, + 42450, + 42060, + 35199, + 33707, + 44523, + 34204, + 33047, + 43224, + 58762, + 58266, + 39964, + 39307, + 38040, + 43783, + 37445, + 40013, + 43970, + 28305, + 41008, + 34663, + 43358, + 36894, + 38209, + 46229, + 42648, + 45922, + 52206, + 54027, + 48495, + 35755, + 34588, + 38590, + 57485, + 47403, + 42852, + 27396, + 36591, + 40907, + 32444, + 40736, + 47096, + 49275, + 37650, + 35901, + 34462, + 36193, + 32197, + 56180, + 42534, + 66453, + 39212, + 49103, + 37577, + 36165, + 45970, + 34402, + 43202, + 72768, + 33631, + 36522, + 35100, + 35177, + 31887, + 39804, + 34957, + 40419, + 36591, + 38010, + 43252, + 40766, + 32864, + 41396, + 61568, + 43364, + 34109, + 35023, + 43598, + 28741, + 43294, + 34451, + 40640, + 38136, + 33734, + 39113, + 53444, + 45113, + 37773, + 34507, + 38431, + 44031, + 35830, + 43895, + 36545, + 44922, + 49193, + 55533, + 37392, + 47009, + 49510, + 53230, + 40553, + 35982, + 33390, + 39581, + 41217, + 41327, + 39797, + 34942, + 47963, + 35332, + 34336, + 52980, + 36236, + 35761, + 44957, + 42630, + 45496, + 36660, + 46976, + 62640, + 37623, + 42642, + 39135, + 32398, + 42129, + 41876, + 54365, + 48430, + 49459, + 44279, + 31242, + 42912, + 43275, + 39362, + 29770, + 36142, + 34461, + 32259, + 43266, + 43679, + 38816, + 39133, + 41973, + 42683, + 36525, + 41723, + 43545, + 39029, + 65826, + 44247, + 48081, + 25756, + 57529, + 42470, + 35364, + 41234, + 39896, + 46763, + 46346, + 48981, + 40532, + 39354, + 48105, + 44675, + 55045, + 38182, + 33988, + 34741, + 39866, + 52099, + 32574, + 40892, + 33011, + 43601, + 37064, + 38439, + 51933, + 30518, + 43222, + 32690, + 43570, + 43290, + 39386, + 31479, + 37308, + 39751, + 40247, + 40921, + 32972, + 31627, + 44797, + 29892, + 47063, + 33541, + 35378, + 46618, + 47908, + 47040, + 49944, + 40345, + 36116, + 32779, + 53018, + 41673, + 38852, + 41861, + 39467, + 34890, + 34729, + 37401, + 44095, + 36867, + 47453, + 29810, + 48503, + 56974, + 46792, + 34123, + 32990, + 47255, + 71993, + 43814, + 33284, + 38322, + 38315, + 78208, + 39372, + 49423, + 45970, + 45373, + 37608, + 41078, + 35587, + 41867, + 50515, + 36108, + 39058, + 33014, + 30327, + 47144, + 37763, + 41507, + 30972, + 33394, + 34500, + 40757, + 40947, + 45136, + 38306, + 33503, + 38276, + 33858, + 60082, + 35809, + 46998, + 35595, + 46819, + 44658, + 41887, + 43117, + 46348, + 27120, + 37536, + 33362, + 36790, + 46565, + 35511, + 33305, + 43674, + 36698, + 54149, + 33886, + 60692, + 53957, + 36157, + 38611, + 32972, + 40323, + 36192, + 62111, + 39338, + 58343, + 41304, + 43742, + 51257, + 38539, + 30411, + 41538, + 35356, + 36009, + 34845, + 51172, + 61870, + 41149, + 42451, + 37536, + 41100, + 44857, + 53160, + 40804, + 36889, + 45029, + 42043, + 46966, + 51638, + 38537, + 48090, + 34984, + 67040, + 38079, + 52540, + 32084, + 36785, + 44740, + 31725, + 55324, + 36881, + 40998, + 32767, + 28799, + 64256, + 45970, + 52566, + 39480, + 54930, + 40383, + 55121, + 30599, + 48253, + 36110, + 39220, + 40765, + 32933, + 35335, + 34442, + 62782, + 53560, + 46759, + 37054, + 53876, + 44438, + 42282, + 47564, + 42104, + 40670, + 47337, + 40340, + 58012, + 54640, + 29498, + 36333, + 42250, + 39462, + 44449, + 33447, + 46110, + 33185, + 34586, + 38007, + 33390, + 37795, + 34702, + 40864, + 26200, + 31010, + 43424, + 38007, + 35122, + 64514, + 39476, + 35971, + 44549, + 32846, + 38382, + 39659, + 33802, + 39886, + 53540, + 40740, + 39029, + 61298, + 44004, + 32296, + 54092, + 34904, + 54148, + 37652, + 44248, + 41026, + 51642, + 37243, + 56956, + 37578, + 35567, + 37863, + 37176, + 36821, + 40388, + 34793, + 47382, + 36131, + 45726, + 35633, + 44518, + 51530, + 47467, + 44913, + 40279, + 44874, + 47729, + 35734, + 35308, + 51115, + 30653, + 33514, + 39541, + 44252, + 61501, + 36721, + 49644, + 47396, + 48465, + 45532, + 40930, + 48205, + 31436, + 34454, + 50106, + 44114, + 29881, + 35851, + 41650, + 34744, + 43899, + 45070, + 31893, + 35036, + 39591, + 36752, + 36515, + 41610, + 41723, + 44353, + 36902, + 42502, + 44703, + 47372, + 37292, + 32029, + 35186, + 40569, + 39306, + 37250, + 31448, + 36554, + 36359, + 52641, + 54496, + 29965, + 46549, + 32966, + 40828, + 35628, + 42401, + 40006, + 49900, + 58418, + 32593, + 34891, + 42623, + 32838, + 48473, + 40092, + 47648, + 42406, + 61286, + 38580, + 40721, + 43749, + 50491, + 35482, + 37251, + 44732, + 38373, + 40376, + 40748, + 30789, + 31570, + 28749, + 50709, + 32155, + 29856, + 40926, + 43587, + 33849, + 37622, + 48280, + 45672, + 38458, + 34183, + 41675, + 38016, + 42481, + 41666, + 49643, + 43136, + 30727, + 34113, + 37773, + 32646, + 34530, + 38619, + 38278, + 41757, + 52231, + 37658, + 49618, + 32489, + 50655, + 42618, + 34962, + 36315, + 59317, + 37984, + 49521, + 40366, + 31502, + 37117, + 48199, + 37048, + 35245, + 33430, + 49624, + 38401, + 54627, + 41984, + 38789, + 29799, + 35571, + 41706, + 38448, + 36588, + 34294, + 39743, + 38656, + 59236, + 41907, + 42385, + 46603, + 43838, + 33924, + 36141, + 44824, + 38544, + 38818, + 36976, + 32688, + 51082, + 46166, + 38432, + 41474, + 45420, + 51429, + 31572, + 38688, + 38993, + 41770, + 40044, + 33615, + 42071, + 29844, + 41884, + 26460, + 29405, + 36358, + 37523, + 33531, + 42032, + 38555, + 49064, + 29034, + 32757, + 49284, + 40663, + 27960, + 42645, + 35055, + 51921, + 34815, + 31236, + 35441, + 34535, + 36702, + 36997, + 38431, + 43616, + 40101, + 61418, + 40259, + 47434, + 64514, + 43334, + 38926, + 33214, + 32451, + 38935, + 39126, + 46142, + 37623, + 41447, + 28766, + 43842, + 43324, + 32920, + 29983, + 40949, + 55360, + 62036, + 36027, + 35491, + 32527, + 43935, + 32134, + 36936, + 42930, + 46134, + 39310, + 39099, + 56477, + 37346, + 33518, + 34913, + 53505, + 35156, + 52563, + 39391, + 49302, + 39667, + 36730, + 41243, + 53909, + 58791, + 37169, + 35453, + 44657, + 48769, + 40558, + 36515, + 37074, + 50434, + 33339, + 29772, + 40958, + 36782, + 39593, + 56590, + 40984, + 32458, + 31691, + 34856, + 38723, + 33794, + 33579, + 36625, + 56686, + 43194, + 38641, + 57173, + 53297, + 30420, + 33698, + 45441, + 34844, + 38415, + 37260, + 33177, + 52812, + 38937, + 34957, + 55538, + 32925, + 36070, + 32580, + 36366, + 35312, + 46840, + 49598, + 48750, + 50143, + 37239, + 39635, + 41729, + 36170, + 52252, + 33540, + 39489, + 37230, + 46235, + 49257, + 41814, + 32929, + 50512, + 35733, + 43669, + 36560, + 39827, + 37310, + 45221, + 48286, + 32301, + 31510, + 30867, + 45534, + 40215, + 37472, + 36561, + 34872, + 40596, + 44187, + 81259, + 47486, + 44589, + 61889, + 37228, + 39182, + 39178, + 38540, + 42453, + 51930, + 42012, + 60941, + 46795, + 41945, + 33880, + 38009, + 41873, + 33439, + 40321, + 48480, + 41583, + 44750, + 46451, + 35196, + 47572, + 47433, + 43863, + 43194, + 27022, + 54929, + 40222, + 31684, + 36796, + 46926, + 37434, + 29493, + 57675, + 37391, + 37504, + 42555, + 42372, + 41841, + 38347, + 40909, + 41461, + 40003, + 38724, + 31751, + 34587, + 38185, + 42517, + 38679, + 33091, + 42490, + 45070, + 53216, + 41453, + 39648, + 41824, + 36853, + 33005, + 45800, + 43099, + 39899, + 41181, + 48106, + 38156, + 59802, + 38399, + 33363, + 56162, + 33231, + 42932, + 41398, + 29383, + 41470, + 36393, + 36930, + 38378, + 53346, + 39069, + 36416, + 42190, + 39068, + 38899, + 41567, + 42767, + 50294, + 29447, + 38045, + 31843, + 37309, + 39757, + 41662, + 44394, + 37223, + 45466, + 32317, + 46957, + 57898, + 46660, + 36277, + 44589, + 44193, + 57150, + 35591, + 44484, + 39539, + 37948, + 51203, + 33212, + 41959, + 37740, + 35180, + 35711, + 48261, + 30258, + 35341, + 42050, + 36820, + 38368, + 37557, + 34382, + 40980, + 59371, + 28587, + 30258, + 42708, + 43174, + 34410, + 30998, + 44139, + 35214, + 54493, + 45077, + 34372, + 40463, + 34571, + 32907, + 46372, + 41397, + 40185, + 40252, + 33783, + 37256, + 35725, + 30936, + 58674, + 55910, + 46302, + 42720, + 48699, + 38148, + 33667, + 30382, + 33426, + 33630, + 38759, + 49846, + 32863, + 31123, + 32943, + 48923, + 54076, + 46326, + 50293, + 55960, + 34414, + 38756, + 33170, + 43374, + 35389, + 39009, + 51022, + 34356, + 45273, + 48499, + 30245, + 39728, + 35077, + 38600, + 43744, + 46278, + 44984, + 44617, + 36322, + 32464, + 29812, + 42906, + 48191, + 45414, + 37594, + 41994, + 38755, + 40275, + 30458, + 43579, + 38257, + 59214, + 39532, + 39991, + 65790, + 50690, + 33413, + 37768, + 39532, + 32295, + 36873, + 39878, + 61954, + 38540, + 53901, + 56440, + 62032, + 41525, + 41227, + 34763, + 38614, + 41206, + 37353, + 53733, + 45893, + 46305, + 31671, + 48632, + 40355, + 55135, + 37334, + 44931, + 39224, + 39890, + 42715, + 38822, + 51902, + 46206, + 48661, + 33094, + 32897, + 44935, + 40278, + 44787, + 49363, + 40057, + 37048, + 36596, + 37847, + 45554, + 43285, + 35972, + 48018, + 43514, + 40147, + 62503, + 41661, + 34292, + 58408, + 69712, + 44003, + 41498, + 42859, + 42510, + 37899, + 37081, + 36837, + 36482, + 37920, + 39759, + 53251, + 46209, + 37320, + 39360, + 33283, + 43665, + 40723, + 32883, + 33593, + 36768, + 32599, + 42518, + 66128, + 33604, + 37398, + 35450, + 31465, + 36562, + 39824, + 65538, + 40915, + 45884, + 39669, + 48991, + 39007, + 34068, + 39471, + 41456, + 48578, + 47460, + 43097, + 55348, + 31424, + 37244, + 40092, + 45980, + 42366, + 29723, + 46694, + 43790, + 38084, + 39864, + 31003, + 41564, + 35177, + 32783, + 31757, + 53046, + 37540, + 33866, + 46434, + 62553, + 35600, + 34277, + 48624, + 33832, + 31095, + 54764, + 31960, + 30208, + 42656, + 43853, + 46346, + 54090, + 36230, + 42507, + 52458, + 39414, + 43710, + 32502, + 36112, + 32157, + 41612, + 34331, + 35692, + 36546, + 39617, + 35602, + 55652, + 43086, + 35028, + 39446, + 41241, + 48324, + 35980, + 33496, + 36579, + 39794, + 30463, + 32368, + 43993, + 66627, + 42356, + 67875, + 36068, + 40376, + 58482, + 37800, + 47664, + 50285, + 49502, + 46384, + 43082, + 40554, + 37294, + 42089, + 33944, + 34920, + 48081, + 38968, + 40907, + 31325, + 40773, + 53125, + 45997, + 43873, + 37252, + 37521, + 36855, + 34685, + 47875, + 39687, + 44876, + 43763, + 32476, + 45462, + 34421, + 46784, + 47853, + 36422, + 50077, + 34684, + 49438, + 37659, + 54338, + 42254, + 28236, + 32497, + 42103, + 42384, + 39914, + 61508, + 36734, + 44331, + 41658, + 56693, + 34894, + 39726, + 48017, + 55443, + 34801, + 39151, + 33140, + 36882, + 38436, + 40581, + 81199, + 42659, + 41480, + 32417, + 41497, + 36571, + 37805, + 36865, + 28268, + 30989, + 33100, + 43554, + 41827, + 39078, + 47091, + 39726, + 36261, + 41765, + 42877, + 41873, + 87200, + 36938, + 35127, + 35179, + 50812, + 47208, + 34258, + 38089, + 36679, + 49339, + 32594, + 41087, + 38933, + 42275, + 36607, + 40716, + 49894, + 38422, + 45614, + 47173, + 35520, + 47958, + 48001, + 35776, + 47286, + 42892, + 59247, + 35760, + 42026, + 51171, + 40702, + 38935, + 43868, + 54577, + 30525, + 37528, + 34840, + 42764, + 32662, + 44743, + 33371, + 37765, + 34385, + 41454, + 40720, + 48545, + 53225, + 46605, + 52668, + 40052, + 39846, + 32564, + 49107, + 45146, + 33164, + 27081, + 37642, + 36627, + 48941, + 39269, + 54355, + 43327, + 46958, + 55256, + 40730, + 45160, + 40354, + 38834, + 39150, + 69540, + 36802, + 30718, + 37743, + 47426, + 50888, + 53578, + 36268, + 32940, + 38997, + 28236, + 39146, + 35311, + 63603, + 51576, + 39594, + 39303, + 43367, + 37000, + 39812, + 41700, + 32481, + 38442, + 39420, + 40394, + 43106, + 42458, + 80996, + 43135, + 33778, + 35415, + 35998, + 46890, + 38032, + 32937, + 42599, + 32150, + 39925, + 33141, + 43560, + 31124, + 40801, + 39327, + 27185, + 42883, + 39512, + 47153, + 39469, + 56565, + 51238, + 35312, + 41516, + 62691, + 43672, + 50177, + 57368, + 69978, + 38516, + 35172, + 34398, + 39184, + 47866, + 45313, + 56395, + 33460, + 65352, + 43373, + 46386, + 40509, + 41653, + 41637, + 41344, + 40845, + 33538, + 41513, + 43757, + 47518, + 35054, + 38827, + 49982, + 40779, + 35270, + 28300, + 30157, + 37817, + 31838, + 35690, + 34378, + 42689, + 49023, + 32789, + 34216, + 49156, + 69014, + 35153, + 33272, + 54586, + 37399, + 55355, + 34579, + 37169, + 51002, + 38717, + 49090, + 30988, + 34429, + 46248, + 37070, + 33592, + 32210, + 46855, + 49815, + 77879, + 36070, + 33207, + 47300, + 35228, + 37512, + 32846, + 32939, + 38103, + 41652, + 35383, + 38476, + 47427, + 39058, + 48358, + 33658, + 41157, + 41513, + 36368, + 36697, + 34846, + 37321, + 28925, + 49840, + 47349, + 61471, + 34853, + 44658, + 42520, + 49573, + 33034, + 33417, + 37286, + 30861, + 34346, + 39912, + 43193, + 41429, + 37890, + 41892, + 43018, + 43647, + 34433, + 37991, + 38387, + 36638, + 45040, + 42620, + 38106, + 30149, + 80696, + 49129, + 34103, + 32117, + 51831, + 63341, + 42981, + 42562, + 34561, + 45831, + 43576, + 43310, + 44763, + 51069, + 44452, + 41172, + 32323, + 36433, + 42239, + 32560, + 37590, + 48037, + 33560, + 34048, + 42026, + 32509, + 55588, + 37608 + ] + }, + { + "counters": [ + 35175, + 54795, + 31860, + 46209, + 43165, + 47798, + 37352, + 36214, + 46355, + 41463, + 33566, + 67479, + 32480, + 36735, + 38932, + 39017, + 37675, + 44466, + 56179, + 32380, + 45785, + 39358, + 53199, + 44178, + 44933, + 40265, + 23988, + 44771, + 30126, + 41224, + 40080, + 47121, + 36104, + 64743, + 32799, + 53047, + 39914, + 40179, + 42058, + 37055, + 42750, + 50696, + 37059, + 31840, + 51237, + 33305, + 31168, + 42192, + 51050, + 35027, + 38730, + 28310, + 48228, + 50852, + 47684, + 37965, + 44965, + 33601, + 37187, + 35796, + 40414, + 39077, + 39296, + 33152, + 37838, + 41488, + 39190, + 35291, + 35413, + 37482, + 33471, + 42251, + 43044, + 39078, + 46456, + 35961, + 40625, + 40328, + 50531, + 46520, + 33145, + 34196, + 37723, + 38071, + 31894, + 41917, + 35714, + 57212, + 45983, + 38280, + 27972, + 37259, + 40233, + 37655, + 35982, + 40976, + 46031, + 32247, + 44465, + 39557, + 38239, + 46311, + 45627, + 37579, + 29314, + 66121, + 34127, + 40693, + 42142, + 47725, + 45932, + 40146, + 41082, + 37802, + 38932, + 56506, + 41591, + 38478, + 43951, + 24006, + 39551, + 33462, + 47451, + 36605, + 32294, + 31128, + 32208, + 40109, + 41959, + 37729, + 34129, + 51384, + 34269, + 36038, + 41530, + 52221, + 49181, + 34632, + 32983, + 43326, + 31786, + 31235, + 42459, + 31440, + 32794, + 37299, + 33869, + 36554, + 42025, + 49653, + 35104, + 31704, + 33179, + 44246, + 41644, + 44177, + 44125, + 36440, + 41261, + 29245, + 38975, + 39396, + 24748, + 36387, + 50196, + 59054, + 40981, + 37162, + 32635, + 30209, + 37347, + 49294, + 34158, + 42163, + 46917, + 44656, + 51685, + 39471, + 33087, + 43936, + 38842, + 47409, + 32031, + 37758, + 52348, + 33636, + 43952, + 45004, + 55721, + 33366, + 33964, + 49502, + 42293, + 35213, + 59111, + 32193, + 37001, + 35666, + 34969, + 39004, + 40889, + 62596, + 47761, + 52164, + 39272, + 35145, + 51340, + 35175, + 51674, + 45834, + 46662, + 34383, + 37311, + 50766, + 41153, + 50515, + 37570, + 42866, + 39729, + 54214, + 35220, + 39602, + 45961, + 34293, + 33601, + 40422, + 33542, + 50728, + 30691, + 58477, + 54591, + 48378, + 45591, + 35766, + 37756, + 32631, + 43670, + 34448, + 32086, + 36016, + 38155, + 34478, + 43316, + 38091, + 40976, + 37538, + 35447, + 38022, + 35899, + 40028, + 60021, + 38869, + 42148, + 43250, + 29558, + 42460, + 41199, + 35134, + 37967, + 34183, + 34251, + 37980, + 35528, + 39444, + 29109, + 35824, + 30801, + 46729, + 38640, + 31524, + 33678, + 42278, + 39779, + 40138, + 38963, + 36055, + 36813, + 30870, + 33894, + 40345, + 56696, + 31671, + 44579, + 35106, + 57041, + 43578, + 50593, + 33125, + 54005, + 39274, + 38782, + 30540, + 48317, + 33641, + 44603, + 51162, + 37058, + 26366, + 45262, + 35529, + 40733, + 36106, + 43722, + 35623, + 54159, + 43135, + 43875, + 42811, + 54700, + 40593, + 47257, + 50083, + 33738, + 41113, + 54787, + 36814, + 41644, + 45049, + 55509, + 34145, + 43018, + 43494, + 64327, + 34002, + 44404, + 40710, + 42139, + 43725, + 56012, + 48870, + 43822, + 44879, + 34077, + 51623, + 62380, + 39007, + 52079, + 44270, + 51184, + 36379, + 41220, + 37390, + 43588, + 30860, + 38877, + 63287, + 55635, + 31412, + 44916, + 40666, + 46506, + 28629, + 46832, + 37959, + 28920, + 29912, + 35600, + 35027, + 32537, + 32508, + 52742, + 28362, + 32197, + 31944, + 86187, + 49705, + 37594, + 58276, + 35092, + 115160, + 32217, + 38214, + 36575, + 39297, + 38684, + 37158, + 41821, + 31419, + 68973, + 46375, + 38399, + 45209, + 49879, + 51771, + 46827, + 35250, + 33637, + 39132, + 52416, + 26767, + 28883, + 53569, + 38602, + 54544, + 44409, + 44149, + 41254, + 54764, + 36019, + 41467, + 41908, + 41088, + 46476, + 39541, + 38517, + 36985, + 41918, + 32773, + 39853, + 38662, + 43988, + 51974, + 34322, + 43521, + 38432, + 36572, + 34600, + 38060, + 33370, + 50743, + 40557, + 40628, + 31290, + 44021, + 41622, + 34916, + 35422, + 52697, + 42130, + 33533, + 30937, + 42909, + 31338, + 49801, + 41929, + 45209, + 40433, + 41215, + 30013, + 38411, + 33254, + 42987, + 32024, + 36747, + 42408, + 54871, + 25515, + 43430, + 59583, + 54136, + 42701, + 36550, + 23821, + 35201, + 44624, + 36473, + 39871, + 33715, + 39963, + 33291, + 29053, + 49024, + 39960, + 36010, + 32794, + 44163, + 53663, + 59795, + 41449, + 33531, + 37528, + 34889, + 36619, + 42106, + 40506, + 33121, + 43880, + 33120, + 33999, + 31984, + 43073, + 47331, + 70322, + 39746, + 39643, + 29984, + 50158, + 39376, + 39946, + 29751, + 37042, + 45674, + 42302, + 38263, + 38285, + 40681, + 28051, + 51623, + 32733, + 40902, + 31617, + 40565, + 36082, + 43157, + 40472, + 41423, + 46738, + 42042, + 38552, + 35804, + 31719, + 44677, + 48985, + 37767, + 43258, + 43910, + 39857, + 37036, + 50537, + 31239, + 41450, + 54451, + 40247, + 30788, + 35910, + 43795, + 39990, + 30601, + 44306, + 41314, + 36786, + 37880, + 49959, + 37608, + 39792, + 40882, + 31936, + 31020, + 37390, + 36071, + 54606, + 48396, + 39991, + 42330, + 33260, + 37253, + 36798, + 38804, + 31137, + 39521, + 33809, + 30247, + 41734, + 48967, + 53408, + 54077, + 32022, + 30285, + 41922, + 42056, + 31105, + 37961, + 34728, + 48834, + 32888, + 42549, + 36925, + 36995, + 44699, + 43034, + 52601, + 51061, + 34276, + 31989, + 42923, + 41975, + 47929, + 38837, + 35574, + 52447, + 37289, + 41861, + 50758, + 29792, + 49922, + 62263, + 31943, + 34585, + 40094, + 46593, + 52783, + 50526, + 41512, + 41834, + 48218, + 35950, + 42979, + 47908, + 34459, + 34370, + 54720, + 32655, + 41242, + 43447, + 37215, + 41121, + 33651, + 38837, + 38582, + 32806, + 34004, + 41701, + 34667, + 34923, + 52588, + 38161, + 32267, + 41811, + 40114, + 40487, + 43433, + 32210, + 56852, + 36153, + 60848, + 36580, + 44468, + 31742, + 37358, + 34055, + 37350, + 37838, + 54691, + 38108, + 30245, + 35260, + 36445, + 32329, + 36594, + 43474, + 42259, + 39130, + 33999, + 35777, + 40921, + 30057, + 35871, + 32947, + 44743, + 37862, + 51842, + 33555, + 36637, + 38770, + 48664, + 47808, + 41813, + 33166, + 32322, + 42225, + 35933, + 46375, + 57394, + 35581, + 46223, + 40317, + 30512, + 54039, + 44770, + 40430, + 44698, + 40037, + 38416, + 39131, + 42693, + 40420, + 45118, + 37310, + 39108, + 43137, + 45458, + 31174, + 38870, + 39794, + 47918, + 36466, + 40387, + 39513, + 45085, + 43981, + 47828, + 44937, + 45898, + 47079, + 46415, + 34781, + 47939, + 30537, + 45741, + 56243, + 54376, + 44352, + 34676, + 46693, + 44967, + 46767, + 43257, + 36875, + 32507, + 36654, + 33711, + 39959, + 39158, + 36662, + 27902, + 43295, + 45181, + 39908, + 55253, + 45352, + 37027, + 39608, + 55863, + 52798, + 31679, + 29312, + 40206, + 57855, + 34917, + 35809, + 46755, + 35837, + 57785, + 33039, + 40930, + 46824, + 32862, + 28422, + 39538, + 56820, + 61183, + 41245, + 40240, + 77078, + 41808, + 48115, + 37656, + 46825, + 41462, + 46683, + 48069, + 36514, + 64701, + 68633, + 32316, + 44213, + 65231, + 38749, + 30249, + 52903, + 45212, + 41382, + 43628, + 53630, + 33124, + 37902, + 39238, + 38132, + 44056, + 39928, + 68020, + 39928, + 36885, + 47452, + 37731, + 35623, + 33516, + 49359, + 45163, + 35811, + 42691, + 37308, + 56206, + 34998, + 31611, + 42194, + 38350, + 33623, + 49914, + 32898, + 58591, + 43775, + 59812, + 36993, + 48388, + 43117, + 48813, + 51714, + 37300, + 51752, + 44255, + 52148, + 33946, + 34261, + 42155, + 38796, + 33437, + 40953, + 34072, + 35935, + 35336, + 36595, + 35929, + 38028, + 38738, + 49129, + 39092, + 51561, + 37234, + 53481, + 40873, + 43015, + 53921, + 51660, + 45622, + 50206, + 46838, + 39934, + 35230, + 37416, + 49382, + 40121, + 41314, + 66411, + 42902, + 42899, + 41360, + 30660, + 35261, + 56396, + 41349, + 42468, + 36893, + 38935, + 47073, + 51522, + 43164, + 51611, + 38275, + 28374, + 35297, + 32427, + 50697, + 53413, + 52697, + 61011, + 43058, + 36453, + 55867, + 36354, + 45702, + 32940, + 34020, + 51360, + 34968, + 42114, + 31986, + 34907, + 38933, + 30936, + 43251, + 39272, + 34708, + 34227, + 33274, + 32773, + 30942, + 43065, + 33378, + 47795, + 52770, + 53430, + 37216, + 43318, + 38730, + 41187, + 48152, + 37252, + 38432, + 45224, + 40956, + 41558, + 30030, + 42678, + 44762, + 37264, + 40080, + 39148, + 31497, + 49235, + 33464, + 35754, + 43265, + 32493, + 30223, + 51183, + 55888, + 30157, + 35022, + 33005, + 30055, + 43667, + 40018, + 42132, + 37353, + 42634, + 33729, + 40765, + 35964, + 32987, + 49960, + 34489, + 36860, + 32629, + 35888, + 51303, + 38456, + 45708, + 55863, + 47667, + 39686, + 54306, + 38831, + 43979, + 34457, + 37559, + 33412, + 51851, + 29895, + 56465, + 43935, + 35947, + 44928, + 35462, + 34454, + 36821, + 46021, + 48513, + 57775, + 34769, + 40237, + 31672, + 31557, + 56012, + 34499, + 50447, + 38380, + 46177, + 32337, + 35554, + 36802, + 44073, + 38104, + 67164, + 46312, + 41244, + 33136, + 43361, + 46826, + 36308, + 41325, + 59991, + 39847, + 43014, + 59354, + 49719, + 52127, + 28070, + 35572, + 26618, + 28490, + 39735, + 65715, + 45381, + 43019, + 41579, + 35935, + 31178, + 44530, + 48916, + 57462, + 43717, + 47491, + 39393, + 42269, + 32771, + 39543, + 29315, + 35614, + 42603, + 55822, + 28735, + 37663, + 38549, + 50129, + 33365, + 43495, + 42963, + 33714, + 81234, + 52722, + 38883, + 30521, + 41270, + 48381, + 31160, + 42275, + 49794, + 43616, + 33648, + 36566, + 50424, + 46317, + 28539, + 35748, + 46052, + 59840, + 32942, + 37285, + 30600, + 32224, + 46480, + 36525, + 37896, + 44628, + 35070, + 38340, + 32320, + 48406, + 59185, + 37142, + 43458, + 69109, + 43737, + 35568, + 35378, + 50945, + 34950, + 33111, + 56009, + 48438, + 61060, + 38548, + 37531, + 41062, + 29902, + 41528, + 32413, + 40651, + 37823, + 50988, + 32829, + 35842, + 41914, + 30579, + 43708, + 41106, + 37644, + 32905, + 60808, + 44579, + 34019, + 49953, + 38167, + 41096, + 40464, + 67907, + 38764, + 42882, + 39760, + 41628, + 34027, + 33613, + 38821, + 56298, + 45448, + 45244, + 36157, + 37079, + 40635, + 51419, + 34910, + 42361, + 39477, + 40920, + 60008, + 39928, + 43175, + 40680, + 49234, + 37725, + 31512, + 34714, + 44076, + 71270, + 51321, + 48885, + 36070, + 42918, + 34124, + 35111, + 38965, + 37623, + 52955, + 62821, + 46990, + 34898, + 38628, + 47548, + 51648, + 37525, + 41545, + 35226, + 30277, + 54439, + 40667, + 48538, + 43907, + 44624, + 48759, + 33208, + 43679, + 44779, + 39778, + 31133, + 39447, + 45980, + 46265, + 39962, + 37260, + 54483, + 39229, + 38922, + 40390, + 46768, + 43562, + 45084, + 46023, + 36659, + 53432, + 43247, + 44396, + 52896, + 53186, + 43449, + 41221, + 29907, + 35581, + 43504, + 46917, + 42816, + 26129, + 31836, + 61154, + 54895, + 39444, + 40681, + 40041, + 48153, + 41806, + 53170, + 34064, + 37091, + 51894, + 49356, + 47764, + 44590, + 50872, + 42436, + 66766, + 48705, + 34810, + 32458, + 53957, + 46435, + 54624, + 36533, + 48774, + 49510, + 33378, + 38150, + 35983, + 41997, + 32563, + 32695, + 39954, + 49981, + 35872, + 47193, + 31815, + 39763, + 49475, + 29373, + 41340, + 35217, + 29069, + 44433, + 40002, + 44496, + 49957, + 38711, + 41679, + 34443, + 40517, + 26830, + 41420, + 28405, + 37249, + 33003, + 41542, + 43309, + 36263, + 45253, + 51378, + 50699, + 59926, + 40334, + 35075, + 38642, + 32610, + 38405, + 44417, + 41322, + 41670, + 41481, + 43850, + 46822, + 33337, + 39983, + 46033, + 42506, + 37670, + 30130, + 51944, + 45504, + 64615, + 40942, + 36141, + 38245, + 40657, + 32465, + 54396, + 45113, + 43393, + 54532, + 30999, + 40561, + 32384, + 51380, + 51446, + 37631, + 50138, + 30624, + 45180, + 55221, + 36068, + 55485, + 33717, + 38469, + 31772, + 49603, + 38880, + 33440, + 40731, + 43821, + 57889, + 39387, + 51728, + 46135, + 42254, + 34201, + 40196, + 42121, + 43841, + 43313, + 36917, + 40284, + 42567, + 39398, + 37884, + 35954, + 32491, + 35978, + 43017, + 42522, + 37707, + 43542, + 33493, + 42253, + 38482, + 35668, + 45213, + 40942, + 34502, + 33710, + 56641, + 51788, + 41346, + 31944, + 56367, + 33786, + 39564, + 40241, + 28759, + 40500, + 39952, + 38335, + 53759, + 32073, + 40030, + 45344, + 34741, + 40944, + 38036, + 43244, + 61207, + 43720, + 40873, + 34841, + 43222, + 37619, + 43396, + 41553, + 38133, + 33566, + 43260, + 44075, + 35700, + 38333, + 45355, + 35696, + 38322, + 41291, + 41419, + 38683, + 39288, + 55300, + 42343, + 42769, + 44707, + 50400, + 53219, + 38875, + 38780, + 38096, + 53531, + 37382, + 47205, + 38448, + 36176, + 44088, + 47516, + 43046, + 40793, + 38059, + 34393, + 37663, + 40207, + 38756, + 48271, + 41698, + 43658, + 37474, + 47658, + 42499, + 39522, + 45324, + 42646, + 36832, + 30205, + 40837, + 41888, + 39661, + 37503, + 58820, + 37420, + 32764, + 40886, + 38988, + 48189, + 41551, + 54060, + 39752, + 57156, + 28540, + 38266, + 36234, + 43747, + 38055, + 51199, + 49848, + 44138, + 44485, + 31313, + 41329, + 40210, + 36590, + 36098, + 40688, + 43071, + 36296, + 47933, + 32207, + 43871, + 37056, + 48541, + 50827, + 38122, + 54015, + 30719, + 39855, + 34285, + 38365, + 40075, + 36423, + 53366, + 33492, + 42560, + 45563, + 46661, + 32997, + 35261, + 32543, + 62583, + 41957, + 44514, + 39666, + 45961, + 45358, + 74273, + 34964, + 49870, + 47959, + 34716, + 44238, + 55860, + 34941, + 39902, + 38072, + 46631, + 42099, + 42622, + 28559, + 47216, + 38615, + 39278, + 38236, + 37449, + 39700, + 75782, + 39612, + 45736, + 43191, + 49039, + 53673, + 42741, + 33484, + 29640, + 39864, + 45749, + 47580, + 37408, + 50183, + 41220, + 39019, + 42793, + 55667, + 32962, + 50853, + 35851, + 36505, + 35639, + 33560, + 41290, + 31905, + 42837, + 45186, + 48494, + 38635, + 40484, + 38025, + 41712, + 44427, + 50856, + 39073, + 39519, + 51465, + 49241, + 54804, + 33490, + 44106, + 42078, + 33974, + 37691, + 43086, + 39969, + 60560, + 78815, + 40745, + 39694, + 46192, + 46808, + 30452, + 30117, + 43277, + 38447, + 39925, + 40103, + 44932, + 57616, + 36709, + 30878, + 35419, + 33930, + 38093, + 41058, + 38812, + 43982, + 57037, + 34527, + 48161, + 41756, + 43304, + 38315, + 47048, + 48099, + 37763, + 34020, + 40330, + 42400, + 34810, + 59937, + 35306, + 37224, + 37453, + 37803, + 47080, + 42689, + 35507, + 36616, + 46283, + 43857, + 39122, + 28522, + 41450, + 34407, + 26637, + 30277, + 40724, + 33629, + 48560, + 52387, + 49272, + 39235, + 49007, + 30704, + 35025, + 41026, + 41261, + 33543, + 33779, + 35642, + 31879, + 30359, + 48149, + 36310, + 44537, + 43778, + 32076, + 37287, + 33707, + 29364, + 40107, + 46739, + 32690, + 44281, + 47654, + 37984, + 29522, + 32940, + 60522, + 44922, + 31219, + 47015, + 31893, + 45536, + 35948, + 36518, + 44063, + 40102, + 31353, + 39434, + 38325, + 36390, + 42029, + 55227, + 40047, + 29364, + 39429, + 34610, + 37631, + 66978, + 33102, + 34775, + 39635, + 34243, + 38222, + 35467, + 50394, + 36495, + 46102, + 39176, + 35423, + 34158, + 33729, + 53346, + 30506, + 42393, + 33945, + 41355, + 36169, + 42134, + 41146, + 44281, + 42990, + 32340, + 33182, + 52171, + 36520, + 36540, + 35356, + 38047, + 39965, + 45343, + 42553, + 71333, + 36065, + 36523, + 33184, + 39186, + 49626, + 37309, + 39208, + 39153, + 34136, + 37022, + 48904, + 39970, + 52583, + 37958, + 45449, + 38761, + 32228, + 52626, + 36542, + 39069, + 52477, + 43274, + 42351, + 51305, + 38193, + 35261, + 38922, + 45383, + 59322, + 33501, + 49186, + 39342, + 29753, + 43599, + 41167, + 43270, + 55337, + 35548, + 43489, + 43789, + 32286, + 35218, + 35970, + 38397, + 38183, + 41839, + 30556, + 47099, + 36905, + 44004, + 36943, + 32959, + 51494, + 38825, + 34602, + 43833, + 41493, + 50624, + 39639, + 42032, + 38076, + 34284, + 36774, + 30458, + 30286, + 48511, + 62505, + 30320, + 36994, + 39051, + 32339, + 48889, + 38973, + 37197, + 31953, + 51056, + 35466, + 48349, + 36022, + 35035, + 37601, + 33812, + 46371, + 34751, + 37074, + 30703, + 34795, + 38012, + 36580, + 80692, + 58376, + 33085, + 42368, + 59149, + 38099, + 41936, + 29878, + 46649, + 42905, + 47066, + 39092, + 43380, + 42425, + 37440, + 40439, + 40256, + 42321, + 41648, + 42379, + 51948, + 41222, + 41858, + 28794, + 36754, + 36893, + 44788, + 47318, + 42067, + 36770, + 34102, + 40360, + 39863, + 35092, + 28610, + 42800, + 34829, + 34482, + 41412, + 42086, + 42262, + 60463, + 30711, + 37755, + 64420, + 35467, + 37248, + 38024, + 37861, + 44368, + 32307, + 55183, + 35104, + 35823, + 36025, + 31860, + 50757, + 32732, + 40215, + 40927, + 43123, + 46550, + 38005, + 36091, + 37867, + 47059, + 35606, + 33451, + 41003, + 48489, + 54948, + 42176, + 47944, + 26410, + 48796, + 42118, + 45627, + 41560, + 35174, + 37964, + 41034, + 44223, + 33922, + 40455, + 41292, + 46615, + 37454, + 41471, + 32578, + 35145, + 47741, + 34332, + 55152, + 39183, + 40893, + 46141, + 35914, + 37589, + 41624, + 46461, + 45603, + 47272, + 36941, + 36300, + 54779, + 35348, + 50333, + 36969, + 50950, + 34619, + 36382, + 32721, + 38603, + 41642, + 46026, + 34582, + 34856, + 31645, + 50425, + 34793, + 57951, + 32068, + 34256, + 57238, + 40969, + 41898, + 39413, + 36294, + 40514, + 35459, + 40196, + 38491, + 39800, + 37525, + 32529, + 39170, + 32747, + 42494, + 37740, + 41739, + 42105, + 51118, + 40718, + 43241, + 30357, + 50300, + 38479, + 38814, + 32256, + 49481, + 36741, + 38256, + 42072, + 39979, + 42974, + 38191, + 36881, + 39299, + 34804, + 49619, + 41658, + 55667, + 38978, + 35914, + 50423, + 36358, + 41827, + 46585, + 44357, + 39860, + 32869, + 41771, + 56477, + 26625, + 45343, + 35834, + 31640, + 36778, + 52187, + 37234, + 36556, + 42581, + 46646, + 39796, + 37587, + 44248, + 35864, + 60451, + 40930, + 38062, + 41027, + 30807, + 37281, + 36087, + 53185, + 40775, + 36033, + 34905, + 36834, + 58454, + 47361, + 28060, + 53057, + 34156, + 34397, + 42433, + 63273, + 43823, + 41073, + 38425, + 42883, + 36813, + 44859, + 46812, + 48358, + 50302, + 35552, + 43937, + 39072, + 40238, + 44563, + 42395, + 38552, + 44675, + 34610, + 43550, + 41480, + 45793, + 44272, + 47186, + 34170, + 46478, + 33543, + 31423, + 33246, + 32154, + 40355, + 42077, + 37645, + 57229, + 50186, + 30590, + 46420, + 53952, + 56998, + 32802, + 50349, + 38116, + 32014, + 29708, + 36077, + 32887, + 42540, + 40308, + 28753, + 35179, + 47924, + 36027, + 42233, + 28917, + 31431, + 35218, + 34190, + 35134, + 37519, + 39812, + 37600, + 48931, + 65422, + 30051, + 31238, + 36794, + 32548, + 37077, + 50571, + 42211, + 31091, + 38848, + 31944, + 43128, + 36050, + 35109, + 41380, + 33889, + 41639, + 43393, + 32655, + 45887, + 43216, + 36157, + 34106, + 36870, + 38649, + 47529, + 37993, + 37052, + 37960, + 38080, + 53555, + 36064, + 46492, + 47401, + 49820, + 38272, + 42531, + 49465, + 48000, + 40870, + 53902, + 40815, + 36339, + 48849, + 39377 + ] + }, + { + "counters": [ + 35785, + 43274, + 43991, + 38074, + 45279, + 45008, + 43688, + 42093, + 49371, + 40657, + 42675, + 36001, + 49818, + 37820, + 42518, + 54358, + 32689, + 57867, + 39058, + 53727, + 46495, + 40266, + 52292, + 46010, + 39963, + 29923, + 47721, + 34374, + 40475, + 33651, + 34308, + 56136, + 31123, + 49915, + 38208, + 38199, + 30800, + 43859, + 35905, + 40960, + 39460, + 49196, + 44931, + 46266, + 52269, + 40538, + 40320, + 44379, + 44252, + 34525, + 52315, + 47685, + 69700, + 39073, + 38771, + 31904, + 44865, + 30805, + 45202, + 33387, + 37475, + 38219, + 48128, + 42233, + 38302, + 48447, + 35650, + 50116, + 36461, + 36948, + 45280, + 40762, + 49785, + 38156, + 39737, + 41476, + 38331, + 51993, + 35046, + 42179, + 28939, + 37978, + 42157, + 79814, + 35673, + 34192, + 40355, + 32576, + 30000, + 48752, + 37007, + 45225, + 46554, + 64005, + 38195, + 43324, + 44250, + 40051, + 43780, + 37524, + 36508, + 60567, + 49237, + 36593, + 44458, + 34718, + 35664, + 54936, + 43474, + 37011, + 45669, + 31616, + 32849, + 38173, + 48515, + 34368, + 41445, + 46289, + 44673, + 36866, + 60698, + 42820, + 37228, + 49929, + 37983, + 43117, + 36993, + 43674, + 32093, + 58362, + 35197, + 56734, + 35827, + 35217, + 34971, + 48583, + 51782, + 50591, + 37275, + 41197, + 54612, + 41361, + 39792, + 53500, + 41035, + 42615, + 36937, + 29576, + 32634, + 40907, + 36203, + 33776, + 32953, + 36492, + 38851, + 61376, + 44488, + 38636, + 34217, + 51094, + 43335, + 37943, + 41095, + 30566, + 43939, + 35858, + 33978, + 34819, + 36544, + 36971, + 42618, + 39080, + 35113, + 37313, + 36481, + 44847, + 38107, + 38515, + 32775, + 40832, + 34609, + 36993, + 43987, + 47422, + 44352, + 40682, + 49880, + 43309, + 35499, + 43905, + 39849, + 36497, + 43636, + 45732, + 32498, + 54160, + 35639, + 37771, + 37362, + 48972, + 39517, + 45346, + 42797, + 39290, + 33930, + 65036, + 40456, + 29102, + 36101, + 36361, + 54977, + 34396, + 42546, + 34327, + 46595, + 59048, + 35395, + 44106, + 48831, + 44531, + 30353, + 36366, + 63753, + 50569, + 36977, + 32187, + 39630, + 39949, + 43889, + 46661, + 40593, + 28520, + 47011, + 66865, + 45650, + 33743, + 36049, + 35718, + 40114, + 47053, + 32462, + 42266, + 44211, + 56510, + 46168, + 46476, + 36144, + 41713, + 38948, + 37181, + 30662, + 36551, + 49817, + 47450, + 63495, + 32138, + 33640, + 37604, + 47434, + 45154, + 45357, + 50807, + 29212, + 39034, + 37033, + 45033, + 35552, + 41224, + 36347, + 37896, + 34765, + 34610, + 29689, + 50284, + 34700, + 33970, + 47416, + 38446, + 49342, + 40594, + 36647, + 48896, + 65079, + 46481, + 39746, + 45239, + 28845, + 30481, + 53442, + 39287, + 42969, + 37751, + 36262, + 46567, + 42540, + 39758, + 35122, + 32148, + 36430, + 42869, + 33722, + 41039, + 31516, + 38698, + 43407, + 36057, + 41873, + 38979, + 32093, + 31491, + 31879, + 35422, + 44990, + 35561, + 56811, + 37526, + 50928, + 36710, + 47819, + 45957, + 39725, + 30645, + 45702, + 37462, + 31104, + 34785, + 37914, + 35774, + 53404, + 33466, + 59362, + 42294, + 46376, + 50802, + 35370, + 47471, + 32225, + 39408, + 38553, + 45051, + 56411, + 37193, + 40386, + 44648, + 43477, + 38684, + 28307, + 39564, + 42207, + 37159, + 51356, + 43595, + 33541, + 55248, + 45042, + 41569, + 30926, + 45171, + 41790, + 58221, + 37652, + 39453, + 33257, + 38920, + 38155, + 41757, + 56470, + 37489, + 36963, + 35324, + 41092, + 44038, + 44095, + 41586, + 34580, + 43029, + 29860, + 34899, + 49758, + 33575, + 36615, + 45907, + 43992, + 39461, + 32228, + 34219, + 42181, + 42307, + 35226, + 45826, + 38403, + 54881, + 54159, + 38429, + 34626, + 35757, + 31469, + 44861, + 53607, + 33482, + 35505, + 46373, + 41589, + 37224, + 42073, + 37902, + 40548, + 36665, + 38899, + 48763, + 37551, + 38708, + 38542, + 40146, + 38086, + 29809, + 42159, + 44212, + 34764, + 37757, + 41629, + 31555, + 45660, + 58990, + 40244, + 43045, + 42453, + 40148, + 50989, + 42177, + 30927, + 50738, + 38776, + 31618, + 32297, + 31344, + 42080, + 44674, + 41414, + 43065, + 43237, + 35781, + 41896, + 52291, + 34403, + 24955, + 53526, + 48656, + 39210, + 32057, + 54665, + 58815, + 37558, + 46213, + 36258, + 33159, + 41343, + 36281, + 43308, + 44129, + 46620, + 46216, + 48123, + 45629, + 45563, + 30716, + 31721, + 42460, + 40194, + 36054, + 34909, + 51176, + 31747, + 36628, + 36534, + 41962, + 38118, + 41894, + 34241, + 32546, + 35840, + 40193, + 54183, + 40512, + 52179, + 35883, + 37130, + 43083, + 35915, + 44954, + 44078, + 34192, + 43555, + 39179, + 46524, + 33742, + 28998, + 40193, + 40459, + 60604, + 55037, + 33462, + 57798, + 35051, + 53496, + 51254, + 43711, + 56863, + 37012, + 35440, + 46794, + 38238, + 32495, + 37849, + 37656, + 38935, + 43195, + 50681, + 35002, + 37182, + 35330, + 53157, + 35069, + 38727, + 49294, + 43960, + 39370, + 41501, + 37478, + 50677, + 41418, + 39933, + 60265, + 34305, + 39146, + 29342, + 42373, + 32808, + 32360, + 36486, + 34172, + 36132, + 50946, + 42619, + 55272, + 54976, + 32810, + 36805, + 36095, + 46211, + 38953, + 41721, + 40239, + 38223, + 68765, + 33567, + 36808, + 40268, + 32434, + 34099, + 33787, + 43590, + 31950, + 34988, + 41959, + 51735, + 57424, + 46328, + 57863, + 46171, + 28656, + 33698, + 35689, + 42799, + 47075, + 31353, + 38352, + 41365, + 34809, + 33958, + 43626, + 36293, + 53963, + 33198, + 32931, + 46353, + 35629, + 39574, + 42316, + 69230, + 33070, + 31820, + 35850, + 35821, + 33737, + 33367, + 34604, + 50116, + 34943, + 40931, + 57876, + 42633, + 45302, + 44878, + 44789, + 35510, + 47315, + 34860, + 47260, + 54798, + 34603, + 41426, + 29772, + 33959, + 35130, + 37135, + 35168, + 30165, + 35868, + 35613, + 35927, + 34614, + 32924, + 40311, + 34927, + 40767, + 34413, + 45655, + 26986, + 29804, + 42850, + 30725, + 38284, + 42992, + 40781, + 35709, + 44331, + 47395, + 46221, + 42154, + 31925, + 27195, + 32822, + 43492, + 44416, + 40596, + 42561, + 38235, + 47069, + 38218, + 39758, + 34186, + 35137, + 36387, + 35743, + 34459, + 42070, + 37232, + 31805, + 38495, + 43177, + 75539, + 43198, + 34109, + 37707, + 35621, + 44792, + 35113, + 33908, + 68681, + 40260, + 37694, + 32949, + 50154, + 35658, + 37424, + 45261, + 38373, + 61038, + 53416, + 51831, + 35939, + 30574, + 57990, + 36793, + 38351, + 62240, + 41958, + 40960, + 29824, + 34299, + 33991, + 29691, + 39047, + 48587, + 41515, + 35580, + 43907, + 33666, + 31816, + 43703, + 41265, + 44170, + 42091, + 46585, + 31591, + 35804, + 35852, + 37261, + 31614, + 48424, + 40270, + 43727, + 42414, + 38854, + 45676, + 29485, + 40019, + 35615, + 42260, + 34372, + 40517, + 40364, + 50732, + 38692, + 45658, + 37535, + 73060, + 35786, + 45578, + 40101, + 37307, + 32709, + 35274, + 28414, + 47509, + 33995, + 38594, + 36044, + 40171, + 34501, + 36607, + 43026, + 47332, + 42524, + 34198, + 36155, + 37176, + 54551, + 41448, + 38372, + 54681, + 47089, + 54870, + 31715, + 39689, + 44937, + 38561, + 35128, + 40403, + 39951, + 46474, + 49443, + 48207, + 39035, + 46480, + 33540, + 59177, + 41138, + 47642, + 35074, + 38982, + 37757, + 44331, + 42636, + 34958, + 53936, + 30662, + 40410, + 64178, + 41824, + 39078, + 36326, + 53544, + 36421, + 45848, + 57577, + 38952, + 40779, + 36680, + 39072, + 43741, + 44526, + 37718, + 36131, + 39398, + 35177, + 52607, + 43771, + 43700, + 42341, + 37980, + 43668, + 45445, + 38018, + 31171, + 60111, + 38173, + 54089, + 35768, + 77204, + 32065, + 42850, + 34323, + 40674, + 35279, + 51154, + 42847, + 31368, + 40170, + 42655, + 34280, + 34224, + 42692, + 51773, + 31603, + 47514, + 56571, + 32015, + 31811, + 43565, + 39209, + 36276, + 33360, + 43894, + 43345, + 36605, + 46749, + 40084, + 34488, + 48892, + 32480, + 29621, + 56300, + 39302, + 43913, + 40392, + 40122, + 44018, + 28339, + 37515, + 33716, + 34453, + 38643, + 35154, + 45640, + 38682, + 43726, + 41730, + 30770, + 36990, + 43224, + 28435, + 38599, + 52953, + 42702, + 47207, + 36872, + 34661, + 43726, + 41873, + 53284, + 32599, + 38065, + 40759, + 39668, + 56245, + 45617, + 39205, + 38193, + 42359, + 39878, + 40049, + 40916, + 52141, + 38247, + 48784, + 43320, + 34274, + 34473, + 50405, + 40774, + 37162, + 39949, + 29438, + 54437, + 53424, + 36469, + 46564, + 36635, + 44033, + 35376, + 49813, + 37227, + 32471, + 45515, + 36172, + 33080, + 46014, + 42407, + 39349, + 37525, + 59187, + 58995, + 39563, + 39494, + 43299, + 46501, + 35376, + 37348, + 31795, + 40967, + 38461, + 41840, + 41156, + 31514, + 42980, + 35133, + 39540, + 51128, + 53935, + 36900, + 49270, + 40237, + 38275, + 40657, + 47098, + 34307, + 38022, + 26870, + 51805, + 50723, + 49062, + 50197, + 35887, + 46617, + 35506, + 42182, + 39283, + 37390, + 39461, + 32678, + 42802, + 45856, + 32108, + 40675, + 38872, + 33564, + 54310, + 45679, + 36944, + 35155, + 41531, + 33478, + 48693, + 46095, + 29958, + 41024, + 33355, + 41819, + 41521, + 33263, + 41947, + 36614, + 39651, + 42612, + 35848, + 38095, + 43468, + 36927, + 39346, + 46131, + 51515, + 32308, + 38250, + 47210, + 31035, + 40519, + 43768, + 40874, + 38729, + 57764, + 34072, + 32094, + 35694, + 31978, + 55210, + 35142, + 32021, + 48123, + 39253, + 46204, + 30321, + 48364, + 38025, + 43332, + 34722, + 43298, + 50707, + 39696, + 30791, + 59567, + 38349, + 46009, + 47444, + 37668, + 41209, + 49569, + 37429, + 40170, + 34458, + 38167, + 34025, + 42771, + 48657, + 36968, + 36487, + 42355, + 34362, + 37684, + 48356, + 45324, + 39600, + 48972, + 35281, + 32518, + 56716, + 41607, + 50344, + 42104, + 40261, + 39515, + 64260, + 37732, + 42642, + 43011, + 39354, + 35193, + 37337, + 56309, + 37064, + 41028, + 32439, + 34985, + 29765, + 62726, + 41311, + 41076, + 30514, + 31113, + 42528, + 28054, + 53649, + 40070, + 33351, + 36060, + 34821, + 44843, + 67195, + 41539, + 39307, + 33156, + 42749, + 29680, + 38362, + 37442, + 47195, + 49408, + 44068, + 47150, + 51603, + 57970, + 32731, + 38132, + 37601, + 41192, + 33743, + 43924, + 40731, + 42633, + 40702, + 55312, + 46601, + 42824, + 43987, + 46950, + 38850, + 50199, + 49561, + 47239, + 46900, + 38456, + 57314, + 39339, + 49425, + 40942, + 31160, + 36048, + 42987, + 39431, + 44292, + 31963, + 52080, + 34845, + 37725, + 25328, + 33897, + 33563, + 28310, + 35996, + 53732, + 41025, + 37507, + 40945, + 37216, + 41219, + 30489, + 33661, + 37123, + 67131, + 33392, + 47483, + 34322, + 32768, + 42152, + 48887, + 36824, + 41857, + 49323, + 34217, + 45879, + 37196, + 54483, + 27832, + 51367, + 31288, + 52563, + 50469, + 30130, + 43938, + 51450, + 35049, + 49308, + 61365, + 66769, + 49487, + 46512, + 60386, + 36620, + 39857, + 42357, + 35231, + 36897, + 50607, + 45607, + 41248, + 51161, + 42819, + 35231, + 42345, + 26105, + 36810, + 39069, + 57370, + 48265, + 50023, + 40803, + 41542, + 40659, + 34002, + 46153, + 37358, + 35223, + 31551, + 36117, + 51024, + 37972, + 44331, + 35720, + 33149, + 39583, + 38381, + 33643, + 47334, + 34438, + 36299, + 31785, + 35878, + 51360, + 45112, + 44335, + 31329, + 42375, + 39147, + 34734, + 31689, + 46312, + 48846, + 29954, + 29176, + 44764, + 40443, + 35538, + 47161, + 69091, + 46584, + 40801, + 36053, + 44552, + 38802, + 46417, + 48703, + 46250, + 43349, + 33376, + 39356, + 34710, + 39202, + 48882, + 62002, + 40513, + 33334, + 38124, + 60892, + 47053, + 32868, + 36715, + 55423, + 44619, + 66574, + 46050, + 46647, + 49075, + 37722, + 41710, + 32717, + 39379, + 43683, + 40955, + 39882, + 45310, + 42382, + 41419, + 36956, + 56881, + 42856, + 48484, + 47939, + 31660, + 24281, + 46504, + 32152, + 42715, + 38687, + 35239, + 35258, + 44090, + 37424, + 45993, + 34723, + 36312, + 42992, + 32277, + 35446, + 49039, + 37599, + 43791, + 31660, + 31951, + 45724, + 36781, + 42839, + 37898, + 56254, + 42012, + 36094, + 33958, + 55776, + 32834, + 40054, + 42769, + 49866, + 47187, + 45396, + 29277, + 50548, + 39815, + 39132, + 34552, + 40153, + 51515, + 31328, + 39942, + 39002, + 43928, + 45873, + 42881, + 43357, + 35297, + 34661, + 36452, + 52908, + 34383, + 41480, + 49355, + 36871, + 34625, + 39741, + 40389, + 37044, + 32820, + 63907, + 39568, + 44005, + 28173, + 44210, + 31219, + 39794, + 47924, + 44331, + 42151, + 43344, + 40883, + 39595, + 45930, + 34378, + 36537, + 76177, + 39298, + 51886, + 40185, + 42257, + 40731, + 41564, + 66515, + 28648, + 41837, + 44689, + 31228, + 52606, + 36077, + 37676, + 31406, + 46904, + 36316, + 29755, + 44986, + 36841, + 39949, + 36787, + 48191, + 30809, + 44422, + 39160, + 47445, + 43040, + 37515, + 29284, + 34622, + 43097, + 45404, + 42884, + 49628, + 34951, + 32795, + 35118, + 43112, + 41289, + 32383, + 34203, + 40286, + 35203, + 34785, + 41743, + 46358, + 42536, + 35266, + 33821, + 36027, + 47118, + 34451, + 35616, + 44745, + 34894, + 49879, + 43798, + 56488, + 46948, + 42746, + 31792, + 46113, + 48266, + 45485, + 47408, + 36618, + 25079, + 49955, + 33269, + 39437, + 38306, + 43524, + 83303, + 37904, + 31094, + 36997, + 50173, + 35854, + 33093, + 36810, + 49743, + 48821, + 40851, + 41565, + 41593, + 32402, + 37940, + 49196, + 33840, + 36473, + 34005, + 33281, + 39367, + 40863, + 38722, + 35826, + 52605, + 40227, + 48589, + 52466, + 38880, + 44272, + 29112, + 39082, + 41528, + 48899, + 43828, + 40750, + 32457, + 39555, + 30836, + 84290, + 40695, + 44200, + 36522, + 53730, + 31309, + 52255, + 37347, + 43398, + 41070, + 30884, + 38790, + 42374, + 40277, + 35028, + 67718, + 40044, + 53724, + 38735, + 43295, + 30745, + 42797, + 43363, + 44302, + 41975, + 44103, + 34955, + 34186, + 41015, + 36855, + 68658, + 34574, + 39789, + 38203, + 35575, + 32457, + 58860, + 38682, + 30748, + 37746, + 32349, + 34542, + 44107, + 34166, + 31608, + 37278, + 37697, + 36263, + 49234, + 41448, + 34816, + 46315, + 36862, + 49208, + 41394, + 43928, + 42242, + 48105, + 40496, + 43594, + 38201, + 45854, + 46772, + 32433, + 40270, + 31644, + 39694, + 36270, + 42597, + 34348, + 38074, + 56153, + 36734, + 32730, + 34714, + 37658, + 54912, + 33835, + 31491, + 35268, + 39496, + 38045, + 51502, + 48412, + 40448, + 39649, + 41241, + 35150, + 29833, + 32390, + 41667, + 38291, + 55778, + 30163, + 46555, + 38504, + 39746, + 43385, + 48234, + 33509, + 35669, + 67839, + 42609, + 34866, + 49592, + 51803, + 33427, + 54050, + 36603, + 34729, + 47751, + 44043, + 37586, + 58568, + 50790, + 42975, + 48647, + 51275, + 47594, + 32573, + 38820, + 40575, + 36895, + 49294, + 35460, + 48740, + 35040, + 56737, + 30733, + 33031, + 54839, + 46385, + 33954, + 37887, + 59213, + 35348, + 54821, + 35386, + 47150, + 48896, + 41332, + 42160, + 34457, + 37386, + 37651, + 37617, + 41125, + 41552, + 30732, + 46328, + 38115, + 48487, + 51901, + 52135, + 36499, + 34901, + 33370, + 40543, + 50361, + 45236, + 35445, + 58402, + 43748, + 31645, + 29351, + 37293, + 38593, + 40511, + 47386, + 35093, + 52559, + 29480, + 47543, + 39789, + 57179, + 42211, + 50626, + 34573, + 42858, + 43042, + 44008, + 35403, + 38000, + 41917, + 49292, + 41607, + 39083, + 31945, + 44896, + 46230, + 45309, + 36313, + 33665, + 46145, + 43075, + 47931, + 26435, + 34454, + 34563, + 43851, + 50543, + 56244, + 32881, + 36407, + 43479, + 32013, + 40531, + 47353, + 69088, + 44976, + 41426, + 43470, + 49226, + 41789, + 36528, + 48685, + 38920, + 38486, + 36065, + 43768, + 47046, + 35280, + 36515, + 40385, + 38878, + 55317, + 41845, + 32554, + 43906, + 36826, + 51556, + 30732, + 33739, + 42372, + 38138, + 45098, + 31017, + 41391, + 64005, + 45992, + 40846, + 60680, + 33755, + 42025, + 46846, + 32912, + 42513, + 42588, + 35942, + 39463, + 30180, + 40138, + 50829, + 34447, + 53856, + 41347, + 37377, + 49198, + 57251, + 38025, + 42111, + 37877, + 39771, + 35339, + 55826, + 30604, + 34856, + 32491, + 34313, + 32895, + 55256, + 28631, + 32811, + 38219, + 37955, + 51695, + 36986, + 41848, + 53638, + 34164, + 33508, + 35405, + 34900, + 45392, + 37969, + 40674, + 38562, + 56721, + 40426, + 50834, + 52862, + 35990, + 42945, + 37395, + 39039, + 38072, + 31319, + 41650, + 50278, + 37308, + 41394, + 35204, + 42609, + 30512, + 29478, + 55765, + 43736, + 36430, + 63545, + 33430, + 31909, + 61248, + 55315, + 32278, + 37884, + 50126, + 50168, + 36946, + 34464, + 37518, + 40876, + 39460, + 33506, + 40763, + 46780, + 43931, + 29287, + 34192, + 43320, + 39044, + 30240, + 36737, + 40726, + 44230, + 37845, + 36402, + 36766, + 35184, + 48421, + 42217, + 55192, + 41003, + 33377, + 41360, + 34722, + 37662, + 33714, + 34490, + 44674, + 39808, + 27344, + 34740, + 37369, + 48654, + 45383, + 32078, + 37496, + 41428, + 34781, + 38445, + 32083, + 34644, + 45631, + 39548, + 49208, + 41766, + 32694, + 40144, + 29312, + 42635, + 33299, + 28235, + 39072, + 43577, + 44018, + 44745, + 64177, + 41033, + 36850, + 47228, + 37136, + 27969, + 48339, + 29986, + 37554, + 50330, + 52510, + 58401, + 33834, + 45459, + 39736, + 60036, + 50065, + 40006, + 35650, + 46062, + 39613, + 32500, + 38871, + 36628, + 50021, + 40979, + 39267, + 56647, + 38981, + 42454, + 43034, + 33115, + 40408, + 59252, + 39144, + 46175, + 70565, + 37945, + 39574, + 44376, + 36233, + 31798, + 41979, + 41802, + 36239, + 48017, + 30966, + 58453, + 35334, + 43676, + 51292, + 54186, + 58061, + 47567, + 49457, + 37703, + 49346, + 39887, + 41090, + 41705, + 36365, + 56003, + 51177, + 51830, + 32873, + 48070, + 38097, + 35686, + 45801, + 46724, + 36677, + 39569, + 52505, + 56578, + 40527, + 36929, + 45883, + 59749, + 40612, + 34466, + 32532, + 38867, + 32058, + 31019, + 49022, + 40945, + 41107, + 31405, + 33662, + 36049, + 45956, + 30533, + 38061, + 58833, + 36998, + 33213, + 49453, + 37591, + 42649, + 31172, + 41670, + 37684, + 44399, + 34615, + 41952, + 32693, + 32879, + 44436, + 35777, + 48059, + 43294, + 40724, + 42331, + 75215, + 37864, + 33645, + 38404, + 35622, + 36908, + 35119, + 31658, + 62710, + 29581, + 37556, + 44329, + 36336, + 39869, + 49173, + 51727, + 61364, + 41270, + 52193, + 36382, + 47535, + 39322, + 37019, + 48600, + 51977, + 58125, + 40461, + 42285, + 41615, + 45196, + 34917, + 42077, + 60501, + 41353, + 44524, + 40815, + 35593, + 36910, + 32223, + 26701, + 55872, + 29325, + 31668, + 34204, + 60836, + 52011, + 40785, + 33874, + 38735, + 50544, + 40754, + 32026, + 32726, + 32319, + 52788, + 56235, + 32741, + 52579, + 37781, + 34450, + 39400, + 59151, + 36503, + 38801, + 37095, + 44872, + 35097, + 38207, + 31095, + 32865, + 46814, + 35407, + 39963, + 36842, + 49630, + 39687, + 30904, + 39851, + 37866, + 29545, + 39644, + 30606, + 47074, + 40395, + 43986, + 39815, + 30313, + 41766, + 37149, + 43678, + 43990, + 48587, + 49913, + 42501, + 31789, + 41579, + 39156, + 32567, + 44662, + 39867, + 44517, + 40178, + 36598, + 42591, + 51547, + 70161, + 43786, + 32671, + 32388 + ] + }, + { + "counters": [ + 37810, + 42645, + 47216, + 35267, + 44707, + 30307, + 42055, + 39158, + 32957, + 46980, + 43216, + 42438, + 39448, + 43647, + 44642, + 42961, + 32469, + 38376, + 29351, + 45351, + 41896, + 38139, + 34897, + 41231, + 44064, + 30867, + 43296, + 43230, + 45848, + 33124, + 41371, + 32397, + 60841, + 52724, + 41529, + 32720, + 36160, + 33729, + 44519, + 44160, + 42489, + 40584, + 40458, + 47997, + 44397, + 36710, + 40389, + 45020, + 35358, + 39949, + 28295, + 51557, + 42123, + 31577, + 36868, + 39648, + 36858, + 42056, + 42581, + 46807, + 48749, + 80745, + 38339, + 38693, + 41050, + 37375, + 34132, + 44696, + 35087, + 46651, + 37204, + 38329, + 44003, + 35169, + 38663, + 31010, + 36177, + 39781, + 62170, + 35743, + 38206, + 48027, + 47658, + 42033, + 45034, + 40166, + 34769, + 48337, + 45808, + 30097, + 28814, + 32272, + 45564, + 36152, + 38320, + 34044, + 35313, + 47951, + 47908, + 38056, + 35025, + 45162, + 47900, + 42936, + 38296, + 45683, + 34776, + 37416, + 50438, + 45812, + 35956, + 39316, + 35933, + 31640, + 49212, + 35110, + 46776, + 43390, + 31496, + 45686, + 39148, + 38585, + 45746, + 41388, + 39626, + 39530, + 36872, + 38645, + 34832, + 35302, + 35995, + 40747, + 26633, + 46335, + 60532, + 30483, + 44903, + 39212, + 40859, + 38154, + 49876, + 40485, + 43139, + 54519, + 51303, + 38367, + 53019, + 33801, + 48064, + 45993, + 46296, + 47162, + 45287, + 36955, + 39544, + 35690, + 54042, + 48477, + 32616, + 45675, + 35265, + 47040, + 38675, + 72795, + 44412, + 34761, + 28440, + 33711, + 41532, + 39545, + 47849, + 33643, + 34992, + 40991, + 47830, + 40039, + 36647, + 46564, + 44040, + 35872, + 49029, + 57379, + 32837, + 34477, + 30906, + 35832, + 34581, + 35595, + 31505, + 38815, + 31424, + 34267, + 41838, + 39195, + 33550, + 52736, + 41539, + 35564, + 41752, + 34569, + 32639, + 52541, + 54073, + 71266, + 33600, + 49934, + 41267, + 36422, + 35005, + 41863, + 36862, + 52514, + 40231, + 33126, + 33134, + 38893, + 32291, + 43836, + 39369, + 40844, + 51859, + 41704, + 45978, + 43950, + 49203, + 47342, + 52140, + 58554, + 34914, + 42914, + 54646, + 49712, + 30891, + 42617, + 38474, + 35765, + 42135, + 50593, + 45896, + 37941, + 35757, + 39339, + 35320, + 42459, + 33185, + 41769, + 42668, + 35900, + 38212, + 34131, + 36295, + 60754, + 31928, + 51849, + 29792, + 41241, + 34639, + 32245, + 33751, + 36779, + 49988, + 38976, + 41072, + 54919, + 48259, + 64831, + 37022, + 60121, + 29531, + 34709, + 38218, + 39491, + 39829, + 41987, + 39242, + 47013, + 48266, + 29264, + 37791, + 35426, + 45309, + 42742, + 45640, + 34529, + 53966, + 34193, + 36847, + 37058, + 39191, + 37236, + 36662, + 34747, + 34960, + 53960, + 36408, + 42822, + 47445, + 53888, + 52022, + 71253, + 43751, + 35955, + 38853, + 34478, + 32631, + 37138, + 54091, + 28267, + 49412, + 41353, + 36156, + 37770, + 41404, + 59133, + 30420, + 39183, + 40760, + 36461, + 41248, + 46590, + 77117, + 53802, + 39853, + 43331, + 36025, + 35616, + 37269, + 38792, + 38774, + 44203, + 35158, + 33811, + 38424, + 40466, + 42409, + 42602, + 33230, + 36013, + 32771, + 38646, + 40450, + 42727, + 36049, + 34941, + 44374, + 40118, + 55643, + 33863, + 28768, + 47681, + 37011, + 34880, + 42706, + 41226, + 59183, + 28052, + 44785, + 51501, + 35012, + 35769, + 60765, + 55841, + 55407, + 40168, + 39109, + 34112, + 44519, + 39220, + 35475, + 38093, + 37136, + 64856, + 51839, + 47833, + 38324, + 45626, + 43507, + 37429, + 35602, + 54304, + 53060, + 40329, + 45397, + 39503, + 32063, + 34544, + 49465, + 30506, + 43505, + 32933, + 36783, + 51892, + 34410, + 31538, + 38775, + 35794, + 34979, + 45423, + 41811, + 41561, + 39528, + 55362, + 42611, + 45336, + 54888, + 31730, + 41475, + 56566, + 35924, + 29043, + 40045, + 55082, + 42729, + 36058, + 34859, + 39529, + 35773, + 51034, + 38259, + 52854, + 40439, + 32872, + 34773, + 53424, + 40822, + 37672, + 32151, + 40835, + 38674, + 38820, + 60486, + 39979, + 44966, + 44134, + 44365, + 38738, + 39594, + 35977, + 30880, + 29528, + 47767, + 40625, + 34571, + 35489, + 31919, + 36563, + 32286, + 56258, + 37166, + 32908, + 55409, + 37697, + 34239, + 37854, + 41689, + 45255, + 38824, + 42562, + 33558, + 47634, + 32706, + 36430, + 51750, + 35469, + 33977, + 49062, + 66664, + 39896, + 40610, + 38426, + 28898, + 35438, + 45979, + 38635, + 34415, + 42343, + 36701, + 35897, + 36022, + 34739, + 45942, + 29396, + 32822, + 45461, + 39987, + 39187, + 36894, + 41141, + 33168, + 50775, + 41649, + 33383, + 30971, + 39283, + 44429, + 29944, + 35990, + 44502, + 43048, + 56201, + 30952, + 42337, + 28787, + 42915, + 42838, + 34617, + 42157, + 40976, + 36317, + 37625, + 56154, + 29419, + 38127, + 30562, + 36318, + 34541, + 45792, + 37078, + 47415, + 37774, + 32908, + 32152, + 39687, + 32672, + 45924, + 39900, + 52852, + 55461, + 32520, + 38325, + 54169, + 41098, + 33769, + 41991, + 39557, + 47780, + 35093, + 38493, + 37219, + 31678, + 50185, + 34849, + 41395, + 43163, + 35278, + 44921, + 55837, + 37481, + 38040, + 60100, + 42562, + 33629, + 42094, + 49644, + 36835, + 59306, + 40680, + 43162, + 43050, + 39428, + 41459, + 41414, + 32700, + 38477, + 47297, + 28284, + 46619, + 40708, + 36315, + 34646, + 45380, + 40506, + 35816, + 44712, + 34361, + 41623, + 39269, + 34214, + 35158, + 30631, + 30980, + 35877, + 33678, + 31452, + 33773, + 36305, + 39824, + 46165, + 33118, + 36383, + 39371, + 45286, + 39744, + 29996, + 40746, + 46163, + 36623, + 37136, + 36293, + 57324, + 50542, + 32695, + 44422, + 39474, + 40796, + 50486, + 37032, + 39061, + 31380, + 51660, + 29279, + 44424, + 39242, + 34902, + 40398, + 45586, + 42626, + 44768, + 53985, + 46787, + 41183, + 54128, + 49446, + 43541, + 42451, + 42302, + 39495, + 42442, + 45206, + 46430, + 36210, + 47387, + 36785, + 37195, + 43609, + 41722, + 61648, + 37893, + 40649, + 36756, + 44785, + 45054, + 41550, + 38478, + 37606, + 39000, + 54873, + 37342, + 40350, + 47121, + 34327, + 38468, + 55115, + 36978, + 48145, + 46118, + 29119, + 35690, + 40016, + 37778, + 36874, + 34588, + 31710, + 39386, + 33495, + 37143, + 34888, + 45697, + 36985, + 44451, + 35466, + 42904, + 34530, + 34838, + 49210, + 38494, + 52071, + 34223, + 33998, + 38201, + 35728, + 41082, + 41197, + 40848, + 42308, + 32276, + 36207, + 52218, + 30391, + 37160, + 33909, + 40633, + 49741, + 34457, + 43632, + 43139, + 39398, + 39367, + 52229, + 37958, + 32666, + 42477, + 34355, + 51979, + 41448, + 66789, + 47983, + 37214, + 38280, + 35921, + 29394, + 28647, + 53021, + 37078, + 35464, + 45756, + 38584, + 36861, + 61082, + 33694, + 36451, + 68847, + 43220, + 42232, + 35692, + 41977, + 51383, + 44155, + 43135, + 38298, + 28998, + 30732, + 34060, + 42317, + 49363, + 33608, + 40908, + 35823, + 43583, + 39030, + 45001, + 46603, + 38061, + 36114, + 37134, + 33775, + 40145, + 47236, + 40372, + 33840, + 55448, + 46613, + 39151, + 39036, + 31691, + 37617, + 62765, + 52004, + 41881, + 41816, + 40486, + 38725, + 36349, + 37903, + 50848, + 39441, + 38091, + 43898, + 41791, + 52472, + 54965, + 37312, + 34920, + 32584, + 36613, + 45518, + 43237, + 31781, + 35166, + 33618, + 31314, + 44858, + 42884, + 49508, + 47354, + 41252, + 28379, + 51217, + 49432, + 45950, + 33012, + 35464, + 82176, + 37741, + 36335, + 44121, + 36217, + 36272, + 58903, + 60765, + 36356, + 35393, + 32508, + 38516, + 39070, + 47572, + 55948, + 39029, + 35378, + 30677, + 39668, + 55083, + 44393, + 42568, + 54124, + 56095, + 49003, + 44085, + 47662, + 38541, + 47384, + 32621, + 33726, + 31574, + 65992, + 39515, + 36635, + 50219, + 37420, + 41816, + 38362, + 34045, + 38732, + 44300, + 39030, + 42301, + 33619, + 32878, + 42536, + 61585, + 58369, + 41405, + 42938, + 46430, + 38858, + 36832, + 40256, + 35730, + 40029, + 46695, + 43758, + 41867, + 53521, + 43865, + 41342, + 39532, + 44382, + 41510, + 30550, + 33447, + 31231, + 41347, + 37894, + 39215, + 43370, + 38659, + 55812, + 45536, + 30267, + 42640, + 40160, + 35909, + 33601, + 41375, + 45555, + 38828, + 36479, + 63064, + 42584, + 33840, + 55512, + 37614, + 45614, + 38379, + 51937, + 33725, + 32248, + 51062, + 40971, + 40482, + 39938, + 39278, + 39545, + 35591, + 57339, + 35528, + 33943, + 36144, + 52197, + 62337, + 38204, + 35858, + 50533, + 35730, + 35198, + 31013, + 49448, + 41766, + 46309, + 45719, + 43189, + 36779, + 32619, + 49184, + 36605, + 32005, + 52492, + 42360, + 45330, + 54340, + 48950, + 64609, + 31143, + 44285, + 42505, + 33480, + 51741, + 59000, + 39655, + 32532, + 50544, + 36389, + 32522, + 37877, + 32567, + 51105, + 41266, + 36542, + 33248, + 47456, + 42347, + 34646, + 52310, + 41737, + 38900, + 34487, + 34562, + 40904, + 31373, + 41672, + 35731, + 38593, + 58366, + 40340, + 39409, + 34872, + 35233, + 43090, + 41468, + 41117, + 72189, + 37583, + 41755, + 32709, + 49161, + 36711, + 35449, + 57794, + 64699, + 41879, + 34344, + 39625, + 35743, + 38670, + 31283, + 30617, + 36052, + 36094, + 45153, + 49760, + 34324, + 38223, + 51612, + 34181, + 36785, + 36862, + 32565, + 43886, + 60707, + 65294, + 57610, + 49017, + 40863, + 50479, + 31407, + 42769, + 44425, + 46071, + 40104, + 41365, + 38438, + 34923, + 44782, + 53745, + 48186, + 33801, + 35008, + 42281, + 51703, + 44825, + 35504, + 41464, + 38325, + 36171, + 33697, + 44589, + 40713, + 48646, + 45797, + 43554, + 41598, + 47898, + 36250, + 42144, + 46731, + 47632, + 33552, + 31817, + 45850, + 39050, + 52276, + 31017, + 39139, + 46830, + 41409, + 45912, + 35755, + 40424, + 41141, + 51715, + 49369, + 38819, + 59749, + 33828, + 34702, + 36192, + 51037, + 46671, + 35483, + 44827, + 41352, + 39959, + 27639, + 37854, + 46380, + 43774, + 32554, + 35428, + 39613, + 35259, + 47583, + 45540, + 38485, + 46949, + 59622, + 44751, + 54853, + 37869, + 35009, + 39186, + 40238, + 42172, + 36300, + 31155, + 37161, + 41214, + 49046, + 40418, + 34744, + 40826, + 40564, + 38220, + 40630, + 36894, + 41784, + 38516, + 42652, + 58966, + 44908, + 32757, + 38633, + 33391, + 32829, + 33816, + 44940, + 36881, + 47973, + 33148, + 50425, + 35638, + 34857, + 58157, + 40950, + 61192, + 38939, + 69660, + 28237, + 50320, + 33350, + 40233, + 48477, + 35381, + 46412, + 44555, + 34929, + 56466, + 39968, + 51769, + 39969, + 49556, + 42364, + 65026, + 33116, + 41255, + 57625, + 39838, + 39233, + 32734, + 42968, + 33775, + 33581, + 40514, + 45650, + 28584, + 37432, + 38702, + 37880, + 32525, + 38690, + 36224, + 45252, + 30506, + 46030, + 40128, + 42258, + 57338, + 55687, + 28703, + 44188, + 42673, + 41465, + 37689, + 27689, + 38692, + 57140, + 40263, + 35304, + 39334, + 42351, + 33663, + 39444, + 60869, + 41371, + 43716, + 36023, + 71833, + 44488, + 31022, + 37162, + 36705, + 47421, + 37348, + 34335, + 29386, + 51041, + 34111, + 39962, + 43577, + 35911, + 45657, + 31458, + 32512, + 30369, + 36877, + 64368, + 42897, + 43844, + 32051, + 47701, + 35774, + 38725, + 48926, + 38841, + 33870, + 40449, + 50691, + 34445, + 54079, + 34838, + 50660, + 34938, + 42550, + 44932, + 48800, + 35973, + 49324, + 40320, + 43185, + 45085, + 41483, + 39665, + 42697, + 37339, + 40283, + 36856, + 30495, + 34625, + 47083, + 40899, + 45455, + 72043, + 39935, + 41288, + 37605, + 32287, + 29343, + 38520, + 37299, + 42670, + 36247, + 34137, + 32507, + 42416, + 37050, + 46299, + 44423, + 40885, + 36522, + 35616, + 42926, + 44294, + 30354, + 32957, + 40244, + 54457, + 42336, + 36368, + 39094, + 42434, + 32577, + 35580, + 40818, + 35814, + 29672, + 28856, + 54177, + 35996, + 34718, + 39091, + 44820, + 42837, + 33849, + 29551, + 44446, + 43848, + 30111, + 48410, + 36082, + 62151, + 39788, + 41653, + 40731, + 34358, + 46575, + 41099, + 33039, + 47842, + 44815, + 39151, + 36714, + 34158, + 39915, + 35628, + 34443, + 46325, + 38778, + 40304, + 32014, + 34930, + 48973, + 53253, + 61464, + 36103, + 45360, + 39112, + 44751, + 35451, + 37066, + 31734, + 40648, + 28435, + 32636, + 34177, + 47260, + 50312, + 42926, + 60517, + 41105, + 27905, + 42468, + 32993, + 34307, + 44118, + 34182, + 48553, + 33482, + 49259, + 36639, + 44584, + 42288, + 43919, + 34125, + 28522, + 37948, + 41737, + 38967, + 44899, + 46752, + 29430, + 38250, + 34458, + 51981, + 35251, + 33389, + 52437, + 32491, + 44474, + 56774, + 35053, + 53305, + 40904, + 41693, + 38460, + 43310, + 31211, + 57734, + 61194, + 31648, + 34090, + 48414, + 43946, + 45399, + 37396, + 43823, + 42265, + 41523, + 31206, + 39462, + 38353, + 42850, + 45642, + 38003, + 35459, + 59048, + 42148, + 43834, + 53108, + 36682, + 40600, + 36592, + 31223, + 31458, + 38548, + 40907, + 35940, + 28307, + 34887, + 34685, + 34022, + 40045, + 48666, + 42963, + 38719, + 39152, + 38161, + 32993, + 33606, + 46927, + 29928, + 34213, + 48060, + 38912, + 38243, + 37568, + 66798, + 35521, + 39196, + 35178, + 40708, + 36931, + 38022, + 33693, + 43873, + 35661, + 55534, + 52766, + 30911, + 39699, + 36157, + 41486, + 55770, + 38127, + 34894, + 45835, + 36285, + 38559, + 35665, + 37648, + 34737, + 35696, + 49580, + 41117, + 36053, + 45312, + 45954, + 31075, + 36689, + 41592, + 35218, + 49669, + 40902, + 52570, + 35160, + 56731, + 35348, + 37136, + 41553, + 39858, + 58005, + 39763, + 34505, + 50801, + 37479, + 36839, + 40956, + 45607, + 35454, + 36741, + 49257, + 61594, + 40389, + 40493, + 32439, + 45089, + 31466, + 43543, + 37148, + 49710, + 40316, + 30882, + 34778, + 47798, + 35361, + 29121, + 45132, + 42292, + 40468, + 49672, + 36458, + 37746, + 36739, + 62018, + 36615, + 47676, + 37344, + 45208, + 37597, + 32750, + 37893, + 35014, + 48830, + 41497, + 31892, + 47831, + 40302, + 31176, + 36217, + 32628, + 39328, + 39487, + 40772, + 41255, + 29632, + 41006, + 46650, + 44654, + 40949, + 47869, + 39534, + 38972, + 31558, + 36023, + 35977, + 45477, + 45893, + 29317, + 57215, + 42510, + 47257, + 36383, + 66030, + 37341, + 41748, + 33964, + 48104, + 45383, + 28276, + 40554, + 36826, + 43220, + 33123, + 45889, + 43367, + 46913, + 49886, + 61958, + 35922, + 29855, + 42842, + 46418, + 38697, + 42884, + 30800, + 34968, + 39850, + 45910, + 48318, + 34590, + 43269, + 41419, + 46653, + 36468, + 38724, + 29932, + 55547, + 39516, + 40070, + 66438, + 36427, + 31553, + 37752, + 36846, + 33269, + 28787, + 33667, + 51611, + 34916, + 50677, + 48665, + 57986, + 52476, + 31843, + 37302, + 50475, + 43440, + 47581, + 36046, + 32280, + 37176, + 32604, + 41828, + 41715, + 44153, + 39376, + 29528, + 37730, + 39608, + 60226, + 48144, + 35357, + 41060, + 48076, + 47799, + 32687, + 34534, + 34066, + 46842, + 47853, + 55777, + 57761, + 38049, + 45280, + 41046, + 46877, + 61266, + 51397, + 32807, + 35030, + 36565, + 31754, + 34403, + 45093, + 69374, + 62049, + 36775, + 36690, + 57070, + 46548, + 40562, + 36244, + 41651, + 52505, + 43350, + 31585, + 36478, + 48493, + 36730, + 44888, + 36561, + 39910, + 36350, + 43565, + 41269, + 52453, + 44447, + 39701, + 38708, + 39398, + 44803, + 48055, + 55690, + 37343, + 58219, + 40962, + 36634, + 31277, + 43330, + 29380, + 43695, + 38274, + 41968, + 50353, + 48255, + 58015, + 46526, + 41546, + 42675, + 45934, + 39141, + 30515, + 46793, + 54529, + 57363, + 32840, + 28391, + 38967, + 34972, + 39318, + 41685, + 33837, + 39478, + 28798, + 38268, + 30234, + 32846, + 34148, + 67650, + 40611, + 41339, + 40095, + 29027, + 38088, + 39561, + 42517, + 60831, + 44424, + 34401, + 30268, + 47316, + 29062, + 35207, + 47594, + 38664, + 54210, + 30781, + 33415, + 45722, + 34649, + 32436, + 33007, + 40658, + 37384, + 37916, + 38044, + 31580, + 48740, + 37984, + 36013, + 42943, + 48586, + 60036, + 41366, + 42636, + 36212, + 40381, + 43419, + 58388, + 42148, + 47292, + 42555, + 42361, + 56821, + 38480, + 40681, + 52464, + 32566, + 30205, + 52090, + 36209, + 47652, + 48186, + 48816, + 42050, + 33366, + 35632, + 76701, + 38449, + 36163, + 42873, + 39109, + 51685, + 72487, + 43024, + 51886, + 38535, + 67319, + 32229, + 53332, + 48064, + 36929, + 41512, + 47568, + 47460, + 30226, + 40825, + 41970, + 70242, + 46510, + 30784, + 32615, + 34022, + 37349, + 50337, + 61854, + 38305, + 43703, + 46813, + 36591, + 32958, + 44411, + 44554, + 42561, + 47931, + 52149, + 59131, + 28379, + 49207, + 61287, + 37248, + 47726, + 33498, + 38218, + 46286, + 34624, + 59389, + 39073, + 40017, + 33444, + 36638, + 40117, + 58726, + 40514, + 52544, + 42261, + 33883, + 46798, + 42685, + 38015, + 46484, + 32169, + 34292, + 49270, + 40815, + 33985, + 37800, + 43211, + 32581, + 44657, + 46070, + 39996, + 40566, + 41280, + 41006, + 37368, + 41200, + 42797, + 40532, + 51530, + 34819, + 56993, + 41266, + 38391, + 40321, + 39243, + 34879, + 36756, + 31421, + 63298, + 51878, + 46596, + 37911, + 42179, + 38106, + 32026, + 48384, + 43019, + 42244, + 40778, + 42984, + 35891, + 34635, + 56707, + 32644, + 29292, + 34921, + 23752, + 53968, + 33436, + 45121, + 46703, + 43264, + 34035, + 31979, + 49613, + 28229, + 50535, + 30041, + 28732, + 40736, + 54710, + 38081, + 36751, + 37936, + 42423, + 34942, + 39453, + 33233, + 34145, + 58793, + 33035, + 43717, + 34254, + 43683, + 30790, + 37334, + 44467, + 41144, + 38523, + 35452, + 35853, + 29657, + 45635, + 30140, + 50897, + 34932, + 43018, + 31722, + 58172, + 36403, + 53597, + 33530, + 33753, + 45474, + 37378, + 42303, + 41526, + 45894, + 36014, + 42119, + 39178, + 42358, + 59763, + 40040, + 36416, + 40016, + 59961, + 41563, + 33798, + 46529, + 41549, + 39434, + 41388, + 53169, + 58088, + 31554, + 65852, + 45748, + 30832, + 46772, + 40653, + 35677, + 42343, + 42666, + 31567, + 32207, + 39047, + 37363, + 37951, + 37792, + 35850, + 50997, + 34115, + 36532, + 42290, + 32226, + 40635, + 40728, + 41638, + 43161, + 40697, + 37159, + 42463, + 36772, + 44555, + 45608, + 40691, + 37575, + 44475, + 29750, + 67995, + 38219, + 42966, + 29235, + 31253, + 32631, + 40418, + 35962, + 64639, + 28719, + 48791, + 38596, + 44654, + 32194, + 32112, + 32352, + 49144, + 31913, + 40162, + 43136, + 50967, + 31748, + 33610, + 45607, + 37225, + 45293, + 31415, + 46653, + 44983, + 37122, + 35090, + 42881, + 36443, + 41237, + 35674, + 50717, + 33417, + 77848, + 36642, + 31855, + 49052, + 36995, + 51347, + 42031, + 37852, + 39962, + 37216, + 44239, + 30735, + 45232, + 34094, + 37290, + 34537, + 36705, + 44759, + 43680, + 31676, + 41752, + 31797, + 37645, + 37433, + 40134, + 46335, + 46878, + 47958, + 40806, + 38262, + 30368, + 32348, + 37823, + 52879, + 37572, + 70824, + 46105, + 54151, + 55773, + 35561, + 36014, + 42263, + 38861, + 42328, + 36701, + 51625, + 39995, + 46336, + 40429, + 36020, + 37553, + 31749, + 42350, + 50567, + 43727, + 33285, + 48609, + 34916, + 37090, + 36159, + 50904, + 44824, + 42087, + 43911, + 35032, + 58547, + 41979, + 37219, + 38963, + 53451, + 38088, + 33489 + ] + }, + { + "counters": [ + 45582, + 37333, + 40758, + 41191, + 39331, + 41530, + 47169, + 34591, + 34779, + 41716, + 42607, + 42954, + 37337, + 31736, + 36492, + 42521, + 37019, + 38921, + 31362, + 44251, + 40345, + 40173, + 37895, + 34111, + 40002, + 33245, + 31421, + 41730, + 37657, + 45698, + 37530, + 44836, + 35221, + 39205, + 36308, + 37752, + 39544, + 36796, + 35571, + 38769, + 40687, + 41154, + 40308, + 41459, + 40998, + 50445, + 61044, + 31007, + 43956, + 33373, + 52664, + 37108, + 31789, + 47286, + 39541, + 33736, + 36305, + 35156, + 45571, + 36082, + 37275, + 43802, + 32940, + 33139, + 46509, + 40233, + 30351, + 39171, + 40085, + 42624, + 40396, + 52736, + 34893, + 38567, + 29791, + 49858, + 48841, + 47524, + 45705, + 44240, + 36002, + 29577, + 36808, + 44032, + 29354, + 41666, + 55564, + 40950, + 49732, + 40343, + 35911, + 40383, + 38869, + 39374, + 29247, + 44046, + 24883, + 46313, + 32071, + 52150, + 39782, + 37556, + 37146, + 35012, + 32703, + 42268, + 40904, + 33550, + 31846, + 31967, + 42582, + 43619, + 40811, + 42508, + 75269, + 38511, + 45513, + 35498, + 53945, + 39299, + 42151, + 43735, + 39372, + 39422, + 31906, + 38822, + 44442, + 41907, + 32519, + 38887, + 31196, + 37901, + 42675, + 53487, + 42151, + 34331, + 45830, + 36091, + 35680, + 41130, + 33880, + 41360, + 39508, + 44118, + 45575, + 41931, + 45641, + 39059, + 62041, + 31644, + 58798, + 39588, + 37264, + 37219, + 47331, + 38395, + 50381, + 36853, + 59261, + 40719, + 34772, + 32201, + 38056, + 57469, + 35882, + 47613, + 47087, + 50772, + 42537, + 33118, + 40487, + 45102, + 31725, + 34815, + 58826, + 30318, + 34628, + 46403, + 40497, + 40769, + 35297, + 37182, + 39650, + 30848, + 41071, + 52762, + 43272, + 38605, + 51437, + 36334, + 29421, + 38262, + 37516, + 34597, + 45343, + 43928, + 37964, + 31016, + 28585, + 44100, + 49982, + 35487, + 40885, + 42071, + 42108, + 39287, + 34342, + 55355, + 50693, + 31789, + 40513, + 37899, + 27796, + 33718, + 31732, + 40681, + 53761, + 45082, + 45951, + 35987, + 46505, + 65912, + 42255, + 38890, + 43707, + 34080, + 34110, + 36164, + 55615, + 41418, + 31845, + 47733, + 31484, + 63257, + 54903, + 40529, + 48227, + 42672, + 41254, + 40028, + 32986, + 51170, + 57629, + 42626, + 34263, + 34595, + 48986, + 40423, + 38534, + 46678, + 34084, + 33637, + 28980, + 37440, + 43407, + 43584, + 51494, + 44987, + 72366, + 36386, + 33526, + 42802, + 41684, + 35313, + 40452, + 37920, + 30616, + 32899, + 32850, + 40618, + 37747, + 46055, + 37450, + 44362, + 35285, + 45804, + 41555, + 37031, + 42606, + 36875, + 34096, + 46365, + 44393, + 33947, + 36436, + 34983, + 48578, + 40572, + 36559, + 33581, + 27847, + 38904, + 49246, + 46276, + 59150, + 35256, + 33349, + 38811, + 34930, + 41109, + 28816, + 29661, + 40536, + 40654, + 31468, + 32606, + 36296, + 33351, + 46929, + 42275, + 29726, + 35232, + 41693, + 51535, + 52717, + 45270, + 36778, + 34280, + 42077, + 34384, + 45244, + 43517, + 44056, + 40519, + 34635, + 41979, + 31039, + 35061, + 40081, + 37097, + 37373, + 50895, + 44864, + 51979, + 41648, + 34173, + 39011, + 33944, + 32916, + 43644, + 42673, + 31074, + 39438, + 37607, + 51213, + 44481, + 34791, + 44022, + 36766, + 41705, + 40515, + 42469, + 45507, + 33257, + 31946, + 38201, + 34388, + 34154, + 47331, + 41335, + 41346, + 31979, + 43882, + 36741, + 37748, + 35817, + 38153, + 45545, + 36702, + 36774, + 57557, + 67531, + 48828, + 41394, + 49530, + 29549, + 44080, + 37162, + 47608, + 57649, + 48445, + 39267, + 40283, + 42057, + 46677, + 32153, + 45484, + 36373, + 31599, + 43145, + 55347, + 37908, + 33244, + 41381, + 41585, + 37905, + 38682, + 48535, + 55721, + 38340, + 40091, + 31666, + 39505, + 34962, + 47586, + 59105, + 44328, + 40255, + 40607, + 46582, + 48169, + 41498, + 42321, + 59188, + 35032, + 42466, + 46847, + 34808, + 38663, + 64684, + 34777, + 47849, + 43155, + 38230, + 35892, + 40786, + 62019, + 60184, + 34220, + 44651, + 30390, + 30235, + 60184, + 42884, + 50727, + 43073, + 42502, + 36398, + 51786, + 41262, + 37678, + 28783, + 50036, + 39154, + 35830, + 44377, + 65761, + 37881, + 45965, + 53963, + 35492, + 35093, + 37536, + 34285, + 35963, + 32484, + 46409, + 44988, + 41830, + 36525, + 45073, + 36666, + 56294, + 33844, + 35333, + 48562, + 44591, + 43499, + 44230, + 63794, + 34001, + 38176, + 38379, + 50923, + 48044, + 49316, + 53401, + 37682, + 40921, + 41103, + 38822, + 39222, + 41608, + 35372, + 58399, + 43209, + 39826, + 25113, + 35165, + 50350, + 57921, + 52178, + 32296, + 42352, + 32045, + 57286, + 47236, + 32262, + 32538, + 46220, + 45209, + 40366, + 37351, + 39860, + 48090, + 34714, + 57384, + 33611, + 27278, + 42695, + 27960, + 37893, + 36253, + 43209, + 41614, + 34220, + 40466, + 42305, + 28980, + 30978, + 47462, + 42365, + 33631, + 38094, + 31819, + 42998, + 30168, + 39098, + 40671, + 37080, + 47044, + 50562, + 41273, + 45405, + 56679, + 43243, + 52303, + 39995, + 34763, + 42097, + 41286, + 31758, + 34786, + 43549, + 40787, + 34759, + 36967, + 41785, + 46052, + 27666, + 31575, + 37021, + 57492, + 51754, + 45031, + 43903, + 47825, + 47308, + 37182, + 43581, + 51264, + 35342, + 35930, + 28396, + 36448, + 43124, + 51646, + 38268, + 34265, + 36876, + 41800, + 50206, + 60878, + 43744, + 49409, + 38222, + 28721, + 39752, + 34287, + 57862, + 32732, + 69575, + 47728, + 56153, + 49143, + 45625, + 44947, + 42211, + 39780, + 55443, + 39642, + 34857, + 52645, + 31402, + 52144, + 50007, + 46636, + 42110, + 31992, + 44339, + 41952, + 44838, + 36130, + 33349, + 38359, + 32077, + 43956, + 40878, + 38972, + 37446, + 37228, + 44312, + 39482, + 34457, + 29299, + 39703, + 78442, + 49296, + 39752, + 36386, + 38776, + 46451, + 34690, + 35028, + 37563, + 37884, + 57872, + 67127, + 42633, + 37010, + 39854, + 36411, + 37369, + 52534, + 30204, + 55839, + 34878, + 44196, + 38845, + 37167, + 42138, + 41765, + 45418, + 41014, + 48708, + 50617, + 30016, + 46093, + 48138, + 42682, + 39246, + 37400, + 39313, + 44166, + 55295, + 37481, + 37362, + 35928, + 33170, + 52870, + 33360, + 44300, + 40210, + 40802, + 46353, + 67738, + 35715, + 44829, + 52677, + 32967, + 47182, + 29068, + 50155, + 33723, + 41810, + 40220, + 76419, + 32825, + 52208, + 64886, + 62025, + 42226, + 44729, + 37312, + 38174, + 51000, + 31593, + 42436, + 50129, + 82794, + 31517, + 51638, + 31680, + 36573, + 55762, + 59898, + 56611, + 35138, + 36072, + 42169, + 42707, + 46817, + 36046, + 35870, + 44139, + 40344, + 37855, + 41133, + 46121, + 37234, + 51493, + 42685, + 39925, + 42743, + 41402, + 38405, + 34256, + 32893, + 43135, + 40574, + 40824, + 37539, + 56470, + 37701, + 52935, + 42333, + 40588, + 35285, + 43437, + 38882, + 33326, + 38230, + 39422, + 75026, + 35855, + 35703, + 64014, + 47164, + 37066, + 50343, + 42576, + 45279, + 37483, + 52575, + 27946, + 41812, + 37759, + 37807, + 40564, + 58607, + 34212, + 58900, + 36027, + 49562, + 51506, + 56236, + 41685, + 38982, + 44424, + 38252, + 36660, + 36196, + 34317, + 35413, + 71810, + 37706, + 51445, + 43723, + 34241, + 41087, + 30333, + 35933, + 34464, + 44279, + 34341, + 58659, + 38161, + 56456, + 31960, + 38115, + 57549, + 39826, + 32621, + 37924, + 42833, + 37866, + 36317, + 38157, + 33666, + 66569, + 48385, + 46439, + 37793, + 39532, + 31618, + 37153, + 41549, + 42810, + 61073, + 37019, + 54245, + 46912, + 33635, + 42338, + 34549, + 63107, + 32715, + 46140, + 34620, + 46601, + 47662, + 52541, + 43408, + 36087, + 38064, + 33276, + 38906, + 35743, + 43268, + 47100, + 46845, + 36306, + 31822, + 46712, + 43010, + 40497, + 52493, + 40652, + 46484, + 35967, + 43503, + 38194, + 34382, + 40867, + 65294, + 29447, + 32717, + 35773, + 43764, + 54459, + 35056, + 36049, + 39289, + 47306, + 36387, + 41353, + 40755, + 44181, + 40340, + 33944, + 36644, + 51557, + 45175, + 48237, + 47995, + 48357, + 38396, + 57703, + 38004, + 59696, + 35965, + 39528, + 35644, + 41176, + 40169, + 51816, + 36251, + 34687, + 38682, + 38838, + 38895, + 36025, + 49686, + 41622, + 60326, + 36755, + 36798, + 41242, + 53699, + 36485, + 74864, + 33639, + 34894, + 51558, + 57965, + 42165, + 56281, + 43447, + 72990, + 51237, + 36215, + 50323, + 31834, + 45574, + 36807, + 47282, + 43133, + 32997, + 33656, + 34319, + 56973, + 41747, + 41612, + 37811, + 34744, + 32125, + 42543, + 34733, + 37198, + 34764, + 39542, + 39227, + 34552, + 37208, + 33513, + 35975, + 42231, + 42001, + 27656, + 31170, + 41297, + 41737, + 25812, + 40949, + 37287, + 39030, + 49919, + 35442, + 41624, + 33384, + 28403, + 79398, + 35649, + 28828, + 33888, + 33766, + 36344, + 37904, + 41232, + 29959, + 41477, + 28924, + 51553, + 35412, + 71970, + 50429, + 33534, + 65417, + 44484, + 27277, + 29794, + 43313, + 54346, + 38201, + 30213, + 48800, + 32066, + 39316, + 38055, + 42790, + 32439, + 51356, + 24507, + 52429, + 38611, + 39852, + 30409, + 36926, + 42780, + 45198, + 46162, + 33955, + 57768, + 33895, + 45735, + 44889, + 43536, + 37417, + 39980, + 40070, + 42279, + 38682, + 33194, + 47899, + 39621, + 44652, + 47988, + 59053, + 42031, + 37434, + 59219, + 40619, + 36732, + 46855, + 59533, + 32883, + 43863, + 39742, + 40062, + 40163, + 50086, + 40672, + 38664, + 34120, + 40955, + 35142, + 53280, + 30917, + 38983, + 38074, + 39007, + 48262, + 47320, + 46696, + 40391, + 45668, + 38960, + 33021, + 47208, + 39062, + 44984, + 34219, + 37177, + 55663, + 41667, + 35204, + 34661, + 37552, + 38802, + 36626, + 38475, + 44013, + 45046, + 44294, + 41115, + 50824, + 47055, + 32576, + 49022, + 63615, + 34990, + 35384, + 37699, + 32325, + 36414, + 29499, + 32343, + 38123, + 53159, + 42921, + 33397, + 36213, + 40962, + 33890, + 29805, + 49660, + 31404, + 42004, + 47557, + 35125, + 56707, + 53498, + 30669, + 42966, + 40197, + 32209, + 49247, + 42110, + 39240, + 52893, + 34928, + 39286, + 40701, + 31679, + 42415, + 41766, + 57094, + 32394, + 40489, + 35477, + 40971, + 38679, + 42533, + 33403, + 41415, + 44177, + 35939, + 58181, + 42829, + 35358, + 44000, + 58152, + 33223, + 39754, + 46012, + 36486, + 38494, + 36174, + 49530, + 41471, + 45858, + 54050, + 42377, + 47904, + 47366, + 37480, + 38627, + 31398, + 39907, + 41169, + 48011, + 41815, + 44575, + 36177, + 32694, + 40635, + 45644, + 49467, + 35414, + 52249, + 47332, + 42937, + 42442, + 57349, + 37364, + 34225, + 37446, + 57336, + 29639, + 41257, + 55746, + 53954, + 33280, + 42635, + 46352, + 34004, + 43123, + 32605, + 40680, + 36830, + 29530, + 40197, + 47734, + 47876, + 48372, + 40878, + 54758, + 37259, + 53531, + 39128, + 43250, + 47302, + 38695, + 45077, + 58557, + 44059, + 38657, + 33642, + 47755, + 72163, + 37109, + 33951, + 50171, + 32815, + 33078, + 41812, + 48867, + 31871, + 42217, + 55574, + 46271, + 33305, + 29469, + 38670, + 35045, + 34443, + 42264, + 41494, + 41900, + 55354, + 38051, + 36486, + 29945, + 43758, + 31825, + 62406, + 38995, + 42871, + 35895, + 41715, + 33126, + 42374, + 50834, + 42554, + 37362, + 30649, + 32375, + 32949, + 42851, + 55610, + 29902, + 36265, + 37337, + 37187, + 34541, + 41059, + 35190, + 34832, + 38315, + 52908, + 33668, + 47354, + 35110, + 35408, + 43792, + 37102, + 40906, + 37845, + 58074, + 40937, + 36500, + 35682, + 41365, + 44618, + 37351, + 34606, + 40900, + 39741, + 37320, + 38237, + 29827, + 33915, + 32099, + 31756, + 36744, + 37167, + 43616, + 44141, + 35682, + 52486, + 39926, + 36491, + 46295, + 41620, + 42953, + 31742, + 34650, + 45411, + 34208, + 32015, + 42602, + 72805, + 33999, + 35710, + 29577, + 57943, + 35248, + 36168, + 49285, + 45692, + 44371, + 34763, + 34600, + 32448, + 38982, + 32974, + 51924, + 63370, + 41635, + 38087, + 38961, + 49721, + 31427, + 31039, + 30255, + 44119, + 36044, + 51882, + 67945, + 31665, + 39930, + 45050, + 36222, + 45101, + 35216, + 34979, + 38319, + 38561, + 39589, + 33264, + 37251, + 32168, + 31078, + 35262, + 51965, + 38619, + 38086, + 38774, + 46185, + 50981, + 44262, + 50495, + 45673, + 44400, + 54524, + 40368, + 38672, + 58006, + 36183, + 34263, + 30584, + 35722, + 36499, + 36799, + 35918, + 43669, + 39720, + 30311, + 41626, + 48572, + 47038, + 32569, + 37330, + 49480, + 36591, + 42067, + 30102, + 32239, + 45959, + 38965, + 29563, + 37603, + 31908, + 34609, + 39663, + 44231, + 33780, + 33184, + 50418, + 34520, + 36648, + 34542, + 36267, + 34606, + 41961, + 39338, + 35259, + 50766, + 35636, + 46240, + 59794, + 45769, + 42823, + 32108, + 38595, + 49824, + 29120, + 45731, + 40581, + 37677, + 36558, + 37852, + 44698, + 36326, + 38204, + 31495, + 34107, + 36750, + 49760, + 46040, + 38356, + 42890, + 46814, + 31703, + 42939, + 42002, + 38237, + 40807, + 37425, + 40851, + 27037, + 42005, + 41082, + 38406, + 43077, + 36955, + 33614, + 43608, + 33621, + 37593, + 38288, + 38760, + 41720, + 45844, + 43339, + 28350, + 47199, + 38489, + 36243, + 46224, + 29698, + 38131, + 47210, + 28693, + 62714, + 32594, + 38335, + 30718, + 30739, + 27897, + 46352, + 44260, + 41269, + 33980, + 44396, + 54509, + 33017, + 36289, + 35178, + 49535, + 34104, + 45498, + 48527, + 33405, + 39964, + 35921, + 57650, + 49277, + 43994, + 40667, + 52030, + 38671, + 31208, + 31705, + 49395, + 46784, + 31493, + 33417, + 43717, + 37800, + 43399, + 37172, + 38039, + 63838, + 51868, + 39404, + 51127, + 35076, + 37865, + 49413, + 47143, + 42415, + 41396, + 33356, + 43987, + 62368, + 34487, + 36659, + 41754, + 30749, + 43018, + 38648, + 40917, + 81178, + 41903, + 63584, + 39075, + 42044, + 35256, + 49750, + 44774, + 34884, + 40988, + 37712, + 34643, + 33817, + 55795, + 41602, + 58382, + 36065, + 46120, + 36712, + 38052, + 56578, + 34469, + 41084, + 44776, + 40664, + 41569, + 41189, + 37929, + 54749, + 43844, + 29701, + 48900, + 25621, + 37268, + 31963, + 42419, + 41341, + 38492, + 43643, + 41176, + 52479, + 34030, + 48572, + 42223, + 47087, + 41982, + 45747, + 43975, + 82762, + 39968, + 43246, + 33465, + 46629, + 40861, + 33441, + 41825, + 42626, + 47117, + 34006, + 35239, + 37505, + 38507, + 46379, + 39265, + 48532, + 42269, + 36392, + 41237, + 32655, + 42253, + 45708, + 33584, + 37199, + 49175, + 45561, + 61292, + 31956, + 56923, + 48917, + 47229, + 48951, + 38383, + 31324, + 56593, + 36026, + 38865, + 43581, + 43589, + 46001, + 32521, + 51576, + 40061, + 33186, + 55760, + 38410, + 66535, + 52447, + 34419, + 36040, + 43078, + 41662, + 31947, + 47060, + 37134, + 34895, + 30453, + 40399, + 44401, + 42640, + 39946, + 32328, + 52302, + 32932, + 53692, + 38612, + 36160, + 47567, + 47288, + 66878, + 37216, + 34410, + 30613, + 36204, + 33862, + 39910, + 53380, + 34704, + 43574, + 37749, + 31647, + 44931, + 50828, + 39695, + 60233, + 36904, + 34449, + 37532, + 33540, + 36330, + 35342, + 33681, + 34472, + 68639, + 56998, + 36516, + 36534, + 44117, + 36485, + 35360, + 39925, + 39245, + 34808, + 45424, + 37123, + 47272, + 39240, + 37356, + 43800, + 44157, + 35480, + 36692, + 42391, + 43046, + 43225, + 40780, + 39823, + 35312, + 36073, + 49888, + 44436, + 33506, + 45051, + 33231, + 34456, + 32693, + 37917, + 35358, + 33686, + 37465, + 31638, + 45451, + 44428, + 43133, + 45652, + 54563, + 31856, + 42115, + 32702, + 37408, + 30140, + 40900, + 39762, + 32203, + 35414, + 31728, + 41638, + 39921, + 35197, + 37629, + 36581, + 35986, + 37831, + 36808, + 41726, + 30105, + 34172, + 31209, + 48882, + 32230, + 35371, + 50702, + 49396, + 34084, + 38138, + 36447, + 47263, + 46526, + 39783, + 33835, + 47574, + 42697, + 42472, + 41773, + 36500, + 39962, + 49055, + 39175, + 36638, + 36626, + 57071, + 28181, + 41600, + 33700, + 47416, + 31422, + 38028, + 54365, + 37475, + 41760, + 49367, + 46866, + 53023, + 51196, + 41591, + 42346, + 31686, + 40426, + 34691, + 43725, + 41450, + 35614, + 39984, + 31703, + 34173, + 34182, + 41671, + 33545, + 39770, + 36876, + 29414, + 36683, + 30012, + 35765, + 49880, + 37125, + 48126, + 53841, + 28472, + 37455, + 34284, + 40322, + 26424, + 50328, + 41325, + 33935, + 38724, + 48041, + 32410, + 44737, + 48450, + 38646, + 43154, + 45159, + 39255, + 33709, + 43627, + 27274, + 45005, + 38432, + 43241, + 46098, + 43840, + 35931, + 55512, + 38722, + 34500, + 67643, + 39738, + 57671, + 38590, + 33482, + 34581, + 52715, + 42201, + 32944, + 34540, + 43485, + 40667, + 32155, + 46881, + 51727, + 67565, + 33471, + 39824, + 30559, + 41692, + 31686, + 37879, + 32629, + 50777, + 45661, + 31262, + 55345, + 40136, + 32126, + 36805, + 39405, + 64570, + 38219, + 60674, + 44084, + 32046, + 42085, + 42951, + 34661, + 38258, + 38712, + 44467, + 37814, + 51054, + 42131, + 36624, + 33636, + 34692, + 44872, + 43767, + 49344, + 40920, + 42990, + 41437, + 32633, + 35109, + 46830, + 36903, + 40267, + 47530, + 44478, + 70176, + 34671, + 30157, + 34369, + 29449, + 43766, + 33835, + 34234, + 34510, + 41662, + 50042, + 35361, + 43206, + 44347, + 57140, + 38472, + 45928, + 36729, + 34801, + 62704, + 48725, + 42186, + 30785, + 38198, + 36791, + 33672, + 34674, + 31244, + 40255, + 47708, + 27943, + 38749, + 33265, + 38184, + 59046, + 43749, + 32240, + 47294, + 51083, + 46280, + 50946, + 39728, + 32767, + 43783, + 44054, + 42842, + 51902, + 36191, + 36894, + 38534, + 45299, + 33747, + 42142, + 35408, + 35709, + 43982, + 37089, + 33553, + 35188, + 57155, + 38591, + 43518, + 38708, + 35874, + 29643, + 36694, + 62345, + 42214, + 42035, + 51707, + 39593, + 51959, + 32966, + 51339, + 43006, + 34930, + 35108, + 36671, + 32854, + 39995, + 37786, + 44385, + 41104, + 46689, + 43985, + 34741, + 47923, + 32195, + 36281, + 40405, + 32253, + 40473, + 35667, + 53327, + 39746, + 38977, + 32467, + 49434, + 33004, + 45199, + 47498, + 33743, + 40389, + 57400, + 39994, + 31819, + 35349, + 44607, + 90291, + 44415, + 49678, + 33581, + 37096, + 49345, + 33929, + 34315, + 31960, + 40602, + 32011, + 50653, + 41879, + 38601, + 45367, + 55387, + 32113, + 47728, + 39692, + 37646, + 46366, + 39899, + 45377, + 42304, + 46125, + 42241, + 40596, + 64030, + 31849, + 32708, + 34394, + 51354, + 43742, + 59586, + 45129, + 45449, + 41081, + 30179, + 46559, + 49131, + 35428, + 38611, + 39621, + 30113, + 43911, + 39454, + 47274, + 46142, + 42717, + 39616, + 35737, + 33521, + 37943, + 33251, + 38330, + 39746, + 48208, + 37707, + 47008, + 37938, + 32225, + 41540, + 30560, + 66137, + 28111, + 41036, + 41591, + 49317, + 37652, + 65717, + 36125, + 36629, + 32650, + 39131, + 46373, + 45380, + 49248, + 32201, + 33017, + 34829, + 31235, + 48469, + 35287, + 36250, + 36246, + 36118, + 31735, + 52432, + 34425, + 45783, + 30903, + 35826, + 44206, + 31979, + 37722, + 63466, + 62454, + 53521, + 38222, + 37594, + 50557, + 32876, + 38900, + 40862, + 37617, + 57466, + 40880, + 38223, + 35726, + 34361, + 43091, + 51628, + 35159, + 35461, + 32219, + 34556, + 28191, + 43397, + 36597, + 39262 + ] + } + ], + "top_n": [ + { + "data": "CA4=", + "count": 81000 + }, + { + "data": "CPwD", + "count": 11060 + }, + { + "data": "CKgC", + "count": 19693 + }, + { + "data": "CBQ=", + "count": 62527 + }, + { + "data": "CAQ=", + "count": 242073 + }, + { + "data": "CNAC", + "count": 13709 + }, + { + "data": "CBw=", + "count": 41344 + }, + { + "data": "CEA=", + "count": 27255 + }, + { + "data": "CJgD", + "count": 11572 + }, + { + "data": "CIoF", + "count": 6201 + }, + { + "data": "CCA=", + "count": 34252 + }, + { + "data": "CAw=", + "count": 95159 + }, + { + "data": "CAg=", + "count": 133814 + }, + { + "data": "CKYB", + "count": 22005 + }, + { + "data": "CK4M", + "count": 3566 + }, + { + "data": "CPoB", + "count": 23471 + }, + { + "data": "CMQB", + "count": 19993 + }, + { + "data": "CO4G", + "count": 1804 + }, + { + "data": "CAo=", + "count": 111789 + }, + { + "data": "CBo=", + "count": 48374 + }, + { + "data": "CMwI", + "count": 8773 + }, + { + "data": "CD4=", + "count": 27052 + }, + { + "data": "CDQ=", + "count": 26340 + }, + { + "data": "CBI=", + "count": 61603 + }, + { + "data": "CLAB", + "count": 13353 + }, + { + "data": "CCY=", + "count": 32444 + }, + { + "data": "CBA=", + "count": 75851 + }, + { + "data": "CAY=", + "count": 162276 + }, + { + "data": "CCI=", + "count": 40210 + }, + { + "data": "CFI=", + "count": 29309 + }, + { + "data": "CKgB", + "count": 12266 + }, + { + "data": "CJAC", + "count": 11990 + }, + { + "data": "CB4=", + "count": 42518 + }, + { + "data": "CBg=", + "count": 42105 + }, + { + "data": "CMQE", + "count": 10599 + }, + { + "data": "CAI=", + "count": 1073673 + }, + { + "data": "CH4=", + "count": 15369 + }, + { + "data": "CGo=", + "count": 17887 + }, + { + "data": "CBY=", + "count": 50210 + }, + { + "data": "COoC", + "count": 13540 + } + ], + "default_value": 0 + }, + "null_count": 0, + "tot_col_size": 328809523, + "last_update_version": 419082401752547432, + "correlation": -0.037462 + }, + "d": { + "histogram": { + "ndv": 806400, + "buckets": [ + { + "count": 19344, + "lower_bound": "MDAxYTE5Njk2MjdmNDYyMDhlY2M3NDNhNTRhOTY3YjE=", + "upper_bound": "MDEyOWZmOTUzNmQ5NGFiM2I1OWQyMGJmMzM2YzBjNTY=", + "repeats": 488 + }, + { + "count": 38688, + "lower_bound": "MDEzYmZjMTQyOWRmNGFjM2FiMTc0ZGJkOGQ4MmM5ZmM=", + "upper_bound": "MDI1YTQ1Nzc4ZjMzNDYxNmEzYzFiNTQ1MzMyM2U3OTc=", + "repeats": 971 + }, + { + "count": 58032, + "lower_bound": "MDI2M2FlM2NjMWMzNDVjNDhkNmY4M2IyN2EwMTIzYTM=", + "upper_bound": "MDM3OGQxZWU1MmRjNGY5YjkyZDFhNDkzMWY3NTIxYTg=", + "repeats": 5 + }, + { + "count": 77376, + "lower_bound": "MDM3OWFjZWQyNWY5NDYwYzk5YmYxNWFlNWYzNWJkNjI=", + "upper_bound": "MDQ2OGI3OThiMjBkNGQyM2EwZjMwMTRjMDg2MjRmM2Q=", + "repeats": 5 + }, + { + "count": 98171, + "lower_bound": "MDQ3MTVhYzdkOWY3NGNkNThiYWMzNzViMzRiNzEyODQ=", + "upper_bound": "MDUzMTRmZDQ4NzA0NDMzM2I1MzQ3MGNhOTlhZTBlOWE=", + "repeats": 2903 + }, + { + "count": 117516, + "lower_bound": "MDU0ZTIxYjIzY2RiNDNkZDkxMjlmOGY1YzUxZmFhZTk=", + "upper_bound": "MDY3MGMzODVlOTczNDE4MzgyODE1OWY2MjE0YWI4NDU=", + "repeats": 5 + }, + { + "count": 136860, + "lower_bound": "MDY3MGM3Y2IwY2FmNGI1NGIyZjRlMWJjNjJlNTViNTY=", + "upper_bound": "MDc2MDk1ZTY0NWM4NGJhYWJjMDIzY2VkOWIzYmQwNTE=", + "repeats": 5 + }, + { + "count": 156204, + "lower_bound": "MDc2M2ZmNTk4YjFjNGUxNjgwYTQ5M2Y2M2QwMGEyNDQ=", + "upper_bound": "MDg4MDY5YTVkZGFjNGQ5NDkwN2ZiNjZjYzVjZWRlZmM=", + "repeats": 488 + }, + { + "count": 176516, + "lower_bound": "MDg4MGE1MTlmYTZjNGIxOGI2MjdhNGEwMDQ2OTYyMWQ=", + "upper_bound": "MDk1YmQ4MGRlMTAyNGYyNmI3MGQwNjU3Mjk3NmJkYzQ=", + "repeats": 1937 + }, + { + "count": 197311, + "lower_bound": "MDk2N2Y2YjRhODkxNDY4OTlkOWEzM2Y4ZjJmM2FmZWM=", + "upper_bound": "MGEyOGRlNGFkYmNhNGY5OTg3M2NjNWU0ZmJhZWNkNGU=", + "repeats": 1454 + }, + { + "count": 216655, + "lower_bound": "MGEzZmI1NWZlODY4NDJkZTlkYzExYjNmMTE3MzhmZmM=", + "upper_bound": "MGIzNGExYjY5MGEwNDU4MjkxMjk2Y2Q4MTcyMGJkZTE=", + "repeats": 5 + }, + { + "count": 235999, + "lower_bound": "MGI0YzE3NGFmYWE5NGIyMWJlNWFkZmMwYTg2ZGJlNTQ=", + "upper_bound": "MGM2ZGU4ODJlN2Y0NGIxMWEzODAxNmE4YjUxMGJiNTY=", + "repeats": 5 + }, + { + "count": 255827, + "lower_bound": "MGM3NTdkYjAzYjVkNDZhMThiNWI0MjkxY2FiMjlkY2I=", + "upper_bound": "MGQ5ZGMyMmU3MDc0NDcwMjliOTYzOGU0YWEwODlhZTg=", + "repeats": 488 + }, + { + "count": 275171, + "lower_bound": "MGRhMGFlMmUxYmJjNGNiYjkzYzEyNDMxZDdkMWE2OGI=", + "upper_bound": "MGU5ZGZlNjhiNTg2NDU2MWE0MTIwMWFmZjE2OWM0NzI=", + "repeats": 5 + }, + { + "count": 294515, + "lower_bound": "MGU5ZTVhN2FmMjliNDNmM2JlM2ZmOGQ2ZjIxOWU0NGM=", + "upper_bound": "MGY2ZDExMjY3NTUwNDA1NjkyZjQ3NTk3ZGY2ZjJiZWI=", + "repeats": 5 + }, + { + "count": 313860, + "lower_bound": "MGY3MzhmYTJkYTM2NDdiMWFiOTdjZGEyYWVhNGRiYjE=", + "upper_bound": "MTBiZjA3MWUyNGJiNGViNjgzMjg5ODIyYTcxYjEwNDY=", + "repeats": 5 + }, + { + "count": 333204, + "lower_bound": "MTBiZjVhOTE2NTNjNDZkN2EwOTRkYzI1MzYzOTE0ZGE=", + "upper_bound": "MTFmNzkzMTdmYzJkNDBmZDg1NTY5ZDQ4N2QxNzExNDM=", + "repeats": 5 + }, + { + "count": 352548, + "lower_bound": "MTFmYjMyNTZiZGI1NGIzMDk3NjAxYzAzNGRmNTIwMGQ=", + "upper_bound": "MTM2NTg2OGIyNjU5NDA0Y2E4ZGFhYjMzNzczZWZkNGM=", + "repeats": 5 + }, + { + "count": 371892, + "lower_bound": "MTM2ZDdjYmZhNTI2NDFjNzgyY2EyMDk2MTdmOWI2Y2M=", + "upper_bound": "MTQ2NDAyY2I4MTFiNDY3ZDkzOTFlZTFkODllOWQ1ZGM=", + "repeats": 5 + }, + { + "count": 391237, + "lower_bound": "MTQ2NzQ4NTNkZDhkNDQyOWI4YTAxNmJkNjUzMDY0YmU=", + "upper_bound": "MTU0NDhiYzdhMmYzNDMyNzgyMTQzNDcxY2YwOGM1MWY=", + "repeats": 5 + }, + { + "count": 410581, + "lower_bound": "MTU0ODM5YTMyMDYwNDA1NzlmZjA5MTAyYjA3NDBlOGI=", + "upper_bound": "MTY0MzFhNGE2NWJlNGE0ZThmMjJhYjkxYWRmNTc5YzU=", + "repeats": 5 + }, + { + "count": 430409, + "lower_bound": "MTY0Y2ZhZjFmNjI0NGJmYmI1OTU3NDgxMWFmZjBhNjk=", + "upper_bound": "MTc0OTFhZGYwMWU2NGEyN2ExMWEwZDIyMGMyMzRhZDE=", + "repeats": 488 + }, + { + "count": 451687, + "lower_bound": "MTc1NGFmYzIxZmUyNDk4MWI0MTNhMDk4ZWIyYzI5NzM=", + "upper_bound": "MTg4MjdmYzg0Njk1NDExYjhjZDg4OWEyMjIyODI0MWI=", + "repeats": 1937 + }, + { + "count": 471032, + "lower_bound": "MTg4NDIzNDgzOGJkNGFkYWJkYzI5ZDA1MDM0N2M5OTg=", + "upper_bound": "MTlhYzNiYWQ0Y2E2NDVhNTgzMmViMDk3YTYxY2ExZTk=", + "repeats": 5 + }, + { + "count": 490376, + "lower_bound": "MTliOTY5MGRiMzFjNDYyZDg4MjNmZTFlZTExM2ZlNzM=", + "upper_bound": "MWFiMWZmM2FlZGIzNGI5YzgzYWUwOWJiMDY4OTRkOTU=", + "repeats": 488 + }, + { + "count": 510204, + "lower_bound": "MWFiNjQwNDFmZDliNDM2Yjg4OGJmZTZlNmEwM2U4ZmY=", + "upper_bound": "MWI2NjIxNDZhNDkwNGFjOWE2NWUyMzQ2MjNlOWUxNzI=", + "repeats": 1454 + }, + { + "count": 529548, + "lower_bound": "MWI3Yjc5MDdiYmI0NDJjN2E0NTI5YzZhZDQ2OTQxM2M=", + "upper_bound": "MWM2ZDQ1MzQ0MjMwNGYxY2E5ZDYzYmY4MmQyNjIwMzM=", + "repeats": 5 + }, + { + "count": 548892, + "lower_bound": "MWM2ZjU0ZWMwYzllNGRlMGFlMGU3ZWZmMmNjMzk3NmY=", + "upper_bound": "MWQ3MDBkMTJjYThhNDQ5ZTkxNDkyMjdkMDUyMTFhMGU=", + "repeats": 5 + }, + { + "count": 568720, + "lower_bound": "MWQ3NDk0Zjk3YzQ3NDcyZWJlZTQ0MjljYjM0NjhkYzE=", + "upper_bound": "MWVjYjAyNGM2MzVlNDBkMjg5MTJjMzE0NmU5Njc4YjI=", + "repeats": 488 + }, + { + "count": 588064, + "lower_bound": "MWVjZDBiMjQ2MDkxNGQ2MWI3ZWNhZThlYWU5ZDU4MmQ=", + "upper_bound": "MWZmNzU3MzY0Nzg3NGIzNWFmZDg0MDNiOGEwN2E2YWE=", + "repeats": 5 + }, + { + "count": 607408, + "lower_bound": "MWZmZWExNTI4MGJhNGM5ZmIyYjZjNjVkYjc2NDllNWM=", + "upper_bound": "MjFhYzNlNWQ4ZjNlNGFlYzg4ZWUwZThkZjY0MjdiMWI=", + "repeats": 488 + }, + { + "count": 633039, + "lower_bound": "MjFiOWZkNTM3NDI4NDU2NTkzZmE0Nzc1ZjU3MTk0ZjA=", + "upper_bound": "MjJlZDcxMTE2ZTU5NGE2ZDhkYWEzNjI2ZTA2YWM3OWY=", + "repeats": 8216 + }, + { + "count": 652384, + "lower_bound": "MjJmYjIxZWYxMzE5NGI2NGE5MTRiMWU4YzExYmNmNWE=", + "upper_bound": "MjNhYWI3YWNkYzA3NGZjYjg4NTgzNmFmNWI0YmJmMmQ=", + "repeats": 488 + }, + { + "count": 671728, + "lower_bound": "MjNhYzUyZjBkZDI4NDFmZTljYzc5OTk5YjE2MDZlMDQ=", + "upper_bound": "MjQ3NzhkMTgxYWI3NGVlZWEwNjMyNDM1ZjRmZjk4ZWM=", + "repeats": 5 + }, + { + "count": 691072, + "lower_bound": "MjQ4MzFmZjllNzExNDJhZDhmYzdkYWM3OGUyNzRlZjA=", + "upper_bound": "MjU4MTkwZmJlMGYzNGI3NDg5M2U4YzQ5YjdmMWZmNTA=", + "repeats": 5 + }, + { + "count": 711384, + "lower_bound": "MjVhN2IwMzQyYzEyNGU2YzhmNWVhZWZhMzJlMTVhMDc=", + "upper_bound": "MjZiNDQ4ZTJhMDZiNGFjM2JiZWRhNTY4NDEwZGFmY2Y=", + "repeats": 971 + }, + { + "count": 730728, + "lower_bound": "MjZiYmQzMTczNmRkNDYwODgwNjVjOTU3YTU1Yjc3ZWI=", + "upper_bound": "MjczZGM2YTc1MGFjNGNhOWJmZGIyOGE0ZDA0Y2IyOTg=", + "repeats": 5 + }, + { + "count": 750072, + "lower_bound": "Mjc1MGNhZDQ1NGRhNDhmMGE5NjJmMTM4NTA5OTVhOTE=", + "upper_bound": "Mjg5ZGRjZjlmN2VhNDcyYjllYzI5MjZiODFhOGUzZTc=", + "repeats": 5 + }, + { + "count": 769416, + "lower_bound": "MjhhZWFjNzc1OTk3NGM1N2I5MGJlYThlNDc2Y2ExZTI=", + "upper_bound": "Mjk0ZjE4NDVhMTRhNDA2MTgwNDNlYzg1ZGRiYTcxOWE=", + "repeats": 488 + }, + { + "count": 788761, + "lower_bound": "Mjk1NTMyNmM0NzMzNGJlYzkzMDczNDVlOTk3MGNjMmI=", + "upper_bound": "MmEyMWJlY2JkNGM2NGE3OWE4YzMxMWRkYzIwMDQyZWM=", + "repeats": 971 + }, + { + "count": 808105, + "lower_bound": "MmEzNjNjNGM3OGE2NDAzNmI4YjUzNmI1ZTRmNTZlZmE=", + "upper_bound": "MmI0MDlhNzA1ZWVhNDkxNzljYmUyYTc1ZmM4MjA4ZjI=", + "repeats": 5 + }, + { + "count": 827449, + "lower_bound": "MmI1NDE5OWEzMmY5NDg3YTg2NzIxODcwZDhkYTY5NTY=", + "upper_bound": "MmMyNjkyOWI2NzlmNGRlZGIxZDgwNzdmZTdkNzc0OTQ=", + "repeats": 5 + }, + { + "count": 847277, + "lower_bound": "MmMyOTFlNGY1NTIyNGQxNWI1MGE3YTIzOTg2NDIxNTE=", + "upper_bound": "MmQ0MWVjZmE5NTg2NDBiYzg5NGUyZTIzMDI3NDkyNzY=", + "repeats": 488 + }, + { + "count": 866621, + "lower_bound": "MmQ0ODUzMDlmMzg0NDcyZGI0MDk5NzhmOTAzODE3ZGU=", + "upper_bound": "MmUyZmQyMjg4N2NlNDdmMjhkOGM1OTM0M2ZjYmU3YTg=", + "repeats": 488 + }, + { + "count": 888867, + "lower_bound": "MmUzMDdjMGMxYjdiNGNhZDgwYjk2Mzk5MjhkNzJkYzk=", + "upper_bound": "MmU3ZmEzNTAxM2MyNDg0ZjlhZGQzMTNjNDI3MGY4NWQ=", + "repeats": 11597 + }, + { + "count": 908211, + "lower_bound": "MmU4NmIyODExYTg5NGI1OTg1MGNhNGRmMDUzNmFhMTQ=", + "upper_bound": "MmY3YjIzMDgxZTQzNDQxNTljZGY0M2QyNDVkY2UyY2U=", + "repeats": 5 + }, + { + "count": 927555, + "lower_bound": "MmY4MTRiYTE3OWFlNDZkZjk3MjdkODYyMDMyNjk0YTI=", + "upper_bound": "MzA4ZjI0ZWM3ZmNjNDIwMDk4ODVkMmNjZmZhN2YwNGY=", + "repeats": 5 + }, + { + "count": 950285, + "lower_bound": "MzA4ZjM4ZTg4YjFkNGRmYjgzMDEyYjI3YTQ5NjYyNGI=", + "upper_bound": "MzEyZjlkNzBlMTgxNDAyMjkxYjUxY2RhMzkzNWJhMDU=", + "repeats": 3386 + }, + { + "count": 969629, + "lower_bound": "MzEzM2RjZjVjNjFhNDU5ZWFjNTllZWM4YTdkOTNkZDc=", + "upper_bound": "MzI2NjNhZGY3NGZkNGQzYTkyMDcxNDFlZWUzZjk2ZDU=", + "repeats": 5 + }, + { + "count": 989457, + "lower_bound": "MzI3ZmUwM2NlYzNiNGE3YTg5ZWEzZTE5NDg3YjA3ODA=", + "upper_bound": "MzM4ZjBiNWIxYjdjNDRhYTlkNjEwMGYyNzM5YTkyNGE=", + "repeats": 488 + }, + { + "count": 1008801, + "lower_bound": "MzM5MTZjOGRjZTQ3NGVhMmEwM2UwMjNkZTI0YTUzY2E=", + "upper_bound": "MzQ3NGQ5OTJlMTNlNGJiZDg1Zjg5NGY3YzljZGQxYjU=", + "repeats": 5 + }, + { + "count": 1028145, + "lower_bound": "MzQ3ODUzMzgzMjZlNDQ1ZDkwMTU5NDFiYWNlNTY2YTk=", + "upper_bound": "MzUzNGM3YzAzZmU4NGM4OGI1YzQyZGM0OTc5NTlkODk=", + "repeats": 5 + }, + { + "count": 1047490, + "lower_bound": "MzUzZWYzMTNlZDMwNDBlMGI3MzRkZmQ5OWQyNWMxMGY=", + "upper_bound": "MzY4ZjRkNzc2Njg5NDI5ZmIzZDBiZDc5NzY1ODJmODg=", + "repeats": 488 + }, + { + "count": 1066834, + "lower_bound": "MzY5MTg2ZmEyMDY0NDIxNDg1NmE0M2NlMWE3ZGMzMDg=", + "upper_bound": "Mzc5NzBjYmQwMWEwNGMxMWE3NmIwMDYwMmM5NTk5YmM=", + "repeats": 5 + }, + { + "count": 1086178, + "lower_bound": "MzdhMDdlNTM4NzY3NDFjZTllZTFjNmMxZmU3YzA2ZTY=", + "upper_bound": "MzhjZjU3ZjFjOTkzNGFiOGI1MzY4M2NkN2NiNDQwMTY=", + "repeats": 971 + }, + { + "count": 1105522, + "lower_bound": "MzhkMmE0ZGFlMzVhNDlkMDhmYzExNjA4YjEyMjAyNDU=", + "upper_bound": "Mzk4MmVjMDAwM2ZiNDVlMjg4MGYxYjk5ZjY3Y2NmMGE=", + "repeats": 5 + }, + { + "count": 1124867, + "lower_bound": "Mzk4YzcwZjI1ZGRjNDViYjg3YmZmNmIzNzMzODhiNmQ=", + "upper_bound": "M2E1ZmZiNzU0M2IwNDI2MmE5Y2NlZThkYWE2MmQwMWM=", + "repeats": 5 + }, + { + "count": 1144694, + "lower_bound": "M2E3MTYzMjUxMzRlNDgxMGI3NDg4ZWEyYmJlMzg4NDE=", + "upper_bound": "M2I3MjRkZWYyMzE2NGE0MmFjY2NhYTI2MjEzMzUwOWY=", + "repeats": 488 + }, + { + "count": 1164039, + "lower_bound": "M2I3M2ZiZjc3NDQ2NGY4NTgzMWU2ZGY1YjMwZjM0OTQ=", + "upper_bound": "M2M3OWNmZmY2ZDE0NGNlZDk5Zjg3MjkwOGQ2ZDVmYjc=", + "repeats": 5 + }, + { + "count": 1183866, + "lower_bound": "M2M3ZGJlMGRkMGYxNDczYWFjYjA3ZWE0OGY4YzY5Zjk=", + "upper_bound": "M2Q2YjljYjM2MjU3NDM3MWFmZGUwODkyNGFlODA5Yjk=", + "repeats": 971 + }, + { + "count": 1203694, + "lower_bound": "M2Q2ZTIyYjVlZGFiNDkyYWJiMThlODM5OWE2Yzg2ZmI=", + "upper_bound": "M2RkZTkwZGEyYzYyNGMyN2IyZTgzZGY0MmRjNTkwNzE=", + "repeats": 488 + }, + { + "count": 1223039, + "lower_bound": "M2RlMGQzY2U2NTFiNGM0MjkyMDM4YmZiZGZmMDkyNzk=", + "upper_bound": "M2VkN2M2NjhmYzI5NGM4NGIxYTMyMTIwYmU2Y2E2ZGI=", + "repeats": 5 + }, + { + "count": 1242866, + "lower_bound": "M2VmZWRlYjc3YjY1NGIxMWJkMmExY2U0ZDZlMDI1YTY=", + "upper_bound": "NDAwNWVjMTk1MTkzNGY1NzhjN2ZmZmIzODdhMzg0MTM=", + "repeats": 971 + }, + { + "count": 1262211, + "lower_bound": "NDAxMDY2M2E2MTFjNDdiODk4ZGRkODQzODFjYjFiM2U=", + "upper_bound": "NDEwZTIyMDM4ZWZlNGE4YTk4MDZlMzE2ZGVjMzZkMTQ=", + "repeats": 5 + }, + { + "count": 1281555, + "lower_bound": "NDExMzU2OTJjODM3NGVmMWI3ZjM5YjllMGM1NzE2YTA=", + "upper_bound": "NDI5MDY1ZjE0ZDE4NGI2NThiYThmYTJlYzAxMzZkOGY=", + "repeats": 5 + }, + { + "count": 1301383, + "lower_bound": "NDI5NzdiMjY5MWIyNDM0NmI2MDQyYTM5NDVjNjFhYWI=", + "upper_bound": "NDQwNmY2NmIwNzg1NDY2NzliZjI1N2NlMTY3NTVjNjE=", + "repeats": 488 + }, + { + "count": 1320727, + "lower_bound": "NDQxMmEyYWExZDhiNDYxYTlhMDY0YmUyNjhjYjA0MmE=", + "upper_bound": "NDUwNGJhMWM1MDYyNDQzZDk4NTUwNjRjOGE1M2JiOWE=", + "repeats": 5 + }, + { + "count": 1340071, + "lower_bound": "NDUwOTEwNDk1MDVhNGQ1OGI5ZTRlNGE4MmNhMzI5NzU=", + "upper_bound": "NDYzNmM5YTE4ZWI2NDhmMGJmMzdkNzc2ZDI5YmUzNWE=", + "repeats": 5 + }, + { + "count": 1359415, + "lower_bound": "NDYzN2U2NDcxMDZhNDE4NzlhM2U5ZGVmOTgzN2M4ZTg=", + "upper_bound": "NDc0MjY5MTVmMTQyNDlkYzg3Yzc4NzVjYWJiM2UyMTk=", + "repeats": 5 + }, + { + "count": 1378760, + "lower_bound": "NDc0Y2I5NGNmNzk0NDA2YjlhZjU3NDFkNjZiNzllZDU=", + "upper_bound": "NDg4NTI4MGY3MDRjNDMwYjg5ZTJjZmQ1NTFmYjY0ODQ=", + "repeats": 5 + }, + { + "count": 1398104, + "lower_bound": "NDg4YTk3ZDNiMjdmNGNjZDk2ZjVkMDA0NGYwNGU0NjU=", + "upper_bound": "NDlhY2VlMmVlNzI5NGZkNTg0YWEwYWUwYzFmYjM0OWI=", + "repeats": 971 + }, + { + "count": 1417932, + "lower_bound": "NDliNjg3MDMxZjRkNGRiOTg3YjA1Yzg4NWQ5Yzg3NmY=", + "upper_bound": "NGFlM2M3ZTlhNDY2NGFkNzk2NWQ2YmYzYWQxZjk5MDY=", + "repeats": 971 + }, + { + "count": 1437276, + "lower_bound": "NGFmMzE3MGZlN2QxNDlmY2ExNTliOTQ2MDE2NzI4NDY=", + "upper_bound": "NGI5ZWE4NDNhNTRkNDIyMTlhYzBhNjgxZGQ1ZmM0MTM=", + "repeats": 5 + }, + { + "count": 1456620, + "lower_bound": "NGJhNTBlNWRhM2ViNGIwNGJkMTQyODIyOWQ4MmMzMDU=", + "upper_bound": "NGQwYjIyODM1ZTk4NDQzZmJiZGFmZTVlMmRmNWU0MjI=", + "repeats": 5 + }, + { + "count": 1475964, + "lower_bound": "NGQwZjNjNGJlNzYyNDkxY2EyN2JkZGY0YTBmMzUzYTk=", + "upper_bound": "NGRiODMwNjFjY2U3NDMwNzhjNWQzYTEyOTA5NWU4YjI=", + "repeats": 5 + }, + { + "count": 1496276, + "lower_bound": "NGRiZjdlMzM2YTY5NDYxMDhhNGIzYjgyYzJjMDhjZjQ=", + "upper_bound": "NGU1YWJjMTljZjNjNGFiNWFkZGU2NDI2N2JmMmQwYjI=", + "repeats": 971 + }, + { + "count": 1515620, + "lower_bound": "NGU2MDExNTA0NDY0NGI3ZTg1YmMyYzk3NzA3Y2FkZmE=", + "upper_bound": "NGY1NzZkZDFlMjAyNDk1MTg4OTQ5ZjEzYWE3NTJjNGQ=", + "repeats": 5 + }, + { + "count": 1534964, + "lower_bound": "NGY1ODExNjVjMzBlNDE4NzkwNDc3Y2ZhMjUxMTgyMTc=", + "upper_bound": "NTA3ZDQ1YzQ2MzA5NDAxMGI4NzFkMGRkYjczZmQ0MjQ=", + "repeats": 5 + }, + { + "count": 1554309, + "lower_bound": "NTA4MWE0MmVmMTRiNGViZmFjYTIyMGFkNTA4MTRmMWE=", + "upper_bound": "NTE0N2M1Yzg3ODFiNDhlMWE0MTI3YjIyNGM3MzUyZGQ=", + "repeats": 5 + }, + { + "count": 1574136, + "lower_bound": "NTE1MDU0Y2ZkM2Y5NGM0YzllMGRlNGVmZWYyMWViOGU=", + "upper_bound": "NTI3ZWU0ODc3MDgzNGM2ZWE2ZmVjNmY2ZGEwZTgzNjU=", + "repeats": 1454 + }, + { + "count": 1594931, + "lower_bound": "NTI4MWY1MDI1Y2QwNDlmOGIxYmQwYzM5ZDllMWU2OGI=", + "upper_bound": "NTM3ZGRlYTcxZTUwNDBlNWFlOWE3YzUwNzEwZTYwYTY=", + "repeats": 5318 + }, + { + "count": 1614276, + "lower_bound": "NTM4ZDQ3NTVhN2E0NDg4Zjg4YzRhZDI5MTdiMDk4MmE=", + "upper_bound": "NTQ4MDM5ZDRhNzFjNDU5MDlkZTQxOTBjOWI2ODYwNDE=", + "repeats": 5 + }, + { + "count": 1633620, + "lower_bound": "NTQ4NDQ1ODBhMzAyNDE2MWFmZTY1YzM5ZmM2M2U3MTI=", + "upper_bound": "NTVhYjMzZTc1MDViNDk1ZTllYmUyYWQ5Y2Q2ZTgxMTM=", + "repeats": 5 + }, + { + "count": 1652964, + "lower_bound": "NTViYzg0ZmE3MjJkNGEwNGJjNmNkNmY1NmIzNTJlYjM=", + "upper_bound": "NTY5OGM2M2IwODY1NDhiZDhlOGI0MjJhNThlYWRiNzA=", + "repeats": 5 + }, + { + "count": 1672308, + "lower_bound": "NTZhOThjZDc1YzU0NDA3ZWJiNDU0NzRlY2JlNDcwMDU=", + "upper_bound": "NTdiMGZkMjc1Njg5NGQ0ZDhlMTc5MGE1ZDZmN2RkYjc=", + "repeats": 5 + }, + { + "count": 1691653, + "lower_bound": "NTdjOTVhN2FhZWM1NGI0OGI5ZjdjODYxZmMzMzQ5Mzc=", + "upper_bound": "NThlMDYyYTVmZWU1NGFmNmE1ZTdmNmVjNThhNzBkMzU=", + "repeats": 5 + }, + { + "count": 1710997, + "lower_bound": "NThmYWUwMmRiNTU1NDY4YTk0OGZlYmY1ZThiMTVmNjg=", + "upper_bound": "NTliZTUxOGUyMDU0NDY5MWI1NzI1Nzk4MGZiMjhhNjU=", + "repeats": 5 + }, + { + "count": 1730341, + "lower_bound": "NTljZGY2ZGI1NzBiNGU3NTkyM2Y1ZWI4N2YwMDc0MDM=", + "upper_bound": "NWIwMWNmZmJmOGE2NDBhZThkY2FjNjhiYmZkMWFmNmQ=", + "repeats": 488 + }, + { + "count": 1749685, + "lower_bound": "NWIwOTVlMmMxY2UwNDhiNTg4MGRkYjFmY2MwOWUyYjU=", + "upper_bound": "NWMwZmM5NWMwNjNlNGU5MGI2Y2E2OWM1M2JjNGVhZTY=", + "repeats": 5 + }, + { + "count": 1769030, + "lower_bound": "NWMxMzBhMjdmY2I5NGE5NThhNTBjZjQ1NGMxYmRiODk=", + "upper_bound": "NWQwNTNkYzIyMjE3NDEzOThmY2MyYTM3ZDQ1M2YxY2I=", + "repeats": 5 + }, + { + "count": 1788374, + "lower_bound": "NWQwYzExMGNkOTIyNGY4ZDk0OGY0YWI2MjM1Mzg2OWI=", + "upper_bound": "NWUyZTc0YzliOTE3NGFlZGEwMzg0YmYzYTg4ZjAwYjI=", + "repeats": 5 + }, + { + "count": 1807718, + "lower_bound": "NWU0MDEzYzA5MjQ1NGNmYmEwMjBhNzdkMmFkZDBiNzY=", + "upper_bound": "NWYyOGRmOTRjZmZkNDBlZDkwYzExYzdmODQ5MjViMjI=", + "repeats": 488 + }, + { + "count": 1827062, + "lower_bound": "NWYyYTE1Zjg4OWI4NDVkMzhjOWQ4NjliZGNmY2ViYTE=", + "upper_bound": "NjA1ZmY5MThkOTY5NDVhMWFiZWY2MjRiZDYxMjQ4Zjk=", + "repeats": 5 + }, + { + "count": 1846406, + "lower_bound": "NjA3ODk2YTEzODhkNGI0NmI5MDFlODY1ZTFhYmVmNGY=", + "upper_bound": "NjFlNWQ0ZDBmYWJlNDhiYzg5N2YyNGIyYTU2YjM4OGM=", + "repeats": 5 + }, + { + "count": 1866234, + "lower_bound": "NjFlYjhkNWRkZGVhNDQwYzliMzk0N2EyZWQ3ZTI4OTk=", + "upper_bound": "NjJkNTUxZDBhZmJiNDk4MDhhOWJiYWJiMzIxZGFiMTE=", + "repeats": 488 + }, + { + "count": 1887513, + "lower_bound": "NjJkYzZlZDZjZmQ1NDNiNTkyOTBhYjU0OWNmMmQxZWY=", + "upper_bound": "NjNjODJlNjc3MjJlNDgwMmI1MTdlNDZjNmFkMDQ0MWY=", + "repeats": 5318 + }, + { + "count": 1906857, + "lower_bound": "NjNjOTAzYzhkNTJmNDZhYTg4YTVjMDJhNTI1YTNjMWQ=", + "upper_bound": "NjRkY2NhNTkxNzhlNGJiMjgxY2IzMGM4ZGFhNDU0NjA=", + "repeats": 5 + }, + { + "count": 1926685, + "lower_bound": "NjRlMmIwMmMxNTlkNDgyOTkzZWM4YWY2ZjM3NWIxNzI=", + "upper_bound": "NjYyNDc1NzAzODBjNDUxOWI0NmY1NGM2NmFkYjdkYWM=", + "repeats": 971 + }, + { + "count": 1946513, + "lower_bound": "NjYyNjA2YjU4MDBlNGI1MWFlYTE2YjU1YWMyZGQ4ZDQ=", + "upper_bound": "Njc3NzA0NWFhNjMwNDI2NzgxNWQyNDQ1YzBlMGZiMGQ=", + "repeats": 971 + }, + { + "count": 1965857, + "lower_bound": "Njc5MWUzNzk2YzBiNDI3N2FjYzgwMzkxYTdhZmEzMjk=", + "upper_bound": "NjhjYWE4MDc4YzcxNGIyNWEyYmRkMjk2MDhhNDA5MjA=", + "repeats": 1454 + }, + { + "count": 1987136, + "lower_bound": "NjhjZTlmNTc4ZmFmNGMzNDgzYjQ3Njg0ZTMzNWNiMTU=", + "upper_bound": "NmExZGE1MWFjYzc5NDYyYmE3ODkwYjhmNDM3MWZjODY=", + "repeats": 1937 + }, + { + "count": 2006480, + "lower_bound": "NmExZTIxNGY4ZjkzNDU2MGEyZDBlNDlhNDE4YTYxNDU=", + "upper_bound": "NmFlMzViYTY3YzIyNDRkYTk3ZGI5MDQ4YWQ5NWNkNjU=", + "repeats": 5 + }, + { + "count": 2025824, + "lower_bound": "NmFlNjhmMWE0OGQwNGI0NTkwMTdiN2FhODlmNDZiNWU=", + "upper_bound": "NmMwNWE5ZmJjN2RkNDcyYTk1OWE1MTFmMjllMDY4Njk=", + "repeats": 5 + }, + { + "count": 2045168, + "lower_bound": "NmMxNDJlMjNkNzY0NDhlOTk4OGIwMWUyOTliZGI4ZmY=", + "upper_bound": "NmNiYzA1ZjQ0ZjIzNDM0N2E3MDgyZmRjYTQyODU4MmQ=", + "repeats": 5 + }, + { + "count": 2064513, + "lower_bound": "NmNkMTJhZmViYTcwNGM2MDg3MjBlNTc1NTViYTc4MTM=", + "upper_bound": "NmRmZGNjMWU3ZGI3NDNkYjk1YThiYzNmOTE4OTE4ZDg=", + "repeats": 5 + }, + { + "count": 2083857, + "lower_bound": "NmRmZWM4ZWJjZjEwNDU2NWFiYTBmM2RkY2RlMWRiZjg=", + "upper_bound": "NmYwZDYxZTRiZWM3NGM4MWFmNDljMDcyYjk3ZmYzYmE=", + "repeats": 971 + }, + { + "count": 2103201, + "lower_bound": "NmYxMjgzNDQxYmNkNDA4MGE4NTgwNGJhYjVjNzk2MmU=", + "upper_bound": "NmZiNzA3YWFiYjY2NDg0NDk4YTQzZDNhMDkwZWRkODc=", + "repeats": 5 + }, + { + "count": 2122545, + "lower_bound": "NmZjNTUwODQzM2Y2NDJmM2IxYTFhZjg2NmUzNzI5YWI=", + "upper_bound": "NzBlMzBiYTFlNDJiNGU2MTkxMDZmMWZkMzIxZDE3MGI=", + "repeats": 488 + }, + { + "count": 2142373, + "lower_bound": "NzBlODg4YTgxMzBjNDE2NGIzYTJmZjc0M2U3YmU0NjQ=", + "upper_bound": "NzIyM2VkOWZjMTgzNDYyNzkyY2RjOWRlZDY2Yjg2Y2I=", + "repeats": 971 + }, + { + "count": 2161717, + "lower_bound": "NzIzMjI4OWE1YjQ2NDlkZmE1MTFkNTliNmZiZTkzZTE=", + "upper_bound": "NzM4MTExMDU1MjNiNDhmNWIwZDA2ZWM2ZGU1MThjODk=", + "repeats": 5 + }, + { + "count": 2181062, + "lower_bound": "NzM4NzdkMTBlOGFhNDYzMTg3NmEyNzczNzJlNDU0MTU=", + "upper_bound": "NzQ5MTk2YjkxNWM2NGRlNmEzYWYyYmFmMTUzODQyMWM=", + "repeats": 5 + }, + { + "count": 2200406, + "lower_bound": "NzRhMzhhZTlmYzUyNDNkNGEzNmUyYjNkZThkODY5NzU=", + "upper_bound": "NzYxOWNkMzQ4MzJkNGEzNDlmY2VkYTAxZDg4ZTk2YWU=", + "repeats": 5 + }, + { + "count": 2220234, + "lower_bound": "NzYzN2ZjODBhMzk2NDM4OGIyNjg3NWI5YWEzMmQ2YmQ=", + "upper_bound": "NzcxNWNhYmQ4Mjk5NDBlNWIwNzJkMTZmNmJkYzZkYzI=", + "repeats": 1454 + }, + { + "count": 2239578, + "lower_bound": "NzcxYWVlNWZjYjRlNDRiMmJkZGU4YWQwOTI5OTQ5NTI=", + "upper_bound": "Nzg0ZDA4MDRiNWU3NGQ0OGJmNDFhNDYzNzk2YTNjYTU=", + "repeats": 488 + }, + { + "count": 2258922, + "lower_bound": "Nzg1NDVjYmZjMDc3NDhlNmFjNGY5YjBmNDljNjYxYjM=", + "upper_bound": "NzlhZWI4ZWRiOGE1NGE3OGE0OGQ0N2JiNTA3YjZlZGU=", + "repeats": 5 + }, + { + "count": 2278266, + "lower_bound": "NzliMjE1M2M5OWE2NGQwNzllNzBkYzg1M2YwOGE0ODY=", + "upper_bound": "N2IxNmJkZTQwNzM5NGNiNjg5NmQ5Y2FiMzA3YjY2NDc=", + "repeats": 488 + }, + { + "count": 2298094, + "lower_bound": "N2IxZTJiYjAxNDA4NDBhMmE1YWVmMjI2NWNkYjFhODE=", + "upper_bound": "N2MxNWU3YjM1MDE4NDUxMThlN2RmNTJhZDRiYjIyN2I=", + "repeats": 971 + }, + { + "count": 2317438, + "lower_bound": "N2MxNjFiNTUzNjVhNGJkOThmNzhhMTcwODkzMjk1ZDk=", + "upper_bound": "N2NjNTNiODM2ZjBkNGVmYTkxN2FkMjJlODNkNjFkZTM=", + "repeats": 5 + }, + { + "count": 2339201, + "lower_bound": "N2NjNThlYTg4ZDhlNDQ3NmJmM2VlODM2NWVlMDBmMGQ=", + "upper_bound": "N2RmOGEyZjI3NTYzNGJkZDkxNDllNDllMDBjNWQ4ZjQ=", + "repeats": 2420 + }, + { + "count": 2359029, + "lower_bound": "N2UwMmMwOWM0MzExNGQzZmJkYjMxNGE5Zjg5ODBiMGU=", + "upper_bound": "N2YzMjk0NDA1NWUyNDE3ZTk1NDY4YzExYTRkMGJjODg=", + "repeats": 488 + }, + { + "count": 2378373, + "lower_bound": "N2YzMmRkOTFlNTgwNDM2YWJmM2M1OGVhOGE3ZTdhMGU=", + "upper_bound": "ODA3OTQ4YWIwNjU0NDMwYzg2MDQzODYzYjRmYmI4Zjg=", + "repeats": 5 + }, + { + "count": 2397717, + "lower_bound": "ODA5NjhiNzdhMjMzNDM0MmJkMjM0YmM1OGFkYjU3OTE=", + "upper_bound": "ODFkNjg5NTc1MjI0NDE5MThmMjc3NTQ4ZjIzZmFmNmY=", + "repeats": 5 + }, + { + "count": 2417545, + "lower_bound": "ODFkN2U2NmUwNjdlNDcxYmEyMmRlZTg1MWUwZjU4NTg=", + "upper_bound": "ODMwMGM2NWM0M2MwNDc5NjkyMzgzYzE4MzU1MGJjNWI=", + "repeats": 488 + }, + { + "count": 2436889, + "lower_bound": "ODMwMWY4YjE5N2NmNDlmYmE4MDdmYjI0Mjg2ZmY0ZDU=", + "upper_bound": "ODQ0ZTEwZTYxNTliNGU1MTliNmZjODk2ZjdkNTgyNTM=", + "repeats": 5 + }, + { + "count": 2456717, + "lower_bound": "ODQ2NDNhZGIyNTZiNDQxZDlhNzFlZTA0MDg5ZjljZmI=", + "upper_bound": "ODUzY2YxODU0NDJjNDNlN2JmMzJmMjgwMDA3YjdkMzA=", + "repeats": 488 + }, + { + "count": 2476061, + "lower_bound": "ODU0N2YyMjNhOTA2NDA4NmI0NjFhNDViNjFlYjM1ZDg=", + "upper_bound": "ODYyMTQ3MGU2MTIzNGYwYmEwYmQ1ZTdiY2U3ZGRiZmM=", + "repeats": 5 + }, + { + "count": 2495405, + "lower_bound": "ODYyNTYyODIwOWE0NDYzMmFjYmNjY2EwYThjZjcyZTM=", + "upper_bound": "ODc3N2U0YTBkZGMwNGVmNDg3NTQxODRiYjE3ZTFkOGI=", + "repeats": 5 + }, + { + "count": 2514750, + "lower_bound": "ODc4MTllM2ViN2UyNGI3YjhhNDQ1OWY4OWM4ZmZkYzM=", + "upper_bound": "ODg4MjU3MTZlYTdmNDZkNDhiMTU0YjJmZGJlNjkxMTI=", + "repeats": 5 + }, + { + "count": 2534094, + "lower_bound": "ODg5ZmU0NWIxOGYwNGM0OGJjZWMwYmQ5NjZlOGIyYjg=", + "upper_bound": "ODk4ZjY2ZDkwMDA5NDExNjg0YzNmODY5MGZkZDdkNTM=", + "repeats": 971 + }, + { + "count": 2554889, + "lower_bound": "ODk5MDhlYTVmZDUwNDNhYzhmZDY0YjI2ZTQ1YmVmZWU=", + "upper_bound": "OGE4NjdlMmY5ODdmNDdjZmE0OWIxMDFiN2FiOTQ0MDY=", + "repeats": 1454 + }, + { + "count": 2575200, + "lower_bound": "OGE4ZTJkN2FjNjhiNGVjN2E3ODE0YzdhODAyNzY2ZmY=", + "upper_bound": "OGJjMTdlMTk3MTY5NDJlZWI4NzVkODdmN2Y3MTU3NTg=", + "repeats": 971 + }, + { + "count": 2595512, + "lower_bound": "OGJkODQ1NDhiYjgwNDcyNmE2MmFkM2ZkMDE5ZmYxYjg=", + "upper_bound": "OGQ1ZjQyZmM4ZjY3NDg3ZWEzMzc2ODhkODVhOTU2ZjY=", + "repeats": 1937 + }, + { + "count": 2614856, + "lower_bound": "OGQ2MWE2MTA2NmZmNDFhNTk4ZTcyZjE0ODFjMGM4NDc=", + "upper_bound": "OGViNmMwYjczNGY4NDk0MDkxZTU0Nzk5Y2Y0MDk0YTE=", + "repeats": 5 + }, + { + "count": 2634200, + "lower_bound": "OGViYzM1NjY0NWE2NDVhMzkyNzFjNzhjZmU4MWUwZjA=", + "upper_bound": "OTA0MTlkMDIzMjMxNDQzNjg2ODQ0OGMxYmM1ZjIxNjY=", + "repeats": 488 + }, + { + "count": 2653545, + "lower_bound": "OTA0M2YwMjkyNWE5NGQxODhkZWY4ODhkNTY5Zjg0MGM=", + "upper_bound": "OTE2MGMyZWRiOGE1NGFiNWExM2UzMWVjNzM0NDNlYmE=", + "repeats": 5 + }, + { + "count": 2672889, + "lower_bound": "OTE2NjBhZGIzZDMwNGQxM2JiODJiMTI2YmNjOWVlZGQ=", + "upper_bound": "OTJkOWZlOWIzMGEwNGU2YjljNDNjNDIwMTg3ODI1MzI=", + "repeats": 5 + }, + { + "count": 2692717, + "lower_bound": "OTJkYjgwNThiMTZkNGNmZWE5MWM0MDUzZGNjNTZiNjQ=", + "upper_bound": "OTQxMTQ2MmM0MjBiNGU5MDg2Y2NhYTIyNDNjMDMwMDY=", + "repeats": 488 + }, + { + "count": 2712061, + "lower_bound": "OTQxZjIwMDY5MmUzNGJhMWEwYWEyZThjMjEzZWE0MzI=", + "upper_bound": "OTU1MjFkZDVmMzg0NDQyNDg1NWU3ZWU2NDdlY2UxYzU=", + "repeats": 5 + }, + { + "count": 2735758, + "lower_bound": "OTU1MjRlYzg5ZWI0NGM5YmEzNGU0ZDc2OWM1MDUxOWM=", + "upper_bound": "OTVjMThlNGM3ZTYyNGYzY2FmZGE5ZDUxZmE1ODdlYWQ=", + "repeats": 5318 + }, + { + "count": 2756069, + "lower_bound": "OTVlOWVkNWJkZTgwNGJmYWI5NDZiNjIxOTdmODA4YjM=", + "upper_bound": "OTZmMDA5ZjA0NDY1NGFjNThlNjgzYjU5MzI2MDI4NmQ=", + "repeats": 1454 + }, + { + "count": 2775413, + "lower_bound": "OTZmODNlNDU0YWJlNGZiMGIwMTFjZGU2ZjY1MzYzMmM=", + "upper_bound": "OTgwNjI2ZTIzMzViNGRkM2ExODgwYzdjZmExZjhlYWQ=", + "repeats": 5 + }, + { + "count": 2794757, + "lower_bound": "OTgwYTAzMjk0OWJlNDU0YmFkZDY4ZTU1MDk1NWY2ZGY=", + "upper_bound": "OThkOWEzOGZiZDI0NDNlZWE1YTQxYjc5NDg0OGFjMzE=", + "repeats": 5 + }, + { + "count": 2814102, + "lower_bound": "OThkYjMzOTE3YjFlNDVjZjhlZDJlOGI5YmViMTExYzY=", + "upper_bound": "OTk5MmU2YmQzNWE4NDlhZjgyOTgyZDgxY2QxNDlhNTk=", + "repeats": 5 + }, + { + "count": 2833446, + "lower_bound": "OTk5OGI3NTE2YjBlNGJhYzlhMWI2MTc0MTY4YzNlNTI=", + "upper_bound": "OWFiMjA3ZDExZmFlNGQ5ZWJhMDRhN2NkYTEwYTY3OTg=", + "repeats": 5 + }, + { + "count": 2853274, + "lower_bound": "OWFiNDFmZjViMmRmNDYxYWE3OWJhM2RmNjUzMjQ1YWI=", + "upper_bound": "OWI4YTkwYjYyYzJiNDAwMjlhMmRkY2JjNGU1N2Q3ZjE=", + "repeats": 488 + }, + { + "count": 2872618, + "lower_bound": "OWI5YjI3OWQ0NWNlNDQ2NDlkMjk4OGY5YWI1MjIwMDc=", + "upper_bound": "OWM0NjE4MWMwMmNkNGJmY2IyZDI1NTRiZTMzMjFiNDA=", + "repeats": 5 + }, + { + "count": 2893413, + "lower_bound": "OWM1YWYyMjg1ZmI4NGNiMmJiZWUzZTdhMmM0OWU0NzE=", + "upper_bound": "OWQ3N2U2YzM4ZTdlNDExMGFjMzhjYTBjNjA2ZDMxOWY=", + "repeats": 1454 + }, + { + "count": 2912757, + "lower_bound": "OWQ3OGI5MzI3MDFlNDEwN2EzNmYzNTY2NWUwNWUwY2E=", + "upper_bound": "OWVlNGZkY2U4OWE4NDA0YzkxZGIzNmVlYzM2MDIwY2Q=", + "repeats": 5 + }, + { + "count": 2932101, + "lower_bound": "OWVmOGRlNGRjMGU1NDczZmEzYTY3NmExMDg4ZjU3N2M=", + "upper_bound": "OWZhNDQ2Zjk2OTI4NGU4NzljZThmMzNhODRkYmFhMjI=", + "repeats": 5 + }, + { + "count": 2952413, + "lower_bound": "OWZiOTdiZWI2MTZlNDRkMmI5OTBjMWYzNjFiMTFlMjY=", + "upper_bound": "YTBjYWE3YzllZDFkNDVjOTkzNDMzYzhiYWI1MWQ3ZjU=", + "repeats": 971 + }, + { + "count": 2971757, + "lower_bound": "YTBkMTVhNjJhYzA3NDk1YTgwYjQ5ZjY2NjM2ZDRhNmQ=", + "upper_bound": "YTFhNjBiMzcyMmUyNGIzMWI5NWZkNGYwNjFmZGMxZGM=", + "repeats": 5 + }, + { + "count": 2991101, + "lower_bound": "YTFiMTI2OGRiZGJhNGYyYmFjZDlhN2JmZTIzZmYwNGM=", + "upper_bound": "YTI4NDNlNDkwNmFhNGRjOGI1YzRiYzI2YWVlNmFkN2Y=", + "repeats": 5 + }, + { + "count": 3010446, + "lower_bound": "YTI4ZDNiYWFjYWM5NGE1ZWEyNmQ4MDMxNDU0MjIzZjg=", + "upper_bound": "YTMxZGEwNGVlYjMyNGJkY2E2Njg0YjQzYmM1NWY1Zjc=", + "repeats": 5 + }, + { + "count": 3029790, + "lower_bound": "YTMyN2Y0OGI3YzI0NDE0ZGI4MDRmNDYyZjZhNDkyMzk=", + "upper_bound": "YTNkMzljYjdjMmViNDQ3NjgyM2I1NjUxN2UzYjE0Mjk=", + "repeats": 1454 + }, + { + "count": 3049134, + "lower_bound": "YTNkNDVmMmQwNTgxNGUzOWEyY2Q5Nzk2YTgxZWRlYWI=", + "upper_bound": "YTRhMmU0NWM1NDhlNDQwNmFiYWRmZjEzNzdhM2IyOGY=", + "repeats": 5 + }, + { + "count": 3068478, + "lower_bound": "YTRhM2VjN2I1MzgwNDY5NGJlYzFhZTM4ZjA0ZGU4OTI=", + "upper_bound": "YTVhNTc4YmRkYWJhNDQyNmEzYTA5YWIyYzA2NGNhM2E=", + "repeats": 5 + }, + { + "count": 3087823, + "lower_bound": "YTVhZTgwYWQyZjQ2NGMzOTk4ZGRiMTMwMTI0MTY0ODU=", + "upper_bound": "YTZhZGRkNDk2NWY0NDZkNDhhZjYyMmI4ZDlhOTliOTI=", + "repeats": 5 + }, + { + "count": 3107167, + "lower_bound": "YTZiMWM0MTA4ZTA3NDQzYmI0ZTZjNmUxMTUwOWJhZDk=", + "upper_bound": "YTdjOTJkNWE2NmMxNGZhMmFhZTczMDg5OGEyMzQzNGY=", + "repeats": 5 + }, + { + "count": 3126511, + "lower_bound": "YTdjOTliZWU4MWQ0NGMzMjgzYWM5NGQ3ZGM4NzNkNzE=", + "upper_bound": "YTkwNGIwMTMzNDUzNGNlMmJmY2M5NDczMjdhODgwYTU=", + "repeats": 5 + }, + { + "count": 3145855, + "lower_bound": "YTkwN2MyNGEzOTdkNDY5Nzg1ZjY5NDliNzgzY2JiNjA=", + "upper_bound": "YTlkYzYwMmRmMmFjNGZhMmJkY2E5ODI2ZDMyNDhkYzc=", + "repeats": 488 + }, + { + "count": 3168585, + "lower_bound": "YTllMzZiNWM1NjBkNGQ1YjljODNmMjIwMzE3NDlmMDI=", + "upper_bound": "YWIwOTk5ZDJlOGUwNGFhODg0NzEyZDU4MWMxMjhjN2Q=", + "repeats": 3386 + }, + { + "count": 3187929, + "lower_bound": "YWIwYjllYWMzYWQ4NDc5MWE2NDc5MTIyOTNmODFkZWE=", + "upper_bound": "YWJjMjUzMTQ1NGM0NDZkYTgzNjdkMjgyODU4ZThjMGE=", + "repeats": 5 + }, + { + "count": 3207273, + "lower_bound": "YWJjNDk1MWY2ZjQxNDg0MjgxODgwZjUyNDViYTYwZWI=", + "upper_bound": "YWQwOTA0NTZkMjBkNDJhYWE1ZGVkMDc1ZDhlMjRiZTY=", + "repeats": 5 + }, + { + "count": 3226617, + "lower_bound": "YWQwYWY1Y2MzNzc3NGYyZThhODY4NTA3MjRkYWFmOWE=", + "upper_bound": "YWRmYzZiYWIxNTFjNDQ2MWI5OGE2NTIwMWRiYTUyMTU=", + "repeats": 5 + }, + { + "count": 3247412, + "lower_bound": "YWUwZGFiYmViY2ZhNDZhYTk5YmNiOTQ4OGQ1NWI3OWM=", + "upper_bound": "YWVhMGJlZDFkNTRiNGVkNWEzNTg0NGNlYzQ4NDQzZTQ=", + "repeats": 2420 + }, + { + "count": 3267240, + "lower_bound": "YWViNjgxNjU2Zjg0NGE5NDkzNDliMzlmODliYzJlZTc=", + "upper_bound": "YWZhZTUyNzQ4OGQ4NDhkMjk5ZmQyMDBhMzIwNWU3NTM=", + "repeats": 971 + }, + { + "count": 3286585, + "lower_bound": "YWZiMDU4OTJlOGRhNDQwZmI3ZDE0MGVhZjRmMGNhY2U=", + "upper_bound": "YjA4ZmY0Njc4OWVhNDgwNGE1NTZiMDA3MjJiNTg2Nzg=", + "repeats": 5 + }, + { + "count": 3305929, + "lower_bound": "YjA5MmZlYzA5ODhmNGIwMGE0YjhiZmVmZGNjMTczZmU=", + "upper_bound": "YjE2MmUwMzU0NThmNDQ2Nzk4NWQyNjM5ZThkYWZmNjg=", + "repeats": 5 + }, + { + "count": 3325273, + "lower_bound": "YjE2ZWQ1MGI2YzU1NGNiN2JhZjQ5N2MzNjU5NDBjMjU=", + "upper_bound": "YjI2MGU4Y2Q4NDUyNDRmYTk4MDNkMzE3MjgzM2UyODY=", + "repeats": 5 + }, + { + "count": 3345584, + "lower_bound": "YjI2OWNmZWIyZmVhNDVmOTk0MGM5ZTMwMTQ2N2VkMmU=", + "upper_bound": "YjM1YmJlMGE3NThmNDkzZDgxODdjNTFjMzRhZGFiYzk=", + "repeats": 1937 + }, + { + "count": 3365412, + "lower_bound": "YjM2MDRiZTRmYzljNDg2YzkzZDAxNGNmNWZhOGFjYWY=", + "upper_bound": "YjQ4YjQwZTFlYjRlNGY1ZGJhOGNmMGIxODk0YjhlZGQ=", + "repeats": 488 + }, + { + "count": 3385240, + "lower_bound": "YjRhODkwZTMxNjI2NDA0OGE0NmY2MTU1ZDg1NmQwNWM=", + "upper_bound": "YjU1ODA0YWIyY2JkNDFkZjlkMjFjNmUwMDFlNWRmYmY=", + "repeats": 488 + }, + { + "count": 3406035, + "lower_bound": "YjU2OWQyNmE5NDYwNGQ3M2IxZTFmMDNmODNlZmE4Mzc=", + "upper_bound": "YjY1MzA5ZWU4NGQwNDA1Yzk1NDUzNGNhNTFiOGNkZTI=", + "repeats": 1454 + }, + { + "count": 3425379, + "lower_bound": "YjY1NzY4ZjRmODljNGRlNTliM2UxYWIzNzljMGU5OGY=", + "upper_bound": "YjcxMjYxNzg0MmIzNDI0MGFjNWUyNmE2YzI0MjIzMTY=", + "repeats": 5 + }, + { + "count": 3444724, + "lower_bound": "YjczMjQzYTJkNDVlNDljMjg4ZTVmZWU5OGU2MTgwOWQ=", + "upper_bound": "Yjg3ZjMyOTA2OTk5NDU2OTkwMzZhOGYyMDU2OTBlOGU=", + "repeats": 5 + }, + { + "count": 3464551, + "lower_bound": "Yjg4MDNlNTQ0NWFjNGQzOTljOGFiN2YwYjIyNDBjMTA=", + "upper_bound": "YjlhMGI3NjA2ZjkyNDYxMWFhMzNmNThiM2UwMmFiNTA=", + "repeats": 488 + }, + { + "count": 3483896, + "lower_bound": "YjlhM2M2YzEyYTE2NDg1NjhiNTZjZWViNTNiM2ViMmI=", + "upper_bound": "YmE2ZDU4NGU3YWRjNGM5YzhmMzdjZWExYzgyZjAxNGE=", + "repeats": 5 + }, + { + "count": 3503240, + "lower_bound": "YmE2ZmM2MWNmZmMxNDQyMThjYzE5ODZiYzE4YTM4MTI=", + "upper_bound": "YmIxZGJjYzFiZTViNGNjNTg5ZDJmNWRkZGM5OWE1YjQ=", + "repeats": 5 + }, + { + "count": 3522584, + "lower_bound": "YmIxZWZhOTIyZWM5NDZjMjlmMzQ0MTVjZmRjYjUwM2E=", + "upper_bound": "YmJmNDI3MWUyNTY3NDU2YmIzMmE4NWVlNzhmMWFlMDc=", + "repeats": 5 + }, + { + "count": 3541928, + "lower_bound": "YmJmNzM5YTljMzkwNDc4NWJlMWU5MmUxYjMxYmYyNjc=", + "upper_bound": "YmNkNWRhMmFjZWM2NDc0ZGFmOWIyYzA3Yjk2YjJiMzk=", + "repeats": 488 + }, + { + "count": 3561273, + "lower_bound": "YmNmMzVkZmJiOTFlNDFhMjgzMTgzYTAyNDZjNDY0MmE=", + "upper_bound": "YmRkOGZmMjQ1OTIyNDAyZWJmM2QzODY3ZDU3MDY0ODA=", + "repeats": 5 + }, + { + "count": 3582068, + "lower_bound": "YmRlZTdhYjgxZmI1NGY4MjllM2VhODU4Y2YzNzM2ODg=", + "upper_bound": "YmVhYTU3OWFlZjU2NGM4MzlhMDc1ZTcwZGVlZDU0ODM=", + "repeats": 1454 + }, + { + "count": 3601412, + "lower_bound": "YmVhZDI5MGVlMTI0NDFkNjhhNjZlNzgwNTMxYWJkYmQ=", + "upper_bound": "YmZiYzJhY2Y2NjE2NGZlOGFmYmQwZDFhZWUxZmVhMWE=", + "repeats": 5 + }, + { + "count": 3620756, + "lower_bound": "YmZjNTgzYTlmZjQzNDJjZDk2OTEzYTZjNzMzZjM1ZmI=", + "upper_bound": "YzEwYzRmNjU4NTNmNDc2MmE1M2IyOTI4NTFkOTVjOWE=", + "repeats": 5 + }, + { + "count": 3640100, + "lower_bound": "YzExMTA0NmFkMWFhNDhhYTg1Yzg2MzQ1ZjVkMWY4YjA=", + "upper_bound": "YzIxYjAwOGFiOGU4NGY2MGFhMmU0NjFiODg5YjFkYmY=", + "repeats": 5 + }, + { + "count": 3659445, + "lower_bound": "YzIyMzY0MzViMWFjNGE0OWEyZGI5ZDU3NmFiYTU5MmE=", + "upper_bound": "YzMxOWEwZTAwM2FjNGFkYTk4ZmU5NjE0NTdkZWM4NmU=", + "repeats": 488 + }, + { + "count": 3679272, + "lower_bound": "YzMxYmNkZjJhYTM0NDA4N2FjN2IwYTg0MGQxNWUzZGQ=", + "upper_bound": "YzNlYTNhNjFlN2E5NDNkOTkxMGYyYmYzZWYzZTcwN2E=", + "repeats": 971 + }, + { + "count": 3698617, + "lower_bound": "YzNlYzIyMjQ4NTIxNDI2MGI3ZWQxMDMyNzQxY2E4MTU=", + "upper_bound": "YzRlOWFhZjFlY2U4NDhlYzg1MTkxNGZjZTQ5MGY1ZmY=", + "repeats": 5 + }, + { + "count": 3718444, + "lower_bound": "YzUwODUxNWNkYWY4NGNiYWE4YTFmYmVhZmZhOWFiZTI=", + "upper_bound": "YzYyYzkxNzU0MzVhNGFhZjg5NTVhMzA2NDc0ODE2ZTM=", + "repeats": 971 + }, + { + "count": 3737789, + "lower_bound": "YzYzMzkzNmE4MDc5NDU4MmEyMGU5MzhmYjk2ZjA3ODA=", + "upper_bound": "Yzc4ZjdlM2I2N2U1NDQxZjg4Njk5NmZjOTZiYTg5NGM=", + "repeats": 5 + }, + { + "count": 3757617, + "lower_bound": "Yzc5OTU1M2JjY2JhNGM1ZTk1NzMyZGE2Mjg2Yzk5ZDc=", + "upper_bound": "Yzg4OWQxZTdiMGE1NGViNjkwM2RjZjc4NmFiNWViZGE=", + "repeats": 488 + }, + { + "count": 3776961, + "lower_bound": "Yzg5ZjY5MzllMTU5NDlhZjhjNGNmM2IwMTQxNzQzM2I=", + "upper_bound": "Yzk4MDVkMmYyNWY2NDhjODgwMjRmMmYxNzI2NjRhODI=", + "repeats": 5 + }, + { + "count": 3796305, + "lower_bound": "YzlhNGJiZjc1YzI3NGIyNGFlOWQ0MjI2YzY5NTcyOTE=", + "upper_bound": "Y2FlZjA3MjY0ZDhjNDA0YWI4MzE3NjdhZGM4MzUxZWU=", + "repeats": 5 + }, + { + "count": 3815649, + "lower_bound": "Y2FmM2NmNWYzYjA4NGU2ZmIzNGZjNjkxY2RlNzdhZDc=", + "upper_bound": "Y2MzMDE5NTc0NjJkNDIxNjk5M2M2YjQzODAyZjczNDE=", + "repeats": 5 + }, + { + "count": 3834993, + "lower_bound": "Y2MzM2RiNTA0ZDlhNDIwZjhlNzQ0MjBlOWI0ZmRjMTE=", + "upper_bound": "Y2QyNjcwYmQyYzZhNDE5Y2ExNzI3OGM5MWEyZWU5MjY=", + "repeats": 5 + }, + { + "count": 3854338, + "lower_bound": "Y2QyZWI5NzQxYTJiNGRiNTlkYTc1Y2NhNmFmNmI0Y2U=", + "upper_bound": "Y2UwMzgzOGU1YTY5NGJmNmE2MTFjNTI5MjZiMjAxZmE=", + "repeats": 5 + }, + { + "count": 3873682, + "lower_bound": "Y2UwYjY1MTc2NzdkNDQ5Mzg0YTkxNjQwMzI2NThkY2I=", + "upper_bound": "Y2YwMjk1OTNhYmIyNDMzMjkxNTJlM2VkODA1OTkyMWM=", + "repeats": 5 + }, + { + "count": 3893026, + "lower_bound": "Y2YyOWU2MjgxNjgxNDFmMThiNTBiY2VjZTgxYTQ1ZGM=", + "upper_bound": "ZDAwYTY1MzA4NGM1NDg3N2E1YzA4Mzg5MzI3ZTU2YTI=", + "repeats": 971 + }, + { + "count": 3912370, + "lower_bound": "ZDAwYjE2OWM5ZDljNDllOThjZGM0MmUxNDU3MGM3ZWI=", + "upper_bound": "ZDE1OTc5NzllMmM1NDhhOGI0N2M5MDQ0MjU0NzVkOTI=", + "repeats": 5 + }, + { + "count": 3931715, + "lower_bound": "ZDE2MjAwYzNlNDMwNDdjYzhhOThiMzYwZDY3ZDljYzA=", + "upper_bound": "ZDJhYjM2NWFhM2FlNDhmMmJhNDBmYTlmYTBiMTU5N2Q=", + "repeats": 5 + }, + { + "count": 3951542, + "lower_bound": "ZDJiODhkZjdiMWJlNDcwYzk2ZDE5ZTk0MmEwY2RhZDI=", + "upper_bound": "ZDM3NjU1MjY1MmJlNDA1ZDljOWFjYzY4ZDhmM2NiZTI=", + "repeats": 488 + }, + { + "count": 3970887, + "lower_bound": "ZDM3OWVkMGYzNzYxNGVmODg2ZWU4ZTZhZDg2ZTgyMmU=", + "upper_bound": "ZDQ3YWIyNGE5YWI5NDc5NGE5ZTVhMWRlZDIxN2U5Zjg=", + "repeats": 971 + }, + { + "count": 3991198, + "lower_bound": "ZDQ4MjA0NTQxOGEzNGZmY2I0NzVjNzc5ZmY0ODk3NjM=", + "upper_bound": "ZDVkNzE0MzQ2NjJkNDhhMWI4ODU2ZTFjODE0ZWVjZWI=", + "repeats": 971 + }, + { + "count": 4010542, + "lower_bound": "ZDVkZGZjN2RmNmY1NDk2ODg4ZmY2NjgyMDMyNDcxZjk=", + "upper_bound": "ZDcxNDY5NWQyNTY4NDM5Mjk3ZjcyZmM2MTJmMzYzYzU=", + "repeats": 488 + }, + { + "count": 4029887, + "lower_bound": "ZDczMzliNjMyMTNkNDJjOTllZDZlNjFhMDNjY2ZlYzM=", + "upper_bound": "ZDgzMThjNjcyODgxNDViYmJkZWZhNTI5ZmJlMmI4NWY=", + "repeats": 5 + }, + { + "count": 4049231, + "lower_bound": "ZDgzN2ZkN2FlNDU4NDY1N2FhM2VkNTJhMzA1OGJmYzM=", + "upper_bound": "ZDkxMmU0NzVhMmZiNDMwMjg1MGJiMDg1ZDJiODY4NTQ=", + "repeats": 5 + }, + { + "count": 4068575, + "lower_bound": "ZDkyMWZkYjQwYTMxNDg1NmEzNTUwYTgxM2NlOTNiZmE=", + "upper_bound": "ZGExZmZkZjkzYTJiNDU1NjgyMjkxNjFkYmY5YjMxNWU=", + "repeats": 5 + }, + { + "count": 4087919, + "lower_bound": "ZGEyMDcyMmU4NDQwNDgwMGIzOTE3ZjliMjc0ODZlNmM=", + "upper_bound": "ZGFjNzRiZTkyOTQ2NDI0OWFjZWFhZTY2ODY1MzZlNDk=", + "repeats": 971 + }, + { + "count": 4107264, + "lower_bound": "ZGFjOGFmNmYwNTgzNGM1Y2IyNzUyZWFkYzFhMjkxMTM=", + "upper_bound": "ZGJjOWM5ODE0Njg1NDFhZTgzZGJkZmE4MzUyZTYxMDU=", + "repeats": 5 + }, + { + "count": 4127091, + "lower_bound": "ZGJmOTMwYjkyMjUzNGEwOWI5YzQ0MTNhMzI4YWY0OWE=", + "upper_bound": "ZGQyMjUxNWU5ZGRhNDQ2MTk4Y2ZkOWRmOWU3OTE2Yzc=", + "repeats": 488 + }, + { + "count": 4146436, + "lower_bound": "ZGQzNGU4YWIzYTNjNGMyN2I0N2Q0NzU1NmRhYTJiZWM=", + "upper_bound": "ZGUxOTI4NDc1NTRjNDFhNzk5NTgwZGQ2YWFkZTFjYjc=", + "repeats": 5 + }, + { + "count": 4165780, + "lower_bound": "ZGUxZWY0ZjViZjZhNDVjYjlkMTg2ZjBlYWYxODM1OGQ=", + "upper_bound": "ZGVkZDg1ZDE1NWM2NGJkNWIxMmVkMGQ4Zjk4ZDUyNGM=", + "repeats": 5 + }, + { + "count": 4185608, + "lower_bound": "ZGYwOGJmZDZiMzg5NGZjMDlmNmM2OTU0YjlmYzk0ZDg=", + "upper_bound": "ZTA0MzllZmUwNDg5NDRlM2JiNTliZDVhMjE3NTVlMTU=", + "repeats": 488 + }, + { + "count": 4204952, + "lower_bound": "ZTA0ZDhmMzBiMDM2NDZjOWJmNzBlMmQ2NzM3NGI5ZmM=", + "upper_bound": "ZTE5YTJmZDFhZjc1NGRjNmIyMjUyYmQ2YmFlOWFkMmI=", + "repeats": 5 + }, + { + "count": 4224296, + "lower_bound": "ZTE5YWIxMzQ2YTBlNDNjNTk0MjQwMjE4ZDliOTI1NzA=", + "upper_bound": "ZTJhZjg1NmUwN2I1NGU4NjhhMjgxNTVmNmM3MWJjN2I=", + "repeats": 5 + }, + { + "count": 4244124, + "lower_bound": "ZTJjODU4YTE1NmQ3NDBjZmJhMDIzOTMxMjY1YjI5ODU=", + "upper_bound": "ZTNiNTJkOTdjZjNhNGU2YmJkNjllNTM5MzIxN2Y1OWM=", + "repeats": 488 + }, + { + "count": 4264919, + "lower_bound": "ZTNiZDgyN2NhM2I4NGEwNGE5YWQ4NzRhYWMwNGQzMmU=", + "upper_bound": "ZTQ2MzUxMTdkNWYwNDI4MTg4NGFmMTVjNDYxNWY0OTY=", + "repeats": 6767 + }, + { + "count": 4284747, + "lower_bound": "ZTQ2ODhmMWMxODA3NGRjOWEzODM3OTUxZDRiMjg2YzU=", + "upper_bound": "ZTUzOTI1YzgyMjMyNDQwYWE2YWJlZjgyZjYxMmQwNzE=", + "repeats": 971 + }, + { + "count": 4304091, + "lower_bound": "ZTUzZTM5YzBjZmVjNDdiNWI0NDNjNWM2YTc3MjBlNTk=", + "upper_bound": "ZTYxZmJkOGFkMzQxNDRiMDkxYTRlYjU0NjdlN2ExYTI=", + "repeats": 5 + }, + { + "count": 4323919, + "lower_bound": "ZTYzOTA5ZGM4MWVlNDIxMmE2ZjhmY2NjNmE1ODFjZTA=", + "upper_bound": "ZTcyOTc2Y2NlNGE0NGUzZGFhMDQ0ZGExMmMyYTc5Y2E=", + "repeats": 971 + }, + { + "count": 4343263, + "lower_bound": "ZTcyOWJiY2FlMDU5NDlkNmJlY2VkMGZlMmJjZjkxY2Q=", + "upper_bound": "ZTgwMDQ1NWU1ZjQ2NDA3YWE4YmZlYWRmNTgxMzUzY2Q=", + "repeats": 488 + }, + { + "count": 4362607, + "lower_bound": "ZTgxYTBhY2NkYTkzNGI1N2JiYjQ3M2M1M2NiZjAyNmU=", + "upper_bound": "ZThkMjNkNjk1NTEzNDk2NGFlYzU4MTYwZmQ2Y2RhNWY=", + "repeats": 488 + }, + { + "count": 4381952, + "lower_bound": "ZThlZTZiMmZlZWNmNGRjY2I3OTRmMzU4YWUwZWQwYTE=", + "upper_bound": "ZTllNWNhYjNjMzkxNDRhZjg0MjJkZDVmYWFjM2Y1OTQ=", + "repeats": 5 + }, + { + "count": 4401779, + "lower_bound": "ZTllNzJmNGI1NjI5NDlmOGI3ZDk0ZGUxOTJlYTYxZDU=", + "upper_bound": "ZWFlN2NlMDI0OTk1NGMyMWFlZDExMTZhYjIyODIzNGE=", + "repeats": 3386 + }, + { + "count": 4421124, + "lower_bound": "ZWFmMjg5YTI4Mzc5NGUzNmIzNjIwN2RhNDNmN2FlNmE=", + "upper_bound": "ZWJjMGJiZTRkMGQ5NDkyY2IxOTVhZmU2OWI3MjI0ZmY=", + "repeats": 5 + }, + { + "count": 4440468, + "lower_bound": "ZWJjMzI1ZTVjNmZjNGFhMmE3Y2E3NzYwN2I2NTk1MmM=", + "upper_bound": "ZWM2ODQ0ZDk4YTFlNGVhZWEwMWIyYTdhZmRkNTAxYzI=", + "repeats": 488 + }, + { + "count": 4459812, + "lower_bound": "ZWM3MDMzMDU2MWRmNDA1YjlmY2Q2YmRjYmFkOGQxZWY=", + "upper_bound": "ZWQ0OWZhMzQ0MzFlNDhjYmE3YTdhOTlmNmM5YWY2MzM=", + "repeats": 5 + }, + { + "count": 4488345, + "lower_bound": "ZWQ1MTcyYTUwZTgzNGNiOWI1NjdiODg3YmM3Mjk2Y2Y=", + "upper_bound": "ZWRjZmFhNWIwNmI3NGQxMWI2NzkxMzg5NmQ1M2IzMGI=", + "repeats": 15944 + }, + { + "count": 4507689, + "lower_bound": "ZWRkYjM1N2E0MGU5NDFlMGI2OTI3ODkzOTk4NDMyZTc=", + "upper_bound": "ZWVlZTgyZjc2NzU0NDJkNzgzNzgyNDcwYWJhYjM5Mjk=", + "repeats": 5 + }, + { + "count": 4527033, + "lower_bound": "ZWVmM2U4ZjdiZmE2NGI4Mzg3YjBjNDBkMjk5MWJkMTY=", + "upper_bound": "ZWZmZGNiNzMzMDc4NGU2YzlmODZmOWZhOTFkNTM4ZjA=", + "repeats": 5 + }, + { + "count": 4546378, + "lower_bound": "ZjAxNWYxNWRlNDFmNDhmZmE2OWJiNjNiY2IwNzc3M2E=", + "upper_bound": "ZjEwMGEwYWY4YjEwNGI0ZjkyYjBiOWZjZGM0NDJlODM=", + "repeats": 5 + }, + { + "count": 4565722, + "lower_bound": "ZjEzMGU3MzRmOGYyNGY4Yzg3NjVjNTA2MmZkODUwYTc=", + "upper_bound": "ZjIyYTM3MDcwNmYwNGYyNzhiNWM4ODYwMmQ3OTg2Mzg=", + "repeats": 5 + }, + { + "count": 4585066, + "lower_bound": "ZjIyYWZjZmY1N2E0NGVkNGE2YTQ2NDQwOWNkMmRiOGY=", + "upper_bound": "ZjMwOTI4Zjg5YTgxNGFiODg4ZWI0YTUwMTgwN2FlNGI=", + "repeats": 971 + }, + { + "count": 4604410, + "lower_bound": "ZjMwZTJlMmE2NTNjNGQ3MWE4MTI1ZjI0ZTY5MGFhM2U=", + "upper_bound": "ZjNlMDc2MWFhMjQ5NDJkZWJjMWNlZmZiOTIyOGE3NTA=", + "repeats": 5 + }, + { + "count": 4623755, + "lower_bound": "ZjNlMDg0NjFiNDliNDhhN2JiOTczZjZlOTMwMGNkYTI=", + "upper_bound": "ZjU3ZmE3MjU3ZGI0NGVjNjllNTk1NjU5ZmJiNGQ1Zjc=", + "repeats": 971 + }, + { + "count": 4643099, + "lower_bound": "ZjU4YTg1N2EzZmJlNGZmNzgzZDIyZDg1ZDM4NTk5MmE=", + "upper_bound": "ZjY5ZDM2YjA5Y2U1NGIwMTk3MTk1YzAzOGVkNjJmODY=", + "repeats": 5 + }, + { + "count": 4662443, + "lower_bound": "ZjZhODdhZjJlYWE1NDJlMGIyOTY5ZTQ0MWViMzU4Zjc=", + "upper_bound": "ZjczZGE3ZDA2MjIwNDU5NmI1M2UwMTcwZDNmMmMxMDU=", + "repeats": 5 + }, + { + "count": 4681787, + "lower_bound": "Zjc0Njg1YTM0OTY3NGIyYWJiOTQ5OWU2OWYzMjFlOTI=", + "upper_bound": "ZjgzOTQ2YzE2YWU0NGQyZjgzOGIyYmY4NzhjMjlhYmY=", + "repeats": 5 + }, + { + "count": 4701131, + "lower_bound": "Zjg0NGFhNjRjYzBjNDc1OTk0ZWQzYmEzZGJlYWQ3MWY=", + "upper_bound": "Zjk3YjE5YWI5YmQ3NGVlY2JjMzNlZTBmYzhlYmMxMWQ=", + "repeats": 5 + }, + { + "count": 4720476, + "lower_bound": "Zjk3ZDQ5OTU5OTFiNGMwYWJlODdkZjY4Mjg5ZDNlOTY=", + "upper_bound": "ZmE1MDI4NzY5OTQ4NDY3M2I5MzM0YTE3MzAxZTc0YzA=", + "repeats": 5 + }, + { + "count": 4740304, + "lower_bound": "ZmE1Mzk4ODZiMWUyNDcwNjhhOThlNzc5NjY0M2Q0MjY=", + "upper_bound": "ZmIzMzYzMDI5YjgxNDEwNGFmM2JjNDE2M2U5MDFmMGY=", + "repeats": 488 + }, + { + "count": 4759648, + "lower_bound": "ZmIzNGE3YzE5ZmFiNDZhMWE4MGNkYzgxNmY4NTEzNGY=", + "upper_bound": "ZmMxNzVjY2MyNGM3NDBjY2E2YmRjZDk4Y2MzNTY3ZWE=", + "repeats": 5 + }, + { + "count": 4780443, + "lower_bound": "ZmMxOWM0YzZhNmQwNDk1MGFhMmRkNWNmZTYzNGMyYmE=", + "upper_bound": "ZmQyMzFiODQwMGYyNGQzNDk4MGNlZjU4NjIzMzgyOTI=", + "repeats": 3386 + }, + { + "count": 4799787, + "lower_bound": "ZmQyM2IyNWIwYTIxNGNlMmFmYzcwNTA4YjVmOWI0Yzk=", + "upper_bound": "ZmRkZDRiYTQwOTgzNGU3ZDg2MWZkYmM3YmVmOGY5NzQ=", + "repeats": 5 + }, + { + "count": 4819131, + "lower_bound": "ZmRlMjJiNmE3YzEwNDBiOGE0NTZkMzFiYzY0ZjZkM2U=", + "upper_bound": "ZmVlODkwODE2OGM2NDY0MTk2MjBjNTQxZmFhMjVjNjg=", + "repeats": 5 + }, + { + "count": 4836058, + "lower_bound": "ZmYwNDAyYjBjNWUzNGFhYTljNDZhZTM4Zjk3OGI4Y2U=", + "upper_bound": "ZmZlNTg0ZDBkZmNjNGJiM2FjYWQ5M2RkY2I5YTkzOGI=", + "repeats": 5 + } + ] + }, + "cm_sketch": { + "rows": [ + { + "counters": [ + 969, + 1508, + 1021, + 1273, + 1884, + 2764, + 1927, + 1322, + 2450, + 2835, + 1014, + 2577, + 2415, + 2348, + 1817, + 1909, + 3396, + 4112, + 2202, + 2093, + 1246, + 4245, + 1163, + 1585, + 1913, + 1183, + 2540, + 1608, + 2078, + 692, + 1815, + 2561, + 1531, + 1850, + 3204, + 4860, + 1344, + 1272, + 1831, + 999, + 929, + 1276, + 3333, + 1055, + 1103, + 2438, + 906, + 2674, + 1471, + 3156, + 3596, + 2486, + 1234, + 1329, + 2452, + 678, + 1329, + 2132, + 2158, + 768, + 1201, + 2416, + 2620, + 5031, + 1436, + 2312, + 2809, + 1765, + 2301, + 3045, + 2503, + 1181, + 3334, + 1187, + 1063, + 1533, + 3841, + 1325, + 2713, + 4497, + 1183, + 2834, + 1207, + 3112, + 1945, + 2086, + 2647, + 2360, + 2145, + 1589, + 1206, + 2416, + 2890, + 1186, + 3443, + 2986, + 2448, + 2100, + 1845, + 1307, + 2104, + 1836, + 1205, + 1275, + 2680, + 2212, + 2987, + 1157, + 5727, + 3582, + 722, + 5798, + 1938, + 2312, + 5468, + 1716, + 3089, + 1903, + 1118, + 3285, + 2496, + 2041, + 1363, + 2941, + 2077, + 3455, + 2771, + 2328, + 1292, + 2532, + 3266, + 1243, + 2274, + 2173, + 718, + 992, + 2160, + 3456, + 4524, + 2080, + 1737, + 3213, + 1772, + 2060, + 5358, + 2573, + 2717, + 1666, + 5445, + 2519, + 2276, + 1931, + 2784, + 2099, + 3284, + 2547, + 1875, + 1281, + 2698, + 1483, + 2169, + 1801, + 1955, + 2284, + 1693, + 2798, + 1805, + 2527, + 1762, + 1600, + 2121, + 3733, + 871, + 7582, + 3977, + 3150, + 1938, + 2080, + 3075, + 1444, + 1493, + 1859, + 3947, + 4498, + 1380, + 2798, + 1107, + 4724, + 2969, + 2149, + 1338, + 704, + 2849, + 1946, + 2928, + 4010, + 1929, + 1883, + 3986, + 1046, + 3079, + 5554, + 2321, + 4373, + 2498, + 2401, + 1638, + 1404, + 2002, + 891, + 1982, + 4574, + 809, + 2908, + 1693, + 1669, + 1068, + 2549, + 2263, + 1951, + 1594, + 3112, + 695, + 1829, + 2095, + 2013, + 1525, + 1733, + 2277, + 1604, + 2567, + 2690, + 2625, + 1008, + 2496, + 2710, + 2913, + 3229, + 2265, + 3464, + 3477, + 4304, + 1372, + 4711, + 2528, + 1566, + 743, + 1703, + 974, + 2914, + 1840, + 1460, + 2272, + 1427, + 937, + 1828, + 1583, + 998, + 666, + 1023, + 2581, + 1735, + 3204, + 1801, + 949, + 3972, + 994, + 2601, + 3066, + 1383, + 2850, + 1431, + 2248, + 1286, + 4660, + 4246, + 914, + 733, + 2967, + 1847, + 3950, + 4370, + 1517, + 2832, + 1735, + 7731, + 1248, + 2931, + 720, + 3486, + 881, + 3069, + 1265, + 1809, + 2791, + 2202, + 1389, + 1848, + 1058, + 2876, + 3043, + 2773, + 1497, + 2477, + 2338, + 702, + 2497, + 1888, + 4186, + 2444, + 844, + 1303, + 4183, + 2101, + 1534, + 2544, + 673, + 2654, + 2930, + 2855, + 3302, + 3560, + 1515, + 1789, + 1943, + 1410, + 3234, + 970, + 1999, + 4249, + 2491, + 1733, + 3976, + 2197, + 2721, + 850, + 4740, + 1313, + 2128, + 1646, + 2856, + 3408, + 2244, + 2968, + 2239, + 3141, + 3431, + 6849, + 2951, + 2783, + 1880, + 3026, + 2313, + 2566, + 1384, + 1630, + 2081, + 3046, + 2001, + 3733, + 4783, + 2594, + 1131, + 3066, + 963, + 1959, + 2728, + 3556, + 723, + 2493, + 2672, + 3153, + 2357, + 2885, + 1563, + 4256, + 3112, + 3589, + 2855, + 2644, + 3763, + 1584, + 1128, + 3932, + 2827, + 3438, + 2575, + 2547, + 1219, + 1423, + 1740, + 1156, + 2304, + 1326, + 1630, + 1068, + 2403, + 4787, + 1316, + 2065, + 1941, + 2993, + 1638, + 2390, + 2341, + 2903, + 3262, + 547, + 1314, + 3388, + 1060, + 2258, + 1882, + 4587, + 2596, + 3216, + 1908, + 1938, + 1703, + 1666, + 4197, + 3404, + 2863, + 1744, + 3696, + 1457, + 2816, + 1197, + 2015, + 1948, + 1666, + 1556, + 3004, + 1471, + 1267, + 3854, + 2302, + 1060, + 2313, + 3575, + 800, + 4513, + 2322, + 3744, + 2419, + 1912, + 2634, + 3255, + 2505, + 1530, + 2290, + 1615, + 3904, + 5057, + 2372, + 2191, + 1483, + 2847, + 2330, + 1809, + 1500, + 2797, + 1635, + 3326, + 2580, + 1351, + 847, + 681, + 1778, + 4134, + 3368, + 3605, + 943, + 3070, + 1906, + 3074, + 3732, + 2753, + 1610, + 1503, + 3571, + 1586, + 652, + 4172, + 1870, + 2815, + 3327, + 7370, + 810, + 2228, + 1785, + 1678, + 1596, + 1452, + 1462, + 1058, + 2633, + 1310, + 2045, + 890, + 754, + 2849, + 1154, + 3658, + 4976, + 2427, + 3826, + 2948, + 1488, + 2385, + 929, + 1514, + 2653, + 1804, + 823, + 2257, + 1094, + 1428, + 1583, + 3328, + 1380, + 1796, + 1831, + 1529, + 1645, + 1071, + 1898, + 3304, + 1815, + 2548, + 1744, + 1342, + 2628, + 2021, + 2135, + 1795, + 2647, + 1960, + 2980, + 552, + 1742, + 939, + 2319, + 2474, + 2971, + 2816, + 3341, + 4647, + 1038, + 1687, + 2694, + 3383, + 2310, + 2180, + 2636, + 2254, + 921, + 6259, + 1904, + 905, + 1921, + 2248, + 2671, + 2246, + 2708, + 3622, + 1620, + 1312, + 1766, + 1721, + 1586, + 1304, + 1493, + 1074, + 998, + 3875, + 2519, + 4548, + 1679, + 858, + 2569, + 2114, + 1280, + 1863, + 1716, + 2602, + 1498, + 993, + 3598, + 2106, + 1423, + 2030, + 3198, + 1813, + 622, + 2462, + 2341, + 1490, + 1448, + 1319, + 1926, + 3725, + 1303, + 2419, + 2339, + 3327, + 4877, + 1371, + 3548, + 2866, + 2040, + 3094, + 1501, + 2580, + 2093, + 1491, + 4333, + 3192, + 1356, + 3149, + 2306, + 1359, + 2077, + 3265, + 1693, + 2256, + 6116, + 1809, + 1240, + 3734, + 1890, + 4485, + 4282, + 2777, + 2098, + 1690, + 1289, + 2732, + 2603, + 2382, + 3184, + 5164, + 2566, + 1826, + 1720, + 1213, + 2624, + 3153, + 1805, + 3034, + 1034, + 1718, + 3300, + 2132, + 1888, + 1984, + 2265, + 1447, + 1955, + 1183, + 1565, + 2015, + 3860, + 1797, + 2674, + 1627, + 1460, + 3482, + 1627, + 1847, + 960, + 2749, + 1802, + 2606, + 1537, + 2890, + 2696, + 2152, + 3236, + 2016, + 4209, + 1962, + 2642, + 4788, + 653, + 2849, + 4692, + 2193, + 1811, + 1640, + 1216, + 3716, + 1903, + 2562, + 5490, + 4428, + 900, + 716, + 2471, + 2117, + 2332, + 2469, + 3035, + 1258, + 995, + 3044, + 3383, + 1704, + 2184, + 2236, + 1823, + 1606, + 2140, + 4348, + 1911, + 237, + 2085, + 3684, + 2425, + 2733, + 3914, + 3799, + 1826, + 1980, + 4195, + 715, + 3606, + 3037, + 1988, + 1990, + 1670, + 1154, + 4470, + 1470, + 1677, + 3866, + 2897, + 1378, + 733, + 1045, + 3011, + 3183, + 4057, + 2691, + 1382, + 844, + 5552, + 2495, + 997, + 2292, + 1915, + 801, + 2847, + 1998, + 2034, + 3056, + 1408, + 2554, + 1939, + 925, + 1378, + 1239, + 3510, + 3085, + 3427, + 1551, + 1297, + 3833, + 1381, + 2398, + 1292, + 3086, + 3352, + 1667, + 1354, + 1733, + 2545, + 1421, + 1202, + 1631, + 1423, + 2086, + 2745, + 2795, + 3254, + 6272, + 1868, + 966, + 2148, + 3923, + 2371, + 2449, + 3177, + 2463, + 2043, + 2526, + 783, + 2955, + 4499, + 674, + 798, + 2637, + 2957, + 1811, + 3620, + 2859, + 2049, + 1652, + 2815, + 2275, + 1878, + 1220, + 3545, + 2130, + 3708, + 1048, + 935, + 2056, + 1352, + 1610, + 4349, + 2320, + 2894, + 3057, + 3230, + 2075, + 1710, + 2357, + 2016, + 2224, + 3671, + 1131, + 1945, + 1930, + 2810, + 2965, + 1461, + 2956, + 1605, + 3206, + 2803, + 1878, + 3497, + 1608, + 2559, + 1426, + 2705, + 1532, + 2908, + 3102, + 2212, + 2886, + 1462, + 1571, + 1618, + 701, + 3232, + 1774, + 2551, + 1863, + 4326, + 2590, + 930, + 1213, + 2274, + 2177, + 1901, + 3507, + 2285, + 1843, + 1326, + 1585, + 2680, + 5407, + 2734, + 2373, + 885, + 2099, + 2070, + 1489, + 3478, + 2106, + 1545, + 1715, + 3429, + 4199, + 1971, + 2105, + 931, + 2254, + 1368, + 2065, + 3104, + 1643, + 1410, + 3088, + 1688, + 3795, + 3002, + 2965, + 1342, + 1282, + 2038, + 3463, + 1098, + 2273, + 2588, + 2502, + 2490, + 4307, + 2876, + 2464, + 1886, + 2564, + 2195, + 591, + 1250, + 3179, + 982, + 1702, + 1347, + 1983, + 4620, + 3660, + 755, + 1812, + 1199, + 2926, + 1679, + 1830, + 698, + 2075, + 1708, + 3164, + 1936, + 2943, + 1548, + 3321, + 4498, + 3225, + 1993, + 2257, + 1775, + 2951, + 1186, + 3019, + 2256, + 2302, + 722, + 2034, + 914, + 2488, + 5569, + 1556, + 1106, + 1654, + 3112, + 819, + 2365, + 1850, + 846, + 1506, + 4160, + 3829, + 1639, + 2244, + 2989, + 1537, + 2286, + 2779, + 2187, + 1505, + 936, + 3339, + 4775, + 1405, + 4047, + 1334, + 3296, + 690, + 2696, + 884, + 2674, + 4045, + 2072, + 1739, + 2812, + 1737, + 3671, + 1470, + 3005, + 2305, + 1916, + 2798, + 4951, + 1527, + 2006, + 1709, + 2296, + 3126, + 2229, + 3024, + 1517, + 768, + 3047, + 1633, + 3232, + 1613, + 4116, + 2588, + 676, + 1777, + 2961, + 1499, + 2493, + 1850, + 1412, + 3150, + 3259, + 1150, + 1917, + 3317, + 1806, + 2137, + 2691, + 1050, + 701, + 2768, + 1905, + 2485, + 3451, + 2901, + 2253, + 1366, + 3684, + 1698, + 808, + 2473, + 3670, + 3196, + 1089, + 2360, + 4488, + 1997, + 2012, + 1691, + 2680, + 2103, + 1652, + 2906, + 2241, + 1367, + 1389, + 925, + 811, + 2390, + 3455, + 3962, + 909, + 2078, + 1948, + 6223, + 1526, + 5076, + 2262, + 1652, + 2839, + 2117, + 1847, + 1030, + 4638, + 3542, + 3791, + 1510, + 5546, + 4070, + 1668, + 1692, + 1249, + 1745, + 2055, + 2911, + 1892, + 2010, + 2527, + 1574, + 1610, + 1845, + 3637, + 705, + 1387, + 2458, + 5861, + 2446, + 2337, + 1583, + 3068, + 2345, + 7296, + 1292, + 1596, + 970, + 3816, + 3187, + 3408, + 3016, + 1132, + 3473, + 923, + 1318, + 1411, + 4413, + 2260, + 2971, + 2075, + 2615, + 1027, + 2371, + 549, + 4757, + 2944, + 2672, + 793, + 2152, + 1254, + 3311, + 1952, + 1974, + 1938, + 3073, + 1909, + 5598, + 1776, + 1901, + 3261, + 1776, + 767, + 2550, + 3178, + 2066, + 1598, + 2796, + 2379, + 2398, + 2573, + 2390, + 1132, + 2217, + 3353, + 1202, + 5961, + 5133, + 2796, + 1384, + 3665, + 1183, + 2010, + 5378, + 2120, + 869, + 1275, + 2022, + 870, + 2990, + 862, + 607, + 1742, + 1719, + 4967, + 2419, + 1228, + 4052, + 1576, + 3601, + 1538, + 2219, + 2356, + 1446, + 2066, + 2443, + 1843, + 5805, + 3094, + 2819, + 736, + 1939, + 1889, + 1321, + 3598, + 1250, + 778, + 1957, + 1631, + 2471, + 1853, + 840, + 2514, + 832, + 2428, + 3206, + 3846, + 2520, + 771, + 693, + 1495, + 1458, + 855, + 1167, + 3240, + 3042, + 2985, + 1840, + 2529, + 3179, + 1208, + 3317, + 2141, + 963, + 1725, + 2436, + 1564, + 1796, + 677, + 2075, + 2530, + 3479, + 1474, + 1344, + 4018, + 4154, + 991, + 1846, + 2004, + 1837, + 679, + 1502, + 1051, + 1775, + 1371, + 2478, + 1156, + 1934, + 2197, + 2326, + 1348, + 2548, + 2839, + 1389, + 2301, + 2202, + 2445, + 2910, + 1187, + 3530, + 2501, + 1016, + 2579, + 584, + 2713, + 2313, + 2693, + 1604, + 643, + 4485, + 1248, + 4931, + 3748, + 2249, + 743, + 1165, + 2235, + 1210, + 2668, + 2978, + 1412, + 1444, + 2081, + 1056, + 1866, + 2309, + 2432, + 1221, + 3454, + 3901, + 2199, + 2770, + 1515, + 1701, + 763, + 3947, + 2252, + 2396, + 1682, + 3369, + 4506, + 2069, + 2921, + 881, + 2483, + 1820, + 2538, + 1761, + 3375, + 1763, + 1212, + 1487, + 1133, + 1592, + 3401, + 2376, + 1469, + 2049, + 3350, + 1544, + 1991, + 4641, + 1060, + 4543, + 1255, + 5218, + 1530, + 689, + 3465, + 1527, + 2845, + 1598, + 1534, + 2490, + 3924, + 2614, + 1084, + 1794, + 1269, + 2689, + 2061, + 1219, + 1918, + 3538, + 2433, + 2564, + 2675, + 1794, + 3186, + 2933, + 2926, + 2156, + 831, + 827, + 2450, + 1953, + 2993, + 1885, + 2723, + 7795, + 1952, + 1974, + 2235, + 1835, + 1706, + 3418, + 1010, + 1475, + 1269, + 2207, + 2271, + 4199, + 1795, + 2897, + 4443, + 3706, + 2425, + 5516, + 3918, + 4051, + 4808, + 2212, + 3338, + 3143, + 2040, + 1908, + 1947, + 875, + 1513, + 1114, + 3035, + 788, + 1088, + 1712, + 1948, + 901, + 2332, + 1584, + 1754, + 2590, + 2563, + 2818, + 2593, + 2829, + 2098, + 1670, + 1877, + 2460, + 1186, + 4221, + 2232, + 1977, + 991, + 2636, + 2682, + 2868, + 1720, + 1906, + 2610, + 1935, + 1950, + 2038, + 2815, + 2917, + 2178, + 3229, + 2165, + 2383, + 2494, + 596, + 1997, + 2490, + 978, + 899, + 4275, + 1623, + 1207, + 1645, + 631, + 717, + 2668, + 2387, + 1046, + 1740, + 1856, + 2398, + 1643, + 818, + 2554, + 1269, + 2067, + 2090, + 3510, + 1106, + 2090, + 1975, + 2492, + 1091, + 598, + 1041, + 1520, + 2829, + 3120, + 1498, + 2433, + 1628, + 2157, + 5302, + 4224, + 2331, + 1318, + 6301, + 4219, + 1346, + 886, + 2781, + 1831, + 1106, + 3260, + 2986, + 2877, + 3203, + 1171, + 2021, + 2065, + 2210, + 1599, + 2364, + 1561, + 2621, + 989, + 3986, + 1023, + 2461, + 1850, + 2219, + 2291, + 1640, + 1571, + 3169, + 4044, + 2992, + 1748, + 1688, + 2549, + 2627, + 2657, + 2934, + 1525, + 1407, + 1376, + 2158, + 4291, + 3848, + 1046, + 1597, + 2520, + 2715, + 849, + 4407, + 1535, + 5333, + 625, + 1739, + 1329, + 1788, + 1635, + 1478, + 1347, + 2980, + 1775, + 6496, + 3007, + 1919, + 3724, + 3963, + 1754, + 1548, + 3371, + 2661, + 2135, + 1364, + 1482, + 1607, + 730, + 2312, + 2150, + 1970, + 2000, + 2591, + 2974, + 1319, + 1552, + 3351, + 1585, + 1750, + 2014, + 1165, + 2778, + 1852, + 1812, + 1163, + 2303, + 5236, + 1280, + 1340, + 1328, + 3198, + 2808, + 2720, + 2008, + 2650, + 2321, + 1198, + 2116, + 2118, + 3267, + 1444, + 2431, + 1310, + 3254, + 1890, + 1842, + 1690, + 3340, + 1928, + 1260, + 2852, + 2186, + 2465, + 2757, + 5421, + 1340, + 1231, + 1661, + 1394, + 2099, + 3268, + 3708, + 1278, + 2330, + 2505, + 3439, + 2859, + 3559, + 1826, + 1612, + 2483, + 1932, + 814, + 2147, + 1588, + 2346, + 2558, + 1888, + 2197, + 1662, + 984, + 789, + 815, + 1736, + 1185, + 1666, + 1424, + 2378, + 762, + 3008, + 1331, + 5512, + 1516, + 2263, + 2465, + 2001, + 2643, + 1905, + 4757, + 2844, + 3003, + 3065, + 853, + 3232, + 1271, + 1955, + 1455, + 1463, + 820, + 3686, + 2337, + 4034, + 3080, + 1835, + 2170, + 1784, + 2393, + 4241, + 3323, + 3515, + 1924, + 2625, + 3669, + 1467, + 2030, + 755, + 2995, + 4061, + 2965, + 1779, + 1744, + 3773, + 2074, + 2844, + 1554, + 1525, + 1729, + 2102, + 3031, + 1616, + 1786, + 1277, + 1838, + 1221, + 1506, + 1961, + 1621, + 2127, + 1292, + 2351, + 2774, + 872, + 4005, + 4018, + 2647, + 1396, + 2175, + 2568, + 2482, + 2196, + 1869, + 869, + 4436, + 2585, + 3644, + 2040, + 1188, + 1627, + 1514, + 1859, + 1803, + 2883, + 3638, + 2390, + 1408, + 3631, + 2310, + 3366, + 1646, + 3803, + 2022, + 695, + 2568, + 2140, + 3081, + 1145, + 1939, + 1841, + 979, + 4321, + 605, + 2457, + 3049, + 2326, + 2492, + 3874, + 3136, + 2581, + 4043, + 2860, + 961, + 1377, + 2354, + 1859, + 1191, + 1856, + 1532, + 2032, + 3376, + 959, + 1529, + 1950, + 2100, + 2508, + 1959, + 1055, + 2302, + 1103, + 2940, + 2172, + 976, + 2174, + 2342, + 3044, + 2663, + 1215, + 3479, + 5742, + 3619, + 3374, + 2043, + 1681, + 2089, + 1602, + 1680, + 2173, + 4300, + 1388, + 1168, + 1744, + 995, + 1726, + 2700, + 2650, + 2003, + 1880, + 2490, + 1410, + 3916, + 3415, + 1712, + 1200, + 725, + 4736, + 675, + 1929, + 1538, + 3489, + 1642, + 3423, + 2109, + 882, + 1905, + 4159, + 1396, + 2429, + 3629, + 976, + 3583, + 2069, + 1178, + 1756, + 2794, + 1354, + 2116, + 850, + 2410, + 1358, + 1530, + 2607, + 2053, + 1744, + 831, + 1157, + 3474, + 2015, + 695, + 4307, + 1912, + 5702, + 2078, + 3758, + 3863, + 3216, + 5115, + 3151, + 1680, + 1375, + 3400, + 1107, + 1017, + 2756, + 1798, + 973, + 3041, + 2216, + 1983, + 1237, + 1865, + 2399, + 2692, + 2617, + 2572, + 1427, + 1472, + 3770, + 1494, + 895, + 2472, + 1623, + 2306, + 1331, + 1459, + 3678, + 2140, + 3684, + 772, + 1072, + 710, + 1677, + 1965, + 2140, + 3663, + 1935, + 2860, + 3434, + 2115, + 2916, + 2391, + 1231, + 2772, + 3076, + 959, + 2861, + 1443, + 1356, + 3121, + 1384, + 1549, + 843, + 1637, + 2642, + 2785, + 1886, + 2864, + 2363, + 2115, + 4348, + 3072, + 1653, + 1647, + 664, + 2464, + 1121, + 1191, + 3290, + 5469, + 2229, + 4137, + 2277, + 1565, + 2741, + 1193, + 1292, + 2934, + 928, + 2500, + 1907, + 1788, + 1794, + 1237, + 2084, + 2306, + 1018, + 1662, + 2297, + 3718, + 3675, + 3638, + 2619, + 2831, + 2410, + 2008, + 3943, + 2459, + 2211, + 2694, + 5578, + 4136, + 3001, + 2989, + 2253, + 1545, + 3165, + 853, + 3194, + 1070, + 2059, + 2599, + 1654, + 2277, + 4047, + 2016, + 2865, + 2285, + 1349, + 1791, + 3321, + 2515, + 1914, + 2305, + 1441, + 2483, + 6679, + 1300, + 907, + 2075, + 1020, + 1983, + 3307, + 3518, + 1693, + 2198, + 2267, + 1707, + 2184, + 1663, + 3556, + 3255, + 1737, + 1565, + 2884, + 1411, + 3167, + 2279, + 3192, + 1870, + 2607, + 970, + 2991, + 2083, + 4688, + 2635, + 3512, + 2169, + 1098, + 1795, + 3680, + 1513, + 2100, + 2613, + 2751, + 1909, + 1466, + 2861, + 2890, + 785, + 1436, + 3603, + 3172, + 2244, + 1999, + 8708, + 3105, + 1612, + 768, + 1141, + 2807, + 2422, + 1481, + 590, + 4111, + 3882, + 1047, + 3124, + 777, + 2412, + 2354, + 1102, + 2910, + 4867, + 1756, + 3557, + 2687, + 1762, + 2628, + 3096, + 2596, + 1821, + 2210, + 2382, + 1558, + 3488, + 2565, + 1555, + 4164, + 1374, + 3906, + 2060, + 2184, + 3012, + 1059, + 1938, + 2152, + 1172, + 2007, + 1651 + ] + }, + { + "counters": [ + 2960, + 3751, + 2410, + 1537, + 4044, + 5659, + 2290, + 4501, + 1773, + 2298, + 1996, + 1562, + 1870, + 4511, + 2667, + 3341, + 1040, + 1187, + 683, + 2298, + 1259, + 1395, + 2060, + 4976, + 2114, + 2408, + 1434, + 1142, + 878, + 1645, + 1533, + 2021, + 1582, + 2619, + 2691, + 2002, + 2113, + 1687, + 1967, + 2070, + 2683, + 1599, + 1463, + 1744, + 3109, + 4742, + 2455, + 2234, + 831, + 3376, + 3778, + 1221, + 1017, + 1631, + 1816, + 1111, + 1917, + 1488, + 2047, + 2881, + 2442, + 3808, + 1806, + 1455, + 1605, + 3048, + 2669, + 1937, + 2090, + 2270, + 859, + 2295, + 4275, + 2305, + 4879, + 2070, + 3072, + 2993, + 790, + 1913, + 1586, + 2567, + 3116, + 1757, + 3995, + 2522, + 2163, + 2558, + 2602, + 1585, + 3136, + 1277, + 3307, + 912, + 1814, + 2756, + 3812, + 1962, + 2827, + 1474, + 2314, + 1846, + 3616, + 1049, + 1611, + 2605, + 1458, + 2142, + 4332, + 2111, + 627, + 1391, + 2750, + 3586, + 704, + 1203, + 2664, + 3232, + 2230, + 3071, + 3050, + 3392, + 1168, + 3182, + 1815, + 3077, + 773, + 1927, + 1561, + 3253, + 863, + 6665, + 2136, + 1112, + 1901, + 1458, + 2691, + 783, + 5909, + 568, + 4266, + 1171, + 2736, + 2091, + 786, + 1265, + 1718, + 3668, + 908, + 1769, + 1792, + 2039, + 2645, + 2500, + 3906, + 1357, + 2839, + 1085, + 1479, + 4905, + 1487, + 1976, + 2873, + 1776, + 3412, + 2546, + 642, + 2635, + 2900, + 2539, + 1613, + 2948, + 1540, + 744, + 3089, + 3429, + 2677, + 2341, + 1042, + 1707, + 1114, + 739, + 2416, + 2440, + 2767, + 2506, + 3999, + 6847, + 2032, + 2998, + 1057, + 1795, + 2132, + 2051, + 2084, + 3605, + 2385, + 1784, + 1890, + 1057, + 2538, + 2468, + 4772, + 1074, + 1941, + 3071, + 2615, + 2314, + 3063, + 2295, + 3958, + 2139, + 1226, + 3917, + 832, + 3067, + 1789, + 1723, + 3318, + 794, + 2621, + 2470, + 3247, + 2017, + 1125, + 3917, + 1182, + 1236, + 1026, + 866, + 2375, + 1818, + 2393, + 569, + 3984, + 2474, + 2312, + 3180, + 1640, + 974, + 4494, + 2786, + 1369, + 2143, + 3209, + 2399, + 3898, + 1605, + 2774, + 1599, + 3573, + 1593, + 1757, + 3896, + 3997, + 858, + 3025, + 785, + 2260, + 3469, + 1968, + 2857, + 3444, + 1641, + 1776, + 3386, + 2355, + 1611, + 1970, + 1083, + 1672, + 1500, + 1639, + 1376, + 4162, + 1961, + 4654, + 773, + 1522, + 1410, + 2668, + 942, + 4897, + 4053, + 1812, + 777, + 2655, + 2788, + 1729, + 1693, + 1175, + 1230, + 2859, + 1246, + 1607, + 2195, + 1994, + 1709, + 2447, + 1349, + 1952, + 2042, + 2538, + 2151, + 1639, + 1450, + 2766, + 2051, + 3344, + 3409, + 1496, + 1812, + 4020, + 4373, + 1926, + 1105, + 3314, + 2283, + 6586, + 1294, + 1945, + 3217, + 1084, + 3127, + 2162, + 1497, + 1366, + 2802, + 2974, + 1417, + 3347, + 4712, + 1192, + 1448, + 1019, + 2776, + 1994, + 2861, + 1615, + 2126, + 2949, + 2989, + 2540, + 1495, + 2380, + 1032, + 1548, + 2551, + 1346, + 2087, + 3867, + 2103, + 1951, + 2421, + 793, + 2209, + 3045, + 2388, + 2255, + 4591, + 2054, + 1713, + 1505, + 1111, + 2535, + 1296, + 2519, + 3445, + 3274, + 1718, + 2989, + 1199, + 4073, + 694, + 1665, + 2138, + 3950, + 1642, + 1696, + 1053, + 2182, + 2233, + 2458, + 5198, + 1638, + 3113, + 1356, + 2501, + 3824, + 1118, + 2928, + 2203, + 3452, + 1883, + 1130, + 819, + 2768, + 2363, + 2347, + 3743, + 2846, + 2312, + 2636, + 3039, + 704, + 2187, + 3335, + 2408, + 4547, + 2053, + 1967, + 2012, + 735, + 1756, + 1264, + 3354, + 709, + 2363, + 3692, + 936, + 755, + 1380, + 2927, + 2040, + 1412, + 1068, + 3145, + 3015, + 983, + 3251, + 1540, + 2031, + 2443, + 2595, + 1452, + 2131, + 4015, + 763, + 1059, + 1260, + 3115, + 2668, + 935, + 2990, + 2326, + 3042, + 539, + 3026, + 1976, + 1349, + 1811, + 1386, + 3014, + 826, + 3029, + 1389, + 2024, + 1501, + 2207, + 1560, + 2291, + 2347, + 1671, + 2104, + 1701, + 1697, + 1727, + 3743, + 1733, + 1441, + 3370, + 1767, + 4350, + 1453, + 2717, + 2191, + 996, + 1175, + 1180, + 1427, + 3822, + 855, + 1529, + 3360, + 1447, + 1909, + 2668, + 1942, + 2691, + 795, + 3707, + 3704, + 2049, + 3292, + 2284, + 2818, + 4543, + 1584, + 4757, + 821, + 3970, + 2716, + 3328, + 1349, + 810, + 3774, + 2448, + 3293, + 1560, + 1180, + 2383, + 978, + 3137, + 2483, + 4304, + 2721, + 2884, + 1089, + 965, + 4627, + 1529, + 1787, + 2033, + 4150, + 2871, + 1508, + 1826, + 3274, + 619, + 1188, + 3670, + 3170, + 1301, + 1629, + 4544, + 4155, + 2510, + 1639, + 2059, + 5795, + 2699, + 5274, + 4138, + 1670, + 1634, + 2097, + 1900, + 2719, + 3017, + 1544, + 1694, + 1055, + 3332, + 3722, + 2754, + 1994, + 2456, + 2886, + 3170, + 5384, + 1126, + 1934, + 753, + 3250, + 2298, + 577, + 2587, + 1892, + 1711, + 3409, + 1750, + 1357, + 2090, + 2568, + 2408, + 1815, + 1838, + 2467, + 2004, + 2223, + 2296, + 1378, + 2481, + 844, + 2346, + 5798, + 1593, + 1563, + 1369, + 2571, + 3220, + 2631, + 2200, + 1889, + 4373, + 2505, + 6004, + 3403, + 2021, + 3368, + 1874, + 1163, + 813, + 2498, + 2731, + 2703, + 1828, + 721, + 1770, + 1037, + 2235, + 1249, + 1119, + 2962, + 3303, + 5876, + 3690, + 1810, + 2414, + 3656, + 1324, + 1394, + 1642, + 3188, + 1371, + 4635, + 3239, + 4371, + 1746, + 1774, + 2573, + 1663, + 2090, + 3286, + 2166, + 2411, + 1191, + 1450, + 2918, + 2252, + 3014, + 1163, + 2597, + 1264, + 3805, + 2101, + 1229, + 1958, + 2160, + 962, + 2790, + 1699, + 2963, + 1059, + 1465, + 2323, + 4435, + 2093, + 1295, + 2527, + 1678, + 1441, + 4164, + 3145, + 4531, + 1353, + 2316, + 3363, + 1294, + 1754, + 1900, + 1703, + 1642, + 1972, + 1875, + 808, + 2257, + 3399, + 1764, + 955, + 1077, + 1309, + 4389, + 2522, + 2022, + 2514, + 644, + 1952, + 1374, + 3432, + 1741, + 2581, + 784, + 1686, + 4447, + 1064, + 2500, + 2021, + 3314, + 1957, + 1575, + 1727, + 1357, + 2727, + 2035, + 3229, + 2304, + 1583, + 2584, + 2143, + 1894, + 708, + 1430, + 3075, + 2476, + 1154, + 2492, + 1376, + 1996, + 2260, + 2431, + 1172, + 2076, + 2090, + 1850, + 2125, + 1811, + 3392, + 3402, + 3348, + 1808, + 1427, + 3755, + 1870, + 1800, + 3069, + 1889, + 1024, + 3511, + 1857, + 1705, + 3655, + 2465, + 3375, + 3441, + 1627, + 2503, + 2491, + 2566, + 873, + 1131, + 2731, + 896, + 2181, + 1398, + 1195, + 1072, + 989, + 1930, + 5045, + 4468, + 5199, + 2247, + 1322, + 2282, + 1612, + 1952, + 2434, + 3076, + 4424, + 2198, + 2272, + 1930, + 1985, + 1082, + 1372, + 3050, + 2051, + 4807, + 2823, + 2023, + 1628, + 551, + 650, + 1969, + 3487, + 896, + 1789, + 2177, + 2352, + 1051, + 2952, + 1687, + 1951, + 3086, + 2623, + 2906, + 2639, + 1540, + 1213, + 1379, + 1530, + 3379, + 2364, + 1407, + 2508, + 1132, + 3939, + 1859, + 2156, + 2952, + 1538, + 793, + 733, + 3219, + 2942, + 1622, + 1513, + 1512, + 2211, + 2433, + 2059, + 2144, + 939, + 4128, + 1428, + 868, + 1716, + 1011, + 4703, + 2191, + 4772, + 3018, + 2311, + 6049, + 2782, + 4640, + 2326, + 1778, + 3223, + 2575, + 2803, + 1158, + 4073, + 4170, + 3460, + 796, + 1710, + 1504, + 611, + 1839, + 925, + 2443, + 1376, + 3180, + 1582, + 1602, + 3447, + 3684, + 2039, + 1249, + 3085, + 4435, + 3817, + 1381, + 3385, + 2436, + 3457, + 2141, + 1897, + 1913, + 2623, + 2364, + 3346, + 2780, + 1405, + 4368, + 2246, + 3545, + 1003, + 1621, + 2875, + 3051, + 1745, + 1536, + 1782, + 5545, + 2038, + 2171, + 2822, + 890, + 1185, + 1788, + 3002, + 2019, + 4733, + 2023, + 2506, + 1853, + 2982, + 2143, + 1352, + 1787, + 903, + 4773, + 1113, + 1397, + 3381, + 3443, + 2454, + 1241, + 1010, + 1782, + 1726, + 1830, + 1256, + 3258, + 3162, + 1553, + 2133, + 1775, + 669, + 3154, + 3721, + 2843, + 3798, + 2924, + 2840, + 2601, + 2022, + 2624, + 4617, + 4045, + 2671, + 1552, + 2625, + 1684, + 3601, + 985, + 3600, + 3552, + 1204, + 2851, + 2507, + 2301, + 2278, + 2715, + 1456, + 2524, + 2360, + 3065, + 1148, + 2323, + 1887, + 1847, + 2941, + 3333, + 4635, + 4589, + 1221, + 1103, + 1960, + 1840, + 4355, + 1483, + 3583, + 1706, + 2216, + 5137, + 2023, + 3094, + 1697, + 1355, + 6237, + 1667, + 2587, + 3301, + 3111, + 5992, + 1179, + 1840, + 4867, + 4242, + 1846, + 4838, + 1063, + 2546, + 2811, + 1180, + 1232, + 1603, + 1971, + 5092, + 5018, + 656, + 1802, + 5148, + 1128, + 825, + 1813, + 3777, + 1916, + 2278, + 4032, + 1873, + 2472, + 2353, + 3229, + 1892, + 3463, + 1206, + 2767, + 2318, + 1792, + 2379, + 969, + 1071, + 1113, + 1410, + 4598, + 1425, + 1575, + 3143, + 2730, + 1658, + 2158, + 986, + 892, + 3483, + 2447, + 1635, + 2274, + 1750, + 2956, + 3186, + 1599, + 1661, + 2726, + 1291, + 3053, + 1477, + 1619, + 3049, + 1587, + 890, + 2386, + 5902, + 1840, + 760, + 2091, + 2534, + 1462, + 2473, + 5378, + 2005, + 1752, + 1644, + 2889, + 2673, + 690, + 2207, + 1987, + 1055, + 2161, + 670, + 2327, + 2967, + 2224, + 2304, + 2534, + 2274, + 1650, + 1943, + 4377, + 3375, + 1857, + 2488, + 3296, + 1934, + 2799, + 2914, + 3185, + 1429, + 3262, + 2091, + 1933, + 1584, + 839, + 1880, + 1032, + 2924, + 915, + 2385, + 3345, + 4305, + 955, + 1738, + 2160, + 2147, + 866, + 1616, + 1565, + 1499, + 862, + 3068, + 4322, + 2129, + 5850, + 1683, + 2697, + 1652, + 2226, + 1488, + 2516, + 2644, + 1461, + 1669, + 2512, + 1979, + 3594, + 1512, + 2445, + 2147, + 1337, + 1918, + 1150, + 2371, + 2213, + 1520, + 839, + 3080, + 2070, + 2497, + 2015, + 1487, + 1825, + 2710, + 1926, + 2023, + 4821, + 2153, + 5677, + 1821, + 3654, + 3778, + 888, + 1589, + 2527, + 4374, + 1833, + 2014, + 3022, + 2989, + 2981, + 532, + 3204, + 1440, + 1144, + 1794, + 1550, + 3270, + 1946, + 2652, + 3138, + 1706, + 1755, + 4934, + 3612, + 2360, + 4264, + 1554, + 2537, + 1061, + 801, + 4458, + 4080, + 2869, + 1378, + 2170, + 793, + 912, + 1247, + 2597, + 2355, + 1126, + 1321, + 1700, + 2016, + 1268, + 725, + 3141, + 1354, + 2359, + 4513, + 3798, + 1266, + 1617, + 2157, + 1516, + 3307, + 2003, + 1537, + 3642, + 4199, + 1041, + 2500, + 4650, + 601, + 1419, + 1295, + 1329, + 2587, + 2455, + 1289, + 2112, + 2397, + 742, + 1676, + 2619, + 2101, + 4510, + 1127, + 1510, + 1074, + 2558, + 794, + 2555, + 914, + 2197, + 2108, + 4411, + 3349, + 2352, + 2109, + 2210, + 1272, + 4675, + 2499, + 1224, + 2172, + 2649, + 1215, + 2646, + 1421, + 1739, + 1813, + 1872, + 1651, + 2721, + 2428, + 3289, + 2603, + 2695, + 987, + 3272, + 5277, + 1166, + 1099, + 2780, + 2829, + 2320, + 2327, + 1365, + 2920, + 2073, + 524, + 3728, + 3586, + 1663, + 3225, + 2147, + 1306, + 2598, + 2137, + 1326, + 2851, + 2303, + 1054, + 3731, + 1736, + 3497, + 1892, + 784, + 2640, + 1812, + 3750, + 2671, + 940, + 1606, + 4540, + 2030, + 907, + 936, + 1623, + 2785, + 1895, + 2979, + 3068, + 2500, + 2103, + 1787, + 981, + 2164, + 2424, + 1347, + 2022, + 2104, + 781, + 1267, + 3271, + 3246, + 6162, + 2020, + 1509, + 2484, + 2663, + 2339, + 2874, + 2378, + 4312, + 2454, + 1892, + 1240, + 1644, + 2482, + 717, + 1889, + 4290, + 1519, + 3918, + 2058, + 1323, + 4909, + 1229, + 2851, + 2576, + 2844, + 1013, + 2001, + 1470, + 2763, + 2511, + 2691, + 2470, + 2209, + 2254, + 5819, + 2204, + 613, + 2709, + 3051, + 1215, + 2606, + 1847, + 2800, + 1790, + 1439, + 1213, + 1600, + 1846, + 4393, + 1686, + 2896, + 2053, + 1782, + 2153, + 3508, + 1188, + 4686, + 2315, + 3750, + 1231, + 685, + 3414, + 1906, + 1863, + 4242, + 2234, + 2069, + 2717, + 3625, + 2459, + 2695, + 1692, + 2732, + 3302, + 1602, + 4349, + 3873, + 2783, + 4465, + 1556, + 1759, + 3841, + 1050, + 2558, + 1413, + 2221, + 1517, + 2553, + 2093, + 2542, + 1641, + 1585, + 754, + 1558, + 1099, + 1061, + 4028, + 3211, + 1546, + 4181, + 1250, + 2615, + 2758, + 1965, + 2840, + 5649, + 1948, + 1412, + 1579, + 2319, + 2017, + 2118, + 1639, + 1770, + 660, + 650, + 3170, + 2880, + 1240, + 2419, + 1992, + 4796, + 1645, + 2243, + 1574, + 1410, + 2448, + 1572, + 2336, + 1851, + 2196, + 672, + 2564, + 891, + 2591, + 2795, + 2229, + 3282, + 1554, + 2560, + 4100, + 1570, + 1201, + 966, + 989, + 2409, + 2904, + 1682, + 4153, + 1401, + 1669, + 1383, + 2442, + 3022, + 1439, + 3028, + 1432, + 1182, + 3002, + 1834, + 2924, + 2145, + 2290, + 905, + 2250, + 1685, + 1624, + 3630, + 1528, + 2452, + 2242, + 1887, + 1484, + 742, + 969, + 2946, + 2121, + 3665, + 1727, + 3195, + 2590, + 1786, + 1789, + 1236, + 1181, + 2406, + 609, + 1492, + 2516, + 3702, + 2395, + 1318, + 2624, + 2537, + 1886, + 1512, + 2490, + 3090, + 2410, + 2270, + 3745, + 1341, + 1490, + 2041, + 2259, + 2275, + 1294, + 2333, + 1601, + 2949, + 1034, + 3529, + 1859, + 4285, + 2629, + 1873, + 1361, + 2906, + 3525, + 1802, + 2382, + 1916, + 2049, + 2396, + 1819, + 910, + 2195, + 1229, + 4888, + 1552, + 1942, + 1435, + 826, + 1342, + 1938, + 1775, + 1829, + 712, + 1264, + 1408, + 1558, + 2195, + 2879, + 1129, + 828, + 4830, + 2767, + 1442, + 1478, + 2028, + 1349, + 1513, + 1956, + 2170, + 1307, + 1271, + 2378, + 1981, + 3054, + 2867, + 2390, + 1429, + 836, + 2710, + 3737, + 1542, + 3515, + 1830, + 2074, + 2438, + 2870, + 3495, + 1044, + 4520, + 3437, + 2271, + 2771, + 1843, + 1221, + 687, + 1111, + 2702, + 1018, + 2354, + 2263, + 3997, + 2431, + 2162, + 1751, + 1619, + 1544, + 3567, + 1752, + 4030, + 2037, + 4028, + 707, + 2963, + 1534, + 5134, + 2148, + 1936, + 7895, + 1322, + 1673, + 1048, + 3616, + 1986, + 1406, + 3239, + 2215, + 3229, + 3374, + 1941, + 4009, + 722, + 2638, + 729, + 1798, + 2500, + 4884, + 5813, + 2368, + 1932, + 1694, + 716, + 1669, + 2235, + 1658, + 1474, + 2792, + 1770, + 1952, + 2990, + 1065, + 2732, + 1738, + 2288, + 2875, + 2162, + 3130, + 1931, + 5306, + 1970, + 3054, + 1694, + 3517, + 3736, + 1907, + 1218, + 1510, + 1974, + 2161, + 2580, + 4929, + 2661, + 740, + 2284, + 2463, + 1455, + 2475, + 1463, + 1793, + 2778, + 2707, + 1221, + 2650, + 1545, + 2467, + 2472, + 1183, + 1023, + 3939, + 1382, + 4683, + 1370, + 3419, + 5680, + 2044, + 2419, + 1285, + 5124, + 1251, + 2277, + 2266, + 3619, + 1756, + 1535, + 1354, + 1674, + 2547, + 2894, + 2591, + 2528, + 2048, + 1539, + 3312, + 608, + 1340, + 3932, + 2665, + 1781, + 1755, + 1605, + 1524, + 1604, + 2757, + 1685, + 1960, + 1439, + 1874, + 1518, + 1855, + 3404, + 1123, + 2035, + 1818, + 1360, + 2969, + 3908, + 1363, + 592, + 1357, + 1493, + 2819, + 2348, + 2805, + 2573, + 2368, + 1271, + 2727, + 1669, + 3307, + 1744, + 616, + 6035, + 2723, + 2413, + 2803, + 1683, + 4219, + 567, + 2695, + 1984, + 2422, + 1399, + 1112, + 2014, + 3779, + 2539, + 935, + 2334, + 1683, + 3266, + 2352, + 4014, + 1353, + 4199, + 1804, + 3456, + 3302, + 4344, + 2786, + 3245, + 2792, + 1669, + 1808, + 2892, + 2879, + 2276, + 3110, + 1549, + 2585, + 1356, + 2208, + 635, + 1505, + 2101, + 3687, + 3638, + 2971, + 4573, + 1124, + 2578, + 1065, + 2346, + 829, + 2644, + 2742, + 4317, + 2727, + 1099, + 4096, + 2135, + 1068, + 1049, + 2017, + 2318, + 1839, + 1651, + 1304, + 1678, + 1586, + 2390, + 1263, + 3418, + 2394, + 1768, + 2834, + 1436, + 4288, + 2402, + 2288, + 1234, + 2633, + 1738, + 2503, + 4058, + 2796, + 846, + 3205, + 922, + 947, + 1970, + 3155, + 758, + 1972, + 1523, + 2652, + 1561, + 1897, + 1933, + 2811, + 2346, + 1193, + 3265, + 1769, + 1766, + 3532, + 1466, + 2462, + 2505, + 3821, + 6303, + 1613, + 1791, + 3192, + 2224, + 2422, + 1683, + 3432, + 2752, + 2037, + 2392, + 1512, + 1950, + 2353, + 1744, + 1411, + 2207, + 3260, + 2113, + 1356, + 3286, + 1915, + 1847, + 1949, + 2612, + 1370, + 1975, + 1340, + 2578, + 3834, + 959, + 1997, + 1087, + 1929, + 944, + 1545, + 2930, + 2153, + 2935, + 1403, + 6149, + 732, + 3331, + 1270, + 3161, + 3295, + 2002, + 1231, + 2592, + 889, + 3095, + 3109, + 3299, + 3448, + 3108, + 2860, + 2499, + 2556, + 3311, + 2406, + 1475, + 1545, + 1051, + 2292, + 3122, + 2417, + 769, + 1114, + 2536, + 1954, + 3267, + 2136, + 1694, + 794, + 3007, + 1051, + 2465, + 1745, + 1652, + 2389, + 2015, + 2043, + 3239, + 4257, + 2743, + 3329, + 2183, + 5332, + 3380, + 962, + 1572, + 1805, + 2374, + 6546, + 1796, + 1520, + 3380, + 3206, + 1192, + 749, + 2121, + 2504, + 3554, + 1101, + 1847, + 1388, + 1310, + 1571, + 5641, + 1828, + 1487, + 1652, + 1665, + 2345, + 1072, + 2310, + 2207, + 2308, + 1936, + 3052, + 1329, + 2314, + 1854, + 2911, + 1615, + 2463, + 1630, + 1613, + 1007, + 1647, + 4037, + 888, + 916, + 3516, + 2237, + 1570, + 2531, + 1916, + 2001, + 2360, + 3576, + 4531, + 769, + 3012, + 1661, + 968, + 3369, + 2335, + 1840, + 1998, + 3152, + 2652, + 3584, + 2862, + 3453, + 2480, + 4007, + 4256, + 2543, + 2205, + 2314, + 3356, + 609, + 3019, + 5902, + 2719, + 2136, + 1819, + 2985, + 1824, + 2496, + 1889, + 3201, + 735, + 2710, + 1943, + 853, + 3097, + 2445, + 5115, + 2961, + 1327, + 2571, + 928, + 2763, + 2686, + 1276, + 1426, + 1827, + 1751, + 2213, + 3695, + 2050 + ] + }, + { + "counters": [ + 1342, + 1555, + 2419, + 1214, + 3573, + 1230, + 2648, + 1835, + 2968, + 3497, + 2278, + 2807, + 1515, + 5374, + 1710, + 2068, + 2006, + 2846, + 3554, + 2763, + 1202, + 1883, + 1469, + 682, + 1199, + 1869, + 2513, + 1314, + 2070, + 2170, + 2086, + 984, + 4014, + 3840, + 2128, + 2226, + 1897, + 1615, + 3314, + 763, + 508, + 2168, + 883, + 3028, + 1045, + 1987, + 3080, + 2839, + 3103, + 2577, + 1887, + 4354, + 2354, + 1025, + 727, + 816, + 1300, + 1324, + 1456, + 2225, + 2049, + 4337, + 2473, + 1688, + 3592, + 1453, + 1308, + 4824, + 3969, + 1517, + 3032, + 1845, + 1834, + 4222, + 1872, + 3028, + 3126, + 2807, + 2053, + 1342, + 1465, + 2768, + 3079, + 727, + 1436, + 652, + 1830, + 5648, + 1094, + 2973, + 3057, + 1337, + 4111, + 2941, + 3415, + 3294, + 1881, + 1206, + 2168, + 657, + 3011, + 1436, + 3865, + 764, + 2212, + 1800, + 3133, + 2143, + 2283, + 2096, + 1725, + 871, + 2943, + 1613, + 1014, + 1353, + 4177, + 1110, + 624, + 1689, + 2451, + 2089, + 4192, + 2689, + 1356, + 2407, + 2903, + 4992, + 1571, + 2493, + 2245, + 1222, + 1626, + 3062, + 2045, + 2341, + 2564, + 1988, + 3513, + 3734, + 2708, + 2019, + 2237, + 2277, + 1283, + 1618, + 2000, + 1438, + 4239, + 2930, + 3923, + 2885, + 1535, + 3764, + 1904, + 3857, + 2816, + 1589, + 1616, + 2209, + 2731, + 2230, + 1341, + 3551, + 1765, + 2218, + 1482, + 1526, + 2227, + 2435, + 1129, + 2446, + 1811, + 1552, + 3565, + 5904, + 1452, + 2801, + 2273, + 1732, + 3030, + 1649, + 771, + 2546, + 3494, + 1030, + 1576, + 1612, + 3321, + 2047, + 921, + 1159, + 713, + 796, + 4210, + 2824, + 1166, + 6048, + 1807, + 1051, + 1264, + 1767, + 1919, + 2825, + 785, + 1451, + 2469, + 1599, + 1484, + 2518, + 2864, + 1629, + 1144, + 3261, + 2017, + 2133, + 2134, + 1836, + 2757, + 3093, + 988, + 1293, + 2085, + 2146, + 3618, + 2781, + 4073, + 1578, + 856, + 2200, + 1849, + 3731, + 3059, + 4453, + 1540, + 1954, + 1108, + 3112, + 2149, + 1202, + 4327, + 5460, + 1357, + 1533, + 2364, + 3142, + 745, + 1630, + 2183, + 3354, + 2907, + 2805, + 1466, + 3828, + 4234, + 1682, + 3368, + 1067, + 3168, + 1417, + 2882, + 2025, + 1537, + 791, + 772, + 2620, + 3929, + 615, + 4164, + 3822, + 1301, + 2074, + 3633, + 2344, + 3560, + 2897, + 3808, + 1670, + 1263, + 965, + 4759, + 2554, + 2583, + 2397, + 2785, + 2533, + 1513, + 5371, + 3801, + 6564, + 2432, + 3745, + 3691, + 1675, + 542, + 3108, + 2220, + 1128, + 3951, + 1382, + 668, + 2978, + 783, + 1384, + 3206, + 1017, + 2391, + 2081, + 2247, + 1043, + 1974, + 809, + 1172, + 2364, + 4631, + 1260, + 3691, + 2557, + 2996, + 2305, + 1743, + 868, + 1667, + 2612, + 1273, + 1528, + 1971, + 3023, + 2591, + 3101, + 3527, + 2976, + 1644, + 3872, + 1940, + 1582, + 2533, + 3527, + 2021, + 1645, + 2406, + 1968, + 2212, + 1921, + 1673, + 3285, + 1237, + 1681, + 2890, + 2170, + 4811, + 1898, + 2671, + 2946, + 1423, + 2060, + 3087, + 1331, + 1185, + 3498, + 1261, + 2286, + 2572, + 2406, + 3775, + 2332, + 1493, + 1286, + 1111, + 1250, + 1177, + 2243, + 1733, + 3563, + 2321, + 3812, + 1386, + 1341, + 2957, + 2008, + 4388, + 2104, + 3073, + 2562, + 1756, + 1214, + 1798, + 1914, + 2332, + 1044, + 3378, + 1674, + 1717, + 3201, + 3183, + 1669, + 4758, + 3038, + 1835, + 1511, + 639, + 3277, + 2614, + 2458, + 2277, + 2512, + 1533, + 3684, + 1402, + 2645, + 2024, + 1332, + 1904, + 2086, + 2014, + 1922, + 885, + 3808, + 2264, + 1564, + 3017, + 1043, + 1674, + 1494, + 3219, + 1059, + 1129, + 2513, + 758, + 2071, + 3348, + 2067, + 1751, + 1042, + 1391, + 1126, + 1502, + 1723, + 1523, + 3961, + 2601, + 1711, + 2386, + 3332, + 1321, + 2438, + 3135, + 1705, + 2540, + 2562, + 2570, + 4057, + 2881, + 1929, + 3550, + 1414, + 3280, + 975, + 2562, + 624, + 968, + 1414, + 2413, + 1030, + 3071, + 1017, + 1864, + 1158, + 1160, + 935, + 2685, + 1364, + 1811, + 1375, + 1980, + 3287, + 2891, + 1668, + 1075, + 695, + 4152, + 2079, + 877, + 2914, + 550, + 2083, + 2145, + 1979, + 1689, + 2296, + 1819, + 676, + 2469, + 1640, + 5235, + 2308, + 3536, + 1861, + 1693, + 2040, + 816, + 1539, + 2232, + 1882, + 1142, + 3009, + 873, + 2113, + 3388, + 769, + 703, + 1585, + 2150, + 2155, + 961, + 2642, + 2020, + 5825, + 1649, + 1491, + 1100, + 5119, + 958, + 3116, + 7124, + 1564, + 1380, + 2102, + 1233, + 1622, + 2969, + 1587, + 2305, + 1969, + 2096, + 1401, + 2858, + 1754, + 1467, + 1530, + 1054, + 1079, + 4882, + 1376, + 2033, + 2045, + 3312, + 3667, + 795, + 1990, + 2525, + 4726, + 710, + 1125, + 4142, + 1360, + 3018, + 766, + 3364, + 3130, + 2378, + 2127, + 1025, + 811, + 1510, + 2665, + 3611, + 2653, + 1238, + 1763, + 3497, + 2162, + 1554, + 2128, + 2575, + 3432, + 2029, + 3097, + 1863, + 1730, + 1571, + 3656, + 3700, + 3093, + 1378, + 2931, + 2346, + 2141, + 3144, + 1105, + 2663, + 1184, + 3197, + 6590, + 3236, + 2751, + 1676, + 1427, + 1515, + 1595, + 2130, + 1662, + 1681, + 2263, + 4745, + 1847, + 3057, + 3298, + 1538, + 3647, + 2541, + 1856, + 2479, + 1147, + 1861, + 505, + 1383, + 1352, + 1318, + 2204, + 2106, + 1702, + 1745, + 2095, + 1134, + 1297, + 1526, + 1830, + 2040, + 1187, + 976, + 2371, + 3577, + 1683, + 2053, + 2147, + 3870, + 3021, + 1993, + 1057, + 1434, + 2798, + 2141, + 1278, + 2158, + 4960, + 2977, + 2471, + 3643, + 921, + 2579, + 2469, + 1553, + 2761, + 1242, + 2999, + 1756, + 2609, + 1661, + 1347, + 2123, + 3556, + 1824, + 2347, + 2297, + 1472, + 2679, + 907, + 821, + 2373, + 2876, + 3070, + 2323, + 2808, + 1960, + 1821, + 2690, + 2189, + 3244, + 2330, + 2115, + 4251, + 1451, + 3309, + 1189, + 3867, + 3148, + 3827, + 2027, + 4193, + 1712, + 3758, + 1729, + 1706, + 1759, + 2736, + 2442, + 2232, + 1803, + 1104, + 2629, + 1813, + 3417, + 1358, + 1000, + 4544, + 2739, + 3266, + 2994, + 4314, + 933, + 2139, + 1166, + 3878, + 1262, + 1315, + 2181, + 1908, + 5262, + 2394, + 3982, + 1319, + 3249, + 1038, + 2160, + 1585, + 1401, + 1449, + 1908, + 2659, + 3338, + 1122, + 2924, + 3397, + 2793, + 4968, + 2091, + 565, + 2162, + 2373, + 1534, + 2892, + 2487, + 1105, + 1873, + 3199, + 1769, + 1553, + 1648, + 2142, + 2665, + 1901, + 1969, + 2111, + 868, + 4418, + 2138, + 1249, + 2445, + 1972, + 6563, + 4018, + 2184, + 3698, + 802, + 3375, + 1803, + 2229, + 1735, + 3520, + 2074, + 4436, + 3441, + 2158, + 1335, + 960, + 1375, + 1382, + 1761, + 1195, + 2254, + 6505, + 685, + 3750, + 3030, + 2492, + 3605, + 2294, + 2754, + 1945, + 1714, + 2372, + 1562, + 1767, + 1856, + 1513, + 2994, + 5132, + 4089, + 1437, + 1333, + 1094, + 1220, + 2808, + 2405, + 2122, + 2374, + 2719, + 1540, + 2855, + 2100, + 1559, + 2329, + 3577, + 1602, + 2480, + 3482, + 1386, + 3799, + 2735, + 2590, + 2127, + 5608, + 2465, + 2379, + 3926, + 2550, + 1683, + 2096, + 1977, + 915, + 2772, + 1861, + 2328, + 1998, + 3881, + 1611, + 744, + 1050, + 2230, + 1405, + 1689, + 1385, + 3300, + 2599, + 1420, + 1915, + 1899, + 1751, + 1870, + 1999, + 1207, + 2439, + 3354, + 5397, + 2204, + 2658, + 2351, + 3678, + 3882, + 1685, + 1901, + 1627, + 1165, + 815, + 2346, + 2158, + 2219, + 2127, + 4602, + 1672, + 1596, + 1425, + 2234, + 2816, + 2323, + 1226, + 1914, + 4558, + 1523, + 2808, + 2356, + 1026, + 3408, + 3617, + 1808, + 2290, + 2939, + 2483, + 3320, + 1421, + 2571, + 4908, + 2314, + 2310, + 1723, + 2065, + 944, + 4810, + 1035, + 2182, + 2216, + 1803, + 4510, + 1543, + 2522, + 1289, + 2339, + 2037, + 4157, + 2483, + 1585, + 2502, + 2111, + 2502, + 4150, + 2114, + 3176, + 3244, + 2180, + 1672, + 2854, + 1118, + 3710, + 1295, + 1802, + 1534, + 2853, + 3953, + 4440, + 3209, + 1183, + 1328, + 1287, + 2513, + 1403, + 1551, + 2061, + 2626, + 2373, + 3314, + 5677, + 1880, + 5312, + 1881, + 2870, + 1751, + 3882, + 3227, + 2996, + 2428, + 2657, + 1514, + 2856, + 1403, + 4558, + 1643, + 3032, + 1341, + 5538, + 2653, + 1088, + 3191, + 926, + 3774, + 2114, + 6362, + 2162, + 598, + 2569, + 2709, + 884, + 945, + 2955, + 3002, + 3545, + 788, + 2388, + 2251, + 1670, + 1445, + 1427, + 2196, + 1542, + 1123, + 2152, + 1639, + 3547, + 1987, + 1883, + 4304, + 848, + 2792, + 2966, + 2209, + 779, + 2721, + 2296, + 2461, + 2560, + 2142, + 2132, + 2502, + 2775, + 879, + 4190, + 1426, + 3577, + 1988, + 1841, + 1610, + 1842, + 1925, + 3343, + 1221, + 2188, + 696, + 1356, + 830, + 3255, + 2106, + 4006, + 670, + 2240, + 2452, + 949, + 1660, + 2463, + 2778, + 2369, + 2597, + 3424, + 2072, + 2298, + 2644, + 1022, + 2285, + 7394, + 1490, + 1160, + 2221, + 2091, + 1791, + 689, + 1260, + 992, + 2864, + 3142, + 2129, + 1838, + 1721, + 1734, + 2908, + 1815, + 961, + 1345, + 1096, + 2032, + 2292, + 2486, + 2340, + 4388, + 6345, + 4150, + 1491, + 1932, + 2824, + 2870, + 1518, + 1790, + 2988, + 1392, + 1125, + 2893, + 5038, + 1826, + 3240, + 3402, + 1212, + 2611, + 1102, + 1375, + 3106, + 996, + 685, + 928, + 2130, + 1414, + 1786, + 1019, + 1709, + 2339, + 2904, + 1031, + 3664, + 2319, + 2061, + 2047, + 2589, + 1268, + 1852, + 2556, + 1039, + 3846, + 2563, + 1689, + 3308, + 4403, + 2601, + 2705, + 2174, + 1060, + 2441, + 1818, + 1945, + 1018, + 2097, + 1967, + 2043, + 2873, + 1064, + 2671, + 1723, + 1268, + 1115, + 1582, + 2626, + 1891, + 2042, + 1291, + 2064, + 2394, + 3679, + 3091, + 4449, + 3208, + 1739, + 4152, + 4165, + 1289, + 2375, + 2980, + 3078, + 2611, + 2370, + 2427, + 2977, + 4401, + 2052, + 2950, + 1300, + 2872, + 1931, + 3901, + 1089, + 1971, + 1247, + 2539, + 2955, + 2513, + 1288, + 2070, + 787, + 3011, + 1918, + 2630, + 792, + 1278, + 3124, + 3058, + 1874, + 2383, + 3327, + 4560, + 2206, + 1996, + 1098, + 2257, + 876, + 2419, + 1631, + 2954, + 3452, + 2478, + 2363, + 1393, + 1374, + 1539, + 2991, + 2228, + 3227, + 4534, + 3817, + 2555, + 1897, + 2343, + 2368, + 768, + 2399, + 895, + 1459, + 3313, + 1452, + 3442, + 850, + 4408, + 4385, + 1835, + 2260, + 2508, + 1686, + 2160, + 4707, + 2153, + 1218, + 3186, + 1863, + 2794, + 3060, + 2340, + 1612, + 1288, + 2383, + 1217, + 1571, + 4303, + 866, + 1112, + 966, + 736, + 2863, + 3558, + 5232, + 3718, + 1359, + 1725, + 1724, + 2687, + 1933, + 1990, + 2335, + 2656, + 1237, + 1066, + 721, + 1937, + 996, + 3451, + 3142, + 2346, + 1357, + 3621, + 1353, + 1508, + 1310, + 1120, + 4172, + 1420, + 3182, + 2139, + 3400, + 2465, + 878, + 1125, + 1181, + 2086, + 1362, + 2367, + 534, + 1966, + 1126, + 2983, + 3239, + 1299, + 1374, + 5052, + 2748, + 2415, + 3209, + 1761, + 3148, + 851, + 1649, + 3290, + 1307, + 1390, + 3511, + 569, + 1104, + 2772, + 2737, + 1996, + 1108, + 2049, + 616, + 3819, + 2917, + 1631, + 1220, + 2081, + 2340, + 954, + 1061, + 1513, + 876, + 2449, + 2662, + 1522, + 1647, + 3266, + 1562, + 3104, + 3891, + 2265, + 1784, + 862, + 3568, + 652, + 924, + 3172, + 1430, + 1849, + 3313, + 1547, + 3939, + 5002, + 2949, + 713, + 5452, + 4202, + 2961, + 2185, + 879, + 2171, + 2378, + 1015, + 2648, + 2399, + 1601, + 808, + 777, + 2910, + 2860, + 1978, + 3339, + 4090, + 3543, + 3056, + 4557, + 3566, + 3482, + 1672, + 1513, + 1181, + 4762, + 1867, + 2182, + 4953, + 1846, + 2316, + 2351, + 1990, + 2217, + 4648, + 3060, + 3749, + 4669, + 2606, + 1529, + 4520, + 725, + 2198, + 1948, + 3335, + 2749, + 2289, + 2248, + 2789, + 2105, + 2195, + 2165, + 1292, + 1670, + 2224, + 2155, + 2839, + 2663, + 1314, + 6218, + 3087, + 741, + 1493, + 2140, + 2225, + 4140, + 818, + 2040, + 1888, + 3850, + 2717, + 1300, + 2746, + 1069, + 2483, + 1279, + 4797, + 1496, + 800, + 1272, + 1670, + 3828, + 799, + 1070, + 2626, + 2888, + 3217, + 1328, + 1571, + 1923, + 2255, + 3865, + 2094, + 2534, + 2356, + 2544, + 1882, + 1813, + 2395, + 2087, + 2946, + 1709, + 1303, + 4846, + 2139, + 1274, + 2670, + 2554, + 1611, + 1199, + 877, + 2679, + 2320, + 3038, + 2971, + 1952, + 5107, + 2244, + 1219, + 1905, + 4432, + 2474, + 2647, + 1875, + 2083, + 2461, + 1662, + 1211, + 1905, + 3041, + 1992, + 2753, + 2104, + 2621, + 2489, + 2794, + 2412, + 3543, + 3224, + 883, + 2635, + 3363, + 1229, + 1162, + 2069, + 2494, + 1222, + 807, + 2362, + 1506, + 2872, + 1818, + 3172, + 1352, + 4953, + 2012, + 2229, + 1565, + 2591, + 1546, + 2406, + 3178, + 1010, + 2587, + 548, + 1419, + 658, + 2400, + 5111, + 2297, + 683, + 1511, + 2530, + 1343, + 3316, + 4738, + 2370, + 1840, + 1478, + 2333, + 2817, + 2369, + 2212, + 1002, + 1950, + 1562, + 2225, + 1840, + 4461, + 1751, + 2108, + 2018, + 2355, + 2039, + 1959, + 1348, + 1783, + 2078, + 2803, + 1728, + 3170, + 2505, + 1613, + 4735, + 1482, + 2667, + 3598, + 1708, + 1383, + 2560, + 1326, + 2712, + 5611, + 2951, + 5444, + 2731, + 2978, + 2075, + 1590, + 3382, + 3557, + 2256, + 2446, + 4517, + 2429, + 2908, + 2625, + 3159, + 2723, + 1723, + 715, + 1679, + 2981, + 2451, + 892, + 2642, + 1669, + 1599, + 1645, + 1405, + 981, + 2833, + 1301, + 2621, + 2141, + 2187, + 4108, + 1041, + 2565, + 2274, + 2170, + 2302, + 1658, + 2387, + 653, + 2045, + 1837, + 2191, + 999, + 3193, + 2537, + 3204, + 1045, + 2706, + 5682, + 2377, + 2669, + 4478, + 2089, + 3519, + 1469, + 3286, + 1421, + 3398, + 2334, + 1557, + 2159, + 1400, + 1335, + 4149, + 1919, + 1826, + 3857, + 1499, + 1996, + 4051, + 2345, + 611, + 3000, + 748, + 1655, + 2982, + 1408, + 2807, + 4378, + 2394, + 3751, + 651, + 1913, + 3390, + 4215, + 1923, + 1189, + 2096, + 2501, + 2131, + 3236, + 4017, + 2298, + 920, + 1241, + 2943, + 848, + 606, + 1514, + 1079, + 3630, + 1534, + 2418, + 2115, + 1601, + 2444, + 2115, + 3140, + 2342, + 1734, + 2811, + 4162, + 1991, + 622, + 1072, + 3312, + 2148, + 1420, + 1242, + 2703, + 1966, + 2629, + 3208, + 4407, + 1920, + 2050, + 1210, + 1570, + 1166, + 2736, + 3827, + 2642, + 973, + 2680, + 2724, + 2425, + 2938, + 2506, + 2094, + 2023, + 906, + 1539, + 2162, + 2499, + 1886, + 1778, + 1517, + 1398, + 3431, + 1548, + 1940, + 1499, + 994, + 2306, + 2153, + 1945, + 1504, + 2464, + 1471, + 4496, + 1731, + 1443, + 1423, + 2607, + 2067, + 5276, + 1015, + 4814, + 4433, + 3458, + 1512, + 4647, + 2671, + 1681, + 1127, + 4943, + 4770, + 1381, + 3644, + 2099, + 2438, + 2280, + 1072, + 2324, + 1553, + 2198, + 958, + 1600, + 2441, + 3863, + 2249, + 1875, + 1915, + 1345, + 1536, + 1078, + 4699, + 1864, + 4124, + 4045, + 3077, + 2142, + 3835, + 1515, + 1574, + 1160, + 2469, + 2721, + 3678, + 2350, + 2413, + 2397, + 1396, + 1846, + 4286, + 1682, + 2649, + 896, + 3272, + 2425, + 2565, + 2138, + 2296, + 790, + 1161, + 4090, + 2688, + 1596, + 1598, + 1549, + 712, + 763, + 1430, + 3205, + 3868, + 2441, + 2202, + 2704, + 1819, + 1637, + 6052, + 1965, + 1072, + 1171, + 1132, + 1336, + 2368, + 2097, + 2481, + 2105, + 1746, + 2160, + 1100, + 1867, + 3149, + 1578, + 3079, + 2232, + 1523, + 2129, + 2182, + 2909, + 3966, + 1701, + 3327, + 1717, + 3274, + 1741, + 1696, + 2173, + 3597, + 3315, + 5050, + 976, + 2208, + 2193, + 1097, + 1047, + 2855, + 2838, + 1430, + 2536, + 857, + 1466, + 4983, + 2390, + 2276, + 5238, + 2649, + 1552, + 1659, + 3196, + 1369, + 3358, + 1179, + 1123, + 3841, + 2192, + 2985, + 5075, + 2710, + 5710, + 2101, + 3941, + 1751, + 3141, + 1452, + 4991, + 4419, + 1792, + 1495, + 2502, + 1688, + 920, + 1900, + 1610, + 1285, + 2009, + 1836, + 2817, + 1096, + 1728, + 2311, + 1915, + 4827, + 3334, + 5606, + 1534, + 3621, + 1231, + 1585, + 1261, + 2517, + 2496, + 4581, + 1446, + 3197, + 2527, + 1748, + 1712, + 4542, + 2406, + 3116, + 1421, + 1814, + 1855, + 2376, + 1067, + 1862, + 1932, + 2748, + 3088, + 1380, + 2125, + 1864, + 3776, + 2751, + 3844, + 2793, + 1816, + 3196, + 2101, + 1551, + 2827, + 2548, + 1994, + 2006, + 1370, + 1015, + 2508, + 2785, + 2173, + 1896, + 1680, + 1807, + 2689, + 2634, + 1287, + 6716, + 2050, + 1159, + 1397, + 2294, + 2478, + 1248, + 2450, + 1655, + 2508, + 1410, + 1480, + 4185, + 1324, + 2564, + 1263, + 4365, + 2060, + 2463, + 1285, + 723, + 1795, + 3551, + 1130, + 1699, + 2035, + 2253, + 2301, + 1617, + 1385, + 2893, + 3100, + 2943, + 1771, + 2492, + 1784, + 2338, + 2471, + 1997, + 2077, + 2998, + 1316, + 1815, + 1323, + 2229, + 1399, + 3052, + 2374, + 1720, + 3003, + 1696, + 4037, + 3311, + 2059, + 1249, + 2259, + 1291, + 1216, + 1442, + 2761, + 1754, + 5819, + 845, + 2699, + 2501, + 1273, + 1113, + 1217, + 1768, + 1825, + 1069, + 1675, + 3177, + 1964, + 2068, + 2100, + 4076, + 2473, + 953, + 1689, + 3832, + 2080, + 1797, + 1680, + 2740, + 1457, + 1881, + 1923, + 1917, + 1784, + 4953, + 2365, + 2003, + 2225, + 2390, + 822, + 782, + 2272, + 2653, + 2701, + 1606, + 1811, + 1838, + 3626, + 2148, + 1004, + 3075, + 641, + 2878, + 1656, + 2502, + 2971, + 4253, + 2179, + 1281, + 1282, + 7273, + 2885, + 1566, + 3744, + 3698, + 4599, + 1784, + 2348, + 2065 + ] + }, + { + "counters": [ + 2361, + 3464, + 2340, + 1285, + 2284, + 3473, + 1579, + 3910, + 2351, + 2097, + 1042, + 1407, + 1999, + 3256, + 2511, + 3046, + 2009, + 1874, + 1732, + 2673, + 2221, + 1238, + 2331, + 2202, + 2026, + 1581, + 1831, + 1958, + 3609, + 4339, + 5959, + 3135, + 1681, + 765, + 2787, + 2617, + 1997, + 4474, + 1068, + 1484, + 3746, + 1473, + 2118, + 1422, + 885, + 1866, + 1011, + 578, + 3305, + 2583, + 2037, + 790, + 885, + 2363, + 3414, + 1578, + 1404, + 1695, + 6826, + 2591, + 4801, + 2211, + 2652, + 1914, + 2349, + 4505, + 2380, + 2559, + 1643, + 748, + 1748, + 1991, + 2017, + 3922, + 1956, + 3656, + 1720, + 2762, + 2233, + 4088, + 2747, + 1466, + 3862, + 1474, + 1248, + 1334, + 2193, + 2092, + 1480, + 2056, + 3100, + 1835, + 3064, + 2052, + 1031, + 2141, + 2620, + 1192, + 1523, + 958, + 1431, + 1674, + 695, + 1812, + 3038, + 1417, + 4038, + 2866, + 1507, + 644, + 1056, + 1858, + 3606, + 3428, + 2612, + 2072, + 3151, + 1943, + 1277, + 3707, + 1584, + 2275, + 1593, + 3286, + 1963, + 827, + 2460, + 967, + 2156, + 598, + 3243, + 1667, + 1876, + 3011, + 2044, + 1617, + 1657, + 2215, + 1653, + 1832, + 2875, + 861, + 948, + 3636, + 1791, + 2797, + 2687, + 1759, + 3872, + 1589, + 2511, + 1083, + 1611, + 1218, + 1691, + 3037, + 588, + 8878, + 2330, + 1192, + 1286, + 3356, + 1360, + 3082, + 4366, + 1914, + 1774, + 1404, + 1123, + 1769, + 1357, + 2803, + 2529, + 899, + 2339, + 1152, + 2348, + 1032, + 966, + 681, + 2458, + 1218, + 2760, + 2216, + 4346, + 2332, + 2737, + 737, + 1170, + 2055, + 2920, + 3264, + 5198, + 3906, + 3352, + 2385, + 2528, + 3714, + 1720, + 2165, + 2668, + 2794, + 1388, + 2769, + 3021, + 2550, + 1153, + 1801, + 2891, + 2163, + 1557, + 4202, + 1195, + 3903, + 2318, + 1659, + 1275, + 3101, + 1645, + 1987, + 5947, + 1656, + 3094, + 1289, + 1784, + 1076, + 2856, + 1910, + 2323, + 1331, + 5882, + 3189, + 2921, + 2533, + 3031, + 1221, + 1694, + 1460, + 2210, + 1849, + 2635, + 1363, + 1349, + 1916, + 2396, + 1899, + 4883, + 1931, + 1193, + 2358, + 1740, + 734, + 2172, + 1493, + 2239, + 5584, + 3364, + 1549, + 1756, + 1979, + 5988, + 2347, + 2243, + 1732, + 2688, + 1116, + 1112, + 2284, + 719, + 885, + 2151, + 983, + 1528, + 2439, + 2117, + 1409, + 1432, + 1890, + 3272, + 2071, + 2208, + 4443, + 2556, + 327, + 2143, + 554, + 900, + 1202, + 3697, + 1558, + 2870, + 2833, + 1756, + 2823, + 1659, + 2503, + 1399, + 2186, + 3086, + 3785, + 6969, + 1116, + 1810, + 4454, + 1902, + 1612, + 1546, + 1302, + 2152, + 1228, + 1877, + 1078, + 1679, + 2465, + 1093, + 2021, + 3129, + 907, + 2365, + 1761, + 2564, + 2548, + 2683, + 3072, + 1017, + 3319, + 2085, + 1380, + 4011, + 3177, + 3611, + 1435, + 1557, + 2542, + 1862, + 3547, + 954, + 822, + 1758, + 1412, + 3351, + 1448, + 4800, + 1767, + 2835, + 2307, + 2911, + 1579, + 2420, + 2325, + 1350, + 5411, + 1034, + 1574, + 1846, + 2385, + 2488, + 4789, + 2306, + 2881, + 819, + 2367, + 1651, + 1139, + 3653, + 1043, + 3786, + 3065, + 1801, + 1784, + 992, + 3574, + 2231, + 4424, + 2800, + 1542, + 2657, + 2225, + 3091, + 1385, + 1698, + 1891, + 2858, + 2577, + 1697, + 1940, + 4087, + 2361, + 3570, + 1243, + 3791, + 3282, + 3463, + 2036, + 1004, + 1272, + 2838, + 1969, + 1535, + 2525, + 2736, + 914, + 1514, + 5240, + 1631, + 1078, + 1682, + 3600, + 2590, + 1819, + 2883, + 3859, + 1453, + 678, + 2030, + 3141, + 2180, + 1332, + 3673, + 4313, + 1716, + 1654, + 3589, + 1708, + 2440, + 1596, + 1423, + 1304, + 843, + 795, + 3701, + 1888, + 1948, + 2324, + 1957, + 1726, + 2328, + 2194, + 1504, + 2235, + 1514, + 2214, + 1244, + 1757, + 2800, + 3136, + 1580, + 3333, + 2013, + 2207, + 2454, + 1457, + 1003, + 1168, + 1247, + 3626, + 2481, + 2353, + 2267, + 3366, + 1478, + 1946, + 2008, + 3040, + 2986, + 1686, + 990, + 1615, + 3161, + 1581, + 5430, + 1653, + 2216, + 3379, + 2100, + 1706, + 2785, + 3324, + 1696, + 2897, + 3194, + 1396, + 3736, + 1678, + 699, + 1997, + 5614, + 3328, + 1133, + 3957, + 698, + 2269, + 2410, + 2706, + 2758, + 3276, + 876, + 1906, + 3474, + 1766, + 4060, + 3305, + 2294, + 3603, + 3442, + 2159, + 1630, + 1059, + 4456, + 2994, + 4329, + 2231, + 1573, + 1829, + 2898, + 1644, + 1338, + 3227, + 1602, + 2749, + 1006, + 1364, + 2678, + 1315, + 822, + 3013, + 2702, + 2638, + 1065, + 3689, + 1689, + 778, + 1627, + 1867, + 5585, + 1434, + 2111, + 1632, + 2510, + 3082, + 1083, + 894, + 4300, + 927, + 1308, + 2436, + 3356, + 2318, + 699, + 1631, + 1806, + 1800, + 3637, + 2492, + 859, + 786, + 3025, + 2351, + 2310, + 2141, + 2848, + 3650, + 2099, + 3188, + 2477, + 939, + 2315, + 2418, + 3467, + 1263, + 1391, + 1228, + 2799, + 3453, + 1618, + 2928, + 2434, + 2421, + 1896, + 2280, + 626, + 1054, + 1732, + 1273, + 1912, + 1508, + 4746, + 4074, + 2737, + 2214, + 2073, + 2667, + 2148, + 4746, + 2161, + 2287, + 1871, + 2042, + 3697, + 663, + 2304, + 3709, + 1544, + 1348, + 2430, + 1994, + 4414, + 2306, + 3696, + 2819, + 3409, + 3812, + 873, + 2256, + 2530, + 1544, + 2756, + 1050, + 4137, + 2735, + 1234, + 2575, + 3364, + 1188, + 3281, + 2847, + 966, + 3538, + 2266, + 1781, + 2873, + 1496, + 2194, + 1410, + 1830, + 1516, + 1894, + 3392, + 2168, + 1663, + 2422, + 2049, + 2196, + 1865, + 5242, + 1741, + 2878, + 3375, + 3261, + 2397, + 3705, + 1667, + 3133, + 914, + 1695, + 3787, + 1884, + 1481, + 2942, + 3871, + 828, + 2163, + 812, + 2843, + 2347, + 2800, + 1449, + 3516, + 1903, + 2667, + 1792, + 1798, + 2693, + 5288, + 2593, + 2955, + 2121, + 2906, + 1950, + 734, + 4680, + 7404, + 3627, + 1882, + 738, + 851, + 878, + 1831, + 1766, + 1027, + 2817, + 1988, + 1063, + 828, + 1655, + 2421, + 1658, + 2211, + 2927, + 2856, + 1325, + 2251, + 2781, + 2832, + 2429, + 2363, + 3067, + 860, + 1704, + 2246, + 751, + 1323, + 2081, + 1491, + 3797, + 1476, + 2091, + 849, + 605, + 639, + 1361, + 3703, + 2406, + 968, + 3618, + 5193, + 1635, + 3361, + 1568, + 2352, + 2946, + 1581, + 3864, + 2471, + 2789, + 3224, + 5793, + 2467, + 3213, + 2199, + 3147, + 2178, + 1573, + 2229, + 3524, + 1953, + 3198, + 1592, + 2489, + 2322, + 929, + 2791, + 1817, + 4921, + 2444, + 1789, + 3872, + 1344, + 2244, + 2025, + 1613, + 1311, + 2472, + 2986, + 5291, + 1075, + 1872, + 3461, + 1597, + 5000, + 1771, + 895, + 3057, + 2506, + 994, + 3638, + 2895, + 2206, + 2743, + 2845, + 2028, + 2044, + 2030, + 4177, + 3231, + 1984, + 2991, + 1612, + 1839, + 1120, + 2088, + 4963, + 2524, + 3315, + 4343, + 2293, + 5044, + 2321, + 2309, + 1798, + 3023, + 1184, + 660, + 2502, + 1848, + 1668, + 589, + 2516, + 3065, + 1804, + 994, + 2437, + 2080, + 527, + 3280, + 3407, + 1810, + 3326, + 1102, + 2193, + 4206, + 4545, + 1172, + 3319, + 1804, + 3695, + 2039, + 3305, + 2227, + 1975, + 2063, + 1996, + 853, + 1428, + 3126, + 2173, + 2573, + 4319, + 4359, + 2694, + 2324, + 1495, + 2173, + 3279, + 1672, + 1842, + 2249, + 1588, + 1908, + 2466, + 900, + 1449, + 3103, + 2951, + 1368, + 5250, + 2056, + 1826, + 3710, + 1597, + 3750, + 2187, + 2402, + 4108, + 1093, + 2242, + 2856, + 1371, + 2015, + 3436, + 1833, + 5136, + 1206, + 3466, + 7033, + 1974, + 3595, + 2915, + 2514, + 1402, + 1432, + 3988, + 3218, + 1467, + 2058, + 1714, + 2108, + 1977, + 2347, + 2635, + 2270, + 2171, + 3894, + 2501, + 2761, + 2369, + 2176, + 1839, + 4164, + 3757, + 2711, + 785, + 2427, + 2296, + 3663, + 982, + 951, + 2668, + 1566, + 3452, + 2615, + 1766, + 1317, + 1737, + 2630, + 2609, + 2432, + 4344, + 3310, + 1584, + 3412, + 2544, + 1391, + 4371, + 1708, + 1997, + 2874, + 3289, + 2564, + 2419, + 1121, + 1788, + 1709, + 1373, + 1772, + 3084, + 1938, + 1581, + 1144, + 1453, + 2419, + 1771, + 2987, + 1924, + 2438, + 2108, + 1816, + 1759, + 3575, + 957, + 2343, + 1639, + 1049, + 3591, + 2900, + 2415, + 3110, + 1903, + 2870, + 809, + 2084, + 968, + 1565, + 2592, + 2733, + 1587, + 2114, + 1254, + 1822, + 2313, + 3071, + 1471, + 2358, + 2669, + 1727, + 2014, + 2407, + 3343, + 2131, + 1862, + 4562, + 1625, + 1905, + 3965, + 2923, + 3021, + 1856, + 1939, + 1056, + 2417, + 1820, + 4095, + 2058, + 1042, + 2735, + 1969, + 3174, + 2328, + 3435, + 2174, + 858, + 1069, + 2429, + 1816, + 3759, + 1492, + 1685, + 2375, + 769, + 1268, + 1801, + 3764, + 1670, + 1884, + 1199, + 1791, + 3131, + 2427, + 1263, + 1165, + 2847, + 1767, + 1181, + 2541, + 1351, + 4878, + 2520, + 2451, + 3879, + 1088, + 1860, + 1278, + 1850, + 1437, + 1624, + 3009, + 3512, + 1200, + 726, + 2017, + 1124, + 1735, + 629, + 1926, + 3679, + 3830, + 1404, + 2043, + 2117, + 1026, + 2180, + 1406, + 4914, + 1984, + 3186, + 1867, + 2384, + 1505, + 3847, + 2288, + 2597, + 3243, + 1800, + 4012, + 3736, + 3543, + 1879, + 2117, + 1802, + 2318, + 1225, + 1828, + 1730, + 1031, + 1620, + 857, + 3160, + 2924, + 1311, + 814, + 2920, + 2500, + 1887, + 3342, + 1397, + 756, + 3118, + 1255, + 1788, + 3121, + 1856, + 2689, + 2257, + 2057, + 2106, + 1030, + 2614, + 2338, + 3270, + 2305, + 3140, + 2559, + 2417, + 3051, + 1690, + 2550, + 1538, + 2486, + 2363, + 2470, + 1528, + 1876, + 2591, + 2361, + 2811, + 2097, + 1155, + 2571, + 2173, + 3101, + 1482, + 1557, + 1417, + 2836, + 6233, + 1062, + 1531, + 3242, + 2162, + 1682, + 1860, + 1878, + 2796, + 1414, + 2460, + 2182, + 2695, + 1826, + 4264, + 1083, + 1628, + 1780, + 2310, + 1751, + 1128, + 3543, + 3083, + 2037, + 4133, + 1999, + 882, + 2152, + 1395, + 1822, + 1428, + 1734, + 1284, + 2412, + 2008, + 793, + 3701, + 1890, + 2712, + 1872, + 3375, + 2855, + 2295, + 1561, + 2376, + 3603, + 5369, + 1726, + 3207, + 3637, + 819, + 974, + 2262, + 1931, + 2320, + 3266, + 2398, + 1060, + 675, + 4680, + 1531, + 3162, + 2492, + 1835, + 2339, + 919, + 2522, + 2057, + 3153, + 1024, + 1720, + 1761, + 2577, + 3303, + 1366, + 2126, + 1103, + 2631, + 1864, + 1407, + 1211, + 914, + 5185, + 2041, + 2446, + 1441, + 1815, + 4272, + 2128, + 2337, + 2070, + 2103, + 1400, + 3298, + 2170, + 5124, + 1666, + 1501, + 1898, + 1044, + 3184, + 1041, + 2499, + 1677, + 713, + 1984, + 3098, + 985, + 1992, + 2397, + 1649, + 2108, + 1649, + 2770, + 3661, + 2960, + 1700, + 3248, + 1487, + 1476, + 1760, + 674, + 2640, + 4387, + 2872, + 1883, + 3488, + 3250, + 1259, + 2537, + 1375, + 2633, + 3415, + 1667, + 2779, + 2278, + 3474, + 1943, + 3400, + 3334, + 2063, + 2318, + 1175, + 2348, + 2016, + 1482, + 1559, + 1027, + 2155, + 4934, + 1462, + 1692, + 2254, + 1196, + 3720, + 5278, + 1025, + 2363, + 1305, + 2869, + 1992, + 1700, + 928, + 1963, + 3158, + 877, + 1555, + 2546, + 2669, + 1876, + 3182, + 3704, + 3029, + 2747, + 2629, + 3091, + 3717, + 2823, + 2167, + 1160, + 2116, + 2398, + 1787, + 1811, + 1564, + 3027, + 1076, + 1639, + 4354, + 582, + 1483, + 3494, + 2632, + 5111, + 4858, + 2942, + 1303, + 1247, + 4215, + 1757, + 2333, + 2471, + 1379, + 3497, + 1278, + 2671, + 1564, + 3389, + 1724, + 2647, + 1173, + 750, + 3071, + 2055, + 4634, + 1483, + 1705, + 3063, + 1946, + 3309, + 2243, + 2671, + 9344, + 716, + 2690, + 1196, + 830, + 1616, + 3070, + 2305, + 2123, + 2467, + 3887, + 2657, + 1191, + 2963, + 529, + 1851, + 1322, + 2041, + 1727, + 2067, + 2036, + 2671, + 6286, + 1744, + 2043, + 2017, + 818, + 2411, + 2992, + 1040, + 2585, + 2293, + 1212, + 2533, + 3524, + 2704, + 1221, + 1267, + 851, + 4143, + 2400, + 1852, + 2980, + 1570, + 2418, + 2065, + 1406, + 5299, + 1882, + 1610, + 3134, + 3384, + 5905, + 2846, + 3815, + 3506, + 2814, + 2138, + 3619, + 1440, + 3367, + 1982, + 1218, + 1822, + 3059, + 1036, + 1060, + 1867, + 3131, + 613, + 4423, + 1109, + 2591, + 1669, + 1894, + 1059, + 1834, + 1172, + 1416, + 3564, + 1288, + 2202, + 699, + 4298, + 1582, + 3966, + 3549, + 1893, + 2323, + 1322, + 1841, + 2354, + 3745, + 2516, + 2119, + 1395, + 2056, + 3639, + 1588, + 2606, + 1639, + 2020, + 1914, + 1813, + 2123, + 2789, + 813, + 2098, + 2050, + 2304, + 1329, + 874, + 778, + 1762, + 2474, + 1645, + 891, + 2305, + 2905, + 3359, + 1898, + 2162, + 764, + 1725, + 1278, + 1106, + 2747, + 2137, + 2655, + 2851, + 4015, + 2470, + 1447, + 2742, + 3338, + 2944, + 1939, + 2614, + 1596, + 656, + 778, + 1880, + 2173, + 2380, + 3078, + 705, + 606, + 2002, + 2400, + 2066, + 2523, + 4694, + 2870, + 722, + 2112, + 3328, + 2966, + 1024, + 1658, + 2475, + 4587, + 1884, + 1503, + 771, + 4210, + 2363, + 644, + 2936, + 1372, + 2216, + 1261, + 2008, + 3176, + 1786, + 2826, + 3833, + 2087, + 2275, + 1336, + 2362, + 1740, + 2396, + 2825, + 2258, + 3440, + 1861, + 2266, + 2761, + 830, + 2218, + 2309, + 3960, + 2143, + 3093, + 1389, + 976, + 1778, + 999, + 2538, + 4459, + 2945, + 1718, + 1409, + 2331, + 1055, + 3952, + 1560, + 3520, + 3603, + 3470, + 2846, + 2435, + 1897, + 2165, + 1051, + 1909, + 5377, + 2174, + 2332, + 5163, + 1596, + 2038, + 3229, + 3272, + 1644, + 2185, + 2163, + 2656, + 2609, + 1635, + 4110, + 3424, + 3148, + 2480, + 1923, + 1945, + 2378, + 1802, + 4071, + 3362, + 2167, + 2705, + 2177, + 3328, + 3662, + 1087, + 2139, + 2443, + 2810, + 2274, + 1751, + 2321, + 1545, + 1816, + 3333, + 2901, + 3032, + 1110, + 3152, + 1786, + 3031, + 2335, + 1443, + 1678, + 3323, + 2825, + 1804, + 4278, + 2737, + 4041, + 3234, + 1325, + 3213, + 4177, + 2621, + 1109, + 2286, + 3191, + 1296, + 1414, + 3711, + 1788, + 758, + 1272, + 2088, + 1543, + 2760, + 1473, + 2594, + 1036, + 3672, + 1679, + 982, + 1182, + 2545, + 1148, + 2900, + 3270, + 2467, + 1878, + 5788, + 1938, + 4999, + 2785, + 3396, + 1715, + 2150, + 1080, + 2295, + 3154, + 1759, + 2203, + 920, + 4934, + 649, + 1516, + 5015, + 1245, + 1676, + 726, + 1693, + 3434, + 2227, + 4109, + 2654, + 669, + 3068, + 3618, + 729, + 1540, + 3677, + 963, + 879, + 1613, + 1703, + 1364, + 2181, + 2719, + 1155, + 1101, + 856, + 2511, + 3420, + 4455, + 2407, + 1490, + 1340, + 631, + 2672, + 2401, + 2496, + 899, + 3346, + 2754, + 2619, + 1334, + 3513, + 1055, + 1110, + 3091, + 1419, + 1798, + 1450, + 1365, + 1743, + 2141, + 2254, + 1081, + 627, + 1566, + 3234, + 2798, + 1455, + 4464, + 2133, + 2535, + 2250, + 2293, + 1971, + 1045, + 1994, + 4104, + 3863, + 2621, + 1923, + 3314, + 2804, + 2208, + 670, + 2714, + 2591, + 1662, + 1355, + 600, + 2266, + 2808, + 2289, + 2621, + 2432, + 1607, + 2244, + 2425, + 2917, + 1213, + 1235, + 1851, + 1098, + 1461, + 1780, + 1480, + 1108, + 4500, + 1768, + 1880, + 3455, + 900, + 1937, + 3829, + 2735, + 2017, + 2764, + 2245, + 4261, + 3847, + 1971, + 1884, + 1859, + 1234, + 1614, + 4605, + 1316, + 2040, + 5125, + 2033, + 2601, + 4340, + 1301, + 1115, + 2652, + 3797, + 1517, + 1139, + 2860, + 1127, + 2133, + 1874, + 2030, + 3177, + 3049, + 1959, + 3913, + 1825, + 2108, + 2134, + 2930, + 1457, + 1852, + 2866, + 3603, + 420, + 835, + 1419, + 669, + 2149, + 2032, + 1189, + 1600, + 1793, + 3047, + 2187, + 2534, + 4761, + 1886, + 1733, + 903, + 2993, + 3071, + 1941, + 1688, + 876, + 1439, + 1209, + 1651, + 1816, + 1824, + 2416, + 1517, + 2933, + 2197, + 1950, + 1133, + 2810, + 956, + 2421, + 1752, + 2173, + 1492, + 1434, + 1952, + 3867, + 2497, + 2353, + 2575, + 2162, + 2645, + 1000, + 1739, + 4446, + 2212, + 1523, + 2641, + 1616, + 1409, + 2311, + 1296, + 1209, + 2307, + 3202, + 1050, + 5075, + 1854, + 724, + 2246, + 2711, + 2237, + 918, + 2447, + 2213, + 1430, + 3230, + 2735, + 3326, + 1446, + 1678, + 910, + 2338, + 1131, + 4580, + 1594, + 5165, + 1344, + 3899, + 1837, + 798, + 3470, + 2759, + 5572, + 3089, + 1169, + 946, + 2760, + 1988, + 3673, + 1990, + 1368, + 2316, + 2431, + 4526, + 1019, + 2224, + 2353, + 1434, + 2775, + 4393, + 1211, + 2920, + 2144, + 877, + 1352, + 1730, + 2393, + 2825, + 3913, + 626, + 1903, + 1562, + 4500, + 1037, + 1701, + 2328, + 3171, + 7710, + 1695, + 3640, + 2228, + 2975, + 831, + 2037, + 3208, + 1517, + 1758, + 1737, + 2711, + 2103, + 2947, + 1314, + 580, + 1885, + 1746, + 5930, + 2675, + 1981, + 2399, + 3624, + 2257, + 1193, + 1383, + 1856, + 1852, + 4208, + 821, + 2446, + 674, + 3851, + 3321, + 1797, + 1226, + 1950, + 2053, + 3784, + 1757, + 3448, + 2376, + 759, + 2574, + 1252, + 3644, + 5116, + 3882, + 1919, + 6858, + 4505, + 3307, + 3583, + 3113, + 2551, + 1497, + 4441, + 1057, + 2445, + 1461, + 2233, + 1686, + 2612, + 1582, + 2794, + 754, + 2720, + 2886, + 3255, + 2789, + 2600, + 2058, + 4839, + 619, + 3179, + 1531, + 3490, + 3255, + 1393, + 1566, + 950, + 2026, + 970, + 3215, + 4923, + 2465, + 3566, + 1323, + 770, + 1382, + 2113, + 4079, + 1997, + 3691, + 1612, + 2266, + 2361, + 2108, + 4574, + 2563, + 1762, + 1803, + 1875, + 1430, + 1132, + 2134, + 958, + 2886, + 1946, + 1905, + 2124, + 1821, + 4646, + 1324, + 2345, + 2148, + 2397, + 2395, + 1718, + 2266, + 1176 + ] + }, + { + "counters": [ + 2410, + 1300, + 2997, + 2476, + 3712, + 2672, + 2432, + 1562, + 3309, + 3943, + 1714, + 939, + 6248, + 1688, + 2305, + 2132, + 2984, + 4916, + 4899, + 2671, + 2029, + 1995, + 2329, + 3835, + 1527, + 1049, + 3146, + 2353, + 1754, + 2725, + 1899, + 2149, + 1737, + 2813, + 3676, + 2915, + 2073, + 2079, + 649, + 3881, + 2176, + 1785, + 1767, + 2430, + 3186, + 818, + 2718, + 3121, + 2659, + 1239, + 1900, + 880, + 2127, + 2376, + 3422, + 2094, + 2692, + 2804, + 3124, + 2890, + 2028, + 1571, + 1264, + 1979, + 1950, + 2992, + 1774, + 4500, + 1278, + 1164, + 1719, + 2232, + 1426, + 2719, + 1941, + 1538, + 2253, + 1159, + 1321, + 1400, + 833, + 4515, + 3514, + 3334, + 1636, + 1681, + 1621, + 920, + 1933, + 3469, + 2198, + 2040, + 1671, + 1796, + 904, + 4375, + 2780, + 3444, + 3147, + 1984, + 961, + 1718, + 1802, + 1907, + 1534, + 1029, + 2431, + 1273, + 1154, + 2009, + 2785, + 783, + 4382, + 1144, + 1850, + 1402, + 1124, + 2938, + 1451, + 1745, + 1035, + 2982, + 4287, + 1322, + 2533, + 1066, + 3632, + 2943, + 932, + 3905, + 1431, + 1768, + 1801, + 2013, + 3692, + 1059, + 742, + 1661, + 2928, + 989, + 2059, + 2652, + 1453, + 1770, + 594, + 1433, + 3526, + 4687, + 3080, + 2238, + 3019, + 2316, + 1060, + 614, + 1357, + 2956, + 998, + 1864, + 1914, + 1404, + 1836, + 2446, + 959, + 2197, + 1366, + 782, + 2354, + 836, + 1280, + 1643, + 2963, + 1395, + 1922, + 1418, + 1660, + 2755, + 3412, + 4943, + 1810, + 1069, + 3504, + 2324, + 3172, + 2087, + 2556, + 3451, + 3218, + 5593, + 4324, + 715, + 3180, + 2942, + 2703, + 2666, + 3340, + 1418, + 1241, + 3445, + 2417, + 783, + 3003, + 1241, + 2703, + 684, + 3066, + 3211, + 1775, + 3649, + 4432, + 2801, + 2216, + 3998, + 884, + 1260, + 2457, + 3105, + 2245, + 2998, + 3201, + 2069, + 2104, + 2117, + 676, + 2340, + 3277, + 1094, + 796, + 1466, + 1229, + 1419, + 2227, + 3529, + 1249, + 2479, + 5370, + 974, + 3105, + 2425, + 1752, + 3281, + 4589, + 4309, + 1289, + 1775, + 2682, + 3268, + 2178, + 2069, + 1431, + 2374, + 1271, + 2004, + 689, + 1660, + 1742, + 2127, + 1843, + 1429, + 3444, + 1919, + 2543, + 1572, + 1118, + 2127, + 1810, + 1025, + 1296, + 902, + 1869, + 1423, + 1951, + 2052, + 1659, + 2974, + 3221, + 2682, + 1759, + 3116, + 2618, + 2262, + 2335, + 2575, + 933, + 3137, + 2543, + 1263, + 1501, + 1027, + 1227, + 2683, + 1148, + 1543, + 1647, + 1036, + 932, + 2191, + 6463, + 3625, + 1874, + 1320, + 2235, + 5395, + 4427, + 2707, + 2078, + 2058, + 2159, + 2802, + 1639, + 2575, + 2196, + 3029, + 1558, + 3394, + 2853, + 2438, + 3905, + 3821, + 1455, + 1968, + 1554, + 1272, + 4072, + 2210, + 2524, + 1296, + 2416, + 1203, + 3014, + 6448, + 2578, + 2244, + 3564, + 2183, + 1870, + 3157, + 1438, + 3641, + 3379, + 1671, + 3864, + 2681, + 3454, + 2600, + 2866, + 2279, + 3428, + 3687, + 3067, + 2722, + 2789, + 2687, + 981, + 2143, + 2643, + 1356, + 733, + 2945, + 2053, + 1176, + 929, + 2269, + 1230, + 2040, + 2525, + 3078, + 1844, + 1599, + 2084, + 1731, + 3059, + 1849, + 1769, + 1982, + 1448, + 1739, + 4102, + 1173, + 2454, + 2282, + 1425, + 2705, + 3237, + 1416, + 2304, + 801, + 1601, + 3874, + 1861, + 1586, + 1434, + 1302, + 2086, + 2165, + 4724, + 1775, + 2853, + 1059, + 2052, + 2247, + 2688, + 3303, + 2105, + 5604, + 4073, + 3118, + 947, + 2123, + 1986, + 2736, + 1581, + 2025, + 1734, + 1689, + 1229, + 1999, + 3209, + 2996, + 2270, + 1280, + 1767, + 3694, + 1619, + 2902, + 718, + 3330, + 2036, + 1673, + 760, + 3666, + 884, + 2752, + 1980, + 2285, + 2886, + 2342, + 955, + 3247, + 2767, + 3755, + 2719, + 1606, + 2811, + 4118, + 1337, + 1637, + 4609, + 2620, + 1655, + 582, + 2160, + 3193, + 3559, + 2395, + 2271, + 3242, + 2192, + 2137, + 2484, + 1722, + 3410, + 4872, + 3754, + 1856, + 3403, + 2403, + 1054, + 2451, + 1735, + 4097, + 1248, + 2310, + 2292, + 4951, + 2719, + 1960, + 6072, + 1989, + 3554, + 1800, + 2909, + 2001, + 833, + 2368, + 1836, + 8411, + 1799, + 920, + 2270, + 2326, + 4314, + 1842, + 3306, + 2042, + 1300, + 5862, + 1379, + 1396, + 981, + 2141, + 1944, + 994, + 1641, + 699, + 1643, + 1486, + 1238, + 2401, + 3322, + 1554, + 1576, + 2387, + 3085, + 1676, + 3694, + 793, + 2601, + 2112, + 2859, + 1560, + 1876, + 1340, + 1435, + 1369, + 4140, + 2373, + 1563, + 5382, + 953, + 3847, + 1636, + 1461, + 2601, + 1232, + 703, + 1348, + 2086, + 2348, + 1340, + 2792, + 1450, + 1875, + 1191, + 1365, + 1075, + 3207, + 2725, + 3675, + 3243, + 5097, + 1017, + 1445, + 1164, + 2814, + 1651, + 2110, + 2113, + 2301, + 2155, + 2302, + 2979, + 1698, + 3437, + 1554, + 3612, + 3018, + 1779, + 5234, + 4267, + 2135, + 1075, + 523, + 2162, + 1731, + 1864, + 2744, + 966, + 3052, + 1519, + 2064, + 2918, + 1725, + 4697, + 1033, + 1691, + 2708, + 2625, + 771, + 771, + 2557, + 1241, + 2801, + 2446, + 2256, + 1009, + 2741, + 1592, + 2492, + 3048, + 3584, + 4088, + 2454, + 1583, + 2193, + 4750, + 1250, + 1401, + 2226, + 2004, + 3837, + 650, + 3707, + 998, + 2302, + 1012, + 2663, + 786, + 3028, + 1963, + 983, + 797, + 2432, + 2436, + 1941, + 2190, + 3161, + 2747, + 2267, + 1691, + 2482, + 936, + 1205, + 3048, + 911, + 4566, + 3416, + 2405, + 3493, + 2074, + 636, + 1423, + 2791, + 1640, + 1615, + 1922, + 1326, + 807, + 1929, + 1636, + 3363, + 5564, + 1081, + 2769, + 3330, + 1497, + 2035, + 1256, + 965, + 3076, + 3671, + 3156, + 1162, + 1799, + 1603, + 3280, + 1371, + 2175, + 882, + 1200, + 2150, + 1935, + 3703, + 1001, + 722, + 1285, + 624, + 3451, + 2420, + 2420, + 1336, + 1794, + 1554, + 2120, + 1934, + 2463, + 3210, + 2306, + 2566, + 1684, + 1966, + 1653, + 3502, + 2473, + 4314, + 3645, + 1132, + 1245, + 3117, + 1007, + 2442, + 2087, + 3110, + 2624, + 1934, + 2155, + 2482, + 2883, + 738, + 867, + 1430, + 2561, + 2583, + 802, + 2491, + 1843, + 2439, + 3021, + 2434, + 2158, + 3138, + 3997, + 2047, + 2080, + 935, + 1111, + 1762, + 1809, + 3443, + 1722, + 1429, + 1517, + 4654, + 685, + 797, + 1687, + 3922, + 1647, + 2002, + 1347, + 3154, + 1313, + 2051, + 2063, + 1656, + 748, + 3268, + 2229, + 827, + 1482, + 1970, + 3279, + 2678, + 1890, + 3551, + 825, + 3435, + 1742, + 2422, + 3448, + 1010, + 1529, + 1816, + 2925, + 1071, + 2057, + 870, + 2437, + 2028, + 741, + 2090, + 1857, + 1668, + 5982, + 1821, + 2078, + 1318, + 1349, + 2034, + 2063, + 677, + 1523, + 882, + 1992, + 1225, + 2097, + 1846, + 1863, + 3429, + 1269, + 1995, + 2713, + 1415, + 1343, + 3157, + 3017, + 2180, + 2390, + 3410, + 2783, + 1585, + 830, + 1552, + 1342, + 1710, + 3946, + 1490, + 1978, + 1574, + 1910, + 1330, + 3017, + 2442, + 2593, + 1230, + 2041, + 1412, + 3614, + 2050, + 996, + 2078, + 4185, + 1839, + 1838, + 2460, + 603, + 2342, + 2547, + 2702, + 2223, + 1388, + 2291, + 3743, + 2473, + 3189, + 3802, + 1712, + 2053, + 1515, + 1911, + 4985, + 6697, + 1658, + 2413, + 2510, + 2345, + 2399, + 2086, + 1519, + 4157, + 2284, + 3109, + 2179, + 3647, + 3250, + 2300, + 902, + 1217, + 3067, + 2904, + 4657, + 3071, + 1011, + 4364, + 989, + 1016, + 1181, + 3682, + 1349, + 3123, + 3582, + 1272, + 2428, + 2197, + 3412, + 848, + 1392, + 1664, + 3112, + 2653, + 2676, + 2859, + 1864, + 2186, + 1223, + 1162, + 4370, + 1456, + 4325, + 2642, + 1692, + 1804, + 1698, + 1797, + 1664, + 2103, + 2706, + 3439, + 4196, + 1458, + 1586, + 2597, + 1967, + 2339, + 2752, + 1352, + 954, + 2711, + 3148, + 1965, + 2680, + 1309, + 3787, + 832, + 1408, + 2217, + 1908, + 3725, + 1096, + 1342, + 1027, + 2068, + 3232, + 2287, + 4584, + 2428, + 2699, + 1889, + 3982, + 1615, + 2327, + 1330, + 5331, + 2356, + 1012, + 2073, + 1502, + 1525, + 3787, + 2429, + 1634, + 1138, + 3314, + 717, + 3313, + 2859, + 3984, + 2158, + 1841, + 1409, + 1520, + 643, + 1615, + 1695, + 2317, + 1207, + 2292, + 1725, + 2015, + 2475, + 2928, + 888, + 1407, + 3911, + 2527, + 1431, + 1238, + 1075, + 2029, + 1682, + 1294, + 780, + 981, + 716, + 1719, + 2704, + 1632, + 2118, + 4557, + 1563, + 1129, + 1757, + 5055, + 4458, + 1544, + 2391, + 1767, + 1277, + 2757, + 1981, + 1391, + 2307, + 1448, + 3306, + 1656, + 2928, + 2438, + 1298, + 2228, + 974, + 3081, + 728, + 3089, + 1329, + 2265, + 1687, + 1695, + 2678, + 1933, + 2784, + 5301, + 1292, + 4643, + 1308, + 1369, + 851, + 4882, + 1388, + 3251, + 1789, + 2581, + 2539, + 1575, + 2539, + 2174, + 2107, + 1923, + 7287, + 511, + 2061, + 1177, + 972, + 7803, + 1309, + 2019, + 2186, + 3625, + 2273, + 2623, + 2900, + 2254, + 1913, + 1540, + 1840, + 2094, + 2675, + 2329, + 1576, + 1813, + 1882, + 2822, + 3235, + 826, + 3820, + 2883, + 3097, + 1320, + 1074, + 6178, + 2555, + 1592, + 2499, + 1814, + 1371, + 1832, + 2404, + 1746, + 2616, + 1690, + 781, + 2508, + 2087, + 1403, + 1559, + 2315, + 1617, + 800, + 2526, + 2443, + 2164, + 1244, + 1628, + 2728, + 3212, + 1700, + 2488, + 2440, + 2565, + 865, + 2194, + 3080, + 4134, + 740, + 3797, + 2239, + 2404, + 3396, + 3410, + 2345, + 2072, + 610, + 2441, + 3069, + 2916, + 2207, + 1206, + 871, + 2615, + 1243, + 2991, + 1241, + 1862, + 2300, + 1822, + 3050, + 2381, + 3482, + 817, + 3832, + 2173, + 1364, + 1184, + 2573, + 2371, + 2597, + 1362, + 831, + 869, + 881, + 2782, + 2430, + 2915, + 2176, + 2391, + 2892, + 1939, + 1996, + 3643, + 4169, + 1712, + 2948, + 1602, + 2063, + 4176, + 4742, + 1777, + 3955, + 727, + 2914, + 1960, + 2353, + 990, + 1448, + 3056, + 1728, + 2249, + 1294, + 2559, + 2318, + 3039, + 2381, + 2562, + 1537, + 2536, + 1966, + 1162, + 1197, + 2652, + 5059, + 671, + 1862, + 2074, + 2477, + 3828, + 2774, + 699, + 2781, + 4686, + 4580, + 2944, + 1821, + 2114, + 3468, + 2997, + 1888, + 2324, + 2733, + 1156, + 1118, + 4182, + 1997, + 2108, + 4202, + 2592, + 1051, + 3036, + 3616, + 4061, + 4971, + 2576, + 2822, + 2435, + 1536, + 1182, + 2742, + 1916, + 3807, + 3569, + 2663, + 3780, + 4601, + 2083, + 4034, + 2599, + 1752, + 2126, + 3778, + 1757, + 1725, + 2208, + 888, + 4000, + 1285, + 1449, + 3285, + 2315, + 936, + 2491, + 1430, + 993, + 2375, + 2213, + 2784, + 2841, + 3307, + 3242, + 772, + 2623, + 1513, + 2162, + 1623, + 2275, + 2985, + 3232, + 2070, + 2089, + 3788, + 1924, + 2404, + 3280, + 1965, + 2253, + 3133, + 1890, + 3152, + 1140, + 2890, + 2276, + 1538, + 1930, + 2145, + 2959, + 3534, + 2305, + 3051, + 2484, + 1609, + 3094, + 1465, + 2300, + 2139, + 4119, + 1531, + 3497, + 2550, + 2099, + 2949, + 3334, + 1258, + 1779, + 751, + 1039, + 2364, + 1979, + 1865, + 2591, + 712, + 1598, + 1747, + 1821, + 1820, + 2658, + 1978, + 2808, + 1939, + 4337, + 3256, + 4725, + 2085, + 1774, + 2482, + 1720, + 1773, + 2632, + 2254, + 2464, + 3429, + 1763, + 1981, + 3280, + 1335, + 3146, + 2642, + 664, + 1143, + 1403, + 1188, + 3812, + 3525, + 1649, + 1178, + 2308, + 3261, + 2308, + 1629, + 3247, + 2638, + 1099, + 2321, + 2019, + 2176, + 2156, + 1349, + 1648, + 3212, + 810, + 1643, + 599, + 1612, + 5122, + 1952, + 3542, + 3575, + 1378, + 1913, + 1094, + 1273, + 615, + 2319, + 3511, + 2107, + 1095, + 2373, + 2453, + 617, + 1604, + 1570, + 1075, + 714, + 1939, + 1102, + 3244, + 1676, + 996, + 2429, + 4277, + 2454, + 3559, + 2683, + 2617, + 1688, + 701, + 3667, + 2215, + 2010, + 1466, + 1227, + 768, + 1033, + 3002, + 2578, + 3835, + 3225, + 1516, + 2695, + 3421, + 3345, + 1311, + 3297, + 3795, + 2167, + 1331, + 1655, + 1751, + 4126, + 2855, + 2042, + 2337, + 3106, + 2509, + 3394, + 1709, + 2629, + 2449, + 1590, + 976, + 5158, + 920, + 1505, + 1317, + 1548, + 2717, + 2707, + 2385, + 2698, + 1135, + 1852, + 2134, + 889, + 1949, + 3428, + 3951, + 3102, + 968, + 2271, + 977, + 4261, + 1837, + 1660, + 1991, + 3903, + 2417, + 2626, + 1401, + 2839, + 2538, + 2423, + 634, + 2510, + 1721, + 2669, + 1643, + 2105, + 2745, + 2107, + 2741, + 1130, + 2879, + 1983, + 1501, + 1669, + 694, + 3125, + 3088, + 5343, + 1246, + 3196, + 2826, + 1737, + 1400, + 2693, + 534, + 3668, + 1681, + 1814, + 3512, + 3739, + 1757, + 2468, + 2066, + 1947, + 4456, + 984, + 3068, + 3160, + 1697, + 3117, + 2222, + 1200, + 1686, + 1668, + 3470, + 991, + 1283, + 2635, + 2811, + 615, + 1992, + 1891, + 2384, + 2209, + 2954, + 2306, + 4832, + 3219, + 1674, + 3163, + 1328, + 3342, + 2785, + 3066, + 1430, + 2282, + 978, + 2138, + 995, + 2123, + 2560, + 1632, + 1145, + 2855, + 1504, + 4104, + 2163, + 2825, + 2055, + 2866, + 848, + 2564, + 2306, + 1767, + 716, + 2370, + 975, + 1963, + 2788, + 2845, + 1760, + 1833, + 2700, + 1374, + 3166, + 1823, + 1126, + 2315, + 3381, + 848, + 3604, + 3273, + 731, + 1428, + 1690, + 3060, + 4187, + 2102, + 1799, + 1547, + 1658, + 1661, + 1840, + 1224, + 1275, + 3790, + 2651, + 1471, + 1180, + 4670, + 1787, + 2368, + 2242, + 4259, + 1589, + 889, + 2279, + 1668, + 2562, + 3575, + 7567, + 1881, + 1582, + 2543, + 4274, + 693, + 635, + 1931, + 2143, + 1720, + 2340, + 2034, + 1662, + 2184, + 2462, + 994, + 2031, + 2221, + 1840, + 1671, + 579, + 4670, + 3305, + 3430, + 2822, + 2178, + 1593, + 858, + 3209, + 2270, + 1685, + 1107, + 1273, + 2848, + 3161, + 3007, + 2111, + 1441, + 2901, + 1025, + 4994, + 1290, + 2257, + 4910, + 1884, + 2877, + 1078, + 2729, + 1608, + 860, + 1675, + 1808, + 1607, + 1568, + 2552, + 3636, + 1582, + 2003, + 1507, + 3623, + 2661, + 1959, + 2398, + 1298, + 1438, + 2804, + 2947, + 2827, + 1657, + 2311, + 2554, + 2074, + 1892, + 2132, + 1574, + 2770, + 2238, + 2620, + 2815, + 2329, + 2172, + 1734, + 1182, + 3399, + 2967, + 1195, + 1235, + 2329, + 2596, + 4951, + 1283, + 3974, + 4059, + 2297, + 4393, + 2418, + 2330, + 2168, + 3757, + 1385, + 3254, + 3733, + 1355, + 1642, + 2278, + 1815, + 2489, + 2028, + 1078, + 2313, + 1242, + 2382, + 862, + 2064, + 912, + 768, + 2910, + 2911, + 2894, + 6975, + 1613, + 2460, + 2783, + 1180, + 1716, + 2072, + 2450, + 4359, + 2639, + 1609, + 1046, + 2734, + 3441, + 3022, + 4828, + 2103, + 3580, + 1445, + 2152, + 1861, + 1796, + 4411, + 1843, + 1330, + 4704, + 1071, + 1048, + 3258, + 1024, + 1114, + 3345, + 2196, + 1546, + 1912, + 3151, + 3607, + 1180, + 1252, + 2792, + 931, + 727, + 824, + 2915, + 1685, + 1327, + 3038, + 1849, + 1895, + 5706, + 721, + 2452, + 2681, + 1908, + 2329, + 3450, + 1716, + 2887, + 3486, + 1186, + 6689, + 3849, + 3063, + 1349, + 2271, + 3248, + 3801, + 1110, + 3133, + 3284, + 1634, + 3200, + 3389, + 1535, + 2392, + 1920, + 3370, + 1286, + 1915, + 1728, + 2251, + 2546, + 711, + 1534, + 2185, + 2630, + 2202, + 1021, + 2377, + 2830, + 1021, + 2571, + 3660, + 992, + 1442, + 3040, + 2391, + 2156, + 3939, + 3381, + 4238, + 2120, + 4252, + 1667, + 1656, + 2537, + 2259, + 1964, + 2532, + 3046, + 2819, + 1720, + 948, + 3044, + 1980, + 1769, + 2995, + 2178, + 2395, + 3384, + 2667, + 919, + 1680, + 4718, + 3171, + 616, + 2199, + 5930, + 2631, + 5713, + 1739, + 3107, + 976, + 3015, + 2253, + 1152, + 2126, + 1187, + 2090, + 3197, + 3336, + 1440, + 4660, + 2961, + 1290, + 2970, + 1559, + 2380, + 2981, + 3266, + 2438, + 2374, + 2369, + 1150, + 1972, + 1602, + 1767, + 3177, + 4306, + 2300, + 1546, + 6229, + 2269, + 2347, + 1544, + 1543, + 2047, + 2853, + 1940, + 2031, + 2163, + 3057, + 1721, + 3594, + 776, + 2185, + 1556, + 2042, + 5527, + 1067, + 3168, + 4463, + 3232, + 4570, + 2450, + 1433, + 2547, + 3806, + 3978, + 2613, + 3909, + 2008, + 1696, + 1683, + 3576, + 2840, + 5919, + 1831, + 1712, + 5381, + 1547, + 1518, + 3235, + 3523, + 2598, + 2379, + 630, + 1650, + 1999, + 2909, + 2926, + 1529, + 3260, + 2050, + 2145, + 1084, + 2467, + 2752, + 2423, + 2362, + 2884, + 2715, + 1956, + 2665, + 786, + 1810, + 2240, + 1742, + 2802, + 1652, + 4679, + 2440, + 1359, + 2731, + 1628, + 1241, + 4059, + 2634, + 1856, + 2809, + 2413, + 6326, + 566, + 922, + 5217, + 2460, + 2387, + 4271, + 2456, + 865, + 3783, + 2694, + 1347, + 1517, + 2388, + 2238, + 1814, + 2443, + 4180, + 3291, + 2371, + 2118, + 1447, + 1240, + 3252, + 3831, + 1784, + 1053, + 3386, + 1877, + 4982, + 2231, + 1376, + 1567, + 3990, + 2633, + 3841, + 2213, + 1298, + 2235, + 1681, + 1783, + 1128, + 748, + 2504, + 1709, + 2888, + 2987, + 1608, + 1298, + 2191, + 1877, + 1548, + 2246, + 2035, + 1995, + 1972, + 2556, + 1972, + 1409, + 2768, + 2420, + 1415, + 2000, + 3927, + 1727, + 3380, + 2302, + 2604, + 2763, + 3822, + 3855, + 1993, + 1038, + 3591, + 1675, + 945, + 2476, + 1838, + 2329, + 1889, + 3356, + 3022, + 3508, + 1272, + 4294, + 2320, + 1926, + 3584, + 1906, + 2311, + 1678, + 1888, + 4365, + 1148, + 566, + 1155, + 2829, + 2637, + 2391, + 1342, + 1324, + 1890, + 4412, + 930, + 2761, + 4842, + 2030, + 3058, + 736, + 3322, + 2096, + 1873, + 3362, + 3206, + 3421, + 3844, + 997, + 1043, + 6884, + 1955, + 1431, + 1439 + ] + } + ], + "top_n": [ + { + "data": "AkA3ZjExMzRmMTA4ZTc0YWM1YjIyODBjMDgzYjlmNGIyYw==", + "count": 2561 + }, + { + "data": "AkBlZGNmYWE1YjA2Yjc0ZDExYjY3OTEzODk2ZDUzYjMwYg==", + "count": 15145 + }, + { + "data": "AkAwNDllNDE3M2Y2ZjU0NTRiOGZlOTA0MjI0NGJlZDBmNw==", + "count": 3010 + }, + { + "data": "AkBlNDYzNTExN2Q1ZjA0MjgxODg0YWYxNWM0NjE1ZjQ5Ng==", + "count": 6337 + }, + { + "data": "AkA5ZjA4YTkwYWZhYTA0ZGVmODU1ZjNmYTEzODYwZWZkZA==", + "count": 1692 + }, + { + "data": "AkA2ZjcwMTIxYjkyMjc0NDRkODRlYWNlNmQ3NzNlYzk3ZQ==", + "count": 2851 + }, + { + "data": "AkAwYTk5NGM5Yzg1ZWM0NDUyODc2OTg2YWQzYjNlNDJlNg==", + "count": 743 + }, + { + "data": "AkBkNTBmMDQ5OGZkN2E0YmM5YWIwNjBkNmJlNzhlMDM4OA==", + "count": 1379 + }, + { + "data": "AkBmNzA2ODY0NWU2NTU0NGQwYWUzYjVmMDY0M2Y4NTY3Mg==", + "count": 2064 + }, + { + "data": "AkA0ZjcyYjk2NjkwYjE0NTAxODUzMDk5ZjIzOWFhYzVjYw==", + "count": 4256 + }, + { + "data": "AkBiZTM3ZWNkNjRkODI0MWI4ODVkYmRkNzI1ZDk5OGYzYQ==", + "count": 3365 + }, + { + "data": "AkBmZDIzMWI4NDAwZjI0ZDM0OTgwY2VmNTg2MjMzODI5Mg==", + "count": 3678 + }, + { + "data": "AkBlY2I4MjU4ZGJmYzA0MmY5OGE5ZmM0YzdlZjYwZmFkMw==", + "count": 824 + }, + { + "data": "AkBlYWU3Y2UwMjQ5OTU0YzIxYWVkMTExNmFiMjI4MjM0YQ==", + "count": 1932 + }, + { + "data": "AkA0YWYzMTcwZmU3ZDE0OWZjYTE1OWI5NDYwMTY3Mjg0Ng==", + "count": 1897 + }, + { + "data": "AkAyZTFiYjIzYTVlNDk0MjVlYTQ4MDA3YzVmNjg0Mjg4ZA==", + "count": 3329 + }, + { + "data": "AkAwMmY0MjQ5NjRkMTc0MzlmYWU4ZjY1M2UwMjE0ZTkyOA==", + "count": 2548 + }, + { + "data": "AkBhZTliOTNiZjQwNjM0MWJjYjAzODk0NGRkNWQxYTMyYw==", + "count": 1571 + }, + { + "data": "AkAyZTdmYTM1MDEzYzI0ODRmOWFkZDMxM2M0MjcwZjg1ZA==", + "count": 10629 + }, + { + "data": "AkA5NWMxOGU0YzdlNjI0ZjNjYWZkYTlkNTFmYTU4N2VhZA==", + "count": 1885 + }, + { + "data": "AkAzMGQxOGUyNWU5OTU0YTgyYWZmZjU1MmIxYjVkZTMxZA==", + "count": 1021 + }, + { + "data": "AkAwNTMxNGZkNDg3MDQ0MzMzYjUzNDcwY2E5OWFlMGU5YQ==", + "count": 1844 + }, + { + "data": "AkA1OTk3NDhlNmJmYTA0ODFkYjM4ODgzYmFjOTFmYTBiZA==", + "count": 5077 + }, + { + "data": "AkA5ZjJlNmE0NzMxYTk0MDJmOWM1NDZkYjUxNDI4OGUwNw==", + "count": 2089 + }, + { + "data": "AkA1MzdkZGVhNzFlNTA0MGU1YWU5YTdjNTA3MTBlNjBhNg==", + "count": 3086 + }, + { + "data": "AkA5YmQzNDAyMmE4YjY0MDY4OTAxNzFlM2U1Y2JkNTQ0NQ==", + "count": 5040 + }, + { + "data": "AkBiOWJlMjZmNTAzYjQ0MDYwOWQ1MThmOTA5NjJhOTBiYw==", + "count": 2212 + }, + { + "data": "AkBkOGM5NTZkN2M4YWY0ZTA5ODFhYTRmYjljZmVkYWU5YQ==", + "count": 2659 + }, + { + "data": "AkBiYmZiNDA4ZDIyOTk0YWZkYWNmZTdiNDQzZDRiYzEwZQ==", + "count": 2061 + }, + { + "data": "AkA0ZTExNTY5MDdkYjg0NWY5ODllZjI3NTY4YzgxZGViYw==", + "count": 2305 + }, + { + "data": "AkBkZTlmOGRiZDFiZDE0ZDQyOWFiYjczNWNhOWQxOWZkYg==", + "count": 527 + }, + { + "data": "AkA5NmNjMWRmNDAxYjc0YWYyYTU3YTA2YTdkZDVhMzFhNg==", + "count": 3401 + }, + { + "data": "AkAzMTJmOWQ3MGUxODE0MDIyOTFiNTFjZGEzOTM1YmEwNQ==", + "count": 2623 + }, + { + "data": "AkBlNzg2OWVhZGJmMjc0YTlkOGE2YjIyZWY2ZjNjNTgzYw==", + "count": 1488 + }, + { + "data": "AkAyMmVkNzExMTZlNTk0YTZkOGRhYTM2MjZlMDZhYzc5Zg==", + "count": 4041 + }, + { + "data": "AkA0NDU4NjNjNzBjNzA0ZWE2OTdkMzgzZmQ3NDI0NjFmOA==", + "count": 2399 + }, + { + "data": "AkBhYjA5OTlkMmU4ZTA0YWE4ODQ3MTJkNTgxYzEyOGM3ZA==", + "count": 2125 + }, + { + "data": "AkA2M2M4MmU2NzcyMmU0ODAyYjUxN2U0NmM2YWQwNDQxZg==", + "count": 3332 + }, + { + "data": "AkBhM2E5ZWJhZGRjY2Y0M2ZlYmFlNmQ1MGU0MjJlOTJjNw==", + "count": 2736 + }, + { + "data": "AkAyOTcxNjNiMTI3NDU0NmJjOTg2MGQ3ZGJmNDMzZjlmOQ==", + "count": 422 + } + ], + "default_value": 0 + }, + "null_count": 82563134, + "tot_col_size": 166302542, + "last_update_version": 419082401555939337, + "correlation": 0.010142 + }, + "c": { + "histogram": { + "ndv": 13, + "buckets": [ + { + "count": 410776, + "lower_bound": "QUNUSVZJVFk=", + "upper_bound": "QkdS", + "repeats": 235953 + }, + { + "count": 821552, + "lower_bound": "R1JPVVA=", + "upper_bound": "R1JPVVA=", + "repeats": 410733 + }, + { + "count": 1459566, + "lower_bound": "SU5GT1JNQVRJT04=", + "upper_bound": "TElWRQ==", + "repeats": 506862 + }, + { + "count": 19664818, + "lower_bound": "UE9TVA==", + "upper_bound": "UE9TVA==", + "repeats": 18203337 + }, + { + "count": 30729555, + "lower_bound": "UVVFU1RJT04=", + "upper_bound": "UVVFU1RJT04=", + "repeats": 11063574 + }, + { + "count": 87372972, + "lower_bound": "U0FMRVM=", + "upper_bound": "VE9QSUM=", + "repeats": 56593764 + }, + { + "count": 87399192, + "lower_bound": "VklERU8=", + "upper_bound": "VklERU8=", + "repeats": 26217 + } + ] + }, + "cm_sketch": { + "rows": [ + { + "counters": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 11, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 50, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 15061, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 522, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 221, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 167, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 81, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 44, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 31, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 6090, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 341, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 755, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + { + "counters": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 31, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 50, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 221, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 755, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 341, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 81, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 167, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 44, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 15061, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 6090, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 522, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 11, + 0 + ] + }, + { + "counters": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 755, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 341, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 15061, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 31, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 50, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 81, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 221, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 522, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 44, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 167, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 6090, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 11, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + { + "counters": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 6090, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 15061, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 167, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 522, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 81, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 755, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 50, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 221, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 31, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 341, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 11, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 44, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + { + "counters": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 221, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 50, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 6090, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 44, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 167, + 0, + 0, + 0, + 0, + 755, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 31, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 522, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 341, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 81, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 15061, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 11, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + } + ], + "top_n": [ + { + "data": "AhBRVUVTVElPTg==", + "count": 10925328 + }, + { + "data": "AgpHUk9VUA==", + "count": 371494 + }, + { + "data": "AgZCR1I=", + "count": 245742 + }, + { + "data": "AgpWSURFTw==", + "count": 12239 + }, + { + "data": "AghQT1NU", + "count": 18373229 + }, + { + "data": "AghMSVZF", + "count": 476625 + }, + { + "data": "Ag5BUlRJQ0xF", + "count": 64163 + }, + { + "data": "AgZTVkQ=", + "count": 41411 + }, + { + "data": "AgpTQUxFUw==", + "count": 25767 + }, + { + "data": "AgpUT1BJQw==", + "count": 56552967 + }, + { + "data": "AhBBQ1RJVklUWQ==", + "count": 175536 + }, + { + "data": "AhZJTkZPUk1BVElPTg==", + "count": 111315 + } + ], + "default_value": 0 + }, + "null_count": 0, + "tot_col_size": 637995166, + "last_update_version": 419082401542832213, + "correlation": 0.46293 + } + }, + "indices": { + "idx1": { + "histogram": { + "ndv": 1078302, + "buckets": [ + { + "count": 995227, + "lower_bound": "AAEwM2UxNGYyZf83MTc4NDU3Zv9iZGY4YzA0NP9hMDQxZDM1Nf8AAAAAAAAAAPc=", + "upper_bound": "AAFQMTAxMTI4AP4=", + "repeats": 2 + }, + { + "count": 1778783, + "lower_bound": "AAFQMTAxMTI4MP8AAAAAAAAAAPc=", + "upper_bound": "AAFQMTEwODY4NP8AAAAAAAAAAPc=", + "repeats": 1 + }, + { + "count": 2217344, + "lower_bound": "AAFQMTEwODcwMP8AAAAAAAAAAPc=", + "upper_bound": "AAFQMTEzODEwMP8AAAAAAAAAAPc=", + "repeats": 114 + }, + { + "count": 3830063, + "lower_bound": "AAFQMTEzODExMv8AAAAAAAAAAPc=", + "upper_bound": "AAFQMTE2NTYxMv8AAAAAAAAAAPc=", + "repeats": 1 + }, + { + "count": 4718486, + "lower_bound": "AAFQMTE2NTYxNf8AAAAAAAAAAPc=", + "upper_bound": "AAFQMTIwODcxNP8AAAAAAAAAAPc=", + "repeats": 748 + }, + { + "count": 5299812, + "lower_bound": "AAFQMTIwODcxN/8AAAAAAAAAAPc=", + "upper_bound": "AAFQMTIzMjIzOf8AAAAAAAAAAPc=", + "repeats": 154 + }, + { + "count": 5759489, + "lower_bound": "AAFQMTIzMjI0MP8AAAAAAAAAAPc=", + "upper_bound": "AAFQMTI1NzMxOP8AAAAAAAAAAPc=", + "repeats": 1 + }, + { + "count": 7182181, + "lower_bound": "AAFQMTI1NzMyNv8AAAAAAAAAAPc=", + "upper_bound": "AAFQMTI3MjIAAP0=", + "repeats": 2017 + }, + { + "count": 7855400, + "lower_bound": "AAFQMTI3MjIxMP8AAAAAAAAAAPc=", + "upper_bound": "AAFQMTI4Nzc5M/8AAAAAAAAAAPc=", + "repeats": 11 + }, + { + "count": 8552593, + "lower_bound": "AAFQMTI4Nzc5Of8AAAAAAAAAAPc=", + "upper_bound": "AAFQMTMwMTYwM/8AAAAAAAAAAPc=", + "repeats": 1 + }, + { + "count": 9106255, + "lower_bound": "AAFQMTMwMTYxMv8AAAAAAAAAAPc=", + "upper_bound": "AAFQMTMyNjMxMv8AAAAAAAAAAPc=", + "repeats": 1 + }, + { + "count": 9424760, + "lower_bound": "AAFQMTMyNjMxNv8AAAAAAAAAAPc=", + "upper_bound": "AAFQMTMyOTkAAP0=", + "repeats": 17638 + }, + { + "count": 10354070, + "lower_bound": "AAFQMTMyOTkxOP8AAAAAAAAAAPc=", + "upper_bound": "AAFQMTM4NDU3M/8AAAAAAAAAAPc=", + "repeats": 38 + }, + { + "count": 11210219, + "lower_bound": "AAFQMTM4NDU3OP8AAAAAAAAAAPc=", + "upper_bound": "AAFQMTY5NDA5NP8AAAAAAAAAAPc=", + "repeats": 92 + }, + { + "count": 11647341, + "lower_bound": "AAFQMTY5NDExN/8AAAAAAAAAAPc=", + "upper_bound": "AAFQMjA3NTA4Of8AAAAAAAAAAPc=", + "repeats": 9430 + }, + { + "count": 12386612, + "lower_bound": "AAFQMjA3NTA5Mf8AAAAAAAAAAPc=", + "upper_bound": "AAFQMjc4NDAAAP0=", + "repeats": 857 + }, + { + "count": 13184621, + "lower_bound": "AAFQMjc4NDEAAP0=", + "upper_bound": "AAFQMzg1NTQzAP4=", + "repeats": 2 + }, + { + "count": 13803540, + "lower_bound": "AAFQMzg1NjQ1AP4=", + "upper_bound": "AAFQNDY0MzM5AP4=", + "repeats": 6 + }, + { + "count": 14199816, + "lower_bound": "AAFQNDY0MzQAAP0=", + "upper_bound": "AAFQNTAxOAAAAPw=", + "repeats": 17 + }, + { + "count": 14622116, + "lower_bound": "AAFQNTAxOTEAAP0=", + "upper_bound": "AAFQNTQ2MTYAAP0=", + "repeats": 11 + }, + { + "count": 15416260, + "lower_bound": "AAFQNTQ2MjkyAP4=", + "upper_bound": "AAFQNjg0ODg3AP4=", + "repeats": 4332 + }, + { + "count": 15857926, + "lower_bound": "AAFQNjg0OQAAAPw=", + "upper_bound": "AAFQNzQ2NTg4AP4=", + "repeats": 701 + }, + { + "count": 16540514, + "lower_bound": "AAFQNzQ2NjAwAP4=", + "upper_bound": "AAFQODAwOTE2AP4=", + "repeats": 1 + }, + { + "count": 16781657, + "lower_bound": "AAFQODAwOTI3AP4=", + "upper_bound": "AAFQODM3MzkAAP0=", + "repeats": 12 + }, + { + "count": 17240778, + "lower_bound": "AAFQODM3Mzk5AP4=", + "upper_bound": "AAFQODcyMTcAAP0=", + "repeats": 54 + }, + { + "count": 18065273, + "lower_bound": "AAFQODcyMTcwAP4=", + "upper_bound": "AAFQOTA5NDA0AP4=", + "repeats": 44 + }, + { + "count": 18388651, + "lower_bound": "AAFQOTA5NDEwAP4=", + "upper_bound": "AAFQOTM4OTAxAP4=", + "repeats": 9 + }, + { + "count": 18717430, + "lower_bound": "AAFQOTM4OTIyAP4=", + "upper_bound": "AAFQOTgyNzk5AP4=", + "repeats": 1 + }, + { + "count": 19040435, + "lower_bound": "AAFQOTgyODAzAP4=", + "upper_bound": "AAFQOTk4MjMAAP0=", + "repeats": 6454 + }, + { + "count": 19534266, + "lower_bound": "AAFQOTk4MjMwAP4=", + "upper_bound": "AAFRMTEzOTQ5AP4=", + "repeats": 8 + }, + { + "count": 20261161, + "lower_bound": "AAFRMTEzOTUAAP0=", + "upper_bound": "AAFRMTM0NjkAAP0=", + "repeats": 8586 + }, + { + "count": 20680839, + "lower_bound": "AAFRMTM0NjkxAP4=", + "upper_bound": "AAFRMTU5NzI5AP4=", + "repeats": 10526 + }, + { + "count": 20927662, + "lower_bound": "AAFRMTU5NzMAAP0=", + "upper_bound": "AAFRMTY3OTMzAP4=", + "repeats": 13 + }, + { + "count": 21140081, + "lower_bound": "AAFRMTY3OTM5AP4=", + "upper_bound": "AAFRMTY5NDEAAP0=", + "repeats": 24 + }, + { + "count": 22088743, + "lower_bound": "AAFRMTY5NDEwAP4=", + "upper_bound": "AAFRMTY5NjY2AP4=", + "repeats": 12 + }, + { + "count": 22259988, + "lower_bound": "AAFRMTY5NjY4AP4=", + "upper_bound": "AAFRMTY5OTc2AP4=", + "repeats": 3 + }, + { + "count": 23047879, + "lower_bound": "AAFRMTY5OTgwAP4=", + "upper_bound": "AAFRMTcwMTM1AP4=", + "repeats": 1 + }, + { + "count": 23199895, + "lower_bound": "AAFRMTcwMTQAAP0=", + "upper_bound": "AAFRMTcwMjQAAP0=", + "repeats": 19 + }, + { + "count": 23507861, + "lower_bound": "AAFRMTcwMjQ0AP4=", + "upper_bound": "AAFRMTcwMzI4AP4=", + "repeats": 126241 + }, + { + "count": 23827886, + "lower_bound": "AAFRMTcwMzMwAP4=", + "upper_bound": "AAFRMTcwMzk4AP4=", + "repeats": 26 + }, + { + "count": 24620593, + "lower_bound": "AAFRMTcwNAAAAPw=", + "upper_bound": "AAFRMTcwNDY0AP4=", + "repeats": 26 + }, + { + "count": 24621201, + "lower_bound": "AAFRMTcwNDcwAP4=", + "upper_bound": "AAFRMTcwNTI3AP4=", + "repeats": 7 + }, + { + "count": 25759490, + "lower_bound": "AAFRMTcwNTMAAP0=", + "upper_bound": "AAFRMTgwMzcAAP0=", + "repeats": 6 + }, + { + "count": 26621227, + "lower_bound": "AAFRMTgwMzcwAP4=", + "upper_bound": "AAFRMTg2MTYyAP4=", + "repeats": 4 + }, + { + "count": 27070214, + "lower_bound": "AAFRMTg2MTYzAP4=", + "upper_bound": "AAFRMTg4MDQwAP4=", + "repeats": 193 + }, + { + "count": 27363322, + "lower_bound": "AAFRMTg4MDQyAP4=", + "upper_bound": "AAFRMTg5MDQ4AP4=", + "repeats": 10 + }, + { + "count": 27603180, + "lower_bound": "AAFRMTg5MDUAAP0=", + "upper_bound": "AAFRMTkzMTcyAP4=", + "repeats": 10 + }, + { + "count": 28475621, + "lower_bound": "AAFRMTkzMTczAP4=", + "upper_bound": "AAFRMjAzODE4AP4=", + "repeats": 470 + }, + { + "count": 28689531, + "lower_bound": "AAFRMjAzODE5AP4=", + "upper_bound": "AAFRMjczMQAAAPw=", + "repeats": 410 + }, + { + "count": 29148549, + "lower_bound": "AAFRMjczMTAAAP0=", + "upper_bound": "AAFRNDcxMTEAAP0=", + "repeats": 110 + }, + { + "count": 29462944, + "lower_bound": "AAFRNDcxMgAAAPw=", + "upper_bound": "AAFRNjUzODIAAP0=", + "repeats": 60 + }, + { + "count": 29783424, + "lower_bound": "AAFRNjUzODUAAP0=", + "upper_bound": "AAFROTEyMDkAAP0=", + "repeats": 9617 + }, + { + "count": 30017756, + "lower_bound": "AAFROTEyMQAAAPw=", + "upper_bound": "AAFTNjgyMgAAAPw=", + "repeats": 778 + }, + { + "count": 30711272, + "lower_bound": "AAFTNjgyNwAAAPw=", + "upper_bound": "AAFUMTI0MgAAAPw=", + "repeats": 72 + }, + { + "count": 30946227, + "lower_bound": "AAFUMTI0NAAAAPw=", + "upper_bound": "AAFUMTQwOQAAAPw=", + "repeats": 121 + }, + { + "count": 31408457, + "lower_bound": "AAFUMTQxMAAAAPw=", + "upper_bound": "AAFUMTQ5MwAAAPw=", + "repeats": 93410 + }, + { + "count": 31992962, + "lower_bound": "AAFUMTQ5NAAAAPw=", + "upper_bound": "AAFUMTUwMgAAAPw=", + "repeats": 69722 + }, + { + "count": 32035488, + "lower_bound": "AAFUMTUwMwAAAPw=", + "upper_bound": "AAFUMTUxMQAAAPw=", + "repeats": 1566 + }, + { + "count": 32219170, + "lower_bound": "AAFUMTUxMgAAAPw=", + "upper_bound": "AAFUMTUxOQAAAPw=", + "repeats": 1138 + }, + { + "count": 32591304, + "lower_bound": "AAFUMTUyMAAAAPw=", + "upper_bound": "AAFUMTUyNwAAAPw=", + "repeats": 6352 + }, + { + "count": 33006064, + "lower_bound": "AAFUMTUyOAAAAPw=", + "upper_bound": "AAFUMTU0NAAAAPw=", + "repeats": 261 + }, + { + "count": 33627550, + "lower_bound": "AAFUMTU0NQAAAPw=", + "upper_bound": "AAFUMTU2MAAAAPw=", + "repeats": 70970 + }, + { + "count": 34114321, + "lower_bound": "AAFUMTU2MQAAAPw=", + "upper_bound": "AAFUMTU4MAAAAPw=", + "repeats": 1037 + }, + { + "count": 35861063, + "lower_bound": "AAFUMTU4MQAAAPw=", + "upper_bound": "AAFUMTU5MAAAAPw=", + "repeats": 5282 + }, + { + "count": 36311621, + "lower_bound": "AAFUMTU5MQAAAPw=", + "upper_bound": "AAFUMTU5OAAAAPw=", + "repeats": 3946 + }, + { + "count": 36408817, + "lower_bound": "AAFUMTYwMAAAAPw=", + "upper_bound": "AAFUMTYwMgAAAPw=", + "repeats": 75070 + }, + { + "count": 37391308, + "lower_bound": "AAFUMTYwMwAAAPw=", + "upper_bound": "AAFUMTYwNgAAAPw=", + "repeats": 45732 + }, + { + "count": 37459214, + "lower_bound": "AAFUMTYwNwAAAPw=", + "upper_bound": "AAFUMTYxMAAAAPw=", + "repeats": 5417 + }, + { + "count": 37644209, + "lower_bound": "AAFUMTYxMQAAAPw=", + "upper_bound": "AAFUMTYxNAAAAPw=", + "repeats": 103812 + }, + { + "count": 38073319, + "lower_bound": "AAFUMTYxNQAAAPw=", + "upper_bound": "AAFUMTYyMAAAAPw=", + "repeats": 60630 + }, + { + "count": 38210017, + "lower_bound": "AAFUMTYyMQAAAPw=", + "upper_bound": "AAFUMTYyOAAAAPw=", + "repeats": 5908 + }, + { + "count": 38424867, + "lower_bound": "AAFUMTYyOQAAAPw=", + "upper_bound": "AAFUMTYzNwAAAPw=", + "repeats": 10288 + }, + { + "count": 38796404, + "lower_bound": "AAFUMTYzOAAAAPw=", + "upper_bound": "AAFUMTY0OAAAAPw=", + "repeats": 40785 + }, + { + "count": 39431512, + "lower_bound": "AAFUMTY0OQAAAPw=", + "upper_bound": "AAFUMTY2NAAAAPw=", + "repeats": 1828 + }, + { + "count": 39633903, + "lower_bound": "AAFUMTY2NQAAAPw=", + "upper_bound": "AAFUMTY3NgAAAPw=", + "repeats": 19320 + }, + { + "count": 40107527, + "lower_bound": "AAFUMTY3NwAAAPw=", + "upper_bound": "AAFUMTY5MgAAAPw=", + "repeats": 208273 + }, + { + "count": 40567949, + "lower_bound": "AAFUMTY5MwAAAPw=", + "upper_bound": "AAFUMTcwOQAAAPw=", + "repeats": 6071 + }, + { + "count": 40693336, + "lower_bound": "AAFUMTcxMAAAAPw=", + "upper_bound": "AAFUMTcyMAAAAPw=", + "repeats": 27294 + }, + { + "count": 41065599, + "lower_bound": "AAFUMTcyMQAAAPw=", + "upper_bound": "AAFUMTczNgAAAPw=", + "repeats": 528 + }, + { + "count": 41274198, + "lower_bound": "AAFUMTczNwAAAPw=", + "upper_bound": "AAFUMTc0NgAAAPw=", + "repeats": 70196 + }, + { + "count": 41961348, + "lower_bound": "AAFUMTc0NwAAAPw=", + "upper_bound": "AAFUMTc1NAAAAPw=", + "repeats": 532715 + }, + { + "count": 42283292, + "lower_bound": "AAFUMTc1NQAAAPw=", + "upper_bound": "AAFUMTc1OQAAAPw=", + "repeats": 115146 + }, + { + "count": 42461881, + "lower_bound": "AAFUMTc2MAAAAPw=", + "upper_bound": "AAFUMTc2NwAAAPw=", + "repeats": 1556 + }, + { + "count": 42890394, + "lower_bound": "AAFUMTc2OAAAAPw=", + "upper_bound": "AAFUMTc3MgAAAPw=", + "repeats": 184945 + }, + { + "count": 43438080, + "lower_bound": "AAFUMTc3MwAAAPw=", + "upper_bound": "AAFUMTgwNQAAAPw=", + "repeats": 2849 + }, + { + "count": 43722466, + "lower_bound": "AAFUMTgwNgAAAPw=", + "upper_bound": "AAFUMTgyMwAAAPw=", + "repeats": 39125 + }, + { + "count": 43817760, + "lower_bound": "AAFUMTgyNAAAAPw=", + "upper_bound": "AAFUMTgyNwAAAPw=", + "repeats": 1797 + }, + { + "count": 45080907, + "lower_bound": "AAFUMTgyOAAAAPw=", + "upper_bound": "AAFUMTgzMQAAAPw=", + "repeats": 423007 + }, + { + "count": 45385785, + "lower_bound": "AAFUMTgzMgAAAPw=", + "upper_bound": "AAFUMTg0OAAAAPw=", + "repeats": 56693 + }, + { + "count": 45635084, + "lower_bound": "AAFUMTg0OQAAAPw=", + "upper_bound": "AAFUMTg2NQAAAPw=", + "repeats": 3649 + }, + { + "count": 46224224, + "lower_bound": "AAFUMTg2NgAAAPw=", + "upper_bound": "AAFUMTg4MQAAAPw=", + "repeats": 34579 + }, + { + "count": 46411786, + "lower_bound": "AAFUMTg4MgAAAPw=", + "upper_bound": "AAFUMTg5MgAAAPw=", + "repeats": 35211 + }, + { + "count": 46636917, + "lower_bound": "AAFUMTg5MwAAAPw=", + "upper_bound": "AAFUMTkwOAAAAPw=", + "repeats": 14548 + }, + { + "count": 47079843, + "lower_bound": "AAFUMTkwOQAAAPw=", + "upper_bound": "AAFUMTkyNQAAAPw=", + "repeats": 25089 + }, + { + "count": 47656881, + "lower_bound": "AAFUMTkyNgAAAPw=", + "upper_bound": "AAFUMTk0MAAAAPw=", + "repeats": 17367 + }, + { + "count": 47837282, + "lower_bound": "AAFUMTk0MQAAAPw=", + "upper_bound": "AAFUMTk1NgAAAPw=", + "repeats": 1935 + }, + { + "count": 48193533, + "lower_bound": "AAFUMTk1NwAAAPw=", + "upper_bound": "AAFUMTk3MgAAAPw=", + "repeats": 1674 + }, + { + "count": 50617739, + "lower_bound": "AAFUMTk3MwAAAPw=", + "upper_bound": "AAFUMTk4NgAAAPw=", + "repeats": 795216 + }, + { + "count": 50875995, + "lower_bound": "AAFUMTk4OAAAAPw=", + "upper_bound": "AAFUMjA0NgAAAPw=", + "repeats": 34 + }, + { + "count": 50938675, + "lower_bound": "AAFUMjA1NAAAAPw=", + "upper_bound": "AAFUMjA2NAAAAPw=", + "repeats": 1189 + }, + { + "count": 51465336, + "lower_bound": "AAFUMjA2NQAAAPw=", + "upper_bound": "AAFUMjA4MQAAAPw=", + "repeats": 65098 + }, + { + "count": 51738621, + "lower_bound": "AAFUMjA4MgAAAPw=", + "upper_bound": "AAFUMjA4OQAAAPw=", + "repeats": 9961 + }, + { + "count": 52095088, + "lower_bound": "AAFUMjA5MAAAAPw=", + "upper_bound": "AAFUMjA5NwAAAPw=", + "repeats": 234840 + }, + { + "count": 52133298, + "lower_bound": "AAFUMjA5OAAAAPw=", + "upper_bound": "AAFUMjEwNQAAAPw=", + "repeats": 3390 + }, + { + "count": 54161301, + "lower_bound": "AAFUMjEwNgAAAPw=", + "upper_bound": "AAFUMjExNgAAAPw=", + "repeats": 386 + }, + { + "count": 54454560, + "lower_bound": "AAFUMjExNwAAAPw=", + "upper_bound": "AAFUMjEzMwAAAPw=", + "repeats": 25228 + }, + { + "count": 58885394, + "lower_bound": "AAFUMjEzNAAAAPw=", + "upper_bound": "AAFUMjE0OQAAAPw=", + "repeats": 7965 + }, + { + "count": 59545618, + "lower_bound": "AAFUMjE1MAAAAPw=", + "upper_bound": "AAFUMjE4MQAAAPw=", + "repeats": 660 + }, + { + "count": 59907658, + "lower_bound": "AAFUMjE4MgAAAPw=", + "upper_bound": "AAFUMjIxNwAAAPw=", + "repeats": 23968 + }, + { + "count": 60180878, + "lower_bound": "AAFUMjIxOAAAAPw=", + "upper_bound": "AAFUMjI1MAAAAPw=", + "repeats": 8240 + }, + { + "count": 60907452, + "lower_bound": "AAFUMjI1MQAAAPw=", + "upper_bound": "AAFUMjI3MwAAAPw=", + "repeats": 3282 + }, + { + "count": 61671871, + "lower_bound": "AAFUMjI3NAAAAPw=", + "upper_bound": "AAFUMjI4OAAAAPw=", + "repeats": 28682 + }, + { + "count": 63815760, + "lower_bound": "AAFUMjI4OQAAAPw=", + "upper_bound": "AAFUMjMwMAAAAPw=", + "repeats": 679 + }, + { + "count": 65436840, + "lower_bound": "AAFUMjMwMQAAAPw=", + "upper_bound": "AAFUMjMwNwAAAPw=", + "repeats": 26648 + }, + { + "count": 66067335, + "lower_bound": "AAFUMjMwOAAAAPw=", + "upper_bound": "AAFUMjMxNQAAAPw=", + "repeats": 223385 + }, + { + "count": 66129551, + "lower_bound": "AAFUMjMxNgAAAPw=", + "upper_bound": "AAFUMjMyMwAAAPw=", + "repeats": 3539 + }, + { + "count": 67134090, + "lower_bound": "AAFUMjMyNAAAAPw=", + "upper_bound": "AAFUMjMzMQAAAPw=", + "repeats": 20083 + }, + { + "count": 67401483, + "lower_bound": "AAFUMjMzMgAAAPw=", + "upper_bound": "AAFUMjM0NwAAAPw=", + "repeats": 4415 + }, + { + "count": 68542307, + "lower_bound": "AAFUMjM0OAAAAPw=", + "upper_bound": "AAFUMjM1NwAAAPw=", + "repeats": 764386 + }, + { + "count": 68973142, + "lower_bound": "AAFUMjM1OQAAAPw=", + "upper_bound": "AAFUMjM3NAAAAPw=", + "repeats": 8627 + }, + { + "count": 69612508, + "lower_bound": "AAFUMjM3NQAAAPw=", + "upper_bound": "AAFUMjM4NQAAAPw=", + "repeats": 50151 + }, + { + "count": 70120739, + "lower_bound": "AAFUMjM4NgAAAPw=", + "upper_bound": "AAFUMjQwMAAAAPw=", + "repeats": 172042 + }, + { + "count": 70373834, + "lower_bound": "AAFUMjQwMQAAAPw=", + "upper_bound": "AAFUMjQxNgAAAPw=", + "repeats": 387 + }, + { + "count": 70765494, + "lower_bound": "AAFUMjQxNwAAAPw=", + "upper_bound": "AAFUMjQzMwAAAPw=", + "repeats": 1430 + }, + { + "count": 71171435, + "lower_bound": "AAFUMjQzNAAAAPw=", + "upper_bound": "AAFUMjQ0NgAAAPw=", + "repeats": 2149 + }, + { + "count": 71485042, + "lower_bound": "AAFUMjQ0NwAAAPw=", + "upper_bound": "AAFUMjQ2MgAAAPw=", + "repeats": 21310 + }, + { + "count": 72010575, + "lower_bound": "AAFUMjQ2MwAAAPw=", + "upper_bound": "AAFUMjQ3OAAAAPw=", + "repeats": 5774 + }, + { + "count": 72211578, + "lower_bound": "AAFUMjQ3OQAAAPw=", + "upper_bound": "AAFUMjQ5NAAAAPw=", + "repeats": 3548 + }, + { + "count": 72220706, + "lower_bound": "AAFUMjQ5NQAAAPw=", + "upper_bound": "AAFUMjQ5NwAAAPw=", + "repeats": 768 + }, + { + "count": 72390530, + "lower_bound": "AAFUMjQ5OAAAAPw=", + "upper_bound": "AAFUMjUyOQAAAPw=", + "repeats": 5559 + }, + { + "count": 72868012, + "lower_bound": "AAFUMjUzMAAAAPw=", + "upper_bound": "AAFUMjU1NgAAAPw=", + "repeats": 38444 + }, + { + "count": 73149274, + "lower_bound": "AAFUMjU1NwAAAPw=", + "upper_bound": "AAFUMjU4OAAAAPw=", + "repeats": 3226 + }, + { + "count": 73380580, + "lower_bound": "AAFUMjU4OQAAAPw=", + "upper_bound": "AAFUMjYyMAAAAPw=", + "repeats": 2877 + }, + { + "count": 74133606, + "lower_bound": "AAFUMjYyMQAAAPw=", + "upper_bound": "AAFUMjY1MgAAAPw=", + "repeats": 174301 + }, + { + "count": 74302794, + "lower_bound": "AAFUMjY1MwAAAPw=", + "upper_bound": "AAFUMjY2OQAAAPw=", + "repeats": 9515 + }, + { + "count": 74800849, + "lower_bound": "AAFUMjY3MAAAAPw=", + "upper_bound": "AAFUMjY3MwAAAPw=", + "repeats": 287673 + }, + { + "count": 75150486, + "lower_bound": "AAFUMjY3NAAAAPw=", + "upper_bound": "AAFUMjcwNgAAAPw=", + "repeats": 159 + }, + { + "count": 75671378, + "lower_bound": "AAFUMjcwNwAAAPw=", + "upper_bound": "AAFUMjcyMwAAAPw=", + "repeats": 97497 + }, + { + "count": 76217090, + "lower_bound": "AAFUMjcyNAAAAPw=", + "upper_bound": "AAFUMjczOQAAAPw=", + "repeats": 1545 + }, + { + "count": 76459068, + "lower_bound": "AAFUMjc0MAAAAPw=", + "upper_bound": "AAFUMjc1NQAAAPw=", + "repeats": 33479 + }, + { + "count": 76594414, + "lower_bound": "AAFUMjc1NgAAAPw=", + "upper_bound": "AAFUMjc3MQAAAPw=", + "repeats": 27977 + }, + { + "count": 76768610, + "lower_bound": "AAFUMjc3MgAAAPw=", + "upper_bound": "AAFUMjc3MwAAAPw=", + "repeats": 33973 + }, + { + "count": 76943201, + "lower_bound": "AAFUMjc3NQAAAPw=", + "upper_bound": "AAFUMjgwNgAAAPw=", + "repeats": 17929 + }, + { + "count": 77546408, + "lower_bound": "AAFUMjgwNwAAAPw=", + "upper_bound": "AAFUMjgzNAAAAPw=", + "repeats": 101103 + }, + { + "count": 77780590, + "lower_bound": "AAFUMjgzNQAAAPw=", + "upper_bound": "AAFUMjg1MQAAAPw=", + "repeats": 5134 + }, + { + "count": 78465073, + "lower_bound": "AAFUMjg1MgAAAPw=", + "upper_bound": "AAFUMjg2NwAAAPw=", + "repeats": 5395 + }, + { + "count": 78630919, + "lower_bound": "AAFUMjg2OAAAAPw=", + "upper_bound": "AAFUMjg3MwAAAPw=", + "repeats": 107571 + }, + { + "count": 79134459, + "lower_bound": "AAFUMjg3NAAAAPw=", + "upper_bound": "AAFUMjkzNwAAAPw=", + "repeats": 5743 + }, + { + "count": 79553293, + "lower_bound": "AAFUMjkzOAAAAPw=", + "upper_bound": "AAFUMjk4NQAAAPw=", + "repeats": 4489 + }, + { + "count": 80050803, + "lower_bound": "AAFUMjk4NgAAAPw=", + "upper_bound": "AAFUMzExNQAAAPw=", + "repeats": 4482 + }, + { + "count": 80174592, + "lower_bound": "AAFUMzExNgAAAPw=", + "upper_bound": "AAFUMzEzOQAAAPw=", + "repeats": 6603 + }, + { + "count": 80321833, + "lower_bound": "AAFUMzE0MAAAAPw=", + "upper_bound": "AAFUMzIwMwAAAPw=", + "repeats": 10084 + }, + { + "count": 80528122, + "lower_bound": "AAFUMzIwNAAAAPw=", + "upper_bound": "AAFUMzI3MQAAAPw=", + "repeats": 231 + }, + { + "count": 81319416, + "lower_bound": "AAFUMzI3MgAAAPw=", + "upper_bound": "AAFUMzMzMAAAAPw=", + "repeats": 14727 + }, + { + "count": 81696220, + "lower_bound": "AAFUMzMzMQAAAPw=", + "upper_bound": "AAFUMzM2MwAAAPw=", + "repeats": 776 + }, + { + "count": 82032494, + "lower_bound": "AAFUMzM2NAAAAPw=", + "upper_bound": "AAFUMzM5NwAAAPw=", + "repeats": 9314 + }, + { + "count": 82151308, + "lower_bound": "AAFUMzM5OAAAAPw=", + "upper_bound": "AAFUMzQ1NAAAAPw=", + "repeats": 13222 + }, + { + "count": 82546748, + "lower_bound": "AAFUMzQ1NQAAAPw=", + "upper_bound": "AAFWMzIwNjkyM/8AAAAAAAAAAPc=", + "repeats": 21 + }, + { + "count": 82769256, + "lower_bound": "AAFWMzIyNjg3OP8AAAAAAAAAAPc=", + "upper_bound": "ATBhYzQwMTZk/2QwMTU0YjBl/zlkYjVhNzcz/zc3NjUxN2Uy/wAAAAAAAAAA9wFUMTUyNQAAAPw=", + "repeats": 1 + }, + { + "count": 83171355, + "lower_bound": "ATBhYzQwZDhl/zJiNzI0OWVj/2EwNTY3NjQw/zVlNWVmNTJl/wAAAAAAAAAA9wEyMDE2MDYwN/8yMTYxMTQAAP0=", + "upper_bound": "ATIxYTk0OGE4/2U2MTU0OGNi/2I5ODU0YjI2/zAxYzM3OWE1/wAAAAAAAAAA9wFUMjMyNQAAAPw=", + "repeats": 1 + }, + { + "count": 83288117, + "lower_bound": "ATIxYTk1MTNh/zgwYjM0MTFl/2E4MTcxMmY0/zJjODdjZmM5/wAAAAAAAAAA9wFUMTk4NgAAAPw=", + "upper_bound": "ATI3ZWE0MjMw/zYzNGY0OTFl/zkyOGRhNTE4/2I3YTYyODJi/wAAAAAAAAAA9wFUMTU5NgAAAPw=", + "repeats": 1 + }, + { + "count": 83727538, + "lower_bound": "ATI3ZWE0MmJm/zYyN2M0MzM5/zljNjNkOTQ0/zhjMGMxN2U5/wAAAAAAAAAA9wFUMjI5NgAAAPw=", + "upper_bound": "ATNlNGI5YmQ4/zY4ZmY0YWU2/2I0MjdkZGE0/2M4ZGUxZjNk/wAAAAAAAAAA9wFUMjU3MwAAAPw=", + "repeats": 4 + }, + { + "count": 83852399, + "lower_bound": "ATNlNGJhMjY0/zMzZDI0MzU1/2E1MDhlYjU3/zE2NjRlNDUx/wAAAAAAAAAA9wFUMTk0OQAAAPw=", + "upper_bound": "ATQ1OTYzMDUw/zUwNTY0NGEw/zg5MzViYTVk/zE5MGYxNjk1/wAAAAAAAAAA9wFRMTcwNDA3AP4=", + "repeats": 1 + }, + { + "count": 84290444, + "lower_bound": "ATQ1OTYzMTcy/zY5YmY0Y2Nm/zgwY2NhNTQw/zYwZDg2ZmRl/wAAAAAAAAAA9wFUMTUzMgAAAPw=", + "upper_bound": "ATVjODE4ZjIy/2E2YjQ0MTdl/zhiNjYyMjEw/2ExMTEwZmY5/wAAAAAAAAAA9wFUMTQ5NQAAAPw=", + "repeats": 993 + }, + { + "count": 84577674, + "lower_bound": "ATVjODE5NzA4/zM2MWM0NTk0/zk3NzM4OWI0/2UwZDZmZWUx/wAAAAAAAAAA9wFUMjY3NwAAAPw=", + "upper_bound": "ATZkMDRkOTcw/zU5YTY0MGE0/2FhNTViNWM0/2ZmYjAxMWQy/wAAAAAAAAAA9wFUMjU3OQAAAPw=", + "repeats": 1 + }, + { + "count": 84675179, + "lower_bound": "ATZkMDRkZWI1/2ExZmY0ZmVh/zk4MTAyMTVi/zk2NzY0MWU5/wAAAAAAAAAA9wFUMjI5MAAAAPw=", + "upper_bound": "ATcyMjViZTU3/zA1ZTA0Mjc1/zhjYmY1ZDZh/2NhZDA5NTAz/wAAAAAAAAAA9wFRMzY0NjQAAP0=", + "repeats": 1 + }, + { + "count": 85091099, + "lower_bound": "ATcyMjVlMzZh/zViZjY0NzM0/zhiMTMwOTZj/2FjZjQ0NzA4/wAAAAAAAAAA9wFUMjQ0NAAAAPw=", + "upper_bound": "ATg5NTBiMzA5/2I4NzA0YmM5/2JiZWE3NmE1/zVhYmNmNzA4/wAAAAAAAAAA9wFUMTQ5NQAAAPw=", + "repeats": 277 + }, + { + "count": 85382905, + "lower_bound": "ATg5NTBkYzRh/zI5NTM0YjZm/zgxMmVlNTc5/2I2MDAxYjk1/wAAAAAAAAAA9wExOAAAAAAAAPk=", + "upper_bound": "ATk5NmQ2ZjA1/zYwN2Y0MWQz/2JlNWVjOWYz/2UxNmEyNTJk/wAAAAAAAAAA9wFUMjY3MwAAAPw=", + "repeats": 1 + }, + { + "count": 85667606, + "lower_bound": "ATk5NmQ4MjFh/zFmN2M0OWU0/2I3OWI0NzFm/zIyZmZjOTcy/wAAAAAAAAAA9wFUMjg1MwAAAPw=", + "upper_bound": "AWE3ODdiODI4/2U2YjI0ODNm/2E4MzgxYjU5/zRkMWUwYzAw/wAAAAAAAAAA9wFUMTQ5NQAAAPw=", + "repeats": 707 + }, + { + "count": 85890224, + "lower_bound": "AWE3ODdiZTI1/2EzNGE0YzZk/2JkODU5NTVl/zNmNDAwZmRk/wAAAAAAAAAA9wFUMzM4MQAAAPw=", + "upper_bound": "AWIyNzhmNmZl/2YxZjE0NzFm/2I0MzljNjZi/zQ0ODA3MmJk/wAAAAAAAAAA9wFUMjQ3NAAAAPw=", + "repeats": 1 + }, + { + "count": 86319875, + "lower_bound": "AWIyNzkwZGI5/zE5NmQ0NGZk/zhhNzM0NzFh/zhlNjk2MmI2/wAAAAAAAAAA9wFUMTI5NwAAAPw=", + "upper_bound": "AWM3OTJlY2Fh/zUxNmY0NWU0/2I1ZWE0ZGNl/2IwNzBkZTRh/wAAAAAAAAAA9wFUMTQ5NQAAAPw=", + "repeats": 708 + }, + { + "count": 86496103, + "lower_bound": "AWM3OTJmMzVi/2ZjNDM0N2Yx/2EyMDA0ZDA0/2ZiYjU3YmZk/wAAAAAAAAAA9wFUMjg3NwAAAPw=", + "upper_bound": "AWQxYjI2YjJl/2JhZWY0YmQy/zk2OTJlNzQ0/zc0OTkwOGVk/wAAAAAAAAAA9wFRMTAyODMAAP0=", + "repeats": 1 + }, + { + "count": 86914096, + "lower_bound": "AWQxYjI4NDU0/zU2ZmY0MjU5/zg4YjIyOGY1/zg5ODU1ZTE1/wAAAAAAAAAA9wEyMDE3MTEyMf8zMDU5MjQAAP0=", + "upper_bound": "AWU3ZmU2MmJm/2RiYmM0ZGQ2/zlmMGMzNmRi/zE2ZjM4MmYy/wAAAAAAAAAA9wFUMTgyMAAAAPw=", + "repeats": 79 + }, + { + "count": 87225906, + "lower_bound": "AWU3ZmU3MDFi/zkxZDU0MjY0/2JiMjg3Yjhk/zkyNzg5MDli/wAAAAAAAAAA9wFUMTU4NgAAAPw=", + "upper_bound": "AWY3NTQ2ZjQy/zA4MWY0YmU4/zlhODhkZTVi/2EwMDUzNjVi/wAAAAAAAAAA9wFUMTQ5NQAAAPw=", + "repeats": 616 + }, + { + "count": 87400037, + "lower_bound": "AWY3NTQ3Yjk2/zc0MzU0Zjc3/2EwYzE1MDc4/2QwMzAyNWZi/wAAAAAAAAAA9wEyMDE2MDYwN/8yMTYxMTQAAP0=", + "upper_bound": "AWZmZmZmOWE4/zI5OGI0ZGIy/zk2YzIwMDA5/2U1YTNlOTNl/wAAAAAAAAAA9wFUMTk4NgAAAPw=", + "repeats": 1 + } + ] + }, + "cm_sketch": { + "rows": [ + { + "counters": [ + 14069, + 8269, + 47022, + 7561, + 11571, + 37235, + 7135, + 5075, + 66438, + 20261, + 7614, + 27915, + 9339, + 21314, + 3396, + 9985, + 295487, + 8197, + 4890, + 13236, + 8936, + 17342, + 25562, + 20212, + 165119, + 6463, + 11640, + 19293, + 36256, + 7895, + 17939, + 9106, + 88859, + 16528, + 10451, + 16922, + 1535032, + 18136, + 4385, + 6430, + 100170, + 6889, + 7299, + 9315, + 8943, + 75381, + 10936, + 4699, + 166008, + 4598, + 14012, + 165623, + 4065, + 7744, + 32675, + 7681, + 13369, + 79554, + 11031, + 34648, + 36037, + 4195, + 15815, + 5854, + 2959, + 10905, + 8057, + 85491, + 40946, + 55679, + 37835, + 7695, + 8815, + 192160, + 7457, + 39360, + 9871, + 19841, + 30171, + 5988, + 18758, + 27706, + 48961, + 10418, + 21295, + 26727, + 151063, + 19799, + 18992, + 20777, + 6837, + 61019, + 4539, + 3130, + 5920, + 5124, + 32291, + 27325, + 8541, + 8873, + 8581, + 335385, + 12028, + 5126, + 6471, + 52866, + 9780, + 4095, + 36283, + 129852, + 20645, + 73841, + 11540, + 48498, + 6321, + 2864, + 8204, + 29825, + 3937, + 8103, + 84631, + 51894, + 30248, + 57719, + 50241, + 6074, + 6862, + 117466, + 5960, + 60470, + 8551, + 10814, + 190799, + 25363, + 19875, + 7733, + 190211, + 16776, + 143921, + 75307, + 11074, + 33206, + 54789, + 62647, + 15366, + 28870, + 9360, + 13136, + 5240, + 16052, + 57861, + 10080, + 41297, + 38039, + 8429, + 12696, + 8955, + 18393, + 6892, + 183057, + 40944, + 6229, + 13756, + 35190, + 8654, + 11641, + 11547, + 13270, + 8430, + 59968, + 5191, + 30426, + 16219, + 85958, + 14511, + 8707, + 19455, + 6516, + 14354, + 5649, + 185934, + 29635, + 12222, + 16284, + 12949, + 11417, + 45442, + 4381, + 43967, + 14073, + 3833, + 8388, + 131125, + 118558, + 3559, + 16924, + 47261, + 32156, + 35713, + 13838, + 9025, + 43714, + 7349, + 12798, + 18816, + 57146, + 5249, + 17253, + 9752, + 8399, + 166972, + 95971, + 39875, + 40144, + 60175, + 63956, + 21486, + 11920, + 15950, + 83200, + 29840, + 7069, + 5928, + 34868, + 14902, + 7540, + 10699, + 6353, + 19551, + 90215, + 17124, + 15311, + 5584, + 30427, + 23334, + 13288, + 6571, + 13519, + 104776, + 8806, + 25662, + 58740, + 7077, + 209335, + 20055, + 12978, + 10165, + 250146, + 5294, + 26403, + 73800, + 26964, + 43714, + 45425, + 60400, + 299511, + 6747, + 19882, + 9816, + 5519, + 38989, + 4077, + 26223, + 22555, + 189468, + 44062, + 150037, + 5319, + 404755, + 26056, + 16628, + 74973, + 87911, + 15118, + 11860, + 20335, + 8456, + 54699, + 11658, + 18712, + 8570, + 34662, + 28872, + 162736, + 11524, + 25574, + 4147, + 88498, + 6459, + 49066, + 17843, + 264896, + 7412, + 178563, + 6597, + 10027, + 14404, + 5532, + 10069, + 23660, + 13331, + 31683, + 8829, + 136210, + 87744, + 16324, + 13554, + 33361, + 9573, + 14399, + 44736, + 11338, + 35932, + 26457, + 17897, + 8029, + 121610, + 9008, + 15021, + 5566, + 14380, + 117446, + 5103, + 7071, + 23549, + 21340, + 7042, + 7903, + 20166, + 11558, + 46821, + 61000, + 25221, + 384747, + 30124, + 34263, + 10056, + 7467, + 11869, + 7397, + 57215, + 24712, + 5431, + 21609, + 208218, + 13683, + 5030, + 534039, + 41354, + 5350, + 128808, + 18884, + 4509, + 9390, + 15575, + 22826, + 71490, + 6464, + 8669, + 64079, + 8391, + 11088, + 15942, + 53327, + 87668, + 9040, + 119832, + 20241, + 5763, + 5946, + 58684, + 89367, + 4371, + 8317, + 30030, + 13721, + 87555, + 27655, + 6089, + 6052, + 11500, + 4480, + 19221, + 6777, + 13341, + 8748, + 4444, + 10283, + 13925, + 4816, + 11775, + 4104, + 26387, + 12674, + 58232, + 6291, + 10640, + 41864, + 16290, + 3860, + 35124, + 193839, + 124940, + 20313, + 72920, + 28329, + 11113, + 15806, + 27391, + 9375, + 10412, + 9560, + 5759, + 14260, + 7070, + 3548, + 18685, + 11751, + 8689, + 41299, + 56390, + 18346, + 13445, + 14216, + 17091, + 23097, + 33869, + 15237, + 5423, + 4268, + 39588, + 78403, + 10612, + 47770, + 8482, + 10949, + 53868, + 5020, + 6940, + 40573, + 155923, + 14352, + 76609, + 10731, + 13754, + 11848, + 7215, + 123644, + 20199, + 23149, + 4844, + 2573, + 28985, + 4978, + 24578, + 15857, + 35269, + 13736, + 4870, + 21393, + 5603, + 16890, + 59753, + 5706, + 7911, + 249450, + 2213, + 11668, + 90032, + 102186, + 10228, + 9774, + 42336, + 17294, + 119078, + 18158, + 19444, + 10971, + 12996, + 43686, + 10802, + 7042, + 16104, + 14109, + 65530, + 7787, + 7354, + 8667, + 24428, + 128521, + 6247, + 7116, + 97613, + 67145, + 47117, + 25364, + 7472, + 5368, + 283770, + 53234, + 4619, + 22439, + 10596, + 18196, + 11569, + 18238, + 120539, + 55972, + 4376, + 16240, + 40083, + 8861, + 13726, + 6374, + 19228, + 40026, + 54642, + 18822, + 609489, + 38421, + 21200, + 15487, + 9183, + 35488, + 96872, + 88280, + 7801, + 16741, + 11530, + 5456, + 40786, + 7725, + 10351, + 9796, + 151438, + 11656, + 16545, + 9396, + 20179, + 89538, + 6168, + 28294, + 16708, + 197373, + 19591, + 8801, + 14785, + 5819, + 12195, + 7815, + 7627, + 10399, + 7381, + 10503, + 47755, + 5533, + 166092, + 10258, + 6332, + 22219, + 4782, + 43150, + 23847, + 4817, + 16490, + 11335, + 21132, + 9549, + 8603, + 8361, + 4234, + 7916, + 47818, + 8632, + 6052, + 27065, + 8034, + 11557, + 22173, + 257959, + 73728, + 48112, + 10635, + 4477, + 67922, + 14605, + 11322, + 29637, + 17347, + 91021, + 6137, + 4690, + 6519, + 40999, + 6921, + 9550, + 13408, + 23441, + 7954, + 5292, + 9344, + 23655, + 35346, + 67047, + 40542, + 9273, + 13296, + 8671, + 140035, + 8728, + 48754, + 13186, + 8621, + 283057, + 48422, + 4701, + 7752, + 11946, + 7088, + 7571, + 6996, + 9806, + 24707, + 24939, + 6526, + 16953, + 9724, + 3881, + 370321, + 10413, + 7663, + 5288, + 9796, + 7296, + 35497, + 5318, + 14629, + 128893, + 8347, + 8140, + 20311, + 3555, + 126162, + 19389, + 17613, + 10239, + 13614, + 14403, + 11740, + 14121, + 181643, + 3231, + 15742, + 38895, + 4842, + 16035, + 5229, + 234394, + 61266, + 6370, + 11588, + 11427, + 82998, + 161402, + 15044, + 6354, + 11247, + 7275, + 66508, + 8978, + 15905, + 60884, + 43399, + 25648, + 6177, + 13096, + 16222, + 1908537, + 70412, + 20913, + 8066, + 26806, + 5578, + 11222, + 11332, + 29248, + 50954, + 18533, + 8043, + 6481, + 5543, + 72539, + 5442, + 4766, + 62966, + 4936, + 133239, + 4857, + 190763, + 149612, + 5079, + 28680, + 11649, + 18078, + 23758, + 5749, + 77727, + 10813, + 44850, + 21395, + 8171, + 22853, + 33563, + 592342, + 6636, + 34392, + 22005, + 291588, + 10864, + 6139, + 12916, + 24648, + 10956, + 118414, + 11805, + 7375, + 26560, + 7764, + 58100, + 9136, + 213400, + 9249, + 133747, + 68864, + 36431, + 107959, + 5819, + 43392, + 40209, + 6184, + 16004, + 10900, + 18227, + 11631, + 26101, + 10554, + 84373, + 99393, + 16613, + 4910, + 9179, + 6614, + 28887, + 6119, + 117988, + 19125, + 13431, + 69277, + 48129, + 13398, + 16080, + 8440, + 158141, + 18157, + 237685, + 5230, + 6533, + 5893, + 12648, + 11819, + 20961, + 24168, + 15960, + 3290, + 3690, + 7078, + 5459, + 19713, + 9227, + 8439, + 6249, + 21022, + 6116, + 5991, + 326702, + 6994, + 6671, + 15170, + 9943, + 4802, + 11398, + 37462, + 12745, + 15411, + 327884, + 3863, + 31085, + 63692, + 8830, + 937657, + 8727, + 4311, + 7673, + 3513, + 36861, + 28712, + 22565, + 17191, + 11442, + 8413, + 27557, + 13591, + 6214, + 18742, + 20270, + 34306, + 36791, + 9928, + 29051, + 28961, + 13961, + 4745, + 22499, + 6604, + 64065, + 10875, + 14972, + 9810, + 31797, + 13096, + 8271, + 4489, + 11150, + 59963, + 28065, + 5928, + 6741, + 6668, + 39719, + 36860, + 37071, + 20392, + 49744, + 10275, + 7489, + 6618, + 23953, + 6197, + 5699, + 18459, + 11105, + 10841, + 8488, + 10798, + 19853, + 19763, + 10311, + 11022, + 20310, + 14456, + 11113, + 4533, + 4633, + 13712, + 9478, + 11039, + 7377, + 13602, + 13818, + 26763, + 9545, + 100482, + 14159, + 95013, + 27552, + 5967, + 9299, + 27115, + 9592, + 12828, + 5277, + 5143, + 21335, + 15497, + 13057, + 11356, + 347806, + 210260, + 34767, + 10518, + 13871, + 12044, + 107097, + 7373, + 7070, + 11360, + 30117, + 25578, + 6196, + 10594, + 6239, + 63390, + 156551, + 42712, + 4069, + 13602, + 18954, + 21285, + 6150, + 11877, + 8857, + 21899, + 250493, + 57429, + 13256, + 208281, + 6706, + 76038, + 146548, + 9899, + 58516, + 9981, + 20960, + 8620, + 32326, + 79142, + 5495, + 14771, + 236419, + 3457, + 5216, + 22276, + 25329, + 6485, + 13046, + 7592, + 17454, + 10878, + 77877, + 4132, + 64907, + 13942, + 328162, + 11444, + 17250, + 102236, + 8693, + 4681, + 11725, + 15093, + 22980, + 11144, + 16608, + 135713, + 125397, + 9483, + 440766, + 7478, + 9584, + 9344, + 12020, + 11498, + 126465, + 5529, + 22063, + 12541, + 8328, + 9395, + 68800, + 3138, + 16182, + 5747, + 25424, + 12531, + 2977, + 20789, + 8238, + 39751, + 20873, + 124231, + 47115, + 108957, + 38508, + 175032, + 17387, + 9195, + 6919, + 18201, + 3729, + 188130, + 29254, + 11321, + 168698, + 73886, + 5430, + 7130, + 9059, + 145002, + 6778, + 11908, + 4485, + 7519, + 146948, + 40419, + 3040, + 24133, + 14372, + 24925, + 11574, + 20510, + 8087, + 32033, + 6507, + 20371, + 151903, + 18911, + 9476, + 73912, + 8810, + 8133, + 28257, + 44765, + 5100, + 10767, + 4171, + 7771, + 11562, + 13145, + 4638, + 7531, + 7232, + 59071, + 38656, + 26528, + 22170, + 10154, + 5101, + 4360, + 24998, + 10538, + 13237, + 5865, + 19785, + 6729, + 275090, + 7115, + 19293, + 62245, + 17391, + 5586, + 14474, + 16842, + 9566, + 103695, + 259889, + 212672, + 23290, + 27306, + 162287, + 76203, + 8579, + 195343, + 49269, + 456373, + 50868, + 40122, + 74717, + 25405, + 16811, + 10108, + 56603, + 116663, + 17443, + 12082, + 10357, + 35392, + 13281, + 19568, + 52606, + 29170, + 51909, + 45288, + 20064, + 8821, + 8349, + 8592, + 67641, + 30426, + 16554, + 23431, + 9538, + 8978, + 44563, + 7929, + 63315, + 7127, + 270414, + 12992, + 162731, + 47124, + 2971, + 8668, + 116201, + 206994, + 61716, + 31833, + 6192, + 8761, + 70387, + 6045, + 44033, + 23186, + 6959, + 13453, + 5568, + 6724, + 12555, + 10247, + 7038, + 12214, + 32809, + 17448, + 4927, + 5108, + 10082, + 8365, + 31168, + 17093, + 24381, + 9019, + 38920, + 15247, + 13523, + 11051, + 16512, + 298573, + 6873, + 10266, + 15647, + 147849, + 7630, + 30764, + 31789, + 68173, + 6543, + 6845, + 36338, + 25367, + 5129, + 10769, + 24368, + 31583, + 4124, + 66727, + 6650, + 19495, + 8370, + 9298, + 9727, + 60269, + 74414, + 12997, + 5409, + 47197, + 12880, + 8495, + 5432, + 30252, + 7227, + 9795, + 37133, + 6059, + 62022, + 4290, + 9943, + 12046, + 17125, + 7983, + 45429, + 10089, + 3986, + 9826, + 17336, + 13766, + 36974, + 10031, + 17489, + 17140, + 9684, + 8735, + 12829, + 224311, + 14479, + 12320, + 35116, + 6955, + 8712, + 5258, + 16201, + 41629, + 10733, + 90051, + 26322, + 7457, + 7473, + 94583, + 142531, + 7467, + 336336, + 5486, + 65720, + 141784, + 14236, + 39517, + 32834, + 27163, + 10831, + 149676, + 168473, + 6180, + 11182, + 34783, + 18340, + 10492, + 6754, + 5786, + 27290, + 158531, + 7830, + 20410, + 30584, + 29592, + 46003, + 34366, + 9463, + 23999, + 4662, + 23048, + 19932, + 18783, + 4240, + 29378, + 182390, + 7473, + 111551, + 47354, + 10356, + 37039, + 81674, + 25302, + 24753, + 184601, + 7175, + 165698, + 17835, + 5988, + 10139, + 30463, + 295756, + 6386, + 9390, + 11336, + 8271, + 4717, + 9558, + 22680, + 40584, + 22451, + 63971, + 14535, + 270796, + 21572, + 12656, + 52337, + 5626, + 12621, + 8445, + 9536, + 4010, + 40274, + 18944, + 6082, + 8869, + 48212, + 5044, + 31068, + 14287, + 5604, + 13095, + 17616, + 68461, + 11266, + 16577, + 76842, + 31295, + 10327, + 8483, + 12124, + 80582, + 18948, + 11176, + 29794, + 4984, + 14034, + 6147, + 6903, + 12340, + 25304, + 6489, + 8343, + 29359, + 189386, + 17712, + 5692, + 56891, + 16807, + 25326, + 9523, + 6041, + 48149, + 33558, + 40734, + 6883, + 29010, + 337296, + 6650, + 87106, + 160389, + 10448, + 57211, + 8678, + 5679, + 11621, + 9301, + 8556, + 15697, + 41228, + 10456, + 7034, + 110059, + 150708, + 35587, + 17899, + 13093, + 21385, + 15168, + 42789, + 12850, + 6557, + 7587, + 10828, + 11873, + 5674, + 11478, + 8671, + 6730, + 11501, + 25680, + 63424, + 6410, + 1581459, + 53301, + 11376, + 5132, + 23895, + 5624, + 7355, + 30013, + 7376, + 14894, + 7016, + 8167, + 9726, + 96448, + 18810, + 5613, + 5592, + 16089, + 11982, + 7401, + 19339, + 6151, + 200558, + 115782, + 4291, + 5594, + 11122, + 15149, + 35099, + 53924, + 2956, + 11849, + 16355, + 14270, + 79407, + 14917, + 15364, + 62739, + 6005, + 627318, + 11217, + 167320, + 22325, + 75661, + 40644, + 16442, + 4750, + 13302, + 9914, + 5656, + 5785, + 8527, + 312548, + 6559, + 6093, + 5054, + 19805, + 15931, + 6198, + 3957, + 11044, + 63473, + 155459, + 7253, + 9966, + 270857, + 18501, + 38240, + 7599, + 14824, + 30674, + 12829, + 6122, + 3539, + 10925, + 263842, + 9611, + 13016, + 7902, + 7639, + 45548, + 12357, + 23523, + 34299, + 19668, + 14865, + 6677, + 26566, + 14986, + 4870, + 8603, + 11734, + 8117, + 32134, + 162834, + 28932, + 41162, + 5903, + 38430, + 48182, + 6279, + 27914, + 7202, + 108665, + 41136, + 30647, + 28422, + 5061, + 9663, + 7317, + 17317, + 6068, + 86518, + 17960, + 34452, + 15406, + 17272, + 7096, + 41443, + 9482, + 8962, + 4186, + 4325880, + 27914, + 8486, + 6577, + 9759, + 22470, + 9770, + 5853, + 8940, + 4131, + 11899, + 14735, + 28681, + 24530, + 12739, + 50333, + 15265, + 13715, + 6869, + 13947, + 102082, + 195020, + 56462, + 8547, + 15846, + 8717, + 13529, + 5262, + 18511, + 26393, + 6139, + 12643, + 14153, + 39779, + 39148, + 9825, + 28048, + 6496, + 7086, + 24043, + 126060, + 11776, + 150715, + 48061, + 12863, + 25338, + 97916, + 4801, + 6282, + 12144, + 94575, + 5560, + 6235, + 8278, + 93429, + 93036, + 53980, + 172232, + 8167, + 18043, + 9179, + 9215, + 29974, + 13297, + 27115, + 27014, + 66589, + 51408, + 13561, + 10878, + 127182, + 34547, + 60843, + 94884, + 13153, + 10598, + 26462, + 9071, + 64120, + 68430, + 17679, + 62221, + 309428, + 15680, + 10231, + 6915, + 3712, + 47922, + 12857, + 13849, + 9025, + 77191, + 22677, + 8384, + 13014, + 4544, + 6623, + 10537, + 8546, + 8846, + 28164, + 7107, + 15173, + 3949, + 11966, + 22890, + 9683, + 218441, + 72501, + 11370, + 10601, + 6249, + 13135, + 22491, + 10644, + 33875, + 22099, + 13496, + 5330, + 44711, + 22205, + 28856, + 9914, + 7947, + 406331, + 272057, + 68213, + 50794, + 18838, + 24662, + 12142, + 29263, + 7214, + 84578, + 15280, + 33333, + 16889, + 85503, + 19210, + 12304, + 46934, + 49080, + 188433, + 42184, + 13934, + 21148, + 13484, + 5255, + 278687, + 203970, + 12607, + 7097, + 3750, + 6799, + 169330, + 3421, + 22445, + 8645, + 205836, + 4296, + 22211, + 166453, + 65545, + 20621, + 12424, + 5844, + 25489, + 12347, + 7960, + 7399, + 33767, + 10464, + 9320, + 7763, + 7440, + 6370, + 35733, + 6059, + 31087, + 40300, + 17261, + 23892, + 47034, + 5814, + 275511, + 5948, + 30830, + 63926, + 7995, + 101917, + 13529, + 20670, + 6335, + 13315, + 7348, + 61395, + 39858, + 12823, + 37086, + 12588, + 159408, + 35296, + 18491, + 38682, + 9771, + 6792, + 12087, + 8587, + 54856, + 78128, + 62214, + 10718, + 13766, + 17371, + 20431, + 39196, + 8799, + 5273, + 37474, + 7206, + 20590, + 4693, + 42918, + 10945, + 26020, + 7213, + 76256, + 35629, + 3525, + 15853, + 450121, + 20943, + 9158, + 7863, + 12848, + 7162, + 12885, + 5522, + 9211, + 5320, + 8690, + 17245, + 32718, + 6150, + 4874, + 36814, + 42981, + 7181, + 8660, + 8155, + 6315, + 6008, + 30997, + 3419, + 8080, + 10844, + 133636, + 5780, + 19799, + 9585, + 7239, + 11192, + 4499, + 84662, + 8124, + 15175, + 6969, + 164855, + 13761, + 6965, + 63590, + 8232, + 86965, + 6523, + 41963, + 7444, + 18196, + 77122, + 7330, + 11036, + 7912, + 13920, + 5414, + 107385, + 21275, + 46901, + 12717, + 4815, + 10533, + 72617, + 108231, + 9786, + 12895, + 20984, + 261153, + 80714, + 20474, + 10695, + 216041, + 46153, + 13944, + 18851, + 9264, + 7493, + 9111, + 13955, + 13030, + 31980, + 6438, + 11087, + 13913, + 9436, + 31178, + 10271, + 3367, + 5447, + 18405, + 15534, + 16863, + 19140, + 5879, + 6595, + 20444, + 50613, + 10174, + 9324, + 15778, + 7160, + 6116, + 5967, + 12111, + 165566, + 7220, + 219605, + 25485, + 22501, + 133865, + 44123, + 15971, + 10458, + 103448, + 10391, + 42021, + 33340, + 21981, + 7045, + 24689, + 5089, + 169010, + 18251, + 7031, + 9208, + 8221, + 6944, + 354956, + 42910, + 20748, + 64256, + 27442, + 11664, + 10365, + 220120, + 1257838, + 65958, + 4811, + 7629, + 5516, + 16144, + 23622, + 6605, + 25458, + 5629, + 24702, + 7729, + 5204, + 16391, + 28940, + 11270, + 90165, + 7503, + 7317, + 6841, + 5522, + 12348, + 9226, + 150120, + 10996, + 21126, + 138265, + 10113, + 7476, + 8965, + 133734, + 16761, + 18832, + 86078, + 16651, + 11610, + 99752, + 73911, + 6243, + 8714, + 6066, + 10715, + 44757, + 9856, + 16159, + 7717, + 11910, + 10307, + 82767, + 62857, + 10330, + 16303, + 7736, + 56448, + 29612, + 6909, + 4504, + 4549, + 9704, + 16978, + 60605, + 12629, + 94915, + 13709, + 22189, + 8778, + 9808, + 52737, + 109803, + 7386, + 4729, + 9912, + 32525, + 16015, + 2770, + 11043, + 6395, + 19725, + 8593, + 18350, + 19255, + 13891, + 19682, + 15595, + 29950, + 3484, + 29250, + 11769, + 29898, + 167895, + 276745, + 49594, + 4407, + 7604, + 19242, + 32266, + 7851, + 6110, + 177559, + 12273, + 7651, + 22873, + 4479, + 6609, + 14297, + 5064, + 5435, + 66461, + 20961, + 91113, + 18497, + 13634, + 6154, + 14950, + 8788, + 13924, + 15844, + 11287, + 5629, + 14200, + 5772, + 12382, + 10320, + 13059, + 54274, + 69281, + 27497, + 147556, + 6923, + 7163, + 7198, + 1935672, + 124061, + 22658, + 15773, + 9563, + 21290, + 42651, + 8170, + 18807, + 15602, + 5382, + 34419, + 8640, + 12042, + 16400, + 6219, + 81056, + 3010, + 13834, + 14062, + 11531, + 9468, + 5429, + 128561, + 5431, + 8344, + 3260, + 8107, + 35996, + 299440, + 26362, + 7140, + 12524, + 14814, + 7604, + 7804, + 15196, + 62647, + 10164, + 48503, + 30136, + 24267, + 84096, + 7184, + 6389, + 9240, + 23078, + 43081, + 123722, + 38145, + 89830, + 11061, + 10241, + 5933, + 11231, + 23136, + 10997, + 47737, + 10122, + 16396, + 11634, + 16840, + 29125, + 3758, + 19630, + 22723, + 6928, + 9963, + 8399, + 30367, + 20515, + 20634, + 8967 + ] + }, + { + "counters": [ + 5739, + 206134, + 18552, + 274905, + 7041, + 12702, + 9321, + 5132, + 5804, + 89440, + 5061, + 26085, + 11622, + 307189, + 125163, + 172490, + 22387, + 1862910, + 10112, + 10265, + 21301, + 4608, + 14717, + 5517, + 6859, + 11834, + 279525, + 25236, + 29622, + 8426, + 4315, + 20224, + 15241, + 20346, + 6017, + 7915, + 52518, + 14073, + 16778, + 53977, + 14941, + 13424, + 4187, + 32496, + 8909, + 45903, + 3179, + 30781, + 13492, + 18518, + 29724, + 10508, + 16244, + 134765, + 4632, + 4255, + 15219, + 7126, + 4292812, + 48211, + 30204, + 14612, + 5767, + 7849, + 19640, + 12348, + 7746, + 56939, + 22076, + 67767, + 16088, + 24976, + 16009, + 26898, + 29543, + 16481, + 14716, + 19577, + 32539, + 97126, + 19038, + 28797, + 39847, + 11786, + 10156, + 152572, + 11846, + 34369, + 8932, + 55136, + 20060, + 4910, + 7356, + 3640, + 139825, + 11797, + 26592, + 68526, + 5810, + 6055, + 23090, + 10244, + 7718, + 22535, + 615753, + 6818, + 32107, + 12728, + 66867, + 175423, + 4883, + 6664, + 10435, + 22629, + 7465, + 115400, + 18001, + 26963, + 49206, + 16976, + 16850, + 12586, + 70994, + 5938, + 3767, + 3393, + 260617, + 26827, + 14103, + 54090, + 49723, + 3459, + 9652, + 105552, + 39866, + 14073, + 7761, + 21939, + 150422, + 8192, + 22400, + 6694, + 17340, + 9076, + 56041, + 5013, + 9841, + 10067, + 17802, + 223264, + 7696, + 14685, + 9326, + 6646, + 12837, + 48840, + 16603, + 10504, + 14663, + 27478, + 32359, + 4973, + 5354, + 38274, + 2781, + 7840, + 5897, + 5690, + 14039, + 11893, + 10721, + 33362, + 13049, + 35869, + 3290, + 17284, + 197317, + 10297, + 178204, + 13468, + 8398, + 12728, + 24624, + 24122, + 21081, + 82270, + 7530, + 32423, + 23444, + 10665, + 7526, + 12110, + 18267, + 86425, + 7668, + 6553, + 103179, + 18802, + 16934, + 5924, + 7875, + 8825, + 11622, + 10008, + 23907, + 6676, + 76523, + 15702, + 5444, + 141770, + 6883, + 18558, + 39328, + 18865, + 14587, + 23782, + 20916, + 27958, + 19631, + 28340, + 13062, + 19058, + 42265, + 22669, + 3409, + 29625, + 26389, + 27082, + 4517, + 6606, + 17275, + 10327, + 341135, + 13964, + 5151, + 10213, + 30015, + 33851, + 24197, + 9327, + 15410, + 47986, + 11706, + 17171, + 202080, + 9254, + 175872, + 5700, + 8112, + 15876, + 10710, + 10660, + 17222, + 28553, + 3718, + 4894, + 11102, + 6300, + 48723, + 17015, + 7452, + 13266, + 8284, + 15455, + 9000, + 30327, + 13578, + 6489, + 9536, + 108349, + 14746, + 40862, + 10580, + 4897, + 5369, + 281959, + 3733, + 88187, + 26784, + 79962, + 4400, + 1273491, + 18987, + 167489, + 8915, + 15462, + 5490, + 12030, + 33219, + 10625, + 112032, + 23562, + 6271, + 7907, + 5296, + 6967, + 10920, + 6783, + 15254, + 23653, + 20617, + 21820, + 5253, + 8935, + 7113, + 9731, + 6920, + 17010, + 6729, + 49732, + 169012, + 10525, + 5469, + 4805, + 7568, + 20587, + 36061, + 218173, + 14164, + 10530, + 6331, + 22577, + 381453, + 3880, + 19462, + 62185, + 12370, + 10320, + 20069, + 369613, + 87024, + 55043, + 174664, + 17282, + 13281, + 12682, + 33584, + 24308, + 11906, + 90920, + 14216, + 7832, + 8203, + 10999, + 20208, + 14657, + 33154, + 86050, + 47746, + 20372, + 17085, + 7130, + 6015, + 14431, + 69993, + 191856, + 6821, + 22628, + 74211, + 14453, + 24604, + 27313, + 9090, + 25862, + 48313, + 44574, + 14870, + 12145, + 6429, + 52074, + 4964, + 7421, + 7274, + 5469, + 95507, + 12985, + 12164, + 73904, + 9513, + 2392, + 18512, + 37971, + 9535, + 11549, + 5571, + 140189, + 13282, + 88800, + 219577, + 47640, + 6268, + 10982, + 10705, + 88616, + 66050, + 34225, + 15247, + 35076, + 12445, + 10739, + 17124, + 13252, + 25024, + 8319, + 122426, + 14428, + 56938, + 7159, + 4232, + 14228, + 10223, + 9158, + 61529, + 14853, + 25247, + 17739, + 31158, + 11333, + 14724, + 80334, + 9708, + 5276, + 6093, + 8157, + 11731, + 51818, + 5998, + 16239, + 7058, + 9570, + 55355, + 16257, + 23107, + 14175, + 62844, + 10454, + 6717, + 76818, + 9578, + 33523, + 7038, + 12811, + 13654, + 8747, + 7612, + 8368, + 85785, + 6746, + 11351, + 27905, + 8406, + 90722, + 12428, + 204369, + 12555, + 20482, + 67209, + 4721, + 29876, + 6377, + 5895, + 7464, + 5047, + 5162, + 25467, + 12850, + 5330, + 11348, + 41065, + 4016, + 124572, + 109567, + 10461, + 8797, + 6401, + 8661, + 8547, + 5863, + 5709, + 11295, + 6172, + 4733, + 6046, + 3272, + 32884, + 210248, + 78301, + 8134, + 3017, + 6321, + 157205, + 33422, + 61571, + 16400, + 16510, + 17342, + 101460, + 8198, + 47261, + 24996, + 9804, + 20441, + 169344, + 68346, + 23497, + 10005, + 31612, + 11938, + 10871, + 28053, + 8274, + 8402, + 9230, + 109830, + 104045, + 10056, + 6982, + 258402, + 5912, + 9064, + 56934, + 44897, + 14795, + 16326, + 11947, + 4854, + 10989, + 20700, + 70562, + 23112, + 72724, + 21742, + 9350, + 135589, + 11104, + 6411, + 1895151, + 11415, + 8722, + 20274, + 25258, + 21822, + 26897, + 18985, + 27047, + 21338, + 97505, + 61591, + 32139, + 299975, + 7441, + 13005, + 3685, + 36532, + 7883, + 5605, + 59928, + 19572, + 11093, + 4483, + 39503, + 10323, + 111665, + 265719, + 14901, + 6052, + 6787, + 25442, + 43303, + 7682, + 9157, + 15435, + 57563, + 5370, + 54159, + 49559, + 42527, + 15134, + 6747, + 7758, + 5895, + 8877, + 34254, + 13619, + 6084, + 26088, + 5710, + 8539, + 20124, + 24841, + 5214, + 8675, + 3957, + 9915, + 55680, + 8701, + 11903, + 5936, + 14387, + 39612, + 27119, + 38797, + 10212, + 96404, + 35884, + 32409, + 7390, + 34311, + 46461, + 6742, + 41133, + 18193, + 12058, + 5027, + 8455, + 6297, + 7051, + 7644, + 6906, + 6114, + 8597, + 12652, + 61175, + 8138, + 6241, + 14130, + 6662, + 14381, + 16235, + 8644, + 10788, + 293907, + 20785, + 157224, + 7566, + 6934, + 48579, + 14774, + 37716, + 4986, + 15018, + 9917, + 164600, + 6982, + 206068, + 60477, + 11825, + 166908, + 5174, + 8852, + 34831, + 12625, + 35896, + 10628, + 286747, + 8876, + 19842, + 17219, + 16688, + 31654, + 5910, + 14303, + 163632, + 280651, + 8782, + 7849, + 33533, + 17359, + 7403, + 4161, + 26575, + 42807, + 50801, + 21514, + 5931, + 39413, + 5277, + 17018, + 14972, + 79153, + 76525, + 16463, + 128585, + 27555, + 13204, + 42391, + 63202, + 16984, + 19760, + 26276, + 68714, + 7991, + 21987, + 4604, + 33769, + 3634, + 7060, + 28468, + 26322, + 16212, + 4552, + 32973, + 28672, + 92222, + 16986, + 19087, + 41490, + 6939, + 6186, + 9316, + 22474, + 12578, + 14566, + 80214, + 24599, + 309198, + 8077, + 9458, + 8417, + 5424, + 9236, + 18638, + 61462, + 54065, + 24812, + 14532, + 152603, + 7994, + 26309, + 48731, + 30887, + 6188, + 12744, + 9842, + 111441, + 7623, + 99342, + 19481, + 13178, + 74432, + 11205, + 44295, + 144160, + 18682, + 3695, + 11009, + 6975, + 16663, + 21423, + 14281, + 18742, + 5834, + 7097, + 5179, + 6464, + 20778, + 6386, + 5615, + 23588, + 13750, + 11926, + 9116, + 15693, + 262738, + 48061, + 12093, + 4732, + 13494, + 6529, + 25917, + 39750, + 42257, + 67884, + 42057, + 6157, + 26690, + 10217, + 9416, + 60377, + 5108, + 11875, + 7827, + 3841, + 10810, + 23271, + 40774, + 356222, + 19725, + 11824, + 8441, + 13702, + 4563, + 70066, + 4842, + 35979, + 73024, + 173411, + 14592, + 3870, + 348863, + 30692, + 133224, + 158167, + 23674, + 21237, + 26219, + 5685, + 6590, + 6865, + 85444, + 55681, + 7172, + 10423, + 7755, + 42468, + 6755, + 8591, + 7330, + 9809, + 21752, + 6290, + 21645, + 7065, + 54052, + 12616, + 7898, + 10591, + 5653, + 8076, + 20295, + 139431, + 6826, + 148004, + 8974, + 196296, + 3836, + 3286, + 41820, + 541042, + 5659, + 9980, + 24539, + 22463, + 34842, + 10695, + 178122, + 5965, + 3955, + 52300, + 18113, + 10716, + 116663, + 8952, + 7853, + 23242, + 9304, + 5864, + 7050, + 5934, + 14888, + 6277, + 335660, + 9191, + 42522, + 31985, + 12488, + 11256, + 3867, + 21110, + 23419, + 31223, + 12493, + 17853, + 11256, + 22623, + 9575, + 11441, + 11857, + 14566, + 14160, + 6398, + 14904, + 23710, + 6711, + 28004, + 8841, + 32565, + 10122, + 12548, + 42170, + 18739, + 11677, + 15601, + 7052, + 4135, + 5035, + 5157, + 49242, + 21175, + 51731, + 14459, + 37009, + 5291, + 9943, + 21002, + 6395, + 10720, + 73404, + 23634, + 39832, + 15928, + 51726, + 5933, + 7350, + 8554, + 13136, + 5927, + 26521, + 38309, + 3809, + 11062, + 46741, + 27397, + 36792, + 8044, + 7337, + 49136, + 143264, + 122260, + 9496, + 26052, + 7760, + 13362, + 51414, + 9389, + 5327, + 8129, + 22165, + 6008, + 7886, + 16727, + 6742, + 33816, + 11244, + 8237, + 11178, + 17298, + 37798, + 19456, + 10891, + 5122, + 6828, + 99817, + 193915, + 71202, + 22065, + 9764, + 14817, + 5608, + 22850, + 213221, + 17346, + 23836, + 7791, + 9926, + 7123, + 4340, + 210525, + 17739, + 98936, + 176457, + 4187, + 10238, + 6634, + 194965, + 18432, + 4033, + 71382, + 21309, + 54132, + 14539, + 32894, + 5003, + 8055, + 35142, + 57009, + 6604, + 165638, + 233339, + 11443, + 10622, + 317479, + 36537, + 150287, + 19789, + 44584, + 6859, + 7754, + 91713, + 41255, + 7905, + 77114, + 5414, + 63522, + 7230, + 39686, + 13212, + 5782, + 29751, + 46006, + 15529, + 8134, + 6976, + 12369, + 44487, + 12702, + 6616, + 4239, + 11975, + 20148, + 7395, + 14892, + 4708, + 24148, + 11028, + 142656, + 67202, + 29940, + 27690, + 63880, + 569509, + 56966, + 26374, + 87314, + 26267, + 12822, + 9677, + 137736, + 8363, + 268269, + 14579, + 18258, + 13636, + 6200, + 5983, + 17156, + 15288, + 32843, + 12010, + 65997, + 43003, + 6350, + 5751, + 135371, + 12173, + 19644, + 38624, + 12086, + 9860, + 33661, + 50746, + 21225, + 23020, + 9877, + 8029, + 31333, + 5422, + 17446, + 7247, + 27714, + 49296, + 9897, + 13825, + 4950, + 5249, + 11020, + 17239, + 16173, + 22598, + 11242, + 8777, + 163318, + 60592, + 93917, + 9525, + 25347, + 65408, + 3298, + 16587, + 178114, + 4783, + 12203, + 21843, + 7401, + 21701, + 7649, + 32551, + 16977, + 12637, + 10797, + 5121, + 27386, + 41563, + 52586, + 583749, + 60967, + 49768, + 25170, + 15677, + 10202, + 11049, + 24756, + 356726, + 5559, + 93226, + 13944, + 48959, + 173875, + 87378, + 425279, + 3719, + 9874, + 7067, + 8683, + 15976, + 11386, + 19422, + 10396, + 22864, + 20888, + 9031, + 8991, + 8956, + 146627, + 19018, + 293077, + 39451, + 62853, + 6914, + 5730, + 7350, + 9324, + 6212, + 22131, + 15734, + 4970, + 6061, + 61478, + 271859, + 17254, + 10319, + 28783, + 60853, + 39454, + 16627, + 14048, + 7341, + 7324, + 6710, + 15544, + 8654, + 6359, + 33580, + 7895, + 96526, + 38686, + 210574, + 61238, + 7035, + 20476, + 15709, + 71560, + 58512, + 5964, + 102037, + 7503, + 6155, + 24447, + 6000, + 13566, + 134056, + 80485, + 8156, + 11619, + 4449, + 4550, + 8843, + 17844, + 8941, + 6628, + 9812, + 9040, + 8605, + 26630, + 22031, + 10755, + 8693, + 39203, + 12808, + 167296, + 171987, + 37013, + 5052, + 4783, + 61187, + 24612, + 48600, + 11034, + 8395, + 9690, + 14963, + 8979, + 10954, + 13248, + 222326, + 8044, + 2802, + 100959, + 286582, + 115868, + 26887, + 5349, + 90004, + 45279, + 151604, + 14238, + 11217, + 8501, + 23773, + 127868, + 12179, + 8780, + 64347, + 143170, + 38824, + 19488, + 13670, + 22453, + 24105, + 63530, + 20915, + 11795, + 42256, + 31115, + 22774, + 10648, + 23014, + 7448, + 392995, + 7882, + 9510, + 10807, + 5798, + 8651, + 62362, + 9270, + 5168, + 13085, + 372079, + 4228, + 80484, + 93243, + 169703, + 78110, + 19901, + 9974, + 6512, + 7120, + 22517, + 10089, + 13709, + 76237, + 10844, + 5652, + 4246, + 31251, + 35389, + 2700, + 15561, + 10527, + 11427, + 36781, + 24395, + 5616, + 9003, + 75875, + 7020, + 82749, + 10051, + 19373, + 20915, + 21081, + 151682, + 30031, + 12975, + 15020, + 43012, + 9316, + 31005, + 19033, + 5306, + 5188, + 38354, + 89275, + 50852, + 296324, + 43570, + 59609, + 6541, + 7011, + 5211, + 15754, + 16113, + 8219, + 12870, + 9112, + 47954, + 12056, + 23788, + 27609, + 4151, + 31964, + 156480, + 38916, + 13702, + 18568, + 26386, + 16397, + 10323, + 40004, + 24614, + 14666, + 21765, + 15202, + 177664, + 6410, + 5683, + 6547, + 11947, + 19146, + 5955, + 11007, + 8878, + 12324, + 7738, + 5559, + 11967, + 83432, + 34512, + 28104, + 32285, + 22514, + 10593, + 12793, + 11343, + 30788, + 31431, + 5825, + 44700, + 9522, + 88717, + 9692, + 11360, + 4994, + 33519, + 8788, + 26415, + 28662, + 12422, + 69885, + 5463, + 48759, + 217441, + 17923, + 8299, + 1544259, + 13575, + 77178, + 15926, + 5419, + 12831, + 119203, + 124132, + 62123, + 16005, + 12138, + 5231, + 35418, + 51870, + 11312, + 4241, + 11067, + 124208, + 12975, + 14009, + 39319, + 11296, + 20455, + 4517, + 4849, + 68204, + 110970, + 9890, + 7943, + 23463, + 4755, + 20087, + 9957, + 6533, + 10701, + 82460, + 7970, + 12945, + 24481, + 10285, + 25966, + 3954, + 10125, + 237826, + 34704, + 402487, + 109921, + 4568, + 117273, + 8943, + 55781, + 6228, + 23494, + 4844, + 22499, + 104872, + 21613, + 19282, + 4679, + 5637, + 24967, + 4320, + 9244, + 69795, + 5924, + 6686, + 134242, + 62426, + 6318, + 14851, + 7672, + 35401, + 5159, + 7353, + 14076, + 51870, + 24430, + 7648, + 27417, + 15002, + 10265, + 25230, + 45635, + 8950, + 13793, + 157636, + 35327, + 5773, + 38326, + 8023, + 16387, + 20044, + 9092, + 125434, + 7334, + 7640, + 5779, + 42723, + 10207, + 69508, + 33365, + 22332, + 27915, + 8429, + 4797, + 17182, + 13799, + 7851, + 5290, + 3734, + 15606, + 11474, + 18031, + 5187, + 28652, + 38408, + 9812, + 5006, + 70552, + 113284, + 45551, + 5094, + 10306, + 14083, + 11242, + 6897, + 7846, + 4936, + 40480, + 4783, + 52614, + 38337, + 10655, + 7044, + 13042, + 16273, + 5684, + 7145, + 25569, + 170398, + 12602, + 209302, + 10115, + 7170, + 6146, + 9852, + 13208, + 11232, + 87073, + 41287, + 6054, + 31314, + 15080, + 31657, + 62974, + 171400, + 162553, + 15833, + 116301, + 20925, + 10659, + 37641, + 3907, + 137738, + 60224, + 187287, + 9542, + 3961, + 9814, + 7419, + 12926, + 23003, + 7352, + 7751, + 55325, + 15466, + 7800, + 9781, + 5087, + 7855, + 5281, + 37823, + 5363, + 4537, + 37278, + 10689, + 6824, + 41637, + 10993, + 17940, + 89203, + 6277, + 16425, + 43368, + 31487, + 32479, + 8294, + 110898, + 12593, + 12161, + 6303, + 11961, + 10967, + 6108, + 33227, + 137480, + 12479, + 15361, + 6008, + 88585, + 12854, + 11161, + 16593, + 10174, + 20014, + 12126, + 53240, + 18456, + 22775, + 80146, + 45344, + 25770, + 208869, + 5152, + 51529, + 47862, + 7955, + 11396, + 9605, + 19824, + 23118, + 46509, + 336926, + 40901, + 5052, + 44373, + 80275, + 6638, + 128221, + 75178, + 259043, + 6715, + 13858, + 9815, + 14583, + 5370, + 10096, + 21484, + 112850, + 33991, + 11248, + 4453, + 150286, + 6019, + 21617, + 53334, + 6329, + 15037, + 24361, + 13592, + 10115, + 86575, + 6248, + 13196, + 51930, + 18932, + 5304, + 70886, + 10938, + 10161, + 6728, + 30276, + 5551, + 18616, + 18096, + 10428, + 10746, + 4739, + 22500, + 8785, + 17110, + 5231, + 54467, + 109217, + 9403, + 14811, + 54420, + 105738, + 5845, + 77563, + 7213, + 11796, + 6260, + 21742, + 156961, + 8840, + 10586, + 60822, + 6719, + 18626, + 63184, + 47637, + 14962, + 5303, + 36243, + 17167, + 6910, + 5823, + 4134, + 19605, + 64305, + 8516, + 11139, + 8722, + 75629, + 6448, + 7374, + 7298, + 5214, + 6167, + 5933, + 12176, + 51228, + 134578, + 16912, + 12519, + 10607, + 11402, + 12585, + 7967, + 8550, + 12384, + 9591, + 44820, + 28791, + 7675, + 16295, + 124855, + 15870, + 9418, + 11653, + 29486, + 10930, + 9309, + 10148, + 22117, + 17010, + 6843, + 7339, + 23924, + 6396, + 14174, + 4886, + 26119, + 80397, + 24700, + 13513, + 4640, + 10535, + 14378, + 20399, + 12271, + 93444, + 11131, + 7735, + 4613, + 7827, + 13203, + 8991, + 184342, + 5770, + 9766, + 7803, + 9705, + 27989, + 190856, + 8841, + 4589, + 41744, + 11502, + 8257, + 20938, + 9810, + 4849, + 20357, + 8148, + 9263, + 8658, + 125266, + 47883, + 51416, + 18643, + 6158, + 31822, + 9100, + 4844, + 24937, + 40799, + 9876, + 6819, + 8052, + 18012, + 31428, + 12733, + 102279, + 147045, + 8528, + 141920, + 6659, + 4505, + 20599, + 31796, + 1047527, + 3763, + 17620, + 14942, + 7483, + 22169, + 24890, + 25747, + 28779, + 6902, + 15965, + 20303, + 9236, + 4384, + 278065, + 253428, + 9277, + 11274, + 5588, + 57204, + 34269, + 8250, + 7542, + 7917, + 21306, + 357996, + 7766, + 25640, + 36127, + 18431, + 67960, + 36790, + 4786, + 45992, + 9724, + 5789, + 9855, + 286572, + 46937, + 9392, + 3491, + 4080, + 21427, + 8689, + 6241, + 20389, + 165430, + 11032, + 14691, + 20593, + 36510, + 50873, + 5336, + 8386, + 15033, + 80852, + 7394, + 9587, + 270898, + 14598, + 11429, + 176044, + 33481, + 65171, + 6381, + 17564, + 24838, + 7111, + 5152, + 6200, + 4833, + 12015, + 5608, + 4983, + 22929, + 10323, + 169740, + 139732, + 6300, + 117078, + 197216, + 9954, + 5957, + 25028, + 54165, + 11446, + 8099, + 81586, + 9168, + 5019, + 77767, + 11164, + 13451, + 40841, + 7332, + 60467, + 8856, + 11346, + 93418, + 3991, + 14963, + 3735, + 10413, + 6681, + 6319, + 16577, + 5218, + 79191, + 40260, + 29687, + 194970, + 8433, + 33575, + 29788, + 8733, + 312026, + 7669, + 10948, + 16396, + 10385, + 203411, + 9386, + 6774, + 57103, + 24841, + 22111, + 4616, + 9154, + 4904, + 17776, + 7226, + 11099, + 26974, + 12918, + 7578, + 8198, + 7992, + 9675, + 40705, + 13125, + 45728, + 3735, + 12922, + 7892, + 26166, + 4547, + 14479, + 10885, + 13745, + 14486, + 11290, + 132752, + 7283, + 50936, + 32768, + 107157, + 74857, + 31818, + 4248, + 56395, + 11981, + 18278, + 13531, + 17596, + 35245, + 8568, + 22141, + 16972, + 6651, + 11201, + 5086, + 2279, + 64603, + 41711, + 9512, + 4697, + 16395, + 6190, + 7415, + 9274, + 7149, + 9214, + 38101, + 26999, + 234717, + 5798, + 8090, + 11736, + 7640, + 11097, + 61151, + 103583, + 443126, + 640924, + 1575590, + 9307, + 19320, + 36516, + 8067, + 61806, + 10347, + 9527, + 25106, + 8990, + 8891, + 6296, + 119519, + 25671, + 7471, + 4722, + 40799, + 8338, + 6611, + 14486, + 56032, + 9100, + 73428, + 12184, + 8734, + 4504, + 9857, + 50187, + 9514, + 5485, + 12918, + 3958, + 19129, + 30665, + 23670, + 20647, + 5052, + 12821, + 12731, + 5754, + 72170, + 22988, + 7293, + 21692, + 55373, + 32252, + 18085, + 14687, + 56660, + 87331, + 14711, + 29120, + 14622, + 43992, + 97353, + 7549, + 5484, + 29571, + 7292, + 15218, + 167962, + 21131, + 15572, + 17724, + 18124, + 9842, + 8734 + ] + }, + { + "counters": [ + 7535, + 7949, + 5275, + 30373, + 16190, + 45341, + 5588, + 11504, + 75258, + 14165, + 175560, + 6021, + 8444, + 114571, + 11396, + 19100, + 365337, + 9971, + 169275, + 14908, + 23087, + 20814, + 45394, + 105388, + 24005, + 14404, + 11348, + 19056, + 92240, + 85035, + 5912, + 6566, + 5907, + 9837, + 11541, + 5954, + 17639, + 11184, + 11419, + 4721, + 3665, + 7704, + 100243, + 166385, + 14209, + 284055, + 4825, + 6373, + 9833, + 12359, + 7342, + 14927, + 22837, + 116280, + 4648, + 48707, + 8387, + 54219, + 19399, + 19695, + 27066, + 47924, + 26210, + 12143, + 8356, + 11764, + 15654, + 4595, + 11808, + 14503, + 292990, + 3457, + 8372, + 20771, + 11640, + 229039, + 4759, + 5006, + 12934, + 89657, + 13118, + 9944, + 41197, + 93877, + 7045, + 8659, + 55618, + 13117, + 41087, + 42294, + 48415, + 164417, + 12249, + 12571, + 18233, + 6724, + 6169, + 213119, + 7362, + 7203, + 2971, + 269302, + 10556, + 8128, + 17838, + 193687, + 7180, + 1975498, + 25489, + 8609, + 8719, + 40328, + 44161, + 10262, + 13903, + 6327, + 7330, + 6728, + 7906, + 54312, + 16060, + 32271, + 25511, + 65577, + 287560, + 6738, + 41405, + 8153, + 10222, + 8092, + 23532, + 10019, + 8714, + 15226, + 4198, + 32058, + 8015, + 14633, + 15422, + 15292, + 14639, + 6619, + 34185, + 9696, + 15932, + 7844, + 54747, + 10668, + 10456, + 8795, + 17732, + 11721, + 15472, + 16715, + 6422, + 17555, + 39731, + 11233, + 57216, + 28022, + 6287, + 175580, + 7289, + 13535, + 6136, + 3723, + 8172, + 7736, + 17886, + 50938, + 14248, + 95660, + 6254, + 7093, + 26375, + 84501, + 17187, + 44783, + 4181, + 57495, + 420633, + 29903, + 222700, + 18650, + 28501, + 4816, + 145058, + 73397, + 6711, + 5856, + 16133, + 42775, + 19027, + 9566, + 31139, + 46933, + 4042, + 42166, + 439579, + 77469, + 7587, + 20133, + 12276, + 14679, + 106347, + 103292, + 11012, + 17308, + 105095, + 8751, + 16670, + 13530, + 5820, + 15000, + 74345, + 40111, + 11743, + 8712, + 7310, + 98009, + 13077, + 17880, + 14456, + 30960, + 63151, + 33863, + 10128, + 16426, + 7341, + 11850, + 5136, + 47152, + 7549, + 99074, + 8858, + 7209, + 7506, + 10874, + 5990, + 17374, + 249662, + 60308, + 22793, + 25701, + 9242, + 24086, + 6328, + 160353, + 17866, + 23767, + 8129, + 65566, + 8153, + 4744, + 99478, + 9040, + 20459, + 9819, + 19587, + 31206, + 13595, + 7794, + 12758, + 73878, + 25521, + 5145, + 12229, + 14701, + 60326, + 5136, + 13013, + 8336, + 81776, + 5005, + 6289, + 15133, + 12335, + 40422, + 9793, + 6160, + 13171, + 8876, + 13834, + 13650, + 9073, + 5549, + 14357, + 236406, + 12231, + 4747, + 15681, + 22828, + 8774, + 42029, + 36759, + 108808, + 37959, + 42604, + 19902, + 7216, + 26350, + 6485, + 16952, + 9479, + 292915, + 62605, + 8158, + 205830, + 21130, + 6756, + 7178, + 8006, + 6455, + 4642, + 37188, + 8221, + 71331, + 24898, + 6618, + 46539, + 12895, + 13675, + 3153, + 158069, + 101513, + 4748, + 40231, + 38507, + 10830, + 189899, + 10053, + 5172, + 354647, + 10598, + 33415, + 18860, + 10792, + 47611, + 5875, + 18226, + 34230, + 9055, + 69717, + 9517, + 11739, + 6742, + 18566, + 7654, + 60362, + 134817, + 5812, + 8984, + 16789, + 89161, + 7147, + 5923, + 37234, + 11739, + 81514, + 11467, + 102758, + 15106, + 46941, + 336872, + 42028, + 10480, + 4755, + 31841, + 7273, + 10398, + 14967, + 6007, + 19283, + 201090, + 6539, + 7571, + 3490, + 251162, + 55664, + 99812, + 224879, + 29658, + 9987, + 3963, + 7489, + 5071, + 9876, + 10100, + 48917, + 19034, + 5634, + 37369, + 19037, + 13580, + 185387, + 2147091, + 16453, + 12399, + 29200, + 149403, + 55983, + 45972, + 124534, + 5720, + 18798, + 256655, + 7231, + 10901, + 46707, + 73210, + 6229, + 50047, + 34800, + 74268, + 6939, + 12801, + 6830, + 55451, + 10955, + 4638, + 5330, + 13289, + 6491, + 6843, + 3381, + 5095, + 10987, + 10439, + 13114, + 8395, + 47388, + 7072, + 9205, + 10910, + 15153, + 5640, + 13923, + 34107, + 10877, + 52858, + 11901, + 14423, + 6536, + 89144, + 150944, + 23950, + 6354, + 67446, + 6969, + 7105, + 16893, + 9632, + 7405, + 138870, + 165778, + 18989, + 5222, + 174079, + 51099, + 10621, + 7763, + 22057, + 26211, + 11613, + 3314, + 142677, + 11646, + 4375, + 12311, + 14005, + 4781, + 6964, + 45820, + 6960, + 22913, + 100841, + 14027, + 14466, + 3729, + 11523, + 9211, + 11349, + 21619, + 22163, + 4863, + 9918, + 63455, + 3189, + 21347, + 39882, + 3583, + 6377, + 9985, + 17345, + 3979, + 8536, + 7548, + 11233, + 219901, + 6541, + 21116, + 77042, + 260576, + 55708, + 100137, + 4754, + 63094, + 10293, + 32828, + 85188, + 39778, + 16292, + 46042, + 653518, + 336183, + 18656, + 29488, + 10705, + 4469, + 10380, + 6021, + 14478, + 6066, + 56868, + 4924, + 7378, + 21788, + 11622, + 7562, + 6236, + 6081, + 7716, + 38881, + 6731, + 51953, + 27064, + 8702, + 7865, + 6245, + 60996, + 119024, + 28276, + 11730, + 6828, + 45035, + 19076, + 295023, + 185481, + 4190, + 8440, + 7839, + 39973, + 48567, + 20225, + 1588264, + 13804, + 7820, + 12134, + 36030, + 22842, + 16629, + 64088, + 7309, + 10182, + 187504, + 71523, + 42926, + 3949, + 171236, + 4405, + 337298, + 18591, + 7382, + 6696, + 7278, + 6134, + 9385, + 31309, + 4455, + 20928, + 64068, + 22820, + 8197, + 10748, + 12030, + 7446, + 8703, + 20534, + 18226, + 12971, + 8147, + 23821, + 14153, + 8316, + 96907, + 10940, + 15966, + 24241, + 5737, + 5785, + 16628, + 4089, + 31313, + 23959, + 279791, + 15947, + 37422, + 141377, + 10207, + 17477, + 203948, + 77294, + 44254, + 458661, + 8021, + 12798, + 15555, + 14334, + 35742, + 54003, + 7397, + 3517, + 3558, + 42362, + 8561, + 5577, + 8949, + 76812, + 8619, + 3519, + 97025, + 12732, + 60829, + 4101, + 6876, + 4803, + 29037, + 139759, + 4888, + 7204, + 9433, + 11257, + 9943, + 50084, + 14489, + 11111, + 300614, + 15315, + 12759, + 11354, + 5679, + 5022, + 8143, + 12669, + 90573, + 6033, + 21831, + 7151, + 6209, + 20027, + 30456, + 48570, + 6053, + 22978, + 14924, + 60255, + 1574328, + 7009, + 4541, + 11511, + 7982, + 14164, + 6894, + 4752, + 6688, + 10942, + 9651, + 8544, + 15023, + 9894, + 7508, + 5307, + 4251322, + 290911, + 6014, + 53949, + 190357, + 9404, + 25514, + 7304, + 21907, + 7753, + 4384, + 29783, + 8236, + 7813, + 8190, + 169205, + 104331, + 7372, + 62405, + 106193, + 5732, + 9749, + 6855, + 12514, + 24056, + 17980, + 11681, + 5672, + 155040, + 11460, + 45912, + 6928, + 60119, + 21208, + 35481, + 26750, + 15285, + 18043, + 12218, + 28923, + 40941, + 167840, + 38326, + 20287, + 49788, + 934611, + 9621, + 94818, + 9171, + 60871, + 4512, + 21494, + 7046, + 6965, + 21247, + 29995, + 13665, + 59113, + 7227, + 18156, + 60611, + 8325, + 7644, + 36845, + 41306, + 7178, + 151069, + 14634, + 7242, + 4742, + 25869, + 9445, + 9765, + 24101, + 27578, + 9552, + 16301, + 24017, + 6198, + 27873, + 3665, + 103137, + 10645, + 70681, + 1282123, + 12845, + 8845, + 24968, + 5593, + 6282, + 15527, + 14060, + 4328, + 5479, + 112815, + 45483, + 6495, + 14293, + 22085, + 20704, + 5680, + 18153, + 9291, + 25296, + 8291, + 15958, + 39587, + 10247, + 13948, + 6290, + 32596, + 15564, + 46861, + 10851, + 39836, + 10693, + 4470, + 40033, + 6283, + 7056, + 12213, + 4277, + 158451, + 24895, + 44654, + 5643, + 8569, + 4505, + 53322, + 17871, + 22388, + 9651, + 7345, + 8599, + 34961, + 118085, + 8638, + 9780, + 21272, + 85452, + 44812, + 7264, + 27765, + 10198, + 11026, + 28648, + 5819, + 5286, + 9345, + 11590, + 9146, + 13447, + 23458, + 10689, + 209712, + 22021, + 28358, + 11034, + 5734, + 16425, + 10927, + 14614, + 158670, + 259560, + 3738, + 27310, + 26843, + 14233, + 14144, + 5671, + 13253, + 23933, + 8721, + 18557, + 8562, + 53644, + 132314, + 12738, + 10236, + 264470, + 10493, + 19896, + 64488, + 68940, + 11156, + 11628, + 6938, + 21463, + 326387, + 10865, + 7061, + 15260, + 10023, + 133070, + 6876, + 7620, + 164415, + 19287, + 5855, + 215033, + 8300, + 13015, + 9454, + 5420, + 8020, + 9186, + 10812, + 18881, + 4005, + 15786, + 5093, + 93708, + 70367, + 8867, + 14769, + 15959, + 29177, + 87398, + 211683, + 23538, + 28789, + 62757, + 123117, + 10391, + 109356, + 25854, + 28145, + 6196, + 8438, + 24806, + 147292, + 10433, + 7740, + 12059, + 128717, + 64210, + 6726, + 8401, + 27041, + 4643, + 5028, + 7198, + 49262, + 3927, + 9857, + 24172, + 8408, + 31351, + 29442, + 74120, + 10177, + 7311, + 13758, + 7829, + 3194, + 48168, + 21567, + 8391, + 47557, + 5527, + 19963, + 4516, + 10379, + 13626, + 35267, + 12777, + 5908, + 51574, + 6274, + 17801, + 19888, + 87957, + 7834, + 89637, + 14172, + 19337, + 269906, + 9358, + 39596, + 4856, + 14121, + 58393, + 58187, + 9599, + 67925, + 9114, + 7774, + 9185, + 90904, + 6733, + 15876, + 58466, + 81624, + 4663, + 34326, + 15062, + 68475, + 5381, + 10736, + 53357, + 184926, + 64053, + 4040, + 32911, + 13270, + 46838, + 5280, + 109796, + 5495, + 4401, + 7631, + 61895, + 10632, + 37348, + 5634, + 48181, + 12432, + 20742, + 8965, + 28904, + 7988, + 10556, + 11694, + 79963, + 71306, + 11671, + 6193, + 9032, + 24319, + 13517, + 83110, + 5480, + 3938, + 9701, + 76944, + 119461, + 5573, + 43420, + 34237, + 11839, + 17904, + 19343, + 5618, + 8610, + 38449, + 10736, + 16682, + 5872, + 7955, + 18760, + 8086, + 225441, + 84418, + 7412, + 18933, + 59285, + 8002, + 39792, + 53917, + 4835, + 17171, + 9081, + 5401, + 3250, + 141643, + 12646, + 6662, + 12886, + 107001, + 4806, + 6940, + 4796, + 11621, + 11898, + 251129, + 3519, + 53256, + 47516, + 9554, + 9227, + 8854, + 19205, + 24005, + 13504, + 113370, + 3884, + 9927, + 4953, + 58304, + 272784, + 5796, + 92175, + 5906, + 38415, + 13813, + 30622, + 16166, + 14816, + 189342, + 27688, + 7903, + 15064, + 8310, + 9222, + 7861, + 23692, + 110949, + 4659, + 25838, + 42350, + 19815, + 23978, + 13336, + 33142, + 27021, + 115730, + 25121, + 21059, + 64576, + 25889, + 12371, + 9850, + 8734, + 46111, + 4177, + 6764, + 5801, + 33999, + 25256, + 9382, + 3807, + 4467, + 11315, + 157158, + 5814, + 4047, + 11933, + 8133, + 4439, + 39576, + 14938, + 31557, + 20172, + 6897, + 19977, + 3414, + 16390, + 10002, + 12404, + 15247, + 11835, + 41174, + 60702, + 17217, + 74160, + 9968, + 11100, + 7269, + 21291, + 28398, + 174431, + 24277, + 7266, + 9673, + 3390, + 147724, + 17183, + 9031, + 64020, + 3417, + 6567, + 4214, + 4913, + 240903, + 28581, + 85682, + 4464, + 6958, + 12447, + 15190, + 18828, + 116028, + 14269, + 12325, + 57204, + 7938, + 84284, + 46543, + 5471, + 13179, + 35903, + 5355, + 50560, + 62204, + 29552, + 10700, + 195827, + 6007, + 45787, + 16017, + 33835, + 11835, + 5593, + 4457, + 6576, + 81197, + 41774, + 7859, + 10444, + 16021, + 55297, + 23499, + 39405, + 4013, + 96370, + 44355, + 40070, + 4297, + 8255, + 13563, + 10184, + 17825, + 53147, + 13517, + 6905, + 5748, + 137376, + 15799, + 17936, + 5456, + 9594, + 27802, + 12010, + 71420, + 8945, + 6283, + 6689, + 5229, + 5094, + 22340, + 50638, + 78825, + 20570, + 5595, + 38417, + 73998, + 10702, + 16234, + 7570, + 39111, + 120982, + 7536, + 408238, + 159913, + 22438, + 20605, + 248783, + 13556, + 17784, + 162961, + 6014, + 326579, + 10320, + 167770, + 25381, + 218368, + 59755, + 32088, + 9954, + 25137, + 23488, + 6561, + 6508, + 6291, + 5021, + 241721, + 6262, + 22149, + 343418, + 12042, + 21562, + 9869, + 27039, + 34074, + 4332, + 106873, + 27951, + 6745, + 8718, + 11302, + 9981, + 17488, + 6879, + 7725, + 15800, + 8273, + 35844, + 19723, + 7052, + 7185, + 421875, + 12532, + 46894, + 17004, + 21673, + 57569, + 10319, + 14520, + 54158, + 22101, + 13413, + 79926, + 9111, + 5903, + 131630, + 30754, + 6366, + 11878, + 48047, + 4723, + 21727, + 10354, + 12622, + 9288, + 91312, + 13100, + 15834, + 17883, + 4906, + 73211, + 144767, + 35726, + 32365, + 8672, + 15953, + 6462, + 13764, + 13331, + 65397, + 5519, + 8352, + 13962, + 175674, + 14581, + 33309, + 25407, + 54147, + 11762, + 15022, + 17070, + 7696, + 5856, + 39857, + 6686, + 78286, + 12876, + 7258, + 10392, + 12083, + 7929, + 5247, + 21827, + 10390, + 6897, + 63878, + 35361, + 27739, + 10634, + 12613, + 297283, + 3014, + 10625, + 34583, + 112340, + 22087, + 8283, + 14778, + 13804, + 31607, + 39732, + 10000, + 6360, + 10335, + 6123, + 14632, + 7304, + 7544, + 12554, + 4977, + 18415, + 5524, + 10601, + 15448, + 95395, + 42035, + 26993, + 69312, + 17287, + 4695, + 274216, + 8413, + 3658, + 5405, + 9320, + 13044, + 14710, + 250645, + 37385, + 10535, + 8322, + 6453, + 7680, + 8963, + 7013, + 7687, + 28170, + 4255, + 11524, + 8776, + 4559, + 17344, + 12634, + 189614, + 40628, + 13134, + 92370, + 7162, + 9033, + 57832, + 29259, + 11377, + 8032, + 12979, + 129599, + 221508, + 11274, + 10373, + 12747, + 7854, + 8580, + 8655, + 25843, + 13408, + 7116, + 166493, + 17124, + 167409, + 17395, + 14115, + 8389, + 29604, + 104263, + 12032, + 35059, + 7459, + 21385, + 21955, + 8037, + 80936, + 177485, + 135647, + 11047, + 5456, + 13823, + 5077, + 16834, + 131031, + 8704, + 9093, + 11698, + 6957, + 8038, + 14638, + 9198, + 11890, + 9160, + 14860, + 9626, + 180398, + 60707, + 45948, + 11117, + 144900, + 73780, + 5289, + 18782, + 23748, + 10965, + 54739, + 4022, + 5969, + 9212, + 11260, + 35641, + 6647, + 18859, + 9942, + 35917, + 6347, + 3894, + 20920, + 17225, + 79783, + 55532, + 14257, + 9723, + 36983, + 6700, + 129639, + 7311, + 7405, + 10365, + 84838, + 576333, + 4085, + 18922, + 9396, + 10466, + 65479, + 102785, + 57999, + 66158, + 8004, + 27755, + 11735, + 22293, + 8815, + 9744, + 20574, + 9479, + 8316, + 5960, + 14662, + 75374, + 123856, + 3959, + 8825, + 29443, + 9530, + 8207, + 16472, + 27565, + 4215, + 31521, + 43704, + 5983, + 30832, + 12799, + 6485, + 10867, + 11917, + 10059, + 11275, + 10267, + 7149, + 15856, + 8195, + 163818, + 5591, + 83275, + 6375, + 7490, + 17373, + 9633, + 8223, + 26125, + 5448, + 9846, + 50451, + 10387, + 4897, + 12778, + 12622, + 6457, + 28476, + 9983, + 10072, + 31236, + 35609, + 82088, + 8117, + 5943, + 25541, + 26525, + 66654, + 11965, + 18386, + 44201, + 12770, + 4133, + 5059, + 22053, + 25333, + 14921, + 9460, + 29769, + 50778, + 4890, + 21040, + 5229, + 24712, + 9320, + 35962, + 2793, + 4679, + 11795, + 9216, + 13338, + 5596, + 6914, + 24453, + 9507, + 12873, + 11647, + 13359, + 11352, + 9201, + 47898, + 23701, + 4508, + 16173, + 128032, + 12784, + 4708, + 165016, + 41656, + 9892, + 70972, + 8277, + 34958, + 7223, + 8044, + 15407, + 5682, + 20145, + 50043, + 13657, + 172340, + 16403, + 15197, + 7095, + 9784, + 4125, + 67695, + 9698, + 6011, + 33770, + 5293, + 5579, + 24351, + 5192, + 12399, + 18936, + 73283, + 7269, + 18792, + 5282, + 59095, + 5762, + 8034, + 12757, + 11280, + 6214, + 13424, + 19050, + 18026, + 11886, + 52810, + 33022, + 57728, + 9268, + 11225, + 7619, + 56844, + 306137, + 5099, + 26134, + 8078, + 22905, + 14085, + 6415, + 10640, + 41438, + 95302, + 83621, + 9469, + 21705, + 16538, + 3811, + 7051, + 18561, + 40720, + 4564, + 32525, + 100043, + 62535, + 10404, + 13976, + 26634, + 23035, + 9298, + 126855, + 12696, + 13888, + 6308, + 28300, + 149814, + 7768, + 103023, + 6862, + 17918, + 58768, + 41466, + 39144, + 26702, + 4872, + 7805, + 56862, + 10739, + 8024, + 17672, + 21581, + 133592, + 8906, + 211336, + 10935, + 20414, + 7655, + 68589, + 14386, + 91786, + 538941, + 10842, + 11646, + 13230, + 7991, + 30106, + 14918, + 12427, + 32054, + 19130, + 7548, + 9509, + 14496, + 5556, + 12384, + 24433, + 13126, + 9311, + 7355, + 15015, + 13632, + 6039, + 6957, + 11586, + 63097, + 611785, + 19239, + 133839, + 31118, + 41629, + 6750, + 30559, + 24034, + 15064, + 12472, + 14980, + 20988, + 5769, + 26181, + 29887, + 18258, + 4586, + 40895, + 15455, + 47802, + 61251, + 251945, + 6622, + 10951, + 13138, + 14582, + 10929, + 8027, + 49396, + 27546, + 8146, + 21384, + 6300, + 79827, + 4895, + 13587, + 81780, + 11414, + 16277, + 7847, + 9349, + 15216, + 16869, + 7277, + 22460, + 78021, + 364574, + 4086, + 8519, + 8792, + 8027, + 11997, + 75053, + 15294, + 175513, + 27233, + 5487, + 4450, + 4103, + 8484, + 15885, + 12091, + 40584, + 12179, + 63883, + 35757, + 52037, + 10229, + 4083, + 15264, + 22772, + 28437, + 6840, + 11857, + 38818, + 16302, + 8602, + 4798, + 8673, + 6800, + 47362, + 31975, + 11095, + 14862, + 6809, + 5082, + 13250, + 8289, + 6198, + 7960, + 69580, + 12739, + 15064, + 249368, + 17175, + 12372, + 53219, + 13271, + 15094, + 95261, + 9685, + 30076, + 168110, + 10251, + 4582, + 14479, + 5304, + 51903, + 14128, + 97314, + 4866, + 14476, + 143028, + 36078, + 4234, + 8788, + 9787, + 22460, + 41427, + 4724, + 85900, + 233226, + 33149, + 9063, + 8025, + 9489, + 21710, + 7907, + 6689, + 12367, + 6186, + 9555, + 30349, + 9051, + 20363, + 90681, + 150580, + 5677, + 9637, + 8699, + 7291, + 20277, + 15362, + 10475, + 7836, + 46693, + 44070, + 30983, + 28385, + 27355, + 6059, + 8435, + 5265, + 11942, + 20062, + 10633, + 9938, + 6135, + 6097, + 5429, + 17661, + 30379, + 10677, + 20186, + 10149, + 12184, + 57336, + 12793, + 65985, + 4647, + 12403, + 35207, + 11935, + 8619, + 36504, + 29845, + 348769, + 15429, + 16072, + 7612, + 31696, + 40669, + 5778, + 11304, + 13262, + 12370, + 6410, + 5420, + 4621, + 19135, + 84905, + 9208, + 10517, + 8767, + 62633, + 9505, + 6630, + 8048, + 19642, + 4979, + 289660, + 5864, + 15001, + 11095, + 61377, + 8969, + 17569, + 6378, + 19979, + 26887, + 7474, + 11230, + 111738, + 11309, + 92279, + 8505, + 23181, + 7433, + 19033, + 24680, + 35463, + 13775, + 16161, + 68622, + 7053, + 7183, + 102268, + 3832, + 7333, + 8117, + 15040, + 11817, + 24734, + 23528, + 278634, + 4915, + 267611, + 9246, + 47294, + 38821, + 29799, + 41109, + 8184, + 78604, + 31984, + 7877, + 31808, + 9318, + 4343, + 7425, + 15929, + 9505, + 83339, + 8073, + 11380, + 13168, + 44190, + 7690, + 18911, + 56454, + 65915, + 11631, + 133497, + 4103, + 41521, + 82355, + 10113, + 5770, + 145279, + 4478, + 41273, + 80006, + 27338, + 291211, + 102962, + 4500, + 28184, + 20125, + 11918, + 93354, + 70760, + 16190, + 8832, + 15719, + 119458, + 62062, + 9526, + 10372, + 7102, + 10179, + 30070, + 12535, + 7535, + 9758, + 25149, + 11860, + 35951, + 3081, + 32468, + 10683, + 25691, + 5866, + 43469, + 7327, + 10874, + 6281, + 11739, + 157371, + 18385, + 43826 + ] + }, + { + "counters": [ + 6683, + 14721, + 28645, + 26667, + 21038, + 184780, + 5067, + 5334, + 35772, + 36744, + 32395, + 237880, + 38817, + 67863, + 3197, + 10690, + 7935, + 7004, + 23666, + 14426, + 13923, + 16504, + 18716, + 11277, + 23196, + 18096, + 9099, + 6808, + 13935, + 8959, + 37702, + 76791, + 7901, + 10227, + 8394, + 6502, + 67689, + 6686, + 247784, + 44089, + 4498, + 15991, + 11336, + 35779, + 26252, + 23681, + 19966, + 6988, + 8606, + 29801, + 11737, + 25156, + 7235, + 5935, + 6888, + 8325, + 9088, + 18072, + 4947, + 33304, + 167957, + 15604, + 75061, + 10257, + 46962, + 19774, + 11025, + 188117, + 26487, + 50547, + 5383, + 3678, + 4821, + 302765, + 20460, + 5198, + 170133, + 16591, + 10314, + 5542, + 27971, + 6549, + 85919, + 9837, + 7767, + 10177, + 21873, + 15256, + 9992, + 15909, + 14809, + 39288, + 8059, + 16186, + 30488, + 274251, + 6595, + 5622, + 6681, + 55803, + 20681, + 5331, + 228366, + 83376, + 27487, + 9812, + 227906, + 52102, + 5699, + 168400, + 5012, + 7902, + 12585, + 225954, + 16506, + 10388, + 7036, + 10972, + 21985, + 18590, + 27856, + 29990, + 16108, + 18376, + 51970, + 11644, + 20503, + 296255, + 136666, + 10789, + 26187, + 119937, + 121316, + 179883, + 11379, + 153662, + 62501, + 16934, + 4834, + 20595, + 36042, + 10615, + 6223, + 15440, + 38785, + 33765, + 10276, + 9412, + 99633, + 313573, + 17154, + 32481, + 9253, + 7641, + 3994, + 79528, + 5639, + 99940, + 10855, + 143887, + 5393, + 9344, + 7445, + 22554, + 53697, + 30238, + 4982, + 334018, + 7915, + 71192, + 5923, + 18107, + 11183, + 55999, + 28908, + 22524, + 4586, + 15007, + 22867, + 15721, + 7913, + 7316, + 8552, + 120752, + 12656, + 33225, + 11749, + 13993, + 7836, + 8184, + 69587, + 30318, + 31671, + 57981, + 12847, + 141324, + 39618, + 1869562, + 30728, + 41396, + 16108, + 10724, + 13187, + 9966, + 4705, + 21745, + 90785, + 10842, + 10039, + 90986, + 11594, + 12079, + 10098, + 7548, + 124264, + 7905, + 28354, + 19663, + 8023, + 8366, + 9880, + 6140, + 57625, + 10143, + 4943, + 99998, + 7711, + 29774, + 25796, + 15177, + 6754, + 13155, + 15685, + 22139, + 72922, + 52300, + 6682, + 11475, + 37358, + 9901, + 6727, + 15785, + 4426, + 5807, + 3024, + 39527, + 21881, + 31421, + 10993, + 71097, + 25174, + 92098, + 69753, + 214327, + 1898104, + 10385, + 6315, + 12137, + 71612, + 5520, + 5579, + 79378, + 9632, + 11405, + 3588, + 3215, + 15341, + 22707, + 7849, + 72396, + 9135, + 91917, + 67959, + 12624, + 34761, + 11990, + 5160, + 181056, + 11500, + 50871, + 23609, + 14741, + 185122, + 71147, + 17686, + 14400, + 63178, + 6399, + 12713, + 14809, + 64305, + 61122, + 13103, + 8039, + 16910, + 10060, + 14083, + 17717, + 31356, + 85779, + 15226, + 55864, + 4476, + 18254, + 35440, + 5902, + 17679, + 8863, + 15744, + 107664, + 5608, + 4525, + 11164, + 20889, + 6895, + 57521, + 24728, + 7658, + 17592, + 7680, + 12254, + 14014, + 7712, + 5573, + 28652, + 46617, + 15415, + 16075, + 14253, + 15983, + 12860, + 13589, + 12195, + 11837, + 25862, + 9329, + 5624, + 155254, + 6824, + 8363, + 6802, + 10130, + 5680, + 13266, + 50400, + 12163, + 4701, + 111930, + 529906, + 7262, + 4794, + 66509, + 6355, + 71279, + 37770, + 18128, + 34222, + 12306, + 243626, + 17931, + 6076, + 34973, + 7912, + 163863, + 17120, + 7294, + 20682, + 10168, + 7740, + 14145, + 15170, + 28669, + 5343, + 6848, + 7734, + 7863, + 33711, + 5366, + 10104, + 5432, + 94113, + 19093, + 5481, + 7458, + 13854, + 4729, + 39766, + 8840, + 491564, + 106112, + 40534, + 43649, + 8905, + 42263, + 10889, + 27957, + 80903, + 8530, + 32690, + 3687, + 57441, + 15435, + 16718, + 11921, + 10428, + 12228, + 20643, + 31376, + 141380, + 11810, + 7602, + 7773, + 214165, + 26925, + 26747, + 4120, + 28648, + 112900, + 9786, + 68395, + 3776, + 8922, + 10642, + 8072, + 44357, + 10288, + 33180, + 9522, + 8261, + 60740, + 13018, + 26064, + 7642, + 103180, + 10500, + 10202, + 13071, + 16621, + 6787, + 6812, + 10390, + 10225, + 67255, + 28221, + 25223, + 22828, + 5694, + 54735, + 7350, + 5691, + 65395, + 11416, + 6139, + 33815, + 17321, + 15870, + 6851, + 8413, + 245045, + 84630, + 6295, + 25289, + 12786, + 39967, + 35833, + 452225, + 4525, + 21809, + 14885, + 15855, + 5875, + 10825, + 8026, + 14341, + 11344, + 10191, + 23212, + 7955, + 16511, + 39868, + 10457, + 34429, + 6056, + 6751, + 5367, + 10632, + 158376, + 72028, + 17686, + 9203, + 135874, + 6913, + 6654, + 17592, + 532281, + 11042, + 9694, + 10039, + 65377, + 4224, + 65930, + 8044, + 86115, + 5492, + 61180, + 6669, + 7702, + 16232, + 5836, + 49714, + 4829, + 8963, + 38160, + 78355, + 3588, + 24971, + 4370, + 5474, + 7265, + 20579, + 11525, + 16113, + 23331, + 7073, + 10716, + 18129, + 17484, + 7173, + 21310, + 5074, + 5807, + 20230, + 7209, + 12951, + 7380, + 10285, + 53970, + 12243, + 88508, + 7674, + 91592, + 89548, + 47014, + 7687, + 151909, + 5380, + 6079, + 25674, + 13779, + 14544, + 6065, + 54902, + 2988, + 12591, + 8526, + 186599, + 37083, + 9961, + 5455, + 13901, + 124021, + 18477, + 17116, + 67489, + 101906, + 7514, + 10454, + 16022, + 14621, + 7432, + 163961, + 4337, + 6257, + 8020, + 290867, + 295254, + 178996, + 331510, + 10575, + 13608, + 7862, + 6850, + 51877, + 9008, + 30167, + 11503, + 10904, + 18350, + 11915, + 17320, + 235914, + 6352, + 18539, + 23636, + 21779, + 4268, + 9521, + 12318, + 8696, + 18911, + 7303, + 20923, + 247342, + 6006, + 18937, + 9109, + 13533, + 8202, + 7513, + 9584, + 327541, + 97628, + 4745, + 116150, + 22021, + 95270, + 5219, + 6140, + 51091, + 16136, + 5573, + 14986, + 9089, + 19438, + 30252, + 5817, + 15065, + 33260, + 13401, + 29486, + 8799, + 33138, + 60984, + 8170, + 90784, + 72606, + 12874, + 4164, + 12201, + 11927, + 79543, + 46633, + 6828, + 44029, + 60072, + 29388, + 6379, + 6706, + 6811, + 12978, + 4791, + 416041, + 11085, + 17358, + 84914, + 10058, + 16007, + 168031, + 7924, + 11070, + 151899, + 16476, + 188870, + 9880, + 34307, + 9907, + 18878, + 13769, + 7507, + 40406, + 8534, + 21940, + 2709, + 23266, + 326312, + 27181, + 102452, + 5803, + 5531, + 165484, + 7979, + 165058, + 110411, + 7389, + 4515, + 7265, + 27279, + 12126, + 17211, + 7894, + 5600, + 8412, + 20858, + 14917, + 160357, + 3691, + 14298, + 6726, + 8397, + 13463, + 12656, + 24916, + 19335, + 24536, + 30588, + 19051, + 4664, + 39278, + 18495, + 5617, + 10855, + 5661, + 8728, + 9035, + 43841, + 5781, + 196832, + 3909, + 134920, + 6270, + 8920, + 19294, + 7365, + 164391, + 16889, + 8882, + 208672, + 10465, + 29543, + 18903, + 40901, + 71243, + 9898, + 45335, + 358385, + 247388, + 18111, + 3130, + 83131, + 5372, + 7658, + 6462, + 23857, + 18512, + 20343, + 19602, + 107686, + 8652, + 19184, + 29267, + 11299, + 43607, + 5645, + 41404, + 13682, + 9364, + 12122, + 20676, + 23402, + 10336, + 24021, + 6345, + 9598, + 6880, + 7500, + 8146, + 9417, + 16684, + 30125, + 61501, + 14680, + 11026, + 7426, + 12451, + 5908, + 5466, + 206375, + 21831, + 6856, + 3753, + 24390, + 31045, + 22695, + 7433, + 7474, + 7571, + 17886, + 4805, + 5587, + 11880, + 51492, + 5663, + 46235, + 179248, + 14794, + 165730, + 5579, + 7733, + 8982, + 6738, + 14399, + 12979, + 4918, + 28088, + 30827, + 144641, + 82592, + 8372, + 88639, + 48353, + 11342, + 63578, + 147769, + 8507, + 8120, + 9619, + 23005, + 11919, + 26442, + 18110, + 14271, + 41506, + 6814, + 12798, + 54078, + 66634, + 33039, + 11080, + 30275, + 170980, + 69664, + 88807, + 12963, + 22930, + 4806, + 11960, + 24222, + 8097, + 252609, + 11435, + 34066, + 7880, + 6497, + 10068, + 8994, + 48423, + 8744, + 19053, + 46881, + 5332, + 5701, + 19959, + 9364, + 18327, + 22815, + 7536, + 10107, + 4729, + 57056, + 34647, + 10358, + 14089, + 23054, + 12863, + 32965, + 6629, + 56691, + 14384, + 11044, + 37621, + 23996, + 130464, + 98939, + 8751, + 12169, + 8072, + 7324, + 14949, + 5942, + 36978, + 7678, + 43941, + 10375, + 15303, + 108953, + 17185, + 43898, + 8675, + 15731, + 25101, + 24824, + 20508, + 19930, + 38807, + 68387, + 3348, + 7240, + 7573, + 22175, + 10733, + 24803, + 74897, + 85957, + 6958, + 10588, + 15191, + 11011, + 17480, + 14668, + 12489, + 148773, + 4901, + 33993, + 12681, + 14988, + 26981, + 7102, + 10819, + 44253, + 30514, + 22469, + 98250, + 88541, + 78280, + 10920, + 8723, + 5370, + 12423, + 8360, + 18575, + 30535, + 8054, + 76729, + 35509, + 12020, + 5224, + 44798, + 10499, + 16921, + 6110, + 15959, + 5807, + 3730, + 10260, + 5544, + 55958, + 19118, + 14717, + 12328, + 12702, + 13704, + 8828, + 10893, + 48748, + 5012, + 13680, + 6942, + 120378, + 8097, + 5146, + 6678, + 20585, + 14757, + 198964, + 107666, + 17528, + 64216, + 83806, + 13550, + 16211, + 7806, + 27221, + 8129, + 118924, + 12210, + 11022, + 175819, + 52649, + 16263, + 6271, + 6697, + 69143, + 63244, + 32883, + 10378, + 7125, + 12266, + 8252, + 18119, + 297889, + 29523, + 44621, + 5848, + 13930, + 10156, + 7818, + 29171, + 15876, + 5618, + 15296, + 4520, + 192797, + 30547, + 5938, + 5907, + 18867, + 25710, + 90601, + 16391, + 3806, + 12116, + 13300, + 10602, + 5309, + 18629, + 9765, + 29251, + 16314, + 19068, + 48217, + 35683, + 16099, + 167244, + 8936, + 5193, + 161177, + 14575, + 47771, + 9448, + 13800, + 32754, + 74923, + 8507, + 8953, + 17530, + 55757, + 5887, + 11378, + 13389, + 51046, + 47255, + 34182, + 10639, + 14860, + 6094, + 7829, + 209083, + 10521, + 403050, + 80315, + 11663, + 22918, + 15895, + 40822, + 16962, + 37271, + 15695, + 7859, + 181586, + 5302, + 7319, + 12808, + 9373, + 84781, + 26250, + 7687, + 6684, + 73013, + 258369, + 24492, + 16663, + 30573, + 7496, + 13604, + 9635, + 22560, + 223231, + 14381, + 19009, + 10023, + 6681, + 30444, + 97480, + 7160, + 14223, + 7858, + 9064, + 3728, + 52897, + 18407, + 143303, + 14582, + 4093, + 6761, + 670634, + 32839, + 14786, + 7381, + 30896, + 4554, + 4441, + 17783, + 8761, + 6381, + 10709, + 259683, + 14313, + 92130, + 8485, + 49051, + 7607, + 10739, + 30720, + 8223, + 7527, + 8169, + 6527, + 28292, + 11564, + 5899, + 11100, + 14840, + 10376, + 12391, + 18355, + 38040, + 60078, + 24311, + 125269, + 4409, + 27151, + 13104, + 6668, + 26032, + 26298, + 4946, + 7671, + 5354, + 10148, + 123559, + 4459, + 29714, + 7520, + 5779, + 7896, + 11121, + 12847, + 15078, + 12226, + 66054, + 6361, + 6389, + 35634, + 8754, + 26184, + 4813, + 124272, + 10788, + 10832, + 13834, + 396026, + 12694, + 16081, + 14396, + 11121, + 8593, + 9233, + 9428, + 8242, + 7374, + 10849, + 9561, + 16910, + 33048, + 16915, + 1579604, + 68782, + 5575, + 48900, + 69163, + 14154, + 56728, + 156455, + 10538, + 130101, + 20583, + 5314, + 22999, + 16118, + 9866, + 7198, + 92217, + 61755, + 27346, + 59439, + 49149, + 107616, + 6552, + 67028, + 15008, + 9040, + 76422, + 7690, + 4597, + 14692, + 81277, + 5085, + 6537, + 91636, + 5937, + 12886, + 9592, + 43654, + 38509, + 16340, + 25362, + 13005, + 10486, + 4105, + 6241, + 30212, + 8657, + 7474, + 6364, + 44075, + 16690, + 6642, + 10069, + 7349, + 7033, + 5497, + 7474, + 52171, + 4679, + 36610, + 11728, + 35748, + 5157, + 12916, + 22802, + 18291, + 12332, + 25989, + 5384, + 10329, + 51014, + 5737, + 6663, + 9131, + 52744, + 256425, + 1265488, + 27909, + 107396, + 7967, + 8345, + 32590, + 5419, + 43836, + 115430, + 7461, + 6767, + 12345, + 10651, + 7275, + 5248, + 17156, + 30219, + 5204, + 8247, + 10478, + 13004, + 45092, + 17431, + 36261, + 26053, + 6189, + 171230, + 6620, + 77812, + 19234, + 8452, + 6244, + 16326, + 13901, + 13489, + 8491, + 145973, + 14040, + 61760, + 12009, + 7408, + 73799, + 24412, + 5070, + 9931, + 12035, + 26165, + 17191, + 6452, + 27569, + 7447, + 161353, + 11274, + 4873, + 67070, + 4259194, + 33693, + 15405, + 206517, + 5860, + 42803, + 121946, + 7640, + 22970, + 4541, + 7893, + 3872, + 11928, + 29455, + 7318, + 9367, + 22201, + 7173, + 616246, + 33299, + 7922, + 107572, + 8993, + 64852, + 13325, + 5207, + 55680, + 39760, + 145619, + 8165, + 75529, + 82737, + 8870, + 90260, + 8261, + 39578, + 50417, + 5783, + 7240, + 6794, + 6259, + 21440, + 16703, + 7449, + 16983, + 94299, + 6714, + 26952, + 51736, + 8567, + 19653, + 5312, + 60446, + 6284, + 3103, + 12836, + 75236, + 190662, + 17614, + 10303, + 13709, + 31690, + 36831, + 26542, + 4374, + 26263, + 7711, + 167182, + 117986, + 10008, + 38996, + 10636, + 11261, + 3528, + 184243, + 6988, + 11693, + 204959, + 18749, + 8023, + 51158, + 9780, + 5930, + 20233, + 59043, + 5201, + 6765, + 10048, + 24432, + 29846, + 15690, + 29817, + 9618, + 44948, + 5477, + 28907, + 10660, + 4543, + 23574, + 7006, + 10068, + 6528, + 58894, + 9182, + 6283, + 40482, + 19845, + 4983, + 13373, + 5075, + 6210, + 2841, + 6597, + 12732, + 16687, + 11405, + 11842, + 4287, + 20246, + 298956, + 31637, + 43600, + 23500, + 68354, + 93173, + 34056, + 9514, + 11119, + 8201, + 80681, + 16775, + 22966, + 7094, + 32579, + 8660, + 33762, + 11119, + 7918, + 4404, + 421593, + 6620, + 12192, + 3217, + 81054, + 9228, + 36306, + 46906, + 25432, + 7736, + 12361, + 169773, + 18402, + 9162, + 6566, + 68700, + 5656, + 15810, + 13568, + 24241, + 8957, + 15677, + 20269, + 184772, + 31737, + 51978, + 8813, + 7677, + 6100, + 7689, + 2904, + 13771, + 8941, + 4870, + 291965, + 9598, + 43787, + 16007, + 10077, + 6365, + 17231, + 224499, + 431523, + 26790, + 45304, + 13250, + 35678, + 160189, + 8518, + 55916, + 88771, + 218972, + 16132, + 7208, + 127190, + 9427, + 54344, + 10566, + 83004, + 4786, + 10956, + 51501, + 36978, + 13028, + 67008, + 6828, + 13095, + 35736, + 80171, + 12886, + 14051, + 16346, + 9414, + 5146, + 44077, + 93720, + 10673, + 21257, + 12228, + 5327, + 14445, + 38418, + 19007, + 10176, + 11791, + 6385, + 48625, + 20190, + 12111, + 9231, + 7776, + 8502, + 3720, + 14400, + 8820, + 10465, + 10037, + 12595, + 14778, + 13440, + 29224, + 6385, + 5041, + 8586, + 13845, + 13507, + 9432, + 16437, + 17474, + 161636, + 83628, + 13833, + 185238, + 48435, + 17104, + 108220, + 10876, + 16754, + 6527, + 121663, + 23438, + 4767, + 52866, + 13932, + 17501, + 13205, + 9412, + 56031, + 5666, + 109497, + 9569, + 14788, + 5866, + 6607, + 29671, + 180255, + 6143, + 94356, + 5038, + 4603, + 7691, + 12532, + 9546, + 18950, + 6443, + 98618, + 37222, + 52762, + 26194, + 8008, + 5043, + 12090, + 5315, + 12328, + 11109, + 8042, + 10946, + 19312, + 5194, + 4934, + 13978, + 5674, + 20940, + 9787, + 16507, + 42787, + 23278, + 6481, + 10611, + 6397, + 20647, + 4329, + 33390, + 31238, + 13571, + 9496, + 47427, + 12114, + 10614, + 4895, + 22259, + 7908, + 63214, + 46935, + 38594, + 7631, + 12277, + 19363, + 23734, + 8743, + 40039, + 14456, + 35263, + 8237, + 20758, + 8528, + 26684, + 7089, + 66726, + 5271, + 8679, + 10156, + 17983, + 52409, + 36258, + 9769, + 24111, + 101223, + 17102, + 13117, + 8048, + 22591, + 7228, + 16222, + 15256, + 39107, + 6049, + 8302, + 44823, + 45715, + 5521, + 9963, + 42673, + 7070, + 24384, + 15217, + 9079, + 5345, + 7132, + 11323, + 6080, + 17331, + 4633, + 29422, + 28904, + 81815, + 7217, + 8148, + 32387, + 5817, + 18922, + 5800, + 32622, + 4100, + 6246, + 12533, + 12748, + 10400, + 5640, + 10799, + 6651, + 6091, + 11135, + 5643, + 6450, + 23119, + 24845, + 6381, + 20567, + 137244, + 84254, + 8911, + 8876, + 43651, + 24372, + 8580, + 43869, + 17524, + 146896, + 10767, + 955323, + 29451, + 175199, + 217602, + 11681, + 17985, + 16010, + 18348, + 4814, + 155654, + 14185, + 11811, + 14717, + 21988, + 9157, + 138618, + 5766, + 14640, + 18198, + 14566, + 17668, + 13935, + 46408, + 14287, + 15007, + 9229, + 3854, + 11044, + 15995, + 8916, + 9231, + 8627, + 11014, + 11340, + 137544, + 58196, + 6538, + 12745, + 8840, + 20556, + 10755, + 10965, + 12362, + 390541, + 14782, + 8708, + 9543, + 8824, + 12125, + 13467, + 9441, + 9666, + 11570, + 8664, + 18726, + 6126, + 5958, + 5543, + 4575, + 8536, + 11620, + 10167, + 5404, + 7817, + 18010, + 8632, + 18335, + 23947, + 102429, + 26325, + 165969, + 12782, + 10463, + 18544, + 5059, + 9994, + 20977, + 82189, + 6192, + 18807, + 12790, + 63163, + 12369, + 63104, + 17606, + 17507, + 63858, + 11629, + 251600, + 43937, + 12278, + 10896, + 19203, + 14950, + 330088, + 8305, + 40561, + 40320, + 7179, + 14115, + 13085, + 40499, + 29348, + 9986, + 19106, + 9907, + 4860, + 197818, + 6966, + 3137, + 32147, + 38833, + 10137, + 6730, + 5525, + 4224, + 19950, + 8309, + 105752, + 34301, + 295529, + 5455, + 16251, + 17449, + 8977, + 12610, + 12291, + 5227, + 25411, + 47245, + 44817, + 6282, + 127708, + 11743, + 26811, + 47889, + 7643, + 8878, + 8555, + 5223, + 6238, + 19646, + 17240, + 7587, + 13328, + 15124, + 16197, + 89208, + 5297, + 5001, + 41518, + 31888, + 11144, + 10686, + 64237, + 11928, + 73854, + 27818, + 5576, + 12571, + 277800, + 19590, + 19409, + 13431, + 18156, + 128355, + 8255, + 106181, + 8228, + 13287, + 7652, + 875627, + 6406, + 10957, + 9448, + 118372, + 21081, + 41509, + 19421, + 4933, + 7019, + 16651, + 16850, + 58690, + 12592, + 187630, + 10670, + 68191, + 10081, + 37763, + 20152, + 76883, + 20586, + 20618, + 10089, + 100534, + 15919, + 7389, + 253837, + 7735, + 14365, + 7044, + 19550, + 20823, + 159008, + 29648, + 8328, + 37596, + 5955, + 9925, + 45248, + 6260, + 27196, + 186236, + 8218, + 55407, + 42357, + 77049, + 5245, + 25971, + 47586, + 4805, + 7239, + 8077, + 5739, + 17838, + 11290, + 8096, + 85958, + 7891, + 15338, + 46821, + 95740, + 13174, + 34565, + 15317, + 135882, + 84127, + 12295, + 9269, + 16546, + 8686, + 36994, + 219409, + 7192, + 10359, + 8702, + 8265, + 24241, + 135826, + 15090, + 13901, + 9377, + 14255, + 62219, + 12780, + 90630, + 7463, + 5902, + 189996, + 28422, + 7261, + 6425, + 12192, + 93175, + 15932, + 55921, + 13941, + 262711, + 7830, + 199172, + 30864, + 20461, + 37465, + 5103, + 18625, + 237507, + 10974, + 56611, + 43936, + 4973, + 7296, + 5226, + 19796, + 8295, + 26400, + 18315, + 15441, + 15612, + 14960, + 1584917, + 9817, + 6146, + 14917, + 9671, + 6228, + 268392, + 7082, + 215117, + 6682, + 7542, + 9385, + 8030, + 4337, + 21488, + 5027, + 12545, + 131830, + 28686, + 10422, + 7513, + 46334, + 84830, + 66135, + 6067, + 17562, + 86023, + 113525, + 14611, + 27968, + 6669, + 49578, + 5955, + 3903, + 37917, + 68159, + 7714, + 13565, + 36273, + 22372, + 9658, + 9587, + 79550 + ] + }, + { + "counters": [ + 9037, + 11555, + 59544, + 18076, + 277263, + 13827, + 5377, + 44401, + 22550, + 7834, + 59336, + 97492, + 7888, + 44906, + 23569, + 30471, + 9511, + 5607, + 51105, + 11150, + 23405, + 38238, + 148745, + 9854, + 20710, + 9615, + 15642, + 13554, + 15156, + 4817, + 9298, + 53590, + 12881, + 79578, + 72806, + 33974, + 8317, + 17779, + 12260, + 5384, + 22583, + 7058, + 8293, + 14632, + 3334, + 6218, + 12373, + 6297, + 20197, + 23470, + 21316, + 5952, + 19952, + 110854, + 8162, + 68212, + 31308, + 122913, + 3188, + 69088, + 6600, + 75622, + 14453, + 125858, + 8424, + 5325, + 8026, + 27711, + 13712, + 27917, + 5377, + 7714, + 22951, + 4923, + 57909, + 20883, + 4975, + 11503, + 20280, + 5633, + 28577, + 5523, + 4441, + 40434, + 19048, + 7704, + 20528, + 24159, + 81054, + 6430, + 14016, + 11324, + 418180, + 4539, + 31404, + 21896, + 41476, + 77488, + 20291, + 4330, + 24977, + 14139, + 10776, + 7604, + 53666, + 329624, + 128646, + 11125, + 232887, + 11344, + 57001, + 12420, + 4644, + 1902450, + 30287, + 7594, + 14188, + 6374, + 4599, + 22879, + 8895, + 22218, + 19714, + 43627, + 3989, + 71336, + 222540, + 12931, + 6444, + 10639, + 6496, + 13314, + 15512, + 14423, + 12468, + 79695, + 8072, + 13110, + 10967, + 15561, + 3410, + 9919, + 47826, + 8494, + 15196, + 7409, + 10184, + 8529, + 4215, + 9436, + 39671, + 121682, + 16701, + 8489, + 5069, + 6849, + 29771, + 6771, + 167347, + 4267, + 33846, + 9204, + 135134, + 470075, + 4768, + 30714, + 5719, + 11123, + 6438, + 43150, + 5856, + 7761, + 13075, + 36862, + 7740, + 48601, + 38043, + 6825, + 3940, + 8271, + 8729, + 7201, + 5552, + 8177, + 331588, + 4691, + 148833, + 18236, + 6061, + 5967, + 7363, + 16624, + 16505, + 156564, + 3660, + 64833, + 9154, + 17476, + 4849, + 64362, + 5643, + 13665, + 26599, + 7773, + 87904, + 7661, + 15935, + 54544, + 5753, + 7076, + 28137, + 10984, + 45856, + 11638, + 3410, + 77657, + 46188, + 8179, + 35190, + 13916, + 15269, + 6219, + 18108, + 13229, + 7655, + 8892, + 13832, + 9359, + 26857, + 723941, + 20184, + 7149, + 12074, + 25570, + 104819, + 9362, + 13737, + 24385, + 198800, + 38329, + 21419, + 6597, + 14402, + 56411, + 42117, + 5711, + 101198, + 25277, + 56240, + 7570, + 9316, + 11321, + 13306, + 10893, + 15543, + 4688, + 28099, + 48174, + 6935, + 9512, + 44882, + 6056, + 8026, + 9931, + 9685, + 8127, + 280957, + 24916, + 18449, + 23561, + 73747, + 51453, + 14309, + 14405, + 11461, + 66491, + 20860, + 12435, + 41313, + 5496, + 16959, + 6483, + 6721, + 11860, + 27902, + 7983, + 9233, + 2126819, + 11772, + 6172, + 18276, + 6119, + 6608, + 8842, + 9700, + 15056, + 12682, + 8736, + 86055, + 9368, + 24653, + 3610, + 160789, + 47531, + 27606, + 5514, + 32297, + 8866, + 12056, + 15587, + 117893, + 9172, + 6761, + 6110, + 94801, + 3916, + 14107, + 12050, + 59014, + 9238, + 6218, + 4495, + 285999, + 20458, + 10720, + 24851, + 18697, + 5629, + 8631, + 40995, + 132569, + 19836, + 56743, + 3083, + 36041, + 24459, + 13800, + 11574, + 5945, + 28148, + 25802, + 20433, + 17422, + 10186, + 6443, + 32604, + 103391, + 6053, + 64961, + 23944, + 8965, + 3925, + 15910, + 22051, + 36967, + 9865, + 23915, + 11960, + 8541, + 14292, + 116506, + 44928, + 48310, + 13870, + 11462, + 17091, + 18499, + 15629, + 27412, + 8899, + 12168, + 7202, + 13637, + 50354, + 12904, + 4267, + 14043, + 34075, + 43641, + 5423, + 173615, + 26463, + 7095, + 92055, + 6956, + 7756, + 33500, + 6939, + 6399, + 13074, + 6450, + 10492, + 11493, + 7805, + 11323, + 4159, + 126251, + 5368, + 12710, + 6338, + 10698, + 10982, + 11576, + 16412, + 135978, + 5849, + 16429, + 7301, + 7016, + 6982, + 9518, + 20430, + 14392, + 50181, + 17090, + 181121, + 6300, + 21614, + 19904, + 30996, + 8133, + 10791, + 14326, + 40943, + 46458, + 34079, + 16181, + 7533, + 59067, + 5528, + 60873, + 65352, + 20117, + 66272, + 23881, + 12278, + 8382, + 76934, + 9737, + 6606, + 8843, + 49663, + 7000, + 16125, + 163328, + 13026, + 7411, + 12665, + 7630, + 9912, + 31127, + 18341, + 9790, + 11309, + 12529, + 13394, + 11582, + 5775, + 5350, + 8683, + 9075, + 4912, + 7924, + 19874, + 14112, + 18395, + 9565, + 23751, + 24583, + 4711, + 13764, + 92834, + 39009, + 5448, + 36439, + 25244, + 23991, + 9331, + 23144, + 11437, + 12788, + 5873, + 80727, + 30670, + 14223, + 39577, + 47236, + 8684, + 9799, + 11348, + 28788, + 5993, + 9063, + 22229, + 38440, + 100564, + 187536, + 22913, + 16232, + 15124, + 130095, + 32123, + 119866, + 9237, + 17730, + 13833, + 8209, + 18901, + 300300, + 88612, + 3995, + 166231, + 11442, + 122743, + 29501, + 6211, + 5496, + 11578, + 10367, + 256862, + 16262, + 54047, + 3450, + 13452, + 21996, + 9016, + 6102, + 8099, + 12053, + 5129, + 29581, + 19122, + 67684, + 6116, + 6982, + 20849, + 39513, + 60512, + 13875, + 37916, + 10513, + 32007, + 19160, + 16099, + 5677, + 4596, + 6654, + 14567, + 8857, + 171031, + 6181, + 94846, + 110885, + 5982, + 12257, + 129231, + 8947, + 164784, + 41246, + 5765, + 168716, + 71371, + 8641, + 216010, + 4794, + 11278, + 5030, + 37326, + 10680, + 7611, + 7446, + 49313, + 52224, + 8962, + 8817, + 6574, + 10418, + 8457, + 20795, + 13689, + 13787, + 6723, + 14560, + 46915, + 10379, + 5093, + 23720, + 355567, + 10152, + 34953, + 7744, + 55514, + 24945, + 7089, + 8835, + 10127, + 122740, + 7967, + 5284, + 14903, + 5351, + 22955, + 24121, + 34496, + 8413, + 8474, + 120075, + 187425, + 140658, + 11031, + 24941, + 11973, + 5791, + 6435, + 8685, + 5988, + 13213, + 36180, + 13978, + 3351, + 45998, + 45230, + 9667, + 22091, + 3873, + 338799, + 37067, + 58199, + 16273, + 198796, + 39004, + 14934, + 36536, + 17403, + 31441, + 18195, + 10231, + 6405, + 20633, + 57438, + 160760, + 40349, + 10294, + 5611, + 5537, + 6934, + 118529, + 171896, + 76145, + 4953, + 4311, + 123241, + 8452, + 14793, + 15148, + 947703, + 14050, + 113865, + 18394, + 8025, + 8918, + 10645, + 8010, + 22319, + 7685, + 7941, + 18472, + 14274, + 9229, + 92852, + 72572, + 6624, + 52016, + 21970, + 7885, + 183784, + 11949, + 15157, + 8835, + 7099, + 39157, + 14085, + 15578, + 7595, + 65602, + 15200, + 17260, + 15417, + 7390, + 4379, + 154816, + 38136, + 3553, + 3314, + 43456, + 52496, + 211635, + 26866, + 164114, + 30295, + 3146, + 11538, + 20453, + 6583, + 28719, + 45084, + 41979, + 38530, + 6905, + 100394, + 8918, + 132557, + 6456, + 13696, + 12450, + 164256, + 15587, + 203887, + 8961, + 78506, + 102145, + 17361, + 17871, + 4063, + 10437, + 23387, + 9263, + 18344, + 14611, + 3591, + 11772, + 39255, + 439958, + 20036, + 7719, + 8282, + 12470, + 3406, + 4814, + 5018, + 168185, + 8640, + 64453, + 27241, + 34026, + 11443, + 10651, + 35123, + 42033, + 26774, + 16594, + 6179, + 16886, + 19805, + 11053, + 61832, + 43478, + 6348, + 20395, + 89830, + 35553, + 8177, + 6342, + 11890, + 40317, + 38017, + 6680, + 8124, + 11019, + 6976, + 4782, + 91964, + 24255, + 9810, + 161051, + 6607, + 10468, + 91844, + 191235, + 6260, + 4818, + 98619, + 38105, + 7388, + 11933, + 5045, + 74288, + 247081, + 37090, + 9571, + 11450, + 25482, + 12695, + 6687, + 17973, + 8767, + 4518, + 27757, + 11497, + 19783, + 75443, + 5243, + 81967, + 13224, + 7925, + 10762, + 32592, + 36980, + 13735, + 13681, + 162746, + 3346, + 13567, + 12324, + 12239, + 14032, + 13309, + 9742, + 17025, + 7786, + 261054, + 37380, + 8232, + 4900, + 13692, + 266310, + 71425, + 5645, + 95837, + 8672, + 5735, + 16307, + 45583, + 7424, + 16917, + 80460, + 12202, + 7877, + 19744, + 292135, + 15633, + 7573, + 8588, + 20588, + 15230, + 36807, + 5597, + 5471, + 18178, + 10755, + 5231, + 7926, + 19894, + 7112, + 310644, + 21384, + 6965, + 37419, + 85377, + 215846, + 163000, + 8604, + 402527, + 5413, + 14145, + 4725, + 46647, + 7009, + 16036, + 50311, + 3871, + 23961, + 68463, + 5197, + 7025, + 23201, + 38334, + 5418, + 12462, + 28633, + 10407, + 11085, + 13071, + 172578, + 7898, + 10559, + 18426, + 17311, + 9214, + 5114, + 16522, + 6773, + 61222, + 92183, + 15987, + 12257, + 28446, + 3620, + 128022, + 8522, + 9829, + 13129, + 232889, + 19450, + 5978, + 220206, + 26141, + 9491, + 4902, + 16446, + 619105, + 9808, + 7020, + 57109, + 7832, + 8552, + 29665, + 5374, + 26206, + 11221, + 123430, + 27422, + 25475, + 7869, + 7189, + 24145, + 12323, + 61007, + 10234, + 12053, + 32422, + 77670, + 143371, + 19651, + 6040, + 121571, + 30110, + 9413, + 69555, + 9082, + 8587, + 47659, + 61170, + 9711, + 9197, + 100551, + 5716, + 41992, + 7432, + 6218, + 13621, + 12120, + 17789, + 14428, + 15699, + 11601, + 12958, + 4834, + 22613, + 7239, + 7781, + 5230, + 9165, + 17433, + 24958, + 5325, + 41777, + 14254, + 53058, + 26169, + 55594, + 7435, + 61772, + 8282, + 75371, + 10927, + 8460, + 15852, + 9511, + 174746, + 16367, + 15784, + 9202, + 5872, + 13482, + 14304, + 29836, + 9220, + 3226, + 54384, + 7183, + 23994, + 3122, + 87666, + 6339, + 8470, + 69461, + 14212, + 131034, + 3644, + 124713, + 26679, + 3045, + 48400, + 6137, + 263021, + 11272, + 7435, + 18965, + 119801, + 38878, + 15178, + 117300, + 215787, + 5833, + 229111, + 8188, + 5237, + 95081, + 8485, + 188696, + 6120, + 26970, + 14038, + 141397, + 67211, + 20239, + 9218, + 50329, + 13282, + 52580, + 534664, + 10475, + 12778, + 87098, + 3765, + 4828, + 27744, + 10199, + 8527, + 8739, + 45858, + 41669, + 25916, + 16306, + 167979, + 7295, + 61779, + 64259, + 173761, + 44678, + 102869, + 12021, + 82312, + 71611, + 11777, + 9496, + 12079, + 15125, + 13795, + 65350, + 57283, + 19591, + 12418, + 8167, + 9551, + 37993, + 8739, + 246927, + 16503, + 157209, + 7893, + 14562, + 18929, + 19846, + 9646, + 326339, + 9291, + 82491, + 18337, + 7345, + 19667, + 6663, + 9137, + 6852, + 9450, + 26227, + 4088, + 4344, + 54356, + 13153, + 15229, + 38569, + 2979, + 39009, + 27451, + 11014, + 40038, + 4672, + 5653, + 61049, + 6374, + 184279, + 37097, + 15634, + 137484, + 13100, + 9474, + 25695, + 17201, + 5804, + 188712, + 137297, + 9157, + 4406, + 51752, + 21062, + 15398, + 20710, + 225389, + 50887, + 6810, + 16688, + 13969, + 12444, + 27968, + 4867, + 6926, + 7088, + 34716, + 5614, + 37573, + 148979, + 79608, + 15338, + 8338, + 14471, + 53559, + 6365, + 6050, + 25992, + 162320, + 215832, + 8628, + 6805, + 20708, + 9561, + 12633, + 108987, + 19230, + 10489, + 30903, + 34631, + 43141, + 7770, + 6937, + 4139, + 67395, + 141673, + 4369, + 47122, + 23768, + 6530, + 9364, + 48565, + 3816, + 9121, + 13830, + 25294, + 11557, + 15630, + 14740, + 10089, + 52348, + 11239, + 22134, + 37409, + 38948, + 5420, + 11331, + 32730, + 112832, + 11652, + 7150, + 15321, + 39859, + 9172, + 6160, + 140676, + 82662, + 11751, + 13477, + 11487, + 25128, + 34304, + 10716, + 328422, + 235909, + 7426, + 9702, + 200258, + 20575, + 2932, + 9125, + 20575, + 26822, + 8367, + 56359, + 45413, + 4102, + 14593, + 11083, + 5791, + 9687, + 9366, + 128688, + 6597, + 28394, + 4997, + 7189, + 22252, + 14344, + 13989, + 165949, + 17362, + 19409, + 11250, + 18098, + 6034, + 35638, + 168047, + 7469, + 9289, + 7637, + 20303, + 62261, + 52024, + 14768, + 165259, + 4643, + 16881, + 10229, + 12994, + 12196, + 9075, + 143374, + 7404, + 114850, + 158458, + 21098, + 41396, + 14106, + 19513, + 2484, + 16026, + 4755, + 4271, + 14186, + 14416, + 8820, + 23690, + 133020, + 54340, + 6597, + 13619, + 11232, + 7062, + 2572, + 14267, + 5523, + 37318, + 6641, + 20609, + 6864, + 20067, + 6385, + 18397, + 22344, + 13961, + 58556, + 19292, + 67153, + 6810, + 5419, + 7315, + 88243, + 28916, + 20619, + 7614, + 6426, + 5108, + 37649, + 27061, + 10348, + 66240, + 17729, + 1532707, + 6886, + 56438, + 16768, + 102468, + 17969, + 9984, + 11617, + 4863, + 11009, + 109789, + 10790, + 24919, + 41515, + 6850, + 15226, + 40912, + 27332, + 141514, + 9836, + 12502, + 27559, + 45719, + 68172, + 23226, + 10539, + 49444, + 46804, + 18948, + 5289, + 13536, + 4879, + 5511, + 18613, + 287936, + 13580, + 18851, + 7798, + 23296, + 14831, + 10659, + 38867, + 9116, + 14631, + 26593, + 8250, + 17931, + 11511, + 37548, + 62713, + 65999, + 15858, + 9353, + 42420, + 19046, + 320993, + 5255, + 20954, + 170326, + 208749, + 21761, + 7757, + 6682, + 5770, + 12588, + 75255, + 15245, + 14812, + 120635, + 42914, + 7372, + 255463, + 11818, + 27244, + 6407, + 6530, + 18352, + 58478, + 23865, + 145019, + 7685, + 12192, + 4599, + 3720, + 7670, + 46216, + 10530, + 10229, + 8514, + 7840, + 6251, + 22109, + 9494, + 11704, + 8464, + 4637, + 49293, + 11858, + 97128, + 12076, + 10975, + 12462, + 66269, + 6955, + 7416, + 17191, + 12771, + 17479, + 23956, + 95252, + 12887, + 6064, + 15585, + 10581, + 13298, + 43405, + 16613, + 59681, + 10213, + 8166, + 13871, + 49219, + 10144, + 6022, + 11731, + 13147, + 7462, + 44231, + 16273, + 15747, + 24520, + 7025, + 38124, + 3922, + 137112, + 3951, + 7913, + 4625, + 8272, + 8100, + 3918, + 46015, + 53125, + 10088, + 34331, + 13383, + 11544, + 7916, + 28751, + 14983, + 32940, + 17034, + 3410, + 12663, + 18316, + 8795, + 363273, + 14917, + 5640, + 16504, + 10199, + 6179, + 11480, + 26197, + 7556, + 4636, + 26932, + 21328, + 8316, + 13584, + 53742, + 61294, + 5442, + 62934, + 22193, + 5116, + 16975, + 93453, + 48366, + 53975, + 11487, + 10698, + 55326, + 5702, + 63315, + 24448, + 37196, + 26457, + 66897, + 48208, + 8605, + 149360, + 49630, + 32137, + 19989, + 35712, + 18072, + 20223, + 26085, + 11190, + 9441, + 44206, + 13395, + 21756, + 7490, + 243148, + 8909, + 28660, + 39351, + 52130, + 14546, + 6457, + 9981, + 43435, + 11776, + 186547, + 165211, + 11815, + 27263, + 16369, + 9025, + 6730, + 4309, + 13355, + 6963, + 49965, + 16107, + 10568, + 10386, + 315242, + 13544, + 10519, + 14368, + 9547, + 8227, + 24533, + 7931, + 66133, + 12857, + 16045, + 70429, + 62147, + 18568, + 98866, + 17254, + 6281, + 8785, + 16378, + 6094, + 7820, + 7979, + 9505, + 20552, + 12622, + 17231, + 66605, + 18414, + 36429, + 10787, + 32627, + 8697, + 9254, + 16364, + 21004, + 11651, + 7189, + 105801, + 8976, + 104023, + 15501, + 16350, + 141528, + 9656, + 70534, + 20482, + 25485, + 14201, + 9613, + 6929, + 13657, + 15426, + 9190, + 15785, + 38094, + 12643, + 7018, + 11334, + 10607, + 11124, + 23441, + 79382, + 69704, + 52208, + 37105, + 309436, + 30385, + 4869, + 9239, + 144190, + 3443, + 22965, + 14537, + 21702, + 14123, + 32571, + 5366, + 34389, + 8796, + 10936, + 30502, + 40297, + 5266, + 479535, + 7768, + 172189, + 24928, + 8470, + 7872, + 8509, + 6516, + 35215, + 11201, + 6708, + 13682, + 56510, + 13930, + 7880, + 10442, + 33473, + 3111, + 22568, + 5171, + 26148, + 6450, + 27578, + 9873, + 14725, + 19853, + 44797, + 7175, + 10876, + 38518, + 12066, + 46770, + 32216, + 3660, + 223688, + 7941, + 6863, + 9105, + 6468, + 6660, + 22024, + 52987, + 2699, + 33770, + 33622, + 12729, + 12707, + 10317, + 11946, + 110533, + 43836, + 11458, + 98087, + 40609, + 44581, + 23794, + 36427, + 8037, + 5044, + 5310, + 9888, + 54740, + 9723, + 5189, + 30952, + 8336, + 9307, + 625649, + 11225, + 10636, + 17341, + 65188, + 45790, + 106954, + 6311, + 15806, + 27772, + 41069, + 13294, + 45356, + 3982, + 21677, + 7640, + 70364, + 38511, + 4890, + 13702, + 6830, + 20935, + 12982, + 114107, + 19483, + 12646, + 40439, + 27833, + 11718, + 3525, + 17795, + 13969, + 8309, + 3368, + 72574, + 17042, + 20473, + 18869, + 11251, + 6551, + 21709, + 11397, + 45313, + 5181, + 5939, + 135915, + 19419, + 9937, + 116152, + 25744, + 33995, + 16228, + 180765, + 58718, + 9974, + 31614, + 29345, + 384425, + 25960, + 264769, + 3139, + 1293358, + 34451, + 11825, + 17044, + 23443, + 4129, + 11517, + 31402, + 22223, + 6100, + 15499, + 29704, + 56911, + 5065, + 6922, + 4401, + 28210, + 10976, + 204946, + 27922, + 11116, + 61216, + 20136, + 6924, + 23914, + 9054, + 13044, + 16707, + 101833, + 8491, + 155098, + 39993, + 40774, + 4042, + 8323, + 6095, + 11622, + 11576, + 22397, + 98551, + 310065, + 11723, + 7297, + 8736, + 14436, + 5288, + 6212, + 5347, + 50358, + 110520, + 3716, + 12093, + 53553, + 13242, + 29739, + 2940, + 4095, + 8140, + 12542, + 8469, + 1578381, + 13182, + 48976, + 5615, + 11872, + 16470, + 37152, + 5824, + 35590, + 21457, + 9669, + 20432, + 7479, + 14702, + 26004, + 41491, + 10520, + 20367, + 15516, + 11963, + 12795, + 82050, + 24770, + 5448, + 63958, + 17882, + 2823, + 55249, + 8358, + 5484, + 8445, + 8526, + 10680, + 100345, + 5943, + 24144, + 13113, + 6213, + 5628, + 8024, + 8995, + 5239, + 12255, + 137635, + 6291, + 20649, + 12862, + 13169, + 13786, + 20634, + 8612, + 9396, + 4860, + 12372, + 123723, + 166049, + 5178, + 20715, + 37072, + 3295, + 13232, + 10154, + 5862, + 10466, + 9472, + 17968, + 9154, + 13123, + 247790, + 4507, + 101764, + 8980, + 407055, + 5362, + 49196, + 9044, + 13947, + 14332, + 4477, + 108227, + 8349, + 11481, + 6192, + 207881, + 221800, + 15242, + 14832, + 7932, + 33544, + 22624, + 10230, + 270972, + 4936, + 26255, + 5880, + 36944, + 101377, + 8675, + 28833, + 18964, + 7629, + 96263, + 54360, + 10373, + 44478, + 54393, + 6849, + 105021, + 9433, + 50261, + 3452, + 152579, + 14317, + 7424, + 28889, + 11109, + 10427, + 10785, + 21547, + 11598, + 61890, + 6143, + 6543, + 5653, + 7541, + 51705, + 14419, + 8969, + 54956, + 7243, + 43326, + 9234, + 30646, + 9906, + 4280983, + 23016, + 7556, + 4733, + 9282, + 37611, + 5696, + 14922, + 22898, + 9038, + 66064, + 8271, + 12245, + 20113, + 161698, + 8740, + 13005, + 9217, + 18222, + 21714, + 6778, + 57934, + 9024, + 98990, + 6100, + 12906, + 9099, + 16395, + 7594, + 7988, + 8028, + 5376, + 15436, + 7598, + 11926, + 4322, + 301858, + 131038, + 6113, + 4597, + 4485, + 33103, + 14765, + 113146, + 5680, + 6814, + 10458, + 37056, + 9666, + 6049, + 9266, + 67905, + 12314, + 125716, + 91844, + 6098, + 11326, + 18626, + 10273, + 7647, + 7965, + 28032, + 11575, + 7940, + 170893, + 9451, + 84229, + 6640, + 254796, + 43778, + 100586, + 145095, + 24756, + 13909, + 39946, + 6532, + 14222, + 27020, + 13052, + 10388, + 7996, + 4487, + 8051, + 8565, + 26237, + 3966, + 16634, + 8108, + 148481, + 11581, + 44461, + 8306, + 12948, + 10330, + 42225, + 22155, + 26337, + 21237, + 47861, + 59958, + 7947, + 26181, + 19976, + 8531, + 14867, + 19988, + 140822, + 12123, + 35140, + 8507, + 50075, + 35904, + 8672, + 28087, + 22606, + 6956, + 16956, + 5781 + ] + } + ], + "top_n": [ + { + "data": "AA==", + "count": 82527104 + }, + { + "data": "AAFUMTk4NgAAAPw=", + "count": 2002607 + }, + { + "data": "AAFUMjM1NwAAAPw=", + "count": 744504 + }, + { + "data": "AAFUMTc1NAAAAPw=", + "count": 501265 + } + ], + "default_value": 0 + }, + "null_count": 0, + "tot_col_size": 0, + "last_update_version": 419284911767420999, + "correlation": 0 + }, + "idx3": { + "histogram": { + "ndv": 58, + "buckets": [ + { + "count": 247, + "lower_bound": "AUFDVElWSVRZ/wAAAAAAAAAA9wFBTFMAAAAAAPoBMTAAAAAAAAD5", + "upper_bound": "AUFDVElWSVRZ/wAAAAAAAAAA9wFBTFMAAAAAAPoBMTAAAAAAAAD5", + "repeats": 247 + }, + { + "count": 259072, + "lower_bound": "AUFDVElWSVRZ/wAAAAAAAAAA9wFBTFMAAAAAAPoBMjAAAAAAAAD5", + "upper_bound": "AUFDVElWSVRZ/wAAAAAAAAAA9wFBTFMAAAAAAPoBMzAAAAAAAAD5", + "repeats": 0 + }, + { + "count": 272278, + "lower_bound": "AUFDVElWSVRZ/wAAAAAAAAAA9wFBTFMAAAAAAPoBMzAAAAAAAAD5", + "upper_bound": "AUFDVElWSVRZ/wAAAAAAAAAA+A==", + "repeats": 0 + }, + { + "count": 272349, + "lower_bound": "AUFSVElDTEUA/gFFQ08AAAAAAPoBMTAAAAAAAAD5", + "upper_bound": "AUFSVElDTEUA/gFFQ08AAAAAAPoBMTAAAAAAAAD5", + "repeats": 71 + }, + { + "count": 331436, + "lower_bound": "AUFSVElDTEUA/gFFQ08AAAAAAPoBMjAAAAAAAAD5", + "upper_bound": "AUFSVElDTEUA/gFFQ08AAAAAAPoBMjAAAAAAAAD5", + "repeats": 59087 + }, + { + "count": 333116, + "lower_bound": "AUFSVElDTEUA/gFFQ08AAAAAAPoBMzAAAAAAAAD5", + "upper_bound": "AUFSVElDTEUA/gFFQ08AAAAAAPoBMzAAAAAAAAD5", + "repeats": 1680 + }, + { + "count": 335951, + "lower_bound": "AUFSVElDTEUA/gFFQ08AAAAAAPoBMzIAAAAAAAD5", + "upper_bound": "AUFSVElDTEUA/gFFQ08AAAAAAPoBMzIAAAAAAAD5", + "repeats": 2835 + }, + { + "count": 336494, + "lower_bound": "AUFSVElDTEUA/gFFQ08AAAAAAPoBMzkAAAAAAAD5", + "upper_bound": "AUFSVElDTEUA/gFFQ08AAAAAAPoBMzkAAAAAAAD5", + "repeats": 543 + }, + { + "count": 336495, + "lower_bound": "AU1PTUVOVAAA/QFFQ08AAAAAAPoBMTAAAAAAAAD5", + "upper_bound": "AU1PTUVOVAAA/QFFQ08AAAAAAPoBMTAAAAAAAAD5", + "repeats": 1 + }, + { + "count": 336496, + "lower_bound": "AU1PTUVOVAAA/QFFQ08AAAAAAPoBMjAAAAAAAAD5", + "upper_bound": "AU1PTUVOVAAA/QFFQ08AAAAAAPoBMjAAAAAAAAD5", + "repeats": 1 + }, + { + "count": 11027028, + "lower_bound": "AVBPU1QAAAAA+wFFQ08AAAAAAPoBMzIAAAAAAAD5", + "upper_bound": "AVFVRVNUSU9O/wAAAAAAAAAA9wFFQ08AAAAAAPoBMjAAAAAAAAD5", + "repeats": 0 + }, + { + "count": 84988997, + "lower_bound": "AVRPUElDAAAA/AFFQ08AAAAAAPoBMjAAAAAAAAD5", + "upper_bound": "AVRPUElDAAAA/AFFQ08AAAAAAPoBMzAAAAAAAAD5", + "repeats": 0 + }, + { + "count": 87135423, + "lower_bound": "AVRPUElDAAAA/AFFQ08AAAAAAPoBMzAAAAAAAAD5", + "upper_bound": "AVRPUElDAAAA/AFFQ08AAAAAAPoBMzIAAAAAAAD5", + "repeats": 0 + }, + { + "count": 87475767, + "lower_bound": "AVRPUElDAAAA/AFFQ08AAAAAAPoBMzIAAAAAAAD5", + "upper_bound": "AVRPUElDAAAA/AFFQ08AAAAAAPoBMzkAAAAAAAD5", + "repeats": 0 + }, + { + "count": 87784727, + "lower_bound": "AVRPUElDAAAA/AFFQ08AAAAAAPoBMzkAAAAAAAD5", + "upper_bound": "AVZJREVPAAAA/AFFQ08AAAAAAPoBMzkAAAAAAAD5", + "repeats": 0 + } + ] + }, + "cm_sketch": { + "rows": [ + { + "counters": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 40268, + 0, + 0, + 59087, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 560, + 0, + 0, + 0, + 0, + 454, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 29489, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2, + 0, + 0, + 0, + 0, + 12283, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1529470, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 162814, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 41422, + 59535, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 106673, + 0, + 0, + 262, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 296677, + 0, + 0, + 0, + 0, + 0, + 0, + 247, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 239878, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 41422, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 117, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 26534, + 0, + 0, + 0, + 0, + 372426, + 0, + 0, + 0, + 179445, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2242, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 100457, + 0, + 0, + 0, + 0, + 125005, + 0, + 0, + 0, + 0, + 0, + 17041, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 6, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 139, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 622, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 111482, + 0, + 0, + 354674, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2864, + 0, + 0, + 0, + 10482318, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 4318, + 0, + 0, + 0, + 0, + 0, + 0, + 173, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 47080, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 245963, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 329803, + 0, + 44664, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 477148, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 82922, + 0, + 0, + 0, + 0, + 11991, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 242, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 120, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 462081, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 37369, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 8398, + 348694, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 31443, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3236, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2835, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 77989, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1565530, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 11928, + 0, + 0, + 0, + 0, + 0, + 0, + 1579504, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 811993, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 8310, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 19955, + 0, + 0, + 0, + 0, + 0, + 250817, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 4, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 10926229, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 12283, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1680, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 4013, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 49, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 330143, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 32251, + 0, + 0, + 2587, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 64216, + 25040, + 0, + 0, + 0, + 0, + 8697, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3264, + 0, + 0, + 0, + 0, + 652, + 0, + 1565318, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 371914, + 0, + 0, + 0, + 0, + 0, + 175618, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 543, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 287, + 0, + 0, + 0, + 0, + 0 + ] + }, + { + "counters": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2835, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 71, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 6, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 242, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 82922, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 59535, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 175618, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 40268, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 329803, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 811993, + 0, + 0, + 0, + 0, + 652, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 462081, + 0, + 0, + 0, + 330143, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 173, + 0, + 0, + 0, + 0, + 0, + 0, + 245963, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 560, + 0, + 0, + 0, + 0, + 0, + 0, + 4013, + 0, + 0, + 0, + 0, + 0, + 372426, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1579504, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 26534, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 10482318, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 4247, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 8697, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 49, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 477148, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 287, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 46326, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 354674, + 17041, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2587, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 11991, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 77989, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 66462, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 100457, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 19955, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2864, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 348694, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 247, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 8310, + 262, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 179445, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 622, + 0, + 0, + 0, + 0, + 44664, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 239878, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1565530, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 31443, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 41422, + 0, + 0, + 0, + 0, + 0, + 12283, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 4, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 117, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 8398, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 29489, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 296677, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 12283, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 111482, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 59087, + 0, + 0, + 10926229, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3264, + 0, + 0, + 1565318, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 11928, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2242, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 139, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 454, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 543, + 0, + 0, + 0, + 0, + 0, + 0, + 250817, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 162814, + 0, + 0, + 0, + 0, + 0, + 1529470, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 37369, + 0, + 0, + 0, + 1680, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3236, + 0, + 32251, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 106673, + 0, + 0, + 0, + 754, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 64216, + 0, + 125005, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 371914, + 120, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + { + "counters": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 32251, + 0, + 0, + 250817, + 0, + 0, + 0, + 0, + 0, + 173, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 179445, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 371914, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 64216, + 0, + 0, + 0, + 1680, + 0, + 0, + 0, + 0, + 25040, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 262, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 59535, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 239878, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 10482318, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 4247, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 477148, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 77989, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 40268, + 372426, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 175618, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3236, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 117, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 41422, + 111482, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 22790, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 37369, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 26534, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 8310, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 560, + 0, + 0, + 0, + 0, + 0, + 0, + 652, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 296677, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 120, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 11991, + 46326, + 330143, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 29489, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 139, + 348694, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 4013, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 12283, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 12283, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 356916, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 811993, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 4, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1565530, + 0, + 754, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 242, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 59087, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 8697, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 82922, + 0, + 0, + 17041, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 49, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1579504, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1565318, + 3264, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 71, + 0, + 0, + 0, + 0, + 0, + 0, + 31443, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 454, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2864, + 0, + 0, + 125005, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 287, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 10926229, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 462081, + 0, + 100457, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 162816, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1529470, + 44664, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 41422, + 0, + 0, + 543, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 329803, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 106673, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 8398, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 6, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 11928, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2587, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 622, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 245963, + 0, + 0, + 0, + 0, + 0, + 0, + 247, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + { + "counters": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 11928, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 296677, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 19955, + 32251, + 0, + 49, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 371914, + 0, + 0, + 0, + 0, + 0, + 477148, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 59535, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 100457, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 64216, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 139, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 10482318, + 0, + 0, + 0, + 0, + 0, + 0, + 1680, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 4247, + 0, + 0, + 251059, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1579504, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 287, + 0, + 0, + 0, + 0, + 0, + 41422, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 8310, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 754, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 29489, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 82922, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2242, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 12283, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 372426, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 622, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 40268, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 12283, + 0, + 0, + 0, + 0, + 71, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 11991, + 0, + 0, + 0, + 0, + 0, + 175618, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 462081, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 247, + 0, + 59087, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 26534, + 0, + 348694, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 4, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 179445, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 46326, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2587, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1565530, + 329803, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 262, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 125005, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3236, + 0, + 0, + 0, + 0, + 1565318, + 0, + 0, + 560, + 0, + 3264, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2835, + 0, + 0, + 25040, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 454, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 652, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 239878, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 162814, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 37369, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 6, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 354674, + 0, + 0, + 0, + 1529470, + 0, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 330143, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 106673, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 31443, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 543, + 0, + 0, + 0, + 0, + 0, + 0, + 10926229, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 111482, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 245963, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 4013, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 117, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 173, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 17041, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 120, + 0, + 0, + 0, + 0, + 41422, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 811993, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2864, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 8398, + 0, + 0, + 0, + 0, + 0, + 8697, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 77989, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 44664, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + { + "counters": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 37369, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2587, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 462081, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 10482318, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 4247, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 71, + 0, + 0, + 0, + 0, + 0, + 0, + 59535, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 17041, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 8398, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 32251, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 371914, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 11928, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 4013, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 239878, + 0, + 64216, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 25040, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 44664, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2864, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 329803, + 0, + 0, + 0, + 0, + 0, + 0, + 1680, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 12283, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 59087, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 250817, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 111482, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 4, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 125005, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 120, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 372426, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 8697, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 811993, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 348694, + 0, + 0, + 0, + 0, + 11991, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 100457, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 117, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1565530, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 49, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1565318, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3264, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 454, + 0, + 0, + 0, + 41422, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 6, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 40268, + 0, + 0, + 0, + 41422, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 46326, + 162814, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 26534, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1529470, + 0, + 0, + 0, + 0, + 0, + 287, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2, + 175618, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 106673, + 0, + 0, + 0, + 245963, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1579504, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 242, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 622, + 0, + 0, + 0, + 0, + 0, + 543, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 173, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 296677, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 139, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 10926229, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 77989, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 32003, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 82922, + 0, + 0, + 0, + 0, + 0, + 0, + 354674, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 754, + 0, + 0, + 0, + 19955, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 652, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 247, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 179445, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3236, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2835, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2242, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 477148, + 0, + 0, + 0, + 0, + 29489, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 330143, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 8310, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 262, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 12283, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + } + ], + "top_n": [ + { + "data": "AVBPU1QAAAAA+wFFQ08AAAAAAPoBMjAAAAAAAAD5", + "count": 17311236 + }, + { + "data": "AVRPUElDAAAA/AFFQ08AAAAAAPo=", + "count": 56469120 + }, + { + "data": "AVRPUElDAAAA/A==", + "count": 1513420 + }, + { + "data": "AVRPUElDAAAA/AFFQ08AAAAAAPoBMjAAAAAAAAD5", + "count": 54364810 + }, + { + "data": "AVBPU1QAAAAA+wFFQ08AAAAAAPo=", + "count": 18343231 + }, + { + "data": "AVBPU1QAAAAA+w==", + "count": 162744 + } + ], + "default_value": 0 + }, + "null_count": 0, + "tot_col_size": 0, + "last_update_version": 419285068817891416, + "correlation": 0 + }, + "idx2": { + "histogram": { + "ndv": 268129, + "buckets": [ + { + "count": 760104, + "lower_bound": "ATAxAAAAAAAA+QFHUk9VUAAAAPw=", + "upper_bound": "AUpMMTkwMTQ3/wAAAAAAAAAA9wFCR1IAAAAAAPo=", + "repeats": 9 + }, + { + "count": 1899449, + "lower_bound": "AUpMMTkwMTQ4/wAAAAAAAAAA9wFCR1IAAAAAAPo=", + "upper_bound": "AVAxMDkzOTAy/wAAAAAAAAAA9wFQT1NUAAAAAPs=", + "repeats": 1 + }, + { + "count": 2425027, + "lower_bound": "AVAxMDkzOTQ3/wAAAAAAAAAA9wFQT1NUAAAAAPs=", + "upper_bound": "AVAxMTMzMTA4/wAAAAAAAAAA9wFQT1NUAAAAAPs=", + "repeats": 1 + }, + { + "count": 3157907, + "lower_bound": "AVAxMTMzMTEy/wAAAAAAAAAA9wFQT1NUAAAAAPs=", + "upper_bound": "AVAxMTQzODE2/wAAAAAAAAAA9wFQT1NUAAAAAPs=", + "repeats": 113643 + }, + { + "count": 4594436, + "lower_bound": "AVAxMTQzODIy/wAAAAAAAAAA9wFQT1NUAAAAAPs=", + "upper_bound": "AVAxMTc3NDI5/wAAAAAAAAAA9wFQT1NUAAAAAPs=", + "repeats": 377 + }, + { + "count": 4959297, + "lower_bound": "AVAxMTc3NDMw/wAAAAAAAAAA9wFQT1NUAAAAAPs=", + "upper_bound": "AVAxMjA4MzI0/wAAAAAAAAAA9wFQT1NUAAAAAPs=", + "repeats": 527 + }, + { + "count": 5707362, + "lower_bound": "AVAxMjA4MzMw/wAAAAAAAAAA9wFQT1NUAAAAAPs=", + "upper_bound": "AVAxMjM5MTM2/wAAAAAAAAAA9wFQT1NUAAAAAPs=", + "repeats": 87 + }, + { + "count": 6405495, + "lower_bound": "AVAxMjM5MTQ2/wAAAAAAAAAA9wFQT1NUAAAAAPs=", + "upper_bound": "AVAxMjYxMzg0/wAAAAAAAAAA9wFQT1NUAAAAAPs=", + "repeats": 193 + }, + { + "count": 7559254, + "lower_bound": "AVAxMjYxMzg3/wAAAAAAAAAA9wFQT1NUAAAAAPs=", + "upper_bound": "AVAxMjc2MjI4/wAAAAAAAAAA9wFQT1NUAAAAAPs=", + "repeats": 1 + }, + { + "count": 8196246, + "lower_bound": "AVAxMjc2MjMx/wAAAAAAAAAA9wFQT1NUAAAAAPs=", + "upper_bound": "AVAxMzAxMjUx/wAAAAAAAAAA9wFQT1NUAAAAAPs=", + "repeats": 1 + }, + { + "count": 9354381, + "lower_bound": "AVAxMzAxMjcx/wAAAAAAAAAA9wFQT1NUAAAAAPs=", + "upper_bound": "AVAxMzI0MDY0/wAAAAAAAAAA9wFQT1NUAAAAAPs=", + "repeats": 1 + }, + { + "count": 9961516, + "lower_bound": "AVAxMzI0MDgx/wAAAAAAAAAA9wFQT1NUAAAAAPs=", + "upper_bound": "AVAxMzMxMTMw/wAAAAAAAAAA9wFQT1NUAAAAAPs=", + "repeats": 1 + }, + { + "count": 11034913, + "lower_bound": "AVAxMzMxMTMy/wAAAAAAAAAA9wFQT1NUAAAAAPs=", + "upper_bound": "AVAxNDQ4MDI0/wAAAAAAAAAA9wFQT1NUAAAAAPs=", + "repeats": 97 + }, + { + "count": 11674715, + "lower_bound": "AVAxNDQ4MDM4/wAAAAAAAAAA9wFQT1NUAAAAAPs=", + "upper_bound": "AVAyMDQzNTc4/wAAAAAAAAAA9wFQT1NUAAAAAPs=", + "repeats": 174 + }, + { + "count": 12694418, + "lower_bound": "AVAyMDQzNjA5/wAAAAAAAAAA9wFQT1NUAAAAAPs=", + "upper_bound": "AVAyOTY0MwAA/QFQT1NUAAAAAPs=", + "repeats": 59 + }, + { + "count": 13443030, + "lower_bound": "AVAyOTY0NgAA/QFQT1NUAAAAAPs=", + "upper_bound": "AVAzODU1NDMA/gFQT1NUAAAAAPs=", + "repeats": 2 + }, + { + "count": 14135982, + "lower_bound": "AVAzODU2NDUA/gFQT1NUAAAAAPs=", + "upper_bound": "AVA0ODg3NwAA/QFQT1NUAAAAAPs=", + "repeats": 507 + }, + { + "count": 14503538, + "lower_bound": "AVA0ODg3OAAA/QFQT1NUAAAAAPs=", + "upper_bound": "AVA1MDQ4NgAA/QFQT1NUAAAAAPs=", + "repeats": 2650 + }, + { + "count": 14940539, + "lower_bound": "AVA1MDQ4NwAA/QFQT1NUAAAAAPs=", + "upper_bound": "AVA1NjAzAAAA/AFQT1NUAAAAAPs=", + "repeats": 3 + }, + { + "count": 15548720, + "lower_bound": "AVA1NjAzNTIA/gFQT1NUAAAAAPs=", + "upper_bound": "AVA2ODA2OTUA/gFQT1NUAAAAAPs=", + "repeats": 2 + }, + { + "count": 16210943, + "lower_bound": "AVA2ODA3MDcA/gFQT1NUAAAAAPs=", + "upper_bound": "AVA3NTE4MzMA/gFQT1NUAAAAAPs=", + "repeats": 17 + }, + { + "count": 16816751, + "lower_bound": "AVA3NTE4NTUA/gFQT1NUAAAAAPs=", + "upper_bound": "AVA4MDEzMzkA/gFQT1NUAAAAAPs=", + "repeats": 1 + }, + { + "count": 17058896, + "lower_bound": "AVA4MDEzNDIA/gFQT1NUAAAAAPs=", + "upper_bound": "AVA4MzczOQAA/QFQT1NUAAAAAPs=", + "repeats": 12 + }, + { + "count": 17516347, + "lower_bound": "AVA4MzczOTkA/gFQT1NUAAAAAPs=", + "upper_bound": "AVA4Njc3ODYA/gFQT1NUAAAAAPs=", + "repeats": 1 + }, + { + "count": 18667201, + "lower_bound": "AVA4Njc3OTkA/gFQT1NUAAAAAPs=", + "upper_bound": "AVA5MzgzNDMA/gFQT1NUAAAAAPs=", + "repeats": 247 + }, + { + "count": 19609174, + "lower_bound": "AVA5MzgzNTIA/gFQT1NUAAAAAPs=", + "upper_bound": "AVExMDE2MDYA/gFRVUVTVElPTv8AAAAAAAAAAPc=", + "repeats": 7 + }, + { + "count": 19831018, + "lower_bound": "AVExMDE2MTAA/gFRVUVTVElPTv8AAAAAAAAAAPc=", + "upper_bound": "AVExMTQxMzkA/gFRVUVTVElPTv8AAAAAAAAAAPc=", + "repeats": 29 + }, + { + "count": 20252277, + "lower_bound": "AVExMTQxNDMA/gFRVUVTVElPTv8AAAAAAAAAAPc=", + "upper_bound": "AVExMjg2MTgA/gFRVUVTVElPTv8AAAAAAAAAAPc=", + "repeats": 7 + }, + { + "count": 20731173, + "lower_bound": "AVExMjg2MgAA/QFRVUVTVElPTv8AAAAAAAAAAPc=", + "upper_bound": "AVExNDEyNTkA/gFRVUVTVElPTv8AAAAAAAAAAPc=", + "repeats": 2 + }, + { + "count": 21009593, + "lower_bound": "AVExNDEyNjAA/gFRVUVTVElPTv8AAAAAAAAAAPc=", + "upper_bound": "AVExNTgyODIA/gFRVUVTVElPTv8AAAAAAAAAAPc=", + "repeats": 5 + }, + { + "count": 21264093, + "lower_bound": "AVExNTgyODUA/gFRVUVTVElPTv8AAAAAAAAAAPc=", + "upper_bound": "AVExNjY5OTUA/gFRVUVTVElPTv8AAAAAAAAAAPc=", + "repeats": 2435 + }, + { + "count": 22012001, + "lower_bound": "AVExNjcwMDQA/gFRVUVTVElPTv8AAAAAAAAAAPc=", + "upper_bound": "AVExNjk0OTkA/gFRVUVTVElPTv8AAAAAAAAAAPc=", + "repeats": 22 + }, + { + "count": 22491896, + "lower_bound": "AVExNjk1AAAA/AFRVUVTVElPTv8AAAAAAAAAAPc=", + "upper_bound": "AVExNjk2OTMA/gFRVUVTVElPTv8AAAAAAAAAAPc=", + "repeats": 8 + }, + { + "count": 22664708, + "lower_bound": "AVExNjk2OTQA/gFRVUVTVElPTv8AAAAAAAAAAPc=", + "upper_bound": "AVExNzAwMDUA/gFRVUVTVElPTv8AAAAAAAAAAPc=", + "repeats": 11 + }, + { + "count": 23613556, + "lower_bound": "AVExNzAwMDcA/gFRVUVTVElPTv8AAAAAAAAAAPc=", + "upper_bound": "AVExNzAyMjMA/gFRVUVTVElPTv8AAAAAAAAAAPc=", + "repeats": 1 + }, + { + "count": 24247495, + "lower_bound": "AVExNzAyMjQA/gFRVUVTVElPTv8AAAAAAAAAAPc=", + "upper_bound": "AVExNzA0AAAA/AFRVUVTVElPTv8AAAAAAAAAAPc=", + "repeats": 6 + }, + { + "count": 25047574, + "lower_bound": "AVExNzA0MDMA/gFRVUVTVElPTv8AAAAAAAAAAPc=", + "upper_bound": "AVExNzA0NjQA/gFRVUVTVElPTv8AAAAAAAAAAPc=", + "repeats": 28 + }, + { + "count": 25048225, + "lower_bound": "AVExNzA0NzAA/gFRVUVTVElPTv8AAAAAAAAAAPc=", + "upper_bound": "AVExNzA1MjcA/gFRVUVTVElPTv8AAAAAAAAAAPc=", + "repeats": 7 + }, + { + "count": 25516367, + "lower_bound": "AVExNzA1MwAA/QFRVUVTVElPTv8AAAAAAAAAAPc=", + "upper_bound": "AVExNzA2MTQA/gFRVUVTVElPTv8AAAAAAAAAAPc=", + "repeats": 1410 + }, + { + "count": 26286972, + "lower_bound": "AVExNzA2MTUA/gFRVUVTVElPTv8AAAAAAAAAAPc=", + "upper_bound": "AVExODE5NTcA/gFRVUVTVElPTv8AAAAAAAAAAPc=", + "repeats": 166 + }, + { + "count": 27077170, + "lower_bound": "AVExODE5NTgA/gFRVUVTVElPTv8AAAAAAAAAAPc=", + "upper_bound": "AVExODYwNjIA/gFRVUVTVElPTv8AAAAAAAAAAPc=", + "repeats": 14 + }, + { + "count": 27527624, + "lower_bound": "AVExODYwNjUA/gFRVUVTVElPTv8AAAAAAAAAAPc=", + "upper_bound": "AVExODc4MDQA/gFRVUVTVElPTv8AAAAAAAAAAPc=", + "repeats": 24 + }, + { + "count": 28048251, + "lower_bound": "AVExODc4MDUA/gFRVUVTVElPTv8AAAAAAAAAAPc=", + "upper_bound": "AVExOTI1MzcA/gFRVUVTVElPTv8AAAAAAAAAAPc=", + "repeats": 7 + }, + { + "count": 28914156, + "lower_bound": "AVExOTI1MzkA/gFRVUVTVElPTv8AAAAAAAAAAPc=", + "upper_bound": "AVEyMDA0NzkA/gFRVUVTVElPTv8AAAAAAAAAAPc=", + "repeats": 1160 + }, + { + "count": 29039928, + "lower_bound": "AVEyMDA0ODAA/gFRVUVTVElPTv8AAAAAAAAAAPc=", + "upper_bound": "AVEyMDQzMQAA/QFRVUVTVElPTv8AAAAAAAAAAPc=", + "repeats": 1228 + }, + { + "count": 29128273, + "lower_bound": "AVEyMDQzMTkA/gFRVUVTVElPTv8AAAAAAAAAAPc=", + "upper_bound": "AVEyMjg1NgAA/QFRVUVTVElPTv8AAAAAAAAAAPc=", + "repeats": 4 + }, + { + "count": 29745819, + "lower_bound": "AVEyMjg1NwAA/QFRVUVTVElPTv8AAAAAAAAAAPc=", + "upper_bound": "AVE0OTIyNwAA/QFRVUVTVElPTv8AAAAAAAAAAPc=", + "repeats": 5707 + }, + { + "count": 30130536, + "lower_bound": "AVE0OTIyOAAA/QFRVUVTVElPTv8AAAAAAAAAAPc=", + "upper_bound": "AVE3NDA1NAAA/QFRVUVTVElPTv8AAAAAAAAAAPc=", + "repeats": 19 + }, + { + "count": 30429540, + "lower_bound": "AVE3NDA2AAAA/AFRVUVTVElPTv8AAAAAAAAAAPc=", + "upper_bound": "AVE5MjU3OQAA/QFRVUVTVElPTv8AAAAAAAAAAPc=", + "repeats": 13 + }, + { + "count": 30627594, + "lower_bound": "AVE5MjU4AAAA/AFRVUVTVElPTv8AAAAAAAAAAPc=", + "upper_bound": "AVMzMzI0NgAA/QFTVkQAAAAAAPo=", + "repeats": 95 + }, + { + "count": 31402941, + "lower_bound": "AVMzMzM1MwAA/QFTVkQAAAAAAPo=", + "upper_bound": "AVQxMjM1AAAA/AFUT1BJQwAAAPw=", + "repeats": 248 + }, + { + "count": 31676457, + "lower_bound": "AVQxMjM2AAAA/AFUT1BJQwAAAPw=", + "upper_bound": "AVQxNDAxAAAA/AFUT1BJQwAAAPw=", + "repeats": 60 + }, + { + "count": 35461285, + "lower_bound": "AVQxNDAyAAAA/AFUT1BJQwAAAPw=", + "upper_bound": "AVQxNDk3AAAA/AFUT1BJQwAAAPw=", + "repeats": 92772 + }, + { + "count": 36194858, + "lower_bound": "AVQxNDk4AAAA/AFUT1BJQwAAAPw=", + "upper_bound": "AVQxNTI4AAAA/AFUT1BJQwAAAPw=", + "repeats": 26699 + }, + { + "count": 36657093, + "lower_bound": "AVQxNTI5AAAA/AFUT1BJQwAAAPw=", + "upper_bound": "AVQxNTQ1AAAA/AFUT1BJQwAAAPw=", + "repeats": 65808 + }, + { + "count": 37165498, + "lower_bound": "AVQxNTQ2AAAA/AFUT1BJQwAAAPw=", + "upper_bound": "AVQxNTU5AAAA/AFUT1BJQwAAAPw=", + "repeats": 22428 + }, + { + "count": 37734699, + "lower_bound": "AVQxNTYwAAAA/AFUT1BJQwAAAPw=", + "upper_bound": "AVQxNTc5AAAA/AFUT1BJQwAAAPw=", + "repeats": 105884 + }, + { + "count": 39665973, + "lower_bound": "AVQxNTgwAAAA/AFUT1BJQwAAAPw=", + "upper_bound": "AVQxNTkzAAAA/AFUT1BJQwAAAPw=", + "repeats": 90687 + }, + { + "count": 39993708, + "lower_bound": "AVQxNTk0AAAA/AFUT1BJQwAAAPw=", + "upper_bound": "AVQxNjAxAAAA/AFUT1BJQwAAAPw=", + "repeats": 7151 + }, + { + "count": 41117444, + "lower_bound": "AVQxNjAyAAAA/AFUT1BJQwAAAPw=", + "upper_bound": "AVQxNjA5AAAA/AFUT1BJQwAAAPw=", + "repeats": 3760 + }, + { + "count": 41667568, + "lower_bound": "AVQxNjEwAAAA/AFUT1BJQwAAAPw=", + "upper_bound": "AVQxNjE2AAAA/AFUT1BJQwAAAPw=", + "repeats": 300611 + }, + { + "count": 41888501, + "lower_bound": "AVQxNjE3AAAA/AFUT1BJQwAAAPw=", + "upper_bound": "AVQxNjI4AAAA/AFUT1BJQwAAAPw=", + "repeats": 5986 + }, + { + "count": 42417186, + "lower_bound": "AVQxNjI5AAAA/AFUT1BJQwAAAPw=", + "upper_bound": "AVQxNjQ0AAAA/AFUT1BJQwAAAPw=", + "repeats": 63452 + }, + { + "count": 43114527, + "lower_bound": "AVQxNjQ2AAAA/AFUT1BJQwAAAPw=", + "upper_bound": "AVQxNjU4AAAA/AFUT1BJQwAAAPw=", + "repeats": 7141 + }, + { + "count": 43403168, + "lower_bound": "AVQxNjU5AAAA/AFUT1BJQwAAAPw=", + "upper_bound": "AVQxNjc0AAAA/AFUT1BJQwAAAPw=", + "repeats": 7680 + }, + { + "count": 43702666, + "lower_bound": "AVQxNjc1AAAA/AFUT1BJQwAAAPw=", + "upper_bound": "AVQxNjg5AAAA/AFUT1BJQwAAAPw=", + "repeats": 91 + }, + { + "count": 44214579, + "lower_bound": "AVQxNjkwAAAA/AFUT1BJQwAAAPw=", + "upper_bound": "AVQxNzAyAAAA/AFUT1BJQwAAAPw=", + "repeats": 721 + }, + { + "count": 44505507, + "lower_bound": "AVQxNzA0AAAA/AFUT1BJQwAAAPw=", + "upper_bound": "AVQxNzE5AAAA/AFUT1BJQwAAAPw=", + "repeats": 864 + }, + { + "count": 44908288, + "lower_bound": "AVQxNzIwAAAA/AFUT1BJQwAAAPw=", + "upper_bound": "AVQxNzM1AAAA/AFUT1BJQwAAAPw=", + "repeats": 811 + }, + { + "count": 45129592, + "lower_bound": "AVQxNzM2AAAA/AFUT1BJQwAAAPw=", + "upper_bound": "AVQxNzQ3AAAA/AFUT1BJQwAAAPw=", + "repeats": 2540 + }, + { + "count": 45818677, + "lower_bound": "AVQxNzQ4AAAA/AFUT1BJQwAAAPw=", + "upper_bound": "AVQxNzU1AAAA/AFUT1BJQwAAAPw=", + "repeats": 353 + }, + { + "count": 46327954, + "lower_bound": "AVQxNzU2AAAA/AFUT1BJQwAAAPw=", + "upper_bound": "AVQxNzYyAAAA/AFUT1BJQwAAAPw=", + "repeats": 39886 + }, + { + "count": 46804832, + "lower_bound": "AVQxNzYzAAAA/AFUT1BJQwAAAPw=", + "upper_bound": "AVQxNzc4AAAA/AFUT1BJQwAAAPw=", + "repeats": 643 + }, + { + "count": 47080682, + "lower_bound": "AVQxNzgwAAAA/AFUT1BJQwAAAPw=", + "upper_bound": "AVQxNzg4AAAA/AFUT1BJQwAAAPw=", + "repeats": 146192 + }, + { + "count": 47544039, + "lower_bound": "AVQxNzg5AAAA/AFUT1BJQwAAAPw=", + "upper_bound": "AVQxODE5AAAA/AFUT1BJQwAAAPw=", + "repeats": 57321 + }, + { + "count": 49135432, + "lower_bound": "AVQxODIwAAAA/AFUT1BJQwAAAPw=", + "upper_bound": "AVQxODQzAAAA/AFUT1BJQwAAAPw=", + "repeats": 23199 + }, + { + "count": 49543175, + "lower_bound": "AVQxODQ0AAAA/AFUT1BJQwAAAPw=", + "upper_bound": "AVQxODYwAAAA/AFUT1BJQwAAAPw=", + "repeats": 6584 + }, + { + "count": 49816800, + "lower_bound": "AVQxODYxAAAA/AFUT1BJQwAAAPw=", + "upper_bound": "AVQxODcxAAAA/AFUT1BJQwAAAPw=", + "repeats": 36576 + }, + { + "count": 50214152, + "lower_bound": "AVQxODcyAAAA/AFUT1BJQwAAAPw=", + "upper_bound": "AVQxODg3AAAA/AFUT1BJQwAAAPw=", + "repeats": 512 + }, + { + "count": 50503404, + "lower_bound": "AVQxODg4AAAA/AFUT1BJQwAAAPw=", + "upper_bound": "AVQxOTAzAAAA/AFUT1BJQwAAAPw=", + "repeats": 5170 + }, + { + "count": 50952072, + "lower_bound": "AVQxOTA0AAAA/AFUT1BJQwAAAPw=", + "upper_bound": "AVQxOTE5AAAA/AFUT1BJQwAAAPw=", + "repeats": 72650 + }, + { + "count": 51136775, + "lower_bound": "AVQxOTIwAAAA/AFUT1BJQwAAAPw=", + "upper_bound": "AVQxOTM1AAAA/AFUT1BJQwAAAPw=", + "repeats": 2902 + }, + { + "count": 51695823, + "lower_bound": "AVQxOTM2AAAA/AFUT1BJQwAAAPw=", + "upper_bound": "AVQxOTQ2AAAA/AFUT1BJQwAAAPw=", + "repeats": 51328 + }, + { + "count": 51842998, + "lower_bound": "AVQxOTQ3AAAA/AFUT1BJQwAAAPw=", + "upper_bound": "AVQxOTYyAAAA/AFUT1BJQwAAAPw=", + "repeats": 24522 + }, + { + "count": 52471359, + "lower_bound": "AVQxOTYzAAAA/AFUT1BJQwAAAPw=", + "upper_bound": "AVQxOTc4AAAA/AFUT1BJQwAAAPw=", + "repeats": 278750 + }, + { + "count": 52552696, + "lower_bound": "AVQxOTc5AAAA/AFUT1BJQwAAAPw=", + "upper_bound": "AVQxOTgzAAAA/AFUT1BJQwAAAPw=", + "repeats": 1586 + }, + { + "count": 54613693, + "lower_bound": "AVQxOTg0AAAA/AFUT1BJQwAAAPw=", + "upper_bound": "AVQxOTg2AAAA/AFUT1BJQwAAAPw=", + "repeats": 1147272 + }, + { + "count": 54919961, + "lower_bound": "AVQxOTg4AAAA/AFUT1BJQwAAAPw=", + "upper_bound": "AVQyMDU5AAAA/AFUT1BJQwAAAPw=", + "repeats": 5960 + }, + { + "count": 55259520, + "lower_bound": "AVQyMDYxAAAA/AFUT1BJQwAAAPw=", + "upper_bound": "AVQyMDc4AAAA/AFUT1BJQwAAAPw=", + "repeats": 4546 + }, + { + "count": 55864544, + "lower_bound": "AVQyMDc5AAAA/AFUT1BJQwAAAPw=", + "upper_bound": "AVQyMDk0AAAA/AFUT1BJQwAAAPw=", + "repeats": 2495 + }, + { + "count": 58074833, + "lower_bound": "AVQyMDk1AAAA/AFUT1BJQwAAAPw=", + "upper_bound": "AVQyMTA4AAAA/AFUT1BJQwAAAPw=", + "repeats": 925260 + }, + { + "count": 58277195, + "lower_bound": "AVQyMTA5AAAA/AFUT1BJQwAAAPw=", + "upper_bound": "AVQyMTI1AAAA/AFUT1BJQwAAAPw=", + "repeats": 2745 + }, + { + "count": 62756293, + "lower_bound": "AVQyMTI2AAAA/AFUT1BJQwAAAPw=", + "upper_bound": "AVQyMTM0AAAA/AFUT1BJQwAAAPw=", + "repeats": 812920 + }, + { + "count": 63201286, + "lower_bound": "AVQyMTM1AAAA/AFUT1BJQwAAAPw=", + "upper_bound": "AVQyMTUxAAAA/AFUT1BJQwAAAPw=", + "repeats": 219467 + }, + { + "count": 63636251, + "lower_bound": "AVQyMTUyAAAA/AFUT1BJQwAAAPw=", + "upper_bound": "AVQyMTgyAAAA/AFUT1BJQwAAAPw=", + "repeats": 2117 + }, + { + "count": 64002546, + "lower_bound": "AVQyMTgzAAAA/AFUT1BJQwAAAPw=", + "upper_bound": "AVQyMjE3AAAA/AFUT1BJQwAAAPw=", + "repeats": 21405 + }, + { + "count": 64753810, + "lower_bound": "AVQyMjE4AAAA/AFUT1BJQwAAAPw=", + "upper_bound": "AVQyMjY1AAAA/AFUT1BJQwAAAPw=", + "repeats": 270516 + }, + { + "count": 65711914, + "lower_bound": "AVQyMjY2AAAA/AFUT1BJQwAAAPw=", + "upper_bound": "AVQyMjgwAAAA/AFUT1BJQwAAAPw=", + "repeats": 646192 + }, + { + "count": 65898932, + "lower_bound": "AVQyMjgxAAAA/AFQT1NUAAAAAPs=", + "upper_bound": "AVQyMjkwAAAA/AFUT1BJQwAAAPw=", + "repeats": 35531 + }, + { + "count": 66080378, + "lower_bound": "AVQyMjkxAAAA/AFUT1BJQwAAAPw=", + "upper_bound": "AVQyMjk0AAAA/AFUT1BJQwAAAPw=", + "repeats": 550 + }, + { + "count": 69618762, + "lower_bound": "AVQyMjk1AAAA/AFUT1BJQwAAAPw=", + "upper_bound": "AVQyMzAzAAAA/AFUT1BJQwAAAPw=", + "repeats": 525662 + }, + { + "count": 70318188, + "lower_bound": "AVQyMzA0AAAA/AFUT1BJQwAAAPw=", + "upper_bound": "AVQyMzE2AAAA/AFUT1BJQwAAAPw=", + "repeats": 20817 + }, + { + "count": 71025006, + "lower_bound": "AVQyMzE3AAAA/AFUT1BJQwAAAPw=", + "upper_bound": "AVQyMzI2AAAA/AFUT1BJQwAAAPw=", + "repeats": 424326 + }, + { + "count": 71570284, + "lower_bound": "AVQyMzI3AAAA/AFUT1BJQwAAAPw=", + "upper_bound": "AVQyMzQyAAAA/AFUT1BJQwAAAPw=", + "repeats": 702 + }, + { + "count": 72046256, + "lower_bound": "AVQyMzQzAAAA/AFUT1BJQwAAAPw=", + "upper_bound": "AVQyMzU2AAAA/AFUT1BJQwAAAPw=", + "repeats": 42061 + }, + { + "count": 73111195, + "lower_bound": "AVQyMzU3AAAA/AFUT1BJQwAAAPw=", + "upper_bound": "AVQyMzY1AAAA/AFUT1BJQwAAAPw=", + "repeats": 0 + }, + { + "count": 73261749, + "lower_bound": "AVQyMzY2AAAA/AFUT1BJQwAAAPw=", + "upper_bound": "AVQyMzcxAAAA/AFUT1BJQwAAAPw=", + "repeats": 32148 + }, + { + "count": 73709242, + "lower_bound": "AVQyMzcyAAAA/AFUT1BJQwAAAPw=", + "upper_bound": "AVQyMzc5AAAA/AFUT1BJQwAAAPw=", + "repeats": 275 + }, + { + "count": 73922575, + "lower_bound": "AVQyMzgwAAAA/AFUT1BJQwAAAPw=", + "upper_bound": "AVQyMzg1AAAA/AFUT1BJQwAAAPw=", + "repeats": 42541 + }, + { + "count": 74497872, + "lower_bound": "AVQyMzg2AAAA/AFUT1BJQwAAAPw=", + "upper_bound": "AVQyNDAxAAAA/AFUT1BJQwAAAPw=", + "repeats": 51679 + }, + { + "count": 74708774, + "lower_bound": "AVQyNDAyAAAA/AFUT1BJQwAAAPw=", + "upper_bound": "AVQyNDE3AAAA/AFUT1BJQwAAAPw=", + "repeats": 397 + }, + { + "count": 75111280, + "lower_bound": "AVQyNDE4AAAA/AFUT1BJQwAAAPw=", + "upper_bound": "AVQyNDMxAAAA/AFUT1BJQwAAAPw=", + "repeats": 89208 + }, + { + "count": 75579480, + "lower_bound": "AVQyNDMyAAAA/AFUT1BJQwAAAPw=", + "upper_bound": "AVQyNDQ4AAAA/AFUT1BJQwAAAPw=", + "repeats": 1668 + }, + { + "count": 76340934, + "lower_bound": "AVQyNDQ5AAAA/AFUT1BJQwAAAPw=", + "upper_bound": "AVQyNDcxAAAA/AFUT1BJQwAAAPw=", + "repeats": 3972 + }, + { + "count": 76650798, + "lower_bound": "AVQyNDcyAAAA/AFUT1BJQwAAAPw=", + "upper_bound": "AVQyNTAzAAAA/AFUT1BJQwAAAPw=", + "repeats": 1116 + }, + { + "count": 76937128, + "lower_bound": "AVQyNTA0AAAA/AFUT1BJQwAAAPw=", + "upper_bound": "AVQyNTMxAAAA/AFUT1BJQwAAAPw=", + "repeats": 140429 + }, + { + "count": 77320341, + "lower_bound": "AVQyNTMyAAAA/AFUT1BJQwAAAPw=", + "upper_bound": "AVQyNTY0AAAA/AFUT1BJQwAAAPw=", + "repeats": 5176 + }, + { + "count": 77749069, + "lower_bound": "AVQyNTY1AAAA/AFUT1BJQwAAAPw=", + "upper_bound": "AVQyNTk2AAAA/AFUT1BJQwAAAPw=", + "repeats": 4359 + }, + { + "count": 78078874, + "lower_bound": "AVQyNTk3AAAA/AFUT1BJQwAAAPw=", + "upper_bound": "AVQyNjI4AAAA/AFUT1BJQwAAAPw=", + "repeats": 1812 + }, + { + "count": 78268436, + "lower_bound": "AVQyNjI5AAAA/AFUT1BJQwAAAPw=", + "upper_bound": "AVQyNjQ5AAAA/AFUT1BJQwAAAPw=", + "repeats": 1742 + }, + { + "count": 78949732, + "lower_bound": "AVQyNjUwAAAA/AFUT1BJQwAAAPw=", + "upper_bound": "AVQyNjY2AAAA/AFUT1BJQwAAAPw=", + "repeats": 7714 + }, + { + "count": 79691069, + "lower_bound": "AVQyNjY3AAAA/AFUT1BJQwAAAPw=", + "upper_bound": "AVQyNjg5AAAA/AFUT1BJQwAAAPw=", + "repeats": 4824 + }, + { + "count": 80391238, + "lower_bound": "AVQyNjkwAAAA/AFUT1BJQwAAAPw=", + "upper_bound": "AVQyNzIzAAAA/AFUT1BJQwAAAPw=", + "repeats": 99620 + }, + { + "count": 81203918, + "lower_bound": "AVQyNzI0AAAA/AFUT1BJQwAAAPw=", + "upper_bound": "AVQyNzU1AAAA/AFUT1BJQwAAAPw=", + "repeats": 33678 + }, + { + "count": 81594333, + "lower_bound": "AVQyNzU2AAAA/AFUT1BJQwAAAPw=", + "upper_bound": "AVQyNzg4AAAA/AFUT1BJQwAAAPw=", + "repeats": 5403 + }, + { + "count": 81718244, + "lower_bound": "AVQyNzg5AAAA/AFUT1BJQwAAAPw=", + "upper_bound": "AVQyODA4AAAA/AFUT1BJQwAAAPw=", + "repeats": 19861 + }, + { + "count": 82473987, + "lower_bound": "AVQyODA5AAAA/AFUT1BJQwAAAPw=", + "upper_bound": "AVQyODM5AAAA/AFUT1BJQwAAAPw=", + "repeats": 0 + }, + { + "count": 83296290, + "lower_bound": "AVQyODQwAAAA/AFUT1BJQwAAAPw=", + "upper_bound": "AVQyODcyAAAA/AFUT1BJQwAAAPw=", + "repeats": 39273 + }, + { + "count": 83702754, + "lower_bound": "AVQyODczAAAA/AFUT1BJQwAAAPw=", + "upper_bound": "AVQyOTA0AAAA/AFUT1BJQwAAAPw=", + "repeats": 5432 + }, + { + "count": 83741190, + "lower_bound": "AVQyOTA1AAAA/AFUT1BJQwAAAPw=", + "upper_bound": "AVQyOTEwAAAA/AFUT1BJQwAAAPw=", + "repeats": 2456 + }, + { + "count": 84300699, + "lower_bound": "AVQyOTExAAAA/AFUT1BJQwAAAPw=", + "upper_bound": "AVQyOTc0AAAA/AFUT1BJQwAAAPw=", + "repeats": 5064 + }, + { + "count": 84582127, + "lower_bound": "AVQyOTc1AAAA/AFUT1BJQwAAAPw=", + "upper_bound": "AVQzMDM5AAAA/AFUT1BJQwAAAPw=", + "repeats": 16792 + }, + { + "count": 84591543, + "lower_bound": "AVQzMDQwAAAA/AFUT1BJQwAAAPw=", + "upper_bound": "AVQzMDQwAAAA/AFUT1BJQwAAAPw=", + "repeats": 8050 + }, + { + "count": 85046578, + "lower_bound": "AVQzMDQxAAAA/AFUT1BJQwAAAPw=", + "upper_bound": "AVQzMTcwAAAA/AFUT1BJQwAAAPw=", + "repeats": 5520 + }, + { + "count": 85685943, + "lower_bound": "AVQzMTcxAAAA/AFUT1BJQwAAAPw=", + "upper_bound": "AVQzMjk3AAAA/AFUT1BJQwAAAPw=", + "repeats": 333 + }, + { + "count": 86143524, + "lower_bound": "AVQzMjk4AAAA/AFUT1BJQwAAAPw=", + "upper_bound": "AVQzMzMxAAAA/AFUT1BJQwAAAPw=", + "repeats": 11155 + }, + { + "count": 86517706, + "lower_bound": "AVQzMzMyAAAA/AFUT1BJQwAAAPw=", + "upper_bound": "AVQzMzY0AAAA/AFUT1BJQwAAAPw=", + "repeats": 956 + }, + { + "count": 86703619, + "lower_bound": "AVQzMzY1AAAA/AFUT1BJQwAAAPw=", + "upper_bound": "AVQzMzgyAAAA/AFUT1BJQwAAAPw=", + "repeats": 21889 + }, + { + "count": 87186150, + "lower_bound": "AVQzMzgzAAAA/AFUT1BJQwAAAPw=", + "upper_bound": "AVQ3AAAAAAAA+QFUT1BJQwAAAPw=", + "repeats": 406 + }, + { + "count": 87212604, + "lower_bound": "AVQ4AAAAAAAA+QFUT1BJQwAAAPw=", + "upper_bound": "AVYxNTMxNTEy/wAAAAAAAAAA9wFMSVZFAAAAAPs=", + "repeats": 11 + }, + { + "count": 87401316, + "lower_bound": "AVYxNTMyOTMy/wAAAAAAAAAA9wFMSVZFAAAAAPs=", + "upper_bound": "AWUwNjgzMDc3/2U5ODM0OTRj/2JkNDA2M2I5/2NiZmVkYjNi/wAAAAAAAAAA9wFHUk9VUAAAAPw=", + "repeats": 2 + } + ] + }, + "cm_sketch": { + "rows": [ + { + "counters": [ + 55593, + 51568, + 119027, + 17424, + 167428, + 24107, + 5290, + 315806, + 41083, + 38187, + 67571, + 26346, + 51025, + 28257, + 10790, + 14761, + 23152, + 153393, + 44752, + 15991, + 57748, + 12006, + 129425, + 43056, + 3624, + 5631, + 9471, + 143173, + 109073, + 12054, + 334212, + 12504, + 19892, + 8807, + 48551, + 23532, + 13459, + 252510, + 14757, + 190491, + 6053, + 52515, + 284066, + 21650, + 71713, + 35884, + 3257, + 17477, + 6680, + 17653, + 23580, + 47068, + 17064, + 4979, + 62304, + 194916, + 16897, + 82019, + 2984, + 137727, + 2043, + 23131, + 8242, + 13204, + 1553837, + 13529, + 15577, + 134977, + 88255, + 18551, + 21820, + 74163, + 47331, + 13248, + 8866, + 9088, + 17847, + 55034, + 202417, + 135729, + 49879, + 359755, + 18599, + 212071, + 20237, + 146593, + 12325, + 106309, + 23955, + 64105, + 11264, + 20545, + 13163, + 60644, + 39519, + 10956, + 37322, + 13642, + 33373, + 55813, + 18781, + 134227, + 122196, + 4093, + 9916, + 182588, + 36481, + 12353, + 5749, + 124874, + 177372, + 215227, + 3357, + 6512, + 36680, + 10087, + 12890, + 15078, + 71461, + 3994, + 16682, + 12793, + 58611, + 8390, + 5325, + 52434, + 8667, + 9484, + 13493, + 10036, + 108829, + 7781, + 13245, + 115072, + 9957, + 3095615, + 4798, + 5820, + 28817, + 3500, + 64257, + 102441, + 60955, + 72917, + 16772, + 55128, + 2108, + 394410, + 130001, + 23832, + 7367, + 1849, + 14277, + 26789, + 178054, + 59643, + 12394, + 7227, + 29217, + 9564, + 25663, + 494115, + 27518, + 32774, + 12800, + 15013, + 29816, + 18171, + 197507, + 134193, + 102793, + 5995, + 73134, + 52313, + 145513, + 77228, + 51356, + 143638, + 5557, + 5889, + 8869, + 10253, + 12162, + 40873, + 37391, + 9761, + 14124, + 95264, + 43166, + 269813, + 7527, + 69167, + 26230, + 5573, + 91420, + 352688, + 235995, + 96572, + 2212, + 13517, + 146898, + 54894, + 120428, + 4119, + 88843, + 33852, + 151273, + 11137, + 3510, + 37856, + 12313, + 100426, + 49063, + 65102, + 39045, + 58233, + 10240, + 56985, + 4253, + 29310, + 80448, + 23786, + 27123, + 13964, + 58627, + 89580, + 32674, + 18073, + 27987, + 10857, + 68442, + 79833, + 82252, + 456879, + 20019, + 44527, + 19174, + 46778, + 21360, + 38620, + 120797, + 19826, + 168716, + 6231, + 9825, + 65682, + 10018, + 37040, + 31255, + 93266, + 20565, + 56946, + 12681, + 26577, + 170713, + 15141, + 53541, + 63843, + 174430, + 20628, + 18880, + 9488, + 12211, + 165141, + 179721, + 56391, + 133758, + 5913, + 305058, + 43309, + 82293, + 23318, + 26055, + 13679, + 30840, + 67547, + 516140, + 87686, + 10137, + 4864, + 35078, + 32249, + 43655, + 23536, + 12333, + 31316, + 8028, + 17348, + 10492, + 86234, + 33710, + 3008, + 27628, + 384644, + 213427, + 117036, + 10136, + 6059, + 38693, + 63792, + 332604, + 7287, + 12156, + 63140, + 90977, + 4474, + 25838, + 21219, + 90529, + 4024, + 15543, + 40355, + 62743, + 55345, + 4273, + 96408, + 20352, + 329237, + 3382, + 4049, + 36256, + 5427, + 40115, + 108233, + 83215, + 11798, + 31456, + 16251, + 15769, + 160845, + 18051, + 118915, + 13444, + 12872, + 12670, + 15928, + 18567, + 19222, + 82510, + 56390, + 10367, + 158448, + 3588, + 22024, + 24474, + 29786, + 42118, + 21031, + 28867, + 22532, + 196111, + 2603, + 34860, + 477987, + 18935, + 4246, + 8110, + 36522, + 13340, + 5260, + 15493, + 3017, + 18336, + 3032, + 39217, + 198133, + 11649, + 10991, + 17251, + 1209075, + 31877, + 41552, + 36941, + 14873, + 186734, + 1271474, + 59058, + 2937, + 4996, + 7087, + 188825, + 261035, + 61628, + 55022, + 52416, + 219084, + 66566, + 30037, + 23675, + 105921, + 10378, + 36186, + 70625, + 8101, + 33014, + 19581, + 10725, + 68496, + 19429, + 279929, + 8937, + 34550, + 63661, + 253026, + 290455, + 7567, + 23213, + 16927, + 2104, + 13297, + 86340, + 332562, + 15460, + 10664, + 25350, + 4822, + 46723, + 101181, + 29172, + 5715, + 152231, + 18024, + 62906, + 11030, + 8179, + 46814, + 3300, + 30056, + 6560, + 5025, + 93569, + 196719, + 35686, + 12435, + 18728, + 52020, + 26835, + 10974, + 39288, + 15525, + 65070, + 30795, + 22860, + 6689, + 5462, + 27511, + 123932, + 78107, + 11988, + 61798, + 261585, + 54513, + 8280, + 64131, + 105597, + 7764, + 20293, + 166791, + 340909, + 44591, + 77316, + 22041, + 1867, + 95035, + 59416, + 18771, + 5738, + 13983, + 62569, + 4106, + 74758, + 364994, + 11093, + 54249, + 278410, + 72668, + 11467, + 60890, + 2509, + 264960, + 25346, + 40335, + 213413, + 19649, + 31114, + 108013, + 22339, + 325393, + 180002, + 38453, + 47671, + 68760, + 47000, + 24544, + 84074, + 21531, + 58485, + 36666, + 44562, + 10060, + 35585, + 15105, + 16272, + 32246, + 19457, + 29337, + 35729, + 41032, + 27172, + 24103, + 27068, + 1186, + 3106094, + 205149, + 383301, + 36402, + 159366, + 3660, + 251179, + 81415, + 16471, + 140878, + 13889, + 85222, + 13851, + 3080, + 25580, + 11182, + 8035, + 4173, + 71945, + 10150, + 26121, + 228580, + 4481, + 44083, + 4953, + 278531, + 77547, + 44533, + 21992, + 6492, + 12662, + 63920, + 114871, + 76500, + 8449, + 14633, + 16552, + 59036, + 125702, + 5167, + 67808, + 30416, + 185150, + 8604, + 66259, + 52210, + 60235, + 71748, + 75213, + 15942, + 290253, + 165120, + 314965, + 61695, + 71883, + 18502, + 148086, + 75950, + 37909, + 1605645, + 319212, + 39942, + 6632, + 172297, + 72461, + 18659, + 39497, + 41122, + 11507, + 20914, + 76680, + 3040, + 43972, + 15926, + 36099, + 145295, + 42318, + 311905, + 10250, + 13020, + 313278, + 320641, + 172354, + 37148, + 127520, + 6068, + 28181, + 44907, + 122296, + 7419, + 189530, + 31163, + 119194, + 164672, + 33969, + 27015, + 13024, + 84658, + 70168, + 39100, + 1611, + 39897, + 32937, + 12957, + 379684, + 24893, + 114052, + 93559, + 43021, + 19545, + 310463, + 12761, + 55893, + 14308, + 6645, + 104805, + 80435, + 13928, + 174729, + 238336, + 12925, + 87015, + 162297, + 52291, + 29393, + 1915, + 30628, + 72856, + 26372, + 18368, + 223881, + 27445, + 81520, + 24714, + 16246, + 113123, + 8173, + 9960, + 25870, + 9135, + 166552, + 75915, + 100978, + 21582, + 27898, + 37436, + 32474, + 575524, + 66998, + 4552, + 31836, + 108573, + 54990, + 11018, + 88868, + 74917, + 21334, + 44208, + 59795, + 34570, + 5132, + 23369, + 104190, + 73671, + 200871, + 26806, + 136406, + 11574, + 338485, + 14806, + 9287, + 20474, + 3524, + 15271, + 16948, + 54445, + 5555, + 346090, + 3686, + 88095, + 10309, + 22952, + 40901, + 46975, + 17240, + 70918, + 78190, + 172705, + 14075, + 128261, + 5750, + 29164, + 46778, + 36270, + 37455, + 163985, + 12388, + 33791, + 367855, + 9270, + 35702, + 66902, + 49546, + 26163, + 12747, + 14103, + 38977, + 41947, + 25216, + 18601, + 376764, + 13448, + 193118, + 24518, + 79321, + 33241, + 2638, + 156210, + 11347, + 65269, + 21300, + 31327, + 15360, + 31157, + 110027, + 17962, + 88163, + 30760, + 9501, + 61451, + 76875, + 13352, + 13043, + 41222, + 204386, + 89938, + 14282, + 18795, + 18623, + 317307, + 139730, + 39894, + 32939, + 6127, + 264459, + 9534, + 27623, + 54410, + 117143, + 31853, + 19368, + 52976, + 32391, + 132891, + 82213, + 609525, + 12810, + 13796, + 38363, + 11660, + 278037, + 11449, + 70797, + 20142, + 97244, + 44734, + 52972, + 10615, + 4892, + 122509, + 53717, + 72566, + 19184, + 23609, + 45422, + 11113, + 24595, + 48811, + 18751, + 19861, + 4555, + 18823, + 44176, + 24246, + 5864, + 94895, + 9860, + 37765, + 26635, + 75058, + 6821, + 4187, + 193771, + 62144, + 3251, + 287934, + 16311, + 44157, + 58133, + 35795, + 13392, + 51178, + 2148, + 148967, + 18626, + 8595, + 38217, + 69706, + 42392, + 38240, + 13012, + 27292, + 2240, + 14971, + 2012925, + 27296, + 123928, + 16801, + 40722, + 97413, + 8636, + 20558, + 21605, + 381896, + 8863, + 62413, + 29186, + 7942, + 307948, + 89903, + 40186, + 9470, + 81086, + 40417, + 12242, + 4062, + 20130, + 6649, + 5472, + 48936, + 374406, + 66369, + 14477, + 107372, + 68206, + 350902, + 42930, + 4120, + 30675, + 666918, + 111557, + 45640, + 104910, + 251759, + 52612, + 51029, + 5034, + 2811, + 9456, + 59342, + 86741, + 62801, + 142453, + 68508, + 67047, + 164138, + 65385, + 13635, + 114349, + 62464, + 98697, + 13491, + 33439, + 4514, + 52142, + 14148, + 38880, + 2923, + 7128, + 92707, + 8312, + 46489, + 18145, + 46092, + 23517, + 160313, + 32954, + 82775, + 21708, + 147072, + 156126, + 13823, + 7783, + 9190, + 7714, + 8316, + 21151, + 31583, + 11587, + 23479, + 38959, + 14809, + 144820, + 101114, + 44203, + 2639, + 66202, + 21597, + 26000, + 67790, + 242641, + 28166, + 71261, + 6990, + 82700, + 63447, + 112568, + 10136, + 18301, + 135392, + 49924, + 60491, + 8164, + 33995, + 42444, + 262917, + 32939, + 7265, + 1961738, + 173949, + 22200, + 239477, + 19201, + 25983, + 1376, + 95948, + 96335, + 141676, + 21383, + 16759, + 16228, + 13995, + 61643, + 119978, + 33101, + 63393, + 4053, + 45735, + 35868, + 5201, + 13361, + 17881, + 57344, + 38732, + 19905, + 85764, + 71265, + 28217, + 6325, + 225759, + 12807, + 13498, + 6755, + 61304, + 274570, + 30795, + 42469, + 18726, + 13703, + 36505, + 60851, + 46706, + 10666, + 54431, + 20485, + 150841, + 6847, + 110992, + 237231, + 38406, + 250737, + 122924, + 22184, + 25419, + 5799, + 10105, + 68721, + 7679, + 213633, + 40936, + 67790, + 51711, + 16463, + 10215, + 230293, + 229689, + 104486, + 16825, + 7153, + 23180, + 167093, + 8550, + 208989, + 17718, + 881934, + 28676, + 7014, + 23858, + 126344, + 36693, + 545736, + 25018, + 128882, + 14409, + 21922, + 36411, + 46856, + 297202, + 8220, + 68340, + 4527, + 28725, + 159808, + 160716, + 23233, + 13493, + 75240, + 45638, + 39539, + 7847, + 22451, + 223279, + 74771, + 5851, + 413959, + 15593, + 9241, + 69170, + 103826, + 3725, + 17903, + 56624, + 14870, + 83897, + 16448, + 53776, + 52634, + 132931, + 37521, + 7600, + 44697, + 3754, + 4686, + 10017, + 34614, + 22287, + 17076, + 113954, + 270600, + 9705, + 7922, + 189786, + 355970, + 5084, + 300135, + 48356, + 23261, + 111602, + 128903, + 26290, + 12252, + 13370, + 46847, + 14512, + 11274, + 28883, + 63752, + 23614, + 60170, + 15649, + 32653, + 16125, + 82982, + 47393, + 38345, + 20943, + 41144, + 42681, + 521058, + 116277, + 143293, + 86006, + 46057, + 50321, + 32692, + 19131, + 28833, + 29178, + 21069, + 13682, + 177500, + 59890, + 18744, + 15907, + 159541, + 198153, + 132689, + 355293, + 7545, + 15036, + 58081, + 25623, + 186338, + 15485, + 20611, + 7325, + 135543, + 13715, + 68046, + 69401, + 14549, + 9047, + 10741, + 85931, + 69481, + 30602, + 50614, + 23616, + 437219, + 401384, + 22432, + 28698, + 137283, + 4785, + 72744, + 57734, + 42274, + 77854, + 68849, + 5331, + 329934, + 187962, + 27127, + 35764, + 23771, + 61423, + 165226, + 191240, + 141747, + 14249, + 141733, + 43942, + 272269, + 54529, + 46095, + 7903, + 156545, + 326989, + 36260, + 11124, + 40332, + 27285, + 26236, + 90029, + 314431, + 135811, + 47381, + 16239, + 72225, + 8026, + 25686, + 275735, + 117433, + 46296, + 65563, + 51616, + 236174, + 29985, + 54235, + 97278, + 95586, + 20037, + 97213, + 11833, + 12381, + 17779, + 7801, + 59683, + 58462, + 83186, + 239568, + 135631, + 38297, + 7241, + 3753, + 29129, + 45950, + 72318, + 101285, + 47178, + 306684, + 3998, + 15933, + 15032, + 31902, + 16609, + 28761, + 189645, + 18658, + 39599, + 73221, + 22296, + 356202, + 8150, + 9071, + 44778, + 22605, + 2166, + 70635, + 39318, + 9638, + 237214, + 26756, + 56965, + 344177, + 57601, + 11399, + 10228, + 3288, + 32357, + 51743, + 26494, + 474123, + 56079, + 10665, + 151778, + 15882, + 5906, + 208954, + 18229, + 98063, + 1347, + 360102, + 47149, + 20165, + 5816, + 218391, + 5167, + 50602, + 12286, + 15429, + 113814, + 9698, + 4426, + 3685, + 56000, + 85801, + 20492, + 66808, + 19985, + 41903, + 11281, + 19903, + 29852, + 16464, + 35518, + 29749, + 7903, + 11421, + 59476, + 51390, + 9849, + 288657, + 6996, + 33434, + 52976, + 55214, + 78475, + 309487, + 151724, + 81728, + 8262, + 60522, + 10427, + 11415, + 81124, + 27655, + 10034, + 416512, + 18001, + 19762, + 13361, + 18157, + 93120, + 10166, + 79760, + 4321, + 79895, + 20313, + 58078, + 83396, + 5069, + 17784, + 51205, + 122569, + 2812, + 18675, + 15328, + 38547, + 33214, + 149528, + 12958, + 118070, + 59469, + 14098, + 124212, + 13094, + 17460, + 12259, + 5895, + 284438, + 8786, + 32113, + 28136, + 9290, + 33797, + 10702, + 189366, + 5459, + 16658, + 13283, + 15796, + 31036, + 58808, + 9208, + 354100, + 827301, + 48291, + 57436, + 78163, + 7121, + 9633, + 15118, + 36520, + 40336, + 18180, + 57839, + 8548, + 24278, + 16614, + 11466, + 9864, + 15505, + 314093, + 356638, + 28143, + 16772, + 261431, + 91321, + 18875, + 13943, + 8603, + 118072, + 57534, + 218066, + 39780, + 3560, + 23745, + 24055, + 28780, + 166468, + 25999, + 56436, + 185725, + 21214, + 61904, + 621701, + 19337, + 60822, + 18426, + 209748, + 574064, + 8197, + 15111, + 7215, + 25201, + 6802, + 33315, + 18328, + 24070, + 16033, + 47338, + 123593, + 85888, + 41704, + 87755, + 8910, + 24195, + 232968, + 49576, + 8880, + 96203, + 22046, + 2413, + 48915, + 31577, + 53732, + 20356, + 415848, + 56876, + 11635, + 24187, + 40013, + 189691, + 46724, + 5691, + 11595, + 16794, + 5035, + 14241, + 20442, + 285609, + 44362, + 22918, + 63411, + 71401, + 8860, + 180991, + 9974, + 68755, + 42872, + 20223, + 30081, + 21660, + 23732, + 9588, + 20108, + 17154, + 29184, + 5882, + 12147, + 176575, + 17526, + 15186, + 20916, + 13446, + 57822, + 9705, + 35742, + 54034, + 6834, + 115235, + 174446, + 40957, + 10391, + 63680, + 198281, + 15170, + 23044, + 12050, + 49947, + 57165, + 5239, + 3941, + 222560, + 58582, + 24715, + 8112, + 29443, + 9988, + 88826, + 101615, + 10241, + 56921, + 4295, + 17831, + 10415, + 5663, + 76475, + 2707, + 106598, + 46502, + 20856, + 53065, + 141686, + 84211, + 1258956, + 61694, + 20535, + 26076, + 165943, + 16931, + 207353, + 13371, + 8108, + 7556, + 210034, + 15554, + 28967, + 118603, + 31597, + 12130, + 2878, + 19980, + 24667, + 180918, + 94341, + 102143, + 3833, + 22006, + 4307, + 54218, + 184672, + 96899, + 23801, + 17454, + 215766, + 43968, + 156890, + 46577, + 21731, + 14240, + 12244, + 92281, + 162002, + 9800, + 5468, + 75542, + 11815, + 41013, + 20175, + 49666, + 12432, + 43671, + 25144, + 27774, + 2290, + 63842, + 22806, + 103978, + 67555, + 102743, + 72391, + 72093, + 17395, + 12799, + 127938, + 5359, + 2474, + 11563, + 9385, + 212790, + 102527, + 20365, + 52530, + 7144, + 5556, + 39556, + 9423, + 16281, + 8027, + 42611, + 14580, + 67017, + 99588, + 3903, + 19194, + 69740, + 52559, + 54357, + 20367, + 26640, + 21100, + 135053, + 39415, + 196024, + 24658, + 14328, + 171835, + 180213, + 104959, + 23198, + 402762, + 10066, + 23316, + 5669, + 56786, + 8583, + 5218, + 72535, + 10744, + 61187, + 3890, + 18546, + 12805, + 68206, + 11961, + 233409, + 72550, + 67773, + 62850, + 68825, + 6161, + 627147, + 154676, + 20055, + 64253, + 14892, + 19163, + 21607, + 4633, + 27914, + 44580, + 28148, + 7493, + 6741, + 3423, + 72579, + 48642, + 26172, + 97089, + 93497, + 8007, + 139872, + 20638, + 11177, + 66227, + 44202, + 14852, + 12093, + 404882, + 10361, + 46909, + 17522, + 64455, + 8459, + 18936807, + 35143, + 134275, + 29929, + 61516, + 34305, + 30292, + 32373, + 51158, + 73512, + 53785, + 56264, + 79805, + 9183, + 10140, + 20557, + 100763, + 19249, + 72180, + 47414, + 2900, + 57479, + 23835, + 75196, + 82953, + 64128, + 15596, + 2825, + 288091, + 11494, + 137854, + 9542, + 19378, + 41065, + 8980, + 30021, + 50286, + 23651, + 22050, + 5916, + 6381, + 249044, + 11944, + 59608, + 10608, + 49066, + 8457, + 62041, + 15069, + 62238, + 6235, + 8099, + 66217, + 7811, + 571740, + 12798, + 15042, + 143056, + 6924, + 70573, + 9466, + 50399, + 30732, + 5327643, + 209854, + 233571, + 113506, + 142656, + 3360, + 21340, + 37219, + 52324, + 273165, + 10394, + 263333, + 38477, + 36806, + 140417, + 9606, + 18664, + 63613, + 11346, + 197697, + 7194, + 3622, + 59502, + 84725, + 63282, + 8910, + 165631, + 8274, + 48627, + 11072, + 179209, + 4494, + 51901, + 10752, + 14249, + 1998, + 37641, + 168414, + 34317, + 25257, + 21022, + 57988, + 79723, + 13809, + 265609, + 2006, + 57754, + 266482, + 27097, + 23865, + 94950, + 23656, + 193908, + 3378, + 16089, + 96861, + 18378, + 65526, + 74447, + 26001, + 6726, + 9192, + 64376, + 60799, + 6479, + 13642, + 6274, + 21848, + 82393, + 34778, + 30448, + 51274, + 262096, + 26746, + 33392, + 142258, + 98887, + 37223, + 14024, + 16484, + 11438, + 13442, + 9156, + 121028, + 396620, + 8114, + 44185, + 237973, + 120931, + 3658, + 30153, + 43603, + 71494, + 10124, + 48657, + 21873, + 48003, + 5573, + 5619, + 12105, + 24415, + 103425, + 25833, + 161038, + 60953, + 26428, + 28178, + 18835, + 32724, + 34009, + 29325, + 96156, + 62453, + 16617, + 55826, + 32800, + 20026, + 104924, + 8881, + 44120, + 63457, + 18417, + 44694, + 29500, + 44595, + 12478, + 39239, + 9521, + 29844, + 64770, + 38825, + 40857, + 67230, + 29007, + 28320, + 11760, + 33519, + 6857, + 14439, + 55733, + 4117, + 7416, + 546045, + 44614, + 6731, + 39463, + 433964, + 17629, + 16424, + 62277, + 107677, + 52582, + 54659, + 1546458, + 56487, + 31387, + 81670, + 96110, + 123705, + 11094, + 19157, + 49808, + 29242, + 1634277, + 91331, + 193084, + 15008, + 7557, + 447749, + 257185, + 75945, + 315300, + 40769, + 107226, + 11861, + 30082, + 7530, + 44259, + 35982, + 16146, + 22587, + 7344, + 35727, + 20130, + 5323, + 11269, + 41896, + 27878, + 8382, + 59770, + 8980, + 71019, + 44353, + 47656, + 961899, + 18614, + 3417, + 10584, + 66416, + 1324264, + 10503, + 5614, + 9805, + 9169, + 132072, + 109991, + 147031, + 21724, + 58158, + 64726, + 16506, + 199580, + 24015, + 322586, + 67344, + 29920, + 105720, + 3147, + 5526, + 169321, + 22742, + 21852, + 116180, + 7479, + 9432256, + 65278, + 16068, + 18289, + 19942, + 11704, + 8260, + 7070, + 21808, + 113190, + 17644, + 3706, + 82954, + 4297, + 44505, + 38692, + 57256, + 169341, + 111764, + 31823, + 82669, + 116597, + 22822, + 3903, + 10621, + 17049, + 30317, + 418822, + 32577, + 46369, + 97938, + 103296, + 20638, + 78456, + 28895, + 130977, + 14254, + 143639, + 32735, + 19447, + 315014, + 15023, + 7046, + 3096, + 224282, + 80101, + 4809, + 55326, + 167845, + 32036, + 16057, + 18051, + 12007, + 17200, + 144219, + 24195, + 36599, + 15645, + 25746, + 7802, + 28406, + 8670, + 29753, + 23256, + 236035, + 82421, + 16337, + 6454, + 137339, + 170801, + 31410, + 55245, + 15895, + 15481, + 5217, + 2913, + 110458, + 8329, + 7864, + 41451, + 12247, + 27925, + 143297, + 78787, + 5468, + 12960, + 104139, + 9679, + 11989, + 32293, + 12722, + 29556, + 17554, + 8804, + 16915, + 8527, + 17370, + 295514, + 8731, + 18038, + 61605, + 225092, + 332998, + 2829, + 16947, + 8626, + 1727, + 17591, + 173361, + 98042, + 141377, + 15140, + 4612 + ] + }, + { + "counters": [ + 19074, + 15610, + 356640, + 70576, + 33171, + 8800, + 63682, + 101935, + 62724, + 74050, + 166077, + 183460, + 2285, + 220445, + 2534, + 391914, + 232408, + 199139, + 43890, + 8763, + 22272, + 372049, + 482775, + 79472, + 31072, + 32664, + 80071, + 30328, + 38998, + 15355, + 13236, + 112871, + 73094, + 34122, + 9344, + 48415, + 8103, + 16474, + 41414, + 105196, + 18154, + 174055, + 20241, + 24483, + 18689, + 16810, + 45128, + 21092, + 30098, + 7451, + 2827, + 9372, + 6086, + 13889, + 77992, + 31355, + 19703, + 14030, + 6356, + 117378, + 24670, + 76461, + 13574, + 27104, + 8016, + 37127, + 8360, + 19163, + 13630, + 71219, + 70689, + 5315, + 9413, + 20700, + 29811, + 23727, + 19148, + 144560, + 143956, + 19480, + 73237, + 77871, + 4183, + 6801, + 135512, + 58075, + 7374, + 78042, + 137098, + 108443, + 13147, + 24165, + 24822, + 44425, + 32286, + 172905, + 14296, + 27854, + 103343, + 17366, + 171280, + 25190, + 12407, + 58981, + 36890, + 7475, + 68979, + 32364, + 62582, + 50799, + 15173, + 93800, + 1390, + 49548, + 7259, + 38558, + 47642, + 34111, + 74325, + 131590, + 9705, + 4037, + 6267, + 30900, + 54648, + 17344, + 3576, + 64332, + 12574, + 27768, + 49889, + 261974, + 24535, + 10167, + 8874, + 182732, + 15952, + 19995, + 28324, + 41653, + 26232, + 12331, + 268742, + 130047, + 69815, + 2430, + 102397, + 62715, + 9629, + 9545, + 151678, + 21438, + 286649, + 1277, + 13006, + 4789, + 94163, + 100379, + 80293, + 13522, + 53727, + 53858, + 6041, + 14369, + 96941, + 171691, + 8187, + 60181, + 14707, + 58139, + 6291, + 164330, + 10429, + 57531, + 319264, + 22124, + 167494, + 14021, + 84339, + 13707, + 197732, + 54063, + 53846, + 12486, + 21560, + 20224, + 121027, + 12503, + 86396, + 199919, + 71331, + 53468, + 2689, + 14639, + 129105, + 3226, + 23356, + 20763, + 27131, + 42419, + 41942, + 163195, + 5866, + 6606, + 145334, + 8027, + 77135, + 7917, + 91681, + 31878, + 15104, + 1274307, + 19146, + 22479, + 51436, + 16197, + 2473, + 49048, + 5825, + 29994, + 34250, + 12197, + 243075, + 10453, + 10328, + 179744, + 3602, + 7129, + 15425, + 46205, + 129658, + 58212, + 73507, + 195825, + 83302, + 33545, + 12642, + 3672, + 22147, + 28260, + 5218, + 38226, + 55963, + 13849, + 53476, + 7617, + 13755, + 6209, + 2842, + 3243, + 150843, + 44623, + 33069, + 43809, + 35535, + 6546, + 8471, + 20329, + 31791, + 44861, + 19358, + 163569, + 10191, + 12289, + 57049, + 28677, + 16936, + 12114, + 74351, + 99492, + 19809, + 46095, + 52863, + 13582, + 284449, + 14067, + 26408, + 3558, + 29135, + 137907, + 37240, + 10815, + 8975, + 65384, + 13930, + 13790, + 6467, + 12447, + 79723, + 203861, + 22999, + 65621, + 113573, + 16749, + 35911, + 80252, + 28394, + 161425, + 187576, + 111270, + 100831, + 53660, + 2428, + 16201, + 31331, + 151125, + 192275, + 2923, + 6347, + 26649, + 10346, + 20289, + 30506, + 32810, + 13389, + 82264, + 113376, + 10896, + 70506, + 319937, + 0, + 69136, + 128335, + 7273, + 49113, + 46747, + 17198, + 3868, + 3592, + 105378, + 60130, + 121212, + 85700, + 93519, + 26358, + 57150, + 14273, + 20722, + 10669, + 21041, + 18976, + 8264, + 11739, + 6661, + 6005, + 17646, + 161380, + 182297, + 39947, + 55819, + 55131, + 14724, + 98428, + 39728, + 58923, + 80498, + 418878, + 39697, + 100644, + 11570, + 335355, + 22235, + 32896, + 14360, + 91893, + 80309, + 31216, + 7686, + 16249, + 14290, + 20703, + 222788, + 552267, + 130714, + 4973, + 6519, + 44673, + 9558, + 214532, + 40903, + 16703, + 42372, + 14836, + 24831, + 21421, + 7213, + 31940, + 42666, + 776079, + 14430, + 34642, + 22715, + 19186, + 42482, + 115564, + 20254, + 6914, + 6025, + 59457, + 13377, + 346598, + 7897, + 13015, + 60524, + 9912, + 15215, + 20341, + 16911, + 9037, + 13004, + 410671, + 24183, + 33615, + 231544, + 118067, + 13595, + 9795, + 7177, + 15935, + 170975, + 135535, + 38905, + 135209, + 25038, + 81768, + 67778, + 17110, + 103075, + 17002, + 9831, + 191471, + 37704, + 479793, + 306698, + 5366, + 45544, + 7719, + 282555, + 35352, + 105604, + 21660, + 4233, + 58546, + 8676, + 15087, + 76381, + 84254, + 161791, + 22530, + 25010, + 15449, + 15815, + 335154, + 65301, + 74524, + 10042, + 19989, + 124674, + 58800, + 28997, + 94489, + 4057, + 13923, + 105596, + 14818, + 3173, + 3435, + 68837, + 17766, + 4432, + 45473, + 6817, + 21239, + 6452, + 39547, + 60945, + 27239, + 66569, + 120776, + 26121, + 307816, + 34818, + 16774, + 148968, + 56735, + 4173, + 257186, + 23108, + 22980, + 23385, + 50566, + 441760, + 11086, + 7487, + 107746, + 307993, + 58509, + 106106, + 44330, + 7395, + 54643, + 20096, + 3065, + 69157, + 106651, + 7747, + 273402, + 79496, + 50953, + 16265, + 57252, + 18134, + 9210, + 32426, + 23434, + 48536, + 51179, + 613242, + 10639, + 24588, + 197519, + 125769, + 36651, + 4406, + 8057, + 27097, + 77426, + 51389, + 27629, + 63005, + 157825, + 6871, + 3316, + 19819, + 89086, + 13890, + 15528, + 614772, + 32257, + 179465, + 10581, + 52733, + 54749, + 120236, + 73500, + 6253, + 226796, + 423063, + 4772, + 41846, + 165864, + 87385, + 99928, + 10189, + 6051, + 66559, + 26801, + 16095, + 144340, + 9912, + 9467, + 327037, + 26586, + 65200, + 13556, + 129508, + 12866, + 4167, + 32335, + 165122, + 4205, + 81500, + 15945, + 28123, + 4107, + 240466, + 149481, + 12371, + 29371, + 224936, + 29878, + 15569, + 2244, + 14129, + 237655, + 56947, + 126524, + 16402, + 8190, + 151194, + 14965, + 28393, + 45124, + 13836, + 52969, + 525859, + 8188, + 18360, + 176870, + 47054, + 27062, + 55024, + 148291, + 284500, + 209521, + 217945, + 5460, + 104353, + 27237, + 35170, + 149057, + 12108, + 16076, + 25984, + 109231, + 64873, + 37293, + 65744, + 22314, + 2162, + 11744, + 29295, + 29182, + 38601, + 70607, + 39811, + 78901, + 19460, + 23078, + 84878, + 47045, + 52789, + 54344, + 64117, + 752126, + 10797, + 318856, + 40542, + 16110, + 13343, + 127661, + 9636, + 12386, + 179758, + 4663, + 8582, + 109338, + 20815, + 14625, + 8641, + 40078, + 36055, + 44815, + 13067, + 34391, + 35650, + 1064166, + 24997, + 29837, + 7143, + 19609, + 23363, + 15108, + 46615, + 12182, + 61478, + 255650, + 174412, + 128336, + 131575, + 44313, + 49853, + 6794, + 5000, + 18384, + 133328, + 166520, + 12880, + 197687, + 185031, + 27514, + 12953, + 37182, + 22032, + 54390, + 43792, + 75979, + 58135, + 56244, + 12154, + 37753, + 22413, + 53550, + 320840, + 25814, + 318249, + 51379, + 212845, + 12161, + 4868, + 62966, + 86810, + 126273, + 83219, + 98734, + 97644, + 11354, + 4455, + 70139, + 17775, + 113833, + 9972, + 272467, + 69983, + 7811, + 31882, + 6353, + 4169, + 418478, + 90623, + 19326, + 2011, + 32945, + 170750, + 10151, + 149458, + 22712, + 14609, + 15929, + 22119, + 5623, + 2037924, + 41482, + 54679, + 42895, + 43487, + 10842, + 55185, + 86078, + 14866, + 301979, + 394737, + 32059, + 58893, + 166459, + 84939, + 8777, + 1600201, + 3663, + 125481, + 144850, + 33226, + 13161, + 56126, + 4416, + 64758, + 73025, + 9868, + 73811, + 108858, + 28401, + 15258, + 14905, + 20275, + 225363, + 58160, + 25451, + 86808, + 481317, + 90268, + 126482, + 6194, + 61450, + 78423, + 93422, + 41172, + 2453, + 22011, + 31806, + 21673, + 28701, + 18509, + 14761, + 4550, + 977760, + 11012, + 26223, + 28636, + 20581, + 1608006, + 30137, + 53654, + 31358, + 11940, + 182671, + 25436, + 37813, + 12477, + 39400, + 4517, + 30262, + 330, + 105533, + 70430, + 49986, + 29434, + 51829, + 84352, + 59633, + 187475, + 10909, + 31527, + 11727, + 272483, + 23420, + 83618, + 10459, + 30526, + 109470, + 32028, + 46730, + 266776, + 3445, + 710272, + 200199, + 268597, + 10617, + 4989, + 54745, + 7687, + 21022, + 9211, + 6984, + 21021, + 290204, + 21406, + 22880, + 10575, + 9171, + 19085, + 46128, + 266202, + 237430, + 3832, + 48974, + 43776, + 212135, + 13892, + 22206, + 2015, + 78760, + 111604, + 27515, + 24450, + 25146, + 302370, + 31889, + 128625, + 56457, + 12356, + 25139, + 14879, + 43273, + 13749, + 33572, + 104369, + 14964, + 29667, + 10645, + 19902, + 31885, + 58762, + 48782, + 137629, + 225693, + 4414, + 6794, + 20954, + 43475, + 41114, + 13477, + 31287, + 180159, + 57453, + 17099, + 48634, + 39331, + 10855, + 117842, + 9197, + 30149, + 161943, + 27785, + 13238, + 10281, + 56479, + 76590, + 1930, + 12689, + 34852, + 43942, + 48485, + 7453, + 17838, + 162871, + 3101733, + 75764, + 51179, + 43682, + 7134, + 13504, + 30756, + 15158, + 288267, + 27457, + 168414, + 28428, + 163860, + 54793, + 655144, + 38223, + 40431, + 12526, + 90522, + 45518, + 33212, + 7588, + 9560, + 581797, + 162515, + 210131, + 49727, + 3980, + 102251, + 61872, + 92088, + 19527, + 52565, + 2802, + 135441, + 73134, + 122189, + 419344, + 23197, + 42607, + 44181, + 533382, + 46846, + 1278312, + 425855, + 64168, + 31021, + 9565, + 41911, + 283389, + 5695519, + 16896, + 63623, + 364632, + 22693, + 2591, + 27487, + 6234, + 30265, + 7404, + 19690, + 23867, + 14006, + 214291, + 6114, + 128182, + 92505, + 4645, + 10042, + 113178, + 37737, + 108239, + 4102, + 45466, + 45327, + 99936, + 50402, + 33381, + 49138, + 24821, + 23943, + 72560, + 17144, + 5859, + 12078, + 18756, + 132620, + 62660, + 72336, + 15498, + 71117, + 4481, + 3221, + 96982, + 11123, + 147380, + 22663, + 62985, + 19233, + 29885, + 42432, + 28892, + 94609, + 138502, + 2410, + 293268, + 9035, + 16581, + 27858, + 32982, + 29465, + 44342, + 88155, + 35279, + 46313, + 4859, + 111141, + 15688, + 10130, + 16734, + 8568, + 7081, + 117354, + 16489, + 10789, + 63086, + 5916, + 75553, + 9438, + 92443, + 72227, + 106529, + 58666, + 5740, + 243962, + 198235, + 10909, + 68784, + 35171, + 78709, + 50274, + 15296, + 50579, + 28696, + 40258, + 17315, + 7642, + 9443, + 10570, + 85765, + 15216, + 13435, + 4983, + 4930, + 8744, + 38184, + 4409, + 25308, + 95507, + 11767, + 62312, + 19443, + 109452, + 190490, + 112478, + 11271, + 20424, + 24182, + 8405, + 6173, + 16386, + 9133, + 18943, + 97882, + 54431, + 91759, + 36438, + 8799, + 30864, + 79662, + 25572, + 8015, + 35402, + 37690, + 28694, + 45210, + 10292, + 52120, + 41085, + 67092, + 16449, + 35879, + 108845, + 57754, + 79745, + 105544, + 16459, + 94540, + 9717, + 172335, + 22168, + 56027, + 9606501, + 52138, + 11435, + 17034, + 6208, + 4268, + 297641, + 36827, + 21470, + 11623, + 34538, + 4441, + 32961, + 58904, + 182530, + 68106, + 63654, + 21478, + 44907, + 81051, + 11567, + 11190, + 6367, + 9710, + 8730, + 406487, + 152614, + 106341, + 31241, + 34326, + 4459, + 115931, + 119658, + 39006, + 113184, + 43650, + 50598, + 19255, + 333128, + 22888, + 11939, + 60187, + 11687, + 133382, + 48688, + 28534, + 264372, + 1752, + 13203, + 1517, + 128268, + 33199, + 11232, + 226275, + 20391, + 32811, + 22230, + 19383, + 30771, + 5731, + 102350, + 68215, + 321698, + 14289, + 1874743, + 416175, + 92712, + 2337, + 43435, + 2443, + 379010, + 15102, + 11254, + 38453, + 73482, + 34470, + 11330, + 15233, + 209110, + 15651, + 5709, + 83268, + 8578, + 12438, + 8936, + 153645, + 20075, + 28922, + 7408, + 28266, + 27325, + 197756, + 123224, + 5452, + 45548, + 120875, + 1046262, + 117673, + 15288, + 10402, + 4900, + 11061, + 30387, + 24212, + 27151, + 7491, + 115254, + 51981, + 26306, + 185175, + 56304, + 25556, + 66143, + 76732, + 5022, + 42847, + 1913, + 23738, + 159820, + 185412, + 8143, + 31973, + 34385, + 15008, + 50643, + 50007, + 13057, + 25362, + 2467, + 2530, + 208216, + 4641, + 2641, + 24465, + 11401, + 52387, + 20642, + 35376, + 117047, + 15243, + 12783, + 31239, + 55245, + 19943, + 329815, + 59442, + 15011, + 4639, + 170475, + 5253, + 22914, + 23757, + 5784, + 15652, + 2169, + 22182, + 139038, + 32132, + 10686, + 18439, + 10347, + 14741, + 33562, + 77144, + 70969, + 15200, + 40052, + 36944, + 34171, + 6902, + 29837, + 3202, + 42586, + 337379, + 32141, + 26291, + 59526, + 59509, + 18913, + 29349, + 179268, + 154880, + 11029, + 29016, + 71597, + 126423, + 8554, + 41534, + 32336, + 5799, + 26466, + 65845, + 48377, + 6572, + 63087, + 3483, + 7461, + 37034, + 139041, + 48188, + 40388, + 35099, + 39664, + 156460, + 42937, + 18181, + 27995, + 47207, + 34473, + 15936, + 4508, + 122585, + 3561, + 98289, + 45413, + 15662, + 52400, + 11615, + 20065, + 7280, + 42195, + 107435, + 168080, + 198929, + 11755, + 7638, + 16892, + 446633, + 30762, + 185384, + 13045, + 164156, + 30588, + 245671, + 13820, + 19711, + 17315, + 157576, + 9674, + 7359, + 30690, + 89187, + 22381, + 43093, + 5860, + 82171, + 129241, + 24072, + 13230, + 5678, + 10964, + 10139, + 69243, + 20461, + 98923, + 92011, + 50400, + 12031, + 112322, + 97162, + 16723, + 71058, + 61488, + 228412, + 7164, + 4220, + 58329, + 13073, + 53442, + 95705, + 71833, + 9069, + 15216, + 175989, + 26616, + 104456, + 21910, + 34025, + 15469, + 8766, + 7803, + 19416, + 5269, + 57215, + 48670, + 18766, + 69153, + 50678, + 51947, + 17994, + 133078, + 74918, + 53378, + 45730, + 81787, + 298540, + 5484, + 78229, + 17164, + 51506, + 11468, + 40431, + 175847, + 6702, + 26999, + 98718, + 6036, + 63580, + 19576, + 4043, + 30880, + 97434, + 232422, + 15078, + 14628, + 202432, + 14746, + 114936, + 14750, + 22856, + 17220, + 55636, + 76005, + 122937, + 37837, + 123881, + 31038, + 41018, + 38947, + 30672, + 11945, + 9016, + 42743, + 20587, + 49183, + 10403, + 5100, + 11522, + 82603, + 10418, + 12408, + 11464, + 13695, + 8794, + 173140, + 186087, + 10651, + 28595, + 24618, + 22001, + 12998, + 15385, + 52276, + 27269, + 59067, + 76693, + 10710, + 17917, + 7332, + 19354, + 14129, + 13484, + 32415, + 76252, + 8000, + 37089, + 79308, + 123599, + 92090, + 12174, + 358788, + 223748, + 43165, + 35054, + 117901, + 58034, + 204297, + 38081, + 16736, + 27996, + 11217, + 29886, + 159016, + 46288, + 8582, + 172134, + 10964, + 30673, + 26042, + 139018, + 88785, + 89010, + 5162, + 27149, + 6501, + 79520, + 53222, + 9921, + 20500, + 79649, + 50834, + 19205, + 72084, + 3980, + 77397, + 101355, + 19014810, + 13409, + 7181, + 15664, + 148210, + 12630, + 52881, + 2810, + 87752, + 42224, + 50027, + 1963, + 13513, + 208753, + 3311, + 132394, + 4495, + 628304, + 39905, + 5066, + 275533, + 110138, + 15632, + 5395, + 4733, + 11987, + 10562, + 11704, + 55737, + 4271, + 4904, + 52709, + 104443, + 17917, + 69112, + 14454, + 30315, + 111832, + 9407, + 3656, + 192932, + 488584, + 10108, + 10484, + 159324, + 50323, + 23382, + 67417, + 181935, + 9419, + 175142, + 81699, + 5668, + 20247, + 274178, + 84854, + 363860, + 33070, + 17427, + 5322, + 85809, + 6104, + 530115, + 5721, + 48382, + 10137, + 13378, + 191248, + 32774, + 7046, + 17599, + 20266, + 43695, + 5486, + 13622, + 36153, + 24772, + 67130, + 187666, + 11761, + 104336, + 212373, + 87231, + 61495, + 68392, + 103918, + 8433, + 52902, + 76008, + 7313, + 33865, + 4156, + 40777, + 6362, + 405165, + 30374, + 130528, + 31191, + 81259, + 33804, + 12949, + 2363, + 28335, + 29924, + 165264, + 177877, + 36427, + 20669, + 13632, + 176556, + 175452, + 10662, + 233103, + 70208, + 314955, + 37561, + 11103, + 82694, + 26968, + 4590, + 47833, + 22806, + 8704, + 28391, + 4337, + 25181, + 55223, + 146133, + 147587, + 94770, + 6573, + 26432, + 19255, + 140472, + 12130, + 70030, + 89652, + 178216, + 42037, + 49682, + 24595, + 53060, + 29172, + 6501, + 1462, + 32059, + 195227, + 26501, + 204258, + 4542, + 15185, + 12538, + 60140, + 181675, + 8410, + 10045, + 20991, + 73160, + 3225, + 6938, + 110843, + 158937, + 43577, + 11213, + 13270, + 16866, + 337943, + 87251, + 34533, + 17828, + 12334, + 23587, + 82721, + 341931, + 30758, + 7674, + 30768, + 41869, + 5616, + 132004, + 12521, + 11897, + 50605, + 7493, + 14938, + 80552, + 9472, + 14894, + 24379, + 5015, + 92424, + 8949, + 26251, + 167219, + 32749, + 43772, + 21558, + 11229, + 197337, + 488796, + 19312, + 8500, + 183604, + 6336, + 7727, + 82460, + 33240, + 8883, + 65671, + 13768, + 16946, + 21499, + 13162, + 29375, + 65247, + 195087, + 128521, + 51102, + 37477, + 21822, + 176829, + 7356, + 30551, + 266182, + 2033, + 10536, + 266047, + 15308, + 8467, + 151113, + 40917, + 2860, + 18753, + 17705, + 10129, + 39954, + 15496, + 248297, + 121085, + 35257, + 3101923, + 39222, + 9605, + 40086, + 11122, + 33779, + 99833, + 183842, + 8041, + 9889, + 24552, + 58896, + 151492, + 91193, + 25255, + 5195, + 48903, + 52027, + 59719, + 54950, + 3486, + 85373, + 11251, + 10549, + 115473, + 47412, + 171613, + 6843, + 60149, + 147594, + 18408, + 16151, + 224126, + 136558, + 74799, + 97291, + 37776, + 68942, + 84040, + 14614, + 40809, + 76313, + 10585, + 117350, + 40608, + 33858, + 180628, + 88366, + 1552928, + 18822, + 19378, + 251076, + 112991, + 20236, + 21824, + 185155, + 8191, + 107660, + 116710, + 23884, + 188491, + 8796, + 8288, + 36320, + 65238, + 67937, + 1603829, + 29393, + 15119, + 39524, + 40343, + 12426, + 180933, + 99236, + 16949, + 272080, + 104697, + 19300, + 306569, + 18591, + 17130, + 24407, + 22266, + 73844, + 32982, + 14621, + 24140, + 12437, + 322869, + 55510, + 287109, + 7368, + 11904, + 53334, + 19918, + 32014, + 3217, + 17808, + 26763, + 6591, + 4391, + 5411, + 23950, + 24315, + 11125, + 120958, + 14622, + 60776, + 94355, + 18179, + 58013, + 30008, + 66255, + 239674, + 13054, + 52839, + 18707, + 181467, + 12905, + 40004, + 63743, + 60660, + 36395, + 2544, + 49788, + 38022, + 5277, + 93137, + 4215, + 11615, + 17992, + 5016, + 43341, + 48611, + 11191, + 175725, + 21230, + 64336, + 9404, + 4340, + 5203, + 5771, + 66449, + 176322, + 39973, + 9711, + 5124, + 41334, + 12191, + 26667, + 13146, + 32678, + 5926, + 39761, + 43284, + 53873, + 28413, + 1834, + 29371, + 535727, + 13588, + 35021, + 31244, + 6732, + 69280, + 49425, + 10669, + 414829, + 135701, + 6707, + 19652, + 3715, + 65911, + 4100, + 4537, + 118267, + 15036, + 187486, + 304881, + 79082, + 27602, + 95965, + 48479, + 49602, + 16752, + 12809, + 46730, + 23049, + 6107, + 201309, + 12407, + 3902, + 12420, + 47058, + 192396, + 10801, + 25788, + 9789, + 28360, + 4405, + 89079, + 23103, + 298526, + 223767, + 12263, + 40542, + 98155, + 33791, + 29819, + 15856, + 74094, + 10517, + 18853, + 29510, + 66769, + 246833, + 13865, + 9342, + 128407, + 85489, + 15432, + 181798, + 55311, + 55830, + 10904, + 35791, + 50689, + 304394, + 72357, + 2987, + 3642, + 5677, + 8231, + 179289, + 72781, + 57983, + 38299, + 35792, + 316991, + 121132, + 5352, + 62135, + 13927, + 47220, + 7699, + 9273, + 163949, + 107359, + 121298, + 269605, + 3670, + 8720, + 136034, + 198587, + 50976, + 6814, + 14238, + 921579, + 475167, + 45610, + 261495, + 69585, + 53397, + 160141, + 96809, + 202903, + 3525, + 133663, + 17979, + 5220, + 88380, + 29782, + 45489, + 84328, + 27019, + 32637, + 14266, + 43438, + 6700, + 25714, + 52802, + 84902, + 14439, + 78596, + 41446, + 23974, + 21931, + 8146, + 35434, + 54699, + 12334, + 133693, + 16211, + 85280, + 3516 + ] + }, + { + "counters": [ + 171676, + 22792, + 87648, + 13743, + 89486, + 43750, + 69908, + 50807, + 13321, + 6130, + 16772, + 77179, + 121301, + 6316, + 302756, + 66771, + 10858, + 38878, + 42372, + 14849, + 32965, + 59119, + 39723, + 186327, + 69959, + 207701, + 315909, + 77905, + 49412, + 329759, + 311750, + 164085, + 2399, + 68072, + 22723, + 21820, + 34794, + 41356, + 98102, + 7056, + 65776, + 4772, + 88150, + 29353, + 93480, + 38403, + 79688, + 16545, + 81421, + 10556, + 168212, + 11633, + 26028, + 10770, + 408595, + 25447, + 50057, + 20281, + 33329, + 7002, + 29294, + 7690, + 6518, + 4307, + 29428, + 30150, + 46274, + 30593, + 68658, + 13011, + 18976, + 14709, + 87523, + 2431, + 17493, + 62085, + 28639, + 6332, + 2887, + 10719, + 18701, + 269246, + 26521, + 2193, + 63642, + 9918, + 104506, + 178333, + 24752, + 26949, + 206295, + 55988, + 98419, + 4748, + 7587, + 5456, + 17802, + 179390, + 47123, + 15094, + 194195, + 156800, + 88865, + 8998, + 71289, + 74003, + 56262, + 48909, + 21204, + 61734, + 15400, + 63698, + 150117, + 53991, + 193893, + 6871, + 9819, + 13792, + 60783, + 17645, + 6257, + 87572, + 101182, + 36121, + 39458, + 237658, + 9877, + 6582, + 5361, + 33593, + 614219, + 47086, + 94608, + 31183, + 93045, + 65073, + 74012, + 24301, + 41546, + 21497, + 18396, + 195295, + 90341, + 20447, + 16163, + 22311, + 25123, + 114747, + 17201, + 19827, + 135074, + 24982, + 65678, + 32341, + 73773, + 27330, + 216467, + 167199, + 2334, + 66843, + 210587, + 60717, + 10331, + 34306, + 81907, + 76922, + 39000, + 10969, + 11872, + 5102, + 90960, + 20105, + 16474, + 9497, + 88455, + 22829, + 36530, + 18485, + 10698, + 16644, + 6890, + 2167, + 8956, + 4059, + 56700, + 38684, + 6611, + 18486, + 63178, + 24380, + 10592, + 207571, + 30781, + 12177, + 20571, + 31855, + 29665, + 13553, + 34862, + 5272759, + 53811, + 42751, + 61666, + 164194, + 93616, + 9382, + 86872, + 15728, + 118646, + 25360, + 61532, + 7851, + 338236, + 838966, + 17635, + 2863, + 34655, + 13212, + 13915, + 6587, + 3739, + 60633, + 137606, + 6770, + 9311, + 15133, + 42157, + 15246, + 8609, + 149371, + 22604, + 27718, + 21817, + 19432, + 29042, + 6526, + 29358, + 66237, + 108642, + 65344, + 7166, + 7058, + 9603, + 3574, + 46263, + 98059, + 1355, + 124694, + 73953, + 18860, + 6288, + 163249, + 5143, + 321217, + 61110, + 50153, + 49265, + 70619, + 109750, + 12048, + 3965, + 6027, + 177721, + 11534, + 2476, + 7529, + 7094, + 62459, + 32612, + 8695, + 8639, + 107383, + 46078, + 16504, + 293951, + 9645, + 21272, + 186172, + 18746, + 9398666, + 90765, + 173898, + 133538, + 10077, + 17934, + 35056, + 53368, + 40495, + 63800, + 13820, + 11499, + 18805, + 32802, + 3527, + 4831, + 13726, + 25204, + 120509, + 32205, + 3973, + 48819, + 17182, + 29879, + 70069, + 5650, + 92454, + 37210, + 15483, + 57739, + 2817, + 24523, + 27083, + 173729, + 95948, + 37657, + 38651, + 35137, + 28864, + 118176, + 28238, + 58129, + 13169, + 24139, + 422292, + 278985, + 3746, + 29586, + 21193, + 38485, + 45186, + 117226, + 81099, + 8561, + 19716, + 22761, + 255422, + 19559, + 13122, + 12163, + 59887, + 11263, + 70337, + 14700, + 15917, + 58188, + 280419, + 25273, + 21197, + 25324, + 49180, + 106425, + 85285, + 10438, + 79270, + 33006, + 46560, + 24945, + 191125, + 52799, + 136748, + 211046, + 4276, + 32346, + 16411, + 124203, + 18837, + 68576, + 148121, + 29986, + 146286, + 25823, + 34597, + 20953, + 26509, + 23165, + 212594, + 201080, + 11106, + 79226, + 34338, + 12384, + 14689, + 30463, + 19772, + 104094, + 51868, + 3458, + 14405, + 6049, + 38522, + 163889, + 169168, + 12684, + 8897, + 35910, + 173021, + 11525, + 84063, + 97942, + 31616, + 44945, + 9560, + 31821, + 26763, + 4286, + 18178, + 123260, + 19389, + 30895, + 87785, + 24318, + 31519, + 62434, + 11780, + 58500, + 3074, + 102230, + 92955, + 31609, + 52586, + 161467, + 91008, + 30732, + 121491, + 15790, + 24711, + 93113, + 94299, + 17941, + 206335, + 5781, + 38240, + 49176, + 19050, + 4494, + 516354, + 29082, + 13423, + 43248, + 95284, + 15287, + 120520, + 7928, + 195100, + 16258, + 8756, + 67399, + 5429, + 37948, + 51269, + 184507, + 341061, + 3700, + 4637, + 3931, + 27155, + 301323, + 69993, + 78894, + 107586, + 11282, + 9285, + 20638, + 124690, + 75136, + 302420, + 254757, + 125668, + 40095, + 11832, + 24451, + 71841, + 20748, + 218588, + 61326, + 17101, + 94772, + 14938, + 24228, + 501953, + 67844, + 10917, + 9930, + 330425, + 292268, + 4132, + 12187, + 44086, + 150209, + 171366, + 50434, + 10740, + 42541, + 5542, + 7742, + 44264, + 29309, + 65324, + 28484, + 19222, + 299318, + 187182, + 3706, + 30236, + 20402, + 4657, + 3224, + 5034, + 11410, + 338554, + 35441, + 47302, + 3175, + 30820, + 3231, + 6819, + 7740, + 235769, + 12770, + 15804, + 3763, + 6311, + 9824, + 139270, + 17751, + 83975, + 172542, + 16368, + 34418, + 40552, + 10227, + 23889, + 34238, + 276625, + 12414, + 13556, + 148266, + 61165, + 24380, + 8595, + 14073, + 18918, + 18970, + 75327, + 49877, + 20255, + 14530, + 63296, + 13435, + 282393, + 30511, + 28848, + 119641, + 19472, + 11383, + 9737, + 61643, + 17308, + 180031, + 16421, + 265246, + 8987, + 115213, + 56924, + 3915, + 20013, + 35057, + 34220, + 83809, + 6121, + 34218, + 31546, + 149725, + 36785, + 54637, + 19188, + 5783, + 106392, + 126785, + 51231, + 3867, + 13700, + 10307, + 182923, + 39249, + 233027, + 59460, + 15285, + 67179, + 161297, + 34837, + 10559, + 6159, + 139356, + 78588, + 8702, + 13951, + 2777, + 937, + 44655, + 14670, + 34168, + 152813, + 19963, + 1663, + 136895, + 16256, + 19492, + 12327, + 17940, + 44861, + 43014, + 38118, + 150018, + 3646, + 23140, + 47895, + 9299, + 21784, + 13580, + 401524, + 6098, + 58245, + 58432, + 780818, + 148242, + 16862, + 32157, + 6681, + 13701, + 272932, + 6693, + 311539, + 63023, + 5270, + 9860, + 2124277, + 70322, + 6944, + 115658, + 39308, + 34152, + 97867, + 56496, + 113318, + 5839, + 10297, + 90303, + 11440, + 3418, + 9661, + 34994, + 93110, + 8792, + 46909, + 60051, + 7494, + 18571, + 13662, + 68690, + 69350, + 39796, + 45874, + 88731, + 16480, + 5239, + 175085, + 18495, + 31395, + 13449, + 14601, + 1480, + 3560, + 293997, + 5738, + 186076, + 16852, + 16446, + 7833, + 240726, + 5774, + 144110, + 17019, + 37816, + 38283, + 6400, + 37685, + 40566, + 15542, + 18421, + 15967, + 62595, + 29636, + 77210, + 30670, + 17172, + 172552, + 44416, + 39473, + 42115, + 158564, + 6964, + 97780, + 56493, + 37413, + 21710, + 80583, + 464837, + 2373, + 149022, + 10492, + 30535, + 180041, + 5425, + 117426, + 112557, + 15742, + 114937, + 107414, + 32183, + 112956, + 3170, + 33643, + 94072, + 91268, + 51725, + 23973, + 16665, + 70496, + 426142, + 525153, + 43954, + 16286, + 4630, + 4529, + 30955, + 30483, + 43296, + 2656, + 97148, + 30683, + 26877, + 13574, + 45820, + 88756, + 77955, + 55986, + 11866, + 4536, + 92616, + 31536, + 49680, + 117699, + 26987, + 26246, + 29023, + 7825, + 159169, + 8561, + 10294, + 84549, + 27810, + 59262, + 29420, + 31000, + 193882, + 21986, + 20731, + 7283, + 11754, + 6232, + 122326, + 19522, + 171993, + 3339, + 7421, + 137598, + 93814, + 17947, + 47508, + 56913, + 65675, + 62919, + 2199, + 6169, + 41850, + 27885, + 27737, + 97434, + 20728, + 199990, + 33031, + 171290, + 25400, + 161257, + 42211, + 49431, + 1959, + 2224, + 85968, + 150834, + 8041, + 15551, + 32123, + 89625, + 14007, + 34522, + 278687, + 4841, + 123007, + 71510, + 22823, + 14957, + 63204, + 37589, + 17231, + 10824, + 32520, + 7315, + 39227, + 133545, + 82615, + 76310, + 25230, + 36095, + 91158, + 57463, + 12072, + 8149, + 1566, + 19202, + 22875, + 18971, + 1602, + 6858, + 10114, + 79751, + 120412, + 19924, + 7857, + 12720, + 173460, + 353645, + 22299, + 92496, + 60944, + 321639, + 22577, + 28055, + 87317, + 7304, + 312868, + 12028, + 4582, + 168982, + 54691, + 4668, + 17109, + 137451, + 11248, + 6475, + 10195, + 247591, + 104272, + 25255, + 36333, + 14213, + 42269, + 272231, + 34735, + 16026, + 55224, + 139066, + 42678, + 11506, + 76151, + 620564, + 58003, + 228616, + 10914, + 183619, + 16791, + 18504, + 17922, + 21940, + 17520, + 19969, + 13062, + 19123, + 82402, + 34578, + 9010, + 27542, + 37478, + 44105, + 72912, + 163766, + 2063, + 146823, + 341224, + 81688, + 4762, + 27977, + 16943, + 42318, + 40581, + 242795, + 11947, + 7094, + 95873, + 3441, + 24151, + 177375, + 16970, + 267353, + 19196, + 97438, + 51014, + 115975, + 31825, + 24689, + 8802, + 7253, + 16375, + 9269, + 7227, + 8678, + 94668, + 6645, + 7624, + 313429, + 52279, + 2169, + 38471, + 214166, + 120061, + 35654, + 26870, + 40387, + 587341, + 251904, + 13511, + 177480, + 1052319, + 42795, + 73178, + 3115628, + 86345, + 7923, + 21213, + 55689, + 20477, + 22509, + 44973, + 8419, + 20346, + 54037, + 63179, + 44399, + 150630, + 80776, + 19078, + 5185, + 13433, + 78898, + 23806, + 362645, + 109429, + 7715, + 18143, + 7286, + 15302, + 1597596, + 41261, + 62250, + 25595, + 4370, + 42668, + 19993, + 374361, + 5579, + 49664, + 16853, + 108397, + 176346, + 43320, + 6440, + 19776, + 20840, + 54136, + 48167, + 21642, + 4393, + 34868, + 166885, + 82233, + 184540, + 49830, + 25593, + 35643, + 14990, + 144859, + 79073, + 6755, + 82868, + 8973, + 73702, + 27793, + 27469, + 46277, + 73678, + 9731, + 48819, + 98199, + 43646, + 71652, + 3801, + 34874, + 77852, + 1675492, + 38149, + 26789, + 26453, + 119153, + 6592, + 32996, + 20024, + 2876, + 55554, + 97943, + 45057, + 29328, + 4590, + 55891, + 82467, + 44012, + 11493, + 58849, + 165887, + 99573, + 23849, + 112089, + 272206, + 64485, + 61291, + 15516, + 8447, + 15163, + 22670, + 14848, + 12542, + 141985, + 64510, + 68979, + 21335, + 12279, + 137909, + 313847, + 398711, + 7185, + 3832, + 222332, + 12315, + 11630, + 125383, + 259427, + 101747, + 5952, + 9552, + 37972, + 38962, + 665292, + 2894, + 7874, + 66011, + 17304, + 189962, + 67457, + 11617, + 104243, + 18757, + 34433, + 26014, + 73464, + 17642, + 10904, + 33603, + 22296, + 13376, + 11262, + 83812, + 100813, + 32692, + 28542, + 11332, + 15106, + 117066, + 104105, + 36310, + 76004, + 214153, + 76058, + 96804, + 145164, + 22901, + 26194, + 19742, + 29444, + 8024, + 33736, + 4142, + 4655, + 46051, + 34242, + 6169, + 1527, + 69050, + 3139, + 108020, + 34555, + 19745, + 165345, + 15585, + 106103, + 62968, + 15461, + 1408, + 3777, + 37230, + 61674, + 13970, + 36065, + 3622, + 11487, + 28996, + 239014, + 44527, + 86707, + 26505, + 211674, + 3363, + 62386, + 92286, + 38018, + 79436, + 13191, + 82287, + 12537, + 125784, + 43094, + 113468, + 13347, + 46821, + 148654, + 88905, + 17429, + 22260, + 41483, + 23665, + 10683, + 100867, + 113043, + 279936, + 13547, + 171719, + 22483, + 21369, + 30868, + 17834, + 11782, + 3382, + 102545, + 47450, + 71697, + 14629, + 122523, + 237893, + 10515, + 18142, + 94947, + 196027, + 13911, + 5432, + 92555, + 18949, + 51093, + 48920, + 2877, + 11953, + 25712, + 13557, + 28885, + 4797, + 36595, + 17616, + 166693, + 12836, + 6410, + 13578, + 82317, + 109736, + 51000, + 7212, + 38189, + 668477, + 10740, + 18892, + 9353, + 19241, + 60556, + 1788, + 9679, + 191901, + 5132, + 7428, + 183195, + 69908, + 152570, + 15914, + 137887, + 220257, + 27313, + 61238, + 15630, + 6262, + 19135, + 68219, + 9214, + 30555, + 248466, + 175614, + 8305, + 85772, + 14380, + 9444, + 24509, + 8473, + 29268, + 15922, + 5135, + 120874, + 17807, + 14640, + 322224, + 358748, + 41910, + 16951, + 38838, + 10417, + 95775, + 36377, + 9126, + 8043, + 2949, + 89538, + 26919, + 207090, + 40059, + 34674, + 368357, + 7599, + 8032, + 166495, + 2863, + 25199, + 8207, + 78393, + 223812, + 6325, + 64611, + 63319, + 34751, + 96099, + 43361, + 11125, + 4236, + 35343, + 153145, + 58998, + 37477, + 11847, + 60250, + 93492, + 34578, + 9482, + 29632, + 12544, + 144773, + 38652, + 2311, + 15925, + 24042, + 3199, + 33258, + 111915, + 75118, + 46734, + 31560, + 4304, + 263915, + 140533, + 26671, + 14637, + 45412, + 26784, + 73198, + 3692, + 4933, + 29266, + 86841, + 243731, + 86403, + 21510, + 28759, + 50409, + 189714, + 3740, + 76898, + 266220, + 15747, + 14446, + 25043, + 19005, + 47414, + 375912, + 287718, + 176859, + 58776, + 292963, + 29693, + 12510, + 17036, + 59398, + 128169, + 32878, + 16395, + 22816, + 10575, + 109479, + 56746, + 15547, + 201052, + 34942, + 134951, + 63159, + 8558, + 4729, + 165589, + 5302, + 66674, + 243235, + 144194, + 4282, + 5269, + 56485, + 5321, + 52043, + 86674, + 104740, + 40371, + 71081, + 49584, + 37496, + 25505, + 8417, + 15917, + 48737, + 117026, + 25062, + 168554, + 28704, + 15577, + 24330, + 31599, + 10648, + 19638, + 83091, + 46685, + 18965779, + 406826, + 6282, + 3962, + 29707, + 24016, + 137907, + 12506, + 19288, + 2521, + 167171, + 23564, + 16924, + 5098, + 19732, + 121384, + 19362, + 75086, + 201760, + 19733, + 22610, + 5302, + 125411, + 6781, + 1891932, + 20757, + 63485, + 19498, + 61680, + 25143, + 33121, + 2224, + 324278, + 145214, + 23624, + 129404, + 10568, + 22358, + 1544, + 88004, + 57789, + 37765, + 34192, + 189053, + 32942, + 98394, + 85508, + 34468, + 11025, + 51186, + 42738, + 41765, + 16618, + 570960, + 72711, + 73229, + 89487, + 81965, + 4194, + 52697, + 5280, + 346383, + 33375, + 18249, + 8177, + 313255, + 69270, + 33320, + 17312, + 61543, + 9171, + 22969, + 17024, + 14901, + 16217, + 21757, + 239896, + 56836, + 57076, + 62013, + 56116, + 7218, + 53192, + 13082, + 8059, + 105184, + 106033, + 16384, + 19495, + 316779, + 516600, + 123749, + 47530, + 72139, + 8420, + 37851, + 3658, + 31363, + 204826, + 21040, + 119438, + 153843, + 202969, + 5458, + 21632, + 359510, + 282056, + 3000, + 8306, + 66805, + 50799, + 5121, + 1629957, + 3002, + 31034, + 3110, + 42359, + 43529, + 28800, + 10369, + 89206, + 24422, + 312740, + 95697, + 8773, + 5056, + 11154, + 242543, + 132212, + 24076, + 57436, + 34103, + 268946, + 40124, + 2375, + 250136, + 8139, + 18719, + 24055, + 37586, + 133692, + 39245, + 92932, + 16084, + 97471, + 185288, + 51617, + 12536, + 9312, + 54035, + 48184, + 8297, + 6537, + 18450, + 21273, + 44668, + 32418, + 33997, + 35939, + 31695, + 67013, + 159431, + 25064, + 13450, + 9051, + 10865, + 50219, + 3645, + 17614, + 8538, + 28021, + 7893, + 38358, + 60832, + 161809, + 4825, + 9751, + 34137, + 17147, + 49232, + 114289, + 2311, + 14218, + 34054, + 27229, + 7547, + 8339, + 26100, + 30108, + 34899, + 453240, + 63485, + 5008, + 15683, + 420978, + 93234, + 10868, + 14285, + 131752, + 4904, + 3354, + 58439, + 42776, + 54651, + 90165, + 21031, + 26249, + 47786, + 53410, + 12119, + 8223, + 25399, + 273583, + 55486, + 18575, + 3921, + 71263, + 62822, + 18766, + 18054, + 14400, + 22814, + 31800, + 5965, + 111587, + 110405, + 122174, + 5064, + 179392, + 68705, + 89060, + 117610, + 47182, + 14378, + 95156, + 32742, + 543806, + 12299, + 127705, + 78920, + 49509, + 86942, + 8245, + 35652, + 48675, + 164365, + 40507, + 3964, + 29680, + 22470, + 12546, + 15914, + 7663, + 100724, + 14840, + 4788, + 29845, + 28248, + 73326, + 48158, + 241578, + 27507, + 213428, + 15201, + 421804, + 54806, + 211618, + 4718, + 64986, + 196764, + 22910, + 8548, + 80300, + 27851, + 13198, + 19793, + 165092, + 10392, + 27854, + 15976, + 10800, + 13195, + 94519, + 14289, + 47503, + 45992, + 18144, + 143886, + 87733, + 50861, + 1806997, + 24113, + 67320, + 3482, + 15567, + 71132, + 69628, + 3301197, + 205460, + 9507, + 17998, + 14679, + 64644, + 171902, + 11338, + 10893, + 38145, + 38933, + 2278, + 23713, + 13700, + 24927, + 93286, + 29130, + 44984, + 22950, + 537552, + 56108, + 15372, + 12491, + 42269, + 331773, + 4747, + 8601, + 50659, + 33118, + 3465, + 558138, + 267436, + 232037, + 6473, + 22700, + 47457, + 999328, + 31656, + 14342, + 5900, + 8490, + 156782, + 14043, + 12166, + 26491, + 15985, + 252870, + 433581, + 68573, + 70531, + 4821, + 59430, + 35647, + 328757, + 177502, + 65335, + 8581, + 87390, + 69541, + 21990, + 30627, + 8684, + 33218, + 42247, + 23515, + 34456, + 41454, + 5178, + 4760, + 108803, + 21902, + 188029, + 128333, + 90758, + 35921, + 396158, + 59765, + 11858, + 51231, + 318096, + 21353, + 83287, + 12410, + 31159, + 31745, + 5671, + 20299, + 1562560, + 5887, + 28057, + 38548, + 29696, + 8662, + 11542, + 30300, + 32397, + 104062, + 33650, + 12249, + 22975, + 155994, + 110078, + 19403, + 29300, + 12223, + 2388, + 3285, + 223823, + 168593, + 196358, + 50064, + 29368, + 71999, + 35264, + 303237, + 166508, + 74475, + 87042, + 43698, + 48953, + 38920, + 75568, + 62669, + 8612, + 15862, + 74770, + 12930, + 18631, + 23877, + 16986, + 76674, + 66604, + 12892, + 7409, + 78236, + 49976, + 93818, + 3701, + 6496, + 9505, + 413638, + 20158, + 8758, + 9576, + 3040, + 8299, + 39262, + 212592, + 21191, + 10515, + 29966, + 39521, + 139364, + 153416, + 481229, + 12026, + 8142, + 4576, + 19572, + 20449, + 13556, + 77598, + 16143, + 7478, + 18283, + 17282, + 161844, + 7595, + 77069, + 178072, + 10410, + 124111, + 7186, + 91726, + 34547, + 39394, + 111772, + 3124, + 4452, + 80636, + 10366, + 244910, + 44657, + 17173, + 20484, + 85733, + 86687, + 10741, + 106672, + 266677, + 9161, + 7383, + 24105, + 273754, + 27038, + 20073, + 47326, + 22272, + 13851, + 12829, + 11136, + 315816, + 40372, + 2117, + 133563, + 3091, + 284429, + 39887, + 105804, + 36000, + 32467, + 79114, + 21123, + 178307, + 4957, + 219842, + 34252, + 5526, + 55373, + 21893, + 133603, + 106827, + 17190, + 49555, + 53850, + 80497, + 84401, + 94692, + 168576, + 3128, + 21254, + 34962, + 219856, + 58145, + 20119, + 11951, + 24015, + 31188, + 136808, + 104983, + 39763, + 19836, + 41669, + 31519, + 31949, + 11408, + 4769, + 35430, + 45149, + 25973, + 193235, + 29931, + 8760, + 52401, + 24755, + 32400, + 105748, + 22810, + 107143, + 26249, + 18425, + 158500, + 236749, + 19068, + 105938, + 61485, + 6386, + 63833, + 20634, + 70919, + 50926, + 11089, + 15577, + 5088, + 175545, + 28905, + 414337, + 81893, + 11005, + 176532, + 21144, + 21892, + 18693, + 4037, + 76951, + 3697, + 15199, + 2005, + 19817, + 29233, + 38591, + 208386, + 5617, + 37985, + 32427, + 122265, + 20525, + 6262, + 24966, + 172183, + 45722, + 82194, + 100506, + 23815, + 2587, + 15992, + 259206, + 40030, + 61636, + 122509, + 2385, + 21052, + 6776, + 31182, + 182464, + 22915, + 10367, + 31790, + 12112, + 24252, + 9422, + 3761, + 6462, + 42586, + 7449, + 50106, + 13319, + 17193, + 5488, + 9246, + 34263, + 67683, + 4957, + 2806, + 164623, + 8606, + 22416, + 240510, + 4946, + 347406, + 73612, + 6614, + 150866, + 52197, + 39257, + 3793, + 31097, + 55155, + 23305, + 31264, + 55026, + 78334, + 18372, + 190963, + 16562, + 10404, + 1058685, + 19988, + 49021, + 1266197, + 7897, + 6723, + 74591, + 17415, + 4444, + 37547, + 16925, + 2655, + 270842, + 36691, + 295174, + 25589, + 40239 + ] + }, + { + "counters": [ + 122612, + 18880, + 29506, + 59433, + 8643, + 16020, + 6640, + 74098, + 31902, + 54940, + 6605, + 7239, + 5424, + 14429, + 60099, + 37643, + 10367, + 92848, + 10863, + 105985, + 18357, + 3468, + 15005, + 16067, + 5162, + 17547, + 178251, + 26608, + 53718, + 21802, + 96444, + 188714, + 78158, + 60970, + 73326, + 9699, + 76672, + 62811, + 18164, + 61156, + 14883, + 16633, + 32134, + 43195, + 175705, + 18164, + 104791, + 119220, + 113053, + 12682, + 60135, + 103548, + 5327, + 9288, + 3995, + 59281, + 2627, + 287035, + 93431, + 25091, + 6159, + 6980, + 16240, + 38357, + 34430, + 23712, + 82978, + 29597, + 168747, + 44784, + 20080, + 8879, + 10904, + 7758, + 161487, + 17548, + 10462, + 39690, + 263677, + 12294, + 169416, + 11946, + 59242, + 34829, + 140947, + 8838, + 114350, + 283600, + 8823, + 33810, + 46980, + 159590, + 150375, + 32555, + 84646, + 24152, + 5504, + 11442, + 141537, + 14352, + 5083, + 2025, + 83375, + 50350, + 36283, + 25572, + 22519, + 274371, + 103544, + 16853, + 7836, + 9038, + 23175, + 87901, + 63669, + 401920, + 32447, + 5722, + 479881, + 83107, + 6615, + 226636, + 50907, + 27635, + 46861, + 31684, + 41111, + 30427, + 65451, + 69305, + 28018, + 29145, + 44100, + 14807, + 40809, + 59704, + 109771, + 146500, + 121061, + 3203947, + 3731, + 26773, + 146389, + 95675, + 1075, + 132838, + 40028, + 2924, + 8434, + 114447, + 8647, + 108878, + 83891, + 20097, + 7332, + 465200, + 22198, + 9262, + 17503, + 172176, + 54621, + 25566, + 150293, + 71178, + 24003, + 206445, + 57070, + 13721, + 52439, + 19728, + 66358, + 40561, + 486855, + 29434, + 283266, + 47236, + 107515, + 38061, + 77968, + 8029, + 3173, + 23856, + 66954, + 27670, + 23015, + 93368, + 35657, + 10182, + 58856, + 8922, + 19522, + 279699, + 7718, + 52659, + 12667, + 152351, + 3353, + 61012, + 127494, + 17729, + 94121, + 100504, + 19538, + 63281, + 12088, + 82454, + 61767, + 9033, + 24230, + 33699, + 388874, + 9110, + 27745, + 27009, + 32453, + 22560, + 12545, + 19849, + 41750, + 1601375, + 19252, + 10006, + 232765, + 38646, + 17380, + 20198, + 23865, + 68824, + 18208, + 12758, + 14305, + 76580, + 70003, + 37677, + 48441, + 52759, + 42287, + 20466, + 397500, + 73127, + 9027, + 9577, + 34941, + 11116, + 21346, + 14981, + 18608, + 35335, + 236219, + 2333, + 14015, + 2507, + 40994, + 2570, + 24974, + 6440, + 6505, + 185535, + 22819, + 247774, + 3415, + 24523, + 118667, + 55211, + 415026, + 50488, + 8304, + 63743, + 6094, + 110187, + 6955, + 39648, + 13090, + 40459, + 128033, + 61337, + 55741, + 20471, + 42480, + 5148, + 3856, + 113029, + 8111, + 120310, + 7746, + 42733, + 408769, + 8023, + 2118, + 108445, + 135034, + 182879, + 8574, + 36069, + 8881, + 12457, + 58556, + 9772, + 8062, + 58604, + 55471, + 8014, + 184121, + 14654, + 16501, + 3296, + 203953, + 67299, + 62735, + 75619, + 33505, + 17442, + 22246, + 3520, + 79975, + 27163, + 19741, + 147759, + 10916, + 29789, + 531685, + 12169, + 121528, + 31900, + 2569, + 66159, + 28983, + 46908, + 1315, + 42743, + 4379, + 9547, + 10015, + 4651, + 69300, + 90864, + 406310, + 13558, + 27477, + 104042, + 13499, + 19725, + 54192, + 216465, + 11372, + 86947, + 32838, + 4667, + 32419, + 64487, + 25499, + 114730, + 3764, + 5500, + 18833, + 52148, + 47197, + 9131, + 59094, + 34731, + 22711, + 28075, + 37726, + 42117, + 22374, + 40111, + 14981, + 89643, + 12533, + 15064, + 4680, + 182962, + 215589, + 68705, + 38579, + 43203, + 15580, + 90902, + 19465, + 18300, + 5607, + 154777, + 52681, + 8513, + 13765, + 18744, + 88700, + 85726, + 26138, + 14341, + 65094, + 3917, + 41402, + 3395, + 121381, + 8100, + 59006, + 3116200, + 85669, + 14262, + 302602, + 330622, + 23390, + 10882, + 7344, + 49536, + 60293, + 70899, + 57309, + 6627, + 20096, + 11736, + 112995, + 166220, + 33205, + 4580, + 76135, + 2158, + 9003, + 218146, + 35774, + 23947, + 11139, + 15349, + 179785, + 148071, + 708886, + 8654, + 71112, + 260423, + 79213, + 115728, + 56533, + 60172, + 3359, + 13136, + 5512, + 10382, + 41896, + 8389, + 126557, + 79802, + 20227, + 9325, + 60440, + 9957, + 27115, + 18274, + 36574, + 3780, + 346216, + 54473, + 28408, + 36117, + 94303, + 41325, + 71851, + 18278, + 6971, + 19029, + 9682, + 192000, + 64700, + 3142, + 54792, + 25732, + 6789, + 22100, + 28808, + 105350, + 280474, + 34377, + 5658, + 24268, + 22225, + 149135, + 2546, + 15771, + 43365, + 79905, + 9123, + 321071, + 14602, + 5268, + 24950, + 1654, + 65801, + 33393, + 18470, + 213804, + 136457, + 84562, + 22033, + 197085, + 114795, + 120117, + 106036, + 9403, + 70584, + 32437, + 61592, + 4277, + 6143, + 271682, + 15196, + 9239, + 89479, + 38255, + 26635, + 43236, + 107001, + 246253, + 13724, + 5549, + 65410, + 40526, + 8541, + 101046, + 10739, + 10444, + 209091, + 20938, + 20632, + 221928, + 78453, + 11413, + 12379, + 15568, + 348767, + 24946, + 14870, + 73546, + 34587, + 25331, + 12187, + 92566, + 56082, + 11946, + 5437, + 42401, + 23415, + 3621215, + 22385, + 11998, + 21962, + 96674, + 641915, + 6925, + 223775, + 11931, + 25005, + 14559, + 60097, + 82702, + 2995, + 19464, + 16617, + 13257, + 7406, + 7505, + 270568, + 119805, + 23393, + 64339, + 111556, + 18664, + 245306, + 7047, + 176278, + 43464, + 90091, + 9265, + 83769, + 182104, + 64771, + 20133, + 5600, + 64897, + 135565, + 19986, + 180783, + 92321, + 18304, + 6365, + 54475, + 77430, + 12828, + 12612, + 40208, + 14137, + 953452, + 4720, + 31836, + 39002, + 475685, + 4051, + 73722, + 57240, + 29100, + 7402, + 12063, + 34200, + 431373, + 103999, + 21228, + 41013, + 193776, + 21090, + 31253, + 10278, + 63039, + 50529, + 29371, + 11333, + 162835, + 7605, + 8877, + 30410, + 4056, + 173720, + 1894, + 29962, + 32730, + 37212, + 5781, + 139116, + 84033, + 83044, + 80023, + 18885, + 199272, + 87865, + 25433, + 59149, + 8529, + 34699, + 37901, + 213278, + 14327, + 13904, + 8757, + 25841, + 208342, + 2692, + 48211, + 136637, + 6171, + 46433, + 95067, + 14409, + 249459, + 24690, + 112500, + 15779, + 132637, + 15322, + 12828, + 80545, + 33543, + 11340, + 28499, + 67259, + 52807, + 19551, + 71588, + 3965, + 78845, + 14272, + 85914, + 247946, + 10477, + 10458, + 13696, + 35241, + 33700, + 1554, + 14895, + 257456, + 32547, + 19990, + 267662, + 165333, + 94432, + 16076, + 171485, + 38461, + 49511, + 1559375, + 48467, + 9423, + 29089, + 22477, + 45692, + 12434, + 30728, + 64091, + 19016, + 9580, + 19017, + 150198, + 2726, + 66633, + 57501, + 57865, + 12771, + 308702, + 16713, + 163692, + 36548, + 237792, + 11028, + 251771, + 136121, + 94877, + 2499, + 2856, + 268573, + 13600, + 4859, + 58122, + 16869, + 105341, + 116702, + 6334, + 12418, + 9759, + 374428, + 14775, + 245297, + 99261, + 5986, + 25576, + 91392, + 29126, + 35115, + 34250, + 96172, + 55834, + 48447, + 173333, + 3598, + 122480, + 15381, + 285397, + 4085, + 25250, + 48671, + 270664, + 8789, + 11533, + 116277, + 21055, + 62331, + 11145, + 9373, + 11020, + 14977, + 38185, + 56351, + 78878, + 17050, + 58482, + 19900, + 5417, + 43222, + 15837, + 44359, + 88964, + 51964, + 54069, + 9839, + 143185, + 48583, + 9583, + 27453, + 561706, + 35555, + 121674, + 47254, + 10125, + 8674, + 10118, + 72670, + 54562, + 10592, + 10419, + 57044, + 17960, + 22920, + 10313, + 41440, + 291694, + 28808, + 10359, + 51578, + 2804, + 9460, + 22631, + 49456, + 10102, + 170281, + 5862, + 187718, + 186310, + 18012, + 10438, + 588761, + 188970, + 27864, + 12058, + 3920, + 1212591, + 34740, + 33219, + 55575, + 11363, + 18293, + 49101, + 5604, + 14992, + 9925, + 19102, + 79856, + 540221, + 105633, + 60466, + 9363, + 19484, + 30527, + 35179, + 27574, + 27313, + 3939, + 52210, + 70952, + 21801, + 2102, + 104819, + 93874, + 64626, + 94049, + 24793, + 163912, + 58976, + 33620, + 25224, + 104309, + 9713, + 28246, + 410611, + 29759, + 54462, + 168402, + 10841, + 32518, + 1436, + 203904, + 8638, + 363445, + 183911, + 9026, + 90166, + 136117, + 19626, + 6933, + 116863, + 52495, + 132305, + 266517, + 445025, + 42103, + 13034, + 14959, + 5218, + 24454, + 17703, + 22446, + 44874, + 23053, + 34770, + 25446, + 22623, + 115431, + 7311, + 23038, + 40051, + 39067, + 12507, + 19481, + 302221, + 46217, + 12441, + 153908, + 116292, + 38650, + 56245, + 10444, + 49041, + 113183, + 25580, + 16146, + 52860, + 6881, + 131002, + 39039, + 112347, + 68674, + 24796, + 73992, + 47789, + 13467, + 127655, + 8443, + 67131, + 12837, + 20132, + 97260, + 90766, + 191305, + 18262, + 87726, + 32593, + 84862, + 5903, + 200854, + 17147, + 2657, + 9961, + 38592, + 2572, + 86476, + 36042, + 8031, + 11927, + 98516, + 12885, + 15437, + 20673, + 96501, + 23880, + 363073, + 111802, + 43425, + 39870, + 41052, + 196812, + 52373, + 12777, + 195321, + 84692, + 107459, + 43472, + 16588, + 5527, + 36217, + 112167, + 93594, + 47485, + 205601, + 25680, + 6242, + 108556, + 20339, + 41977, + 30167, + 103932, + 36780, + 143429, + 58831, + 5759, + 121511, + 6328, + 155069, + 28482, + 53295, + 100406, + 36261, + 13364, + 20509, + 33001, + 10898, + 119482, + 6686, + 22244, + 15080, + 12465, + 18477, + 84949, + 53723, + 45592, + 16961, + 89347, + 34714, + 30155, + 44772, + 61252, + 40666, + 25013, + 10762, + 107979, + 14946, + 13657, + 3143, + 8941, + 6458, + 20432, + 27832, + 70681, + 42357, + 87564, + 42959, + 38634, + 4258, + 11723, + 251757, + 12545, + 2361, + 16944, + 31491, + 1555, + 36382, + 10023, + 17169, + 63981, + 23331, + 131807, + 7583, + 204912, + 6830, + 20198, + 89198, + 44656, + 168171, + 100559, + 4794, + 4542, + 66401, + 3048, + 153703, + 59640, + 98576, + 20409, + 45224, + 11467, + 35389, + 12257, + 24311, + 167573, + 10673, + 97050, + 39530, + 4053, + 150101, + 24378, + 375807, + 261954, + 14274, + 77526, + 204282, + 8618, + 12086, + 21030, + 43555, + 25032, + 139843, + 3179, + 3585, + 120930, + 5575, + 8074, + 9567, + 62902, + 1281008, + 16827, + 38542, + 51319, + 26345, + 56800, + 51386, + 7244, + 23868, + 89673, + 1836, + 8358, + 12093, + 100889, + 8149, + 44682, + 47127, + 106377, + 87849, + 218640, + 5239, + 97171, + 5119, + 19608, + 33430, + 60081, + 9907, + 194911, + 17160, + 49498, + 4078, + 19478, + 105181, + 324807, + 175968, + 27070, + 7268, + 338228, + 25843, + 5050, + 60794, + 73959, + 179057, + 3992, + 10655, + 15595, + 71685, + 1280, + 73530, + 7535, + 32855, + 70835, + 216212, + 97756, + 12983, + 199825, + 74517, + 40753, + 8702, + 363934, + 74333, + 61395, + 138897, + 9061, + 129669, + 38747, + 13776, + 5869, + 43819, + 133764, + 77524, + 278003, + 328120, + 124848, + 139589, + 118675, + 23359, + 115661, + 45238, + 50975, + 34812, + 8043, + 83862, + 11586, + 184737, + 7930, + 63792, + 74253, + 10693, + 377831, + 11194, + 237386, + 11466, + 10681, + 12709, + 43646, + 3461, + 129052, + 7151, + 8880, + 20239, + 18254, + 90697, + 13458, + 23212, + 55915, + 10396, + 1600172, + 41355, + 160512, + 68082, + 62715, + 82262, + 3093, + 10856, + 132897, + 137103, + 10063, + 12216, + 293997, + 823707, + 4749, + 24807, + 4011, + 9174, + 12466, + 36762, + 61032, + 34623, + 27867, + 6004, + 31455, + 45583, + 22351, + 43881, + 5480, + 268096, + 13918, + 140442, + 1953, + 173244, + 3895, + 49179, + 11312, + 25872, + 27600, + 297154, + 97655, + 135823, + 11367, + 45304, + 605586, + 8010, + 6455, + 23617, + 4344, + 8516, + 37220, + 1068558, + 264573, + 46230, + 11562, + 5593, + 17482, + 25240, + 10800, + 3941, + 14374, + 140864, + 82450, + 160952, + 18983522, + 5681, + 17408, + 63157, + 9905, + 137811, + 9978, + 113600, + 89567, + 289355, + 74021, + 23796, + 28517, + 56466, + 160293, + 28636, + 22699, + 21494, + 10850, + 61816, + 259221, + 28042, + 19678, + 30896, + 17477, + 4817, + 8156, + 282880, + 116568, + 72613, + 25215, + 90889, + 68498, + 10942, + 3145, + 104683, + 18739, + 205911, + 1387, + 14376, + 9388, + 170022, + 9567, + 823643, + 79741, + 334331, + 208841, + 17012, + 306902, + 7968, + 26815, + 25222, + 15295, + 15728, + 2732, + 205965, + 10818, + 118120, + 54041, + 20440, + 75632, + 5823, + 26754, + 20514, + 24406, + 139635, + 54279, + 13810, + 23673, + 22867, + 44147, + 20148, + 19292, + 21622, + 131334, + 41067, + 13778, + 14314, + 26656, + 133296, + 67351, + 7733, + 8449, + 21244, + 22456, + 28992, + 12947, + 298611, + 13146, + 11420, + 25445, + 49927, + 20021, + 280820, + 128330, + 43998, + 57459, + 7418, + 6781, + 15781, + 4487, + 2643, + 76032, + 26594, + 16210, + 12452, + 115645, + 99306, + 12817, + 1622, + 10113, + 29443, + 6032, + 32037, + 40161, + 149175, + 7404, + 55930, + 93801, + 60967, + 28327, + 112273, + 33131, + 170497, + 7290, + 82161, + 223404, + 12524, + 92511, + 25808, + 129305, + 195741, + 3823, + 21187, + 10031, + 87498, + 32698, + 11189, + 24752, + 313448, + 26251, + 4345, + 17102, + 38344, + 73327, + 165788, + 84069, + 17386, + 14362, + 33945, + 104463, + 289704, + 15585, + 34417, + 4908, + 66819, + 74432, + 38037, + 99002, + 55919, + 6857, + 5506, + 105459, + 12175, + 12180, + 3292, + 314545, + 6840, + 19290, + 6136, + 6190, + 23374, + 4529, + 45454, + 164239, + 166209, + 5740, + 62078, + 35149, + 51519, + 14094, + 41868, + 6757, + 37482, + 8092, + 158747, + 9633, + 285109, + 20839, + 201017, + 23501, + 37953, + 72111, + 107775, + 23849, + 22049, + 26483, + 17329, + 366638, + 16826, + 12600, + 271371, + 36491, + 3039, + 5448, + 6902, + 23982, + 14068, + 17658, + 78531, + 7124, + 4852, + 8286, + 267584, + 28723, + 29023, + 4429, + 28863, + 39799, + 17579, + 109026, + 53552, + 72110, + 23782, + 30791, + 54684, + 66024, + 52624, + 31102, + 57284, + 370054, + 28848, + 64876, + 16097, + 37106, + 123984, + 160927, + 40818, + 10205, + 94681, + 51150, + 12364, + 223502, + 12114, + 9548, + 32119, + 14518, + 148727, + 5484626, + 17613, + 2867, + 124945, + 249042, + 2848, + 481400, + 4805, + 9513124, + 4307, + 100567, + 13195, + 8214, + 33483, + 258319, + 654348, + 163951, + 17584, + 14790, + 32702, + 72653, + 30133, + 39614, + 80772, + 6448, + 11439, + 11946, + 176132, + 18939, + 2621, + 2228, + 83859, + 44267, + 13828, + 13570, + 62044, + 28964, + 161328, + 22813, + 49736, + 4551, + 19769, + 53535, + 5723, + 21712, + 125485, + 464006, + 28585, + 15571, + 2256, + 9801, + 10165, + 9383, + 101948, + 51805, + 28128, + 15032, + 49304, + 303287, + 133375, + 44428, + 8365, + 33748, + 42565, + 32107, + 55554, + 116022, + 17777, + 32975, + 12473, + 23175, + 21459, + 10060, + 27699, + 275211, + 35609, + 12181, + 39036, + 26768, + 53847, + 9590, + 165389, + 215868, + 10831, + 50905, + 50148, + 141117, + 13546, + 7294, + 83206, + 89189, + 58362, + 34623, + 192933, + 5500, + 80069, + 53002, + 19349, + 36121, + 14958, + 16752, + 169187, + 12344, + 23571, + 53105, + 285893, + 229116, + 36588, + 30668, + 18083, + 59175, + 19210, + 175897, + 13565, + 42531, + 22896, + 64446, + 66259, + 15894, + 60652, + 6279, + 16123, + 44384, + 35634, + 8185, + 7387, + 54874, + 6738, + 20492, + 120949, + 75191, + 153080, + 1471, + 8701, + 7056, + 24154, + 42235, + 86840, + 29947, + 93298, + 46415, + 13773, + 1873379, + 22527, + 31164, + 17954, + 110024, + 131012, + 25328, + 45244, + 11846, + 221552, + 123467, + 21414, + 24599, + 12808, + 91788, + 5992, + 56898, + 68287, + 197910, + 298563, + 18444, + 54936, + 48922, + 80547, + 5149, + 109873, + 27792, + 49896, + 107696, + 6492, + 189472, + 114713, + 23074, + 143937, + 15811, + 59488, + 37504, + 64261, + 150599, + 5496, + 35987, + 340881, + 16602, + 45201, + 42219, + 35762, + 247709, + 175028, + 27701, + 11147, + 233161, + 11266, + 61308, + 42871, + 187325, + 6164, + 11193, + 168275, + 32262, + 61700, + 255819, + 4264, + 9751, + 46687, + 52113, + 13419, + 30808, + 64091, + 7497, + 196974, + 10033, + 55984, + 41875, + 39592, + 47596, + 23326, + 35487, + 29630, + 120803, + 55481, + 6757, + 52453, + 55125, + 11385, + 4411, + 22972, + 39838, + 534219, + 36731, + 18935, + 6033, + 14325, + 189776, + 135283, + 81530, + 50662, + 58168, + 73745, + 8659, + 76831, + 1289152, + 16421, + 56394, + 90913, + 166612, + 27040, + 130189, + 138037, + 156540, + 8206, + 10592, + 62296, + 42057, + 265794, + 11594, + 7819, + 192310, + 38521, + 122104, + 1671, + 87568, + 75819, + 98738, + 9490, + 26038, + 5340, + 41045, + 17540, + 14476, + 75105, + 176789, + 3095, + 1847, + 1505, + 3371, + 3348, + 248991, + 5841, + 31530, + 9638, + 19799, + 57788, + 134317, + 26873, + 5158, + 8427, + 166702, + 25048, + 20318, + 89420, + 11632, + 101949, + 51751, + 17990, + 11110, + 6448, + 11234, + 13948, + 349243, + 80081, + 32451, + 22119, + 186945, + 9280, + 22863, + 10871, + 4270, + 17663, + 4308, + 453658, + 3869, + 7925, + 22780, + 159418, + 28161, + 43929, + 8617, + 97208, + 34369, + 48232, + 237260, + 2361, + 41706, + 11580, + 207491, + 44591, + 127367, + 6304, + 86696, + 64315, + 116248, + 161545, + 238749, + 72355, + 24565, + 60189, + 14607, + 77233, + 162917, + 25147, + 11614, + 91464, + 230502, + 12159, + 90721, + 63212, + 17740, + 144833, + 8223, + 106611, + 43187, + 106869, + 75520, + 11207, + 47401, + 14388, + 9156, + 44416, + 4061, + 121497, + 70382, + 189301, + 5193, + 29968, + 6545, + 163871, + 13728, + 11132, + 121484, + 25964, + 28690, + 8646, + 20197, + 39282, + 41560, + 31551, + 103692, + 143912, + 2827, + 17109, + 25943, + 4850, + 9703, + 16646, + 274044, + 114864, + 15302, + 150482, + 4727, + 74349, + 17992, + 45744, + 74669, + 3282, + 117995, + 51144, + 12756, + 8580, + 38261, + 45047, + 47190, + 27696, + 16500, + 35744, + 107087, + 115341, + 19429, + 27528, + 10366, + 10955, + 43179, + 37822, + 70139, + 7401, + 24829, + 532690, + 103559, + 8469, + 25465, + 7462, + 15427, + 10214, + 11835, + 11461, + 62742, + 20694, + 66664, + 52174, + 7012, + 65309, + 24286, + 6902, + 6731, + 151239, + 2887, + 167767, + 18382, + 9962, + 129167, + 4931, + 11947, + 11567, + 132907, + 86078, + 739154, + 21865, + 75813, + 92296, + 58590, + 20285, + 17885, + 49254, + 190140, + 20887, + 21611, + 30361, + 69129, + 80054, + 28521, + 4022, + 121789, + 305364, + 148071, + 61497, + 28331, + 2603, + 41911, + 59713, + 59232, + 94857, + 41218, + 16428, + 34538, + 29194, + 15345, + 60089, + 8219, + 306183, + 15102, + 35006, + 26752, + 74425, + 30101, + 6078, + 173161, + 68919, + 13958, + 164266, + 4307, + 63527, + 15745, + 90155, + 64034, + 12328, + 73214, + 8466, + 8126, + 17182, + 95276, + 37983, + 210350, + 22501, + 31972, + 78395, + 34021, + 72710, + 2425, + 17946, + 22998, + 88301, + 29756, + 15780, + 78123, + 14620, + 5716, + 3629, + 15455, + 34292, + 11556, + 1861, + 56462, + 35267, + 146414, + 72313, + 113722, + 79031, + 8426, + 49295, + 12308, + 24671, + 39006, + 31699, + 17363, + 10162, + 91904, + 46428, + 598398, + 13537, + 177515, + 65232, + 27412, + 9896, + 14436, + 45446, + 22471, + 15355, + 10503, + 49388, + 13248, + 35846, + 5233, + 248439, + 8644, + 18745, + 8451 + ] + }, + { + "counters": [ + 68574, + 126298, + 66077, + 134637, + 118691, + 9607, + 15918, + 89547, + 37106, + 10108, + 33133, + 73585, + 104442, + 20385, + 39100, + 32336, + 46843, + 53121, + 2624, + 12998, + 20259, + 34789, + 15301, + 63434, + 16699, + 643633, + 40534, + 101128, + 28964, + 13089, + 5578, + 6042, + 358450, + 20447, + 23671, + 7171, + 300722, + 200057, + 55549, + 54033, + 309369, + 4438, + 14078, + 6900, + 4936, + 2095, + 108943, + 91360, + 25336, + 16778, + 80964, + 176492, + 144914, + 32958, + 10060, + 6800, + 42349, + 62547, + 5324, + 17228, + 77841, + 2831, + 174748, + 44579, + 89393, + 24092, + 223770, + 52885, + 41065, + 5286, + 188193, + 85043, + 32447, + 3754, + 8869, + 91526, + 6220, + 21775, + 60961, + 33051, + 52638, + 161638, + 41466, + 13918, + 32403, + 32108, + 25240, + 9319, + 164256, + 1977, + 3149, + 78056, + 190068, + 7551, + 5892, + 17550, + 2774, + 19377, + 27101, + 22761, + 15107, + 14832, + 101926, + 68583, + 25368, + 6353, + 2225, + 7438, + 16609, + 14071, + 1329830, + 71544, + 80921, + 7032, + 367459, + 41490, + 18401, + 6927, + 4471, + 41027, + 273455, + 84082, + 13252, + 5839, + 341164, + 144778, + 36826, + 8397, + 310997, + 41232, + 178857, + 18956, + 142115, + 3333, + 53247, + 35519, + 7695, + 32205, + 244835, + 32493, + 55348, + 12225, + 20403, + 55761, + 4178, + 28480, + 24990, + 19605, + 7900, + 45280, + 9706, + 28217, + 14349, + 15486, + 188874, + 11280, + 7866, + 9165, + 4028, + 26868, + 17041, + 40407, + 13485, + 6116, + 27004, + 2805, + 194540, + 22997, + 92944, + 24971, + 82794, + 51446, + 24110, + 39131, + 8966, + 34128, + 32335, + 6665, + 15180, + 10533, + 113860, + 562530, + 24311, + 17644, + 4621, + 24906, + 71260, + 29355, + 91900, + 49845, + 16144, + 47371, + 148287, + 32712, + 12308, + 13574, + 36974, + 33919, + 16880, + 120393, + 20455, + 259731, + 10341, + 52406, + 10730, + 51701, + 117441, + 19769, + 19635, + 53280, + 45263, + 27762, + 115319, + 23562, + 8354, + 362595, + 467212, + 56446, + 246218, + 17011, + 6971, + 143707, + 11964, + 6721, + 109839, + 80200, + 17056, + 70092, + 104367, + 3331, + 33172, + 49104, + 12636, + 13196, + 41451, + 9471, + 34242, + 16709, + 165565, + 4625, + 138077, + 5070, + 38450, + 25407, + 27011, + 6238, + 40742, + 11837, + 11543, + 25530, + 19876, + 13645, + 18750, + 86331, + 95536, + 22572, + 22720, + 20168, + 41522, + 86234, + 24715, + 17080, + 184809, + 187789, + 56194, + 28224, + 51132, + 96498, + 17117, + 13165, + 34844, + 200323, + 68429, + 253689, + 20850, + 91868, + 38406, + 144265, + 82992, + 466577, + 134641, + 29530, + 27572, + 201766, + 4390, + 59676, + 12026, + 20185, + 6946, + 25164, + 11724, + 437400, + 7997, + 14314, + 4825, + 45409, + 9946, + 191629, + 39373, + 7719, + 23727, + 228590, + 20964, + 27060, + 263046, + 16080, + 48900, + 55402, + 121828, + 77562, + 45683, + 6463, + 36749, + 4571, + 50821, + 90629, + 17587, + 84315, + 92522, + 25528, + 49461, + 7363, + 97135, + 13076, + 9836, + 16709, + 8300, + 5447, + 25729, + 200547, + 60549, + 45270, + 167437, + 107697, + 17922, + 78410, + 231394, + 16894, + 49212, + 14920, + 5148, + 9261, + 61901, + 49876, + 71742, + 77746, + 416834, + 79810, + 185168, + 379643, + 4964, + 105070, + 26216, + 5197, + 22926, + 83803, + 21969, + 11963, + 24976, + 10950, + 72062, + 31855, + 3348, + 95938, + 168470, + 34936, + 83960, + 13773, + 453189, + 327006, + 7996, + 40074, + 124390, + 68362, + 12970, + 11829, + 116222, + 18709, + 12991, + 80444, + 67963, + 22683, + 80968, + 17307, + 72786, + 55499, + 82679, + 470526, + 18893, + 8989, + 32670, + 56077, + 255787, + 30124, + 25836, + 11838, + 6829, + 9216, + 59998, + 409106, + 14705, + 36785, + 6797, + 45158, + 23794, + 75443, + 5717, + 11550, + 28246, + 40291, + 20332, + 42409, + 16622, + 96205, + 28084, + 13735, + 29569, + 86053, + 26962, + 21793, + 95180, + 26235, + 1532, + 20288, + 118000, + 348083, + 6877, + 15498, + 16590, + 188115, + 30258, + 21994, + 17938, + 40381, + 8009, + 45990, + 172330, + 165704, + 7763, + 10608, + 46463, + 17128, + 14030, + 14204, + 18967, + 12770, + 3289700, + 4826, + 14836, + 97725, + 31547, + 146861, + 50316, + 47357, + 46533, + 9397, + 48200, + 37012, + 105330, + 109656, + 111698, + 39596, + 31077, + 16828, + 21462, + 6742, + 48275, + 190550, + 228047, + 70511, + 110392, + 12103, + 176172, + 12805, + 68998, + 52434, + 25406, + 57632, + 10457, + 10097, + 9758, + 3867, + 27989, + 4567, + 174423, + 393185, + 5238, + 16803, + 165377, + 180065, + 234119, + 23888, + 52143, + 7232, + 93533, + 5275, + 3582, + 10961, + 2389, + 13506, + 37869, + 97762, + 43626, + 21757, + 139855, + 14033, + 76747, + 163421, + 338743, + 61599, + 87963, + 115134, + 46158, + 53435, + 144149, + 6102, + 2357, + 340605, + 158013, + 26473, + 157765, + 19602, + 21591, + 70826, + 201869, + 8079, + 84874, + 260852, + 18569, + 80689, + 19832, + 3054, + 17042, + 40209, + 46522, + 14331, + 6396, + 136131, + 4260, + 9109, + 12119, + 12236, + 4121, + 23767, + 8152, + 6362, + 52309, + 95483, + 303912, + 134092, + 14369, + 12016, + 73716, + 84756, + 105789, + 89257, + 46100, + 9268, + 66284, + 9851, + 66273, + 156030, + 163535, + 19225, + 8031, + 11531, + 68270, + 18788, + 167227, + 4818, + 7488, + 129081, + 82832, + 108009, + 190208, + 38107, + 65294, + 19561, + 291545, + 6168, + 32399, + 23677, + 40107, + 37026, + 209299, + 25002, + 18672, + 265823, + 57937, + 153966, + 105388, + 13976, + 5081, + 61959, + 312774, + 7184, + 6449, + 8643, + 26969, + 56745, + 2190, + 12528, + 6428, + 35448, + 2700, + 16782, + 117806, + 5187, + 6772, + 2707, + 348788, + 13498, + 49592, + 16708, + 12981, + 63883, + 7767, + 12542, + 42249, + 14400, + 27268, + 3049, + 2763, + 7123, + 157884, + 444226, + 69554, + 39692, + 348444, + 3973, + 31224, + 80912, + 35098, + 17342, + 38621, + 12208, + 303832, + 41008, + 14099, + 43577, + 9486, + 175904, + 65852, + 25382, + 8552, + 82709, + 4229, + 25248, + 42243, + 174978, + 10120, + 17698, + 127865, + 29617, + 92282, + 35010, + 16824, + 60066, + 16864, + 110947, + 19330, + 17892, + 15976, + 88515, + 16487, + 24984, + 9757, + 33325, + 1919, + 14726, + 3597, + 9441076, + 14382, + 34436, + 32471, + 14066, + 8695, + 168515, + 25363, + 226731, + 35828, + 134866, + 9612, + 79376, + 7490, + 18967, + 30213, + 50460, + 373177, + 66371, + 57261, + 2453, + 120525, + 4011, + 12387, + 14052, + 20996, + 65719, + 23389, + 128693, + 54650, + 54202, + 53659, + 45778, + 69666, + 10514, + 108573, + 7093, + 4162, + 91651, + 40527, + 143988, + 56141, + 5894, + 109056, + 51860, + 93004, + 45635, + 9845, + 22248, + 12714, + 12010, + 61762, + 23878, + 223959, + 433759, + 42637, + 6100, + 58506, + 14733, + 87691, + 33930, + 24252, + 4049, + 4977, + 5170853, + 544340, + 5165, + 7783, + 96037, + 2750, + 6317, + 14046, + 46658, + 48956, + 86217, + 16103, + 22252, + 10351, + 41043, + 16288, + 13672, + 25461, + 328744, + 150228, + 3314, + 9064, + 11051, + 13654, + 143828, + 31708, + 45707, + 83249, + 211163, + 34155, + 170145, + 6485, + 17759, + 150930, + 19077, + 39574, + 19678, + 11096, + 41883, + 9536, + 62402, + 40235, + 77524, + 204213, + 30902, + 80324, + 73325, + 209261, + 6989, + 50643, + 138806, + 24127, + 158087, + 202427, + 21693, + 191232, + 18574, + 47155, + 10718, + 50134, + 14701, + 13814, + 5634, + 95741, + 6746, + 9246, + 8223, + 241880, + 4929, + 13473, + 265025, + 121157, + 60935, + 14462, + 40314, + 36984, + 30365, + 10514, + 231714, + 181394, + 149291, + 15119, + 43081, + 83423, + 33234, + 95265, + 29450, + 31189, + 160580, + 21747, + 199918, + 8801, + 50222, + 97106, + 10213, + 10034, + 21320, + 15158, + 93508, + 6106, + 1575, + 16649, + 221915, + 20948, + 50632, + 11595, + 4452, + 86233, + 24386, + 63697, + 177014, + 50637, + 11541, + 71289, + 36185, + 45384, + 14516, + 476466, + 16998, + 71064, + 54368, + 7097, + 9289, + 81151, + 7750, + 47328, + 11175, + 87761, + 11077, + 13903, + 8316, + 26985, + 4203, + 1586143, + 31137, + 173986, + 39583, + 159853, + 82982, + 28076, + 175453, + 105534, + 3180, + 9007, + 21065, + 19611, + 13737, + 232867, + 75553, + 16033, + 153859, + 15802, + 107751, + 25988, + 38092, + 2046, + 186706, + 8761, + 30768, + 4627, + 98369, + 23918, + 47118, + 18767, + 20190, + 12032, + 40986, + 52656, + 217073, + 32288, + 40395, + 19555, + 113285, + 45623, + 73682, + 7699, + 139022, + 5104, + 45209, + 81719, + 3394, + 2576, + 146167, + 255157, + 11228, + 12940, + 34982, + 161165, + 28738, + 45884, + 18074, + 20630, + 255053, + 29204, + 7602, + 5550, + 93157, + 406661, + 66891, + 371477, + 99428, + 257919, + 6935, + 486690, + 19769, + 8877, + 160892, + 52693, + 21708, + 61689, + 23061, + 77565, + 197540, + 37020, + 40139, + 19935, + 60414, + 24380, + 9582, + 135791, + 67511, + 49359, + 108624, + 12209, + 47522, + 67311, + 57667, + 3850, + 14457, + 78143, + 22988, + 9485, + 26787, + 16957, + 7548, + 10007, + 188932, + 93291, + 35941, + 73732, + 33867, + 113376, + 3758, + 174737, + 56424, + 49679, + 8584, + 32754, + 13901, + 6052, + 45456, + 60168, + 121693, + 63659, + 47126, + 42883, + 31685, + 15033, + 24689, + 30602, + 56564, + 140130, + 12844, + 180804, + 91771, + 32967, + 42693, + 14630, + 267244, + 15851, + 22459, + 15000, + 85020, + 5127, + 103329, + 9661, + 71408, + 6081, + 71020, + 11484, + 11541, + 6232, + 6034, + 2889, + 4434, + 8771, + 7409, + 150532, + 15900, + 18833, + 38517, + 4416, + 57192, + 15067, + 28758, + 8225, + 7017, + 17148, + 45145, + 23165, + 22516, + 6026, + 73995, + 76315, + 2086, + 174234, + 30152, + 76643, + 18742, + 16210, + 254354, + 154243, + 202500, + 91627, + 139507, + 16143, + 228158, + 181625, + 49645, + 6444, + 16035, + 132061, + 5730, + 23243, + 15254, + 11498, + 474315, + 166466, + 59215, + 33619, + 9348, + 27132, + 189993, + 55794, + 25467, + 17246, + 94270, + 37725, + 76636, + 69366, + 11953, + 315395, + 1768, + 94760, + 25553, + 16183, + 13383, + 18465, + 5936, + 88869, + 160054, + 34872, + 29983, + 5030, + 55273, + 10786, + 27591, + 123090, + 21722, + 13325, + 52678, + 20675, + 41372, + 12148, + 27064, + 83274, + 9315, + 11370, + 38326, + 9171, + 5720, + 234014, + 40147, + 19023411, + 48372, + 159083, + 36812, + 42379, + 30810, + 11184, + 6046, + 9046, + 7718, + 48351, + 236741, + 252254, + 91708, + 16901, + 167209, + 22245, + 7729, + 20183, + 25303, + 17922, + 89921, + 49661, + 33471, + 15676, + 81084, + 209426, + 1959, + 53237, + 16849, + 36726, + 234554, + 11676, + 29921, + 144999, + 194411, + 184408, + 69383, + 42624, + 19862, + 11463, + 106835, + 36193, + 113067, + 11538, + 10010, + 29584, + 47900, + 63168, + 53125, + 67985, + 44511, + 87429, + 76034, + 189547, + 130435, + 90284, + 92642, + 219128, + 3153690, + 72690, + 29732, + 290547, + 92380, + 53252, + 26371, + 2734, + 10647, + 3847, + 4014, + 67999, + 39876, + 9367, + 155196, + 23825, + 53299, + 8863, + 47404, + 20056, + 23669, + 40031, + 11844, + 24804, + 17119, + 68757, + 75964, + 3309, + 115561, + 8721, + 8653, + 8600, + 25783, + 25437, + 25281, + 40834, + 137258, + 207132, + 9355, + 7804, + 4340, + 14563, + 19548, + 75565, + 36104, + 8092, + 2221, + 290286, + 17192, + 70271, + 6275, + 31306, + 60397, + 13289, + 100191, + 60342, + 3337, + 85495, + 46527, + 25508, + 13498, + 24526, + 138394, + 9884, + 2205, + 227808, + 48540, + 24300, + 21319, + 2834, + 33711, + 54660, + 1843, + 52022, + 90345, + 134933, + 35657, + 193759, + 246164, + 7998, + 5987, + 54409, + 14091, + 22754, + 321142, + 336267, + 98101, + 38304, + 12460, + 53350, + 21519, + 5037, + 29356, + 4545, + 17451, + 6027, + 26677, + 362682, + 41739, + 10947, + 80948, + 18312, + 13025, + 8290, + 318211, + 84345, + 268670, + 11294, + 101665, + 28111, + 12107, + 85050, + 14066, + 37970, + 34965, + 81744, + 140432, + 36827, + 234720, + 29820, + 78710, + 18191, + 80882, + 424884, + 46759, + 49526, + 15934, + 69137, + 206905, + 94131, + 112089, + 322378, + 34314, + 199336, + 76489, + 32778, + 64437, + 10558, + 176162, + 44308, + 59875, + 10211, + 7179, + 28241, + 305421, + 82543, + 95977, + 68627, + 34791, + 56779, + 63227, + 26556, + 67054, + 7405, + 190894, + 23391, + 74844, + 59163, + 53604, + 12538, + 236538, + 20572, + 29886, + 19451, + 51112, + 3838, + 33501, + 5944, + 21661, + 125008, + 12271, + 2850, + 174551, + 34011, + 284360, + 172503, + 85928, + 5783, + 143478, + 22883, + 33467, + 24110, + 43440, + 221214, + 59739, + 7832, + 158673, + 24194, + 9869, + 36851, + 158187, + 45224, + 160103, + 54929, + 9283, + 105396, + 98312, + 15312, + 27976, + 57350, + 5762, + 11962, + 70167, + 103136, + 264032, + 131410, + 107728, + 17834, + 721945, + 30830, + 20677, + 66088, + 11798, + 3133627, + 5286, + 20137, + 128382, + 47693, + 84374, + 42488, + 56335, + 26366, + 51929, + 51558, + 4697, + 72780, + 249599, + 49870, + 54083, + 7535, + 1919, + 19576, + 4947, + 25318, + 157415, + 2650, + 33647, + 52538, + 34174, + 59947, + 16860, + 46219, + 24382, + 73449, + 50517, + 292178, + 12212, + 66252, + 60444, + 323758, + 10811, + 15703, + 17501, + 7021, + 2402, + 104572, + 184513, + 3338, + 50301, + 17742, + 7848, + 161119, + 76123, + 32326, + 91360, + 14736, + 38780, + 82571, + 43427, + 7163, + 26023, + 44685, + 15129, + 28039, + 12399, + 160640, + 7319, + 92140, + 3944, + 45977, + 6181, + 2834, + 23136, + 186770, + 28007, + 65930, + 6188, + 5105, + 17012, + 39446, + 22819, + 11413, + 17809, + 38240, + 19784, + 1608085, + 34698, + 346817, + 15357, + 60981, + 1620051, + 12499, + 627772, + 32840, + 45329, + 39971, + 17887, + 4416, + 155962, + 34205, + 16038, + 109185, + 12718, + 3633, + 12710, + 5901, + 12738, + 29180, + 185018, + 24966, + 30575, + 5340, + 3788, + 1509, + 5845, + 8256, + 37491, + 83873, + 8513, + 6130, + 13668, + 16991, + 13421, + 16077, + 11679, + 460410, + 10365, + 10111, + 5032, + 4110, + 23704, + 26864, + 20705, + 176760, + 26462, + 1688, + 52218, + 5160, + 150662, + 8498, + 2041868, + 68752, + 82014, + 26445, + 54364, + 8330, + 102594, + 18462, + 14349, + 543408, + 14950, + 7563, + 81448, + 44501, + 434959, + 17762, + 30580, + 52656, + 7312, + 49145, + 15762, + 20027, + 10634, + 2705, + 286539, + 16779, + 13524, + 29651, + 296815, + 6253, + 160200, + 166358, + 21511, + 8165, + 13609, + 48638, + 14661, + 23255, + 11633, + 240206, + 32005, + 12842, + 19058, + 176896, + 39588, + 22307, + 139033, + 12054, + 51110, + 67949, + 3876, + 144300, + 24850, + 53785, + 137044, + 2729, + 11445, + 29099, + 73932, + 252440, + 68591, + 12557, + 18711, + 55380, + 61795, + 8206, + 18120, + 73413, + 39028, + 24899, + 22740, + 28255, + 26958, + 62553, + 160771, + 177375, + 47536, + 118768, + 131355, + 91062, + 26824, + 7907, + 3032, + 13232, + 17631, + 296223, + 53260, + 52388, + 35400, + 8648, + 12551, + 63167, + 82065, + 38785, + 3842, + 67562, + 711338, + 16968, + 25639, + 51159, + 22637, + 23220, + 10975, + 86534, + 421999, + 132654, + 7009, + 152556, + 16887, + 25974, + 13179, + 68830, + 13643, + 23710, + 38333, + 5861, + 7473, + 175974, + 17988, + 362157, + 100048, + 14609, + 1066438, + 9811, + 20824, + 9227, + 13464, + 26275, + 93227, + 13653, + 4899, + 74912, + 10640, + 9673, + 46404, + 52904, + 38622, + 14103, + 45893, + 37677, + 49963, + 52633, + 101667, + 1656552, + 152956, + 9749, + 18263, + 7376, + 8883, + 146526, + 128382, + 27855, + 43553, + 75487, + 26349, + 10025, + 14013, + 72833, + 166052, + 10962, + 3329, + 71696, + 19242, + 16936, + 77972, + 20560, + 15407, + 195498, + 13767, + 92202, + 9783, + 4546, + 31065, + 46337, + 59761, + 61025, + 45129, + 61336, + 44222, + 159745, + 80985, + 464647, + 182951, + 79363, + 67442, + 39993, + 18042, + 7727, + 50293, + 295404, + 126502, + 28594, + 5196, + 214224, + 110824, + 13552, + 20986, + 10051, + 9533, + 17321, + 20324, + 14063, + 28775, + 15483, + 86361, + 8093, + 8433, + 94342, + 17648, + 106579, + 143310, + 68911, + 204085, + 91830, + 45991, + 9582, + 64869, + 11589, + 6157, + 23990, + 4426, + 12256, + 18122, + 68855, + 39787, + 2782, + 86554, + 14100, + 25257, + 105975, + 5992, + 28699, + 36736, + 9248, + 205308, + 172914, + 64998, + 186725, + 102446, + 34955, + 32241, + 66147, + 118898, + 18795, + 76641, + 143980, + 27356, + 12342, + 16674, + 195181, + 4898, + 9651, + 64510, + 4439, + 7127, + 38623, + 6830, + 10448, + 84681, + 105092, + 72767, + 25508, + 37244, + 23260, + 17603, + 112179, + 14123, + 7732, + 100270, + 277630, + 3813, + 8521, + 11626, + 8260, + 46531, + 22018, + 31120, + 54701, + 41571, + 103314, + 121180, + 19933, + 16529, + 95102, + 8145, + 23989, + 131353, + 24603, + 48914, + 2742, + 54873, + 26673, + 64333, + 5225, + 10665, + 13223, + 5063, + 26744, + 8381, + 109175, + 21333, + 241557, + 33226, + 8300, + 12680, + 12008, + 40591, + 111170, + 23023, + 152626, + 126174, + 106048, + 12365, + 14425, + 82743, + 9536, + 35799, + 27324, + 43619, + 26524, + 16054, + 36200, + 105881, + 4770, + 24915, + 8067, + 62684, + 13399, + 4851, + 10838, + 10900, + 4928, + 127687, + 118839, + 40219, + 327141, + 218073, + 133091, + 24060, + 31908, + 207549, + 19828, + 89709, + 69158, + 202763, + 342269, + 52559, + 1887821, + 27226, + 165003, + 209676, + 10064, + 6242, + 70877, + 49147, + 6084, + 9173, + 11457, + 26160, + 44314, + 231598, + 224494, + 180419, + 10275, + 21119, + 32847, + 3863, + 7390, + 51053, + 112269, + 70407, + 18287, + 69294, + 54622, + 639339, + 55109, + 7912, + 154047, + 139381, + 14746, + 10535, + 90851, + 38671, + 8929, + 62692, + 55688, + 2064, + 32131, + 58219, + 8770, + 19158, + 107623, + 230576, + 51590, + 259196, + 2357, + 14327, + 92634, + 22433, + 133159, + 37986, + 34225, + 18062, + 18597, + 122501, + 20178, + 32770, + 29887, + 14670, + 11544, + 4139, + 10084, + 130840, + 53800, + 5707, + 276299, + 28244, + 7448, + 72927, + 67669, + 12879, + 48599, + 64458, + 20841, + 23510, + 14006, + 21110, + 27909, + 37319, + 10637, + 10452, + 784558, + 33765, + 67737, + 21816, + 35211, + 44024, + 13332, + 14313, + 24340, + 21799, + 46220, + 11365, + 19521, + 14004, + 90776, + 15333, + 308443, + 128039, + 16822, + 22990, + 69477, + 193195, + 159718, + 309462, + 17115, + 175198, + 68910, + 13016, + 6028, + 15739, + 14558, + 28860, + 38816, + 18838, + 24509, + 21036, + 50680, + 6600, + 25014, + 49760, + 222258, + 12842, + 64766, + 26736, + 8091, + 39614, + 78139, + 61661, + 71814, + 49627, + 38921, + 60282, + 622093, + 90057, + 16957, + 24251, + 320038, + 4390, + 5280, + 14328, + 22819, + 15693, + 63601, + 33966, + 340519, + 11230, + 3242, + 48398, + 24504, + 13082, + 9961, + 6596, + 16754, + 13954, + 73289, + 73591, + 399625, + 4854, + 32138, + 310643, + 193743, + 60293, + 82516, + 206167, + 24344, + 7874, + 12319, + 440768, + 611170, + 83648, + 37878, + 73260, + 12874, + 29477, + 121676, + 5187, + 63063, + 51182, + 58818, + 18145 + ] + } + ], + "top_n": [ + { + "data": "AVQyMTM0AAAA/A==", + "count": 4181956 + }, + { + "data": "AVQyMjgwAAAA/AFUT1BJQwAAAPw=", + "count": 606137 + }, + { + "data": "AVQyMjgwAAAA/A==", + "count": 622329 + }, + { + "data": "AVQxOTg2AAAA/AFUT1BJQwAAAPw=", + "count": 2002978 + }, + { + "data": "AVQxOTg2AAAA/A==", + "count": 2047498 + }, + { + "data": "AVQyMTA4AAAA/AFUT1BJQwAAAPw=", + "count": 1896220 + }, + { + "data": "AVQyMTA4AAAA/A==", + "count": 1901484 + }, + { + "data": "AVQyMTM0AAAA/AFUT1BJQwAAAPw=", + "count": 4193826 + } + ], + "default_value": 0 + }, + "null_count": 0, + "tot_col_size": 0, + "last_update_version": 419285068791677123, + "correlation": 0 + }, + "idx4": { + "histogram": { + "ndv": 4239338, + "buckets": [ + { + "count": 265216, + "lower_bound": "A4AAAAAADOR4", + "upper_bound": "A4AAAAAADWX4", + "repeats": 0 + }, + { + "count": 527360, + "lower_bound": "A4AAAAAADWX4", + "upper_bound": "A4AAAAAADeX4", + "repeats": 0 + }, + { + "count": 789658, + "lower_bound": "A4AAAAAADeX4", + "upper_bound": "A4AAAAAADm1y", + "repeats": 0 + }, + { + "count": 1031339, + "lower_bound": "A4AAAAAADm1y", + "upper_bound": "A4AAAAAADvRQ", + "repeats": 0 + }, + { + "count": 1297071, + "lower_bound": "A4AAAAAADvRQ", + "upper_bound": "A4AAAAAAD4ia", + "repeats": 0 + }, + { + "count": 1559599, + "lower_bound": "A4AAAAAAD4ia", + "upper_bound": "A4AAAAAAEBsa", + "repeats": 0 + }, + { + "count": 1572409, + "lower_bound": "A4AAAAAAEBsa", + "upper_bound": "A4AAAAAAECJA", + "repeats": 0 + }, + { + "count": 1838142, + "lower_bound": "A4AAAAAAECJA", + "upper_bound": "A4AAAAAAELaK", + "repeats": 0 + }, + { + "count": 2100670, + "lower_bound": "A4AAAAAAELaK", + "upper_bound": "A4AAAAAAEUkK", + "repeats": 0 + }, + { + "count": 2363197, + "lower_bound": "A4AAAAAAEUkK", + "upper_bound": "A4AAAAAAEduK", + "repeats": 0 + }, + { + "count": 2427632, + "lower_bound": "A4AAAAAAEduK", + "upper_bound": "A4AAAAAAEf9/", + "repeats": 0 + }, + { + "count": 2692988, + "lower_bound": "A4AAAAAAEf9/", + "upper_bound": "A4AAAAAAEpOT", + "repeats": 0 + }, + { + "count": 2955515, + "lower_bound": "A4AAAAAAEpOT", + "upper_bound": "A4AAAAAAEyf6", + "repeats": 0 + }, + { + "count": 3217787, + "lower_bound": "A4AAAAAAEyf6", + "upper_bound": "A4AAAAAAE9K6", + "repeats": 0 + }, + { + "count": 3480059, + "lower_bound": "A4AAAAAAE9K6", + "upper_bound": "A4AAAAAAFH16", + "repeats": 0 + }, + { + "count": 3730781, + "lower_bound": "A4AAAAAAFH16", + "upper_bound": "A4AAAAAAFSC1", + "repeats": 0 + }, + { + "count": 3994733, + "lower_bound": "A4AAAAAAFSC1", + "upper_bound": "A4AAAAAAFcyN", + "repeats": 0 + }, + { + "count": 4257377, + "lower_bound": "A4AAAAAAFcyN", + "upper_bound": "A4AAAAAAFneL", + "repeats": 0 + }, + { + "count": 4519649, + "lower_bound": "A4AAAAAAFneL", + "upper_bound": "A4AAAAAAFyJL", + "repeats": 0 + }, + { + "count": 4782003, + "lower_bound": "A4AAAAAAFyJL", + "upper_bound": "A4AAAAAAF+UQ", + "repeats": 0 + }, + { + "count": 5018946, + "lower_bound": "A4AAAAAAF+UQ", + "upper_bound": "A4AAAAAAGMlZ", + "repeats": 0 + }, + { + "count": 5281090, + "lower_bound": "A4AAAAAAGMlZ", + "upper_bound": "A4AAAAAAGclZ", + "repeats": 0 + }, + { + "count": 5543234, + "lower_bound": "A4AAAAAAGclZ", + "upper_bound": "A4AAAAAAGslZ", + "repeats": 0 + }, + { + "count": 5681866, + "lower_bound": "A4AAAAAAGslZ", + "upper_bound": "A4AAAAAAG1C7", + "repeats": 0 + }, + { + "count": 5945046, + "lower_bound": "A4AAAAAAG1C7", + "upper_bound": "A4AAAAAAHFO8", + "repeats": 0 + }, + { + "count": 6207238, + "lower_bound": "A4AAAAAAHFO8", + "upper_bound": "A4AAAAAAHhOb", + "repeats": 0 + }, + { + "count": 6469382, + "lower_bound": "A4AAAAAAHhOb", + "upper_bound": "A4AAAAAAIRY+", + "repeats": 0 + }, + { + "count": 6731526, + "lower_bound": "A4AAAAAAIRY+", + "upper_bound": "A4AAAAAAJRY+", + "repeats": 0 + }, + { + "count": 6993670, + "lower_bound": "A4AAAAAAJRY+", + "upper_bound": "A4AAAAAAKRY/", + "repeats": 0 + }, + { + "count": 7079268, + "lower_bound": "A4AAAAAAKRY/", + "upper_bound": "A4AAAAAAKmSd", + "repeats": 0 + }, + { + "count": 7341412, + "lower_bound": "A4AAAAAAKmSd", + "upper_bound": "A4AAAAAALmSd", + "repeats": 0 + }, + { + "count": 7603556, + "lower_bound": "A4AAAAAALmSd", + "upper_bound": "A4AAAAAAMmSd", + "repeats": 0 + }, + { + "count": 7794785, + "lower_bound": "A4AAAAAAMmSd", + "upper_bound": "A4AAAAAANU+b", + "repeats": 0 + }, + { + "count": 8056929, + "lower_bound": "A4AAAAAANU+b", + "upper_bound": "A4AAAAAAOU+b", + "repeats": 0 + }, + { + "count": 8319073, + "lower_bound": "A4AAAAAAOU+b", + "upper_bound": "A4AAAAAAPU+e", + "repeats": 0 + }, + { + "count": 8540341, + "lower_bound": "A4AAAAAAPU+e", + "upper_bound": "+g==", + "repeats": 0 + } + ] + }, + "cm_sketch": { + "rows": [ + { + "counters": [ + 54466, + 38549, + 44283, + 46111, + 1123552, + 77754, + 42544, + 32412, + 34865, + 34339, + 52414, + 38659, + 33581, + 30879, + 110124, + 43711, + 32952, + 41609, + 47210, + 51747, + 38762, + 42531, + 34057, + 52388, + 40824, + 33924, + 37541, + 49499, + 44314, + 31376, + 37609, + 46020, + 38834, + 36661, + 37390, + 35255, + 96492, + 39647, + 36219, + 32554, + 43114, + 28575, + 36845, + 38535, + 42815, + 33455, + 35566, + 45729, + 50003, + 38020, + 37150, + 41107, + 38195, + 37781, + 39610, + 35068, + 35670, + 38282, + 39808, + 45144, + 47059, + 42531, + 28749, + 43632, + 36803, + 39079, + 39692, + 41762, + 34491, + 35889, + 33748, + 31787, + 41041, + 46182, + 31901, + 42102, + 48262, + 31363, + 39641, + 39950, + 38891, + 30145, + 30015, + 44300, + 36668, + 33206, + 38298, + 41909, + 35208, + 55450, + 33330, + 48677, + 34249, + 42918, + 33365, + 48684, + 34571, + 56859, + 45416, + 47722, + 26066, + 41120, + 34657, + 55867, + 40986, + 34413, + 49825, + 44458, + 41171, + 51510, + 34233, + 39795, + 56660, + 59410, + 38809, + 31627, + 46736, + 37295, + 43121, + 34880, + 41641, + 37297, + 47930, + 32632, + 56443, + 45829, + 43432, + 38966, + 61321, + 76891, + 63863, + 38838, + 34033, + 40771, + 74782, + 36015, + 36582, + 39824, + 40393, + 44401, + 44978, + 40285, + 41963, + 45403, + 35663, + 43247, + 77038, + 39186, + 48592, + 47183, + 32289, + 38574, + 54963, + 40888, + 46176, + 33795, + 43855, + 51186, + 46739, + 40911, + 50735, + 40725, + 30103, + 33870, + 49673, + 35587, + 47341, + 50911, + 40445, + 30112, + 39851, + 48398, + 31589, + 35695, + 38474, + 41865, + 43126, + 47909, + 37557, + 41107, + 48258, + 68131, + 39389, + 51090, + 34845, + 32472, + 45130, + 39347, + 40744, + 35511, + 32650, + 41333, + 47048, + 34328, + 46502, + 37780, + 39610, + 46579, + 43273, + 50035, + 46705, + 38756, + 44973, + 36259, + 46136, + 43623, + 36288, + 34819, + 49937, + 34974, + 46907, + 49225, + 36305, + 36053, + 30191, + 37706, + 39866, + 51551, + 44297, + 36775, + 38788, + 37298, + 44954, + 38380, + 35475, + 31471, + 28860, + 37595, + 42021, + 42094, + 45904, + 35153, + 49171, + 39562, + 35979, + 35390, + 36222, + 44954, + 36960, + 35456, + 34208, + 37359, + 51747, + 42744, + 48785, + 33972, + 41317, + 35860, + 33160, + 39071, + 89438, + 74833, + 39992, + 38324, + 40633, + 35984, + 48496, + 47131, + 40675, + 35728, + 37657, + 34632, + 43335, + 41468, + 46109, + 36254, + 35485, + 41056, + 37750, + 34429, + 43186, + 49855, + 34304, + 46522, + 39213, + 40826, + 36502, + 40415, + 51287, + 40612, + 47322, + 43874, + 47318, + 42502, + 76007, + 39871, + 27448, + 55758, + 32616, + 55324, + 49340, + 47089, + 37386, + 35290, + 35404, + 52463, + 32162, + 38962, + 42944, + 38945, + 40763, + 40117, + 35202, + 54630, + 44643, + 51674, + 44711, + 34557, + 44276, + 41141, + 51393, + 50095, + 40736, + 36191, + 30761, + 31997, + 40285, + 34157, + 33864, + 44785, + 45949, + 41442, + 34423, + 44336, + 35674, + 46925, + 49151, + 56983, + 56813, + 33014, + 44931, + 30827, + 31620, + 40394, + 34676, + 34399, + 34873, + 35856, + 47235, + 42225, + 60654, + 35466, + 53267, + 53526, + 40257, + 37954, + 58847, + 42821, + 35350, + 65592, + 30531, + 50492, + 51185, + 52855, + 31464, + 38781, + 32974, + 35492, + 33315, + 40919, + 36542, + 28456, + 52298, + 35579, + 33245, + 45085, + 38310, + 52566, + 33248, + 42892, + 41002, + 39970, + 42259, + 65819, + 53772, + 38028, + 39111, + 40533, + 65075, + 54089, + 41534, + 39018, + 49573, + 39897, + 47128, + 68537, + 41135, + 46872, + 27945, + 47128, + 32423, + 30820, + 42315, + 35720, + 36982, + 40176, + 48144, + 37796, + 39451, + 50076, + 32307, + 43852, + 26903, + 38380, + 36549, + 43471, + 47703, + 36888, + 49981, + 45244, + 36315, + 53183, + 28859, + 34458, + 28286, + 44007, + 41502, + 46420, + 33742, + 36002, + 38325, + 35266, + 35189, + 40181, + 40947, + 44474, + 32192, + 46144, + 39252, + 33388, + 33822, + 32984, + 41962, + 70056, + 36132, + 33633, + 34902, + 45598, + 44643, + 57871, + 47014, + 34410, + 38090, + 44385, + 41936, + 46652, + 34852, + 40173, + 44793, + 32685, + 51143, + 71056, + 37731, + 38256, + 33520, + 47109, + 48418, + 51877, + 37793, + 36961, + 35910, + 34188, + 62917, + 45080, + 38994, + 45906, + 38677, + 39804, + 47615, + 38698, + 51657, + 36393, + 30974, + 45897, + 36976, + 35011, + 44374, + 36129, + 38531, + 38977, + 33179, + 49621, + 31104, + 35229, + 52023, + 41835, + 38549, + 47761, + 28033, + 52796, + 36581, + 32764, + 30935, + 28544, + 38409, + 35821, + 42956, + 37260, + 47015, + 36435, + 54710, + 28535, + 34944, + 30213, + 36582, + 41953, + 36855, + 54280, + 33201, + 44938, + 31439, + 38800, + 50471, + 48519, + 34047, + 38213, + 38020, + 42559, + 28528, + 33624, + 37185, + 38410, + 31294, + 45151, + 34129, + 29907, + 54278, + 45645, + 49756, + 55826, + 55495, + 31091, + 37084, + 44848, + 39968, + 36193, + 45513, + 46024, + 38900, + 32409, + 54457, + 37817, + 40926, + 38092, + 39059, + 37366, + 58115, + 37498, + 44850, + 58226, + 46908, + 36977, + 43231, + 38582, + 38654, + 83909, + 50320, + 44034, + 34127, + 26711, + 48748, + 36229, + 38416, + 37368, + 37104, + 32856, + 42071, + 29300, + 33074, + 28519, + 73242, + 61367, + 38424, + 37427, + 40279, + 52906, + 34563, + 38287, + 32110, + 40542, + 47310, + 58593, + 37711, + 59755, + 63749, + 42966, + 34432, + 41143, + 35155, + 31611, + 41088, + 35896, + 32752, + 39301, + 52002, + 38533, + 38102, + 57785, + 40192, + 36593, + 32113, + 38111, + 79530, + 38617, + 46624, + 45965, + 32521, + 38071, + 36870, + 36564, + 52637, + 39354, + 31380, + 32213, + 34180, + 43425, + 36035, + 39743, + 50025, + 31488, + 50149, + 34214, + 33171, + 41686, + 45374, + 48744, + 38851, + 47935, + 58160, + 45207, + 38360, + 55669, + 50591, + 44360, + 53989, + 39547, + 30955, + 46282, + 43124, + 40765, + 39176, + 46898, + 50329, + 37728, + 30899, + 39347, + 41198, + 33018, + 52732, + 28541, + 37764, + 32024, + 41874, + 54656, + 34620, + 37500, + 34483, + 32641, + 54433, + 38917, + 41057, + 34124, + 36330, + 38783, + 34750, + 31137, + 30797, + 37009, + 41071, + 54305, + 31600, + 37841, + 57164, + 41272, + 39994, + 44417, + 36934, + 54176, + 41672, + 27171, + 39731, + 41527, + 47974, + 33208, + 55721, + 36091, + 43142, + 41077, + 34365, + 40258, + 41798, + 38255, + 34596, + 37408, + 46356, + 41522, + 58416, + 33526, + 39668, + 46144, + 46641, + 51520, + 46245, + 34075, + 38856, + 36472, + 35560, + 38937, + 49504, + 42796, + 35421, + 35683, + 44132, + 46966, + 39646, + 44525, + 41228, + 38443, + 41548, + 43802, + 44036, + 39401, + 51875, + 39746, + 38967, + 25972, + 28912, + 30181, + 43466, + 36659, + 47619, + 42593, + 61152, + 33856, + 42426, + 36493, + 33921, + 30675, + 37264, + 43769, + 36125, + 49803, + 40881, + 30461, + 42454, + 38530, + 58130, + 38470, + 54259, + 39391, + 41695, + 141192, + 57582, + 44638, + 33250, + 38860, + 29471, + 34476, + 35743, + 40475, + 41296, + 35824, + 56242, + 43053, + 50077, + 37662, + 42182, + 43259, + 36795, + 28876, + 40428, + 43099, + 42626, + 41666, + 36402, + 49536, + 42444, + 36833, + 34539, + 35144, + 31868, + 80426, + 34345, + 64925, + 50422, + 49815, + 37313, + 37863, + 41160, + 37142, + 54865, + 51286, + 39763, + 69259, + 44678, + 36526, + 42388, + 35420, + 34203, + 25122, + 36726, + 39260, + 45661, + 42174, + 41498, + 35643, + 52484, + 31096, + 31832, + 34847, + 42921, + 48400, + 42061, + 29569, + 39885, + 42754, + 50693, + 37068, + 34884, + 39934, + 27748, + 34297, + 32782, + 47254, + 44758, + 34620, + 41701, + 41533, + 45342, + 39793, + 38492, + 45392, + 44058, + 52839, + 39966, + 43378, + 35220, + 39320, + 43768, + 48879, + 52549, + 41658, + 33114, + 34057, + 49109, + 46240, + 38888, + 39435, + 59905, + 32768, + 36052, + 33891, + 39525, + 37142, + 38077, + 41869, + 43563, + 31651, + 33900, + 52835, + 30951, + 59330, + 31402, + 42369, + 42146, + 49794, + 38650, + 39954, + 32394, + 43216, + 53511, + 40530, + 49677, + 46440, + 40802, + 40454, + 34065, + 34795, + 40563, + 41378, + 36400, + 46226, + 37628, + 34687, + 38944, + 35442, + 37463, + 43749, + 34335, + 50402, + 29592, + 44511, + 35408, + 29916, + 49466, + 38771, + 33683, + 45824, + 43691, + 63021, + 26042, + 42767, + 35359, + 50286, + 76385, + 32817, + 40247, + 43147, + 49145, + 33657, + 38257, + 33699, + 30971, + 29278, + 33603, + 43846, + 35139, + 277504, + 38480, + 50917, + 39181, + 39073, + 45569, + 34596, + 36786, + 43314, + 36722, + 47383, + 41426, + 34300, + 27906, + 44123, + 49208, + 40879, + 44338, + 41148, + 48300, + 29368, + 34427, + 61272, + 37202, + 48226, + 38539, + 32761, + 54883, + 43271, + 40384, + 43238, + 42192, + 37753, + 55000, + 37622, + 44417, + 54911, + 30660, + 36684, + 34029, + 31149, + 31958, + 63707, + 37893, + 51621, + 35758, + 54761, + 34923, + 41716, + 47343, + 45088, + 40438, + 36153, + 37428, + 30590, + 34522, + 54182, + 47817, + 45287, + 40018, + 33207, + 45436, + 38651, + 39892, + 43398, + 38743, + 29081, + 39635, + 27584, + 34249, + 39159, + 36770, + 50231, + 42664, + 40497, + 35140, + 32107, + 50863, + 33315, + 32597, + 36824, + 39081, + 41362, + 35578, + 42304, + 48040, + 42004, + 57918, + 38275, + 29063, + 49067, + 41038, + 34638, + 42361, + 37122, + 43221, + 37220, + 36980, + 46630, + 42620, + 47681, + 45920, + 33093, + 38532, + 33132, + 43129, + 36685, + 32126, + 38474, + 38800, + 48202, + 71543, + 34913, + 67269, + 37309, + 42781, + 42208, + 42776, + 34187, + 41731, + 42413, + 35285, + 75967, + 78688, + 31123, + 35116, + 55454, + 45165, + 38366, + 37722, + 44048, + 52488, + 33081, + 32853, + 38255, + 44475, + 39882, + 44014, + 37384, + 41487, + 50296, + 54870, + 38054, + 53670, + 39389, + 44254, + 40756, + 30971, + 41946, + 40512, + 59049, + 33049, + 37680, + 38985, + 51644, + 54995, + 37807, + 43171, + 41701, + 44982, + 52612, + 30026, + 64836, + 36988, + 48361, + 33586, + 31060, + 38667, + 41939, + 43426, + 35620, + 48119, + 30492, + 36078, + 38759, + 43572, + 47712, + 40429, + 39939, + 44288, + 58460, + 41504, + 54074, + 55965, + 44707, + 41935, + 39255, + 36272, + 41725, + 41254, + 53958, + 33763, + 35004, + 32824, + 32406, + 38650, + 41274, + 35485, + 36615, + 51491, + 32264, + 45791, + 43158, + 37829, + 32176, + 33783, + 27734, + 53929, + 28390, + 45662, + 34451, + 38160, + 41642, + 36699, + 67100, + 45818, + 38146, + 40688, + 41714, + 50137, + 30102, + 34717, + 57517, + 33155, + 42330, + 52882, + 35231, + 34785, + 40072, + 33883, + 32998, + 32979, + 42902, + 33246, + 53534, + 39036, + 44137, + 35149, + 53729, + 58371, + 43027, + 46621, + 43118, + 46468, + 50006, + 46720, + 28938, + 37903, + 50142, + 34795, + 38763, + 39731, + 36004, + 43078, + 44234, + 58343, + 47290, + 46021, + 45330, + 51222, + 49189, + 36334, + 46437, + 37012, + 31052, + 33039, + 35104, + 35419, + 33003, + 49206, + 33605, + 39466, + 41147, + 35821, + 44061, + 38134, + 36167, + 35408, + 60527, + 44592, + 47917, + 47454, + 38381, + 39840, + 38716, + 30976, + 39112, + 42775, + 33219, + 37145, + 43175, + 36759, + 40166, + 122637, + 40987, + 36630, + 35003, + 60010, + 57235, + 38491, + 40434, + 32442, + 44541, + 41309, + 47077, + 57170, + 76924, + 27992, + 45188, + 35615, + 55052, + 34964, + 39696, + 48792, + 33725, + 43773, + 35616, + 47202, + 34206, + 36566, + 45624, + 37866, + 49777, + 40302, + 42542, + 38856, + 35911, + 56059, + 34522, + 40367, + 40748, + 35141, + 39785, + 36450, + 38354, + 38855, + 28981, + 34327, + 174912, + 53811, + 38819, + 44395, + 38370, + 30516, + 41872, + 35239, + 35938, + 37477, + 41029, + 33592, + 62499, + 34465, + 43063, + 40338, + 41151, + 40042, + 37178, + 44524, + 49494, + 37317, + 37305, + 45050, + 44983, + 36145, + 66360, + 43620, + 42319, + 37205, + 32068, + 32466, + 36642, + 55398, + 34532, + 41572, + 31316, + 40690, + 43604, + 50269, + 46829, + 53635, + 47723, + 38028, + 41486, + 42259, + 60516, + 44093, + 40109, + 38713, + 34554, + 31143, + 38511, + 30894, + 34358, + 52452, + 65294, + 40510, + 42084, + 34951, + 53150, + 45747, + 39232, + 39889, + 25566, + 36665, + 29306, + 45956, + 34728, + 38651, + 40516, + 42329, + 54147, + 34955, + 40125, + 53177, + 36705, + 45656, + 44793, + 37331, + 44956, + 32573, + 35584, + 38545, + 31893, + 40875, + 29044, + 35799, + 38052, + 48700, + 41477, + 34332, + 41984, + 31787, + 49778, + 47674, + 39039, + 37193, + 33122, + 55152, + 38496, + 35427, + 48046, + 58967, + 40420, + 32939, + 50810, + 36110, + 40631, + 38603, + 51990, + 40076, + 59451, + 35823, + 29587, + 40445, + 51740, + 35670, + 38313, + 44159, + 31512, + 36355, + 45683, + 40066, + 36834, + 52481, + 41698, + 40782, + 39476, + 206393, + 35308, + 40929, + 72758, + 33910, + 51820, + 40794, + 46113, + 48103, + 35141, + 78524, + 50961, + 39392, + 29454, + 33779, + 40596, + 39444, + 39678, + 33762, + 56275, + 44215, + 39897, + 41628, + 54361, + 35085, + 53631, + 36857, + 39152, + 36640, + 39469, + 38700, + 43806, + 33906, + 40304, + 33984, + 35167, + 56877, + 35757, + 42103, + 31589, + 37397, + 54627, + 35220, + 34274, + 53171, + 40426, + 36136, + 33595, + 40473, + 43594, + 37851, + 32736, + 37812, + 35512, + 38861, + 65738, + 29178, + 34403, + 37291, + 53141, + 35538, + 31350, + 68705, + 37025, + 44415, + 35458, + 34935, + 45800, + 34983, + 50375, + 32374, + 39175, + 36555, + 36116, + 35493, + 49884, + 52277, + 39468, + 42203, + 36238, + 34518, + 29506, + 43717, + 33193, + 44041, + 47718, + 43739, + 46105, + 31496, + 39554, + 57881, + 38445, + 34813, + 34943, + 36073, + 65333, + 47315, + 56315, + 51210, + 37030, + 31815, + 40985, + 47445, + 35445, + 56784, + 40541, + 63100, + 58842, + 39101, + 38420, + 37908, + 42888, + 64424, + 38864, + 33958, + 51306, + 38105, + 31201, + 31601, + 41078, + 27612, + 54438, + 33631, + 38252, + 34132, + 40451, + 36258, + 40653, + 44239, + 39344, + 38239, + 42249, + 44734, + 34610, + 44538, + 31404, + 41601, + 41691, + 44909, + 37132, + 43171, + 35793, + 33555, + 37272, + 44181, + 51015, + 43328, + 37731, + 39113, + 45517, + 48674, + 47555, + 38950, + 44381, + 46245, + 104150, + 32221, + 34135, + 44565, + 34137, + 57291, + 36949, + 49459, + 43824, + 31844, + 42995, + 52498, + 37717, + 35425, + 40079, + 37643, + 58949, + 50594, + 36046, + 52676, + 36643, + 41846, + 37207, + 39994, + 39966, + 88638, + 37333, + 39802, + 49538, + 48375, + 40359, + 50348, + 38600, + 36092, + 36817, + 43856, + 42099, + 49055, + 45169, + 41544, + 35918, + 41744, + 60797, + 37610, + 32162, + 34917, + 29449, + 38509, + 44459, + 38574, + 40290, + 35710, + 32842, + 39802, + 46415, + 30104, + 41782, + 47210, + 43372, + 42937, + 38790, + 42439, + 32947, + 156186, + 42539, + 44595, + 55346, + 38826, + 65283, + 35891, + 37027, + 40119, + 34257, + 34353, + 42607, + 41648, + 42961, + 33157, + 41603, + 40438, + 41209, + 36350, + 34110, + 39515, + 42438, + 38371, + 56556, + 43119, + 41874, + 42307, + 37227, + 40167, + 53609, + 36162, + 35400, + 36913, + 34316, + 33089, + 43075, + 31360, + 44320, + 35260, + 34420, + 35084, + 49860, + 34251, + 36226, + 34400, + 36484, + 36207, + 30816, + 46179, + 39070, + 38449, + 47353, + 38315, + 36931, + 168368, + 38809, + 44529, + 35394, + 37942, + 43083, + 36893, + 36182, + 38663, + 45350, + 38723, + 32080, + 39779, + 41206, + 43793, + 36511, + 32698, + 46778, + 37052, + 46764, + 36394, + 39528, + 36544, + 39673, + 42018, + 45306, + 45646, + 45337, + 43595, + 32571, + 37836, + 38263, + 52838, + 39448, + 27122, + 49783, + 31646, + 27619, + 47029, + 44158, + 28167, + 36566, + 33958, + 31917, + 43258, + 39196, + 40969, + 40493, + 34429, + 40115, + 52006, + 44816, + 28709, + 43129, + 43021, + 34119, + 46800, + 31346, + 38015, + 32846, + 43384, + 36947, + 34634, + 35769, + 38185, + 44168, + 36871, + 37402, + 34860, + 88175, + 29685, + 35151, + 53752, + 37089, + 44435, + 34849, + 35888, + 33467, + 45299, + 48167, + 34621, + 31711, + 39708, + 64458, + 39450, + 40114, + 52421, + 34382, + 31729, + 32037, + 46173, + 50492, + 28817, + 46069, + 40065, + 36565, + 54392, + 44661, + 39246, + 42208, + 49887, + 48175, + 40494, + 66702, + 32527, + 40148, + 45021, + 45559, + 33192, + 28478, + 43845, + 35888, + 36704, + 50277, + 55039, + 32393, + 37071, + 47913, + 46894, + 40423, + 38028, + 33427, + 43055, + 47019, + 45306, + 46782, + 32735, + 41903, + 34293, + 35325, + 34800, + 49590, + 59773, + 40631, + 32531, + 35655, + 34274, + 36004, + 37414, + 46333, + 40449, + 35885, + 42403, + 35989, + 60782, + 38936, + 42049, + 30826, + 38650, + 38417, + 33823, + 36266, + 44728, + 39720, + 49964, + 66539, + 35208, + 49934, + 34843, + 31339, + 41887, + 35858, + 35539, + 35887, + 46475, + 28778, + 31708, + 57778, + 38788, + 35902, + 44438, + 29465, + 44808, + 38734, + 38383, + 42631, + 35074, + 45483, + 33689, + 39050, + 35742, + 74865, + 40750, + 41711, + 36017, + 40110, + 54058, + 44184, + 32392, + 35410, + 34728, + 41134, + 43819, + 43387, + 60330, + 46233, + 35024, + 51248, + 55118, + 48027, + 49269, + 89422, + 37445, + 45271, + 45963, + 41647, + 31337, + 44093, + 50771, + 41111, + 45246, + 41677, + 38235, + 37455, + 36786, + 71859, + 48982, + 39873, + 77789, + 32746, + 52268, + 40375, + 32773, + 37967, + 44006, + 41268, + 38281, + 29895, + 33469, + 32601, + 41087, + 37813, + 28627, + 55904, + 52649, + 55414, + 39980, + 33397, + 43420, + 72220, + 46559, + 37092, + 38654, + 49712, + 40544, + 40702, + 42896, + 38192, + 41790, + 37241, + 66633, + 43265, + 34333, + 35667, + 32698, + 45873, + 41936, + 42833, + 46049, + 36943, + 40701, + 35998, + 43522, + 31000, + 37983, + 40484, + 29525, + 69168, + 35192, + 36908, + 52726, + 35897, + 36738, + 37361, + 62998, + 38311, + 27760, + 34658, + 36709, + 41756, + 34002, + 40701, + 42127, + 29511, + 36715, + 38323, + 37661, + 62423, + 49301, + 38696, + 55416, + 36233, + 40866, + 36346, + 37691, + 33937, + 51164, + 32940, + 35817, + 39262, + 113407, + 33071, + 67918, + 40149, + 50647, + 44429, + 48505, + 59162, + 46091, + 39828, + 32312, + 30220, + 48197, + 56978, + 63424, + 90631, + 30765, + 36823, + 36419, + 48555, + 54143, + 46714, + 42712, + 42452, + 42298, + 42965, + 46174, + 41330, + 32511, + 68457, + 42768, + 34296, + 33429, + 47445, + 40462, + 47637, + 43749, + 37863, + 33520, + 41686, + 38656, + 29721, + 55338, + 49663, + 37335, + 47003, + 55946, + 38184, + 38634, + 36126, + 38794, + 31717, + 57616, + 39218, + 45660, + 40711, + 45067, + 37504, + 35781, + 42106, + 36813, + 30429, + 38820, + 48702, + 50071, + 39343, + 33097, + 37877, + 45604, + 43228, + 41906, + 36756, + 45346, + 34079, + 31269, + 47477, + 30999, + 35681, + 48943, + 37179, + 43023, + 39159, + 38863, + 41843, + 43781, + 35138, + 32062, + 38510, + 48753, + 53196, + 48104, + 33698 + ] + }, + { + "counters": [ + 39288, + 42097, + 49075, + 30291, + 84880, + 40406, + 36005, + 34302, + 43692, + 41060, + 37409, + 29622, + 52931, + 36096, + 38659, + 31776, + 36502, + 38537, + 32325, + 38486, + 40846, + 33337, + 36808, + 32126, + 33416, + 40254, + 42965, + 35826, + 45428, + 43858, + 43875, + 37534, + 30613, + 30972, + 37558, + 36325, + 39205, + 40104, + 52544, + 37465, + 41471, + 40642, + 32648, + 39976, + 39747, + 28740, + 46482, + 68850, + 65994, + 43215, + 34436, + 37414, + 40928, + 37610, + 36965, + 38110, + 36523, + 35136, + 48201, + 38753, + 41337, + 44073, + 37797, + 44890, + 40991, + 46313, + 32421, + 32410, + 65121, + 37126, + 46197, + 36867, + 45264, + 70524, + 36114, + 35144, + 32491, + 38829, + 46142, + 46201, + 43415, + 41865, + 37074, + 44579, + 50100, + 65325, + 40397, + 33075, + 45128, + 43587, + 50103, + 36202, + 44386, + 31181, + 36974, + 32309, + 46092, + 37467, + 31228, + 39049, + 38972, + 69450, + 47240, + 43926, + 48753, + 33031, + 43499, + 38119, + 35007, + 47987, + 29610, + 42845, + 43388, + 40596, + 35257, + 48278, + 35147, + 79286, + 34927, + 45114, + 54553, + 40989, + 42511, + 53477, + 34488, + 25447, + 44344, + 68638, + 36417, + 34134, + 35494, + 39505, + 31952, + 35284, + 61028, + 49086, + 40149, + 39288, + 40712, + 40686, + 42077, + 44478, + 32280, + 33029, + 37326, + 32104, + 46023, + 34753, + 42144, + 43028, + 46950, + 34387, + 41997, + 34485, + 57272, + 33801, + 34169, + 39694, + 37516, + 41586, + 46131, + 43640, + 41004, + 49023, + 45010, + 40341, + 59133, + 49070, + 33478, + 30973, + 48628, + 73401, + 38424, + 44117, + 52265, + 34474, + 40109, + 29594, + 43874, + 62370, + 38459, + 39329, + 48335, + 40200, + 26698, + 56079, + 30195, + 57250, + 32387, + 69988, + 37465, + 33729, + 27642, + 31400, + 36883, + 51250, + 43637, + 53701, + 44988, + 31337, + 35089, + 37584, + 52636, + 45137, + 38134, + 31397, + 46550, + 32836, + 30099, + 46219, + 59317, + 49964, + 32726, + 29142, + 51822, + 57415, + 35938, + 37866, + 39632, + 31155, + 34464, + 32284, + 40124, + 45685, + 43687, + 31995, + 29691, + 38121, + 41346, + 32905, + 35015, + 39099, + 34967, + 40897, + 34134, + 36828, + 34211, + 31440, + 35904, + 35704, + 34186, + 36685, + 46131, + 33384, + 42272, + 34702, + 44301, + 41326, + 31744, + 43132, + 36302, + 33878, + 26620, + 31762, + 93857, + 40892, + 47364, + 39088, + 65444, + 31376, + 32018, + 52482, + 48371, + 30683, + 40157, + 45357, + 45949, + 36640, + 38250, + 40357, + 38784, + 57324, + 50743, + 33278, + 35485, + 35920, + 38826, + 40285, + 71262, + 58616, + 28563, + 48105, + 50388, + 48030, + 36255, + 33022, + 37550, + 62122, + 45971, + 35966, + 43592, + 33428, + 49857, + 40819, + 37453, + 35646, + 38704, + 46222, + 45553, + 46520, + 41320, + 32920, + 41401, + 42517, + 55048, + 35894, + 35030, + 37752, + 42864, + 52276, + 49179, + 43188, + 37476, + 29794, + 48014, + 48429, + 32284, + 32902, + 30973, + 39900, + 35218, + 43525, + 35786, + 40057, + 31084, + 40032, + 36468, + 35619, + 40017, + 40710, + 43783, + 39022, + 40873, + 45852, + 38099, + 42456, + 41686, + 44042, + 39066, + 45337, + 35016, + 36959, + 34844, + 43626, + 56840, + 59007, + 34641, + 35165, + 34557, + 49247, + 51175, + 30218, + 29409, + 46636, + 35038, + 42507, + 64838, + 35623, + 56953, + 53161, + 32465, + 63787, + 42409, + 43941, + 40982, + 50611, + 24521, + 45284, + 43170, + 45232, + 28189, + 38504, + 39251, + 47606, + 40453, + 46539, + 44798, + 49539, + 62452, + 30505, + 34104, + 47536, + 34518, + 51378, + 68255, + 39403, + 36474, + 57475, + 55709, + 37129, + 55947, + 36211, + 42249, + 42584, + 36772, + 39014, + 40350, + 36305, + 33188, + 40507, + 41025, + 43101, + 76305, + 36635, + 51056, + 41695, + 49069, + 41161, + 37498, + 33733, + 47597, + 44610, + 42143, + 39828, + 45279, + 46671, + 36024, + 44674, + 34697, + 42047, + 35408, + 61314, + 33359, + 49013, + 32364, + 32005, + 35847, + 39234, + 43894, + 36599, + 35645, + 35893, + 45106, + 42035, + 46570, + 45807, + 43492, + 45726, + 38285, + 39658, + 43453, + 52772, + 40435, + 66527, + 49631, + 112020, + 34361, + 33472, + 31852, + 34181, + 34000, + 56193, + 28838, + 60733, + 48631, + 36319, + 36992, + 36672, + 43305, + 37356, + 36634, + 39092, + 37233, + 46048, + 53387, + 49250, + 39281, + 35300, + 86644, + 40471, + 43337, + 63865, + 36130, + 48564, + 52723, + 37504, + 41078, + 46006, + 78168, + 34929, + 36552, + 33039, + 33942, + 52832, + 35305, + 35439, + 34506, + 38600, + 33441, + 49319, + 54267, + 35182, + 37519, + 38279, + 29687, + 42115, + 45050, + 85194, + 39252, + 50548, + 42308, + 46117, + 29674, + 37772, + 38766, + 32359, + 39779, + 35698, + 35906, + 44134, + 47642, + 33328, + 40266, + 44871, + 57928, + 57123, + 44303, + 44570, + 35693, + 29125, + 63552, + 38403, + 48289, + 51153, + 50125, + 37533, + 44699, + 77524, + 38286, + 35336, + 47725, + 43120, + 46169, + 26357, + 44406, + 31462, + 40406, + 50215, + 28399, + 59314, + 33758, + 50154, + 32602, + 43904, + 38777, + 37600, + 38485, + 37741, + 50111, + 34135, + 40828, + 38159, + 41013, + 40688, + 34673, + 41383, + 35916, + 38547, + 37416, + 43869, + 37606, + 42000, + 49751, + 33534, + 42983, + 36211, + 47062, + 41835, + 42931, + 42976, + 48070, + 46853, + 34768, + 33150, + 30476, + 49046, + 33817, + 32882, + 33027, + 34546, + 38716, + 38298, + 52991, + 54427, + 59671, + 40978, + 36751, + 49794, + 44254, + 42147, + 32927, + 43601, + 39984, + 52741, + 38937, + 36472, + 32975, + 40179, + 48561, + 63769, + 35446, + 35433, + 35759, + 43069, + 37495, + 59501, + 42601, + 47684, + 53837, + 38895, + 44116, + 67735, + 44494, + 49609, + 35701, + 44082, + 77221, + 38075, + 34894, + 37785, + 33579, + 42391, + 52786, + 41616, + 34257, + 38723, + 34151, + 29466, + 45887, + 53270, + 40441, + 37738, + 49852, + 46442, + 44059, + 40455, + 42299, + 47774, + 49093, + 42434, + 40048, + 36037, + 35304, + 30859, + 46513, + 42562, + 53622, + 55536, + 34284, + 37735, + 27103, + 46858, + 39564, + 44581, + 44887, + 35715, + 40744, + 52554, + 36761, + 29253, + 46266, + 60076, + 65526, + 42421, + 34207, + 40210, + 32209, + 57138, + 34331, + 46043, + 32941, + 37968, + 40799, + 36043, + 50535, + 41100, + 36082, + 37057, + 30776, + 33454, + 35934, + 32782, + 42868, + 37400, + 45347, + 34930, + 33096, + 32294, + 43682, + 33588, + 44013, + 44849, + 43805, + 37686, + 47369, + 43454, + 44580, + 49637, + 38902, + 39817, + 40348, + 38598, + 48537, + 42512, + 39338, + 44305, + 71435, + 46585, + 40601, + 33210, + 40539, + 49574, + 57007, + 46764, + 42893, + 28344, + 37346, + 34905, + 43115, + 45622, + 36524, + 44530, + 37934, + 33178, + 31134, + 40529, + 38375, + 50406, + 57959, + 35888, + 35803, + 42679, + 35054, + 32867, + 52375, + 48835, + 36461, + 39134, + 32372, + 40285, + 37472, + 41832, + 31886, + 46509, + 48606, + 39267, + 38648, + 32150, + 51530, + 38690, + 47940, + 1137027, + 36294, + 56900, + 37854, + 38654, + 30248, + 39040, + 41405, + 48795, + 38607, + 48546, + 36241, + 36584, + 39174, + 38609, + 33321, + 33750, + 35230, + 32705, + 45007, + 39835, + 49048, + 41866, + 35905, + 43691, + 50432, + 60910, + 42821, + 45823, + 45264, + 34274, + 36249, + 43423, + 41505, + 37006, + 32006, + 33829, + 27738, + 46618, + 35686, + 41152, + 43543, + 42514, + 39853, + 69072, + 45640, + 32963, + 41750, + 44065, + 47674, + 42937, + 35416, + 36334, + 35983, + 39885, + 39356, + 43684, + 51625, + 40092, + 35711, + 52587, + 43096, + 50801, + 33150, + 56657, + 34822, + 40207, + 34265, + 46912, + 36050, + 38544, + 42249, + 48996, + 43074, + 41705, + 36997, + 40267, + 47339, + 46891, + 40012, + 30728, + 34645, + 30902, + 38877, + 47136, + 36428, + 42375, + 41781, + 40494, + 31772, + 32334, + 32807, + 52005, + 53853, + 49659, + 45390, + 51397, + 43339, + 41979, + 40829, + 95947, + 44509, + 45944, + 38332, + 29385, + 38108, + 40726, + 39991, + 36755, + 42142, + 31223, + 32656, + 42842, + 36899, + 38585, + 76715, + 38932, + 39402, + 39240, + 44734, + 34618, + 39436, + 78858, + 49514, + 40154, + 45915, + 50102, + 43037, + 38600, + 37594, + 46244, + 40392, + 39252, + 33555, + 40806, + 62250, + 37845, + 32939, + 33755, + 44000, + 35360, + 39285, + 47054, + 37085, + 38134, + 40736, + 31805, + 49100, + 56857, + 33751, + 40062, + 69607, + 62311, + 44674, + 51030, + 38943, + 34599, + 39751, + 38411, + 47366, + 33807, + 51376, + 39137, + 38252, + 31507, + 49147, + 51764, + 39427, + 69252, + 45355, + 42918, + 39478, + 33097, + 45057, + 38131, + 125921, + 44421, + 60230, + 34578, + 36912, + 36533, + 48378, + 36523, + 32179, + 37313, + 31813, + 45141, + 38550, + 38554, + 35859, + 33989, + 58082, + 37238, + 49264, + 35356, + 33925, + 36676, + 37887, + 37216, + 30194, + 38781, + 32849, + 35843, + 53407, + 41577, + 33880, + 32942, + 33949, + 60698, + 34115, + 40238, + 35348, + 34665, + 41809, + 55942, + 31670, + 65208, + 42783, + 46810, + 43975, + 34654, + 40401, + 35740, + 39624, + 46646, + 47685, + 39122, + 39462, + 54481, + 41829, + 45585, + 33905, + 45828, + 35066, + 32948, + 34249, + 60650, + 38433, + 41491, + 43715, + 35595, + 36664, + 49949, + 42246, + 44742, + 41693, + 37663, + 60914, + 79532, + 37468, + 38360, + 57690, + 47171, + 46533, + 48141, + 33185, + 34875, + 32304, + 34628, + 32979, + 41086, + 46282, + 53254, + 42033, + 42608, + 40054, + 42535, + 39183, + 42838, + 56698, + 33445, + 45815, + 39764, + 52419, + 43150, + 32115, + 38134, + 47551, + 37574, + 30502, + 37340, + 37489, + 39444, + 49514, + 35814, + 42343, + 57425, + 43407, + 47191, + 39075, + 37018, + 36177, + 38060, + 41842, + 53406, + 35419, + 33277, + 41068, + 48434, + 40705, + 51274, + 30890, + 47219, + 41930, + 40118, + 39143, + 39974, + 29243, + 37588, + 35349, + 31045, + 44579, + 28354, + 50523, + 36392, + 35400, + 48307, + 35033, + 33691, + 62168, + 41689, + 36187, + 56187, + 32496, + 43430, + 43628, + 39589, + 46877, + 36403, + 34113, + 56989, + 47433, + 36452, + 37552, + 39694, + 41156, + 34172, + 39848, + 33920, + 32907, + 44544, + 35604, + 42088, + 43766, + 41787, + 35388, + 44759, + 43956, + 25710, + 35467, + 42173, + 37395, + 39889, + 32741, + 36769, + 42395, + 44973, + 37121, + 35767, + 33841, + 56072, + 34538, + 50664, + 46747, + 30410, + 45904, + 32969, + 32691, + 56426, + 44152, + 43050, + 34447, + 40627, + 47404, + 52609, + 63462, + 36409, + 57223, + 50209, + 33944, + 33810, + 29281, + 208734, + 34445, + 44494, + 41309, + 32158, + 31268, + 67792, + 52569, + 43454, + 36498, + 39073, + 37917, + 29780, + 42712, + 41948, + 31618, + 46753, + 42935, + 34734, + 32702, + 38018, + 40420, + 43147, + 41041, + 57742, + 31106, + 43155, + 32278, + 41679, + 32584, + 31750, + 36243, + 36511, + 45068, + 42618, + 57157, + 47703, + 29307, + 41014, + 37944, + 27449, + 35636, + 45190, + 36179, + 35052, + 37557, + 39072, + 44684, + 37890, + 43482, + 31485, + 62263, + 44648, + 32715, + 55251, + 37968, + 38054, + 44723, + 33624, + 31879, + 26759, + 41672, + 36994, + 34258, + 40720, + 58700, + 45519, + 39789, + 44163, + 35818, + 35363, + 34976, + 37278, + 55714, + 37053, + 29118, + 44854, + 38670, + 35128, + 55309, + 41018, + 47327, + 36252, + 37838, + 38512, + 35572, + 32486, + 38218, + 36891, + 31930, + 36237, + 43478, + 47428, + 62614, + 36758, + 29102, + 37555, + 32856, + 45242, + 51271, + 32840, + 59683, + 51026, + 37376, + 33830, + 40909, + 38001, + 36200, + 43433, + 43863, + 62880, + 24959, + 38651, + 31461, + 37545, + 33389, + 30801, + 35326, + 38254, + 31665, + 38408, + 30517, + 38684, + 38368, + 47386, + 48447, + 33575, + 38844, + 42723, + 36957, + 42681, + 56225, + 34287, + 37795, + 46213, + 35688, + 42636, + 36255, + 49509, + 38669, + 35601, + 35461, + 60445, + 45993, + 34602, + 42159, + 37476, + 87699, + 62382, + 32624, + 35566, + 32956, + 51989, + 40043, + 42977, + 30279, + 41095, + 47221, + 38424, + 39876, + 46896, + 38782, + 54652, + 43787, + 50497, + 47711, + 38711, + 62990, + 44286, + 48476, + 35277, + 46140, + 49083, + 37971, + 39058, + 42348, + 67048, + 39101, + 46509, + 31474, + 52662, + 37657, + 58474, + 27276, + 41369, + 40370, + 40813, + 44602, + 32717, + 41552, + 42134, + 46948, + 40399, + 42304, + 40641, + 49123, + 43694, + 35112, + 45264, + 40206, + 35237, + 43218, + 34544, + 47785, + 40144, + 37591, + 61262, + 41047, + 48652, + 34039, + 52921, + 36090, + 37753, + 33176, + 64104, + 42966, + 51138, + 35697, + 40721, + 32912, + 42079, + 69873, + 58183, + 41193, + 43432, + 39641, + 36866, + 43660, + 32826, + 57624, + 49427, + 42172, + 40381, + 40291, + 36790, + 30930, + 42680, + 44462, + 34249, + 45181, + 35432, + 42033, + 56309, + 36628, + 36124, + 40088, + 34696, + 46439, + 39920, + 42843, + 42006, + 37207, + 44969, + 44381, + 35853, + 34427, + 50970, + 43886, + 39483, + 34588, + 31658, + 48616, + 34652, + 37404, + 36606, + 50450, + 33434, + 40926, + 42366, + 42753, + 36260, + 50225, + 46176, + 42772, + 46498, + 41835, + 37344, + 35466, + 36549, + 46278, + 49584, + 48733, + 38897, + 29815, + 51717, + 57024, + 59516, + 40355, + 51897, + 42808, + 37109, + 41516, + 40524, + 41835, + 33259, + 37485, + 44963, + 30998, + 40745, + 43611, + 60854, + 33245, + 45084, + 36908, + 38818, + 74375, + 33248, + 48167, + 36320, + 39360, + 81021, + 40447, + 53750, + 39885, + 57900, + 53448, + 50935, + 40734, + 52589, + 42569, + 37634, + 50142, + 42395, + 36391, + 37038, + 31633, + 34762, + 39144, + 37278, + 47512, + 38227, + 48007, + 57245, + 60695, + 41585, + 43281, + 49946, + 37019, + 40490, + 36619, + 29186, + 39114, + 32219, + 31000, + 32871, + 37099, + 29268, + 29429, + 35161, + 33398, + 39984, + 34386, + 45173, + 36504, + 43021, + 31800, + 33980, + 281193, + 44788, + 50048, + 35159, + 47043, + 36093, + 31644, + 38206, + 44095, + 37169, + 34531, + 42150, + 82396, + 49100, + 43544, + 46062, + 80797, + 42355, + 39869, + 29012, + 37404, + 45806, + 41310, + 46407, + 36488, + 41349, + 51159, + 30318, + 28742, + 37223, + 36200, + 33443, + 43989, + 44360, + 29405, + 32101, + 44686, + 40555, + 40001, + 34706, + 35298, + 29810, + 55854, + 31224, + 45746, + 36595, + 48094, + 49314, + 53287, + 30487, + 71037, + 45352, + 51137, + 33136, + 33088, + 45517, + 44772, + 50314, + 32469, + 42827, + 37235, + 31415, + 42097, + 32737, + 33751, + 49297, + 49264, + 57823, + 35301, + 46862, + 35005, + 52358, + 40315, + 64598, + 48560, + 33439, + 50631, + 48010, + 40656, + 40452, + 32766, + 35706, + 49741, + 68055, + 40130, + 39547, + 39644, + 45850, + 30827, + 39649, + 31941, + 44727, + 42502, + 56488, + 81541, + 34509, + 32669, + 38278, + 47776, + 37631, + 41905, + 31316, + 44203, + 45662, + 43316, + 30742, + 35932, + 38513, + 32201, + 33482, + 47844, + 41483, + 40883, + 33229, + 44284, + 54122, + 39205, + 44901, + 31180, + 42337, + 51375, + 40055, + 38752, + 35740, + 42114, + 32371, + 49927, + 30997, + 44501, + 81277, + 32989, + 44535, + 35828, + 28750, + 40914, + 33330, + 41717, + 34525, + 50331, + 35630, + 33289, + 33396, + 43557, + 37496, + 39260, + 40640, + 34531, + 42168, + 34857, + 134504, + 39304, + 47625, + 41986, + 35090, + 63880, + 29501, + 39719, + 33226, + 45790, + 47315, + 49422, + 35043, + 45459, + 47335, + 41738, + 32299, + 33808, + 37266, + 41458, + 36338, + 43660, + 28262, + 41677, + 37143, + 43848, + 43276, + 40865, + 38829, + 56334, + 41220, + 60776, + 41644, + 36717, + 57731, + 37827, + 47008, + 34465, + 50254, + 37542, + 39062, + 43136, + 35988, + 35659, + 30231, + 46785, + 30522, + 68518, + 45234, + 38762, + 31226, + 39317, + 36558, + 34247, + 34233, + 34532, + 38610, + 37909, + 41642, + 38121, + 42171, + 42929, + 38561, + 46629, + 34488, + 30628, + 37996, + 55985, + 30876, + 37277, + 61250, + 39451, + 32912, + 39143, + 44542, + 32319, + 44847, + 39388, + 47231, + 52212, + 66565, + 51268, + 41783, + 38249, + 29840, + 47295, + 62334, + 63013, + 40792, + 36952, + 28939, + 41457, + 76723, + 38611, + 60836, + 39805, + 37400, + 42996, + 31071, + 44277, + 47973, + 30537, + 43930, + 55162, + 34946, + 40167, + 31539, + 62362, + 35460, + 53074, + 32638, + 52112, + 50142, + 31727, + 50334, + 41797, + 60503, + 38101, + 50116, + 52912, + 45275, + 46138, + 46467, + 42605, + 38409, + 34054, + 59228, + 28861, + 32259, + 48964, + 50507, + 44947, + 42799, + 35294, + 27369, + 39680, + 36691, + 38776, + 28489, + 39504, + 29518, + 37219, + 37163, + 41699, + 41721, + 50584, + 36972, + 30267, + 33786, + 40085, + 35713, + 38878, + 36893, + 46137, + 41675, + 46605, + 48797, + 39095, + 39322, + 31326, + 35826, + 35512, + 43049, + 37917, + 41598, + 38375, + 57075, + 39979, + 30152, + 31927, + 31666, + 48277, + 50013, + 37260, + 37807, + 43059, + 40020, + 43292, + 41102, + 43723, + 39984, + 35452, + 63767, + 30139, + 45785, + 52362, + 40272, + 32880, + 40424, + 46345, + 67971, + 35287, + 59640, + 36609, + 36252, + 41883, + 49707, + 35140, + 48359, + 42887, + 37164, + 40984, + 39234, + 63448, + 40332, + 33721, + 36104, + 44087, + 37991, + 40252, + 35302, + 36665, + 36822, + 34940, + 41995, + 43455, + 47327, + 35918, + 38126, + 37426, + 37356, + 34218, + 39937, + 45158, + 43946, + 45252, + 37566, + 35554, + 30901, + 32466, + 36660, + 36473, + 57433, + 41669, + 48796, + 56355, + 42404, + 35049, + 43806, + 45582, + 59788, + 46726, + 31454, + 68225, + 56050, + 30948, + 37229, + 38405, + 33928, + 32691, + 41971, + 46792, + 47761, + 34724, + 40923, + 36323, + 34851, + 31678, + 53142, + 42511, + 52573, + 39755, + 36955, + 33737, + 31806, + 43447, + 38991, + 35685, + 35673, + 28601, + 36642, + 29916, + 33613, + 36416, + 45245, + 32085, + 30470, + 39611, + 95026, + 36864, + 42972, + 26738, + 76060, + 40941, + 46111, + 47513, + 32207, + 28900, + 38939, + 31375, + 39037, + 34773, + 40234, + 35599, + 33849, + 35107, + 29178, + 36697, + 35681, + 63922, + 37086, + 40019, + 34435, + 31375, + 49015, + 46435, + 52087, + 56851, + 40623, + 37149, + 30566, + 175865, + 38823, + 46578, + 43055, + 32814, + 36081, + 36945, + 51793, + 36108, + 37466, + 34873, + 31615, + 46625, + 46636, + 39179, + 44757, + 43109, + 47291, + 39235, + 43655, + 36913, + 35419, + 34771, + 37816, + 35313, + 53978, + 66353, + 36289, + 39242, + 43973, + 41896, + 39574, + 34321, + 36979, + 37306, + 51573, + 36849, + 42580, + 39286, + 65467, + 33964, + 27086, + 34583, + 35875, + 47324, + 40058, + 41107, + 38393, + 31094, + 36829, + 38835, + 40642, + 37500, + 49028, + 34670, + 36003, + 140534, + 42587, + 45118, + 48887, + 36870, + 37177, + 41681, + 29001, + 48181, + 34585, + 37852, + 38964, + 38747, + 39268, + 60030, + 34438, + 35947, + 33463, + 49872, + 37153, + 53463, + 35549, + 38070, + 37896, + 36350, + 31438, + 59672, + 30351, + 30554, + 37701, + 46274, + 37940, + 47945, + 37936, + 35277, + 55141, + 36429, + 39711, + 38960, + 41270, + 38824, + 37399 + ] + }, + { + "counters": [ + 38543, + 42483, + 33829, + 42356, + 42412, + 40729, + 42377, + 45410, + 43159, + 47991, + 40201, + 51066, + 36036, + 38398, + 35822, + 283469, + 39017, + 38456, + 32361, + 42165, + 32856, + 39071, + 44292, + 42483, + 28997, + 43534, + 42606, + 35161, + 26582, + 48325, + 34732, + 37376, + 31097, + 42058, + 41196, + 46613, + 42792, + 37977, + 45961, + 37652, + 30361, + 40022, + 34886, + 33034, + 68397, + 37115, + 38740, + 49213, + 33612, + 49522, + 43041, + 25904, + 32492, + 38658, + 49635, + 48509, + 43857, + 56521, + 81051, + 63814, + 38666, + 45757, + 45853, + 47810, + 43785, + 36133, + 31523, + 41713, + 46550, + 41516, + 33503, + 43458, + 31139, + 62215, + 37101, + 39327, + 33687, + 39460, + 48226, + 36940, + 42120, + 44725, + 44098, + 39468, + 50826, + 39128, + 40438, + 35247, + 39129, + 46473, + 36676, + 39722, + 35378, + 45847, + 30386, + 35784, + 36405, + 39217, + 39061, + 47427, + 37421, + 41211, + 36795, + 32387, + 30516, + 28586, + 30354, + 49329, + 68918, + 41202, + 45916, + 45153, + 33224, + 39459, + 45384, + 44157, + 38807, + 45797, + 42913, + 29623, + 29794, + 37036, + 41292, + 32674, + 61102, + 62108, + 35751, + 37646, + 43960, + 33576, + 32242, + 42853, + 34553, + 37031, + 34352, + 38154, + 39261, + 41412, + 36544, + 35690, + 54862, + 37630, + 36465, + 35652, + 33137, + 55889, + 37735, + 53832, + 39063, + 40178, + 44302, + 79072, + 42624, + 49597, + 35968, + 57244, + 42774, + 58829, + 43893, + 40991, + 46506, + 39603, + 41326, + 41102, + 51753, + 38618, + 46746, + 33808, + 47977, + 38618, + 59225, + 39724, + 37733, + 43813, + 33132, + 59539, + 36670, + 46779, + 46775, + 37264, + 43468, + 33575, + 34566, + 64551, + 38779, + 33647, + 37012, + 36947, + 38374, + 37842, + 39432, + 56761, + 46248, + 42176, + 41405, + 35424, + 112538, + 34462, + 58035, + 36650, + 41213, + 35223, + 29403, + 43011, + 39768, + 28150, + 40529, + 36053, + 46691, + 41205, + 39449, + 49343, + 40499, + 32633, + 43302, + 46748, + 39331, + 39435, + 41663, + 30929, + 38372, + 53168, + 46309, + 54192, + 49859, + 41175, + 39135, + 42578, + 32031, + 33317, + 35965, + 42480, + 37788, + 34787, + 47782, + 30224, + 36401, + 49018, + 49481, + 69576, + 37901, + 42309, + 50993, + 46226, + 39382, + 37711, + 43305, + 103516, + 44773, + 45136, + 35332, + 33720, + 45372, + 32179, + 30068, + 33429, + 60284, + 42194, + 42905, + 42213, + 50478, + 35108, + 39978, + 39112, + 30794, + 43814, + 36725, + 64549, + 35032, + 44311, + 35494, + 40717, + 30296, + 41928, + 41814, + 46943, + 41727, + 39347, + 35693, + 43806, + 38883, + 40213, + 32632, + 70446, + 28183, + 51784, + 28015, + 41270, + 34582, + 34169, + 39903, + 44732, + 57198, + 47981, + 46327, + 42709, + 27999, + 37675, + 38481, + 40559, + 40439, + 47982, + 53073, + 40700, + 42448, + 35563, + 44098, + 37917, + 46282, + 36170, + 41717, + 38303, + 43145, + 30600, + 44763, + 53566, + 39961, + 42704, + 32185, + 44028, + 38444, + 37332, + 47071, + 75344, + 37016, + 58635, + 38472, + 44501, + 44586, + 49976, + 35456, + 34159, + 43291, + 39076, + 36182, + 31930, + 42858, + 44740, + 35691, + 33254, + 33985, + 56437, + 38050, + 37269, + 34802, + 43702, + 69904, + 33154, + 38988, + 35780, + 47590, + 33016, + 42077, + 41051, + 73099, + 33511, + 39562, + 44275, + 41272, + 37204, + 51647, + 40925, + 152094, + 40098, + 38325, + 38540, + 34436, + 36129, + 41534, + 36026, + 48188, + 40408, + 59298, + 45365, + 44589, + 40909, + 36563, + 42424, + 43891, + 38801, + 48598, + 39086, + 34369, + 42069, + 41462, + 64933, + 59419, + 35277, + 32137, + 27140, + 36825, + 32652, + 45315, + 50061, + 48286, + 57627, + 41721, + 43593, + 39826, + 29420, + 28782, + 46269, + 43291, + 58450, + 42591, + 56563, + 51153, + 43879, + 36197, + 38280, + 43001, + 41728, + 31242, + 45175, + 26321, + 46333, + 56968, + 35764, + 38390, + 44785, + 41852, + 45593, + 41210, + 43044, + 39478, + 40477, + 46822, + 29428, + 32354, + 36014, + 34735, + 36993, + 48492, + 32046, + 40400, + 33094, + 37081, + 54580, + 51191, + 36996, + 41109, + 49126, + 29336, + 34608, + 38918, + 35684, + 51362, + 37203, + 35396, + 59539, + 41483, + 45599, + 44075, + 42317, + 40642, + 46947, + 44736, + 46820, + 37824, + 37616, + 29028, + 43019, + 40797, + 65363, + 35362, + 31174, + 36701, + 42664, + 35919, + 46119, + 38846, + 35523, + 49944, + 42424, + 40088, + 35688, + 43637, + 35986, + 37451, + 129612, + 44326, + 44048, + 33750, + 47741, + 36247, + 36707, + 40822, + 40430, + 70748, + 38849, + 42708, + 38492, + 105018, + 46372, + 98506, + 54973, + 32826, + 77855, + 36487, + 44930, + 46425, + 54197, + 36879, + 38757, + 42360, + 59815, + 34331, + 40707, + 39374, + 45847, + 38165, + 34851, + 50204, + 32116, + 80736, + 46450, + 72436, + 39594, + 36489, + 42143, + 41568, + 43426, + 40030, + 41579, + 36483, + 28771, + 42524, + 44196, + 39115, + 44624, + 59701, + 64708, + 40687, + 47536, + 48953, + 34054, + 36527, + 44611, + 42580, + 39253, + 31405, + 33856, + 42048, + 41580, + 48235, + 31036, + 40374, + 49164, + 43227, + 34942, + 55726, + 32311, + 35483, + 35828, + 44729, + 33583, + 41809, + 37050, + 34529, + 38426, + 48880, + 46918, + 34048, + 55189, + 32503, + 32700, + 39947, + 37112, + 47174, + 58374, + 44715, + 50917, + 48801, + 61756, + 39325, + 35120, + 48865, + 27503, + 55903, + 51833, + 40549, + 42998, + 57217, + 45659, + 36046, + 64099, + 46663, + 35327, + 36468, + 34709, + 39083, + 33819, + 39631, + 45842, + 41148, + 39261, + 46987, + 167233, + 33264, + 64728, + 39711, + 42731, + 42708, + 48803, + 37899, + 31925, + 53623, + 33540, + 43655, + 49344, + 36983, + 46736, + 35950, + 58332, + 42038, + 86443, + 46172, + 35983, + 56851, + 41950, + 36462, + 30696, + 43323, + 60442, + 42132, + 40358, + 44616, + 37984, + 37314, + 24459, + 30545, + 33774, + 59228, + 32430, + 33709, + 40231, + 31689, + 57165, + 33806, + 34864, + 39771, + 38150, + 43625, + 34549, + 32036, + 46646, + 42412, + 36969, + 50467, + 59065, + 39156, + 35169, + 33320, + 34439, + 33150, + 39778, + 49794, + 42267, + 41743, + 33770, + 31939, + 39100, + 34162, + 34513, + 43906, + 32077, + 57683, + 36109, + 59264, + 40015, + 60217, + 39292, + 47878, + 35610, + 52014, + 40685, + 46898, + 35351, + 59540, + 52003, + 46524, + 38467, + 37657, + 37780, + 52314, + 44594, + 70065, + 37547, + 42206, + 32601, + 40532, + 39724, + 52202, + 34893, + 57804, + 34119, + 74120, + 35760, + 26387, + 44684, + 29582, + 49173, + 49291, + 34063, + 46326, + 52799, + 118505, + 51134, + 40976, + 36426, + 36147, + 41033, + 44592, + 36416, + 46240, + 31612, + 32720, + 31075, + 40517, + 44272, + 40578, + 44085, + 43553, + 35136, + 30482, + 38338, + 28287, + 40431, + 44888, + 43987, + 43894, + 40470, + 42638, + 45768, + 49515, + 46058, + 34929, + 35067, + 38673, + 71858, + 48976, + 35600, + 35325, + 37712, + 39536, + 47107, + 54216, + 41845, + 40959, + 49870, + 35219, + 36015, + 50779, + 46291, + 54560, + 36361, + 41265, + 42510, + 43378, + 34097, + 35505, + 50883, + 65028, + 42850, + 43843, + 36176, + 40129, + 32632, + 53324, + 50554, + 39538, + 46676, + 35487, + 53855, + 31369, + 32746, + 49661, + 46775, + 42782, + 31705, + 38687, + 29672, + 40473, + 36941, + 47052, + 35717, + 42364, + 38182, + 36957, + 56538, + 36458, + 65810, + 35839, + 35001, + 41181, + 50403, + 51332, + 31040, + 40027, + 32972, + 36357, + 34268, + 30742, + 39581, + 31498, + 35542, + 59685, + 55501, + 41910, + 39076, + 52208, + 52772, + 42573, + 43868, + 35102, + 27287, + 55726, + 44677, + 37560, + 49256, + 42247, + 52544, + 34260, + 34267, + 37613, + 31988, + 38296, + 38286, + 35481, + 36463, + 33142, + 45183, + 41299, + 38663, + 36730, + 78043, + 28573, + 57951, + 46404, + 48756, + 39560, + 50140, + 49219, + 40230, + 45865, + 45817, + 34848, + 29475, + 38367, + 37151, + 50693, + 29173, + 32070, + 32726, + 44387, + 29886, + 37692, + 31506, + 65637, + 40903, + 53458, + 36963, + 36709, + 51512, + 37864, + 56886, + 32698, + 44554, + 35036, + 41275, + 33550, + 44351, + 37252, + 40838, + 38339, + 29551, + 35948, + 32119, + 36207, + 40076, + 33622, + 44358, + 217139, + 44363, + 44368, + 45570, + 41782, + 50918, + 35789, + 39712, + 29104, + 40320, + 39076, + 50290, + 36250, + 33335, + 54726, + 40510, + 59122, + 30627, + 42549, + 37246, + 66380, + 46339, + 39085, + 32221, + 51948, + 32912, + 31798, + 51924, + 33882, + 40249, + 31785, + 40384, + 40958, + 74405, + 38234, + 30579, + 34066, + 46252, + 36082, + 53698, + 75089, + 49061, + 32649, + 32916, + 55082, + 34215, + 50075, + 34490, + 40232, + 29599, + 58787, + 36244, + 53376, + 47932, + 46300, + 43690, + 35067, + 40579, + 39246, + 48758, + 36512, + 40471, + 48006, + 66128, + 71474, + 39355, + 33686, + 46112, + 36060, + 40489, + 31998, + 39995, + 45341, + 39420, + 38459, + 41649, + 35358, + 43562, + 36562, + 36812, + 34826, + 35887, + 43870, + 48510, + 44631, + 39356, + 36590, + 44418, + 37181, + 41530, + 38003, + 58479, + 35904, + 50158, + 43860, + 41054, + 47260, + 35208, + 41320, + 33356, + 123273, + 35194, + 42830, + 48883, + 34989, + 52477, + 29123, + 54693, + 40374, + 34846, + 42562, + 46983, + 35862, + 33209, + 41292, + 47413, + 33179, + 37648, + 50695, + 43541, + 51277, + 40824, + 30282, + 40264, + 36656, + 33573, + 45308, + 28857, + 38062, + 38195, + 48016, + 39365, + 43440, + 36918, + 44347, + 52472, + 34032, + 67291, + 39701, + 51820, + 35920, + 40931, + 29550, + 30095, + 37501, + 31135, + 40840, + 34669, + 48926, + 42583, + 49820, + 34079, + 37280, + 41395, + 37123, + 35011, + 36450, + 45548, + 47036, + 62751, + 37904, + 61503, + 45830, + 54799, + 45957, + 44215, + 39957, + 34811, + 34405, + 37334, + 31839, + 44489, + 40083, + 29917, + 55719, + 38479, + 37531, + 41361, + 40365, + 36429, + 41924, + 45123, + 45807, + 55467, + 49136, + 42630, + 58922, + 34950, + 38429, + 32276, + 39254, + 36216, + 48687, + 33956, + 41818, + 53674, + 43603, + 43082, + 39382, + 71356, + 53702, + 42828, + 29009, + 50733, + 44682, + 52142, + 37020, + 74332, + 40390, + 31516, + 32464, + 49240, + 28173, + 35483, + 42609, + 33066, + 41418, + 42834, + 37006, + 35993, + 42685, + 49231, + 33616, + 30431, + 35258, + 29076, + 50340, + 43412, + 35525, + 30252, + 34759, + 38922, + 38530, + 31523, + 59456, + 40777, + 38789, + 45532, + 45230, + 49153, + 32861, + 38656, + 42591, + 34210, + 38719, + 37963, + 41604, + 36646, + 44708, + 36696, + 33010, + 34058, + 45619, + 38370, + 38799, + 30882, + 33714, + 46989, + 31584, + 35206, + 56719, + 36450, + 27585, + 40705, + 43657, + 29360, + 43998, + 33018, + 54795, + 41823, + 40809, + 38690, + 33176, + 36147, + 39784, + 37719, + 39753, + 35404, + 39141, + 30853, + 37792, + 37740, + 40750, + 53023, + 47890, + 36500, + 41173, + 38233, + 37726, + 30339, + 36374, + 56215, + 38203, + 37225, + 35485, + 39544, + 39034, + 32883, + 37260, + 34467, + 50028, + 41390, + 39060, + 60431, + 36097, + 42023, + 47610, + 34411, + 32964, + 39805, + 37380, + 34768, + 43123, + 49615, + 35066, + 64411, + 56642, + 45156, + 56702, + 30909, + 54872, + 40092, + 38250, + 42395, + 65518, + 36274, + 43270, + 41691, + 42333, + 43092, + 34917, + 45991, + 52393, + 36290, + 51647, + 47699, + 39818, + 29870, + 31056, + 48450, + 38675, + 40601, + 43946, + 34047, + 61854, + 42127, + 40800, + 39296, + 32733, + 45971, + 41339, + 32543, + 41900, + 48511, + 49265, + 34619, + 31926, + 33173, + 34523, + 55252, + 41066, + 44290, + 35996, + 49510, + 32416, + 28635, + 37853, + 38735, + 52354, + 31226, + 42617, + 40956, + 40840, + 40092, + 34572, + 37013, + 42728, + 48091, + 43727, + 41849, + 42031, + 32584, + 29708, + 41069, + 34663, + 38087, + 29861, + 62255, + 53188, + 47867, + 37041, + 44726, + 32558, + 35259, + 44877, + 39653, + 36000, + 31265, + 38714, + 34485, + 43759, + 48937, + 44310, + 49398, + 60373, + 34371, + 40843, + 33280, + 43078, + 44493, + 35364, + 37956, + 32106, + 45363, + 49936, + 59067, + 45848, + 38074, + 43713, + 39168, + 36944, + 32004, + 40741, + 55777, + 44789, + 33855, + 34382, + 67571, + 35783, + 38330, + 32585, + 32048, + 36312, + 42475, + 36267, + 38072, + 46670, + 33171, + 40821, + 32757, + 42832, + 46979, + 29204, + 40043, + 37338, + 67033, + 43403, + 39369, + 42540, + 35933, + 55016, + 45302, + 35906, + 34810, + 54593, + 36379, + 36517, + 41690, + 46850, + 35258, + 34701, + 39733, + 54112, + 48405, + 44676, + 39504, + 29814, + 52143, + 37941, + 55154, + 36290, + 41941, + 65877, + 33675, + 38679, + 37996, + 31782, + 35226, + 34454, + 44729, + 41049, + 64114, + 39036, + 61752, + 59203, + 34134, + 51824, + 44674, + 40647, + 38537, + 42280, + 36715, + 32395, + 40700, + 36258, + 34112, + 39158, + 39390, + 48791, + 42371, + 34929, + 34816, + 32684, + 34289, + 36203, + 41205, + 40002, + 41918, + 35024, + 43541, + 32553, + 34750, + 40824, + 36923, + 48156, + 39787, + 42495, + 41518, + 42565, + 42045, + 37472, + 41143, + 48178, + 44051, + 40189, + 45988, + 47010, + 34877, + 45192, + 43636, + 35032, + 43159, + 35381, + 31280, + 46600, + 37977, + 34987, + 39245, + 37221, + 39589, + 42462, + 50951, + 39441, + 57434, + 35933, + 31375, + 38064, + 33594, + 42219, + 36827, + 30736, + 33117, + 31336, + 30181, + 40724, + 38683, + 39714, + 42728, + 40690, + 32336, + 40813, + 97601, + 36773, + 40220, + 42856, + 50964, + 40782, + 42749, + 45068, + 40849, + 42012, + 33250, + 40663, + 42858, + 34121, + 66924, + 39154, + 48782, + 33889, + 37034, + 42561, + 41884, + 41270, + 38834, + 49093, + 41833, + 37360, + 49316, + 34836, + 35148, + 33390, + 38613, + 33283, + 33269, + 36331, + 42956, + 57156, + 47358, + 33703, + 51589, + 34627, + 39539, + 38315, + 32226, + 44362, + 51005, + 45745, + 55344, + 36650, + 45622, + 39876, + 42349, + 32277, + 41065, + 33413, + 52789, + 1117114, + 39217, + 30957, + 35249, + 58893, + 36606, + 33299, + 45207, + 33594, + 33983, + 36197, + 39774, + 33475, + 35893, + 43841, + 32226, + 42343, + 40957, + 40071, + 32754, + 45617, + 45568, + 37867, + 33462, + 36859, + 40681, + 30868, + 29221, + 41233, + 35711, + 34350, + 47079, + 49964, + 44107, + 48653, + 43347, + 42868, + 35966, + 36861, + 50752, + 64452, + 34707, + 43847, + 45407, + 37584, + 34290, + 46458, + 41883, + 38719, + 46262, + 35864, + 43172, + 40387, + 36867, + 36075, + 45004, + 38093, + 35701, + 43719, + 36141, + 40275, + 41518, + 62107, + 36864, + 32403, + 48718, + 41915, + 45434, + 44949, + 36520, + 38423, + 49010, + 45281, + 40731, + 51993, + 41680, + 45195, + 60840, + 41181, + 50175, + 35548, + 37388, + 39399, + 38812, + 31172, + 48842, + 27194, + 35671, + 41363, + 27123, + 37539, + 45124, + 41746, + 34588, + 36285, + 41986, + 41125, + 49175, + 63027, + 30333, + 36576, + 72173, + 41839, + 39696, + 46271, + 57046, + 63519, + 28450, + 41900, + 43134, + 59843, + 45230, + 41274, + 41295, + 40057, + 38578, + 47204, + 36433, + 33217, + 53402, + 74347, + 37478, + 30675, + 42057, + 39862, + 49595, + 40057, + 54268, + 36941, + 48755, + 28526, + 32877, + 41288, + 28338, + 44419, + 47194, + 39670, + 42276, + 45062, + 54191, + 38791, + 35583, + 31870, + 31125, + 26635, + 47509, + 33155, + 37108, + 37363, + 49957, + 31552, + 43577, + 38410, + 33522, + 37060, + 43339, + 36470, + 35834, + 39610, + 34402, + 34258, + 39790, + 38652, + 47928, + 38452, + 35254, + 45724, + 44436, + 46281, + 40037, + 43218, + 39823, + 33705, + 39032, + 35079, + 38049, + 40573, + 40071, + 48990, + 45388, + 33554, + 34566, + 29970, + 35195, + 51125, + 40719, + 63484, + 37992, + 41611, + 48990, + 35618, + 48602, + 47049, + 32991, + 41951, + 37489, + 33495, + 38145, + 34951, + 40920, + 39410, + 34517, + 37722, + 39249, + 31050, + 45944, + 36814, + 46728, + 42134, + 36663, + 38723, + 30907, + 41188, + 41720, + 37393, + 42552, + 32413, + 28390, + 41139, + 39588, + 62576, + 38780, + 49317, + 45365, + 54262, + 32900, + 41715, + 32267, + 36197, + 40638, + 37088, + 38244, + 32402, + 38579, + 82640, + 38811, + 33861, + 30214, + 27664, + 46674, + 46583, + 32191, + 43706, + 31474, + 42519, + 59470, + 37539, + 52540, + 61731, + 42221, + 38825, + 35514, + 42472, + 46061, + 31455, + 35193, + 47153, + 38981, + 35718, + 69751, + 42643, + 37962, + 38837, + 40176, + 42114, + 40682, + 40669, + 43248, + 31956, + 37735, + 32968, + 40720, + 43947, + 54242, + 33315, + 36856, + 39200, + 44168, + 37644, + 39361, + 33050, + 31362, + 40177, + 30550, + 43269, + 38989, + 33358, + 38126, + 41475, + 36183, + 41653, + 36414, + 36751, + 45224, + 40395, + 40781, + 30758, + 35854, + 41578, + 38234, + 37461, + 33258, + 41051, + 52180, + 33164, + 36016, + 40993, + 34221, + 49728, + 36078, + 37831, + 35666, + 43849, + 41150, + 47446, + 40752, + 52153, + 51713, + 43433, + 48593, + 51528, + 48212, + 35510, + 35903, + 48909, + 56535, + 45776, + 31828, + 32432, + 53525, + 53756, + 35121, + 41908, + 47541, + 45087, + 39541, + 34265, + 38187, + 32471, + 41144, + 45622, + 30558, + 45264, + 56568, + 34754, + 34589, + 28984, + 32378, + 40714, + 39137, + 35143, + 36299, + 51001, + 33996, + 37936, + 35451, + 45456, + 37812, + 35329, + 39337, + 62846, + 35029, + 77776, + 36477, + 35321, + 36007, + 49089, + 38872, + 44828, + 37934, + 43279, + 39001, + 42601, + 36760, + 32945, + 46496, + 49528, + 35104, + 40268, + 47503, + 47672, + 41928, + 40426, + 33849, + 38053, + 40547, + 40461, + 34396, + 49017, + 40545, + 36453, + 50138, + 49357, + 34073, + 38488, + 36284, + 36142, + 44223, + 29750, + 47505, + 42861, + 45904, + 38466, + 44714, + 41234, + 42725, + 38036, + 65261, + 44034, + 36633, + 42636, + 59865, + 54934, + 47826, + 45242, + 47627, + 55830, + 46359, + 50094, + 43695, + 41027, + 56398, + 45889, + 30531, + 39925, + 35423, + 35309, + 39690, + 37446, + 46791, + 45699, + 56930, + 41790, + 40202, + 45173, + 42553, + 32143, + 36249, + 35982, + 35016, + 53653, + 44877, + 42705, + 49123, + 33523, + 37615, + 34448, + 37353, + 41435, + 37009, + 38008, + 46883, + 37832, + 41496, + 29569, + 39257, + 38728, + 44752, + 48860, + 35589, + 50040, + 36541, + 52436, + 45330, + 63756, + 38724, + 40272, + 40355, + 40951, + 37344, + 35927, + 41674, + 46630, + 33582, + 35447, + 36607, + 34990, + 53263, + 29577, + 54557, + 43001, + 49350, + 45064, + 33829, + 39217, + 31600, + 31438, + 38647, + 61864, + 35677, + 38250, + 38234, + 44043, + 36425, + 42169, + 33823, + 39487, + 37705, + 53418, + 29211, + 39986, + 44909, + 40031, + 34961, + 60016, + 26597, + 33312, + 93778, + 40025, + 43670, + 41845, + 32120, + 37669, + 36908, + 37273, + 37138, + 33056, + 31791, + 45544, + 43183, + 37900, + 38680, + 30802, + 41795, + 34846, + 45569, + 51832, + 35438, + 39585, + 36572, + 65003, + 39196, + 44945, + 35310, + 47020, + 40715, + 35445, + 40579, + 32006, + 43221, + 40248, + 35652, + 46726, + 39254, + 36924, + 44141, + 43050, + 35768, + 42272, + 41432 + ] + }, + { + "counters": [ + 47223, + 64461, + 34968, + 30931, + 43665, + 41584, + 33635, + 41302, + 52601, + 44858, + 37069, + 35288, + 36281, + 36977, + 33039, + 35917, + 33029, + 51360, + 40059, + 42601, + 60832, + 37382, + 28282, + 44804, + 33891, + 34358, + 45146, + 39130, + 36263, + 44804, + 34420, + 40677, + 49000, + 37898, + 35487, + 34774, + 36964, + 43370, + 30816, + 34500, + 42542, + 46490, + 61462, + 32169, + 35540, + 30945, + 34173, + 45265, + 34459, + 47760, + 29847, + 35923, + 33054, + 42474, + 44966, + 42411, + 38268, + 37389, + 40974, + 29308, + 44471, + 32234, + 32980, + 45820, + 35324, + 45821, + 48880, + 41166, + 34388, + 45648, + 43974, + 38949, + 32010, + 34423, + 38188, + 36697, + 41533, + 52841, + 44217, + 39052, + 44944, + 31792, + 45336, + 36389, + 36893, + 42620, + 42437, + 42220, + 48884, + 35448, + 38056, + 38251, + 29679, + 58252, + 28015, + 47451, + 40167, + 44182, + 66244, + 37843, + 28506, + 32650, + 48833, + 38766, + 53810, + 27353, + 37518, + 57010, + 33056, + 49154, + 28591, + 34485, + 40489, + 47946, + 40289, + 41896, + 37583, + 62082, + 26221, + 34882, + 34647, + 37121, + 29211, + 75400, + 35136, + 50549, + 49322, + 42745, + 34009, + 28306, + 36361, + 38678, + 33231, + 116443, + 32982, + 34197, + 36673, + 42543, + 37332, + 46555, + 39004, + 51493, + 52029, + 40119, + 34257, + 32290, + 31857, + 32888, + 32199, + 34967, + 33746, + 40709, + 51661, + 54644, + 35927, + 47733, + 42000, + 59257, + 30608, + 37513, + 43304, + 59866, + 41963, + 40298, + 44554, + 31898, + 33123, + 45559, + 38385, + 47680, + 38174, + 39557, + 51412, + 39146, + 38072, + 35265, + 37038, + 35842, + 31119, + 39868, + 46282, + 28485, + 31032, + 31780, + 44794, + 42581, + 52812, + 43929, + 42350, + 39476, + 44126, + 45182, + 30871, + 43538, + 38337, + 36881, + 33086, + 1113486, + 46204, + 49361, + 53852, + 45168, + 59172, + 40984, + 40702, + 51162, + 44550, + 53901, + 53936, + 56020, + 29606, + 41012, + 40728, + 33169, + 62477, + 44961, + 42528, + 34022, + 40693, + 39312, + 36739, + 36002, + 40123, + 41222, + 41032, + 48406, + 43443, + 33014, + 45170, + 35348, + 42077, + 46043, + 35825, + 39791, + 50087, + 45037, + 32252, + 52819, + 37235, + 33153, + 51862, + 39225, + 37948, + 40490, + 41579, + 42439, + 43604, + 39246, + 29371, + 48069, + 36514, + 40076, + 34084, + 35284, + 51796, + 41487, + 38751, + 37429, + 34190, + 48742, + 31368, + 36954, + 33065, + 43610, + 31623, + 46149, + 33416, + 47551, + 55776, + 35718, + 66407, + 45981, + 38475, + 39004, + 38524, + 56738, + 35482, + 35313, + 57497, + 45463, + 40691, + 54799, + 47126, + 39174, + 39273, + 46328, + 41077, + 33625, + 38043, + 51739, + 50666, + 38310, + 51645, + 39331, + 43964, + 34846, + 30376, + 36792, + 51936, + 38603, + 57194, + 43356, + 41374, + 45003, + 36140, + 29146, + 42300, + 33476, + 43444, + 43466, + 44167, + 40915, + 44916, + 36832, + 35908, + 30925, + 35404, + 40070, + 34396, + 40863, + 44455, + 41465, + 43984, + 47902, + 45891, + 37178, + 35244, + 69911, + 43752, + 47211, + 33824, + 35996, + 40521, + 40634, + 35522, + 56670, + 45555, + 52643, + 30294, + 36710, + 46783, + 41899, + 38228, + 36859, + 37369, + 41084, + 38453, + 44416, + 29293, + 42832, + 28124, + 82159, + 35091, + 36403, + 50863, + 29834, + 43424, + 38847, + 44274, + 65284, + 38430, + 38980, + 51383, + 53325, + 32583, + 30106, + 39145, + 37075, + 41427, + 38343, + 38412, + 32784, + 33566, + 49404, + 39821, + 49189, + 43011, + 34985, + 37508, + 66752, + 37083, + 43766, + 64107, + 36175, + 56287, + 50391, + 40717, + 34980, + 51641, + 41674, + 40015, + 36966, + 45045, + 37931, + 38041, + 59766, + 40342, + 32603, + 44020, + 38512, + 63518, + 38929, + 38939, + 36808, + 34811, + 30170, + 34059, + 44301, + 36110, + 32315, + 37337, + 47886, + 35552, + 31232, + 42736, + 32930, + 32185, + 29818, + 40243, + 55801, + 29418, + 39388, + 44029, + 40492, + 35314, + 44070, + 34594, + 33579, + 41241, + 37900, + 49578, + 42300, + 36282, + 35055, + 31478, + 45365, + 47498, + 46270, + 42959, + 39032, + 50159, + 43849, + 41198, + 41006, + 50432, + 55384, + 31827, + 51884, + 38982, + 34063, + 33785, + 49898, + 32680, + 48944, + 33241, + 49574, + 29922, + 36230, + 39617, + 35154, + 52580, + 36251, + 35288, + 33434, + 38540, + 50126, + 44070, + 39785, + 46545, + 40923, + 53338, + 44507, + 34275, + 43716, + 47413, + 33801, + 43167, + 47281, + 57322, + 64442, + 39025, + 35338, + 50552, + 33019, + 36768, + 36790, + 46030, + 48019, + 44625, + 37004, + 53033, + 36792, + 35236, + 50167, + 32134, + 36348, + 35149, + 34286, + 33193, + 33320, + 42670, + 34323, + 45978, + 46566, + 45805, + 33175, + 38227, + 43483, + 34667, + 36791, + 24275, + 42027, + 40156, + 38741, + 37414, + 34466, + 50507, + 49051, + 32113, + 44762, + 51759, + 36595, + 33982, + 59064, + 34755, + 51645, + 55247, + 53944, + 32811, + 38911, + 35579, + 36066, + 41128, + 36201, + 35630, + 38011, + 47529, + 41075, + 34317, + 80075, + 35072, + 35631, + 36730, + 46042, + 32840, + 34389, + 31804, + 47793, + 35965, + 39802, + 37257, + 36005, + 37661, + 47980, + 42498, + 35755, + 34113, + 44002, + 50581, + 32172, + 29679, + 42226, + 38051, + 48719, + 32210, + 46874, + 40331, + 32421, + 43645, + 39197, + 25902, + 34345, + 46643, + 35082, + 33600, + 47495, + 33084, + 35588, + 62390, + 52368, + 29478, + 37089, + 48241, + 36439, + 49432, + 35342, + 42576, + 41187, + 284942, + 45493, + 48455, + 38037, + 28465, + 35049, + 39993, + 42134, + 58787, + 49938, + 47004, + 48723, + 87963, + 50178, + 36869, + 33308, + 39304, + 51625, + 36963, + 41986, + 32596, + 49581, + 42984, + 38196, + 51368, + 33696, + 35795, + 40739, + 34511, + 47930, + 44964, + 63967, + 40889, + 41178, + 42315, + 25727, + 45581, + 105613, + 56906, + 31719, + 40300, + 56976, + 33461, + 198299, + 35401, + 42772, + 41926, + 34733, + 43456, + 37274, + 35096, + 35656, + 38667, + 32796, + 43940, + 46701, + 32239, + 49321, + 40785, + 51164, + 41961, + 45570, + 62144, + 34175, + 34012, + 39234, + 67645, + 39433, + 42523, + 35502, + 39877, + 38784, + 34942, + 40663, + 40809, + 42276, + 38389, + 40148, + 32760, + 36899, + 37258, + 32065, + 50429, + 39130, + 62744, + 54621, + 43607, + 42757, + 35956, + 36080, + 28547, + 40295, + 32401, + 52047, + 113063, + 42097, + 52931, + 30593, + 44106, + 63867, + 45825, + 46533, + 28218, + 30118, + 37517, + 35365, + 33449, + 47301, + 45451, + 43986, + 30431, + 42111, + 33677, + 31792, + 32954, + 49790, + 43054, + 37941, + 34733, + 29829, + 35553, + 45337, + 39628, + 52066, + 34050, + 48793, + 34064, + 27945, + 36119, + 34006, + 44177, + 27183, + 42366, + 32657, + 37816, + 39822, + 44353, + 33848, + 44580, + 52836, + 42951, + 36409, + 39512, + 90766, + 70730, + 33152, + 90939, + 40910, + 44073, + 26731, + 35113, + 40299, + 46468, + 35064, + 45636, + 47424, + 36773, + 36282, + 35920, + 33227, + 41499, + 47851, + 34573, + 33867, + 39586, + 46910, + 33046, + 43714, + 47015, + 32446, + 36765, + 39618, + 45819, + 41301, + 40515, + 46639, + 35402, + 38893, + 140723, + 34380, + 28934, + 34696, + 39829, + 38898, + 41684, + 34040, + 34920, + 35983, + 54975, + 33218, + 40743, + 34830, + 49113, + 59016, + 32602, + 33360, + 42220, + 41708, + 35999, + 29092, + 34336, + 61666, + 30170, + 38515, + 43694, + 31069, + 33378, + 34420, + 38264, + 38692, + 67077, + 38432, + 36287, + 38890, + 46368, + 41189, + 32346, + 38830, + 31498, + 45047, + 42150, + 29780, + 59132, + 47134, + 42760, + 45212, + 63369, + 44136, + 43539, + 47529, + 36063, + 40228, + 56220, + 34673, + 45148, + 47208, + 34243, + 36127, + 38695, + 39858, + 39241, + 47733, + 39746, + 46779, + 27629, + 44932, + 67986, + 36988, + 43270, + 46289, + 42150, + 45632, + 32068, + 32963, + 35773, + 37853, + 40923, + 47499, + 40861, + 32213, + 38712, + 29802, + 45485, + 31056, + 39294, + 38429, + 49545, + 45902, + 39084, + 58849, + 48074, + 30940, + 58236, + 36271, + 35859, + 46438, + 37321, + 51412, + 34152, + 44656, + 51141, + 48339, + 36569, + 41080, + 41830, + 36521, + 36199, + 33135, + 43619, + 63384, + 47829, + 38747, + 62590, + 50266, + 46180, + 55119, + 35155, + 37793, + 40980, + 35345, + 40933, + 33637, + 30346, + 35669, + 36122, + 27378, + 43573, + 31467, + 37068, + 42720, + 43716, + 33963, + 41273, + 37020, + 28231, + 30246, + 54448, + 56348, + 33554, + 34010, + 33536, + 36880, + 33260, + 42189, + 33338, + 41133, + 32157, + 69716, + 43542, + 55178, + 35072, + 42295, + 47455, + 37533, + 33243, + 37991, + 50898, + 47476, + 38421, + 42922, + 50951, + 45495, + 42952, + 40687, + 33759, + 35306, + 34384, + 46569, + 41543, + 36822, + 28549, + 41631, + 38177, + 31827, + 37221, + 32329, + 45573, + 45269, + 40027, + 42942, + 36034, + 45432, + 35550, + 31907, + 51545, + 39919, + 40647, + 33222, + 35866, + 45144, + 35676, + 29589, + 47399, + 41881, + 38779, + 59646, + 29385, + 35867, + 37166, + 36627, + 41338, + 45606, + 31593, + 47943, + 32130, + 36340, + 56257, + 42639, + 30802, + 38346, + 42752, + 37349, + 36050, + 39126, + 46966, + 44948, + 53011, + 37522, + 31086, + 51894, + 34232, + 57748, + 40029, + 35070, + 26966, + 37687, + 47588, + 46671, + 45869, + 38090, + 47377, + 52345, + 29132, + 43298, + 31211, + 48790, + 46206, + 43220, + 45885, + 39852, + 54909, + 35467, + 34213, + 38275, + 52789, + 50020, + 44642, + 41286, + 36259, + 55833, + 35214, + 44790, + 48082, + 54919, + 69212, + 46800, + 31836, + 38731, + 37014, + 28600, + 52305, + 35340, + 41800, + 50501, + 33556, + 39290, + 36695, + 64140, + 37685, + 48978, + 44658, + 53220, + 44791, + 59089, + 35486, + 37805, + 40225, + 70287, + 56912, + 43193, + 36223, + 50142, + 37572, + 51050, + 38565, + 42162, + 39760, + 40649, + 50668, + 45804, + 39833, + 36206, + 43287, + 55293, + 36794, + 37268, + 51134, + 44702, + 38259, + 41177, + 45056, + 45036, + 39994, + 48209, + 33046, + 34036, + 34476, + 37480, + 38591, + 48010, + 40098, + 40812, + 37801, + 39077, + 46063, + 51469, + 52435, + 50176, + 40000, + 67157, + 40108, + 33273, + 39904, + 37887, + 39134, + 34651, + 42742, + 38358, + 38307, + 44522, + 47088, + 42913, + 49754, + 44626, + 47078, + 35678, + 40959, + 42127, + 42693, + 38827, + 45595, + 38438, + 51759, + 33773, + 27373, + 44320, + 27863, + 33319, + 63548, + 36751, + 50506, + 38457, + 39019, + 39124, + 36500, + 37352, + 36013, + 33806, + 49703, + 43472, + 36568, + 41948, + 36187, + 45637, + 38257, + 39572, + 36829, + 35421, + 38857, + 33015, + 37578, + 34502, + 47857, + 35317, + 34912, + 41293, + 40100, + 32430, + 84123, + 42873, + 35124, + 37424, + 38493, + 36269, + 39528, + 52934, + 41468, + 43599, + 41088, + 38643, + 50087, + 40356, + 35714, + 33173, + 38242, + 39365, + 34970, + 45240, + 35514, + 33985, + 37156, + 44209, + 49857, + 32444, + 43142, + 33091, + 41978, + 37357, + 36518, + 35987, + 34411, + 42724, + 40340, + 31680, + 33827, + 61319, + 30428, + 42316, + 31852, + 53167, + 46073, + 47423, + 43646, + 35355, + 45147, + 40857, + 38715, + 35345, + 43433, + 51856, + 44183, + 30993, + 47814, + 41683, + 40697, + 35303, + 32718, + 46596, + 38094, + 40766, + 33412, + 39512, + 28190, + 51865, + 32202, + 42681, + 32220, + 36730, + 46585, + 41874, + 37534, + 56449, + 41937, + 43423, + 39335, + 40799, + 36704, + 44606, + 54355, + 46833, + 33980, + 36292, + 48796, + 43577, + 53663, + 37167, + 46071, + 33814, + 48730, + 55852, + 38385, + 41647, + 35863, + 41152, + 55194, + 27583, + 36315, + 32247, + 43431, + 42143, + 40583, + 40021, + 36890, + 61899, + 35053, + 56723, + 41570, + 36085, + 34344, + 37461, + 26812, + 54474, + 38200, + 45664, + 54455, + 46804, + 37647, + 45655, + 43477, + 29780, + 32252, + 32578, + 31090, + 55446, + 35887, + 67785, + 41545, + 33862, + 41600, + 47376, + 41898, + 51478, + 35037, + 38754, + 66987, + 46808, + 63117, + 46025, + 39269, + 31152, + 45510, + 45681, + 30265, + 34733, + 166863, + 39481, + 39428, + 60509, + 34794, + 69577, + 37325, + 45397, + 46327, + 28162, + 99598, + 44924, + 41740, + 64279, + 31512, + 45712, + 43065, + 44612, + 32358, + 38588, + 39705, + 41460, + 34769, + 49765, + 40273, + 48138, + 39799, + 40632, + 39774, + 44924, + 41097, + 36763, + 37215, + 62594, + 40436, + 53951, + 46932, + 35495, + 39164, + 51702, + 46039, + 41409, + 41196, + 42285, + 47785, + 34404, + 38288, + 40444, + 40718, + 40843, + 48814, + 39596, + 40118, + 35038, + 50779, + 56518, + 45987, + 32049, + 40857, + 45792, + 33313, + 41765, + 29314, + 38837, + 44294, + 40102, + 33736, + 45632, + 36099, + 37763, + 35847, + 38342, + 36849, + 47552, + 48859, + 136974, + 43903, + 47547, + 60668, + 39055, + 31563, + 38095, + 42434, + 40426, + 46391, + 35093, + 38671, + 35164, + 30893, + 51084, + 45097, + 50751, + 33243, + 47628, + 36594, + 36555, + 28566, + 46422, + 59067, + 37062, + 44228, + 53017, + 50871, + 38626, + 53458, + 45193, + 35243, + 34751, + 53298, + 42818, + 37160, + 48698, + 46128, + 40034, + 38765, + 39495, + 33403, + 49527, + 42562, + 39944, + 42910, + 37971, + 33709, + 37116, + 37788, + 45690, + 30230, + 59859, + 35381, + 49290, + 46111, + 51984, + 35525, + 38532, + 28197, + 32579, + 64428, + 44034, + 45656, + 33916, + 36926, + 35272, + 45593, + 38504, + 51113, + 42547, + 52832, + 42904, + 33639, + 34964, + 32316, + 30517, + 36920, + 36065, + 35138, + 40562, + 57415, + 36980, + 53362, + 30336, + 26854, + 40750, + 54914, + 32796, + 39948, + 43960, + 51669, + 30120, + 42337, + 38591, + 35873, + 50944, + 49281, + 44064, + 37749, + 50629, + 56820, + 53344, + 44702, + 44639, + 52067, + 60706, + 44179, + 36998, + 43363, + 52088, + 34982, + 39585, + 39523, + 58413, + 38641, + 54318, + 40415, + 33205, + 45216, + 43860, + 58282, + 50179, + 42413, + 41901, + 43633, + 46801, + 40416, + 31639, + 35924, + 47508, + 44785, + 68710, + 55956, + 38981, + 42881, + 45326, + 45038, + 40791, + 36316, + 36337, + 34945, + 61886, + 35787, + 47130, + 41492, + 35541, + 120111, + 44606, + 46516, + 39007, + 66923, + 116406, + 31878, + 43435, + 38725, + 38251, + 32125, + 37834, + 36154, + 42463, + 30189, + 48850, + 37472, + 44006, + 38299, + 48009, + 56423, + 38368, + 34578, + 43356, + 38920, + 33633, + 42819, + 43834, + 38773, + 41987, + 34325, + 37572, + 42249, + 42910, + 34978, + 31986, + 47986, + 32701, + 55433, + 42017, + 39746, + 37977, + 35340, + 43744, + 33042, + 39324, + 41325, + 43806, + 37327, + 34339, + 35918, + 41560, + 48655, + 78809, + 51020, + 40174, + 48877, + 33683, + 48316, + 38072, + 42891, + 39701, + 53544, + 38444, + 37988, + 50874, + 37701, + 39695, + 52555, + 32500, + 37070, + 51683, + 44620, + 38140, + 34787, + 38760, + 40238, + 39905, + 34943, + 42298, + 43494, + 43584, + 37517, + 41298, + 47331, + 34758, + 43211, + 36902, + 47448, + 76479, + 29849, + 54278, + 39915, + 43946, + 35111, + 40661, + 51684, + 32519, + 34993, + 47879, + 52079, + 38385, + 50132, + 51494, + 39881, + 32774, + 35031, + 33113, + 48681, + 39878, + 36231, + 42110, + 43606, + 39347, + 38728, + 36295, + 45061, + 45201, + 35819, + 74545, + 34719, + 33859, + 39296, + 41270, + 32153, + 38973, + 41547, + 43689, + 36276, + 39327, + 48172, + 38660, + 36513, + 31553, + 40845, + 57328, + 42114, + 48756, + 46412, + 37019, + 37419, + 35539, + 39197, + 31955, + 30057, + 36453, + 36427, + 36438, + 39625, + 47581, + 43993, + 40591, + 49764, + 29293, + 38476, + 39000, + 44209, + 50197, + 35810, + 46014, + 58174, + 42936, + 37408, + 38276, + 39709, + 53933, + 49285, + 30499, + 64231, + 34911, + 58448, + 44045, + 44550, + 43017, + 58969, + 41376, + 38311, + 53713, + 34795, + 43224, + 32555, + 37277, + 42757, + 36021, + 64433, + 34411, + 33913, + 40411, + 38390, + 33828, + 37483, + 45119, + 36411, + 36292, + 56800, + 36389, + 74054, + 44064, + 45328, + 74204, + 33765, + 38877, + 39933, + 32415, + 42990, + 42228, + 39241, + 46121, + 80298, + 45124, + 35245, + 37049, + 42699, + 41242, + 33012, + 52249, + 74663, + 32285, + 33067, + 52155, + 35536, + 47739, + 40425, + 36966, + 36446, + 55918, + 40563, + 33081, + 34753, + 31930, + 32868, + 40868, + 42866, + 35020, + 45570, + 47667, + 59681, + 45757, + 39873, + 33695, + 39127, + 39516, + 37260, + 44606, + 40554, + 55169, + 40171, + 45738, + 41264, + 39963, + 54424, + 43054, + 35574, + 36539, + 40681, + 49144, + 41859, + 32346, + 40988, + 40029, + 34911, + 35657, + 44423, + 37335, + 35614, + 31909, + 55742, + 58556, + 35427, + 36654, + 34031, + 38786, + 27487, + 35490, + 40053, + 44681, + 33566, + 31166, + 48803, + 43223, + 35613, + 43444, + 44608, + 33195, + 42024, + 38281, + 44161, + 48063, + 40587, + 46992, + 42603, + 34121, + 32272, + 40678, + 64906, + 50372, + 36780, + 38628, + 43638, + 41610, + 40487, + 37342, + 47038, + 69392, + 37010, + 36815, + 40857, + 47441, + 43490, + 48646, + 48633, + 36549, + 41629, + 35958, + 36244, + 41524, + 43413, + 35769, + 60900, + 30382, + 36134, + 52332, + 31984, + 32800, + 48558, + 39136, + 39588, + 31227, + 37264, + 50405, + 32656, + 34382, + 40579, + 30094, + 39447, + 49209, + 34242, + 34773, + 40364, + 40630, + 48990, + 38651, + 47015, + 38044, + 44648, + 36460, + 29660, + 40476, + 45764, + 39266, + 43758, + 48652, + 43532, + 48725, + 30227, + 34015, + 31856, + 29500, + 71944, + 36582, + 40386, + 32260, + 39813, + 30615, + 40704, + 34658, + 41774, + 50799, + 28331, + 30129, + 41577, + 28918, + 68788, + 45599, + 31989, + 53709, + 38090, + 44927, + 42119, + 38660, + 51072, + 30501, + 39986, + 37243, + 35910, + 41588, + 35054, + 29867, + 46832, + 30923, + 35613, + 51014, + 40181, + 35624, + 69638, + 39839, + 40773, + 43533, + 32582, + 34991, + 40018, + 42948, + 36909, + 37578, + 46241, + 43556, + 32890, + 41528, + 40592, + 53760, + 54666, + 36914, + 33626, + 40980, + 32859, + 44297, + 41468, + 37551, + 32405, + 43146, + 32347, + 36064, + 33413, + 36491, + 45095, + 33834, + 46383, + 38892, + 43898, + 36683, + 72312, + 56403, + 37836, + 39928, + 37640, + 38575, + 36415, + 58312, + 37799, + 41228, + 67748, + 51465, + 37082, + 40872, + 81534, + 38109, + 50169, + 34039, + 40918, + 45307, + 35117, + 42156, + 49670, + 53993, + 41283, + 44219, + 57682, + 31116, + 49443, + 45146, + 45565, + 37717, + 28226, + 44160, + 44037, + 32929, + 35459, + 38994, + 45453, + 33077, + 37823, + 48239, + 46141, + 36785, + 44752, + 36582, + 41254, + 49383, + 50317, + 78749, + 34486, + 32847, + 37831, + 41225, + 50473, + 36456, + 59979, + 35341, + 54540, + 78854, + 30269, + 41206, + 39889, + 35366, + 41990, + 35496, + 31390, + 40003, + 52209, + 37314, + 45743, + 36653, + 45412, + 30912, + 40702, + 60097, + 47055, + 34510, + 41782, + 37394, + 38008, + 48941, + 36961, + 35986, + 31518, + 41569, + 31640, + 36783, + 38563, + 49213, + 36490, + 45320, + 39491, + 34818, + 51275, + 40486, + 37853, + 47645, + 48154, + 40075, + 32769, + 36419, + 37767, + 38611 + ] + }, + { + "counters": [ + 37236, + 38775, + 39166, + 49316, + 37424, + 50367, + 44734, + 35998, + 117772, + 46323, + 47620, + 39815, + 35284, + 42455, + 38339, + 38410, + 50787, + 32112, + 43228, + 48177, + 37866, + 40913, + 39815, + 38504, + 38849, + 48149, + 47047, + 50879, + 43044, + 53688, + 47890, + 64438, + 45354, + 41741, + 41798, + 47988, + 44806, + 36068, + 41463, + 33465, + 43526, + 40077, + 49152, + 37069, + 35433, + 36253, + 36602, + 40931, + 56284, + 45732, + 41048, + 34089, + 39647, + 45159, + 36538, + 32894, + 39379, + 34645, + 38121, + 48560, + 31984, + 38340, + 39268, + 33941, + 53553, + 35335, + 34008, + 41918, + 55834, + 31225, + 29918, + 47186, + 37324, + 40671, + 40089, + 44303, + 45805, + 36169, + 39599, + 64602, + 41911, + 29871, + 36340, + 38053, + 29824, + 47227, + 52653, + 35450, + 35582, + 35800, + 55477, + 45487, + 24718, + 40300, + 42465, + 39597, + 41608, + 38935, + 43494, + 49597, + 37401, + 40015, + 44163, + 40196, + 35821, + 42138, + 35856, + 29470, + 48314, + 27856, + 36284, + 35272, + 39245, + 32351, + 38982, + 35306, + 35594, + 31758, + 34215, + 38981, + 33660, + 51332, + 44451, + 42426, + 43366, + 31214, + 40721, + 48010, + 35401, + 33183, + 53292, + 41222, + 41324, + 36098, + 36889, + 37005, + 35317, + 38692, + 44486, + 30262, + 40944, + 66067, + 56944, + 41267, + 39421, + 41442, + 57547, + 38879, + 35709, + 49373, + 38870, + 42222, + 34896, + 43598, + 36298, + 50087, + 38503, + 35269, + 43137, + 37565, + 49614, + 46206, + 35037, + 38367, + 37611, + 47229, + 51402, + 34182, + 53479, + 35333, + 31062, + 50581, + 42696, + 41812, + 42163, + 39752, + 34281, + 33031, + 52111, + 63942, + 35170, + 71954, + 37154, + 44368, + 55062, + 39179, + 51994, + 47737, + 29614, + 35440, + 30674, + 45497, + 36097, + 54116, + 37631, + 49454, + 36377, + 35925, + 32625, + 44755, + 41570, + 32284, + 39032, + 32799, + 54974, + 33392, + 35362, + 130664, + 45794, + 35817, + 43369, + 30928, + 39953, + 32216, + 31029, + 49325, + 37244, + 50980, + 48934, + 38955, + 36218, + 39436, + 31275, + 37358, + 35649, + 37463, + 38281, + 42544, + 38545, + 46238, + 41731, + 38479, + 37619, + 42684, + 40046, + 63797, + 41344, + 39628, + 35524, + 54546, + 41942, + 33868, + 38720, + 41028, + 33976, + 55952, + 30488, + 36408, + 36506, + 35127, + 31666, + 41863, + 58137, + 35207, + 53119, + 32323, + 41970, + 58310, + 46833, + 34407, + 31869, + 45352, + 49223, + 42521, + 37688, + 31982, + 61405, + 43579, + 51568, + 62075, + 49623, + 58438, + 70622, + 47303, + 32130, + 30190, + 36805, + 40240, + 51339, + 31214, + 32536, + 45529, + 36593, + 88267, + 44696, + 40639, + 39074, + 29637, + 43370, + 31406, + 38890, + 42239, + 32604, + 35660, + 38918, + 53352, + 34256, + 64446, + 36600, + 43252, + 42410, + 42275, + 31106, + 30918, + 36237, + 35863, + 41164, + 38012, + 49473, + 38654, + 49151, + 38857, + 37944, + 48660, + 36784, + 41117, + 35315, + 38926, + 43739, + 45597, + 47274, + 39939, + 31039, + 39356, + 47599, + 50967, + 35363, + 47210, + 39796, + 33212, + 35321, + 40649, + 47724, + 49632, + 36333, + 42316, + 35672, + 33193, + 47427, + 30793, + 40194, + 33722, + 36553, + 43090, + 39365, + 34025, + 43618, + 37393, + 39115, + 31200, + 52596, + 30582, + 43520, + 41613, + 26300, + 35046, + 43661, + 32382, + 40936, + 58281, + 41291, + 47257, + 32243, + 30003, + 47720, + 32313, + 28670, + 40000, + 37799, + 50616, + 34961, + 37817, + 80027, + 44190, + 29207, + 31618, + 39899, + 49469, + 35076, + 34896, + 197003, + 35193, + 41992, + 49049, + 39612, + 52883, + 39303, + 47560, + 52449, + 37446, + 46868, + 32460, + 31811, + 34917, + 34209, + 59930, + 34666, + 48764, + 34983, + 50753, + 36606, + 38710, + 44804, + 32935, + 31895, + 42924, + 56589, + 34714, + 35949, + 31515, + 38735, + 40737, + 41866, + 36346, + 34765, + 43783, + 30636, + 45397, + 34881, + 53014, + 33826, + 38387, + 56700, + 35852, + 38859, + 45696, + 47422, + 39112, + 34608, + 41891, + 40059, + 30484, + 34567, + 40857, + 37302, + 35656, + 56783, + 36952, + 55257, + 42785, + 48840, + 31584, + 51184, + 38920, + 42061, + 32567, + 45240, + 36985, + 57607, + 38185, + 30911, + 37047, + 32798, + 46410, + 34743, + 33225, + 40398, + 40654, + 49137, + 38680, + 58167, + 33474, + 34088, + 74020, + 38996, + 58941, + 35177, + 35558, + 35984, + 38004, + 46076, + 39847, + 34813, + 46773, + 32945, + 39733, + 43562, + 32593, + 54651, + 35194, + 31317, + 37896, + 61059, + 45385, + 36210, + 36165, + 41194, + 55509, + 46867, + 36385, + 41151, + 47599, + 42751, + 42822, + 43064, + 38364, + 31509, + 29625, + 29160, + 41290, + 38613, + 45363, + 41653, + 62580, + 45320, + 32232, + 49053, + 35801, + 38927, + 38675, + 34690, + 41454, + 42598, + 50496, + 40001, + 38930, + 41103, + 30632, + 35004, + 33619, + 35117, + 40510, + 54325, + 44502, + 34654, + 44583, + 41476, + 34726, + 47658, + 33979, + 39818, + 39669, + 35788, + 37086, + 29003, + 37135, + 41339, + 35077, + 33242, + 46273, + 34452, + 42605, + 39310, + 31748, + 30730, + 48521, + 63438, + 52464, + 35371, + 35702, + 35136, + 38648, + 39488, + 34966, + 37676, + 43667, + 44671, + 44458, + 34456, + 43127, + 38297, + 45706, + 37982, + 33903, + 35758, + 36786, + 34261, + 38243, + 33666, + 44254, + 33398, + 41453, + 36069, + 39769, + 35989, + 36540, + 39627, + 37556, + 46950, + 50388, + 44388, + 44934, + 49164, + 35807, + 45164, + 50880, + 36874, + 42864, + 51425, + 30271, + 38834, + 42960, + 32182, + 45458, + 54146, + 34100, + 33394, + 54938, + 52288, + 75211, + 42682, + 37878, + 30951, + 42414, + 33871, + 44369, + 46124, + 42273, + 40961, + 45015, + 30096, + 48689, + 46208, + 40206, + 36929, + 32815, + 32487, + 41194, + 35792, + 46395, + 49462, + 67077, + 34541, + 50026, + 66829, + 36170, + 39383, + 51613, + 34971, + 30982, + 40293, + 55799, + 46114, + 35018, + 33656, + 54289, + 37988, + 43393, + 40244, + 35168, + 56263, + 39735, + 48913, + 58668, + 37447, + 38539, + 35204, + 39507, + 35461, + 30202, + 32620, + 35368, + 56397, + 34636, + 45172, + 43085, + 42085, + 46507, + 29050, + 37379, + 29362, + 48351, + 39255, + 40993, + 36795, + 34983, + 38157, + 51365, + 34206, + 39336, + 40578, + 53323, + 36027, + 43708, + 36383, + 50910, + 54022, + 59408, + 28188, + 44278, + 40420, + 42403, + 34802, + 39825, + 42845, + 43759, + 38749, + 38678, + 42137, + 56075, + 26845, + 31926, + 32465, + 52670, + 38406, + 38418, + 45595, + 44173, + 45224, + 35154, + 40032, + 35352, + 34915, + 52086, + 46824, + 28129, + 55719, + 41550, + 35350, + 36358, + 38863, + 48704, + 29495, + 40770, + 33699, + 60950, + 55565, + 41826, + 39108, + 40276, + 31977, + 46537, + 47499, + 47269, + 33824, + 34807, + 35286, + 36265, + 38054, + 32641, + 36464, + 35179, + 42271, + 35059, + 40908, + 33975, + 48711, + 41986, + 45296, + 34820, + 39027, + 42359, + 42850, + 38339, + 61520, + 35153, + 44411, + 53258, + 35074, + 30778, + 41146, + 39756, + 32882, + 43156, + 31573, + 37171, + 29871, + 34662, + 38056, + 40171, + 45271, + 59581, + 52496, + 55409, + 37007, + 37638, + 64892, + 30611, + 36365, + 49777, + 48388, + 49415, + 43119, + 38643, + 42576, + 36924, + 39886, + 32292, + 67616, + 38925, + 38393, + 72619, + 49464, + 34291, + 141230, + 43177, + 33504, + 49794, + 41594, + 44042, + 47213, + 38563, + 35033, + 51443, + 41401, + 36202, + 36574, + 34050, + 37378, + 38969, + 34413, + 37043, + 40925, + 40656, + 41650, + 54028, + 53521, + 44505, + 55807, + 35718, + 54455, + 43567, + 45501, + 31337, + 44554, + 43221, + 36642, + 39986, + 36005, + 47641, + 38721, + 52004, + 30580, + 44307, + 39379, + 46178, + 39378, + 40090, + 58336, + 40662, + 36100, + 39041, + 32187, + 45896, + 41041, + 62715, + 44129, + 33186, + 44917, + 46718, + 38333, + 37143, + 45335, + 38404, + 53193, + 34570, + 55285, + 34885, + 48807, + 34106, + 31654, + 36569, + 47525, + 51223, + 42738, + 35842, + 46180, + 41446, + 34155, + 39746, + 29453, + 35878, + 32209, + 36212, + 31834, + 42284, + 57942, + 55132, + 34134, + 41318, + 38112, + 36661, + 38786, + 51711, + 33856, + 46273, + 41079, + 35645, + 36626, + 52778, + 38705, + 30884, + 89242, + 56123, + 33764, + 32544, + 39288, + 37125, + 36949, + 44004, + 37219, + 38165, + 54877, + 39424, + 32955, + 59101, + 52327, + 35161, + 43529, + 35123, + 34679, + 40811, + 37735, + 42525, + 36017, + 39174, + 43257, + 39783, + 38398, + 36314, + 39345, + 35610, + 39039, + 38188, + 38887, + 33749, + 34950, + 40869, + 41337, + 30186, + 50417, + 47225, + 49223, + 35586, + 46977, + 42575, + 59942, + 43362, + 45423, + 43153, + 40281, + 39867, + 33614, + 34513, + 37694, + 44860, + 44588, + 44973, + 31858, + 38791, + 36749, + 44102, + 41187, + 51396, + 1119301, + 36537, + 47913, + 35770, + 45225, + 32474, + 38850, + 71217, + 30356, + 46859, + 30175, + 43443, + 33668, + 64701, + 35615, + 34967, + 33051, + 32997, + 34524, + 54224, + 42340, + 34409, + 42023, + 37247, + 37467, + 38778, + 43176, + 46465, + 44705, + 31820, + 90354, + 58619, + 46499, + 45132, + 43566, + 42042, + 39969, + 32823, + 48002, + 44156, + 35543, + 31760, + 34673, + 44157, + 39119, + 42103, + 35294, + 47118, + 41197, + 31565, + 36700, + 39082, + 74526, + 43088, + 36361, + 36421, + 37125, + 40013, + 40312, + 100290, + 47185, + 30236, + 36963, + 42879, + 37989, + 39618, + 43156, + 54428, + 35854, + 32409, + 39802, + 32575, + 33613, + 36282, + 33712, + 45007, + 84952, + 34527, + 35647, + 38179, + 39407, + 44819, + 70348, + 66089, + 57820, + 37189, + 40619, + 48899, + 37630, + 37085, + 35742, + 46405, + 59376, + 29993, + 37441, + 32265, + 48908, + 37453, + 40582, + 45514, + 81005, + 38636, + 51099, + 31924, + 35589, + 36180, + 64645, + 41270, + 32805, + 37589, + 58297, + 33423, + 32746, + 39788, + 52017, + 35711, + 36818, + 51428, + 34140, + 33944, + 37570, + 48399, + 54559, + 40087, + 58972, + 34319, + 34205, + 60384, + 56509, + 46840, + 40232, + 50895, + 37427, + 37149, + 44518, + 34387, + 44911, + 68670, + 37065, + 39590, + 32838, + 47874, + 40447, + 38953, + 42717, + 41505, + 46616, + 36233, + 32223, + 33292, + 48162, + 37451, + 45379, + 48148, + 47521, + 48849, + 42820, + 60250, + 46473, + 37802, + 47668, + 38108, + 77524, + 41955, + 36100, + 42797, + 35042, + 41505, + 39595, + 38618, + 38646, + 35699, + 49941, + 38046, + 40877, + 33626, + 37142, + 65731, + 37514, + 47462, + 36074, + 35268, + 46833, + 74297, + 32413, + 34641, + 35440, + 51870, + 34164, + 35744, + 40275, + 41992, + 43873, + 56085, + 35674, + 38427, + 40020, + 39275, + 44454, + 32958, + 36206, + 33518, + 52462, + 47172, + 35721, + 32238, + 35288, + 43752, + 40002, + 35095, + 32769, + 42078, + 49702, + 39338, + 54416, + 45260, + 38681, + 332301, + 77786, + 42780, + 38100, + 35598, + 36876, + 43868, + 40820, + 30519, + 141155, + 39119, + 43804, + 34752, + 48700, + 32444, + 36234, + 34288, + 41421, + 57260, + 32823, + 42632, + 32207, + 47145, + 37111, + 42382, + 45495, + 43172, + 44858, + 47018, + 36751, + 25536, + 37362, + 32662, + 46448, + 48737, + 41400, + 35599, + 39939, + 32950, + 29661, + 32026, + 41394, + 35267, + 42568, + 31842, + 40352, + 45305, + 32664, + 46111, + 28723, + 69657, + 44457, + 33486, + 39715, + 38420, + 33984, + 42172, + 37323, + 47012, + 56295, + 31876, + 34054, + 30832, + 54511, + 47988, + 33278, + 33405, + 37722, + 39302, + 39677, + 37881, + 35395, + 33794, + 37344, + 55885, + 42182, + 33883, + 44076, + 35156, + 72011, + 29579, + 39880, + 39040, + 38523, + 37858, + 29716, + 38299, + 56604, + 39081, + 38957, + 37480, + 38193, + 41799, + 41601, + 53036, + 42512, + 30933, + 29033, + 32801, + 39292, + 54820, + 45752, + 40900, + 64982, + 37563, + 62656, + 38125, + 35951, + 45623, + 41413, + 39339, + 50527, + 57391, + 56819, + 45282, + 29185, + 31218, + 35451, + 33541, + 33745, + 57827, + 37064, + 40773, + 45429, + 39450, + 52954, + 49894, + 45732, + 40420, + 38443, + 38146, + 51194, + 45745, + 33902, + 35218, + 35192, + 39740, + 47623, + 36888, + 30494, + 30651, + 58891, + 35178, + 36382, + 50219, + 40067, + 35464, + 48123, + 41748, + 33651, + 78947, + 28544, + 27177, + 35807, + 35031, + 28546, + 37899, + 36454, + 38584, + 31903, + 33770, + 37129, + 42781, + 37990, + 28155, + 44264, + 41941, + 52221, + 41878, + 42383, + 39798, + 37517, + 37227, + 39819, + 41384, + 30211, + 46411, + 44381, + 52727, + 51065, + 40556, + 63785, + 47609, + 36577, + 65883, + 55820, + 32778, + 44869, + 42425, + 31569, + 40516, + 48709, + 56407, + 27143, + 35501, + 33780, + 48915, + 58652, + 34966, + 32963, + 32169, + 41351, + 47689, + 41051, + 35534, + 44277, + 38259, + 55473, + 54144, + 45651, + 56654, + 40763, + 63815, + 36618, + 68514, + 38929, + 45931, + 59837, + 34805, + 46747, + 33382, + 33519, + 49855, + 32397, + 28649, + 42975, + 32394, + 39148, + 69026, + 55751, + 55885, + 51002, + 42162, + 33885, + 42172, + 41351, + 36590, + 42195, + 36923, + 43133, + 50597, + 91140, + 43032, + 48072, + 39742, + 33495, + 94526, + 36923, + 39271, + 35798, + 41137, + 42801, + 39773, + 43313, + 43877, + 32841, + 45322, + 45370, + 40330, + 32109, + 36718, + 37757, + 31489, + 33953, + 57113, + 41754, + 38438, + 34372, + 34025, + 45884, + 35212, + 49252, + 33566, + 45135, + 46222, + 45543, + 41776, + 34540, + 42834, + 30838, + 51259, + 37533, + 42543, + 33190, + 37174, + 51003, + 38274, + 33275, + 39671, + 41755, + 38418, + 33830, + 31398, + 45777, + 50768, + 42816, + 39736, + 42292, + 36474, + 67988, + 43053, + 47611, + 27537, + 44064, + 32616, + 49389, + 68110, + 55138, + 42948, + 38733, + 35057, + 41344, + 34324, + 40764, + 37878, + 44187, + 29186, + 44658, + 37113, + 40737, + 45410, + 37636, + 42826, + 38739, + 35011, + 33683, + 49020, + 38183, + 40313, + 35867, + 35632, + 35914, + 39654, + 29263, + 44849, + 55034, + 39948, + 48361, + 32382, + 30901, + 48860, + 42149, + 45478, + 42960, + 45153, + 30502, + 45997, + 43477, + 38794, + 41811, + 45701, + 42535, + 39219, + 36930, + 32546, + 38906, + 45378, + 37638, + 30280, + 51770, + 45545, + 44169, + 30287, + 39051, + 36818, + 36471, + 47520, + 47883, + 40722, + 44071, + 30591, + 71385, + 33269, + 87271, + 42482, + 50937, + 33305, + 57993, + 39260, + 42665, + 32321, + 40316, + 41901, + 64140, + 57465, + 47143, + 51458, + 38520, + 36389, + 50584, + 32290, + 46338, + 42596, + 38011, + 39241, + 41369, + 33117, + 35638, + 38269, + 36155, + 45942, + 36616, + 39013, + 51179, + 40123, + 35437, + 40555, + 33196, + 34019, + 34955, + 57563, + 28686, + 50868, + 46592, + 45389, + 34491, + 40798, + 40101, + 43277, + 60312, + 40595, + 55299, + 36732, + 34104, + 41450, + 45086, + 38540, + 41381, + 36323, + 45744, + 40586, + 39273, + 45808, + 34755, + 54821, + 33807, + 30651, + 41563, + 34459, + 39952, + 40695, + 38926, + 40186, + 41425, + 28752, + 51962, + 42778, + 36715, + 35977, + 37120, + 40829, + 35629, + 41513, + 46843, + 34804, + 38278, + 28791, + 34096, + 40439, + 32527, + 47938, + 45300, + 32610, + 36870, + 39602, + 42729, + 37465, + 49696, + 44250, + 37349, + 41755, + 59806, + 35715, + 43974, + 44807, + 59438, + 48193, + 34164, + 41143, + 49795, + 73808, + 38758, + 40037, + 39274, + 41088, + 29380, + 52423, + 31970, + 45709, + 31664, + 33630, + 41091, + 40313, + 47955, + 36780, + 38824, + 43955, + 37567, + 42865, + 34982, + 30392, + 40613, + 50617, + 35278, + 38293, + 43332, + 38032, + 38396, + 45692, + 27389, + 42351, + 58354, + 34096, + 46748, + 73731, + 36841, + 40107, + 30866, + 31267, + 52338, + 29096, + 43542, + 38841, + 36875, + 45873, + 44531, + 35675, + 40979, + 39513, + 53302, + 43102, + 37553, + 31777, + 35853, + 39498, + 59729, + 31340, + 42870, + 67529, + 43930, + 32292, + 39179, + 29578, + 39429, + 39219, + 38178, + 37393, + 40222, + 63693, + 35257, + 30236, + 65043, + 35194, + 43636, + 37672, + 47067, + 39611, + 40396, + 44457, + 51100, + 46165, + 37127, + 40412, + 59697, + 55737, + 47472, + 35695, + 41876, + 33556, + 41848, + 32483, + 28853, + 39258, + 39838, + 40617, + 31794, + 37697, + 38291, + 42506, + 26339, + 36421, + 32653, + 35716, + 38653, + 39750, + 33825, + 37066, + 40889, + 41955, + 56029, + 49297, + 43863, + 39429, + 39343, + 39451, + 44544, + 75302, + 46703, + 41300, + 53531, + 32481, + 32830, + 34913, + 41722, + 37266, + 41361, + 40466, + 32886, + 44930, + 27042, + 69428, + 39019, + 34325, + 32370, + 31742, + 44485, + 31316, + 31755, + 42830, + 36736, + 34463, + 29327, + 30247, + 36437, + 39885, + 31979, + 40890, + 37174, + 34652, + 39816, + 54450, + 42599, + 46517, + 39559, + 32102, + 31920, + 34873, + 36763, + 35246, + 45644, + 36519, + 38049, + 36792, + 46089, + 31873, + 54057, + 38648, + 31920, + 33459, + 34853, + 41882, + 36730, + 45170, + 38635, + 51978, + 37003, + 47053, + 39999, + 58545, + 36987, + 38830, + 98057, + 47746, + 53867, + 38838, + 39439, + 39430, + 38190, + 34443, + 41376, + 43859, + 34127, + 51741, + 61198, + 46000, + 45120, + 45779, + 40855, + 66640, + 64378, + 42551, + 72497, + 40083, + 39861, + 30414, + 30961, + 44418, + 31534, + 39901, + 32127, + 39386, + 58290, + 45287, + 31932, + 61692, + 65170, + 42403, + 24875, + 33868, + 36045, + 40531, + 38222, + 35087, + 36553, + 44563, + 34599, + 38706, + 49502, + 58027, + 45143, + 35697, + 33141, + 33957, + 44387, + 37495, + 35436, + 35783, + 55985, + 34864, + 91756, + 31716, + 44702, + 40967, + 35534, + 36493, + 52320, + 32877, + 37272, + 60029, + 50350, + 60158, + 41630, + 39912, + 42335, + 42374, + 35822, + 33771, + 41044, + 47634, + 41915, + 36660, + 36089, + 62143, + 49191, + 38823, + 61516, + 41644, + 35587, + 32416, + 36018, + 37132, + 43347, + 40259, + 41675, + 50416, + 68631, + 40897, + 40331, + 34121, + 39103, + 48056, + 40790, + 50815, + 44482, + 52636, + 39371, + 26092, + 28501, + 46201, + 41656, + 44911, + 37806, + 55627, + 32306, + 48234, + 46267, + 33168, + 51618, + 36251, + 33471, + 38529, + 33441, + 31398, + 34048, + 45331, + 52242, + 63589, + 43293, + 43917, + 41545, + 31158, + 33946, + 51319, + 47578, + 37371, + 47680, + 37009, + 35013, + 61337, + 43058, + 63569, + 30764, + 35045, + 45342, + 35977, + 48976, + 42130, + 32288, + 42981, + 40687, + 48454, + 55301, + 63481, + 53876, + 43466, + 36711, + 34792, + 34922, + 32877, + 36772, + 41482, + 39863, + 41011, + 39025, + 38020, + 38021, + 163928, + 30210, + 50590, + 30493, + 37556, + 50486, + 43200, + 47784, + 39446, + 29431, + 41059, + 40243, + 35733, + 31123, + 45042, + 46566, + 53294, + 49474, + 38745, + 52327, + 44030, + 37383, + 38359, + 38628, + 34425, + 48214, + 34921, + 34807, + 38346, + 30102, + 30279, + 33599, + 46035, + 34726, + 38018, + 42456, + 40043, + 49106, + 40044, + 52920, + 51663, + 47901, + 40939, + 38693, + 54650, + 34513, + 49993, + 42765, + 50666, + 58262, + 37980, + 30952, + 39491, + 42532, + 46064, + 36651, + 42265, + 39539, + 55578, + 43422, + 54542 + ] + } + ], + "default_value": 0 + }, + "null_count": 0, + "tot_col_size": 0, + "last_update_version": 419282709561213022, + "correlation": 0 + } + }, + "count": 89870864, + "modify_count": 7549652, + "partitions": null +} diff --git a/planner/core/testdata/analyze_suite_in.json b/planner/core/testdata/analyze_suite_in.json index f9be9b483896b..1187de96f090e 100644 --- a/planner/core/testdata/analyze_suite_in.json +++ b/planner/core/testdata/analyze_suite_in.json @@ -116,6 +116,12 @@ "explain select (select concat(t1.a, \",\", t1.b) from t t1 where t1.a=t.a and t1.c=t.c) from t" ] }, + { + "name": "TestLowSelIndexGreedySearch", + "cases": [ + "explain select max(e) from t where a='T3382' and b='ECO' and c='TOPIC' and d='23660fa1ace9455cb7f3ee831e14a342'" + ] + }, { "name": "TestEmptyTable", "cases": [ diff --git a/planner/core/testdata/analyze_suite_out.json b/planner/core/testdata/analyze_suite_out.json index 5457b33c98c06..2457bedf1c779 100644 --- a/planner/core/testdata/analyze_suite_out.json +++ b/planner/core/testdata/analyze_suite_out.json @@ -290,6 +290,22 @@ ] ] }, + { + "Name": "TestLowSelIndexGreedySearch", + "Cases": [ + { + "SQL": "explain select max(e) from t where a='T3382' and b='ECO' and c='TOPIC' and d='23660fa1ace9455cb7f3ee831e14a342'", + "Plan": [ + "StreamAgg_14 1.00 root funcs:max(test.t.e)->Column#7", + "└─TopN_17 0.00 root test.t.e:desc, offset:0, count:1", + " └─IndexLookUp_49 0.00 root ", + " ├─IndexRangeScan_46(Build) 0.00 cop[tikv] table:t, index:idx2(a, c) range:[\"T3382\" \"TOPIC\",\"T3382\" \"TOPIC\"], keep order:false", + " └─Selection_48(Probe) 0.00 cop[tikv] eq(test.t.b, \"ECO\"), eq(test.t.d, \"23660fa1ace9455cb7f3ee831e14a342\"), not(isnull(test.t.e))", + " └─TableRowIDScan_47 0.00 cop[tikv] table:t keep order:false" + ] + } + ] + }, { "Name": "TestEmptyTable", "Cases": [ diff --git a/statistics/selectivity.go b/statistics/selectivity.go index 0760778654172..cdb5d862324ca 100644 --- a/statistics/selectivity.go +++ b/statistics/selectivity.go @@ -342,7 +342,7 @@ func GetUsableSetsByGreedy(nodes []*StatsNode) (newBlocks []*StatsNode) { mask := int64(math.MaxInt64) for { // Choose the index that covers most. - bestID, bestCount, bestTp, bestNumCols, bestMask := -1, 0, ColType, 0, int64(0) + bestID, bestCount, bestTp, bestNumCols, bestMask, bestSel := -1, 0, ColType, 0, int64(0), float64(0) for i, set := range nodes { if marked[i] { continue @@ -362,8 +362,16 @@ func GetUsableSetsByGreedy(nodes []*StatsNode) (newBlocks []*StatsNode) { // (1): The stats type, always prefer the primary key or index. // (2): The number of expression that it covers, the more the better. // (3): The number of columns that it contains, the less the better. - if (bestTp == ColType && set.Tp != ColType) || bestCount < bits || (bestCount == bits && bestNumCols > set.numCols) { - bestID, bestCount, bestTp, bestNumCols, bestMask = i, bits, set.Tp, set.numCols, curMask + // (4): The selectivity of the covered conditions, the less the better. + // The rationale behind is that lower selectivity tends to reflect more functional dependencies + // between columns. It's hard to decide the priority of this rule against rule 2 and 3, in order + // to avoid massive plan changes between tidb-server versions, I adopt this conservative strategy + // to impose this rule after rule 2 and 3. + if (bestTp == ColType && set.Tp != ColType) || + bestCount < bits || + (bestCount == bits && bestNumCols > set.numCols) || + (bestCount == bits && bestNumCols == set.numCols && bestSel > set.Selectivity) { + bestID, bestCount, bestTp, bestNumCols, bestMask, bestSel = i, bits, set.Tp, set.numCols, curMask, set.Selectivity } } if bestCount == 0 { From 8edaa34252cfaff3057e5a8ceb1dedbbd5ca5fb9 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Sat, 3 Oct 2020 20:56:22 +0800 Subject: [PATCH 017/229] ddl: stablize testSerialSuite.TestCancelAddIndexPanic (#19761) (#20151) --- ddl/serial_test.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/ddl/serial_test.go b/ddl/serial_test.go index 72c064a0add0b..5b0449f9dd02d 100644 --- a/ddl/serial_test.go +++ b/ddl/serial_test.go @@ -475,7 +475,11 @@ func (s *testSerialSuite) TestCancelAddIndexPanic(c *C) { } c.Assert(checkErr, IsNil) c.Assert(err, NotNil) - c.Assert(err.Error(), Equals, "[ddl:8214]Cancelled DDL job") + errMsg := err.Error() + // Cancelling the job can either succeed or not, it depends on whether the cancelled job takes affect. + // For now, there's no way to guarantee that cancelling will always take effect. + // TODO: After issue #17904 is fixed, there is no need to tolerate it here. + c.Assert(strings.HasPrefix(errMsg, "[ddl:8214]Cancelled DDL job") || strings.HasPrefix(errMsg, "[ddl:8211]DDL job rollback"), IsTrue) } func (s *testSerialSuite) TestRecoverTableByJobID(c *C) { From a605570e67f5df401a8af9e742d8c6fe57873d29 Mon Sep 17 00:00:00 2001 From: Yuanjia Zhang Date: Sat, 3 Oct 2020 21:13:41 +0800 Subject: [PATCH 018/229] executor: do not reorder handles when building requests for `IndexMergeJoin` (#20138) (#20172) --- executor/builder.go | 22 ++++++++++++---------- executor/distsql.go | 2 +- executor/index_lookup_join.go | 2 +- executor/index_lookup_merge_join.go | 2 +- executor/index_lookup_merge_join_test.go | 13 +++++++++++++ executor/index_merge_reader.go | 2 +- 6 files changed, 29 insertions(+), 14 deletions(-) diff --git a/executor/builder.go b/executor/builder.go index 87532229ed132..ddc50058a8048 100644 --- a/executor/builder.go +++ b/executor/builder.go @@ -2638,15 +2638,15 @@ type mockPhysicalIndexReader struct { } func (builder *dataReaderBuilder) buildExecutorForIndexJoin(ctx context.Context, lookUpContents []*indexJoinLookUpContent, - IndexRanges []*ranger.Range, keyOff2IdxOff []int, cwc *plannercore.ColWithCmpFuncManager) (Executor, error) { - return builder.buildExecutorForIndexJoinInternal(ctx, builder.Plan, lookUpContents, IndexRanges, keyOff2IdxOff, cwc) + IndexRanges []*ranger.Range, keyOff2IdxOff []int, cwc *plannercore.ColWithCmpFuncManager, canReorderHandles bool) (Executor, error) { + return builder.buildExecutorForIndexJoinInternal(ctx, builder.Plan, lookUpContents, IndexRanges, keyOff2IdxOff, cwc, canReorderHandles) } func (builder *dataReaderBuilder) buildExecutorForIndexJoinInternal(ctx context.Context, plan plannercore.Plan, lookUpContents []*indexJoinLookUpContent, - IndexRanges []*ranger.Range, keyOff2IdxOff []int, cwc *plannercore.ColWithCmpFuncManager) (Executor, error) { + IndexRanges []*ranger.Range, keyOff2IdxOff []int, cwc *plannercore.ColWithCmpFuncManager, canReorderHandles bool) (Executor, error) { switch v := plan.(type) { case *plannercore.PhysicalTableReader: - return builder.buildTableReaderForIndexJoin(ctx, v, lookUpContents) + return builder.buildTableReaderForIndexJoin(ctx, v, lookUpContents, canReorderHandles) case *plannercore.PhysicalIndexReader: return builder.buildIndexReaderForIndexJoin(ctx, v, lookUpContents, IndexRanges, keyOff2IdxOff, cwc) case *plannercore.PhysicalIndexLookUpReader: @@ -2664,7 +2664,7 @@ func (builder *dataReaderBuilder) buildExecutorForIndexJoinInternal(ctx context. // Need to support physical selection because after PR 16389, TiDB will push down all the expr supported by TiKV or TiFlash // in predicate push down stage, so if there is an expr which only supported by TiFlash, a physical selection will be added after index read case *plannercore.PhysicalSelection: - childExec, err := builder.buildExecutorForIndexJoinInternal(ctx, v.Children()[0], lookUpContents, IndexRanges, keyOff2IdxOff, cwc) + childExec, err := builder.buildExecutorForIndexJoinInternal(ctx, v.Children()[0], lookUpContents, IndexRanges, keyOff2IdxOff, cwc, canReorderHandles) if err != nil { return nil, err } @@ -2683,7 +2683,7 @@ func (builder *dataReaderBuilder) buildExecutorForIndexJoinInternal(ctx context. func (builder *dataReaderBuilder) buildUnionScanForIndexJoin(ctx context.Context, v *plannercore.PhysicalUnionScan, values []*indexJoinLookUpContent, indexRanges []*ranger.Range, keyOff2IdxOff []int, cwc *plannercore.ColWithCmpFuncManager) (Executor, error) { childBuilder := &dataReaderBuilder{Plan: v.Children()[0], executorBuilder: builder.executorBuilder} - reader, err := childBuilder.buildExecutorForIndexJoin(ctx, values, indexRanges, keyOff2IdxOff, cwc) + reader, err := childBuilder.buildExecutorForIndexJoin(ctx, values, indexRanges, keyOff2IdxOff, cwc, true) if err != nil { return nil, err } @@ -2692,7 +2692,7 @@ func (builder *dataReaderBuilder) buildUnionScanForIndexJoin(ctx context.Context return us, err } -func (builder *dataReaderBuilder) buildTableReaderForIndexJoin(ctx context.Context, v *plannercore.PhysicalTableReader, lookUpContents []*indexJoinLookUpContent) (Executor, error) { +func (builder *dataReaderBuilder) buildTableReaderForIndexJoin(ctx context.Context, v *plannercore.PhysicalTableReader, lookUpContents []*indexJoinLookUpContent, canReorderHandles bool) (Executor, error) { e, err := buildNoRangeTableReader(builder.executorBuilder, v) if err != nil { return nil, err @@ -2712,16 +2712,18 @@ func (builder *dataReaderBuilder) buildTableReaderForIndexJoin(ctx context.Conte handles = append(handles, handle) } } - return builder.buildTableReaderFromHandles(ctx, e, handles) + return builder.buildTableReaderFromHandles(ctx, e, handles, canReorderHandles) } -func (builder *dataReaderBuilder) buildTableReaderFromHandles(ctx context.Context, e *TableReaderExecutor, handles []int64) (Executor, error) { +func (builder *dataReaderBuilder) buildTableReaderFromHandles(ctx context.Context, e *TableReaderExecutor, handles []int64, canReorderHandles bool) (Executor, error) { startTS, err := builder.getSnapshotTS() if err != nil { return nil, err } - sort.Sort(sortutil.Int64Slice(handles)) + if canReorderHandles { + sort.Sort(sortutil.Int64Slice(handles)) + } var b distsql.RequestBuilder kvReq, err := b.SetTableHandles(getPhysicalTableID(e.table), handles). SetDAGRequest(e.dagPB). diff --git a/executor/distsql.go b/executor/distsql.go index df06ddefb4679..39b66724783e9 100644 --- a/executor/distsql.go +++ b/executor/distsql.go @@ -533,7 +533,7 @@ func (e *IndexLookUpExecutor) buildTableReader(ctx context.Context, handles []in plans: e.tblPlans, } tableReaderExec.buildVirtualColumnInfo() - tableReader, err := e.dataReaderBuilder.buildTableReaderFromHandles(ctx, tableReaderExec, handles) + tableReader, err := e.dataReaderBuilder.buildTableReaderFromHandles(ctx, tableReaderExec, handles, true) if err != nil { logutil.Logger(ctx).Error("build table reader from handles failed", zap.Error(err)) return nil, err diff --git a/executor/index_lookup_join.go b/executor/index_lookup_join.go index e243f1097e2cc..30d19474d0f25 100644 --- a/executor/index_lookup_join.go +++ b/executor/index_lookup_join.go @@ -655,7 +655,7 @@ func (iw *innerWorker) fetchInnerResults(ctx context.Context, task *lookUpJoinTa atomic.AddInt64(&iw.stats.fetch, int64(time.Since(start))) }() } - innerExec, err := iw.readerBuilder.buildExecutorForIndexJoin(ctx, lookUpContent, iw.indexRanges, iw.keyOff2IdxOff, iw.nextColCompareFilters) + innerExec, err := iw.readerBuilder.buildExecutorForIndexJoin(ctx, lookUpContent, iw.indexRanges, iw.keyOff2IdxOff, iw.nextColCompareFilters, true) if err != nil { return err } diff --git a/executor/index_lookup_merge_join.go b/executor/index_lookup_merge_join.go index 94844f280294e..70ff8f071b238 100644 --- a/executor/index_lookup_merge_join.go +++ b/executor/index_lookup_merge_join.go @@ -496,7 +496,7 @@ func (imw *innerMergeWorker) handleTask(ctx context.Context, task *lookUpMergeJo dLookUpKeys[i], dLookUpKeys[lenKeys-i-1] = dLookUpKeys[lenKeys-i-1], dLookUpKeys[i] } } - imw.innerExec, err = imw.readerBuilder.buildExecutorForIndexJoin(ctx, dLookUpKeys, imw.indexRanges, imw.keyOff2IdxOff, imw.nextColCompareFilters) + imw.innerExec, err = imw.readerBuilder.buildExecutorForIndexJoin(ctx, dLookUpKeys, imw.indexRanges, imw.keyOff2IdxOff, imw.nextColCompareFilters, false) if err != nil { return err } diff --git a/executor/index_lookup_merge_join_test.go b/executor/index_lookup_merge_join_test.go index d979e60c0c44d..ea8f21c875946 100644 --- a/executor/index_lookup_merge_join_test.go +++ b/executor/index_lookup_merge_join_test.go @@ -65,6 +65,19 @@ func (s *testSuite9) TestIssue18631(c *C) { "1 1 1 1 1 1 1 1")) } +func (s *testSuite9) TestIssue20137(c *C) { + tk := testkit.NewTestKitWithInit(c, s.store) + tk.MustExec("drop table if exists t1, t2") + tk.MustExec("create table t1 (id bigint(20) unsigned, primary key(id))") + tk.MustExec("create table t2 (id bigint(20) unsigned)") + tk.MustExec("insert into t1 values (8738875760185212610)") + tk.MustExec("insert into t1 values (9814441339970117597)") + tk.MustExec("insert into t2 values (8738875760185212610)") + tk.MustExec("insert into t2 values (9814441339970117597)") + tk.MustQuery("select /*+ INL_MERGE_JOIN(t1, t2) */ * from t2 left join t1 on t1.id = t2.id order by t1.id").Check( + testkit.Rows("8738875760185212610 8738875760185212610", "9814441339970117597 9814441339970117597")) +} + func (s *testSuiteAgg) TestIndexJoinOnSinglePartitionTable(c *C) { // For issue 19145 tk := testkit.NewTestKitWithInit(c, s.store) diff --git a/executor/index_merge_reader.go b/executor/index_merge_reader.go index a82adb2c83ca9..edf868913afd7 100644 --- a/executor/index_merge_reader.go +++ b/executor/index_merge_reader.go @@ -424,7 +424,7 @@ func (e *IndexMergeReaderExecutor) buildFinalTableReader(ctx context.Context, ha plans: e.tblPlans, } tableReaderExec.buildVirtualColumnInfo() - tableReader, err := e.dataReaderBuilder.buildTableReaderFromHandles(ctx, tableReaderExec, handles) + tableReader, err := e.dataReaderBuilder.buildTableReaderFromHandles(ctx, tableReaderExec, handles, true) if err != nil { logutil.Logger(ctx).Error("build table reader from handles failed", zap.Error(err)) return nil, err From 2a758efe3e5899b045f0c1c39bd288c7d5e41f70 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Sat, 3 Oct 2020 21:35:39 +0800 Subject: [PATCH 019/229] ddl: check constraint when alter enum/set type column (#19806) (#20046) --- ddl/ddl_api.go | 18 ++++++++++++++---- expression/integration_test.go | 20 +++++++++++++++++++- 2 files changed, 33 insertions(+), 5 deletions(-) diff --git a/ddl/ddl_api.go b/ddl/ddl_api.go index 0da443b5c99ce..2c0cdd2411f5b 100644 --- a/ddl/ddl_api.go +++ b/ddl/ddl_api.go @@ -2734,19 +2734,25 @@ func CheckModifyTypeCompatible(origin *types.FieldType, to *types.FieldType) err default: return errUnsupportedModifyColumn.GenWithStackByArgs(unsupportedMsg) } - case mysql.TypeEnum: + case mysql.TypeEnum, mysql.TypeSet: + var typeVar string + if origin.Tp == mysql.TypeEnum { + typeVar = "enum" + } else { + typeVar = "set" + } if origin.Tp != to.Tp { - msg := fmt.Sprintf("cannot modify enum type column's to type %s", to.String()) + msg := fmt.Sprintf("cannot modify %s type column's to type %s", typeVar, to.String()) return errUnsupportedModifyColumn.GenWithStackByArgs(msg) } if len(to.Elems) < len(origin.Elems) { - msg := fmt.Sprintf("the number of enum column's elements is less than the original: %d", len(origin.Elems)) + msg := fmt.Sprintf("the number of %s column's elements is less than the original: %d", typeVar, len(origin.Elems)) return errUnsupportedModifyColumn.GenWithStackByArgs(msg) } for index, originElem := range origin.Elems { toElem := to.Elems[index] if originElem != toElem { - msg := fmt.Sprintf("cannot modify enum column value %s to %s", originElem, toElem) + msg := fmt.Sprintf("cannot modify %s column value %s to %s", typeVar, originElem, toElem) return errUnsupportedModifyColumn.GenWithStackByArgs(msg) } } @@ -2999,6 +3005,10 @@ func (d *ddl) getModifiableColumnJob(ctx sessionctx.Context, ident ast.Ident, or return nil, errors.Trace(err) } + if err = checkColumnValueConstraint(newCol, newCol.Collate); err != nil { + return nil, errors.Trace(err) + } + if err = checkModifyTypes(&col.FieldType, &newCol.FieldType, isColumnWithIndex(col.Name.L, t.Meta().Indices)); err != nil { if strings.Contains(err.Error(), "Unsupported modifying collation") { colErrMsg := "Unsupported modifying collation of column '%s' from '%s' to '%s' when index is defined on it." diff --git a/expression/integration_test.go b/expression/integration_test.go index 7c552226a5202..d24c10d0fcff0 100755 --- a/expression/integration_test.go +++ b/expression/integration_test.go @@ -6951,7 +6951,25 @@ func (s *testIntegrationSuite) TestIssue19504(c *C) { Check(testkit.Rows("1 1", "0 0", "0 0")) } -func (s *testIntegrationSerialSuite) TestIssue17891(c *C) { +func (s *testIntegrationSerialSuite) TestIssue19804(c *C) { + collate.SetNewCollationEnabledForTest(true) + defer collate.SetNewCollationEnabledForTest(false) + + tk := testkit.NewTestKit(c, s.store) + tk.MustExec(`use test;`) + tk.MustExec(`drop table if exists t;`) + tk.MustExec(`create table t(a set('a', 'b', 'c'));`) + tk.MustGetErrMsg("alter table t change a a set('a', 'b', 'c', 'c');", "[types:1291]Column 'a' has duplicated value 'c' in SET") + tk.MustExec(`drop table if exists t;`) + tk.MustExec(`create table t(a enum('a', 'b', 'c'));`) + tk.MustGetErrMsg("alter table t change a a enum('a', 'b', 'c', 'c');", "[types:1291]Column 'a' has duplicated value 'c' in ENUM") + tk.MustExec(`drop table if exists t;`) + tk.MustExec(`create table t(a set('a', 'b', 'c'));`) + tk.MustExec(`alter table t change a a set('a', 'b', 'c', 'd');`) + tk.MustGetErrMsg(`alter table t change a a set('a', 'b', 'c', 'e', 'f');`, "[ddl:8200]Unsupported modify column: cannot modify set column value d to e") +} + +func (s *testIntegrationSerialSuite) TestIssue18949(c *C) { collate.SetNewCollationEnabledForTest(true) defer collate.SetNewCollationEnabledForTest(false) From 332024810c56fac96ee0ba20383711e0fa94ae4f Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Sat, 3 Oct 2020 21:54:31 +0800 Subject: [PATCH 020/229] executor: add transaction commit runtime informati ... (#19366) (#20185) --- executor/adapter.go | 10 ++++ util/execdetails/execdetails.go | 82 ++++++++++++++++++++++++++++ util/execdetails/execdetails_test.go | 73 +++++++++++++------------ 3 files changed, 129 insertions(+), 36 deletions(-) diff --git a/executor/adapter.go b/executor/adapter.go index 26296ba23bd1b..a55f7a760de98 100644 --- a/executor/adapter.go +++ b/executor/adapter.go @@ -850,6 +850,16 @@ func (a *ExecStmt) LogSlowQuery(txnTS uint64, succ bool, hasMoreResults bool) { stmtDetail = *(stmtDetailRaw.(*execdetails.StmtExecDetails)) } execDetail := sessVars.StmtCtx.GetExecDetails() + + // Attach commit runtime stats to executor runtime stats. + if execDetail.CommitDetail != nil && sessVars.StmtCtx.RuntimeStatsColl != nil { + stats := sessVars.StmtCtx.RuntimeStatsColl.GetRootStats(a.Plan.ID()) + statsWithCommit := &execdetails.RuntimeStatsWithCommit{ + RuntimeStats: stats, + Commit: execDetail.CommitDetail, + } + sessVars.StmtCtx.RuntimeStatsColl.RegisterStats(a.Plan.ID(), statsWithCommit) + } copTaskInfo := sessVars.StmtCtx.CopTasksDetails() statsInfos := plannercore.GetStatsInfo(a.Plan) memMax := sessVars.StmtCtx.MemTracker.MaxConsumed() diff --git a/util/execdetails/execdetails.go b/util/execdetails/execdetails.go index 16034787d070b..e2ca74ae553a7 100644 --- a/util/execdetails/execdetails.go +++ b/util/execdetails/execdetails.go @@ -14,6 +14,7 @@ package execdetails import ( + "bytes" "fmt" "sort" "strconv" @@ -491,3 +492,84 @@ func (e *RuntimeStatsWithConcurrencyInfo) String() string { } return result } + +// RuntimeStatsWithCommit is the RuntimeStats with commit detail. +type RuntimeStatsWithCommit struct { + RuntimeStats + Commit *CommitDetails +} + +func (e *RuntimeStatsWithCommit) String() string { + var result string + if e.RuntimeStats != nil { + result = e.RuntimeStats.String() + } + if e.Commit == nil { + return result + } + buf := bytes.NewBuffer(make([]byte, 0, len(result)+32)) + buf.WriteString(result) + if e.Commit.PrewriteTime > 0 { + buf.WriteString(", prewrite:") + buf.WriteString(e.Commit.PrewriteTime.String()) + } + if e.Commit.WaitPrewriteBinlogTime > 0 { + buf.WriteString(", wait_prewrite_binlog:") + buf.WriteString(e.Commit.WaitPrewriteBinlogTime.String()) + } + if e.Commit.GetCommitTsTime > 0 { + buf.WriteString(", get_commit_ts:") + buf.WriteString(e.Commit.GetCommitTsTime.String()) + } + if e.Commit.CommitTime > 0 { + buf.WriteString(", commit:") + buf.WriteString(e.Commit.CommitTime.String()) + } + commitBackoffTime := atomic.LoadInt64(&e.Commit.CommitBackoffTime) + if commitBackoffTime > 0 { + buf.WriteString(", commit_backoff: {time: ") + buf.WriteString(time.Duration(commitBackoffTime).String()) + tpMap := make(map[string]struct{}) + tpArray := []string{} + e.Commit.Mu.Lock() + if len(e.Commit.Mu.BackoffTypes) > 0 { + for _, tp := range e.Commit.Mu.BackoffTypes { + tpStr := tp.String() + _, ok := tpMap[tpStr] + if ok { + continue + } + tpMap[tpStr] = struct{}{} + tpArray = append(tpArray, tpStr) + } + buf.WriteString(", type: ") + sort.Strings(tpArray) + buf.WriteString(fmt.Sprintf("%v", tpArray)) + } + e.Commit.Mu.Unlock() + buf.WriteString("}") + } + if e.Commit.ResolveLockTime > 0 { + buf.WriteString(", resolve_lock: ") + buf.WriteString(time.Duration(e.Commit.ResolveLockTime).String()) + } + + prewriteRegionNum := atomic.LoadInt32(&e.Commit.PrewriteRegionNum) + if prewriteRegionNum > 0 { + buf.WriteString(", region_num:") + buf.WriteString(strconv.FormatInt(int64(prewriteRegionNum), 10)) + } + if e.Commit.WriteKeys > 0 { + buf.WriteString(", write_keys:") + buf.WriteString(strconv.FormatInt(int64(e.Commit.WriteKeys), 10)) + } + if e.Commit.WriteSize > 0 { + buf.WriteString(", write_byte:") + buf.WriteString(strconv.FormatInt(int64(e.Commit.WriteSize), 10)) + } + if e.Commit.TxnRetry > 0 { + buf.WriteString(", txn_retry:") + buf.WriteString(strconv.FormatInt(int64(e.Commit.TxnRetry), 10)) + } + return buf.String() +} diff --git a/util/execdetails/execdetails_test.go b/util/execdetails/execdetails_test.go index d39fc5058b477..9ee45d1b070df 100644 --- a/util/execdetails/execdetails_test.go +++ b/util/execdetails/execdetails_test.go @@ -15,7 +15,6 @@ package execdetails import ( "fmt" - "strconv" "sync" "testing" "time" @@ -121,40 +120,42 @@ func TestCopRuntimeStats(t *testing.T) { } } -func TestCopRuntimeStatsForTiFlash(t *testing.T) { - stats := NewRuntimeStatsColl() - tableScanID := 1 - aggID := 2 - tableReaderID := 3 - stats.RecordOneCopTask(aggID, "8.8.8.8", mockExecutorExecutionSummaryForTiFlash(1, 1, 1, "tablescan_"+strconv.Itoa(tableScanID))) - stats.RecordOneCopTask(aggID, "8.8.8.9", mockExecutorExecutionSummaryForTiFlash(2, 2, 2, "tablescan_"+strconv.Itoa(tableScanID))) - stats.RecordOneCopTask(tableScanID, "8.8.8.8", mockExecutorExecutionSummaryForTiFlash(3, 3, 3, "aggregation_"+strconv.Itoa(aggID))) - stats.RecordOneCopTask(tableScanID, "8.8.8.9", mockExecutorExecutionSummaryForTiFlash(4, 4, 4, "aggregation_"+strconv.Itoa(aggID))) - if stats.ExistsCopStats(tableScanID) != true { - t.Fatal("exist") - } - cop := stats.GetCopStats(tableScanID) - if cop.String() != "proc max:2ns, min:1ns, p80:2ns, p95:2ns, iters:3, tasks:2" { - t.Fatal("table_scan") - } - copStats := cop.stats["8.8.8.8"] - if copStats == nil { - t.Fatal("cop stats is nil") - } - copStats[0].SetRowNum(10) - copStats[0].Record(time.Second, 10) - if copStats[0].String() != "time:1.000000001s, loops:2" { - t.Fatalf("cop stats string is not expect, got: %v", copStats[0].String()) - } - - if stats.GetCopStats(aggID).String() != "proc max:4ns, min:3ns, p80:4ns, p95:4ns, iters:7, tasks:2" { - t.Fatal("agg") - } - rootStats := stats.GetRootStats(tableReaderID) - if rootStats == nil { - t.Fatal("table_reader") - } - if stats.ExistsRootStats(tableReaderID) == false { - t.Fatal("table_reader not exists") +func TestRuntimeStatsWithCommit(t *testing.T) { + basicStats := &BasicRuntimeStats{ + loop: 1, + consume: int64(time.Second), + } + commitDetail := &CommitDetails{ + GetCommitTsTime: time.Second, + PrewriteTime: time.Second, + CommitTime: time.Second, + CommitBackoffTime: int64(time.Second), + Mu: struct { + sync.Mutex + BackoffTypes []fmt.Stringer + }{BackoffTypes: []fmt.Stringer{ + stringutil.MemoizeStr(func() string { + return "backoff1" + }), + stringutil.MemoizeStr(func() string { + return "backoff2" + }), + stringutil.MemoizeStr(func() string { + return "backoff1" + }), + }}, + ResolveLockTime: int64(time.Second), + WriteKeys: 3, + WriteSize: 66, + PrewriteRegionNum: 5, + TxnRetry: 2, + } + stats := &RuntimeStatsWithCommit{ + RuntimeStats: basicStats, + Commit: commitDetail, + } + expect := "time:1s, loops:1, prewrite:1s, get_commit_ts:1s, commit:1s, commit_backoff: {time: 1s, type: [backoff1 backoff2]}, resolve_lock: 1s, region_num:5, write_keys:3, write_byte:66, txn_retry:2" + if stats.String() != expect { + t.Fatalf("%v != %v", stats.String(), expect) } } From 6e5c0c9b2dfa338670c4349763462f6d105adf16 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Sat, 3 Oct 2020 22:48:36 +0800 Subject: [PATCH 021/229] store/tikv: add sanity check for snapshot version and forUpdateTS (#20159) (#20248) --- store/tikv/2pc.go | 8 ++++++++ store/tikv/snapshot.go | 11 +++++++++++ 2 files changed, 19 insertions(+) diff --git a/store/tikv/2pc.go b/store/tikv/2pc.go index ce874c890d265..79bc67bf1ddb0 100644 --- a/store/tikv/2pc.go +++ b/store/tikv/2pc.go @@ -1146,6 +1146,14 @@ func (actionCommit) handleSingleBatch(c *twoPhaseCommitter, bo *Backoffer, batch zap.Uint64("txnStartTS", c.startTS), zap.Stringer("info", logutil.Hex(rejected))) + // Do not retry for a txn which has a too large MinCommitTs + // 3600000 << 18 = 943718400000 + if rejected.MinCommitTs-rejected.AttemptedCommitTs > 943718400000 { + err := errors.Errorf("2PC MinCommitTS is too large, we got MinCommitTS: %d, and AttemptedCommitTS: %d", + rejected.MinCommitTs, rejected.AttemptedCommitTs) + return errors.Trace(err) + } + // Update commit ts and retry. commitTS, err := c.store.getTimestampWithRetry(bo) if err != nil { diff --git a/store/tikv/snapshot.go b/store/tikv/snapshot.go index f78a9720fecf0..a8a929a2ef5de 100644 --- a/store/tikv/snapshot.go +++ b/store/tikv/snapshot.go @@ -18,6 +18,7 @@ import ( "context" "encoding/json" "fmt" + "math" "strings" "sync" "time" @@ -78,6 +79,11 @@ type tikvSnapshot struct { // newTiKVSnapshot creates a snapshot of an TiKV store. func newTiKVSnapshot(store *tikvStore, ver kv.Version, replicaReadSeed uint32) *tikvSnapshot { + // Sanity check for snapshot version. + if ver.Ver >= math.MaxInt64 && ver.Ver != math.MaxUint64 { + err := errors.Errorf("try to get snapshot with a large ts %d", ver.Ver) + panic(err) + } return &tikvSnapshot{ store: store, version: ver, @@ -91,6 +97,11 @@ func newTiKVSnapshot(store *tikvStore, ver kv.Version, replicaReadSeed uint32) * } func (s *tikvSnapshot) setSnapshotTS(ts uint64) { + // Sanity check for snapshot version. + if ts >= math.MaxInt64 && ts != math.MaxUint64 { + err := errors.Errorf("try to get snapshot with a large ts %d", ts) + panic(err) + } // Invalidate cache if the snapshotTS change! s.version.Ver = ts s.mu.Lock() From 4600ca175cf47d6e811a3715070059e0b8a17b68 Mon Sep 17 00:00:00 2001 From: lysu Date: Sat, 3 Oct 2020 23:02:40 +0800 Subject: [PATCH 022/229] tikv: fix panic in RegionStore.accessStore (#20204) (#20210) --- store/tikv/region_cache.go | 14 +++++++++++-- store/tikv/region_cache_test.go | 37 +++++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+), 2 deletions(-) diff --git a/store/tikv/region_cache.go b/store/tikv/region_cache.go index ef4d47681f8de..ede9f3e224602 100644 --- a/store/tikv/region_cache.go +++ b/store/tikv/region_cache.go @@ -573,6 +573,16 @@ func (c *RegionCache) OnSendFail(bo *Backoffer, ctx *RPCContext, scheduleReload tikvRegionCacheCounterWithSendFail.Inc() r := c.getCachedRegionWithRLock(ctx.Region) if r != nil { + peersNum := len(r.meta.Peers) + if len(ctx.Meta.Peers) != peersNum { + logutil.Logger(bo.ctx).Info("retry and refresh current ctx after send request fail and up/down stores length changed", + zap.Stringer("current", ctx), + zap.Bool("needReload", scheduleReload), + zap.Reflect("oldPeers", ctx.Meta.Peers), + zap.Reflect("newPeers", r.meta.Peers), + zap.Error(err)) + return + } rs := r.getStore() if err != nil { storeIdx, s := rs.accessStore(ctx.AccessMode, ctx.AccessIdx) @@ -1233,7 +1243,7 @@ func (r *Region) GetMeta() *metapb.Region { // GetLeaderPeerID returns leader peer ID. func (r *Region) GetLeaderPeerID() uint64 { store := r.getStore() - if int(store.workTiKVIdx) >= len(r.meta.Peers) { + if int(store.workTiKVIdx) >= store.accessStoreNum(TiKvOnly) { return 0 } storeIdx, _ := store.accessStore(TiKvOnly, store.workTiKVIdx) @@ -1243,7 +1253,7 @@ func (r *Region) GetLeaderPeerID() uint64 { // GetLeaderStoreID returns the store ID of the leader region. func (r *Region) GetLeaderStoreID() uint64 { store := r.getStore() - if int(store.workTiKVIdx) >= len(r.meta.Peers) { + if int(store.workTiKVIdx) >= store.accessStoreNum(TiKvOnly) { return 0 } storeIdx, _ := store.accessStore(TiKvOnly, store.workTiKVIdx) diff --git a/store/tikv/region_cache_test.go b/store/tikv/region_cache_test.go index 871e6ce03a21e..6d65ba48761ab 100644 --- a/store/tikv/region_cache_test.go +++ b/store/tikv/region_cache_test.go @@ -28,6 +28,7 @@ import ( "github.com/pingcap/kvproto/pkg/metapb" "github.com/pingcap/tidb/kv" "github.com/pingcap/tidb/store/mockstore/mocktikv" + pd "github.com/tikv/pd/client" ) type testRegionCacheSuite struct { @@ -1075,6 +1076,42 @@ func (s *testRegionCacheSuite) TestMixedMeetEpochNotMatch(c *C) { c.Assert(followReqSeed, Equals, uint32(1)) } +func (s *testRegionCacheSuite) TestPeersLenChange(c *C) { + // 2 peers [peer1, peer2] and let peer2 become leader + loc, err := s.cache.LocateKey(s.bo, []byte("a")) + c.Assert(err, IsNil) + s.cache.UpdateLeader(loc.Region, s.store2, 0) + + // current leader is peer2 in [peer1, peer2] + loc, err = s.cache.LocateKey(s.bo, []byte("a")) + c.Assert(err, IsNil) + ctx, err := s.cache.GetTiKVRPCContext(s.bo, loc.Region, kv.ReplicaReadLeader, 0) + c.Assert(err, IsNil) + c.Assert(ctx.Peer.StoreId, Equals, s.store2) + + // simulate peer1 became down in kv heartbeat and loaded before response back. + cpMeta := &metapb.Region{ + Id: ctx.Meta.Id, + StartKey: ctx.Meta.StartKey, + EndKey: ctx.Meta.EndKey, + RegionEpoch: ctx.Meta.RegionEpoch, + Peers: make([]*metapb.Peer, len(ctx.Meta.Peers)), + } + copy(cpMeta.Peers, ctx.Meta.Peers) + cpRegion := &pd.Region{ + Meta: cpMeta, + DownPeers: []*metapb.Peer{{Id: s.peer1, StoreId: s.store1}}, + } + filterUnavailablePeers(cpRegion) + region := &Region{meta: cpRegion.Meta} + err = region.init(s.cache) + c.Assert(err, IsNil) + s.cache.insertRegionToCache(region) + + // OnSendFail should not panic + s.cache.OnSendFail(NewNoopBackoff(context.Background()), ctx, false, errors.New("send fail")) +} + func (s *testRegionRequestSuite) TestGetRegionByIDFromCache(c *C) { region, err := s.cache.LocateRegionByID(s.bo, s.region) c.Assert(err, IsNil) From e4638533578e50a39afb0d2136766e368c852747 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Sat, 3 Oct 2020 23:15:39 +0800 Subject: [PATCH 023/229] executor: fix data race in test (#20142) (#20146) Signed-off-by: ti-srebot --- executor/join_test.go | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/executor/join_test.go b/executor/join_test.go index 7fb5bda1da1f8..7f6507b4fd17e 100644 --- a/executor/join_test.go +++ b/executor/join_test.go @@ -2090,8 +2090,14 @@ func (s *testSuiteJoinSerial) TestInlineProjection4HashJoinIssue15316(c *C) { } func (s *testSuiteJoinSerial) TestIssue18070(c *C) { - config.GetGlobalConfig().OOMAction = config.OOMActionCancel - defer func() { config.GetGlobalConfig().OOMAction = config.OOMActionLog }() + config.UpdateGlobal(func(conf *config.Config) { + conf.OOMAction = config.OOMActionCancel + }) + defer func() { + config.UpdateGlobal(func(conf *config.Config) { + conf.OOMAction = config.OOMActionLog + }) + }() tk := testkit.NewTestKit(c, s.store) tk.MustExec("use test") tk.MustExec("drop table if exists t1, t2") From 7eab75c0681df434fc6d3e691df9489e1ce1de97 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Sat, 3 Oct 2020 23:29:40 +0800 Subject: [PATCH 024/229] executor: fix sort result for batch-point-get by unsigned pk (#20108) (#20205) Signed-off-by: ti-srebot --- executor/batch_point_get.go | 14 ++++++++++++-- executor/batch_point_get_test.go | 12 ++++++++++++ 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/executor/batch_point_get.go b/executor/batch_point_get.go index 50329caec87ed..b2b8ff82a9594 100644 --- a/executor/batch_point_get.go +++ b/executor/batch_point_get.go @@ -19,6 +19,7 @@ import ( "github.com/pingcap/failpoint" "github.com/pingcap/parser/model" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/kv" "github.com/pingcap/tidb/sessionctx/variable" "github.com/pingcap/tidb/store/tikv" @@ -231,12 +232,21 @@ func (e *BatchPointGetExec) initialize(ctx context.Context) error { failpoint.InjectContext(ctx, "batchPointGetRepeatableReadTest-step2", nil) }) } else if e.keepOrder { - sort.Slice(e.handles, func(i int, j int) bool { + less := func(i int, j int) bool { if e.desc { return e.handles[i] > e.handles[j] } return e.handles[i] < e.handles[j] - }) + } + if e.tblInfo.PKIsHandle && mysql.HasUnsignedFlag(e.tblInfo.GetPkColInfo().Flag) { + less = func(i int, j int) bool { + if e.desc { + return uint64(e.handles[i]) > uint64(e.handles[j]) + } + return uint64(e.handles[i]) < uint64(e.handles[j]) + } + } + sort.Slice(e.handles, less) } keys := make([]kv.Key, len(e.handles)) diff --git a/executor/batch_point_get_test.go b/executor/batch_point_get_test.go index 732c45ee2fc3f..e53c608647052 100644 --- a/executor/batch_point_get_test.go +++ b/executor/batch_point_get_test.go @@ -138,3 +138,15 @@ func (s *testBatchPointGetSuite) TestBatchPointGetCache(c *C) { tk.MustQuery("SELECT id, token FROM test.customers WHERE id IN (28)") tk.MustQuery("SELECT id, token FROM test.customers WHERE id IN (28, 29);").Check(testkit.Rows("28 07j", "29 03j")) } + +func (s *testBatchPointGetSuite) TestBatchPointGetUnsignedHandleWithSort(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t2") + tk.MustExec("create table t2 (id bigint(20) unsigned, primary key(id))") + tk.MustExec("insert into t2 values (8738875760185212610)") + tk.MustExec("insert into t2 values (9814441339970117597)") + tk.MustExec("insert into t2 values (1)") + tk.MustQuery("select id from t2 where id in (8738875760185212610, 1, 9814441339970117597) order by id").Check(testkit.Rows("1", "8738875760185212610", "9814441339970117597")) + tk.MustQuery("select id from t2 where id in (8738875760185212610, 1, 9814441339970117597) order by id desc").Check(testkit.Rows("9814441339970117597", "8738875760185212610", "1")) +} From 65747bfc4e3355a0e1a0fac14659fc2ed41ac115 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Sat, 3 Oct 2020 23:50:54 +0800 Subject: [PATCH 025/229] expression: fix a bug that `from_unixtime` + `unio ... (#20225) (#20240) --- expression/builtin_time.go | 1 - expression/integration_test.go | 17 +++++++++++++++++ expression/typeinfer_test.go | 2 +- 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/expression/builtin_time.go b/expression/builtin_time.go index 32a35e021fd25..7f953ce1cda91 100644 --- a/expression/builtin_time.go +++ b/expression/builtin_time.go @@ -1684,7 +1684,6 @@ func (c *fromUnixTimeFunctionClass) getFunction(ctx sessionctx.Context, args []E } if len(args) > 1 { - bf.tp.Flen = args[1].GetType().Flen sig = &builtinFromUnixTime2ArgSig{bf} sig.setPbCode(tipb.ScalarFuncSig_FromUnixTime2Arg) return sig, nil diff --git a/expression/integration_test.go b/expression/integration_test.go index d24c10d0fcff0..c45990245334e 100755 --- a/expression/integration_test.go +++ b/expression/integration_test.go @@ -6684,6 +6684,23 @@ func (s *testIntegrationSuite) TestIssue18515(c *C) { tk.MustExec("select /*+ TIDB_INLJ(t2) */ t1.a, t1.c, t2.a from t t1, t t2 where t1.c=t2.c;") } +func (s *testIntegrationSuite) TestIssue20223(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t") + tk.MustExec("CREATE TABLE t (" + + "id int(10) unsigned NOT NULL AUTO_INCREMENT," + + "type tinyint(4) NOT NULL," + + "create_time int(11) NOT NULL," + + "PRIMARY KEY (id)" + + ")") + tk.MustExec("insert into t values (4, 2, 1598584933)") + tk.MustQuery("select from_unixtime(create_time,'%Y-%m-%d') as t_day,count(*) as cnt from t where `type` = 1 " + + "group by t_day union all " + + "select from_unixtime(create_time,'%Y-%m-%d') as t_day,count(*) as cnt from t where `type` = 2 " + + "group by t_day").Check(testkit.Rows("2020-08-28 1")) +} + func (s *testIntegrationSuite) TestIssue18525(c *C) { tk := testkit.NewTestKit(c, s.store) tk.MustExec("use test") diff --git a/expression/typeinfer_test.go b/expression/typeinfer_test.go index 51d30d059edc0..b1c2be753779b 100644 --- a/expression/typeinfer_test.go +++ b/expression/typeinfer_test.go @@ -1864,7 +1864,7 @@ func (s *testInferTypeSuite) createTestCase4TimeFuncs() []typeInferTestCase { {"from_unixtime(20170101.999)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, 3}, {"from_unixtime(20170101.1234567)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, int(types.MaxFsp)}, {"from_unixtime('20170101.999')", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, int(types.MaxFsp)}, - {"from_unixtime(20170101.123, '%H')", mysql.TypeVarString, charset.CharsetUTF8MB4, 0, 2, types.UnspecifiedLength}, + {"from_unixtime(20170101.123, '%H')", mysql.TypeVarString, charset.CharsetUTF8MB4, 0, -1, types.UnspecifiedLength}, {"extract(day from c_char)", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxIntWidth, 0}, {"extract(hour from c_char)", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxIntWidth, 0}, From 2826243fe9bdb961108e0a4c0697e06d2f40122f Mon Sep 17 00:00:00 2001 From: Shenghui Wu <793703860@qq.com> Date: Sun, 4 Oct 2020 12:58:09 +0800 Subject: [PATCH 026/229] util: check whether consume bytes is 0 (#19763) --- util/memory/tracker.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/util/memory/tracker.go b/util/memory/tracker.go index ab734b247eebc..f44ea4af8b52b 100644 --- a/util/memory/tracker.go +++ b/util/memory/tracker.go @@ -206,6 +206,9 @@ func (t *Tracker) ReplaceChild(oldChild, newChild *Tracker) { // which means this is a memory release operation. When memory usage of a tracker // exceeds its bytesLimit, the tracker calls its action, so does each of its ancestors. func (t *Tracker) Consume(bytes int64) { + if bytes == 0 { + return + } var rootExceed *Tracker for tracker := t; tracker != nil; tracker = tracker.parent { if atomic.AddInt64(&tracker.bytesConsumed, bytes) >= tracker.bytesLimit && tracker.bytesLimit > 0 { From 81b8cf60e6fb753719a2d37ee8183e74d45b9cab Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Fri, 9 Oct 2020 15:01:05 +0800 Subject: [PATCH 027/229] types: fix ambiguous year conversion (#19781) (#20292) --- types/convert_test.go | 16 ++++++++++++++++ types/datum.go | 7 +++++-- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/types/convert_test.go b/types/convert_test.go index a3f6f67ff8a69..3d28731a7211e 100644 --- a/types/convert_test.go +++ b/types/convert_test.go @@ -687,10 +687,26 @@ func (s *testTypeConvertSuite) TestConvert(c *C) { signedAccept(c, mysql.TypeYear, 1901, "1901") signedAccept(c, mysql.TypeYear, 1900.567, "1901") signedDeny(c, mysql.TypeYear, 1900.456, "0") + signedAccept(c, mysql.TypeYear, 0, "0") + signedAccept(c, mysql.TypeYear, "0", "2000") + signedAccept(c, mysql.TypeYear, "00", "2000") + signedAccept(c, mysql.TypeYear, " 0", "2000") + signedAccept(c, mysql.TypeYear, " 00", "2000") + signedAccept(c, mysql.TypeYear, " 000", "0") + signedAccept(c, mysql.TypeYear, " 0000 ", "2000") + signedAccept(c, mysql.TypeYear, " 0ab", "0") + signedAccept(c, mysql.TypeYear, "00bc", "0") + signedAccept(c, mysql.TypeYear, "000a", "0") + signedAccept(c, mysql.TypeYear, " 000a ", "2000") signedAccept(c, mysql.TypeYear, 1, "2001") + signedAccept(c, mysql.TypeYear, "1", "2001") + signedAccept(c, mysql.TypeYear, "01", "2001") signedAccept(c, mysql.TypeYear, 69, "2069") + signedAccept(c, mysql.TypeYear, "69", "2069") signedAccept(c, mysql.TypeYear, 70, "1970") + signedAccept(c, mysql.TypeYear, "70", "1970") signedAccept(c, mysql.TypeYear, 99, "1999") + signedAccept(c, mysql.TypeYear, "99", "1999") signedDeny(c, mysql.TypeYear, 100, "0") signedDeny(c, mysql.TypeYear, "99999999999999999999999999999999999", "0") diff --git a/types/datum.go b/types/datum.go index e9a14008d7fd9..4e91056bbef57 100644 --- a/types/datum.go +++ b/types/datum.go @@ -1333,12 +1333,15 @@ func (d *Datum) convertToMysqlYear(sc *stmtctx.StatementContext, target *FieldTy switch d.k { case KindString, KindBytes: s := d.GetString() - y, err = StrToInt(sc, s, false) + trimS := strings.TrimSpace(s) + y, err = StrToInt(sc, trimS, false) if err != nil { ret.SetInt64(0) return ret, errors.Trace(err) } - if len(s) != 4 && len(s) > 0 && s[0:1] == "0" { + // condition: + // parsed to 0, not a string of length 4, the first valid char is a 0 digit + if len(s) != 4 && y == 0 && strings.HasPrefix(trimS, "0") { adjust = true } case KindMysqlTime: From d1b10d431dea1a8006354e0db71f279bc87db768 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Fri, 9 Oct 2020 15:45:13 +0800 Subject: [PATCH 028/229] config: check if valid storage by simple indexing (#19535) (#20342) --- config/config.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/config.go b/config/config.go index 9392eb797b95b..bb1d3daf94309 100644 --- a/config/config.go +++ b/config/config.go @@ -821,7 +821,7 @@ func (c *Config) Valid() error { if c.Security.SkipGrantTable && !hasRootPrivilege() { return fmt.Errorf("TiDB run with skip-grant-table need root privilege") } - if _, ok := ValidStorage[c.Store]; !ok { + if !ValidStorage[c.Store] { nameList := make([]string, 0, len(ValidStorage)) for k, v := range ValidStorage { if v { From 2f98a294721c5c0c08e265ecb2c91e9cf4aa5d77 Mon Sep 17 00:00:00 2001 From: Zejun Li Date: Fri, 9 Oct 2020 16:18:09 +0800 Subject: [PATCH 029/229] memdb: fix data race between mutators and `UnionScan` (#20365) --- kv/memdb/arena.go | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/kv/memdb/arena.go b/kv/memdb/arena.go index f02b34174ab67..edfd8bef73e99 100644 --- a/kv/memdb/arena.go +++ b/kv/memdb/arena.go @@ -15,6 +15,7 @@ package memdb import ( "math" + "sync" "unsafe" ) @@ -42,6 +43,7 @@ const ( ) type arena struct { + sync.Mutex blockSize int blocks []arenaBlock } @@ -57,6 +59,7 @@ func newArenaLocator() *arena { } func (a *arena) snapshot() arenaSnapshot { + a.Lock() snap := arenaSnapshot{ blockSize: a.blockSize, blocks: len(a.blocks), @@ -64,10 +67,12 @@ func (a *arena) snapshot() arenaSnapshot { if len(a.blocks) > 0 { snap.offsetInBlock = a.blocks[len(a.blocks)-1].length } + a.Unlock() return snap } func (a *arena) revert(snap arenaSnapshot) { + a.Lock() for i := snap.blocks; i < len(a.blocks); i++ { a.blocks[i] = arenaBlock{} } @@ -76,6 +81,7 @@ func (a *arena) revert(snap arenaSnapshot) { a.blocks[len(a.blocks)-1].length = snap.offsetInBlock } a.blockSize = snap.blockSize + a.Unlock() } func (a *arena) newNode(key []byte, v []byte, height int) (*node, arenaAddr) { @@ -92,7 +98,10 @@ func (a *arena) newNode(key []byte, v []byte, height int) (*node, arenaAddr) { } func (a *arena) getFrom(addr arenaAddr) []byte { - return a.blocks[addr.blockIdx-1].getFrom(addr.blockOffset) + a.Lock() + block := &a.blocks[addr.blockIdx-1] + a.Unlock() + return block.getFrom(addr.blockOffset) } func (a *arena) alloc(size int) (arenaAddr, []byte) { @@ -122,7 +131,11 @@ func (a *arena) enlarge(allocSize, blockSize int) { if a.blockSize > maxBlockSize { a.blockSize = maxBlockSize } - a.blocks = append(a.blocks, newArenaBlock(a.blockSize)) + block := newArenaBlock(a.blockSize) + + a.Lock() + a.blocks = append(a.blocks, block) + a.Unlock() } func (a *arena) allocInLastBlock(size int) (arenaAddr, []byte) { From 08c63bf3370921c11adb849cfd5597ed11889086 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Sat, 10 Oct 2020 16:42:59 +0800 Subject: [PATCH 030/229] executor: add pessimistic lock keys runtime information (#19547) (#20199) --- executor/adapter.go | 28 ++-- executor/executor.go | 8 +- executor/executor_test.go | 37 +++++ kv/kv.go | 2 + sessionctx/stmtctx/stmtctx.go | 11 ++ store/tikv/2pc.go | 17 ++- store/tikv/txn.go | 18 +++ util/execdetails/execdetails.go | 218 +++++++++++++++++++-------- util/execdetails/execdetails_test.go | 34 ++++- 9 files changed, 293 insertions(+), 80 deletions(-) diff --git a/executor/adapter.go b/executor/adapter.go index a55f7a760de98..329198cc58aef 100644 --- a/executor/adapter.go +++ b/executor/adapter.go @@ -556,8 +556,13 @@ func (a *ExecStmt) handlePessimisticDML(ctx context.Context, e Executor) error { } seVars := sctx.GetSessionVars() lockCtx := newLockCtx(seVars, seVars.LockWaitTimeout) + var lockKeyStats *execdetails.LockKeysDetails + ctx = context.WithValue(ctx, execdetails.LockKeysDetailCtxKey, &lockKeyStats) startLocking := time.Now() err = txn.LockKeys(ctx, lockCtx, keys...) + if lockKeyStats != nil { + seVars.StmtCtx.MergeLockKeysExecDetails(lockKeyStats) + } if err == nil { return nil } @@ -795,10 +800,21 @@ func (a *ExecStmt) CloseRecordSet(txnStartTS uint64, lastErr error) { // 3. record execute duration metric. // 4. update the `PrevStmt` in session variable. func (a *ExecStmt) FinishExecuteStmt(txnTS uint64, succ bool, hasMoreResults bool) { + sessVars := a.Ctx.GetSessionVars() + execDetail := sessVars.StmtCtx.GetExecDetails() + // Attach commit/lockKeys runtime stats to executor runtime stats. + if (execDetail.CommitDetail != nil || execDetail.LockKeysDetail != nil) && sessVars.StmtCtx.RuntimeStatsColl != nil { + stats := sessVars.StmtCtx.RuntimeStatsColl.GetRootStats(a.Plan.ID()) + statsWithCommit := &execdetails.RuntimeStatsWithCommit{ + RuntimeStats: stats, + Commit: execDetail.CommitDetail, + LockKeys: execDetail.LockKeysDetail, + } + sessVars.StmtCtx.RuntimeStatsColl.RegisterStats(a.Plan.ID(), statsWithCommit) + } // `LowSlowQuery` and `SummaryStmt` must be called before recording `PrevStmt`. a.LogSlowQuery(txnTS, succ, hasMoreResults) a.SummaryStmt(succ) - sessVars := a.Ctx.GetSessionVars() prevStmt := a.GetTextToLog() if config.RedactLogEnabled() { sessVars.PrevStmt = FormatSQL(prevStmt, nil) @@ -850,16 +866,6 @@ func (a *ExecStmt) LogSlowQuery(txnTS uint64, succ bool, hasMoreResults bool) { stmtDetail = *(stmtDetailRaw.(*execdetails.StmtExecDetails)) } execDetail := sessVars.StmtCtx.GetExecDetails() - - // Attach commit runtime stats to executor runtime stats. - if execDetail.CommitDetail != nil && sessVars.StmtCtx.RuntimeStatsColl != nil { - stats := sessVars.StmtCtx.RuntimeStatsColl.GetRootStats(a.Plan.ID()) - statsWithCommit := &execdetails.RuntimeStatsWithCommit{ - RuntimeStats: stats, - Commit: execDetail.CommitDetail, - } - sessVars.StmtCtx.RuntimeStatsColl.RegisterStats(a.Plan.ID(), statsWithCommit) - } copTaskInfo := sessVars.StmtCtx.CopTasksDetails() statsInfos := plannercore.GetStatsInfo(a.Plan) memMax := sessVars.StmtCtx.MemTracker.MaxConsumed() diff --git a/executor/executor.go b/executor/executor.go index 21f57bf5a6176..d2189079de177 100644 --- a/executor/executor.go +++ b/executor/executor.go @@ -953,7 +953,13 @@ func doLockKeys(ctx context.Context, se sessionctx.Context, lockCtx *kv.LockCtx, if err != nil { return err } - return txn.LockKeys(sessionctx.SetCommitCtx(ctx, se), lockCtx, keys...) + var lockKeyStats *execdetails.LockKeysDetails + ctx = context.WithValue(ctx, execdetails.LockKeysDetailCtxKey, &lockKeyStats) + err = txn.LockKeys(sessionctx.SetCommitCtx(ctx, se), lockCtx, keys...) + if lockKeyStats != nil { + sctx.MergeLockKeysExecDetails(lockKeyStats) + } + return err } // LimitExec represents limit executor diff --git a/executor/executor_test.go b/executor/executor_test.go index 035d7631bfa31..29888cd711ad9 100644 --- a/executor/executor_test.go +++ b/executor/executor_test.go @@ -6017,6 +6017,43 @@ func (s *testSuite) TestIssue19372(c *C) { tk.MustQuery("select (select t2.c_str from t2 where t2.c_str <= t1.c_str and t2.c_int in (1, 2) order by t2.c_str limit 1) x from t1 order by c_int;").Check(testkit.Rows("a", "a", "a")) } +func (s *testSuite) TestCollectDMLRuntimeStats(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t1") + tk.MustExec("create table t1 (a int, b int, unique index (a))") + + testSQLs := []string{ + "insert ignore into t1 values (5,5);", + "insert into t1 values (5,5) on duplicate key update a=a+1;", + "replace into t1 values (5,6),(6,7)", + "update t1 set a=a+1 where a=6;", + } + + getRootStats := func() string { + info := tk.Se.ShowProcess() + c.Assert(info, NotNil) + p, ok := info.Plan.(plannercore.Plan) + c.Assert(ok, IsTrue) + stats := tk.Se.GetSessionVars().StmtCtx.RuntimeStatsColl.GetRootStats(p.ID()) + return stats.String() + } + for _, sql := range testSQLs { + tk.MustExec(sql) + } + + // Test for lock keys stats. + tk.MustExec("begin pessimistic") + tk.MustExec("update t1 set b=b+1") + c.Assert(getRootStats(), Matches, "time.*lock_keys.*time.* region.* keys.* lock_rpc:.* rpc_count.*") + tk.MustExec("rollback") + + tk.MustExec("begin pessimistic") + tk.MustQuery("select * from t1 for update").Check(testkit.Rows("5 6", "7 7")) + c.Assert(getRootStats(), Matches, "time.*lock_keys.*time.* region.* keys.* lock_rpc:.* rpc_count.*") + tk.MustExec("rollback") +} + func (s *testSuite) TestIssue13758(c *C) { tk := testkit.NewTestKit(c, s.store) tk.MustExec("use test") diff --git a/kv/kv.go b/kv/kv.go index ef91524f480d7..25e2b5f5e9ebe 100644 --- a/kv/kv.go +++ b/kv/kv.go @@ -20,6 +20,7 @@ import ( "github.com/pingcap/tidb/config" "github.com/pingcap/tidb/store/tikv/oracle" + "github.com/pingcap/tidb/util/execdetails" "github.com/pingcap/tidb/util/memory" ) @@ -236,6 +237,7 @@ type LockCtx struct { ValuesLock sync.Mutex LockExpired *uint32 CheckKeyExists map[string]struct{} + Stats *execdetails.LockKeysDetails } // ReturnedValue pairs the Value and AlreadyLocked flag for PessimisticLock return values result. diff --git a/sessionctx/stmtctx/stmtctx.go b/sessionctx/stmtctx/stmtctx.go index 2089e48c3588d..a51e57ad2b1b4 100644 --- a/sessionctx/stmtctx/stmtctx.go +++ b/sessionctx/stmtctx/stmtctx.go @@ -497,6 +497,17 @@ func (sc *StatementContext) MergeExecDetails(details *execdetails.ExecDetails, c sc.mu.Unlock() } +// MergeLockKeysExecDetails merges lock keys execution details into self. +func (sc *StatementContext) MergeLockKeysExecDetails(lockKeys *execdetails.LockKeysDetails) { + sc.mu.Lock() + if sc.mu.execDetails.LockKeysDetail == nil { + sc.mu.execDetails.LockKeysDetail = lockKeys + } else { + sc.mu.execDetails.LockKeysDetail.Merge(lockKeys) + } + sc.mu.Unlock() +} + // GetExecDetails gets the execution details for the statement. func (sc *StatementContext) GetExecDetails() execdetails.ExecDetails { var details execdetails.ExecDetails diff --git a/store/tikv/2pc.go b/store/tikv/2pc.go index 79bc67bf1ddb0..3307b24699897 100644 --- a/store/tikv/2pc.go +++ b/store/tikv/2pc.go @@ -555,7 +555,9 @@ func (c *twoPhaseCommitter) doActionOnGroupMutations(bo *Backoffer, action twoPh var batches []batchMutations var sizeFunc = c.keySize - if _, ok := action.(actionPrewrite); ok { + + switch act := action.(type) { + case actionPrewrite: // Do not update regionTxnSize on retries. They are not used when building a PrewriteRequest. if len(bo.errors) == 0 { for _, group := range groups { @@ -564,6 +566,10 @@ func (c *twoPhaseCommitter) doActionOnGroupMutations(bo *Backoffer, action twoPh } sizeFunc = c.keyValueSize atomic.AddInt32(&c.getDetail().PrewriteRegionNum, int32(len(groups))) + case actionPessimisticLock: + if act.LockCtx.Stats != nil { + act.LockCtx.Stats.RegionNum = int32(len(groups)) + } } primaryIdx := -1 @@ -934,7 +940,12 @@ func (action actionPessimisticLock) handleSingleBatch(c *twoPhaseCommitter, bo * time.Sleep(300 * time.Millisecond) return kv.ErrWriteConflict }) + startTime := time.Now() resp, err := c.store.SendReq(bo, req, batch.region, readTimeoutShort) + if action.LockCtx.Stats != nil { + atomic.AddInt64(&action.LockCtx.Stats.LockRPCTime, int64(time.Since(startTime))) + atomic.AddInt64(&action.LockCtx.Stats.LockRPCCount, 1) + } if err != nil { return errors.Trace(err) } @@ -989,7 +1000,11 @@ func (action actionPessimisticLock) handleSingleBatch(c *twoPhaseCommitter, bo * } // Because we already waited on tikv, no need to Backoff here. // tikv default will wait 3s(also the maximum wait value) when lock error occurs + startTime = time.Now() msBeforeTxnExpired, _, err := c.store.lockResolver.ResolveLocks(bo, 0, locks) + if action.LockCtx.Stats != nil { + atomic.AddInt64(&action.LockCtx.Stats.ResolveLockTime, int64(time.Since(startTime))) + } if err != nil { return errors.Trace(err) } diff --git a/store/tikv/txn.go b/store/tikv/txn.go index 2f41dd1cb6d20..efb9edf937e1a 100644 --- a/store/tikv/txn.go +++ b/store/tikv/txn.go @@ -367,6 +367,7 @@ func (txn *tikvTxn) LockKeys(ctx context.Context, lockCtx *kv.LockCtx, keysInput // Exclude keys that are already locked. var err error keys := make([][]byte, 0, len(keysInput)) + startTime := time.Now() defer func() { if err == nil { if lockCtx.PessimisticLockWaited != nil { @@ -380,6 +381,14 @@ func (txn *tikvTxn) LockKeys(ctx context.Context, lockCtx *kv.LockCtx, keysInput if lockCtx.LockKeysCount != nil { *lockCtx.LockKeysCount += int32(len(keys)) } + if lockCtx.Stats != nil { + lockCtx.Stats.TotalTime = time.Since(startTime) + ctxValue := ctx.Value(execdetails.LockKeysDetailCtxKey) + if ctxValue != nil { + lockKeysDetail := ctxValue.(**execdetails.LockKeysDetails) + *lockKeysDetail = lockCtx.Stats + } + } }() for _, key := range keysInput { // The value of lockedMap is only used by pessimistic transactions. @@ -428,12 +437,21 @@ func (txn *tikvTxn) LockKeys(ctx context.Context, lockCtx *kv.LockCtx, keysInput assignedPrimaryKey = true } + lockCtx.Stats = &execdetails.LockKeysDetails{ + LockKeys: int32(len(keys)), + } bo := NewBackofferWithVars(ctx, pessimisticLockMaxBackoff, txn.vars) txn.committer.forUpdateTS = lockCtx.ForUpdateTS // If the number of keys greater than 1, it can be on different region, // concurrently execute on multiple regions may lead to deadlock. txn.committer.isFirstLock = len(txn.lockKeys) == 0 && len(keys) == 1 err = txn.committer.pessimisticLockMutations(bo, lockCtx, CommitterMutations{keys: keys}) + if bo.totalSleep > 0 { + atomic.AddInt64(&lockCtx.Stats.BackoffTime, int64(bo.totalSleep)*int64(time.Millisecond)) + lockCtx.Stats.Mu.Lock() + lockCtx.Stats.Mu.BackoffTypes = append(lockCtx.Stats.Mu.BackoffTypes, bo.types...) + lockCtx.Stats.Mu.Unlock() + } if lockCtx.Killed != nil { // If the kill signal is received during waiting for pessimisticLock, // pessimisticLockKeys would handle the error but it doesn't reset the flag. diff --git a/util/execdetails/execdetails.go b/util/execdetails/execdetails.go index e2ca74ae553a7..c8e5e245d17ad 100644 --- a/util/execdetails/execdetails.go +++ b/util/execdetails/execdetails.go @@ -28,9 +28,15 @@ import ( ) type commitDetailCtxKeyType struct{} +type lockKeysDetailCtxKeyType struct{} -// CommitDetailCtxKey presents CommitDetail info key in context. -var CommitDetailCtxKey = commitDetailCtxKeyType{} +var ( + // CommitDetailCtxKey presents CommitDetail info key in context. + CommitDetailCtxKey = commitDetailCtxKeyType{} + + // LockKeysDetailCtxKey presents LockKeysDetail info key in context. + LockKeysDetailCtxKey = lockKeysDetailCtxKeyType{} +) // ExecDetails contains execution detail information. type ExecDetails struct { @@ -46,6 +52,7 @@ type ExecDetails struct { TotalKeys int64 ProcessedKeys int64 CommitDetail *CommitDetails + LockKeysDetail *LockKeysDetails } type stmtExecDetailKeyType struct{} @@ -81,6 +88,35 @@ type CommitDetails struct { TxnRetry int } +// LockKeysDetails contains pessimistic lock keys detail information. +type LockKeysDetails struct { + TotalTime time.Duration + RegionNum int32 + LockKeys int32 + ResolveLockTime int64 + BackoffTime int64 + Mu struct { + sync.Mutex + BackoffTypes []fmt.Stringer + } + LockRPCTime int64 + LockRPCCount int64 + RetryCount int +} + +// Merge merges lock keys execution details into self. +func (ld *LockKeysDetails) Merge(lockKey *LockKeysDetails) { + ld.TotalTime += lockKey.TotalTime + ld.RegionNum += lockKey.RegionNum + ld.LockKeys += lockKey.LockKeys + ld.ResolveLockTime += lockKey.ResolveLockTime + ld.BackoffTime += lockKey.BackoffTime + ld.LockRPCTime += lockKey.LockRPCTime + ld.LockRPCCount += ld.LockRPCCount + ld.Mu.BackoffTypes = append(ld.Mu.BackoffTypes, lockKey.Mu.BackoffTypes...) + ld.RetryCount++ +} + const ( // CopTimeStr represents the sum of cop-task time spend in TiDB distSQL. CopTimeStr = "Cop_time" @@ -496,80 +532,130 @@ func (e *RuntimeStatsWithConcurrencyInfo) String() string { // RuntimeStatsWithCommit is the RuntimeStats with commit detail. type RuntimeStatsWithCommit struct { RuntimeStats - Commit *CommitDetails + Commit *CommitDetails + LockKeys *LockKeysDetails } func (e *RuntimeStatsWithCommit) String() string { - var result string + buf := bytes.NewBuffer(make([]byte, 0, 32)) if e.RuntimeStats != nil { - result = e.RuntimeStats.String() - } - if e.Commit == nil { - return result - } - buf := bytes.NewBuffer(make([]byte, 0, len(result)+32)) - buf.WriteString(result) - if e.Commit.PrewriteTime > 0 { - buf.WriteString(", prewrite:") - buf.WriteString(e.Commit.PrewriteTime.String()) - } - if e.Commit.WaitPrewriteBinlogTime > 0 { - buf.WriteString(", wait_prewrite_binlog:") - buf.WriteString(e.Commit.WaitPrewriteBinlogTime.String()) - } - if e.Commit.GetCommitTsTime > 0 { - buf.WriteString(", get_commit_ts:") - buf.WriteString(e.Commit.GetCommitTsTime.String()) - } - if e.Commit.CommitTime > 0 { - buf.WriteString(", commit:") - buf.WriteString(e.Commit.CommitTime.String()) - } - commitBackoffTime := atomic.LoadInt64(&e.Commit.CommitBackoffTime) - if commitBackoffTime > 0 { - buf.WriteString(", commit_backoff: {time: ") - buf.WriteString(time.Duration(commitBackoffTime).String()) - tpMap := make(map[string]struct{}) - tpArray := []string{} - e.Commit.Mu.Lock() - if len(e.Commit.Mu.BackoffTypes) > 0 { - for _, tp := range e.Commit.Mu.BackoffTypes { - tpStr := tp.String() - _, ok := tpMap[tpStr] - if ok { - continue - } - tpMap[tpStr] = struct{}{} - tpArray = append(tpArray, tpStr) + buf.WriteString(e.RuntimeStats.String()) + } + if e.Commit != nil { + buf.WriteString(", commit_txn: {") + if e.Commit.PrewriteTime > 0 { + buf.WriteString("prewrite:") + buf.WriteString(e.Commit.PrewriteTime.String()) + } + if e.Commit.WaitPrewriteBinlogTime > 0 { + buf.WriteString(", wait_prewrite_binlog:") + buf.WriteString(e.Commit.WaitPrewriteBinlogTime.String()) + } + if e.Commit.GetCommitTsTime > 0 { + buf.WriteString(", get_commit_ts:") + buf.WriteString(e.Commit.GetCommitTsTime.String()) + } + if e.Commit.CommitTime > 0 { + buf.WriteString(", commit:") + buf.WriteString(e.Commit.CommitTime.String()) + } + commitBackoffTime := atomic.LoadInt64(&e.Commit.CommitBackoffTime) + if commitBackoffTime > 0 { + buf.WriteString(", backoff: {time: ") + buf.WriteString(time.Duration(commitBackoffTime).String()) + e.Commit.Mu.Lock() + if len(e.Commit.Mu.BackoffTypes) > 0 { + buf.WriteString(", type: ") + buf.WriteString(e.formatBackoff(e.Commit.Mu.BackoffTypes)) } - buf.WriteString(", type: ") - sort.Strings(tpArray) - buf.WriteString(fmt.Sprintf("%v", tpArray)) + e.Commit.Mu.Unlock() + buf.WriteString("}") + } + if e.Commit.ResolveLockTime > 0 { + buf.WriteString(", resolve_lock: ") + buf.WriteString(time.Duration(e.Commit.ResolveLockTime).String()) + } + + prewriteRegionNum := atomic.LoadInt32(&e.Commit.PrewriteRegionNum) + if prewriteRegionNum > 0 { + buf.WriteString(", region_num:") + buf.WriteString(strconv.FormatInt(int64(prewriteRegionNum), 10)) + } + if e.Commit.WriteKeys > 0 { + buf.WriteString(", write_keys:") + buf.WriteString(strconv.FormatInt(int64(e.Commit.WriteKeys), 10)) + } + if e.Commit.WriteSize > 0 { + buf.WriteString(", write_byte:") + buf.WriteString(strconv.FormatInt(int64(e.Commit.WriteSize), 10)) + } + if e.Commit.TxnRetry > 0 { + buf.WriteString(", txn_retry:") + buf.WriteString(strconv.FormatInt(int64(e.Commit.TxnRetry), 10)) } - e.Commit.Mu.Unlock() buf.WriteString("}") } - if e.Commit.ResolveLockTime > 0 { - buf.WriteString(", resolve_lock: ") - buf.WriteString(time.Duration(e.Commit.ResolveLockTime).String()) + if e.LockKeys != nil { + buf.WriteString(", lock_keys: {") + if e.LockKeys.TotalTime > 0 { + buf.WriteString("time:") + buf.WriteString(e.LockKeys.TotalTime.String()) + } + if e.LockKeys.RegionNum > 0 { + buf.WriteString(", region:") + buf.WriteString(strconv.FormatInt(int64(e.LockKeys.RegionNum), 10)) + } + if e.LockKeys.LockKeys > 0 { + buf.WriteString(", keys:") + buf.WriteString(strconv.FormatInt(int64(e.LockKeys.LockKeys), 10)) + } + if e.LockKeys.ResolveLockTime > 0 { + buf.WriteString(", resolve_lock:") + buf.WriteString(time.Duration(e.LockKeys.ResolveLockTime).String()) + } + if e.LockKeys.BackoffTime > 0 { + buf.WriteString(", backoff: {time: ") + buf.WriteString(time.Duration(e.LockKeys.BackoffTime).String()) + e.LockKeys.Mu.Lock() + if len(e.LockKeys.Mu.BackoffTypes) > 0 { + buf.WriteString(", type: ") + buf.WriteString(e.formatBackoff(e.LockKeys.Mu.BackoffTypes)) + } + e.LockKeys.Mu.Unlock() + buf.WriteString("}") + } + if e.LockKeys.LockRPCTime > 0 { + buf.WriteString(", lock_rpc:") + buf.WriteString(time.Duration(e.LockKeys.LockRPCTime).String()) + } + if e.LockKeys.LockRPCCount > 0 { + buf.WriteString(", rpc_count:") + buf.WriteString(strconv.FormatInt(e.LockKeys.LockRPCCount, 10)) + } + if e.LockKeys.RetryCount > 0 { + buf.WriteString(", retry_count:") + buf.WriteString(strconv.FormatInt(int64(e.LockKeys.RetryCount), 10)) + } + buf.WriteString("}") } + return buf.String() +} - prewriteRegionNum := atomic.LoadInt32(&e.Commit.PrewriteRegionNum) - if prewriteRegionNum > 0 { - buf.WriteString(", region_num:") - buf.WriteString(strconv.FormatInt(int64(prewriteRegionNum), 10)) - } - if e.Commit.WriteKeys > 0 { - buf.WriteString(", write_keys:") - buf.WriteString(strconv.FormatInt(int64(e.Commit.WriteKeys), 10)) - } - if e.Commit.WriteSize > 0 { - buf.WriteString(", write_byte:") - buf.WriteString(strconv.FormatInt(int64(e.Commit.WriteSize), 10)) +func (e *RuntimeStatsWithCommit) formatBackoff(backoffTypes []fmt.Stringer) string { + if len(backoffTypes) == 0 { + return "" } - if e.Commit.TxnRetry > 0 { - buf.WriteString(", txn_retry:") - buf.WriteString(strconv.FormatInt(int64(e.Commit.TxnRetry), 10)) + tpMap := make(map[string]struct{}) + tpArray := []string{} + for _, tp := range backoffTypes { + tpStr := tp.String() + _, ok := tpMap[tpStr] + if ok { + continue + } + tpMap[tpStr] = struct{}{} + tpArray = append(tpArray, tpStr) } - return buf.String() + sort.Strings(tpArray) + return fmt.Sprintf("%v", tpArray) } diff --git a/util/execdetails/execdetails_test.go b/util/execdetails/execdetails_test.go index 9ee45d1b070df..a16bcbc66db84 100644 --- a/util/execdetails/execdetails_test.go +++ b/util/execdetails/execdetails_test.go @@ -154,7 +154,39 @@ func TestRuntimeStatsWithCommit(t *testing.T) { RuntimeStats: basicStats, Commit: commitDetail, } - expect := "time:1s, loops:1, prewrite:1s, get_commit_ts:1s, commit:1s, commit_backoff: {time: 1s, type: [backoff1 backoff2]}, resolve_lock: 1s, region_num:5, write_keys:3, write_byte:66, txn_retry:2" + expect := "time:1s, loops:1, commit_txn: {prewrite:1s, get_commit_ts:1s, commit:1s, backoff: {time: 1s, type: [backoff1 backoff2]}, resolve_lock: 1s, region_num:5, write_keys:3, write_byte:66, txn_retry:2}" + if stats.String() != expect { + t.Fatalf("%v != %v", stats.String(), expect) + } + lockDetail := &LockKeysDetails{ + TotalTime: time.Second, + RegionNum: 2, + LockKeys: 10, + ResolveLockTime: int64(time.Second * 2), + BackoffTime: int64(time.Second * 3), + Mu: struct { + sync.Mutex + BackoffTypes []fmt.Stringer + }{BackoffTypes: []fmt.Stringer{ + stringutil.MemoizeStr(func() string { + return "backoff4" + }), + stringutil.MemoizeStr(func() string { + return "backoff5" + }), + stringutil.MemoizeStr(func() string { + return "backoff5" + }), + }}, + LockRPCTime: int64(time.Second * 5), + LockRPCCount: 50, + RetryCount: 2, + } + stats = &RuntimeStatsWithCommit{ + RuntimeStats: basicStats, + LockKeys: lockDetail, + } + expect = "time:1s, loops:1, lock_keys: {time:1s, region:2, keys:10, resolve_lock:2s, backoff: {time: 3s, type: [backoff4 backoff5]}, lock_rpc:5s, rpc_count:50, retry_count:2}" if stats.String() != expect { t.Fatalf("%v != %v", stats.String(), expect) } From 8c6879c3f2f2c1b3ae8f570eafab448e3aaa2333 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Tue, 13 Oct 2020 13:54:53 +0800 Subject: [PATCH 031/229] planner: prune duplicate expr in sort (#20325) (#20333) Signed-off-by: ti-srebot --- planner/core/logical_plan_test.go | 46 +++++++++++++++++++ planner/core/rule_column_pruning.go | 8 +++- .../testdata/plan_suite_unexported_in.json | 8 ++++ .../testdata/plan_suite_unexported_out.json | 18 ++++++++ 4 files changed, 79 insertions(+), 1 deletion(-) diff --git a/planner/core/logical_plan_test.go b/planner/core/logical_plan_test.go index 9b541555980c5..e194f21e4e273 100644 --- a/planner/core/logical_plan_test.go +++ b/planner/core/logical_plan_test.go @@ -553,6 +553,31 @@ func (s *testPlanSuite) TestColumnPruning(c *C) { } } +func (s *testPlanSuite) TestSortByItemsPruning(c *C) { + defer testleak.AfterTest(c)() + var ( + input []string + output [][]string + ) + s.testData.GetTestCases(c, &input, &output) + s.testData.OnRecord(func() { + output = make([][]string, len(input)) + }) + + ctx := context.Background() + for i, tt := range input { + comment := Commentf("for %s", tt) + stmt, err := s.ParseOneStmt(tt, "", "") + c.Assert(err, IsNil, comment) + + p, _, err := BuildLogicalPlan(ctx, s.ctx, stmt, s.is) + c.Assert(err, IsNil) + lp, err := logicalOptimize(ctx, flagEliminateProjection|flagPredicatePushDown|flagPrunColumns|flagPrunColumnsAgain, p.(LogicalPlan)) + c.Assert(err, IsNil) + s.checkOrderByItems(lp, c, &output[i], comment) + } +} + func (s *testPlanSuite) TestProjectionEliminator(c *C) { defer testleak.AfterTest(c)() tests := []struct { @@ -620,6 +645,27 @@ func (s *testPlanSuite) checkDataSourceCols(p LogicalPlan, c *C, ans map[int][]s } } +func (s *testPlanSuite) checkOrderByItems(p LogicalPlan, c *C, colList *[]string, comment CommentInterface) { + switch p := p.(type) { + case *LogicalSort: + s.testData.OnRecord(func() { + *colList = make([]string, len(p.ByItems)) + }) + for i, col := range p.ByItems { + s.testData.OnRecord(func() { + (*colList)[i] = col.String() + }) + s := col.String() + c.Assert(s, Equals, (*colList)[i], comment) + } + } + children := p.Children() + c.Assert(len(children), LessEqual, 1, Commentf("For %v Expected <= 1 Child", comment)) + for _, child := range children { + s.checkOrderByItems(child, c, colList, comment) + } +} + func (s *testPlanSuite) TestValidate(c *C) { defer testleak.AfterTest(c)() tests := []struct { diff --git a/planner/core/rule_column_pruning.go b/planner/core/rule_column_pruning.go index f29d59031b126..4441910619f6b 100644 --- a/planner/core/rule_column_pruning.go +++ b/planner/core/rule_column_pruning.go @@ -137,9 +137,15 @@ func (la *LogicalAggregation) PruneColumns(parentUsedCols []*expression.Column) func pruneByItems(old []*util.ByItems) (new []*util.ByItems, parentUsedCols []*expression.Column) { new = make([]*util.ByItems, 0, len(old)) + seen := make(map[string]struct{}, len(old)) for _, byItem := range old { + hash := string(byItem.Expr.HashCode(nil)) + _, hashMatch := seen[hash] + seen[hash] = struct{}{} cols := expression.ExtractColumns(byItem.Expr) - if len(cols) == 0 { + if hashMatch { + // do nothing, should be filtered + } else if len(cols) == 0 { if !expression.IsRuntimeConstExpr(byItem.Expr) { new = append(new, byItem) } diff --git a/planner/core/testdata/plan_suite_unexported_in.json b/planner/core/testdata/plan_suite_unexported_in.json index b71d9f9960da7..41aef7bec4ccc 100644 --- a/planner/core/testdata/plan_suite_unexported_in.json +++ b/planner/core/testdata/plan_suite_unexported_in.json @@ -402,6 +402,14 @@ "select count(1) from (select count(b) as cnt from t group by c) t1" ] }, + { + "name": "TestSortByItemsPruning", + "cases": [ + "select * from t where a > 1 order by a asc, a asc limit 10", + "select * from t where a > 1 order by a asc, b asc, a asc, c asc limit 10", + "select * from t where a > 1 order by pow(a, 2) asc, b asc, pow(a, 2) asc, c asc limit 10" + ] + }, { "name": "TestDeriveNotNullConds", "cases": [ diff --git a/planner/core/testdata/plan_suite_unexported_out.json b/planner/core/testdata/plan_suite_unexported_out.json index 388ab97d628d7..ed4096754cd58 100644 --- a/planner/core/testdata/plan_suite_unexported_out.json +++ b/planner/core/testdata/plan_suite_unexported_out.json @@ -739,6 +739,24 @@ } ] }, + { + "Name": "TestSortByItemsPruning", + "Cases": [ + [ + "test.t.a" + ], + [ + "test.t.a", + "test.t.b", + "test.t.c" + ], + [ + "pow(cast(test.t.a, double BINARY), 2)", + "test.t.b", + "test.t.c" + ] + ] + }, { "Name": "TestDeriveNotNullConds", "Cases": [ From fc64bf90d373a484909f448e3aae3280f50284c8 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Wed, 14 Oct 2020 11:38:55 +0800 Subject: [PATCH 032/229] expression: fix data too long when convert to bit returns null value (#20241) (#20363) Signed-off-by: ti-srebot --- expression/integration_test.go | 9 +++++++++ types/datum.go | 7 ++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/expression/integration_test.go b/expression/integration_test.go index c45990245334e..9ae1d20ccf70b 100755 --- a/expression/integration_test.go +++ b/expression/integration_test.go @@ -297,6 +297,15 @@ func (s *testIntegrationSuite) TestConvertToBit(c *C) { tk.MustExec(`insert t1 value ('09-01-01')`) tk.MustExec(`insert t select a from t1`) tk.MustQuery("select a+0 from t").Check(testkit.Rows("20090101000000")) + + // For issue 20118 + tk.MustExec("drop table if exists t;") + tk.MustExec("create table t(a tinyint, b bit(63));") + tk.MustExec("insert ignore into t values(599999999, -1);") + tk.MustQuery("show warnings;").Check(testkit.Rows( + "Warning 1690 constant 599999999 overflows tinyint", + "Warning 1406 Data Too Long, field len 63")) + tk.MustQuery("select * from t;").Check(testkit.Rows("127 \u007f\xff\xff\xff\xff\xff\xff\xff")) } func (s *testIntegrationSuite2) TestMathBuiltin(c *C) { diff --git a/types/datum.go b/types/datum.go index 4e91056bbef57..0405ca6b3877d 100644 --- a/types/datum.go +++ b/types/datum.go @@ -1380,9 +1380,14 @@ func (d *Datum) convertToMysqlBit(sc *stmtctx.StatementContext, target *FieldTyp uintDatum, err1 := d.convertToUint(sc, target) uintValue, err = uintDatum.GetUint64(), err1 } - if target.Flen < 64 && uintValue >= 1<<(uint64(target.Flen)) { + // Avoid byte size panic, never goto this branch. + if target.Flen <= 0 || target.Flen >= 128 { return Datum{}, errors.Trace(ErrDataTooLong.GenWithStack("Data Too Long, field len %d", target.Flen)) } + if target.Flen < 64 && uintValue >= 1<<(uint64(target.Flen)) { + uintValue &= (1 << (uint64(target.Flen))) - 1 + err = ErrDataTooLong.GenWithStack("Data Too Long, field len %d", target.Flen) + } byteSize := (target.Flen + 7) >> 3 ret.SetMysqlBit(NewBinaryLiteralFromUint(uintValue, byteSize)) return ret, errors.Trace(err) From 9084e5a297d1f052ffbb94b5f06c5f06a3296d83 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Wed, 14 Oct 2020 11:51:55 +0800 Subject: [PATCH 033/229] expression: fix a bug that the coercibilities of enum and set are wrong (#20274) (#20364) Signed-off-by: ti-srebot --- expression/collation.go | 6 +++--- expression/integration_test.go | 12 ++++++++++++ 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/expression/collation.go b/expression/collation.go index c449f1fb7a6a0..29821094efca4 100644 --- a/expression/collation.go +++ b/expression/collation.go @@ -140,7 +140,7 @@ func deriveCoercibilityForScarlarFunc(sf *ScalarFunction) Coercibility { if _, ok := sysConstFuncs[sf.FuncName.L]; ok { return CoercibilitySysconst } - if !types.IsString(sf.RetType.Tp) { + if sf.RetType.EvalType() != types.ETString { return CoercibilityNumeric } coer := CoercibilityIgnorable @@ -155,14 +155,14 @@ func deriveCoercibilityForScarlarFunc(sf *ScalarFunction) Coercibility { func deriveCoercibilityForConstant(c *Constant) Coercibility { if c.Value.IsNull() { return CoercibilityIgnorable - } else if !types.IsString(c.RetType.Tp) { + } else if c.RetType.EvalType() != types.ETString { return CoercibilityNumeric } return CoercibilityCoercible } func deriveCoercibilityForColumn(c *Column) Coercibility { - if !types.IsString(c.RetType.Tp) { + if c.RetType.EvalType() != types.ETString { return CoercibilityNumeric } return CoercibilityImplicit diff --git a/expression/integration_test.go b/expression/integration_test.go index 9ae1d20ccf70b..18679b342a231 100755 --- a/expression/integration_test.go +++ b/expression/integration_test.go @@ -6685,6 +6685,18 @@ func (s *testIntegrationSuite) TestIssue17727(c *C) { tk.MustQuery("select @@last_plan_from_cache;").Check(testkit.Rows("1")) } +func (s *testIntegrationSerialSuite) TestIssue20268(c *C) { + collate.SetNewCollationEnabledForTest(true) + defer collate.SetNewCollationEnabledForTest(false) + + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t") + tk.MustExec("CREATE TABLE `t` ( `a` enum('a','b') DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;") + tk.MustExec("insert into t values('a');") + tk.MustExec("select * from t where a = 'A';") +} + func (s *testIntegrationSuite) TestIssue18515(c *C) { tk := testkit.NewTestKit(c, s.store) tk.MustExec("use test") From 20cb5f9f3b38fc4823640f40de3589faa89c201c Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Wed, 14 Oct 2020 13:52:17 +0800 Subject: [PATCH 034/229] expression: fix OverFlowErr when convert bit to int64 (#20266) (#20312) --- planner/core/expression_rewriter_test.go | 9 +++++++++ types/datum.go | 5 +++++ 2 files changed, 14 insertions(+) diff --git a/planner/core/expression_rewriter_test.go b/planner/core/expression_rewriter_test.go index 35e8776ce3825..a2253bf75d154 100644 --- a/planner/core/expression_rewriter_test.go +++ b/planner/core/expression_rewriter_test.go @@ -224,6 +224,15 @@ func (s *testExpressionRewriterSuite) TestCompareSubquery(c *C) { " 2", )) tk.MustQuery("select * from t t1 where b = all (select a from t t2)").Check(testkit.Rows()) + + // for issue 20059 + tk.MustExec("DROP TABLE IF EXISTS `t`") + tk.MustExec("CREATE TABLE `t` ( `a` int(11) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;") + tk.MustExec("INSERT INTO `t` VALUES (1);") + tk.MustExec("DROP TABLE IF EXISTS `table_40_utf8_4`;") + tk.MustExec("CREATE TABLE `table_40_utf8_4` (`col_tinyint_key_unsigned` tinyint(4) DEFAULT NULL, `col_bit64_key_signed` bit(64) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;") + tk.MustExec("INSERT INTO `table_40_utf8_4` VALUES (31, -18);") + tk.MustQuery("select count(1) from table_40_utf8_4 where ( select count(1) from t where table_40_utf8_4.col_bit64_key_signed!=table_40_utf8_4.col_tinyint_key_unsigned)").Check(testkit.Rows("1")) } func (s *testExpressionRewriterSuite) TestCheckFullGroupBy(c *C) { diff --git a/types/datum.go b/types/datum.go index 0405ca6b3877d..2a45e28fe7ecf 100644 --- a/types/datum.go +++ b/types/datum.go @@ -1578,6 +1578,11 @@ func (d *Datum) ToDecimal(sc *stmtctx.StatementContext) (*MyDecimal, error) { // ToInt64 converts to a int64. func (d *Datum) ToInt64(sc *stmtctx.StatementContext) (int64, error) { + switch d.Kind() { + case KindMysqlBit: + uintVal, err := d.GetBinaryLiteral().ToInt(sc) + return int64(uintVal), err + } return d.toSignedInteger(sc, mysql.TypeLonglong) } From bab4a1d173bec140749810e312de77aef00db622 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Wed, 14 Oct 2020 14:00:08 +0800 Subject: [PATCH 035/229] util: reset the unused bytes in writeTime (#20284) (#20341) --- executor/aggfuncs/func_count_distinct.go | 7 ++-- executor/aggfuncs/func_count_test.go | 16 +++++++++ executor/executor_test.go | 11 ++++++ util/chunk/chunk.go | 11 ++++++ util/chunk/chunk_test.go | 24 +++++++++++++ util/chunk/row.go | 45 ++++++++++++++++++++++++ 6 files changed, 112 insertions(+), 2 deletions(-) diff --git a/executor/aggfuncs/func_count_distinct.go b/executor/aggfuncs/func_count_distinct.go index b7b883d4c05a0..440dd9d8bb092 100644 --- a/executor/aggfuncs/func_count_distinct.go +++ b/executor/aggfuncs/func_count_distinct.go @@ -404,7 +404,8 @@ func appendDecimal(encodedBytes []byte, val *types.MyDecimal) ([]byte, error) { return encodedBytes, err } -func writeTime(buf []byte, t types.Time) { +// WriteTime writes `t` into `buf`. +func WriteTime(buf []byte, t types.Time) { binary.BigEndian.PutUint16(buf, uint16(t.Year())) buf[2] = uint8(t.Month()) buf[3] = uint8(t.Day()) @@ -414,10 +415,12 @@ func writeTime(buf []byte, t types.Time) { binary.BigEndian.PutUint32(buf[8:], uint32(t.Microsecond())) buf[12] = t.Type() buf[13] = uint8(t.Fsp()) + + buf[7], buf[14], buf[15] = uint8(0), uint8(0), uint8(0) } func appendTime(encodedBytes, buf []byte, val types.Time) []byte { - writeTime(buf, val) + WriteTime(buf, val) buf = buf[:16] encodedBytes = append(encodedBytes, buf...) return encodedBytes diff --git a/executor/aggfuncs/func_count_test.go b/executor/aggfuncs/func_count_test.go index 2036b0145d5ee..91bcdd721b599 100644 --- a/executor/aggfuncs/func_count_test.go +++ b/executor/aggfuncs/func_count_test.go @@ -22,6 +22,8 @@ import ( "github.com/pingcap/parser/ast" "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/executor/aggfuncs" + "github.com/pingcap/tidb/sessionctx/stmtctx" + "github.com/pingcap/tidb/types" ) func genApproxDistinctMergePartialResult(begin, end uint64) string { @@ -101,6 +103,20 @@ func (s *testSuite) TestCount(c *C) { } } +func (s *testSuite) TestWriteTime(c *C) { + t, err := types.ParseDate(&(stmtctx.StatementContext{}), "2020-11-11") + c.Assert(err, IsNil) + + buf := make([]byte, 16) + for i := range buf { + buf[i] = uint8(255) + } + aggfuncs.WriteTime(buf, t) + for i := range buf { + c.Assert(buf[i] == uint8(255), IsFalse) + } +} + func BenchmarkCount(b *testing.B) { s := testSuite{} s.SetUpSuite(nil) diff --git a/executor/executor_test.go b/executor/executor_test.go index 29888cd711ad9..a04c80a8795c5 100644 --- a/executor/executor_test.go +++ b/executor/executor_test.go @@ -6067,3 +6067,14 @@ func (s *testSuite) TestIssue13758(c *C) { "", )) } + +func (s *testSuite) TestIssue20237(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t, s") + tk.MustExec("create table t(a date, b float)") + tk.MustExec("create table s(b float)") + tk.MustExec(`insert into t values(NULL,-37), ("2011-11-04",105), ("2013-03-02",-22), ("2006-07-02",-56), (NULL,124), (NULL,111), ("2018-03-03",-5);`) + tk.MustExec(`insert into s values(-37),(105),(-22),(-56),(124),(105),(111),(-5);`) + tk.MustQuery(`select count(distinct t.a, t.b) from t join s on t.b= s.b;`).Check(testkit.Rows("4")) +} diff --git a/util/chunk/chunk.go b/util/chunk/chunk.go index 3fde95035051e..d242284d91b8a 100644 --- a/util/chunk/chunk.go +++ b/util/chunk/chunk.go @@ -696,3 +696,14 @@ func (c *Chunk) Reconstruct() { c.numVirtualRows = len(c.sel) c.sel = nil } + +// ToString returns all the values in a chunk. +func (c *Chunk) ToString(ft []*types.FieldType) string { + var buf []byte + for rowIdx := 0; rowIdx < c.NumRows(); rowIdx++ { + row := c.GetRow(rowIdx) + buf = append(buf, row.ToString(ft)...) + buf = append(buf, '\n') + } + return string(buf) +} diff --git a/util/chunk/chunk_test.go b/util/chunk/chunk_test.go index 68ef2bad196f9..52c5c978d5138 100644 --- a/util/chunk/chunk_test.go +++ b/util/chunk/chunk_test.go @@ -786,6 +786,30 @@ func (s *testChunkSuite) TestMakeRefTo(c *check.C) { c.Assert(chk2.columns[1] == chk1.columns[0], check.IsTrue) } +func (s *testChunkSuite) TestToString(c *check.C) { + fieldTypes := make([]*types.FieldType, 0, 4) + fieldTypes = append(fieldTypes, &types.FieldType{Tp: mysql.TypeFloat}) + fieldTypes = append(fieldTypes, &types.FieldType{Tp: mysql.TypeDouble}) + fieldTypes = append(fieldTypes, &types.FieldType{Tp: mysql.TypeString}) + fieldTypes = append(fieldTypes, &types.FieldType{Tp: mysql.TypeDate}) + fieldTypes = append(fieldTypes, &types.FieldType{Tp: mysql.TypeLonglong}) + + chk := NewChunkWithCapacity(fieldTypes, 2) + chk.AppendFloat32(0, float32(1)) + chk.AppendFloat64(1, 1.0) + chk.AppendString(2, "1") + chk.AppendTime(3, types.ZeroDate) + chk.AppendInt64(4, 1) + + chk.AppendFloat32(0, float32(2)) + chk.AppendFloat64(1, 2.0) + chk.AppendString(2, "2") + chk.AppendTime(3, types.ZeroDatetime) + chk.AppendInt64(4, 2) + + c.Assert(chk.ToString(fieldTypes), check.Equals, "1, 1, 1, 0000-00-00, 1\n2, 2, 2, 0000-00-00 00:00:00, 2\n") +} + func BenchmarkAppendInt(b *testing.B) { b.ReportAllocs() chk := newChunk(8) diff --git a/util/chunk/row.go b/util/chunk/row.go index 5b9bf41684f54..993ec9b58b9d1 100644 --- a/util/chunk/row.go +++ b/util/chunk/row.go @@ -14,6 +14,8 @@ package chunk import ( + "strconv" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/types/json" @@ -213,3 +215,46 @@ func (r Row) CopyConstruct() Row { newChk.AppendRow(r) return newChk.GetRow(0) } + +// ToString returns all the values in a row. +func (r Row) ToString(ft []*types.FieldType) string { + var buf []byte + for colIdx := 0; colIdx < r.Chunk().NumCols(); colIdx++ { + if r.IsNull(colIdx) { + buf = append(buf, "nil, "...) + continue + } + switch ft[colIdx].EvalType() { + case types.ETInt: + buf = strconv.AppendInt(buf, r.GetInt64(colIdx), 10) + case types.ETString: + switch ft[colIdx].Tp { + case mysql.TypeEnum: + buf = append(buf, r.GetEnum(colIdx).String()...) + case mysql.TypeSet: + buf = append(buf, r.GetSet(colIdx).String()...) + default: + buf = append(buf, r.GetString(colIdx)...) + } + case types.ETDatetime, types.ETTimestamp: + buf = append(buf, r.GetTime(colIdx).String()...) + case types.ETDecimal: + buf = append(buf, r.GetMyDecimal(colIdx).ToString()...) + case types.ETDuration: + buf = append(buf, r.GetDuration(colIdx, ft[colIdx].Decimal).String()...) + case types.ETJson: + buf = append(buf, r.GetJSON(colIdx).String()...) + case types.ETReal: + switch ft[colIdx].Tp { + case mysql.TypeFloat: + buf = strconv.AppendFloat(buf, float64(r.GetFloat32(colIdx)), 'f', -1, 32) + case mysql.TypeDouble: + buf = strconv.AppendFloat(buf, r.GetFloat64(colIdx), 'f', -1, 64) + } + } + if colIdx != r.Chunk().NumCols()-1 { + buf = append(buf, ", "...) + } + } + return string(buf) +} From 84b22ca4b62732f772e27b269a5fea7d72789866 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Wed, 14 Oct 2020 15:00:50 +0800 Subject: [PATCH 036/229] cherry pick #19296 to release-4.0 (#20246) Signed-off-by: ti-srebot Co-authored-by: Kenan Yao --- executor/explainfor_test.go | 32 ++++++++++++++++++++++++++++++++ session/session.go | 1 + 2 files changed, 33 insertions(+) diff --git a/executor/explainfor_test.go b/executor/explainfor_test.go index a97c0d125b869..ff54c14cf9f3f 100644 --- a/executor/explainfor_test.go +++ b/executor/explainfor_test.go @@ -194,6 +194,38 @@ func (s *testPrepareSerialSuite) TestExplainForConnPlanCache(c *C) { wg.Wait() } +func (s *testPrepareSerialSuite) TestSavedPlanPanicPlanCache(c *C) { + orgEnable := core.PreparedPlanCacheEnabled() + defer func() { + core.SetPreparedPlanCache(orgEnable) + }() + core.SetPreparedPlanCache(true) + + var err error + tk := testkit.NewTestKit(c, s.store) + tk.Se, err = session.CreateSession4TestWithOpt(s.store, &session.Opt{ + PreparedPlanCache: kvcache.NewSimpleLRUCache(100, 0.1, math.MaxUint64), + }) + c.Assert(err, IsNil) + + tk.MustExec("use test") + tk.MustExec("drop table if exists t") + tk.MustExec("create table t(a int, b int, c int generated always as (a+b) stored)") + tk.MustExec("insert into t(a,b) values(1,1)") + tk.MustExec("begin") + tk.MustExec("update t set b = 2 where a = 1") + tk.MustExec("prepare stmt from 'select b from t where a > ?'") + tk.MustExec("set @p = 0") + tk.MustQuery("execute stmt using @p").Check(testkit.Rows( + "2", + )) + tk.MustExec("set @p = 1") + tk.MustQuery("execute stmt using @p").Check(testkit.Rows()) + err = tk.ExecToErr("insert into t(a,b,c) values(3,3,3)") + c.Assert(err, NotNil) + c.Assert(err.Error(), Equals, "[planner:3105]The value specified for generated column 'c' in table 't' is not allowed.") +} + func (s *testPrepareSerialSuite) TestExplainDotForExplainPlan(c *C) { tk := testkit.NewTestKit(c, s.store) diff --git a/session/session.go b/session/session.go index b0d036b37537f..2903e20dbdd0c 100644 --- a/session/session.go +++ b/session/session.go @@ -1033,6 +1033,7 @@ func (s *session) SetProcessInfo(sql string, t time.Time, command byte, maxExecu MaxExecutionTime: maxExecutionTime, } _, pi.Digest = s.sessionVars.StmtCtx.SQLDigest() + s.currentPlan = nil if s.sessionVars.User != nil { pi.User = s.sessionVars.User.Username pi.Host = s.sessionVars.User.Hostname From 14d71e0a680c9ca11f42ae7f1db2cafb7179266e Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Thu, 15 Oct 2020 11:31:13 +0800 Subject: [PATCH 037/229] execute: add rpc runtime stats information for insert/update/replace statement (#19334) (#20430) --- executor/batch_point_get.go | 4 ++-- executor/executor_test.go | 1 + executor/insert.go | 7 +++++++ executor/insert_common.go | 25 +++++++++++++++++++++++++ executor/point_get.go | 8 ++++---- executor/replace.go | 7 +++++++ executor/update.go | 30 ++++++++++++++++++++++++++++++ 7 files changed, 76 insertions(+), 6 deletions(-) diff --git a/executor/batch_point_get.go b/executor/batch_point_get.go index b2b8ff82a9594..98df02e091349 100644 --- a/executor/batch_point_get.go +++ b/executor/batch_point_get.go @@ -62,7 +62,7 @@ type BatchPointGetExec struct { virtualColumnRetFieldTypes []*types.FieldType snapshot kv.Snapshot - stats *pointGetRuntimeStats + stats *runtimeStatsWithSnapshot } // buildVirtualColumnInfo saves virtual column indices and sort them in definition order @@ -144,7 +144,7 @@ func (e *BatchPointGetExec) initialize(ctx context.Context) error { } if e.runtimeStats != nil { snapshotStats := &tikv.SnapshotRuntimeStats{} - e.stats = &pointGetRuntimeStats{ + e.stats = &runtimeStatsWithSnapshot{ BasicRuntimeStats: e.runtimeStats, SnapshotRuntimeStats: snapshotStats, } diff --git a/executor/executor_test.go b/executor/executor_test.go index a04c80a8795c5..f233d63df9abf 100644 --- a/executor/executor_test.go +++ b/executor/executor_test.go @@ -6040,6 +6040,7 @@ func (s *testSuite) TestCollectDMLRuntimeStats(c *C) { } for _, sql := range testSQLs { tk.MustExec(sql) + c.Assert(getRootStats(), Matches, "time.*loops.*Get.*num_rpc.*total_time.*") } // Test for lock keys stats. diff --git a/executor/insert.go b/executor/insert.go index 26655f803a542..22ff24bd15e78 100644 --- a/executor/insert.go +++ b/executor/insert.go @@ -188,6 +188,13 @@ func (e *InsertExec) batchUpdateDupRows(ctx context.Context, newRows [][]types.D return err } + if e.collectRuntimeStatsEnabled() { + if snapshot := txn.GetSnapshot(); snapshot != nil { + snapshot.SetOption(kv.CollectRuntimeStats, e.stats.SnapshotRuntimeStats) + defer snapshot.DelOption(kv.CollectRuntimeStats) + } + } + // Use BatchGet to fill cache. // It's an optimization and could be removed without affecting correctness. if err = prefetchDataCache(ctx, txn, toBeCheckedRows); err != nil { diff --git a/executor/insert_common.go b/executor/insert_common.go index abd0fcb8c4ebf..7fb3d51597602 100644 --- a/executor/insert_common.go +++ b/executor/insert_common.go @@ -26,6 +26,7 @@ import ( "github.com/pingcap/tidb/expression" "github.com/pingcap/tidb/kv" "github.com/pingcap/tidb/meta/autoid" + "github.com/pingcap/tidb/store/tikv" "github.com/pingcap/tidb/table" "github.com/pingcap/tidb/table/tables" "github.com/pingcap/tidb/types" @@ -72,6 +73,8 @@ type InsertValues struct { // https://dev.mysql.com/doc/refman/8.0/en/innodb-auto-increment-handling.html lazyFillAutoID bool memTracker *memory.Tracker + + stats *runtimeStatsWithSnapshot } type defaultVal struct { @@ -929,6 +932,21 @@ func (e *InsertValues) handleWarning(err error) { sc.AppendWarning(err) } +func (e *InsertValues) collectRuntimeStatsEnabled() bool { + if e.runtimeStats != nil { + if e.stats == nil { + snapshotStats := &tikv.SnapshotRuntimeStats{} + e.stats = &runtimeStatsWithSnapshot{ + BasicRuntimeStats: e.runtimeStats, + SnapshotRuntimeStats: snapshotStats, + } + e.ctx.GetSessionVars().StmtCtx.RuntimeStatsColl.RegisterStats(e.id, e.stats) + } + return true + } + return false +} + // batchCheckAndInsert checks rows with duplicate errors. // All duplicate rows will be ignored and appended as duplicate warnings. func (e *InsertValues) batchCheckAndInsert(ctx context.Context, rows [][]types.Datum, addRecord func(ctx context.Context, row []types.Datum) (int64, error)) error { @@ -946,6 +964,13 @@ func (e *InsertValues) batchCheckAndInsert(ctx context.Context, rows [][]types.D return err } + if e.collectRuntimeStatsEnabled() { + if snapshot := txn.GetSnapshot(); snapshot != nil { + snapshot.SetOption(kv.CollectRuntimeStats, e.stats.SnapshotRuntimeStats) + defer snapshot.DelOption(kv.CollectRuntimeStats) + } + } + // Fill cache using BatchGet, the following Get requests don't need to visit TiKV. if _, err = prefetchUniqueIndices(ctx, txn, toBeCheckedRows); err != nil { return err diff --git a/executor/point_get.go b/executor/point_get.go index 20e2b24988d51..44c5eb64924e6 100644 --- a/executor/point_get.go +++ b/executor/point_get.go @@ -84,7 +84,7 @@ type PointGetExecutor struct { // virtualColumnRetFieldTypes records the RetFieldTypes of virtual columns. virtualColumnRetFieldTypes []*types.FieldType - stats *pointGetRuntimeStats + stats *runtimeStatsWithSnapshot } // Init set fields needed for PointGetExecutor reuse, this does NOT change baseExecutor field @@ -157,7 +157,7 @@ func (e *PointGetExecutor) Next(ctx context.Context, req *chunk.Chunk) error { } if e.runtimeStats != nil { snapshotStats := &tikv.SnapshotRuntimeStats{} - e.stats = &pointGetRuntimeStats{ + e.stats = &runtimeStatsWithSnapshot{ BasicRuntimeStats: e.runtimeStats, SnapshotRuntimeStats: snapshotStats, } @@ -420,12 +420,12 @@ func getColInfoByID(tbl *model.TableInfo, colID int64) *model.ColumnInfo { return nil } -type pointGetRuntimeStats struct { +type runtimeStatsWithSnapshot struct { *execdetails.BasicRuntimeStats *tikv.SnapshotRuntimeStats } -func (e *pointGetRuntimeStats) String() string { +func (e *runtimeStatsWithSnapshot) String() string { var basic, rpcStatsStr string if e.BasicRuntimeStats != nil { basic = e.BasicRuntimeStats.String() diff --git a/executor/replace.go b/executor/replace.go index 7baa330442096..a3f798a524aaa 100644 --- a/executor/replace.go +++ b/executor/replace.go @@ -195,6 +195,13 @@ func (e *ReplaceExec) exec(ctx context.Context, newRows [][]types.Datum) error { } txnSize := txn.Size() + if e.collectRuntimeStatsEnabled() { + if snapshot := txn.GetSnapshot(); snapshot != nil { + snapshot.SetOption(kv.CollectRuntimeStats, e.stats.SnapshotRuntimeStats) + defer snapshot.DelOption(kv.CollectRuntimeStats) + } + } + // Use BatchGet to fill cache. // It's an optimization and could be removed without affecting correctness. if err = prefetchDataCache(ctx, txn, toBeCheckedRows); err != nil { diff --git a/executor/update.go b/executor/update.go index ce1d2c443ee6d..ca6eaf7cf6267 100644 --- a/executor/update.go +++ b/executor/update.go @@ -23,6 +23,7 @@ import ( "github.com/pingcap/tidb/expression" "github.com/pingcap/tidb/kv" plannercore "github.com/pingcap/tidb/planner/core" + "github.com/pingcap/tidb/store/tikv" "github.com/pingcap/tidb/table" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/chunk" @@ -48,6 +49,8 @@ type UpdateExec struct { allAssignmentsAreConstant bool drained bool memTracker *memory.Tracker + + stats *runtimeStatsWithSnapshot } func (e *UpdateExec) exec(ctx context.Context, schema *expression.Schema, row, newData []types.Datum) error { @@ -166,6 +169,12 @@ func (e *UpdateExec) updateRows(ctx context.Context) (int, error) { } memUsageOfChk = chk.MemoryUsage() e.memTracker.Consume(memUsageOfChk) + if e.collectRuntimeStatsEnabled() { + txn, err := e.ctx.Txn(false) + if err == nil && txn.GetSnapshot() != nil { + txn.GetSnapshot().SetOption(kv.CollectRuntimeStats, e.stats.SnapshotRuntimeStats) + } + } for rowIdx := 0; rowIdx < chk.NumRows(); rowIdx++ { chunkRow := chk.GetRow(rowIdx) datumRow := chunkRow.GetDatumRow(fields) @@ -258,6 +267,12 @@ func (e *UpdateExec) composeNewRow(rowIdx int, oldRow []types.Datum, cols []*tab // Close implements the Executor Close interface. func (e *UpdateExec) Close() error { e.setMessage() + if e.runtimeStats != nil && e.stats != nil { + txn, err := e.ctx.Txn(false) + if err == nil && txn.GetSnapshot() != nil { + txn.GetSnapshot().DelOption(kv.CollectRuntimeStats) + } + } return e.children[0].Close() } @@ -278,3 +293,18 @@ func (e *UpdateExec) setMessage() { msg := fmt.Sprintf(mysql.MySQLErrName[mysql.ErrUpdateInfo], numMatched, numChanged, numWarnings) stmtCtx.SetMessage(msg) } + +func (e *UpdateExec) collectRuntimeStatsEnabled() bool { + if e.runtimeStats != nil { + if e.stats == nil { + snapshotStats := &tikv.SnapshotRuntimeStats{} + e.stats = &runtimeStatsWithSnapshot{ + BasicRuntimeStats: e.runtimeStats, + SnapshotRuntimeStats: snapshotStats, + } + e.ctx.GetSessionVars().StmtCtx.RuntimeStatsColl.RegisterStats(e.id, e.stats) + } + return true + } + return false +} From 9ede31ed53ee43bab8fd823666a857e4dad85c99 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Thu, 15 Oct 2020 15:13:04 +0800 Subject: [PATCH 038/229] cherry pick #20375 to release-4.0 (#20437) --- executor/inspection_result.go | 14 +++++++------- server/conn.go | 12 ++++++++++++ server/server.go | 6 ++++++ 3 files changed, 25 insertions(+), 7 deletions(-) diff --git a/executor/inspection_result.go b/executor/inspection_result.go index b14284b3889c8..4d8bd69ca3edb 100644 --- a/executor/inspection_result.go +++ b/executor/inspection_result.go @@ -142,7 +142,7 @@ func (e *inspectionResultRetriever) retrieve(ctx context.Context, sctx sessionct e.instanceToStatusAddress = make(map[string]string) e.statusToInstanceAddress = make(map[string]string) sql := "select instance,status_address from information_schema.cluster_info;" - rows, _, err := sctx.(sqlexec.RestrictedSQLExecutor).ExecRestrictedSQL(sql) + rows, _, err := sctx.(sqlexec.RestrictedSQLExecutor).ExecRestrictedSQLWithContext(ctx, sql) if err != nil { sctx.GetSessionVars().StmtCtx.AppendWarning(fmt.Errorf("get cluster info failed: %v", err)) } @@ -213,7 +213,7 @@ func (c configInspection) inspect(ctx context.Context, sctx sessionctx.Context, return results } -func (configInspection) inspectDiffConfig(_ context.Context, sctx sessionctx.Context, filter inspectionFilter) []inspectionResult { +func (configInspection) inspectDiffConfig(ctx context.Context, sctx sessionctx.Context, filter inspectionFilter) []inspectionResult { // check the configuration consistent ignoreConfigKey := []string{ // TiDB @@ -249,14 +249,14 @@ func (configInspection) inspectDiffConfig(_ context.Context, sctx sessionctx.Con } sql := fmt.Sprintf("select type, `key`, count(distinct value) as c from information_schema.cluster_config where `key` not in ('%s') group by type, `key` having c > 1", strings.Join(ignoreConfigKey, "','")) - rows, _, err := sctx.(sqlexec.RestrictedSQLExecutor).ExecRestrictedSQL(sql) + rows, _, err := sctx.(sqlexec.RestrictedSQLExecutor).ExecRestrictedSQLWithContext(ctx, sql) if err != nil { sctx.GetSessionVars().StmtCtx.AppendWarning(fmt.Errorf("check configuration consistency failed: %v", err)) } generateDetail := func(tp, item string) string { query := fmt.Sprintf("select value, instance from information_schema.cluster_config where type='%s' and `key`='%s';", tp, item) - rows, _, err := sctx.(sqlexec.RestrictedSQLExecutor).ExecRestrictedSQL(query) + rows, _, err := sctx.(sqlexec.RestrictedSQLExecutor).ExecRestrictedSQLWithContext(ctx, query) if err != nil { sctx.GetSessionVars().StmtCtx.AppendWarning(fmt.Errorf("check configuration consistency failed: %v", err)) return fmt.Sprintf("the cluster has different config value of %[2]s, execute the sql to see more detail: select * from information_schema.cluster_config where type='%[1]s' and `key`='%[2]s'", @@ -324,7 +324,7 @@ func (c configInspection) inspectCheckConfig(ctx context.Context, sctx sessionct } sql := fmt.Sprintf("select instance from information_schema.cluster_config where type = '%s' and `key` = '%s' and value = '%s'", cas.tp, cas.key, cas.value) - rows, _, err := sctx.(sqlexec.RestrictedSQLExecutor).ExecRestrictedSQL(sql) + rows, _, err := sctx.(sqlexec.RestrictedSQLExecutor).ExecRestrictedSQLWithContext(ctx, sql) if err != nil { sctx.GetSessionVars().StmtCtx.AppendWarning(fmt.Errorf("check configuration in reason failed: %v", err)) } @@ -437,10 +437,10 @@ func (configInspection) convertReadableSizeToByteSize(sizeStr string) (uint64, e return uint64(size) * rate, nil } -func (versionInspection) inspect(_ context.Context, sctx sessionctx.Context, filter inspectionFilter) []inspectionResult { +func (versionInspection) inspect(ctx context.Context, sctx sessionctx.Context, filter inspectionFilter) []inspectionResult { // check the configuration consistent sql := "select type, count(distinct git_hash) as c from information_schema.cluster_info group by type having c > 1;" - rows, _, err := sctx.(sqlexec.RestrictedSQLExecutor).ExecRestrictedSQL(sql) + rows, _, err := sctx.(sqlexec.RestrictedSQLExecutor).ExecRestrictedSQLWithContext(ctx, sql) if err != nil { sctx.GetSessionVars().StmtCtx.AppendWarning(fmt.Errorf("check version consistency failed: %v", err)) } diff --git a/server/conn.go b/server/conn.go index 91fa1fa145b04..2f3f2bb8320e2 100644 --- a/server/conn.go +++ b/server/conn.go @@ -163,6 +163,12 @@ type clientConn struct { status int32 // dispatching/reading/shutdown/waitshutdown lastCode uint16 // last error code collation uint8 // collation used by client, may be different from the collation used by database. + + // mu is used for cancelling the execution of current transaction. + mu struct { + sync.RWMutex + cancelFunc context.CancelFunc + } } func (cc *clientConn) String() string { @@ -898,6 +904,12 @@ func (cc *clientConn) dispatch(ctx context.Context, data []byte) error { }() span := opentracing.StartSpan("server.dispatch") + var cancelFunc context.CancelFunc + ctx, cancelFunc = context.WithCancel(ctx) + cc.mu.Lock() + cc.mu.cancelFunc = cancelFunc + cc.mu.Unlock() + t := time.Now() cc.lastPacket = data cmd := data[0] diff --git a/server/server.go b/server/server.go index cfbd9bddb602b..77c1f67f47cd0 100644 --- a/server/server.go +++ b/server/server.go @@ -539,6 +539,12 @@ func (s *Server) getTLSConfig() *tls.Config { func killConn(conn *clientConn) { sessVars := conn.ctx.GetSessionVars() atomic.StoreUint32(&sessVars.Killed, 1) + conn.mu.RLock() + cancelFunc := conn.mu.cancelFunc + conn.mu.RUnlock() + if cancelFunc != nil { + cancelFunc() + } } // KillAllConnections kills all connections when server is not gracefully shutdown. From 06cbfe6e292738ed9955ccbf86b4f4bac8e4d9ec Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Thu, 15 Oct 2020 16:12:33 +0800 Subject: [PATCH 039/229] planner,executor,infoschema: add system table `table_storage_stats` (#15056) (#20431) Signed-off-by: ti-srebot Signed-off-by: crazycs520 --- executor/builder.go | 10 ++ executor/explainfor_test.go | 10 ++ executor/infoschema_reader.go | 131 +++++++++++++++++++ executor/infoschema_reader_test.go | 54 +++++++- infoschema/tables.go | 15 +++ planner/core/logical_plan_builder.go | 2 + planner/core/memtable_predicate_extractor.go | 51 ++++++++ server/http_handler.go | 48 +------ store/helper/helper.go | 63 +++++++++ 9 files changed, 338 insertions(+), 46 deletions(-) diff --git a/executor/builder.go b/executor/builder.go index ddc50058a8048..4fea31d56af9e 100644 --- a/executor/builder.go +++ b/executor/builder.go @@ -1471,6 +1471,16 @@ func (b *executorBuilder) buildMemTable(v *plannercore.PhysicalMemTable) Executo extractor: v.Extractor.(*plannercore.SlowQueryExtractor), }, } + case strings.ToLower(infoschema.TableStorageStats): + return &MemTableReaderExec{ + baseExecutor: newBaseExecutor(b.ctx, v.Schema(), v.ID()), + table: v.Table, + retriever: &tableStorageStatsRetriever{ + table: v.Table, + outputCols: v.Columns, + extractor: v.Extractor.(*plannercore.TableStorageStatsExtractor), + }, + } case strings.ToLower(infoschema.TableDDLJobs): return &DDLJobsReaderExec{ baseExecutor: newBaseExecutor(b.ctx, v.Schema(), v.ID()), diff --git a/executor/explainfor_test.go b/executor/explainfor_test.go index ff54c14cf9f3f..f31b6456cbb33 100644 --- a/executor/explainfor_test.go +++ b/executor/explainfor_test.go @@ -266,3 +266,13 @@ func (s *testSuite) TestExplainTiFlashSystemTables(c *C) { tk.MustQuery(fmt.Sprintf("desc select * from information_schema.TIFLASH_SEGMENTS where TIFLASH_INSTANCE = '%s' and TIDB_DATABASE = '%s' and TIDB_TABLE = '%s'", tiflashInstance, database, table)).Check(testkit.Rows( fmt.Sprintf("MemTableScan_5 10000.00 root table:TIFLASH_SEGMENTS tiflash_instances:[\"%s\"], tidb_databases:[\"%s\"], tidb_tables:[\"%s\"]", tiflashInstance, database, table))) } + +func (s *testSuite) TestExplainTableStorage(c *C) { + tk := testkit.NewTestKitWithInit(c, s.store) + tk.MustQuery(fmt.Sprintf("desc select * from information_schema.TABLE_STORAGE_STATS where TABLE_SCHEMA = 'information_schema'")).Check(testkit.Rows( + fmt.Sprintf("MemTableScan_5 10000.00 root table:TABLE_STORAGE_STATS schema:[\"information_schema\"]"))) + tk.MustQuery(fmt.Sprintf("desc select * from information_schema.TABLE_STORAGE_STATS where TABLE_NAME = 'schemata'")).Check(testkit.Rows( + fmt.Sprintf("MemTableScan_5 10000.00 root table:TABLE_STORAGE_STATS table:[\"schemata\"]"))) + tk.MustQuery(fmt.Sprintf("desc select * from information_schema.TABLE_STORAGE_STATS where TABLE_SCHEMA = 'information_schema' and TABLE_NAME = 'schemata'")).Check(testkit.Rows( + fmt.Sprintf("MemTableScan_5 10000.00 root table:TABLE_STORAGE_STATS schema:[\"information_schema\"], table:[\"schemata\"]"))) +} diff --git a/executor/infoschema_reader.go b/executor/infoschema_reader.go index 09bd1c7b39b06..de9189548d16d 100644 --- a/executor/infoschema_reader.go +++ b/executor/infoschema_reader.go @@ -1317,6 +1317,137 @@ func (e *memtableRetriever) setDataFromTableConstraints(ctx sessionctx.Context, e.rows = rows } +// tableStorageStatsRetriever is used to read slow log data. +type tableStorageStatsRetriever struct { + dummyCloser + table *model.TableInfo + outputCols []*model.ColumnInfo + retrieved bool + initialized bool + extractor *plannercore.TableStorageStatsExtractor + initialTables []*initialTable + curTable int + helper *helper.Helper + stats helper.PDRegionStats +} + +func (e *tableStorageStatsRetriever) retrieve(ctx context.Context, sctx sessionctx.Context) ([][]types.Datum, error) { + if e.retrieved { + return nil, nil + } + if !e.initialized { + err := e.initialize(sctx) + if err != nil { + return nil, err + } + } + if len(e.initialTables) == 0 || e.curTable >= len(e.initialTables) { + e.retrieved = true + return nil, nil + } + + rows, err := e.setDataForTableStorageStats(sctx) + if err != nil { + return nil, err + } + if len(e.outputCols) == len(e.table.Columns) { + return rows, nil + } + retRows := make([][]types.Datum, len(rows)) + for i, fullRow := range rows { + row := make([]types.Datum, len(e.outputCols)) + for j, col := range e.outputCols { + row[j] = fullRow[col.Offset] + } + retRows[i] = row + } + return retRows, nil +} + +type initialTable struct { + db string + *model.TableInfo +} + +func (e *tableStorageStatsRetriever) initialize(sctx sessionctx.Context) error { + is := infoschema.GetInfoSchema(sctx) + var databases []string + schemas := e.extractor.TableSchema + tables := e.extractor.TableName + + // If not specify the table_schema, return an error to avoid traverse all schemas and their tables. + if len(schemas) == 0 { + return errors.Errorf("Please specify the 'table_schema'") + } + + // Filter the sys or memory schema. + for schema := range schemas { + if !util.IsMemOrSysDB(schema) { + databases = append(databases, schema) + } + } + + // Extract the tables to the initialTable. + for _, DB := range databases { + // The user didn't specified the table, extract all tables of this db to initialTable. + if len(tables) == 0 { + tbs := is.SchemaTables(model.NewCIStr(DB)) + for _, tb := range tbs { + e.initialTables = append(e.initialTables, &initialTable{DB, tb.Meta()}) + } + } else { + // The user specified the table, extract the specified tables of this db to initialTable. + for tb := range tables { + if tb, err := is.TableByName(model.NewCIStr(DB), model.NewCIStr(tb)); err == nil { + e.initialTables = append(e.initialTables, &initialTable{DB, tb.Meta()}) + } + } + } + } + + // Cache the helper and return an error if PD unavailable. + tikvStore, ok := sctx.GetStore().(tikv.Storage) + if !ok { + return errors.Errorf("Information about TiKV region status can be gotten only when the storage is TiKV") + } + e.helper = helper.NewHelper(tikvStore) + _, err := e.helper.GetPDAddr() + if err != nil { + return err + } + e.initialized = true + return nil +} + +func (e *tableStorageStatsRetriever) setDataForTableStorageStats(ctx sessionctx.Context) ([][]types.Datum, error) { + rows := make([][]types.Datum, 0, 1024) + count := 0 + for e.curTable < len(e.initialTables) && count < 1024 { + table := e.initialTables[e.curTable] + tableID := table.ID + err := e.helper.GetPDRegionStats(tableID, &e.stats) + if err != nil { + return nil, err + } + peerCount := len(e.stats.StorePeerCount) + + record := types.MakeDatums( + table.db, // TABLE_SCHEMA + table.Name.O, // TABLE_NAME + tableID, // TABLE_ID + peerCount, // TABLE_PEER_COUNT + e.stats.Count, // TABLE_REGION_COUNT + e.stats.EmptyCount, // TABLE_EMPTY_REGION_COUNT + e.stats.StorageSize, // TABLE_SIZE + e.stats.StorageKeys, // TABLE_KEYS + ) + rows = append(rows, record) + count++ + e.curTable++ + } + return rows, nil +} + func (e *memtableRetriever) setDataFromSessionVar(ctx sessionctx.Context) error { var rows [][]types.Datum var err error diff --git a/executor/infoschema_reader_test.go b/executor/infoschema_reader_test.go index be50fb0947417..993226ef65963 100644 --- a/executor/infoschema_reader_test.go +++ b/executor/infoschema_reader_test.go @@ -646,10 +646,21 @@ func (s *testInfoschemaClusterTableSuite) setUpMockPDHTTPServer() (*httptest.Ser } return configuration, nil } - // pd config + // PD config. router.Handle(pdapi.Config, fn.Wrap(mockConfig)) - // TiDB/TiKV config + // TiDB/TiKV config. router.Handle("/config", fn.Wrap(mockConfig)) + // PD region. + router.Handle("/pd/api/v1/stats/region", fn.Wrap(func() (*helper.PDRegionStats, error) { + return &helper.PDRegionStats{ + Count: 1, + EmptyCount: 1, + StorageSize: 1, + StorageKeys: 1, + StoreLeaderCount: map[uint64]int{1: 1}, + StorePeerCount: map[uint64]int{1: 1}, + }, nil + })) return server, mockAddr } @@ -755,6 +766,45 @@ func (s *testInfoschemaClusterTableSuite) TestTiDBClusterInfo(c *C) { )) } +func (s *testInfoschemaClusterTableSuite) TestTableStorageStats(c *C) { + tk := testkit.NewTestKit(c, s.store) + err := tk.QueryToErr("select * from information_schema.TABLE_STORAGE_STATS where TABLE_SCHEMA = 'test'") + c.Assert(err.Error(), Equals, "pd unavailable") + mockAddr := s.mockAddr + store := &mockStore{ + s.store.(tikv.Storage), + mockAddr, + } + + // Test information_schema.TABLE_STORAGE_STATS. + tk = testkit.NewTestKit(c, store) + + // Test not set the schema. + err = tk.QueryToErr("select * from information_schema.TABLE_STORAGE_STATS") + c.Assert(err, NotNil) + c.Assert(err.Error(), Equals, "Please specify the 'table_schema'") + + // Test it would get null set when get the sys schema. + tk.MustQuery("select TABLE_NAME from information_schema.TABLE_STORAGE_STATS where TABLE_SCHEMA = 'information_schema';").Check([][]interface{}{}) + tk.MustQuery("select TABLE_NAME from information_schema.TABLE_STORAGE_STATS where TABLE_SCHEMA = 'mysql';").Check([][]interface{}{}) + tk.MustQuery("select TABLE_NAME from information_schema.TABLE_STORAGE_STATS where TABLE_SCHEMA in ('mysql', 'metrics_schema');").Check([][]interface{}{}) + tk.MustQuery("select TABLE_NAME from information_schema.TABLE_STORAGE_STATS where TABLE_SCHEMA = 'information_schema' and TABLE_NAME='schemata';").Check([][]interface{}{}) + + tk.MustExec("use test") + tk.MustExec("drop table if exists t") + tk.MustExec("create table t (a int, b int, index idx(a))") + tk.MustQuery("select TABLE_NAME, TABLE_SIZE from information_schema.TABLE_STORAGE_STATS where TABLE_SCHEMA = 'test' and TABLE_NAME='t';").Check(testkit.Rows("t 1")) + + tk.MustExec("create table t1 (a int, b int, index idx(a))") + tk.MustQuery("select TABLE_NAME, sum(TABLE_SIZE) from information_schema.TABLE_STORAGE_STATS where TABLE_SCHEMA = 'test' group by TABLE_NAME;").Sort().Check(testkit.Rows( + "t 1", + "t1 1", + )) + tk.MustQuery("select TABLE_SCHEMA, sum(TABLE_SIZE) from information_schema.TABLE_STORAGE_STATS where TABLE_SCHEMA = 'test' group by TABLE_SCHEMA;").Check(testkit.Rows( + "test 2", + )) +} + func (s *testInfoschemaTableSuite) TestSequences(c *C) { tk := testkit.NewTestKit(c, s.store) tk.MustExec("CREATE SEQUENCE test.seq maxvalue 10000000") diff --git a/infoschema/tables.go b/infoschema/tables.go index f3bcec1486d4d..10a7f9d25f7e7 100644 --- a/infoschema/tables.go +++ b/infoschema/tables.go @@ -149,6 +149,8 @@ const ( TableTiFlashTables = "TIFLASH_TABLES" // TableTiFlashSegments is the string constant of tiflash segments table. TableTiFlashSegments = "TIFLASH_SEGMENTS" + // TableStorageStats is a table that contains all tables disk usage + TableStorageStats = "TABLE_STORAGE_STATS" ) var tableIDMap = map[string]int64{ @@ -214,6 +216,7 @@ var tableIDMap = map[string]int64{ TableStatementsSummaryHistory: autoid.InformationSchemaDBID + 60, ClusterTableStatementsSummary: autoid.InformationSchemaDBID + 61, ClusterTableStatementsSummaryHistory: autoid.InformationSchemaDBID + 62, + TableStorageStats: autoid.InformationSchemaDBID + 63, TableTiFlashTables: autoid.InformationSchemaDBID + 64, TableTiFlashSegments: autoid.InformationSchemaDBID + 65, } @@ -1297,6 +1300,17 @@ var tableTableTiFlashSegmentsCols = []columnInfo{ {name: "TIFLASH_INSTANCE", tp: mysql.TypeVarchar, size: 64}, } +var tableStorageStatsCols = []columnInfo{ + {name: "TABLE_SCHEMA", tp: mysql.TypeVarchar, size: 64}, + {name: "TABLE_NAME", tp: mysql.TypeVarchar, size: 64}, + {name: "TABLE_ID", tp: mysql.TypeLonglong, size: 21}, + {name: "PEER_COUNT", tp: mysql.TypeLonglong, size: 21}, + {name: "REGION_COUNT", tp: mysql.TypeLonglong, size: 21, comment: "The region count of single replica of the table"}, + {name: "EMPTY_REGION_COUNT", tp: mysql.TypeLonglong, size: 21, comment: "The region count of single replica of the table"}, + {name: "TABLE_SIZE", tp: mysql.TypeLonglong, size: 64, comment: "The disk usage(MB) of single replica of the table, if the table size is empty or less than 1MB, it would show 1MB "}, + {name: "TABLE_KEYS", tp: mysql.TypeLonglong, size: 64, comment: "The count of keys of single replica of the table"}, +} + // GetShardingInfo returns a nil or description string for the sharding information of given TableInfo. // The returned description string may be: // - "NOT_SHARDED": for tables that SHARD_ROW_ID_BITS is not specified. @@ -1625,6 +1639,7 @@ var tableNameToColumns = map[string][]columnInfo{ TableStatementsSummaryHistory: tableStatementsSummaryCols, TableTiFlashTables: tableTableTiFlashTablesCols, TableTiFlashSegments: tableTableTiFlashSegmentsCols, + TableStorageStats: tableStorageStatsCols, } func createInfoSchemaTable(_ autoid.Allocators, meta *model.TableInfo) (table.Table, error) { diff --git a/planner/core/logical_plan_builder.go b/planner/core/logical_plan_builder.go index ff5e68e9730e6..7c869188fd674 100644 --- a/planner/core/logical_plan_builder.go +++ b/planner/core/logical_plan_builder.go @@ -3059,6 +3059,8 @@ func (b *PlanBuilder) buildMemTable(_ context.Context, dbName model.CIStr, table p.Extractor = &SlowQueryExtractor{} case infoschema.TableTiFlashTables, infoschema.TableTiFlashSegments: p.Extractor = &TiFlashSystemTableExtractor{} + case infoschema.TableStorageStats: + p.Extractor = &TableStorageStatsExtractor{} } } return p, nil diff --git a/planner/core/memtable_predicate_extractor.go b/planner/core/memtable_predicate_extractor.go index fc5aa7d3627f7..4fc28d6da6c25 100644 --- a/planner/core/memtable_predicate_extractor.go +++ b/planner/core/memtable_predicate_extractor.go @@ -926,6 +926,57 @@ func (e *SlowQueryExtractor) setTimeRange(start, end int64) { e.Enable = true } +// TableStorageStatsExtractor is used to extract some predicates of `disk_usage`. +type TableStorageStatsExtractor struct { + extractHelper + // SkipRequest means the where clause always false, we don't need to request any component. + SkipRequest bool + // TableSchema represents tableSchema applied to, and we should apply all table disk usage if there is no schema specified. + // e.g: SELECT * FROM information_schema.disk_usage WHERE table_schema in ('test', 'information_schema'). + TableSchema set.StringSet + // TableName represents tableName applied to, and we should apply all table disk usage if there is no table specified. + // e.g: SELECT * FROM information_schema.disk_usage WHERE table in ('schemata', 'tables'). + TableName set.StringSet +} + +// Extract implements the MemTablePredicateExtractor Extract interface. +func (e *TableStorageStatsExtractor) Extract( + _ sessionctx.Context, + schema *expression.Schema, + names []*types.FieldName, + predicates []expression.Expression, +) []expression.Expression { + // Extract the `table_schema` columns. + remained, schemaSkip, tableSchema := e.extractCol(schema, names, predicates, "table_schema", true) + // Extract the `table_name` columns. + remained, tableSkip, tableName := e.extractCol(schema, names, remained, "table_name", true) + e.SkipRequest = schemaSkip || tableSkip + if e.SkipRequest { + return nil + } + e.TableSchema = tableSchema + e.TableName = tableName + return remained +} + +func (e *TableStorageStatsExtractor) explainInfo(p *PhysicalMemTable) string { + if e.SkipRequest { + return "skip_request: true" + } + + r := new(bytes.Buffer) + if len(e.TableSchema) > 0 { + r.WriteString(fmt.Sprintf("schema:[%s]", extractStringFromStringSet(e.TableSchema))) + } + if r.Len() > 0 && len(e.TableName) > 0 { + r.WriteString(", ") + } + if len(e.TableName) > 0 { + r.WriteString(fmt.Sprintf("table:[%s]", extractStringFromStringSet(e.TableName))) + } + return r.String() +} + func (e *SlowQueryExtractor) explainInfo(p *PhysicalMemTable) string { return "" } diff --git a/server/http_handler.go b/server/http_handler.go index a4e82d0d23fdd..c99a8afd4ce94 100644 --- a/server/http_handler.go +++ b/server/http_handler.go @@ -965,7 +965,7 @@ func (h tableHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) { case opTableRegions: h.handleRegionRequest(schema, tableVal, w, req) case opTableDiskUsage: - h.handleDiskUsageRequest(schema, tableVal, w, req) + h.handleDiskUsageRequest(tableVal, w) case opTableScatter: // supports partition table, only get one physical table, prevent too many scatter schedulers. ptbl, err := h.getPartition(tableVal, partitionName) @@ -1274,54 +1274,14 @@ func (h tableHandler) getRegionsByID(tbl table.Table, id int64, name string) (*T }, nil } -// pdRegionStats is the json response from PD. -type pdRegionStats struct { - Count int `json:"count"` - EmptyCount int `json:"empty_count"` - StorageSize int64 `json:"storage_size"` - StoreLeaderCount map[uint64]int `json:"store_leader_count"` - StorePeerCount map[uint64]int `json:"store_peer_count"` - StoreLeaderSize map[uint64]int64 `json:"store_leader_size"` - StorePeerSize map[uint64]int64 `json:"store_peer_size"` -} - -func (h tableHandler) handleDiskUsageRequest(schema infoschema.InfoSchema, tbl table.Table, w http.ResponseWriter, req *http.Request) { +func (h tableHandler) handleDiskUsageRequest(tbl table.Table, w http.ResponseWriter) { tableID := tbl.Meta().ID - pdAddrs, err := h.getPDAddr() - if err != nil { - writeError(w, err) - return - } - - // Include table and index data, because their range located in tableID_i tableID_r - startKey := tablecodec.EncodeTablePrefix(tableID) - endKey := tablecodec.EncodeTablePrefix(tableID + 1) - startKey = codec.EncodeBytes([]byte{}, startKey) - endKey = codec.EncodeBytes([]byte{}, endKey) - - statURL := fmt.Sprintf("%s://%s/pd/api/v1/stats/region?start_key=%s&end_key=%s", - util.InternalHTTPSchema(), - pdAddrs[0], - url.QueryEscape(string(startKey)), - url.QueryEscape(string(endKey))) - - resp, err := util.InternalHTTPClient().Get(statURL) + var stats helper.PDRegionStats + err := h.GetPDRegionStats(tableID, &stats) if err != nil { writeError(w, err) return } - defer func() { - if err := resp.Body.Close(); err != nil { - log.Error(err) - } - }() - - var stats pdRegionStats - dec := json.NewDecoder(resp.Body) - if err := dec.Decode(&stats); err != nil { - writeError(w, err) - return - } writeData(w, stats.StorageSize) } diff --git a/store/helper/helper.go b/store/helper/helper.go index ffd09c5b574f2..5a86a2d82713f 100644 --- a/store/helper/helper.go +++ b/store/helper/helper.go @@ -22,6 +22,7 @@ import ( "io" "math" "net/http" + "net/url" "sort" "strconv" "strings" @@ -38,6 +39,7 @@ import ( "github.com/pingcap/tidb/util/codec" "github.com/pingcap/tidb/util/logutil" "github.com/pingcap/tidb/util/pdapi" + log "github.com/sirupsen/logrus" "go.uber.org/zap" ) @@ -726,3 +728,64 @@ func (h *Helper) GetStoresStat() (*StoresStat, error) { } return &storesStat, nil } + +// GetPDAddr return the PD Address. +func (h *Helper) GetPDAddr() ([]string, error) { + var pdAddrs []string + etcd, ok := h.Store.(tikv.EtcdBackend) + if !ok { + return nil, errors.New("not implemented") + } + pdAddrs, err := etcd.EtcdAddrs() + if err != nil { + return nil, err + } + if len(pdAddrs) == 0 { + return nil, errors.New("pd unavailable") + } + return pdAddrs, nil +} + +// PDRegionStats is the json response from PD. +type PDRegionStats struct { + Count int `json:"count"` + EmptyCount int `json:"empty_count"` + StorageSize int64 `json:"storage_size"` + StorageKeys int64 `json:"storage_keys"` + StoreLeaderCount map[uint64]int `json:"store_leader_count"` + StorePeerCount map[uint64]int `json:"store_peer_count"` +} + +// GetPDRegionStats get the RegionStats by tableID. +func (h *Helper) GetPDRegionStats(tableID int64, stats *PDRegionStats) error { + pdAddrs, err := h.GetPDAddr() + if err != nil { + return err + } + + startKey := tablecodec.EncodeTablePrefix(tableID) + endKey := tablecodec.EncodeTablePrefix(tableID + 1) + startKey = codec.EncodeBytes([]byte{}, startKey) + endKey = codec.EncodeBytes([]byte{}, endKey) + + statURL := fmt.Sprintf("%s://%s/pd/api/v1/stats/region?start_key=%s&end_key=%s", + util.InternalHTTPSchema(), + pdAddrs[0], + url.QueryEscape(string(startKey)), + url.QueryEscape(string(endKey))) + + resp, err := util.InternalHTTPClient().Get(statURL) + if err != nil { + return err + } + + defer func() { + if err = resp.Body.Close(); err != nil { + log.Error(err) + } + }() + + dec := json.NewDecoder(resp.Body) + + return dec.Decode(stats) +} From c71000046cf1c5ade501cc2b14d3b130863f366d Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Thu, 15 Oct 2020 16:31:43 +0800 Subject: [PATCH 040/229] tikv: support scatter region with option api (#19844) (#19946) Signed-off-by: ti-srebot --- ddl/split_region.go | 6 +++--- executor/split.go | 4 ++-- go.sum | 15 --------------- kv/kv.go | 2 +- store/mockstore/mocktikv/pd.go | 12 ++++++++---- store/tikv/2pc.go | 2 +- store/tikv/scan_test.go | 6 +++--- store/tikv/split_region.go | 26 ++++++++++++++++---------- store/tikv/store_test.go | 4 ++++ 9 files changed, 38 insertions(+), 39 deletions(-) diff --git a/ddl/split_region.go b/ddl/split_region.go index 9cd0177cac430..9e2637fa9e698 100644 --- a/ddl/split_region.go +++ b/ddl/split_region.go @@ -95,7 +95,7 @@ func preSplitPhysicalTableByShardRowID(ctx context.Context, store kv.SplittableS splitTableKeys = append(splitTableKeys, key) } var err error - regionIDs, err := store.SplitRegions(ctx, splitTableKeys, scatter) + regionIDs, err := store.SplitRegions(ctx, splitTableKeys, scatter, &tbInfo.ID) if err != nil { logutil.BgLogger().Warn("[ddl] pre split some table regions failed", zap.Stringer("table", tbInfo.Name), zap.Int("successful region count", len(regionIDs)), zap.Error(err)) @@ -106,7 +106,7 @@ func preSplitPhysicalTableByShardRowID(ctx context.Context, store kv.SplittableS func splitRecordRegion(ctx context.Context, store kv.SplittableStore, tableID int64, scatter bool) uint64 { tableStartKey := tablecodec.GenTablePrefix(tableID) - regionIDs, err := store.SplitRegions(ctx, [][]byte{tableStartKey}, scatter) + regionIDs, err := store.SplitRegions(ctx, [][]byte{tableStartKey}, scatter, &tableID) if err != nil { // It will be automatically split by TiKV later. logutil.BgLogger().Warn("[ddl] split table region failed", zap.Error(err)) @@ -123,7 +123,7 @@ func splitIndexRegion(store kv.SplittableStore, tblInfo *model.TableInfo, scatte indexPrefix := tablecodec.EncodeTableIndexPrefix(tblInfo.ID, idx.ID) splitKeys = append(splitKeys, indexPrefix) } - regionIDs, err := store.SplitRegions(context.Background(), splitKeys, scatter) + regionIDs, err := store.SplitRegions(context.Background(), splitKeys, scatter, &tblInfo.ID) if err != nil { logutil.BgLogger().Warn("[ddl] pre split some table index regions failed", zap.Stringer("table", tblInfo.Name), zap.Int("successful region count", len(regionIDs)), zap.Error(err)) diff --git a/executor/split.go b/executor/split.go index e11aa70cb3bd1..f2d84bb6c668d 100755 --- a/executor/split.go +++ b/executor/split.go @@ -96,7 +96,7 @@ func (e *SplitIndexRegionExec) splitIndexRegion(ctx context.Context) error { start := time.Now() ctxWithTimeout, cancel := context.WithTimeout(ctx, e.ctx.GetSessionVars().GetSplitRegionTimeout()) defer cancel() - regionIDs, err := s.SplitRegions(ctxWithTimeout, e.splitIdxKeys, true) + regionIDs, err := s.SplitRegions(ctxWithTimeout, e.splitIdxKeys, true, &e.tableInfo.ID) if err != nil { logutil.BgLogger().Warn("split table index region failed", zap.String("table", e.tableInfo.Name.L), @@ -365,7 +365,7 @@ func (e *SplitTableRegionExec) splitTableRegion(ctx context.Context) error { ctxWithTimeout, cancel := context.WithTimeout(ctx, e.ctx.GetSessionVars().GetSplitRegionTimeout()) defer cancel() - regionIDs, err := s.SplitRegions(ctxWithTimeout, e.splitKeys, true) + regionIDs, err := s.SplitRegions(ctxWithTimeout, e.splitKeys, true, &e.tableInfo.ID) if err != nil { logutil.BgLogger().Warn("split table region failed", zap.String("table", e.tableInfo.Name.L), diff --git a/go.sum b/go.sum index 54496ad875728..6fef40784cc45 100644 --- a/go.sum +++ b/go.sum @@ -438,7 +438,6 @@ github.com/pingcap/errors v0.11.5-0.20200917111840-a15ef68f753d/go.mod h1:g4vx// github.com/pingcap/failpoint v0.0.0-20191029060244-12f4ac2fd11d/go.mod h1:DNS3Qg7bEDhU6EXNHF+XSv/PGznQaMJ5FWvctpm6pQI= github.com/pingcap/failpoint v0.0.0-20200210140405-f8f9fb234798/go.mod h1:DNS3Qg7bEDhU6EXNHF+XSv/PGznQaMJ5FWvctpm6pQI= github.com/pingcap/failpoint v0.0.0-20200506114213-c17f16071c53/go.mod h1:w4PEZ5y16LeofeeGwdgZB4ddv9bLyDuIX+ljstgKZyk= -github.com/pingcap/failpoint v0.0.0-20200603062251-b230c36c413c h1:cm0zAj+Tab94mp4OH+VoLJiSNQvZO4pWDGJ8KEk2a0c= github.com/pingcap/failpoint v0.0.0-20200603062251-b230c36c413c/go.mod h1:w4PEZ5y16LeofeeGwdgZB4ddv9bLyDuIX+ljstgKZyk= github.com/pingcap/failpoint v0.0.0-20200702092429-9f69995143ce h1:Y1kCxlCtlPTMtVcOkjUcuQKh+YrluSo7+7YMCQSzy30= github.com/pingcap/failpoint v0.0.0-20200702092429-9f69995143ce/go.mod h1:w4PEZ5y16LeofeeGwdgZB4ddv9bLyDuIX+ljstgKZyk= @@ -453,17 +452,13 @@ github.com/pingcap/kvproto v0.0.0-20200417092353-efbe03bcffbd/go.mod h1:IOdRDPLy github.com/pingcap/kvproto v0.0.0-20200420075417-e0c6e8842f22/go.mod h1:IOdRDPLyda8GX2hE/jO7gqaCV/PNFh8BZQCQZXfIOqI= github.com/pingcap/kvproto v0.0.0-20200423020121-038e31959c2a/go.mod h1:IOdRDPLyda8GX2hE/jO7gqaCV/PNFh8BZQCQZXfIOqI= github.com/pingcap/kvproto v0.0.0-20200424032552-6650270c39c3/go.mod h1:IOdRDPLyda8GX2hE/jO7gqaCV/PNFh8BZQCQZXfIOqI= -github.com/pingcap/kvproto v0.0.0-20200518112156-d4aeb467de29 h1:NpW1OuYrIl+IQrSsVbtyHpHpazmSCHy+ysrOixY0xY4= github.com/pingcap/kvproto v0.0.0-20200518112156-d4aeb467de29/go.mod h1:IOdRDPLyda8GX2hE/jO7gqaCV/PNFh8BZQCQZXfIOqI= -github.com/pingcap/kvproto v0.0.0-20200706115936-1e0910aabe6c h1:VnLpCAxMAeDxc7HXTetwDQB+/MtDQjHAOBsd4QnGVwA= github.com/pingcap/kvproto v0.0.0-20200706115936-1e0910aabe6c/go.mod h1:IOdRDPLyda8GX2hE/jO7gqaCV/PNFh8BZQCQZXfIOqI= -github.com/pingcap/kvproto v0.0.0-20200818080353-7aaed8998596 h1:1cRjX7+yHQiE4pV/xwB8XcbZXV9sHshWMNTd5I6SS2o= github.com/pingcap/kvproto v0.0.0-20200818080353-7aaed8998596/go.mod h1:IOdRDPLyda8GX2hE/jO7gqaCV/PNFh8BZQCQZXfIOqI= github.com/pingcap/kvproto v0.0.0-20200907074027-32a3a0accf7d h1:gvJScINTd/HFasp82W1paGTfbYe2Bnzn8QBOJXckLwY= github.com/pingcap/kvproto v0.0.0-20200907074027-32a3a0accf7d/go.mod h1:IOdRDPLyda8GX2hE/jO7gqaCV/PNFh8BZQCQZXfIOqI= github.com/pingcap/log v0.0.0-20191012051959-b742a5d432e9/go.mod h1:4rbK1p9ILyIfb6hU7OG2CiWSqMXnp3JMbiaVJ6mvoY8= github.com/pingcap/log v0.0.0-20200117041106-d28c14d3b1cd/go.mod h1:4rbK1p9ILyIfb6hU7OG2CiWSqMXnp3JMbiaVJ6mvoY8= -github.com/pingcap/log v0.0.0-20200511115504-543df19646ad h1:SveG82rmu/GFxYanffxsSF503SiQV+2JLnWEiGiF+Tc= github.com/pingcap/log v0.0.0-20200511115504-543df19646ad/go.mod h1:4rbK1p9ILyIfb6hU7OG2CiWSqMXnp3JMbiaVJ6mvoY8= github.com/pingcap/log v0.0.0-20200828042413-fce0951f1463 h1:Jboj+s4jSCp5E1WDgmRUv5rIFKFHaaSWuSZ4wMwXIcc= github.com/pingcap/log v0.0.0-20200828042413-fce0951f1463/go.mod h1:4rbK1p9ILyIfb6hU7OG2CiWSqMXnp3JMbiaVJ6mvoY8= @@ -477,7 +472,6 @@ github.com/pingcap/parser v0.0.0-20200921063432-e220cfcfd026 h1:i+r4P7hb4KpW74nP github.com/pingcap/parser v0.0.0-20200921063432-e220cfcfd026/go.mod h1:dMMvhqeowLnAsDWspyalgxXoRUnP09cZ7wAnpt2e/S8= github.com/pingcap/pd/v4 v4.0.0-rc.1.0.20200422143320-428acd53eba2/go.mod h1:s+utZtXDznOiL24VK0qGmtoHjjXNsscJx3m1n8cC56s= github.com/pingcap/pd/v4 v4.0.0-rc.2.0.20200520083007-2c251bd8f181/go.mod h1:q4HTx/bA8aKBa4S7L+SQKHvjRPXCRV0tA0yRw0qkZSA= -github.com/pingcap/pd/v4 v4.0.5-0.20200817114353-e465cafe8a91 h1:zCOWP+kIzM6ZsXdu2QoM/W6+3vFZj04MYboMP2Obc0E= github.com/pingcap/pd/v4 v4.0.5-0.20200817114353-e465cafe8a91/go.mod h1:m9OEkKoPMQWjrbJ9pqjjeCqzqxraZrPEuWa1OI6Wcek= github.com/pingcap/sysutil v0.0.0-20200206130906-2bfa6dc40bcd/go.mod h1:EB/852NMQ+aRKioCpToQ94Wl7fktV+FNnxf3CX/TTXI= github.com/pingcap/sysutil v0.0.0-20200408114249-ed3bd6f7fdb1/go.mod h1:EB/852NMQ+aRKioCpToQ94Wl7fktV+FNnxf3CX/TTXI= @@ -494,7 +488,6 @@ github.com/pingcap/tidb-tools v4.0.0-beta.1.0.20200306084441-875bd09aa3d5+incomp github.com/pingcap/tidb-tools v4.0.0-rc.1.0.20200421113014-507d2bb3a15e+incompatible/go.mod h1:XGdcy9+yqlDSEMTpOXnwf3hiTeqrV6MN/u1se9N8yIM= github.com/pingcap/tidb-tools v4.0.0-rc.1.0.20200514040632-f76b3e428e19+incompatible/go.mod h1:XGdcy9+yqlDSEMTpOXnwf3hiTeqrV6MN/u1se9N8yIM= github.com/pingcap/tidb-tools v4.0.0-rc.2.0.20200521050818-6dd445d83fe0+incompatible/go.mod h1:XGdcy9+yqlDSEMTpOXnwf3hiTeqrV6MN/u1se9N8yIM= -github.com/pingcap/tidb-tools v4.0.1-0.20200530144555-cdec43635625+incompatible h1:ASydCeg5/hgglsRYtZp31UF5jQeJfZ350Sy1+GFnpnk= github.com/pingcap/tidb-tools v4.0.1-0.20200530144555-cdec43635625+incompatible/go.mod h1:XGdcy9+yqlDSEMTpOXnwf3hiTeqrV6MN/u1se9N8yIM= github.com/pingcap/tidb-tools v4.0.6-0.20200828085514-03575b185007+incompatible h1:1GY6Qu5pT7JZ4QwkPcz+daXKhkDgKY1F6qKxifSp+tI= github.com/pingcap/tidb-tools v4.0.6-0.20200828085514-03575b185007+incompatible/go.mod h1:XGdcy9+yqlDSEMTpOXnwf3hiTeqrV6MN/u1se9N8yIM= @@ -540,7 +533,6 @@ github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/sasha-s/go-deadlock v0.2.0/go.mod h1:StQn567HiB1fF2yJ44N9au7wOhrPS3iZqiDbRupzT10= github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= -github.com/sergi/go-diff v1.0.1-0.20180205163309-da645544ed44 h1:tB9NOR21++IjLyVx3/PCPhWMwqGNCMQEH96A6dMZ/gc= github.com/sergi/go-diff v1.0.1-0.20180205163309-da645544ed44/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= github.com/shirou/gopsutil v2.19.10+incompatible h1:lA4Pi29JEVIQIgATSeftHSY0rMGI9CLrl2ZvDLiahto= github.com/shirou/gopsutil v2.19.10+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= @@ -601,7 +593,6 @@ github.com/tiancaiamao/appdash v0.0.0-20181126055449-889f96f722a2/go.mod h1:2PfK github.com/tidwall/gjson v1.3.5/go.mod h1:P256ACg0Mn+j1RXIDXoss50DeIABTYK1PULOJHhxOls= github.com/tidwall/match v1.0.1/go.mod h1:LujAq0jyVjBy028G1WhWfIzbpQfMO8bBZ6Tyb0+pL9E= github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= -github.com/tikv/pd v1.1.0-beta.0.20200907080620-6830f5bb92a2 h1:cC5v/gn9NdcmAlpBrWI5x3MiYmQcW2k7EHccg8837p4= github.com/tikv/pd v1.1.0-beta.0.20200907080620-6830f5bb92a2/go.mod h1:6OYi62ks7nFIBtWWpOjnngr5LNos4Hvi1BzArCWAlBc= github.com/tikv/pd v1.1.0-beta.0.20200921100508-9ee41c4144f3 h1:T2ecr5rhDLSL1Qz1ji4znQ/XyZLPM728lCLm7plx8Kg= github.com/tikv/pd v1.1.0-beta.0.20200921100508-9ee41c4144f3/go.mod h1:Yj52KUebQf2r3JG6pSRZ22E+lSrZZPNFbs4zjZEkEvY= @@ -626,7 +617,6 @@ github.com/ugorji/go/codec v1.1.5-pre/go.mod h1:tULtS6Gy1AE1yCENaw4Vb//HLH5njI2t github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= github.com/unrolled/render v0.0.0-20171102162132-65450fb6b2d3/go.mod h1:tu82oB5W2ykJRVioYsB+IQKcft7ryBr7w12qMBUPyXg= github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= -github.com/urfave/cli v1.22.2 h1:gsqYFH8bb9ekPA12kRo0hfjngWQjkJPlN9R0N78BoUo= github.com/urfave/cli v1.22.2/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= github.com/urfave/cli/v2 v2.1.1/go.mod h1:SE9GqnLQmjVa0iPEY0f1w3ygNIYcIJ0OKPMoW2caLfQ= github.com/urfave/negroni v0.3.0/go.mod h1:Meg73S6kFm/4PpbYdq35yYWoCZ9mS/YSx+lKnmiohz4= @@ -641,7 +631,6 @@ github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.etcd.io/bbolt v1.3.3 h1:MUGmc65QhB3pIlaQ5bB4LwqSj6GIonVJXpZiaKNyaKk= go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.5 h1:XAzx9gjCb0Rxj7EoqcClPD1d5ZBxZJk0jbuoPHenBt0= go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= @@ -655,7 +644,6 @@ go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= -go.uber.org/atomic v1.6.0 h1:Ezj3JGmsOnG1MoRWQkPBsKLe9DwWD9QeXzTRzzldNVk= go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= @@ -668,11 +656,9 @@ go.uber.org/goleak v0.10.0/go.mod h1:VCZuO8V8mFPlL0F5J5GK1rtHV3DrFcQ1R8ryq7FK0aI go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= go.uber.org/multierr v1.4.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= -go.uber.org/multierr v1.5.0 h1:KCa4XfM8CWFCpxXRGok+Q0SS/0XBhMDbHHGABQLvD2A= go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU= go.uber.org/multierr v1.6.0 h1:y6IPFStTAIT5Ytl7/XYmHvzXQ7S3g/IeZW9hyZ5thw4= go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= -go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee h1:0mgffUl7nfd+FpvXMVz4IDEaUSmT1ysygQC7qYo7sG4= go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= go.uber.org/zap v1.8.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.9.1/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= @@ -680,7 +666,6 @@ go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.12.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= go.uber.org/zap v1.14.1/go.mod h1:Mb2vm2krFEG5DV0W9qcHBYFtp/Wku1cvYaqPsS/WYfc= -go.uber.org/zap v1.15.0 h1:ZZCA22JRF2gQE5FoNmhmrf7jeJJ2uhqDUNRYKm8dvmM= go.uber.org/zap v1.15.0/go.mod h1:Mb2vm2krFEG5DV0W9qcHBYFtp/Wku1cvYaqPsS/WYfc= go.uber.org/zap v1.16.0 h1:uFRZXykJGK9lLY4HtgSw44DnIcAM+kRBP7x5m+NpAOM= go.uber.org/zap v1.16.0/go.mod h1:MA8QOfq0BHJwdXa996Y4dYkAqRKB8/1K1QMMZVaNZjQ= diff --git a/kv/kv.go b/kv/kv.go index 25e2b5f5e9ebe..74ea94184bf90 100644 --- a/kv/kv.go +++ b/kv/kv.go @@ -432,7 +432,7 @@ type Iterator interface { // SplittableStore is the kv store which supports split regions. type SplittableStore interface { - SplitRegions(ctx context.Context, splitKey [][]byte, scatter bool) (regionID []uint64, err error) + SplitRegions(ctx context.Context, splitKey [][]byte, scatter bool, tableID *int64) (regionID []uint64, err error) WaitScatterRegionFinish(ctx context.Context, regionID uint64, backOff int) error CheckRegionInScattering(regionID uint64) (bool, error) } diff --git a/store/mockstore/mocktikv/pd.go b/store/mockstore/mocktikv/pd.go index bac02fb6e81af..6835c2aa9a365 100644 --- a/store/mockstore/mocktikv/pd.go +++ b/store/mockstore/mocktikv/pd.go @@ -55,10 +55,6 @@ func (c *pdClient) GetAllMembers(ctx context.Context) ([]*pdpb.Member, error) { return nil, nil } -func (c *pdClient) ScatterRegionWithOption(ctx context.Context, regionID uint64, opts ...pd.ScatterRegionOption) error { - return nil -} - func (c *pdClient) GetClusterID(ctx context.Context) uint64 { return 1 } @@ -175,8 +171,16 @@ func (c *pdClient) ScatterRegion(ctx context.Context, regionID uint64) error { return nil } +func (c *pdClient) ScatterRegionWithOption(ctx context.Context, regionID uint64, opts ...pd.ScatterRegionOption) error { + return nil +} + func (c *pdClient) GetOperator(ctx context.Context, regionID uint64) (*pdpb.GetOperatorResponse, error) { return &pdpb.GetOperatorResponse{Status: pdpb.OperatorStatus_SUCCESS}, nil } +func (c *pdClient) GetMemberInfo(ctx context.Context) ([]*pdpb.Member, error) { + return nil, nil +} + func (c *pdClient) GetLeaderAddr() string { return "mockpd" } diff --git a/store/tikv/2pc.go b/store/tikv/2pc.go index 3307b24699897..c4d3d6d24464d 100644 --- a/store/tikv/2pc.go +++ b/store/tikv/2pc.go @@ -532,7 +532,7 @@ func preSplitAndScatterIn2PC(ctx context.Context, store *tikvStore, group groupe return false } - regionIDs, err := store.SplitRegions(ctx, splitKeys, true) + regionIDs, err := store.SplitRegions(ctx, splitKeys, true, nil) if err != nil { logutil.BgLogger().Warn("2PC split regions failed", zap.Uint64("regionID", group.region.id), zap.Int("keys count", keysLength), zap.Int("values count", valsLength), zap.Error(err)) diff --git a/store/tikv/scan_test.go b/store/tikv/scan_test.go index fb99bffd33454..f6ce765d4819a 100644 --- a/store/tikv/scan_test.go +++ b/store/tikv/scan_test.go @@ -89,14 +89,14 @@ func (s *testScanSuite) TestScan(c *C) { } err := txn.Commit(context.Background()) c.Assert(err, IsNil) - + mockTableID := int64(999) if rowNum > 123 { - _, err = s.store.SplitRegions(context.Background(), [][]byte{encodeKey(s.prefix, s08d("key", 123))}, false) + _, err = s.store.SplitRegions(context.Background(), [][]byte{encodeKey(s.prefix, s08d("key", 123))}, false, &mockTableID) c.Assert(err, IsNil) } if rowNum > 456 { - _, err = s.store.SplitRegions(context.Background(), [][]byte{encodeKey(s.prefix, s08d("key", 456))}, false) + _, err = s.store.SplitRegions(context.Background(), [][]byte{encodeKey(s.prefix, s08d("key", 456))}, false, &mockTableID) c.Assert(err, IsNil) } diff --git a/store/tikv/split_region.go b/store/tikv/split_region.go index 2d19fb829b60b..a9ce30affd95a 100644 --- a/store/tikv/split_region.go +++ b/store/tikv/split_region.go @@ -16,6 +16,7 @@ package tikv import ( "bytes" "context" + "fmt" "math" "github.com/pingcap/errors" @@ -28,6 +29,7 @@ import ( "github.com/pingcap/tidb/util" "github.com/pingcap/tidb/util/logutil" "github.com/pingcap/tidb/util/stringutil" + pd "github.com/tikv/pd/client" "go.uber.org/zap" ) @@ -37,7 +39,7 @@ func equalRegionStartKey(key, regionStartKey []byte) bool { return bytes.Equal(key, regionStartKey) } -func (s *tikvStore) splitBatchRegionsReq(bo *Backoffer, keys [][]byte, scatter bool) (*tikvrpc.Response, error) { +func (s *tikvStore) splitBatchRegionsReq(bo *Backoffer, keys [][]byte, scatter bool, tableID *int64) (*tikvrpc.Response, error) { // equalRegionStartKey is used to filter split keys. // If the split key is equal to the start key of the region, then the key has been split, we need to skip the split key. groups, _, err := s.regionCache.GroupKeysByRegion(bo, keys, equalRegionStartKey) @@ -62,7 +64,7 @@ func (s *tikvStore) splitBatchRegionsReq(bo *Backoffer, keys [][]byte, scatter b zap.Stringer("first split key", kv.Key(batches[0].keys[0]))) } if len(batches) == 1 { - resp := s.batchSendSingleRegion(bo, batches[0], scatter) + resp := s.batchSendSingleRegion(bo, batches[0], scatter, tableID) return resp.resp, errors.Trace(resp.err) } ch := make(chan singleBatchResp, len(batches)) @@ -73,7 +75,7 @@ func (s *tikvStore) splitBatchRegionsReq(bo *Backoffer, keys [][]byte, scatter b util.WithRecovery(func() { select { - case ch <- s.batchSendSingleRegion(backoffer, b, scatter): + case ch <- s.batchSendSingleRegion(backoffer, b, scatter, tableID): case <-bo.ctx.Done(): ch <- singleBatchResp{err: bo.ctx.Err()} } @@ -105,7 +107,7 @@ func (s *tikvStore) splitBatchRegionsReq(bo *Backoffer, keys [][]byte, scatter b return &tikvrpc.Response{Resp: srResp}, errors.Trace(err) } -func (s *tikvStore) batchSendSingleRegion(bo *Backoffer, batch batch, scatter bool) singleBatchResp { +func (s *tikvStore) batchSendSingleRegion(bo *Backoffer, batch batch, scatter bool, tableID *int64) singleBatchResp { failpoint.Inject("MockSplitRegionTimeout", func(val failpoint.Value) { if val.(bool) { if _, ok := bo.ctx.Deadline(); ok { @@ -139,7 +141,7 @@ func (s *tikvStore) batchSendSingleRegion(bo *Backoffer, batch batch, scatter bo batchResp.err = errors.Trace(err) return batchResp } - resp, err = s.splitBatchRegionsReq(bo, batch.keys, scatter) + resp, err = s.splitBatchRegionsReq(bo, batch.keys, scatter, tableID) batchResp.resp = resp batchResp.err = err return batchResp @@ -171,7 +173,7 @@ func (s *tikvStore) batchSendSingleRegion(bo *Backoffer, batch batch, scatter bo } for i, r := range spResp.Regions { - if err = s.scatterRegion(bo, r.Id); err == nil { + if err = s.scatterRegion(bo, r.Id, tableID); err == nil { logutil.BgLogger().Info("batch split regions, scatter region complete", zap.Uint64("batch region ID", batch.regionID.id), zap.Stringer("at", kv.Key(batch.keys[i])), @@ -195,9 +197,9 @@ func (s *tikvStore) batchSendSingleRegion(bo *Backoffer, batch batch, scatter bo } // SplitRegions splits regions by splitKeys. -func (s *tikvStore) SplitRegions(ctx context.Context, splitKeys [][]byte, scatter bool) (regionIDs []uint64, err error) { +func (s *tikvStore) SplitRegions(ctx context.Context, splitKeys [][]byte, scatter bool, tableID *int64) (regionIDs []uint64, err error) { bo := NewBackofferWithVars(ctx, int(math.Min(float64(len(splitKeys))*splitRegionBackoff, maxSplitRegionsBackoff)), nil) - resp, err := s.splitBatchRegionsReq(bo, splitKeys, scatter) + resp, err := s.splitBatchRegionsReq(bo, splitKeys, scatter, tableID) regionIDs = make([]uint64, 0, len(splitKeys)) if resp != nil && resp.Resp != nil { spResp := resp.Resp.(*kvrpcpb.SplitRegionResponse) @@ -209,11 +211,15 @@ func (s *tikvStore) SplitRegions(ctx context.Context, splitKeys [][]byte, scatte return regionIDs, errors.Trace(err) } -func (s *tikvStore) scatterRegion(bo *Backoffer, regionID uint64) error { +func (s *tikvStore) scatterRegion(bo *Backoffer, regionID uint64, tableID *int64) error { logutil.BgLogger().Info("start scatter region", zap.Uint64("regionID", regionID)) for { - err := s.pdClient.ScatterRegion(bo.ctx, regionID) + opts := make([]pd.ScatterRegionOption, 0, 1) + if tableID != nil { + opts = append(opts, pd.WithGroup(fmt.Sprintf("%v", *tableID))) + } + err := s.pdClient.ScatterRegionWithOption(bo.ctx, regionID, opts...) failpoint.Inject("MockScatterRegionTimeout", func(val failpoint.Value) { if val.(bool) { diff --git a/store/tikv/store_test.go b/store/tikv/store_test.go index 67b36cc9a6b4a..ee0e47a79a517 100644 --- a/store/tikv/store_test.go +++ b/store/tikv/store_test.go @@ -223,6 +223,10 @@ func (c *mockPDClient) ScatterRegionWithOption(ctx context.Context, regionID uin return nil } +func (c *mockPDClient) GetMemberInfo(ctx context.Context) ([]*pdpb.Member, error) { + return nil, nil +} + type checkRequestClient struct { Client priority pb.CommandPri From 8968d39cfc752dc8c1cac3d9eb987c7869d05f04 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Thu, 15 Oct 2020 20:29:13 +0800 Subject: [PATCH 041/229] executor: fix wrong outer join result when filter outer side using index merge join (#20407) (#20427) Signed-off-by: ti-srebot --- executor/index_lookup_merge_join.go | 22 ++++++++++++---------- executor/index_lookup_merge_join_test.go | 12 ++++++++++++ 2 files changed, 24 insertions(+), 10 deletions(-) diff --git a/executor/index_lookup_merge_join.go b/executor/index_lookup_merge_join.go index 70ff8f071b238..07e925872d35e 100644 --- a/executor/index_lookup_merge_join.go +++ b/executor/index_lookup_merge_join.go @@ -95,6 +95,7 @@ type innerMergeCtx struct { type lookUpMergeJoinTask struct { outerResult *chunk.List + outerMatch [][]bool outerOrderIdx []chunk.RowPtr innerResult *chunk.Chunk @@ -432,25 +433,23 @@ func (imw *innerMergeWorker) run(ctx context.Context, wg *sync.WaitGroup, cancel func (imw *innerMergeWorker) handleTask(ctx context.Context, task *lookUpMergeJoinTask) (err error) { numOuterChks := task.outerResult.NumChunks() - var outerMatch [][]bool if imw.outerMergeCtx.filter != nil { - outerMatch = make([][]bool, numOuterChks) + task.outerMatch = make([][]bool, numOuterChks) for i := 0; i < numOuterChks; i++ { chk := task.outerResult.GetChunk(i) - outerMatch[i] = make([]bool, chk.NumRows()) - outerMatch[i], err = expression.VectorizedFilter(imw.ctx, imw.outerMergeCtx.filter, chunk.NewIterator4Chunk(chk), outerMatch[i]) + task.outerMatch[i] = make([]bool, chk.NumRows()) + task.outerMatch[i], err = expression.VectorizedFilter(imw.ctx, imw.outerMergeCtx.filter, chunk.NewIterator4Chunk(chk), task.outerMatch[i]) if err != nil { return err } } } + task.memTracker.Consume(int64(cap(task.outerMatch))) task.outerOrderIdx = make([]chunk.RowPtr, 0, task.outerResult.Len()) for i := 0; i < numOuterChks; i++ { numRow := task.outerResult.GetChunk(i).NumRows() for j := 0; j < numRow; j++ { - if len(outerMatch) == 0 || outerMatch[i][j] { - task.outerOrderIdx = append(task.outerOrderIdx, chunk.RowPtr{ChkIdx: uint32(i), RowIdx: uint32(j)}) - } + task.outerOrderIdx = append(task.outerOrderIdx, chunk.RowPtr{ChkIdx: uint32(i), RowIdx: uint32(j)}) } } task.memTracker.Consume(int64(cap(task.outerOrderIdx))) @@ -653,8 +652,11 @@ func (imw *innerMergeWorker) constructDatumLookupKeys(task *lookUpMergeJoinTask) return dLookUpKeys, nil } -func (imw *innerMergeWorker) constructDatumLookupKey(task *lookUpMergeJoinTask, rowIdx chunk.RowPtr) (*indexJoinLookUpContent, error) { - outerRow := task.outerResult.GetRow(rowIdx) +func (imw *innerMergeWorker) constructDatumLookupKey(task *lookUpMergeJoinTask, idx chunk.RowPtr) (*indexJoinLookUpContent, error) { + if task.outerMatch != nil && !task.outerMatch[idx.ChkIdx][idx.RowIdx] { + return nil, nil + } + outerRow := task.outerResult.GetRow(idx) sc := imw.ctx.GetSessionVars().StmtCtx keyLen := len(imw.keyCols) dLookupKey := make([]types.Datum, 0, keyLen) @@ -688,7 +690,7 @@ func (imw *innerMergeWorker) constructDatumLookupKey(task *lookUpMergeJoinTask, } dLookupKey = append(dLookupKey, innerValue) } - return &indexJoinLookUpContent{keys: dLookupKey, row: task.outerResult.GetRow(rowIdx)}, nil + return &indexJoinLookUpContent{keys: dLookupKey, row: task.outerResult.GetRow(idx)}, nil } func (imw *innerMergeWorker) dedupDatumLookUpKeys(lookUpContents []*indexJoinLookUpContent) []*indexJoinLookUpContent { diff --git a/executor/index_lookup_merge_join_test.go b/executor/index_lookup_merge_join_test.go index ea8f21c875946..87bd305cfc066 100644 --- a/executor/index_lookup_merge_join_test.go +++ b/executor/index_lookup_merge_join_test.go @@ -101,3 +101,15 @@ func (s *testSuiteAgg) TestIndexJoinOnSinglePartitionTable(c *C) { rows = s.testData.ConvertRowsToStrings(tk.MustQuery("explain " + sql).Rows()) c.Assert(strings.Index(rows[0], "IndexJoin"), Equals, 0) } + +func (s *testSuite9) TestIssue20400(c *C) { + tk := testkit.NewTestKitWithInit(c, s.store) + tk.MustExec("drop table if exists t, s") + tk.MustExec("create table s(a int, index(a))") + tk.MustExec("create table t(a int)") + tk.MustExec("insert into t values(1)") + tk.MustQuery("select /*+ hash_join(t,s)*/ * from t left join s on t.a=s.a and t.a>1").Check( + testkit.Rows("1 ")) + tk.MustQuery("select /*+ inl_merge_join(t,s)*/ * from t left join s on t.a=s.a and t.a>1").Check( + testkit.Rows("1 ")) +} From 2f6219151967b23e461f98c0c9ed4197f1fed2bf Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Fri, 16 Oct 2020 16:47:20 +0800 Subject: [PATCH 042/229] *: add gc duration in metric profile (#20379) (#20480) Signed-off-by: ti-srebot --- executor/inspection_profile.go | 49 +++++++++++++++++++++++++++------- infoschema/metric_table_def.go | 12 ++++----- 2 files changed, 46 insertions(+), 15 deletions(-) diff --git a/executor/inspection_profile.go b/executor/inspection_profile.go index 1768519a70b70..36d78fdac96f8 100644 --- a/executor/inspection_profile.go +++ b/executor/inspection_profile.go @@ -310,11 +310,16 @@ func NewProfileBuilder(sctx sessionctx.Context, start, end time.Time, tp string) // Collect uses to collect the related metric information. func (pb *profileBuilder) Collect() error { - pb.buf.WriteString(fmt.Sprintf(`digraph "%s" {`, "tidb_profile")) - pb.buf.WriteByte('\n') - pb.buf.WriteString(`node [style=filled fillcolor="#f8f8f8"]`) - pb.buf.WriteByte('\n') - err := pb.addMetricTree(pb.genTiDBQueryTree(), "tidb_query") + tidbQuery := pb.genTiDBQueryTree() + err := pb.init(tidbQuery, "tidb_query") + if err != nil { + return err + } + err = pb.traversal(tidbQuery) + if err != nil { + return err + } + err = pb.traversal(pb.genTiDBGCTree()) if err != nil { return err } @@ -337,8 +342,8 @@ func (pb *profileBuilder) getNameID(name string) uint64 { return id } -func (pb *profileBuilder) addMetricTree(root *metricNode, name string) error { - if root == nil { +func (pb *profileBuilder) init(total *metricNode, name string) error { + if total == nil { return nil } tp := "total_time" @@ -348,9 +353,13 @@ func (pb *profileBuilder) addMetricTree(root *metricNode, name string) error { case metricValueCnt: tp = "total_count" } + pb.buf.WriteString(fmt.Sprintf(`digraph "%s" {`, "tidb_profile")) + pb.buf.WriteByte('\n') + pb.buf.WriteString(`node [style=filled fillcolor="#f8f8f8"]`) + pb.buf.WriteByte('\n') pb.buf.WriteString(fmt.Sprintf(`subgraph %[1]s { "%[1]s" [shape=box fontsize=16 label="Type: %[1]s\lTime: %s\lDuration: %s\l"] }`, name+"_"+tp, pb.start.String(), pb.end.Sub(pb.start).String())) pb.buf.WriteByte('\n') - v, err := pb.GetTotalValue(root) + v, err := pb.GetTotalValue(total) if err != nil { return err } @@ -359,7 +368,7 @@ func (pb *profileBuilder) addMetricTree(root *metricNode, name string) error { } else { pb.totalValue = 1 } - return pb.traversal(root) + return nil } func (pb *profileBuilder) GetTotalValue(root *metricNode) (float64, error) { @@ -609,6 +618,21 @@ func (pb *profileBuilder) dotColor(score float64, isBackground bool) string { return fmt.Sprintf("#%02x%02x%02x", uint8(r*255.0), uint8(g*255.0), uint8(b*255.0)) } +func (pb *profileBuilder) genTiDBGCTree() *metricNode { + tidbGC := &metricNode{ + table: "tidb_gc", + isPartOfParent: true, + label: []string{"stage"}, + children: []*metricNode{ + { + table: "tidb_kv_request", + isPartOfParent: true, + }, + }, + } + return tidbGC +} + func (pb *profileBuilder) genTiDBQueryTree() *metricNode { tidbKVRequest := &metricNode{ table: "tidb_kv_request", @@ -676,6 +700,10 @@ func (pb *profileBuilder) genTiDBQueryTree() *metricNode { }, }, }, + { + table: "tikv_gc_tasks", + label: []string{"task"}, + }, }, }, }, @@ -700,6 +728,9 @@ func (pb *profileBuilder) genTiDBQueryTree() *metricNode { { table: "tidb_owner_handle_syncer", }, + { + table: "tidb_meta_operation", + }, }, }, }, diff --git a/infoschema/metric_table_def.go b/infoschema/metric_table_def.go index 4e09f23bc40f5..a9df46bbded4e 100644 --- a/infoschema/metric_table_def.go +++ b/infoschema/metric_table_def.go @@ -605,8 +605,8 @@ var MetricTableMap = map[string]MetricTableDef{ }, "tidb_gc_duration": { Comment: "The quantile of kv storage garbage collection time durations", - PromQL: "histogram_quantile($QUANTILE, sum(rate(tidb_tikvclient_gc_seconds_bucket{$LABEL_CONDITIONS}[$RANGE_DURATION])) by (le,instance))", - Labels: []string{"instance"}, + PromQL: "histogram_quantile($QUANTILE, sum(rate(tidb_tikvclient_gc_seconds_bucket{$LABEL_CONDITIONS}[$RANGE_DURATION])) by (le,instance,stage))", + Labels: []string{"instance", "stage"}, Quantile: 0.95, }, "tidb_gc_config": { @@ -2522,13 +2522,13 @@ var MetricTableMap = map[string]MetricTableDef{ Comment: "The total time of kv storage range worker processing one task duration", }, "tidb_gc_total_count": { - PromQL: "sum(increase(tidb_tikvclient_gc_seconds_count{$LABEL_CONDITIONS}[$RANGE_DURATION])) by (instance)", - Labels: []string{"instance"}, + PromQL: "sum(increase(tidb_tikvclient_gc_seconds_count{$LABEL_CONDITIONS}[$RANGE_DURATION])) by (instance,stage)", + Labels: []string{"instance", "stage"}, Comment: "The total count of kv storage garbage collection", }, "tidb_gc_total_time": { - PromQL: "sum(increase(tidb_tikvclient_gc_seconds_sum{$LABEL_CONDITIONS}[$RANGE_DURATION])) by (instance)", - Labels: []string{"instance"}, + PromQL: "sum(increase(tidb_tikvclient_gc_seconds_sum{$LABEL_CONDITIONS}[$RANGE_DURATION])) by (instance,stage)", + Labels: []string{"instance", "stage"}, Comment: "The total time of kv storage garbage collection time durations", }, "tidb_get_token_total_count": { From 233d278bda86f58ed105172bd1002edec95317e0 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Mon, 19 Oct 2020 11:39:14 +0800 Subject: [PATCH 043/229] planner: fix the panic when the argument of agg func is scalarfunction in apply (#20485) (#20487) Signed-off-by: ti-srebot --- expression/integration_test.go | 2 ++ planner/core/rule_decorrelate.go | 19 ++++++++++++++----- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/expression/integration_test.go b/expression/integration_test.go index 18679b342a231..05d80f952e076 100755 --- a/expression/integration_test.go +++ b/expression/integration_test.go @@ -6987,6 +6987,8 @@ func (s *testIntegrationSuite) TestIssue19504(c *C) { tk.MustExec("insert into t2 values (1);") tk.MustQuery("select (select count(c_int) from t2 where c_int = t1.c_int) c1, (select count(1) from t2 where c_int = t1.c_int) c2 from t1;"). Check(testkit.Rows("1 1", "0 0", "0 0")) + tk.MustQuery("select (select count(c_int*c_int) from t2 where c_int = t1.c_int) c1, (select count(1) from t2 where c_int = t1.c_int) c2 from t1;"). + Check(testkit.Rows("1 1", "0 0", "0 0")) } func (s *testIntegrationSerialSuite) TestIssue19804(c *C) { diff --git a/planner/core/rule_decorrelate.go b/planner/core/rule_decorrelate.go index c92029d7f08e4..62e8a55f57612 100644 --- a/planner/core/rule_decorrelate.go +++ b/planner/core/rule_decorrelate.go @@ -179,12 +179,21 @@ func (s *decorrelateSolver) optimize(ctx context.Context, p LogicalPlan) (Logica resetNotNullFlag(apply.schema, outerPlan.Schema().Len(), apply.schema.Len()) for i, aggFunc := range agg.AggFuncs { - if idx := apply.schema.ColumnIndex(aggFunc.Args[0].(*expression.Column)); idx != -1 { - desc, err := aggregation.NewAggFuncDesc(agg.ctx, agg.AggFuncs[i].Name, []expression.Expression{apply.schema.Columns[idx]}, false) - if err != nil { - return nil, err + switch expr := aggFunc.Args[0].(type) { + case *expression.Column: + if idx := apply.schema.ColumnIndex(expr); idx != -1 { + desc, err := aggregation.NewAggFuncDesc(agg.ctx, agg.AggFuncs[i].Name, []expression.Expression{apply.schema.Columns[idx]}, false) + if err != nil { + return nil, err + } + newAggFuncs = append(newAggFuncs, desc) } - newAggFuncs = append(newAggFuncs, desc) + case *expression.ScalarFunction: + expr.RetType = expr.RetType.Clone() + expr.RetType.Flag &= ^mysql.NotNullFlag + newAggFuncs = append(newAggFuncs, aggFunc) + default: + newAggFuncs = append(newAggFuncs, aggFunc) } } agg.AggFuncs = newAggFuncs From cae843b7ff53325c3121a57a66fc0c4eeaa67b52 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Mon, 19 Oct 2020 14:25:44 +0800 Subject: [PATCH 044/229] executor: support new aggregate function APPROX_PERCENTILE (#19799) (#20197) Signed-off-by: ti-srebot --- executor/aggfuncs/aggfunc_test.go | 3 + executor/aggfuncs/aggfuncs.go | 5 + executor/aggfuncs/builder.go | 45 ++- executor/aggfuncs/func_percentile.go | 352 ++++++++++++++++++ executor/aggfuncs/func_percentile_test.go | 37 ++ expression/aggregation/aggregation.go | 5 +- expression/aggregation/base_func.go | 59 ++- expression/aggregation/descriptor.go | 2 +- .../testdata/integration_suite_in.json | 3 +- .../testdata/integration_suite_out.json | 13 + planner/core/integration_test.go | 26 ++ planner/core/rule_aggregation_push_down.go | 4 +- .../integration_serial_suite_out.json | 2 +- .../core/testdata/integration_suite_in.json | 16 +- .../core/testdata/integration_suite_out.json | 63 ++++ planner/core/testdata/plan_suite_out.json | 2 +- util/selection/selection.go | 164 ++++++++ util/selection/selection_test.go | 232 ++++++++++++ 18 files changed, 1013 insertions(+), 20 deletions(-) create mode 100644 executor/aggfuncs/func_percentile.go create mode 100644 executor/aggfuncs/func_percentile_test.go create mode 100644 util/selection/selection.go create mode 100644 util/selection/selection_test.go diff --git a/executor/aggfuncs/aggfunc_test.go b/executor/aggfuncs/aggfunc_test.go index 312ff9f7cad81..1f55a713db549 100644 --- a/executor/aggfuncs/aggfunc_test.go +++ b/executor/aggfuncs/aggfunc_test.go @@ -363,6 +363,9 @@ func (s *testSuite) testAggFunc(c *C, p aggTest) { if p.funcName == ast.AggFuncGroupConcat { args = append(args, &expression.Constant{Value: types.NewStringDatum(" "), RetType: types.NewFieldType(mysql.TypeString)}) } + if p.funcName == ast.AggFuncApproxPercentile { + args = append(args, &expression.Constant{Value: types.NewIntDatum(50), RetType: types.NewFieldType(mysql.TypeLong)}) + } desc, err := aggregation.NewAggFuncDesc(s.ctx, p.funcName, args, false) c.Assert(err, IsNil) if p.orderBy { diff --git a/executor/aggfuncs/aggfuncs.go b/executor/aggfuncs/aggfuncs.go index 52059ad1dc73f..7a4ad385f190c 100644 --- a/executor/aggfuncs/aggfuncs.go +++ b/executor/aggfuncs/aggfuncs.go @@ -45,6 +45,11 @@ var ( _ AggFunc = (*approxCountDistinctPartial2)(nil) _ AggFunc = (*approxCountDistinctFinal)(nil) + // All the AggFunc implementations for "APPROX_PERCENTILE" are listed here. + _ AggFunc = (*percentileOriginal4Int)(nil) + _ AggFunc = (*percentileOriginal4Real)(nil) + _ AggFunc = (*percentileOriginal4Decimal)(nil) + // All the AggFunc implementations for "FIRSTROW" are listed here. _ AggFunc = (*firstRow4Decimal)(nil) _ AggFunc = (*firstRow4Int)(nil) diff --git a/executor/aggfuncs/builder.go b/executor/aggfuncs/builder.go index 6ae26bafcec27..2b884ac3f00ed 100644 --- a/executor/aggfuncs/builder.go +++ b/executor/aggfuncs/builder.go @@ -25,6 +25,8 @@ import ( "github.com/pingcap/tidb/sessionctx/variable" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/chunk" + "github.com/pingcap/tidb/util/logutil" + "go.uber.org/zap" ) // Build is used to build a specific AggFunc implementation according to the @@ -53,12 +55,14 @@ func Build(ctx sessionctx.Context, aggFuncDesc *aggregation.AggFuncDesc, ordinal return buildBitAnd(aggFuncDesc, ordinal) case ast.AggFuncVarPop: return buildVarPop(aggFuncDesc, ordinal) + case ast.AggFuncStddevPop: + return buildStdDevPop(aggFuncDesc, ordinal) case ast.AggFuncJsonObjectAgg: return buildJSONObjectAgg(aggFuncDesc, ordinal) case ast.AggFuncApproxCountDistinct: return buildApproxCountDistinct(aggFuncDesc, ordinal) - case ast.AggFuncStddevPop: - return buildStdDevPop(aggFuncDesc, ordinal) + case ast.AggFuncApproxPercentile: + return buildApproxPercentile(ctx, aggFuncDesc, ordinal) case ast.AggFuncVarSamp: return buildVarSamp(aggFuncDesc, ordinal) case ast.AggFuncStddevSamp: @@ -130,6 +134,43 @@ func buildApproxCountDistinct(aggFuncDesc *aggregation.AggFuncDesc, ordinal int) return nil } +func buildApproxPercentile(sctx sessionctx.Context, aggFuncDesc *aggregation.AggFuncDesc, ordinal int) AggFunc { + if aggFuncDesc.Mode == aggregation.DedupMode { + return nil + } + + // Checked while building descriptor + percent, _, err := aggFuncDesc.Args[1].EvalInt(sctx, chunk.Row{}) + if err != nil { + // Should not reach here + logutil.BgLogger().Error("Error happened when buildApproxPercentile", zap.Error(err)) + return nil + } + + base := basePercentile{percent: int(percent), baseAggFunc: baseAggFunc{args: aggFuncDesc.Args, ordinal: ordinal}} + + switch aggFuncDesc.Mode { + case aggregation.CompleteMode, aggregation.Partial1Mode, aggregation.FinalMode: + switch aggFuncDesc.Args[0].GetType().EvalType() { + case types.ETInt: + return &percentileOriginal4Int{base} + case types.ETReal: + return &percentileOriginal4Real{base} + case types.ETDecimal: + return &percentileOriginal4Decimal{base} + case types.ETDatetime, types.ETTimestamp: + return &percentileOriginal4Time{base} + case types.ETDuration: + return &percentileOriginal4Duration{base} + default: + // Return NULL in any case + return &base + } + } + + return nil +} + // buildCount builds the AggFunc implementation for function "COUNT". func buildCount(aggFuncDesc *aggregation.AggFuncDesc, ordinal int) AggFunc { // If mode is DedupMode, we return nil for not implemented. diff --git a/executor/aggfuncs/func_percentile.go b/executor/aggfuncs/func_percentile.go new file mode 100644 index 0000000000000..84c9d877bff9f --- /dev/null +++ b/executor/aggfuncs/func_percentile.go @@ -0,0 +1,352 @@ +// Copyright 2020 PingCAP, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// See the License for the specific language governing permissions and +// limitations under the License. + +package aggfuncs + +import ( + "math" + "sort" + + "github.com/pingcap/tidb/sessionctx" + "github.com/pingcap/tidb/types" + "github.com/pingcap/tidb/util/chunk" + "github.com/pingcap/tidb/util/selection" +) + +var ( + _ partialResult4Percentile = partialResult4PercentileInt{} + _ partialResult4Percentile = partialResult4PercentileReal{} + _ partialResult4Percentile = partialResult4PercentileDecimal{} + _ partialResult4Percentile = partialResult4PercentileTime{} + _ partialResult4Percentile = partialResult4PercentileDuration{} +) + +func percentile(data sort.Interface, percent int) int { + // Ordinal rank k = Ceil(P / 100 * N) + k := int(math.Ceil(float64(data.Len()) / 100 * float64(percent))) + return selection.Select(data, k) +} + +type basePercentile struct { + percent int + + baseAggFunc +} + +func (e *basePercentile) AllocPartialResult() (pr PartialResult) { + return +} + +func (e *basePercentile) ResetPartialResult(pr PartialResult) { + return +} + +func (e *basePercentile) UpdatePartialResult(sctx sessionctx.Context, rowsInGroup []chunk.Row, pr PartialResult) (err error) { + return +} + +func (e *basePercentile) AppendFinalResult2Chunk(sctx sessionctx.Context, pr PartialResult, chk *chunk.Chunk) error { + chk.AppendNull(e.ordinal) + return nil +} + +type partialResult4Percentile interface { + sort.Interface +} + +type partialResult4PercentileInt []int64 + +func (p partialResult4PercentileInt) Len() int { return len(p) } +func (p partialResult4PercentileInt) Swap(i, j int) { p[i], p[j] = p[j], p[i] } +func (p partialResult4PercentileInt) Less(i, j int) bool { return p[i] < p[j] } + +type partialResult4PercentileReal []float64 + +func (p partialResult4PercentileReal) Len() int { return len(p) } +func (p partialResult4PercentileReal) Swap(i, j int) { p[i], p[j] = p[j], p[i] } +func (p partialResult4PercentileReal) Less(i, j int) bool { return p[i] < p[j] } + +// TODO: use []*types.MyDecimal to prevent massive value copy +type partialResult4PercentileDecimal []types.MyDecimal + +func (p partialResult4PercentileDecimal) Len() int { return len(p) } +func (p partialResult4PercentileDecimal) Swap(i, j int) { p[i], p[j] = p[j], p[i] } +func (p partialResult4PercentileDecimal) Less(i, j int) bool { return p[i].Compare(&p[j]) < 0 } + +type partialResult4PercentileTime []types.Time + +func (p partialResult4PercentileTime) Len() int { return len(p) } +func (p partialResult4PercentileTime) Swap(i, j int) { p[i], p[j] = p[j], p[i] } +func (p partialResult4PercentileTime) Less(i, j int) bool { return p[i].Compare(p[j]) < 0 } + +type partialResult4PercentileDuration []types.Duration + +func (p partialResult4PercentileDuration) Len() int { return len(p) } +func (p partialResult4PercentileDuration) Swap(i, j int) { p[i], p[j] = p[j], p[i] } +func (p partialResult4PercentileDuration) Less(i, j int) bool { return p[i].Compare(p[j]) < 0 } + +type percentileOriginal4Int struct { + basePercentile +} + +func (e *percentileOriginal4Int) AllocPartialResult() (pr PartialResult) { + // TODO: Preserve appropriate capacity for data + pr = PartialResult(&partialResult4PercentileInt{}) + return pr +} + +func (e *percentileOriginal4Int) ResetPartialResult(pr PartialResult) { + p := (*partialResult4PercentileInt)(pr) + *p = partialResult4PercentileInt{} +} + +func (e *percentileOriginal4Int) UpdatePartialResult(sctx sessionctx.Context, rowsInGroup []chunk.Row, pr PartialResult) (err error) { + p := (*partialResult4PercentileInt)(pr) + for _, row := range rowsInGroup { + v, isNull, err := e.args[0].EvalInt(sctx, row) + if err != nil { + return err + } + if isNull { + continue + } + *p = append(*p, v) + } + return nil +} + +func (e *percentileOriginal4Int) MergePartialResult(sctx sessionctx.Context, src, dst PartialResult) (err error) { + p1, p2 := (*partialResult4PercentileInt)(src), (*partialResult4PercentileInt)(dst) + mergeBuff := make([]int64, len(*p1)+len(*p2)) + copy(mergeBuff, *p2) + copy(mergeBuff[len(*p2):], *p1) + *p1 = nil + *p2 = mergeBuff + return nil +} + +func (e *percentileOriginal4Int) AppendFinalResult2Chunk(sctx sessionctx.Context, pr PartialResult, chk *chunk.Chunk) error { + p := (*partialResult4PercentileInt)(pr) + if len(*p) == 0 { + chk.AppendNull(e.ordinal) + return nil + } + index := percentile(p, e.percent) + chk.AppendInt64(e.ordinal, (*p)[index]) + return nil +} + +type percentileOriginal4Real struct { + basePercentile +} + +func (e *percentileOriginal4Real) AllocPartialResult() (pr PartialResult) { + // TODO: Preserve appropriate capacity for data + pr = PartialResult(&partialResult4PercentileReal{}) + return pr +} + +func (e *percentileOriginal4Real) ResetPartialResult(pr PartialResult) { + p := (*partialResult4PercentileReal)(pr) + *p = partialResult4PercentileReal{} +} + +func (e *percentileOriginal4Real) UpdatePartialResult(sctx sessionctx.Context, rowsInGroup []chunk.Row, pr PartialResult) (err error) { + p := (*partialResult4PercentileReal)(pr) + for _, row := range rowsInGroup { + v, isNull, err := e.args[0].EvalReal(sctx, row) + if err != nil { + return err + } + if isNull { + continue + } + *p = append(*p, v) + } + return nil +} + +func (e *percentileOriginal4Real) MergePartialResult(sctx sessionctx.Context, src, dst PartialResult) (err error) { + p1, p2 := (*partialResult4PercentileReal)(src), (*partialResult4PercentileReal)(dst) + mergeBuff := make([]float64, len(*p1)+len(*p2)) + copy(mergeBuff, *p2) + copy(mergeBuff[len(*p2):], *p1) + *p1 = nil + *p2 = mergeBuff + return nil +} + +func (e *percentileOriginal4Real) AppendFinalResult2Chunk(sctx sessionctx.Context, pr PartialResult, chk *chunk.Chunk) error { + p := (*partialResult4PercentileReal)(pr) + if len(*p) == 0 { + chk.AppendNull(e.ordinal) + return nil + } + index := percentile(*p, e.percent) + chk.AppendFloat64(e.ordinal, (*p)[index]) + return nil +} + +type percentileOriginal4Decimal struct { + basePercentile +} + +func (e *percentileOriginal4Decimal) AllocPartialResult() (pr PartialResult) { + // TODO: Preserve appropriate capacity for data + pr = PartialResult(&partialResult4PercentileDecimal{}) + return pr +} + +func (e *percentileOriginal4Decimal) ResetPartialResult(pr PartialResult) { + p := (*partialResult4PercentileDecimal)(pr) + *p = partialResult4PercentileDecimal{} +} + +func (e *percentileOriginal4Decimal) UpdatePartialResult(sctx sessionctx.Context, rowsInGroup []chunk.Row, pr PartialResult) (err error) { + p := (*partialResult4PercentileDecimal)(pr) + for _, row := range rowsInGroup { + v, isNull, err := e.args[0].EvalDecimal(sctx, row) + if err != nil { + return err + } + if isNull { + continue + } + *p = append(*p, *v) + } + return nil +} + +func (e *percentileOriginal4Decimal) MergePartialResult(sctx sessionctx.Context, src, dst PartialResult) (err error) { + p1, p2 := (*partialResult4PercentileDecimal)(src), (*partialResult4PercentileDecimal)(dst) + mergeBuff := make([]types.MyDecimal, len(*p1)+len(*p2)) + copy(mergeBuff, *p2) + copy(mergeBuff[len(*p2):], *p1) + *p1 = nil + *p2 = mergeBuff + return nil +} + +func (e *percentileOriginal4Decimal) AppendFinalResult2Chunk(sctx sessionctx.Context, pr PartialResult, chk *chunk.Chunk) error { + p := (*partialResult4PercentileDecimal)(pr) + if len(*p) == 0 { + chk.AppendNull(e.ordinal) + return nil + } + index := percentile(*p, e.percent) + chk.AppendMyDecimal(e.ordinal, &(*p)[index]) + return nil +} + +type percentileOriginal4Time struct { + basePercentile +} + +func (e *percentileOriginal4Time) AllocPartialResult() (pr PartialResult) { + // TODO: Preserve appropriate capacity for data + pr = PartialResult(&partialResult4PercentileTime{}) + return pr +} + +func (e *percentileOriginal4Time) ResetPartialResult(pr PartialResult) { + p := (*partialResult4PercentileTime)(pr) + *p = partialResult4PercentileTime{} +} + +func (e *percentileOriginal4Time) UpdatePartialResult(sctx sessionctx.Context, rowsInGroup []chunk.Row, pr PartialResult) (err error) { + p := (*partialResult4PercentileTime)(pr) + for _, row := range rowsInGroup { + v, isNull, err := e.args[0].EvalTime(sctx, row) + if err != nil { + return err + } + if isNull { + continue + } + *p = append(*p, v) + } + return nil +} + +func (e *percentileOriginal4Time) MergePartialResult(sctx sessionctx.Context, src, dst PartialResult) (err error) { + p1, p2 := (*partialResult4PercentileTime)(src), (*partialResult4PercentileTime)(dst) + mergeBuff := make(partialResult4PercentileTime, len(*p1)+len(*p2)) + copy(mergeBuff, *p2) + copy(mergeBuff[len(*p2):], *p1) + *p1 = nil + *p2 = mergeBuff + return nil +} + +func (e *percentileOriginal4Time) AppendFinalResult2Chunk(sctx sessionctx.Context, pr PartialResult, chk *chunk.Chunk) error { + p := (*partialResult4PercentileTime)(pr) + if len(*p) == 0 { + chk.AppendNull(e.ordinal) + return nil + } + index := percentile(p, e.percent) + chk.AppendTime(e.ordinal, (*p)[index]) + return nil +} + +type percentileOriginal4Duration struct { + basePercentile +} + +func (e *percentileOriginal4Duration) AllocPartialResult() (pr PartialResult) { + // TODO: Preserve appropriate capacity for data + pr = PartialResult(&partialResult4PercentileTime{}) + return pr +} + +func (e *percentileOriginal4Duration) ResetPartialResult(pr PartialResult) { + p := (*partialResult4PercentileDuration)(pr) + *p = partialResult4PercentileDuration{} +} + +func (e *percentileOriginal4Duration) UpdatePartialResult(sctx sessionctx.Context, rowsInGroup []chunk.Row, pr PartialResult) (err error) { + p := (*partialResult4PercentileDuration)(pr) + for _, row := range rowsInGroup { + v, isNull, err := e.args[0].EvalDuration(sctx, row) + if err != nil { + return err + } + if isNull { + continue + } + *p = append(*p, v) + } + return nil +} + +func (e *percentileOriginal4Duration) MergePartialResult(sctx sessionctx.Context, src, dst PartialResult) (err error) { + p1, p2 := (*partialResult4PercentileDuration)(src), (*partialResult4PercentileDuration)(dst) + mergeBuff := make(partialResult4PercentileDuration, len(*p1)+len(*p2)) + copy(mergeBuff, *p2) + copy(mergeBuff[len(*p2):], *p1) + *p1 = nil + *p2 = mergeBuff + return nil +} + +func (e *percentileOriginal4Duration) AppendFinalResult2Chunk(sctx sessionctx.Context, pr PartialResult, chk *chunk.Chunk) error { + p := (*partialResult4PercentileDuration)(pr) + if len(*p) == 0 { + chk.AppendNull(e.ordinal) + return nil + } + index := percentile(*p, e.percent) + + chk.AppendDuration(e.ordinal, (*p)[index]) + return nil +} diff --git a/executor/aggfuncs/func_percentile_test.go b/executor/aggfuncs/func_percentile_test.go new file mode 100644 index 0000000000000..d9c720685502f --- /dev/null +++ b/executor/aggfuncs/func_percentile_test.go @@ -0,0 +1,37 @@ +// Copyright 2020 PingCAP, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// See the License for the specific language governing permissions and +// limitations under the License. + +package aggfuncs_test + +import ( + "time" + + . "github.com/pingcap/check" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/mysql" + "github.com/pingcap/tidb/types" +) + +func (s *testSuite) TestPercentile(c *C) { + tests := []aggTest{ + buildAggTester(ast.AggFuncApproxPercentile, mysql.TypeLonglong, 5, nil, 2), + buildAggTester(ast.AggFuncApproxPercentile, mysql.TypeFloat, 5, nil, 2.0), + buildAggTester(ast.AggFuncApproxPercentile, mysql.TypeDouble, 5, nil, 2.0), + buildAggTester(ast.AggFuncApproxPercentile, mysql.TypeNewDecimal, 5, nil, types.NewDecFromFloatForTest(2.0)), + buildAggTester(ast.AggFuncApproxPercentile, mysql.TypeDate, 5, nil, types.TimeFromDays(367)), + buildAggTester(ast.AggFuncApproxPercentile, mysql.TypeDuration, 5, nil, types.Duration{Duration: time.Duration(2)}), + } + for _, test := range tests { + s.testAggFunc(c, test) + } +} diff --git a/expression/aggregation/aggregation.go b/expression/aggregation/aggregation.go index b76233af80e73..39ae1190dcb94 100644 --- a/expression/aggregation/aggregation.go +++ b/expression/aggregation/aggregation.go @@ -172,7 +172,7 @@ func NeedCount(name string) bool { func NeedValue(name string) bool { switch name { case ast.AggFuncSum, ast.AggFuncAvg, ast.AggFuncFirstRow, ast.AggFuncMax, ast.AggFuncMin, - ast.AggFuncGroupConcat, ast.AggFuncBitOr, ast.AggFuncBitAnd, ast.AggFuncBitXor: + ast.AggFuncGroupConcat, ast.AggFuncBitOr, ast.AggFuncBitAnd, ast.AggFuncBitXor, ast.AggFuncApproxPercentile: return true default: return false @@ -194,6 +194,9 @@ func CheckAggPushDown(aggFunc *AggFuncDesc, storeType kv.StoreType) bool { if len(aggFunc.OrderByItems) > 0 { return false } + if aggFunc.Name == ast.AggFuncApproxPercentile { + return false + } ret := true switch storeType { case kv.TiFlash: diff --git a/expression/aggregation/base_func.go b/expression/aggregation/base_func.go index 031f924ba9bf4..c6cd1d9034a11 100644 --- a/expression/aggregation/base_func.go +++ b/expression/aggregation/base_func.go @@ -15,6 +15,7 @@ package aggregation import ( "bytes" + "fmt" "math" "strings" @@ -26,6 +27,7 @@ import ( "github.com/pingcap/tidb/expression" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/types" + "github.com/pingcap/tidb/util/chunk" ) // baseFuncDesc describes an function signature, only used in planner. @@ -88,6 +90,8 @@ func (a *baseFuncDesc) typeInfer(ctx sessionctx.Context) error { a.typeInfer4Count(ctx) case ast.AggFuncApproxCountDistinct: a.typeInfer4ApproxCountDistinct(ctx) + case ast.AggFuncApproxPercentile: + return a.typeInfer4ApproxPercentile(ctx) case ast.AggFuncSum: a.typeInfer4Sum(ctx) case ast.AggFuncAvg: @@ -130,6 +134,45 @@ func (a *baseFuncDesc) typeInfer4ApproxCountDistinct(ctx sessionctx.Context) { a.typeInfer4Count(ctx) } +func (a *baseFuncDesc) typeInfer4ApproxPercentile(ctx sessionctx.Context) error { + if len(a.Args) != 2 { + return errors.New("APPROX_PERCENTILE should take 2 arguments") + } + + if !a.Args[1].ConstItem(ctx.GetSessionVars().StmtCtx) { + return errors.New("APPROX_PERCENTILE should take a constant expression as percentage argument") + } + percent, isNull, err := a.Args[1].EvalInt(ctx, chunk.Row{}) + if err != nil { + return errors.New(fmt.Sprintf("APPROX_PERCENTILE: Invalid argument %s", a.Args[1].String())) + } + if percent <= 0 || percent > 100 || isNull { + if isNull { + return errors.New("APPROX_PERCENTILE: Percentage value cannot be NULL") + } + return errors.New(fmt.Sprintf("Percentage value %d is out of range [1, 100]", percent)) + } + + switch a.Args[0].GetType().Tp { + case mysql.TypeTiny, mysql.TypeShort, mysql.TypeInt24, mysql.TypeLong, mysql.TypeLonglong: + a.RetTp = types.NewFieldType(mysql.TypeLonglong) + case mysql.TypeDouble, mysql.TypeFloat: + a.RetTp = types.NewFieldType(mysql.TypeDouble) + case mysql.TypeNewDecimal: + a.RetTp = types.NewFieldType(mysql.TypeNewDecimal) + a.RetTp.Flen, a.RetTp.Decimal = mysql.MaxDecimalWidth, a.Args[0].GetType().Decimal + if a.RetTp.Decimal < 0 || a.RetTp.Decimal > mysql.MaxDecimalScale { + a.RetTp.Decimal = mysql.MaxDecimalScale + } + case mysql.TypeDate, mysql.TypeDatetime, mysql.TypeNewDate, mysql.TypeTimestamp: + a.RetTp = a.Args[0].GetType().Clone() + default: + a.RetTp = a.Args[0].GetType().Clone() + a.RetTp.Flag &= ^mysql.NotNullFlag + } + return nil +} + // typeInfer4Sum should returns a "decimal", otherwise it returns a "double". // Because child returns integer or decimal type. func (a *baseFuncDesc) typeInfer4Sum(ctx sessionctx.Context) { @@ -267,13 +310,12 @@ func (a *baseFuncDesc) typeInfer4PopOrSamp(ctx sessionctx.Context) { // | t | a | int(11) | // +-------+---------+---------+ // -// Query: `select avg(a), sum(a), count(a), bit_xor(a), bit_or(a), bit_and(a), max(a), min(a), group_concat(a), approx_count_distinct(a) from test.t;` -//+--------+--------+----------+------------+-----------+----------------------+--------+--------+-----------------+--------------------------+ -//| avg(a) | sum(a) | count(a) | bit_xor(a) | bit_or(a) | bit_and(a) | max(a) | min(a) | group_concat(a) | approx_count_distinct(a) | -//+--------+--------+----------+------------+-----------+----------------------+--------+--------+-----------------+--------------------------+ -//| NULL | NULL | 0 | 0 | 0 | 18446744073709551615 | NULL | NULL | NULL | 0 | -//+--------+--------+----------+------------+-----------+----------------------+--------+--------+-----------------+--------------------------+ - +// Query: `select avg(a), sum(a), count(a), bit_xor(a), bit_or(a), bit_and(a), max(a), min(a), group_concat(a), approx_count_distinct(a), approx_percentile(a, 50) from test.t;` +// +--------+--------+----------+------------+-----------+----------------------+--------+--------+-----------------+--------------------------+--------------------------+ +// | avg(a) | sum(a) | count(a) | bit_xor(a) | bit_or(a) | bit_and(a) | max(a) | min(a) | group_concat(a) | approx_count_distinct(a) | approx_percentile(a, 50) | +// +--------+--------+----------+------------+-----------+----------------------+--------+--------+-----------------+--------------------------+--------------------------+ +// | NULL | NULL | 0 | 0 | 0 | 18446744073709551615 | NULL | NULL | NULL | 0 | NULL | +// +--------+--------+----------+------------+-----------+----------------------+--------+--------+-----------------+--------------------------+--------------------------+ func (a *baseFuncDesc) GetDefaultValue() (v types.Datum) { switch a.Name { case ast.AggFuncCount, ast.AggFuncBitOr, ast.AggFuncBitXor: @@ -283,7 +325,7 @@ func (a *baseFuncDesc) GetDefaultValue() (v types.Datum) { v = types.NewIntDatum(0) } case ast.AggFuncFirstRow, ast.AggFuncAvg, ast.AggFuncSum, ast.AggFuncMax, - ast.AggFuncMin, ast.AggFuncGroupConcat: + ast.AggFuncMin, ast.AggFuncGroupConcat, ast.AggFuncApproxPercentile: v = types.Datum{} case ast.AggFuncBitAnd: v = types.NewUintDatum(uint64(math.MaxUint64)) @@ -296,6 +338,7 @@ func (a *baseFuncDesc) GetDefaultValue() (v types.Datum) { var noNeedCastAggFuncs = map[string]struct{}{ ast.AggFuncCount: {}, ast.AggFuncApproxCountDistinct: {}, + ast.AggFuncApproxPercentile: {}, ast.AggFuncMax: {}, ast.AggFuncMin: {}, ast.AggFuncFirstRow: {}, diff --git a/expression/aggregation/descriptor.go b/expression/aggregation/descriptor.go index 97471cdcb8774..0c08c48f03961 100644 --- a/expression/aggregation/descriptor.go +++ b/expression/aggregation/descriptor.go @@ -137,7 +137,7 @@ func (a *AggFuncDesc) Split(ordinal []int) (partialAggDesc, finalAggDesc *AggFun RetType: a.RetTp, }) finalAggDesc.Args = args - if finalAggDesc.Name == ast.AggFuncGroupConcat { + if finalAggDesc.Name == ast.AggFuncGroupConcat || finalAggDesc.Name == ast.AggFuncApproxPercentile { finalAggDesc.Args = append(finalAggDesc.Args, a.Args[len(a.Args)-1]) // separator } } diff --git a/planner/cascades/testdata/integration_suite_in.json b/planner/cascades/testdata/integration_suite_in.json index c95409facdbb9..f04a4891c00d3 100644 --- a/planner/cascades/testdata/integration_suite_in.json +++ b/planner/cascades/testdata/integration_suite_in.json @@ -45,7 +45,8 @@ "select count(case when a <= 0 or a > 1000 then null else b end) from t", "select count(distinct case when a > 0 and a <= 1000 then b end) from t", "select approx_count_distinct(case when a > 0 and a <= 1000 then b end) from t", - "select count(b), sum(b), avg(b), b, max(b), min(b), bit_and(b), bit_or(b), bit_xor(b) from t group by a having sum(b) >= 0 and count(b) >= 0 order by b" + "select count(b), sum(b), avg(b), b, max(b), min(b), bit_and(b), bit_or(b), bit_xor(b) from t group by a having sum(b) >= 0 and count(b) >= 0 order by b", + "select approx_percentile(a, 50) from t order by b" ] }, { diff --git a/planner/cascades/testdata/integration_suite_out.json b/planner/cascades/testdata/integration_suite_out.json index f8953319f1053..c3df6622d4dcb 100644 --- a/planner/cascades/testdata/integration_suite_out.json +++ b/planner/cascades/testdata/integration_suite_out.json @@ -462,6 +462,19 @@ "1 33 33.0000 33 33 33 33 33 33", "1 44 44.0000 44 44 44 44 44 44" ] + }, + { + "SQL": "select approx_percentile(a, 50) from t order by b", + "Plan": [ + "Projection_8 1.00 root Column#3", + "└─Sort_14 1.00 root test.t.b:asc", + " └─HashAgg_11 1.00 root funcs:approx_percentile(test.t.a, 50)->Column#3, funcs:firstrow(test.t.b)->test.t.b", + " └─TableReader_12 10000.00 root data:TableFullScan_13", + " └─TableFullScan_13 10000.00 cop[tikv] table:t keep order:false, stats:pseudo" + ], + "Result": [ + "2" + ] } ] }, diff --git a/planner/core/integration_test.go b/planner/core/integration_test.go index 98205722cb77a..a515e196c9ac1 100644 --- a/planner/core/integration_test.go +++ b/planner/core/integration_test.go @@ -919,6 +919,32 @@ func (s *testIntegrationSuite) TestApproxCountDistinctInPartitionTable(c *C) { tk.MustQuery("select approx_count_distinct(a), b from t group by b order by b desc").Check(testkit.Rows("1 2", "3 1")) } +func (s *testIntegrationSuite) TestApproxPercentile(c *C) { + tk := testkit.NewTestKit(c, s.store) + + tk.MustExec("use test") + tk.MustExec("drop table if exists t") + tk.MustExec("create table t(a int, b int)") + tk.MustExec("insert into t values(1, 1), (2, 1), (3, 2), (4, 2), (5, 2)") + + var input []string + var output []struct { + SQL string + Plan []string + Res []string + } + s.testData.GetTestCases(c, &input, &output) + for i, tt := range input { + s.testData.OnRecord(func() { + output[i].SQL = tt + output[i].Plan = s.testData.ConvertRowsToStrings(tk.MustQuery("explain " + tt).Rows()) + output[i].Res = s.testData.ConvertRowsToStrings(tk.MustQuery(tt).Rows()) + }) + tk.MustQuery("explain " + tt).Check(testkit.Rows(output[i].Plan...)) + tk.MustQuery(tt).Check(testkit.Rows(output[i].Res...)) + } +} + func (s *testIntegrationSuite) TestIssue17813(c *C) { tk := testkit.NewTestKit(c, s.store) diff --git a/planner/core/rule_aggregation_push_down.go b/planner/core/rule_aggregation_push_down.go index 8ad7162e50879..0c796e4b0c3f4 100644 --- a/planner/core/rule_aggregation_push_down.go +++ b/planner/core/rule_aggregation_push_down.go @@ -38,7 +38,7 @@ func (a *aggregationPushDownSolver) isDecomposableWithJoin(fun *aggregation.AggF return false } switch fun.Name { - case ast.AggFuncAvg, ast.AggFuncGroupConcat, ast.AggFuncVarPop, ast.AggFuncJsonObjectAgg, ast.AggFuncStddevPop, ast.AggFuncVarSamp, ast.AggFuncStddevSamp: + case ast.AggFuncAvg, ast.AggFuncGroupConcat, ast.AggFuncVarPop, ast.AggFuncJsonObjectAgg, ast.AggFuncStddevPop, ast.AggFuncVarSamp, ast.AggFuncStddevSamp, ast.AggFuncApproxPercentile: // TODO: Support avg push down. return false case ast.AggFuncMax, ast.AggFuncMin, ast.AggFuncFirstRow: @@ -55,7 +55,7 @@ func (a *aggregationPushDownSolver) isDecomposableWithUnion(fun *aggregation.Agg return false } switch fun.Name { - case ast.AggFuncGroupConcat, ast.AggFuncVarPop, ast.AggFuncJsonObjectAgg: + case ast.AggFuncGroupConcat, ast.AggFuncVarPop, ast.AggFuncJsonObjectAgg, ast.AggFuncApproxPercentile: return false case ast.AggFuncMax, ast.AggFuncMin, ast.AggFuncFirstRow: return true diff --git a/planner/core/testdata/integration_serial_suite_out.json b/planner/core/testdata/integration_serial_suite_out.json index ac4991bbee3e3..650b6db4a0a80 100644 --- a/planner/core/testdata/integration_serial_suite_out.json +++ b/planner/core/testdata/integration_serial_suite_out.json @@ -50,7 +50,7 @@ "StreamAgg_32 1.00 root funcs:count(Column#14)->Column#11", "└─TableReader_33 1.00 root data:StreamAgg_13", " └─StreamAgg_13 1.00 cop[tiflash] funcs:count(1)->Column#14", - " └─BroadcastJoin_31 8.00 cop[tiflash] inner join, left key:test.fact_t.d1_k, right key:test.d1_t.d1_k", + " └─BroadcastJoin_31 8.00 cop[tiflash] inner join, left key:test.fact_t.d1_k, right key:test.d1_t.d1_k", " ├─Selection_23(Build) 2.00 cop[tiflash] not(isnull(test.d1_t.d1_k))", " │ └─TableFullScan_22 2.00 cop[tiflash] table:d1_t keep order:false, global read", " └─Selection_21(Probe) 8.00 cop[tiflash] not(isnull(test.fact_t.d1_k))", diff --git a/planner/core/testdata/integration_suite_in.json b/planner/core/testdata/integration_suite_in.json index 037ed9f87fe0a..b9a0be1ad4cb8 100644 --- a/planner/core/testdata/integration_suite_in.json +++ b/planner/core/testdata/integration_suite_in.json @@ -38,9 +38,9 @@ // Row count of IndexScan should be 2. "explain select /*+ TIDB_INLJ(t2) */ * from t1 join t2 on t1.a = t2.a and t1.c = t2.c", // Row count of IndexScan should be 2. - "explain select /*+ TIDB_INLJ(t2) */ * from t1 join t2 on t1.a = t2.a and t1.c <= t2.b", + "explain select /*+ TIDB_INLJ(t2) */ * from t1 join t2 on t1.a = t2.a and t1.c <= t2.b", // Row count of IndexScan should be 1. - "explain select /*+ TIDB_INLJ(t2) */ * from t1 join t2 on t1.a = t2.a and t2.b = 1" + "explain select /*+ TIDB_INLJ(t2) */ * from t1 join t2 on t1.a = t2.a and t2.b = 1" ] }, { @@ -151,5 +151,15 @@ "select /*+ use_index(t partition(p0) b) */ * from t partition(p0, p1)", "select /*+ read_from_storage(tikv[t partition(p0)], tiflash[t partition(p1, p2)]) */ * from t" ] + }, + { + "name": "TestApproxPercentile", + "cases": [ + "select approx_percentile(a, 50) from t", + "select approx_percentile(a, 10) from t", + "select approx_percentile(a, 10+70) from t", + "select approx_percentile(a, 10*10) from t", + "select approx_percentile(a, 50) from t group by b order by b" + ] } -] +] \ No newline at end of file diff --git a/planner/core/testdata/integration_suite_out.json b/planner/core/testdata/integration_suite_out.json index baaad2085969d..bf0ddbda54995 100644 --- a/planner/core/testdata/integration_suite_out.json +++ b/planner/core/testdata/integration_suite_out.json @@ -797,5 +797,68 @@ "Warn": null } ] + }, + { + "Name": "TestApproxPercentile", + "Cases": [ + { + "SQL": "select approx_percentile(a, 50) from t", + "Plan": [ + "HashAgg_5 1.00 root funcs:approx_percentile(test.t.a, 50)->Column#4", + "└─TableReader_11 10000.00 root data:TableFullScan_10", + " └─TableFullScan_10 10000.00 cop[tikv] table:t keep order:false, stats:pseudo" + ], + "Res": [ + "3" + ] + }, + { + "SQL": "select approx_percentile(a, 10) from t", + "Plan": [ + "HashAgg_5 1.00 root funcs:approx_percentile(test.t.a, 10)->Column#4", + "└─TableReader_11 10000.00 root data:TableFullScan_10", + " └─TableFullScan_10 10000.00 cop[tikv] table:t keep order:false, stats:pseudo" + ], + "Res": [ + "1" + ] + }, + { + "SQL": "select approx_percentile(a, 10+70) from t", + "Plan": [ + "HashAgg_5 1.00 root funcs:approx_percentile(test.t.a, 80)->Column#4", + "└─TableReader_11 10000.00 root data:TableFullScan_10", + " └─TableFullScan_10 10000.00 cop[tikv] table:t keep order:false, stats:pseudo" + ], + "Res": [ + "4" + ] + }, + { + "SQL": "select approx_percentile(a, 10*10) from t", + "Plan": [ + "HashAgg_5 1.00 root funcs:approx_percentile(test.t.a, 100)->Column#4", + "└─TableReader_11 10000.00 root data:TableFullScan_10", + " └─TableFullScan_10 10000.00 cop[tikv] table:t keep order:false, stats:pseudo" + ], + "Res": [ + "5" + ] + }, + { + "SQL": "select approx_percentile(a, 50) from t group by b order by b", + "Plan": [ + "Projection_6 8000.00 root Column#4", + "└─Sort_7 8000.00 root test.t.b:asc", + " └─HashAgg_9 8000.00 root group by:test.t.b, funcs:approx_percentile(test.t.a, 50)->Column#4, funcs:firstrow(test.t.b)->test.t.b", + " └─TableReader_13 10000.00 root data:TableFullScan_12", + " └─TableFullScan_12 10000.00 cop[tikv] table:t keep order:false, stats:pseudo" + ], + "Res": [ + "1", + "4" + ] + } + ] } ] diff --git a/planner/core/testdata/plan_suite_out.json b/planner/core/testdata/plan_suite_out.json index e7c44c72eb788..0c11eb897a9fa 100644 --- a/planner/core/testdata/plan_suite_out.json +++ b/planner/core/testdata/plan_suite_out.json @@ -2127,4 +2127,4 @@ } ] } -] +] \ No newline at end of file diff --git a/util/selection/selection.go b/util/selection/selection.go new file mode 100644 index 0000000000000..4b95939e9d93f --- /dev/null +++ b/util/selection/selection.go @@ -0,0 +1,164 @@ +// Copyright 2020 PingCAP, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// See the License for the specific language governing permissions and +// limitations under the License. + +package selection + +import ( + "math/rand" + "sort" +) + +// Interface is alias of sort.Interface +type Interface = sort.Interface + +// Select performs introselect algorithm on data and return index of the k-th smallest value. +func Select(data Interface, k int) int { + if data.Len() > 0 { + return introselect(data, 0, data.Len()-1, k-1, 6) + } + return -1 +} + +// introselect will perform quickselect at beginning, and switch to linear-time algorithm if it recurses too much times. +// Source paper: http://www.cs.rpi.edu/~musser/gp/introsort.ps +func introselect(data Interface, left, right, k int, depth int) int { + if left == right { + return left + } + if depth <= 0 { + // Use median of medians algorithm(linear-time selection) when recurses too much times. + return medianOfMedians(data, left, right, k) + } + // TODO: use a better pivot function + pivotIndex := randomPivot(data, left, right) + pivotIndex = partition(data, left, right, pivotIndex) + if k == pivotIndex { + return k + } else if k < pivotIndex { + return introselect(data, left, pivotIndex-1, k, depth-1) + } else { + return introselect(data, pivotIndex+1, right, k, depth-1) + } +} + +func quickselect(data Interface, left, right, k int) int { + if left == right { + return left + } + pivotIndex := randomPivot(data, left, right) + pivotIndex = partition(data, left, right, pivotIndex) + if k == pivotIndex { + return k + } else if k < pivotIndex { + return quickselect(data, left, pivotIndex-1, k) + } else { + return quickselect(data, pivotIndex+1, right, k) + } +} + +func medianOfMedians(data Interface, left, right, k int) int { + if left == right { + return left + } + pivotIndex := medianOfMediansPivot(data, left, right) + pivotIndex = partitionIntro(data, left, right, pivotIndex, k) + if k == pivotIndex { + return k + } else if k < pivotIndex { + return medianOfMedians(data, left, pivotIndex-1, k) + } else { + return medianOfMedians(data, pivotIndex+1, right, k) + } +} + +type pivotFunc func(Interface, int, int) int + +func medianOf3Pivot(data Interface, left, right int) int { + return (left + right) >> 1 +} + +func randomPivot(data Interface, left, right int) int { + return left + (rand.Int() % (right - left + 1)) +} + +func medianOfMediansPivot(data Interface, left, right int) int { + if right-left < 5 { + return partition5(data, left, right) + } + for i := left; i <= right; i += 5 { + subRight := i + 4 + if subRight > right { + subRight = right + } + median5 := partition5(data, i, subRight) + data.Swap(median5, left+(i-left)/5) + } + mid := (right-left)/10 + left + 1 + return medianOfMedians(data, left, left+(right-left)/5, mid) +} + +func partition(data Interface, left, right, pivotIndex int) int { + data.Swap(pivotIndex, right) + storeIndex := left + for i := left; i < right; i++ { + if data.Less(i, right) { + data.Swap(storeIndex, i) + storeIndex++ + } + } + data.Swap(right, storeIndex) + return storeIndex +} + +func partitionIntro(data Interface, left, right, pivotIndex int, k int) int { + data.Swap(pivotIndex, right) + storeIndex := left + // Move all elements smaller than pivot to left side + for i := left; i < right; i++ { + if data.Less(i, right) { + data.Swap(storeIndex, i) + storeIndex++ + } + } + storeIndexEq := storeIndex + // Move all elements equal to pivot right after + for i := storeIndex; i < right; i++ { + // data[i] == data[right] + if !data.Less(i, right) && !data.Less(right, i) { + data.Swap(storeIndexEq, i) + storeIndexEq++ + } + } + // Move pivot to final place + data.Swap(right, storeIndexEq) + if k < storeIndex { + return storeIndex + } + if k <= storeIndexEq { + return k + } + return storeIndexEq +} + +func partition5(data Interface, left, right int) int { + i := left + 1 + for i <= right { + j := i + for j > left && data.Less(j, j-1) { + data.Swap(j, j-1) + j = j - 1 + } + i++ + } + return (left + right) / 2 +} diff --git a/util/selection/selection_test.go b/util/selection/selection_test.go new file mode 100644 index 0000000000000..7715af1fb421f --- /dev/null +++ b/util/selection/selection_test.go @@ -0,0 +1,232 @@ +// Copyright 2020 PingCAP, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// See the License for the specific language governing permissions and +// limitations under the License. + +package selection + +import ( + "math/rand" + "sort" + "testing" + "time" + + . "github.com/pingcap/check" +) + +type testSuite struct{} + +var _ = Suite(&testSuite{}) + +func TestT(t *testing.T) { + CustomVerboseFlag = true + *CustomParallelSuiteFlag = true + TestingT(t) +} + +type testSlice []int + +func (a testSlice) Len() int { return len(a) } +func (a testSlice) Swap(i, j int) { a[i], a[j] = a[j], a[i] } +func (a testSlice) Less(i, j int) bool { return a[i] < a[j] } + +var ( + globalCase10000000 testSlice + globalCase1000000 testSlice + globalCase100000 testSlice + globalCase10000 testSlice + globalCase1000 testSlice + globalCase100 testSlice + globalCase50 testSlice +) + +func init() { + globalCase10000000 = randomTestCase(10000000) + globalCase1000000 = randomTestCase(1000000) + globalCase100000 = randomTestCase(100000) + globalCase10000 = randomTestCase(10000) + globalCase1000 = randomTestCase(1000) + globalCase100 = randomTestCase(100) + globalCase50 = randomTestCase(50) +} + +func (s *testSuite) TestSelection(c *C) { + data := testSlice{1, 2, 3, 4, 5} + index := Select(data, 3) + c.Assert(data[index], Equals, 3) +} + +func (s *testSuite) TestSelectionWithDuplicate(c *C) { + data := testSlice{1, 2, 3, 3, 5} + index := Select(data, 3) + c.Assert(data[index], Equals, 3) + index = Select(data, 5) + c.Assert(data[index], Equals, 5) +} + +func (s *testSuite) TestSelectionWithRandomCase(c *C) { + data := randomTestCase(1000000) + index := Select(data, 500000) + actual := data[index] + sort.Stable(data) + expected := data[499999] + c.Assert(actual, Equals, expected) +} + +func (s *testSuite) TestSelectionWithSerialCase(c *C) { + data := serialTestCase(1000000) + sort.Sort(sort.Reverse(data)) + index := Select(data, 500000) + actual := data[index] + sort.Stable(data) + expected := data[499999] + c.Assert(actual, Equals, expected) +} + +func randomTestCase(size int) testSlice { + data := make(testSlice, 0, size) + rand.Seed(time.Now().Unix()) + for i := 0; i < size; i++ { + data = append(data, rand.Int()%100) + } + return data +} + +func serialTestCase(size int) testSlice { + data := make(testSlice, 0, size) + for i := 0; i < size; i++ { + data = append(data, i) + } + return data +} + +func BenchmarkSelection(b *testing.B) { + runSelect := func(b *testing.B, testCase testSlice, benchFunc func(*testing.B, testSlice, int)) { + for i := 1; i <= b.N; i++ { + var k int + if b.N < len(testCase) { + k = len(testCase) / b.N * i + } else { + k = i%len(testCase) + 1 + } + benchFunc(b, testCase, k) + } + } + b.ReportAllocs() + // Ten Million + b.Run("BenchmarkIntroSelection10000000", func(b *testing.B) { + runSelect(b, globalCase10000000, benchmarkIntroSelection) + }) + b.Run("BenchmarkQuickSelection10000000", func(b *testing.B) { + runSelect(b, globalCase10000000, benchmarkQuickSelection) + }) + b.Run("BenchmarkSort10000000", func(b *testing.B) { + for i := 1; i <= b.N; i++ { + benchmarkSort(b, globalCase10000000) + } + }) + // Million + b.Run("BenchmarkIntroSelection1000000", func(b *testing.B) { + runSelect(b, globalCase1000000, benchmarkIntroSelection) + }) + b.Run("BenchmarkQuickSelection1000000", func(b *testing.B) { + runSelect(b, globalCase1000000, benchmarkQuickSelection) + }) + b.Run("BenchmarkSort1000000", func(b *testing.B) { + for i := 1; i <= b.N; i++ { + benchmarkSort(b, globalCase1000000) + } + }) + // Hundred thousands + b.Run("BenchmarkIntroSelection100000", func(b *testing.B) { + runSelect(b, globalCase100000, benchmarkIntroSelection) + }) + b.Run("BenchmarkQuickSelection100000", func(b *testing.B) { + runSelect(b, globalCase100000, benchmarkQuickSelection) + }) + b.Run("BenchmarkSort100000", func(b *testing.B) { + for i := 1; i <= b.N; i++ { + benchmarkSort(b, globalCase100000) + } + }) + // Ten thousands + b.Run("BenchmarkIntroSelection10000", func(b *testing.B) { + runSelect(b, globalCase10000, benchmarkIntroSelection) + }) + b.Run("BenchmarkQuickSelection10000", func(b *testing.B) { + runSelect(b, globalCase10000, benchmarkQuickSelection) + }) + b.Run("BenchmarkSort10000", func(b *testing.B) { + for i := 1; i <= b.N; i++ { + benchmarkSort(b, globalCase10000) + } + }) + // Thousand + b.Run("BenchmarkIntroSelection1000", func(b *testing.B) { + runSelect(b, globalCase1000, benchmarkIntroSelection) + }) + b.Run("BenchmarkQuickSelection1000", func(b *testing.B) { + runSelect(b, globalCase1000, benchmarkQuickSelection) + }) + b.Run("BenchmarkSort1000", func(b *testing.B) { + for i := 1; i <= b.N; i++ { + benchmarkSort(b, globalCase1000) + } + }) + // Hundred + b.Run("BenchmarkIntroSelection100", func(b *testing.B) { + runSelect(b, globalCase100, benchmarkIntroSelection) + }) + b.Run("BenchmarkQuickSelection100", func(b *testing.B) { + runSelect(b, globalCase100, benchmarkQuickSelection) + }) + b.Run("BenchmarkSort100", func(b *testing.B) { + for i := 1; i <= b.N; i++ { + benchmarkSort(b, globalCase100) + } + }) + // Tens + b.Run("BenchmarkIntroSelection50", func(b *testing.B) { + runSelect(b, globalCase50, benchmarkIntroSelection) + }) + b.Run("BenchmarkQuickSelection50", func(b *testing.B) { + runSelect(b, globalCase50, benchmarkQuickSelection) + }) + b.Run("BenchmarkSort50", func(b *testing.B) { + for i := 1; i <= b.N; i++ { + benchmarkSort(b, globalCase50) + } + }) +} + +func benchmarkIntroSelection(b *testing.B, testCase testSlice, k int) { + b.StopTimer() + data := make(testSlice, len(testCase)) + copy(data, testCase) + b.StartTimer() + Select(data, k) +} + +func benchmarkQuickSelection(b *testing.B, testCase testSlice, k int) { + b.StopTimer() + data := make(testSlice, len(testCase)) + copy(data, testCase) + b.StartTimer() + quickselect(data, 0, len(testCase)-1, k-1) +} + +func benchmarkSort(b *testing.B, testCase testSlice) { + b.StopTimer() + data := make(testSlice, len(testCase)) + copy(data, testCase) + b.StartTimer() + sort.Sort(data) +} From 34b70e166708868d0d3821bf2c31e06739e1eb23 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Mon, 19 Oct 2020 17:11:38 +0800 Subject: [PATCH 045/229] *: fix cop task runtime information is wrong in the concurrent executor (#19849) (#19947) --- distsql/distsql_test.go | 25 +++ distsql/select_result.go | 69 +++++-- executor/adapter.go | 6 +- executor/aggregate.go | 2 +- executor/batch_point_get.go | 1 - executor/index_lookup_hash_join.go | 4 +- executor/index_lookup_join.go | 37 +++- executor/index_lookup_merge_join.go | 2 +- executor/insert_common.go | 1 - executor/join.go | 50 ++++- executor/join_pkg_test.go | 38 ++++ executor/point_get.go | 43 +++-- executor/projection.go | 4 +- executor/shuffle.go | 2 +- executor/update.go | 1 - store/tikv/snapshot.go | 55 ++++++ util/execdetails/execdetails.go | 275 +++++++++++++++++++++++++-- util/execdetails/execdetails_test.go | 48 ++++- 18 files changed, 569 insertions(+), 94 deletions(-) diff --git a/distsql/distsql_test.go b/distsql/distsql_test.go index e65d94224958f..5a5cfa8230db1 100644 --- a/distsql/distsql_test.go +++ b/distsql/distsql_test.go @@ -27,9 +27,11 @@ import ( "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/sessionctx/variable" "github.com/pingcap/tidb/statistics" + "github.com/pingcap/tidb/store/tikv" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/chunk" "github.com/pingcap/tidb/util/codec" + "github.com/pingcap/tidb/util/execdetails" "github.com/pingcap/tidb/util/memory" "github.com/pingcap/tipb/go-tipb" ) @@ -156,6 +158,29 @@ func (s *testSuite) TestSelectWithRuntimeStats(c *C) { c.Assert(err, IsNil) } +func (s *testSuite) TestSelectResultRuntimeStats(c *C) { + basic := &execdetails.BasicRuntimeStats{} + basic.Record(time.Second, 20) + s1 := &selectResultRuntimeStats{ + copRespTime: []time.Duration{time.Second, time.Millisecond}, + procKeys: []int64{100, 200}, + backoffSleep: map[string]time.Duration{"RegionMiss": time.Millisecond}, + totalProcessTime: time.Second, + totalWaitTime: time.Second, + rpcStat: tikv.NewRegionRequestRuntimeStats(), + } + s2 := *s1 + stmtStats := execdetails.NewRuntimeStatsColl() + stmtStats.RegisterStats(1, basic) + stmtStats.RegisterStats(1, s1) + stmtStats.RegisterStats(1, &s2) + stats := stmtStats.GetRootStats(1) + expect := "time:1s, loops:1, cop_task: {num: 4, max: 1s, min: 1ms, avg: 500.5ms, p95: 1s, max_proc_keys: 200, p95_proc_keys: 200, tot_proc: 2s, tot_wait: 2s, copr_cache_hit_ratio: 0.00}, backoff{RegionMiss: 2ms}" + c.Assert(stats.String(), Equals, expect) + // Test for idempotence. + c.Assert(stats.String(), Equals, expect) +} + func (s *testSuite) createSelectStreaming(batch, totalRows int, c *C) (*streamResult, []*types.FieldType) { request, err := (&RequestBuilder{}).SetKeyRanges(nil). SetDAGRequest(&tipb.DAGRequest{}). diff --git a/distsql/select_result.go b/distsql/select_result.go index 91fac037a2ec8..61853c7e2687f 100644 --- a/distsql/select_result.go +++ b/distsql/select_result.go @@ -264,11 +264,8 @@ func (r *selectResult) updateCopRuntimeStats(ctx context.Context, copStats *tikv return } if r.stats == nil { - stmtCtx := r.ctx.GetSessionVars().StmtCtx id := r.rootPlanID - originRuntimeStats := stmtCtx.RuntimeStatsColl.GetRootStats(id) r.stats = &selectResultRuntimeStats{ - RuntimeStats: originRuntimeStats, backoffSleep: make(map[string]time.Duration), rpcStat: tikv.NewRegionRequestRuntimeStats(), } @@ -326,7 +323,6 @@ type CopRuntimeStats interface { } type selectResultRuntimeStats struct { - execdetails.RuntimeStats copRespTime []time.Duration procKeys []int64 backoffSleep map[string]time.Duration @@ -351,14 +347,48 @@ func (s *selectResultRuntimeStats) mergeCopRuntimeStats(copStats *tikv.CopRuntim } } +func (s *selectResultRuntimeStats) Clone() execdetails.RuntimeStats { + newRs := selectResultRuntimeStats{ + copRespTime: make([]time.Duration, 0, len(s.copRespTime)), + procKeys: make([]int64, 0, len(s.procKeys)), + backoffSleep: make(map[string]time.Duration, len(s.backoffSleep)), + rpcStat: tikv.NewRegionRequestRuntimeStats(), + CoprCacheHitNum: s.CoprCacheHitNum, + } + newRs.copRespTime = append(newRs.copRespTime, s.copRespTime...) + newRs.procKeys = append(newRs.procKeys, s.procKeys...) + for k, v := range s.backoffSleep { + newRs.backoffSleep[k] += v + } + newRs.totalProcessTime += s.totalProcessTime + newRs.totalWaitTime += s.totalWaitTime + for k, v := range s.rpcStat.Stats { + newRs.rpcStat.Stats[k] = v + } + return &newRs +} + +func (s *selectResultRuntimeStats) Merge(rs execdetails.RuntimeStats) { + other, ok := rs.(*selectResultRuntimeStats) + if !ok { + return + } + s.copRespTime = append(s.copRespTime, other.copRespTime...) + s.procKeys = append(s.procKeys, other.procKeys...) + + for k, v := range other.backoffSleep { + s.backoffSleep[k] += v + } + s.totalProcessTime += other.totalProcessTime + s.totalWaitTime += other.totalWaitTime + s.rpcStat.Merge(other.rpcStat) + s.CoprCacheHitNum += other.CoprCacheHitNum +} + func (s *selectResultRuntimeStats) String() string { buf := bytes.NewBuffer(nil) - if s.RuntimeStats != nil { - buf.WriteString(s.RuntimeStats.String()) - } if len(s.copRespTime) > 0 { size := len(s.copRespTime) - buf.WriteString(", ") if size == 1 { buf.WriteString(fmt.Sprintf("cop_task: {num: 1, max:%v, proc_keys: %v", s.copRespTime[0], s.procKeys[0])) } else { @@ -394,18 +424,18 @@ func (s *selectResultRuntimeStats) String() string { } } } - } - copRPC := s.rpcStat.Stats[tikvrpc.CmdCop] - if copRPC != nil && copRPC.Count > 0 { - delete(s.rpcStat.Stats, tikvrpc.CmdCop) - buf.WriteString(", rpc_num: ") - buf.WriteString(strconv.FormatInt(copRPC.Count, 10)) - buf.WriteString(", rpc_time: ") - buf.WriteString(time.Duration(copRPC.Consume).String()) + copRPC := s.rpcStat.Stats[tikvrpc.CmdCop] + if copRPC != nil && copRPC.Count > 0 { + delete(s.rpcStat.Stats, tikvrpc.CmdCop) + buf.WriteString(", rpc_num: ") + buf.WriteString(strconv.FormatInt(copRPC.Count, 10)) + buf.WriteString(", rpc_time: ") + buf.WriteString(time.Duration(copRPC.Consume).String()) + } buf.WriteString(fmt.Sprintf(", copr_cache_hit_ratio: %v", strconv.FormatFloat(float64(s.CoprCacheHitNum)/float64(len(s.copRespTime)), 'f', 2, 64))) + buf.WriteString("}") } - buf.WriteString("}") rpcStatsStr := s.rpcStat.String() if len(rpcStatsStr) > 0 { @@ -427,3 +457,8 @@ func (s *selectResultRuntimeStats) String() string { } return buf.String() } + +// Tp implements the RuntimeStats interface. +func (s *selectResultRuntimeStats) Tp() int { + return execdetails.TpSelectResultRuntimeStats +} diff --git a/executor/adapter.go b/executor/adapter.go index 329198cc58aef..38a1cc1e3eba0 100644 --- a/executor/adapter.go +++ b/executor/adapter.go @@ -804,11 +804,9 @@ func (a *ExecStmt) FinishExecuteStmt(txnTS uint64, succ bool, hasMoreResults boo execDetail := sessVars.StmtCtx.GetExecDetails() // Attach commit/lockKeys runtime stats to executor runtime stats. if (execDetail.CommitDetail != nil || execDetail.LockKeysDetail != nil) && sessVars.StmtCtx.RuntimeStatsColl != nil { - stats := sessVars.StmtCtx.RuntimeStatsColl.GetRootStats(a.Plan.ID()) statsWithCommit := &execdetails.RuntimeStatsWithCommit{ - RuntimeStats: stats, - Commit: execDetail.CommitDetail, - LockKeys: execDetail.LockKeysDetail, + Commit: execDetail.CommitDetail, + LockKeys: execDetail.LockKeysDetail, } sessVars.StmtCtx.RuntimeStatsColl.RegisterStats(a.Plan.ID(), statsWithCommit) } diff --git a/executor/aggregate.go b/executor/aggregate.go index e1311636c0326..bcbb9495470d7 100644 --- a/executor/aggregate.go +++ b/executor/aggregate.go @@ -246,7 +246,7 @@ func (e *HashAggExec) Close() error { } partialConcurrencyInfo := execdetails.NewConcurrencyInfo("PartialConcurrency", partialConcurrency) finalConcurrencyInfo := execdetails.NewConcurrencyInfo("FinalConcurrency", finalConcurrency) - runtimeStats := &execdetails.RuntimeStatsWithConcurrencyInfo{BasicRuntimeStats: e.runtimeStats} + runtimeStats := &execdetails.RuntimeStatsWithConcurrencyInfo{} runtimeStats.SetConcurrencyInfo(partialConcurrencyInfo, finalConcurrencyInfo) e.ctx.GetSessionVars().StmtCtx.RuntimeStatsColl.RegisterStats(e.id, runtimeStats) } diff --git a/executor/batch_point_get.go b/executor/batch_point_get.go index 98df02e091349..934dfdb1be892 100644 --- a/executor/batch_point_get.go +++ b/executor/batch_point_get.go @@ -145,7 +145,6 @@ func (e *BatchPointGetExec) initialize(ctx context.Context) error { if e.runtimeStats != nil { snapshotStats := &tikv.SnapshotRuntimeStats{} e.stats = &runtimeStatsWithSnapshot{ - BasicRuntimeStats: e.runtimeStats, SnapshotRuntimeStats: snapshotStats, } snapshot.SetOption(kv.CollectRuntimeStats, snapshotStats) diff --git a/executor/index_lookup_hash_join.go b/executor/index_lookup_hash_join.go index f85bb60d34835..03a1c468ac6cd 100644 --- a/executor/index_lookup_hash_join.go +++ b/executor/index_lookup_hash_join.go @@ -148,9 +148,7 @@ func (e *IndexNestedLoopHashJoin) Open(ctx context.Context) error { e.memTracker.AttachTo(e.ctx.GetSessionVars().StmtCtx.MemTracker) e.innerPtrBytes = make([][]byte, 0, 8) if e.runtimeStats != nil { - e.stats = &indexLookUpJoinRuntimeStats{ - BasicRuntimeStats: e.runtimeStats, - } + e.stats = &indexLookUpJoinRuntimeStats{} e.ctx.GetSessionVars().StmtCtx.RuntimeStatsColl.RegisterStats(e.id, e.stats) } e.startWorkers(ctx) diff --git a/executor/index_lookup_join.go b/executor/index_lookup_join.go index 30d19474d0f25..ba8d42d70d8a1 100644 --- a/executor/index_lookup_join.go +++ b/executor/index_lookup_join.go @@ -178,9 +178,7 @@ func (e *IndexLookUpJoin) Open(ctx context.Context) error { e.memTracker.AttachTo(e.ctx.GetSessionVars().StmtCtx.MemTracker) e.innerPtrBytes = make([][]byte, 0, 8) if e.runtimeStats != nil { - e.stats = &indexLookUpJoinRuntimeStats{ - BasicRuntimeStats: e.runtimeStats, - } + e.stats = &indexLookUpJoinRuntimeStats{} e.ctx.GetSessionVars().StmtCtx.RuntimeStatsColl.RegisterStats(e.id, e.stats) } e.startWorkers(ctx) @@ -738,7 +736,6 @@ func (e *IndexLookUpJoin) Close() error { } type indexLookUpJoinRuntimeStats struct { - *execdetails.BasicRuntimeStats concurrency int probe int64 innerWorker innerWorkerRuntimeStats @@ -755,11 +752,8 @@ type innerWorkerRuntimeStats struct { func (e *indexLookUpJoinRuntimeStats) String() string { buf := bytes.NewBuffer(make([]byte, 0, 16)) - if e.BasicRuntimeStats != nil { - buf.WriteString(e.BasicRuntimeStats.String()) - } if e.innerWorker.totalTime > 0 { - buf.WriteString(", inner:{total:") + buf.WriteString("inner:{total:") buf.WriteString(time.Duration(e.innerWorker.totalTime).String()) buf.WriteString(", concurrency:") if e.concurrency > 0 { @@ -787,3 +781,30 @@ func (e *indexLookUpJoinRuntimeStats) String() string { } return buf.String() } + +func (e *indexLookUpJoinRuntimeStats) Clone() execdetails.RuntimeStats { + return &indexLookUpJoinRuntimeStats{ + concurrency: e.concurrency, + probe: e.probe, + innerWorker: e.innerWorker, + } +} + +func (e *indexLookUpJoinRuntimeStats) Merge(rs execdetails.RuntimeStats) { + tmp, ok := rs.(*indexLookUpJoinRuntimeStats) + if !ok { + return + } + e.probe += tmp.probe + e.innerWorker.totalTime += tmp.innerWorker.totalTime + e.innerWorker.task += tmp.innerWorker.task + e.innerWorker.construct += tmp.innerWorker.construct + e.innerWorker.fetch += tmp.innerWorker.fetch + e.innerWorker.build += tmp.innerWorker.build + e.innerWorker.join += tmp.innerWorker.join +} + +// Tp implements the RuntimeStats interface. +func (e *indexLookUpJoinRuntimeStats) Tp() int { + return execdetails.TpIndexLookUpJoinRuntimeStats +} diff --git a/executor/index_lookup_merge_join.go b/executor/index_lookup_merge_join.go index 07e925872d35e..2683b94d48dae 100644 --- a/executor/index_lookup_merge_join.go +++ b/executor/index_lookup_merge_join.go @@ -736,7 +736,7 @@ func (e *IndexLookUpMergeJoin) Close() error { e.memTracker = nil if e.runtimeStats != nil { concurrency := cap(e.resultCh) - runtimeStats := &execdetails.RuntimeStatsWithConcurrencyInfo{BasicRuntimeStats: e.runtimeStats} + runtimeStats := &execdetails.RuntimeStatsWithConcurrencyInfo{} runtimeStats.SetConcurrencyInfo(execdetails.NewConcurrencyInfo("Concurrency", concurrency)) e.ctx.GetSessionVars().StmtCtx.RuntimeStatsColl.RegisterStats(e.id, runtimeStats) } diff --git a/executor/insert_common.go b/executor/insert_common.go index 7fb3d51597602..0df7ba25558a8 100644 --- a/executor/insert_common.go +++ b/executor/insert_common.go @@ -937,7 +937,6 @@ func (e *InsertValues) collectRuntimeStatsEnabled() bool { if e.stats == nil { snapshotStats := &tikv.SnapshotRuntimeStats{} e.stats = &runtimeStatsWithSnapshot{ - BasicRuntimeStats: e.runtimeStats, SnapshotRuntimeStats: snapshotStats, } e.ctx.GetSessionVars().StmtCtx.RuntimeStatsColl.RegisterStats(e.id, e.stats) diff --git a/executor/join.go b/executor/join.go index 9c34ad30c5988..03ea7fb5b9f46 100644 --- a/executor/join.go +++ b/executor/join.go @@ -175,8 +175,7 @@ func (e *HashJoinExec) Open(ctx context.Context) error { } if e.runtimeStats != nil { e.stats = &hashJoinRuntimeStats{ - BasicRuntimeStats: e.runtimeStats, - concurrent: cap(e.joiners), + concurrent: cap(e.joiners), } e.ctx.GetSessionVars().StmtCtx.RuntimeStatsColl.RegisterStats(e.id, e.stats) } @@ -932,11 +931,9 @@ type joinRuntimeStats struct { hashStat hashStatistic } -func newJoinRuntimeStats(basic *execdetails.BasicRuntimeStats) *joinRuntimeStats { +func newJoinRuntimeStats() *joinRuntimeStats { stats := &joinRuntimeStats{ - RuntimeStatsWithConcurrencyInfo: &execdetails.RuntimeStatsWithConcurrencyInfo{ - BasicRuntimeStats: basic, - }, + RuntimeStatsWithConcurrencyInfo: &execdetails.RuntimeStatsWithConcurrencyInfo{}, } return stats } @@ -973,9 +970,12 @@ func (e *joinRuntimeStats) String() string { return buf.String() } -type hashJoinRuntimeStats struct { - *execdetails.BasicRuntimeStats +// Tp implements the RuntimeStats interface. +func (e *joinRuntimeStats) Tp() int { + return execdetails.TpJoinRuntimeStats +} +type hashJoinRuntimeStats struct { fetchAndBuildHashTable time.Duration hashStat hashStatistic fetchAndProbe int64 @@ -996,11 +996,15 @@ func (e *hashJoinRuntimeStats) setMaxFetchAndProbeTime(t int64) { } } +// Tp implements the RuntimeStats interface. +func (e *hashJoinRuntimeStats) Tp() int { + return execdetails.TpHashJoinRuntimeStats +} + func (e *hashJoinRuntimeStats) String() string { buf := bytes.NewBuffer(make([]byte, 0, 128)) - buf.WriteString(e.BasicRuntimeStats.String()) if e.fetchAndBuildHashTable > 0 { - buf.WriteString(", build_hash_table:{total:") + buf.WriteString("build_hash_table:{total:") buf.WriteString(e.fetchAndBuildHashTable.String()) buf.WriteString(", fetch:") buf.WriteString((e.fetchAndBuildHashTable - e.hashStat.buildTableElapse).String()) @@ -1027,3 +1031,29 @@ func (e *hashJoinRuntimeStats) String() string { } return buf.String() } + +func (e *hashJoinRuntimeStats) Clone() execdetails.RuntimeStats { + return &hashJoinRuntimeStats{ + fetchAndBuildHashTable: e.fetchAndBuildHashTable, + hashStat: e.hashStat, + fetchAndProbe: e.fetchAndProbe, + probe: e.probe, + concurrent: e.concurrent, + maxFetchAndProbe: e.maxFetchAndProbe, + } +} + +func (e *hashJoinRuntimeStats) Merge(rs execdetails.RuntimeStats) { + tmp, ok := rs.(*hashJoinRuntimeStats) + if !ok { + return + } + e.fetchAndBuildHashTable += tmp.fetchAndBuildHashTable + e.hashStat.buildTableElapse += tmp.hashStat.buildTableElapse + e.hashStat.probeCollision += tmp.hashStat.probeCollision + e.fetchAndProbe += tmp.fetchAndProbe + e.probe += tmp.probe + if e.maxFetchAndProbe < tmp.maxFetchAndProbe { + e.maxFetchAndProbe = tmp.maxFetchAndProbe + } +} diff --git a/executor/join_pkg_test.go b/executor/join_pkg_test.go index fe139444fd2dc..2939ed0ab5763 100644 --- a/executor/join_pkg_test.go +++ b/executor/join_pkg_test.go @@ -15,6 +15,7 @@ package executor import ( "context" + "time" . "github.com/pingcap/check" "github.com/pingcap/failpoint" @@ -104,3 +105,40 @@ func (s *pkgTestSuite) TestJoinExec(c *C) { } } } + +func (s *pkgTestSuite) TestHashJoinRuntimeStats(c *C) { + stats := &hashJoinRuntimeStats{ + fetchAndBuildHashTable: 2 * time.Second, + hashStat: hashStatistic{ + probeCollision: 1, + buildTableElapse: time.Millisecond * 100, + }, + fetchAndProbe: int64(5 * time.Second), + probe: int64(4 * time.Second), + concurrent: 4, + maxFetchAndProbe: int64(2 * time.Second), + } + c.Assert(stats.String(), Equals, "build_hash_table:{total:2s, fetch:1.9s, build:100ms}, probe:{concurrency:4, total:5s, max:2s, probe:4s, fetch:1s, probe_collision:1}") + c.Assert(stats.String(), Equals, stats.Clone().String()) + stats.Merge(stats.Clone()) + c.Assert(stats.String(), Equals, "build_hash_table:{total:4s, fetch:3.8s, build:200ms}, probe:{concurrency:4, total:10s, max:2s, probe:8s, fetch:2s, probe_collision:2}") +} + +func (s *pkgTestSuite) TestIndexJoinRuntimeStats(c *C) { + stats := indexLookUpJoinRuntimeStats{ + concurrency: 5, + probe: int64(time.Second), + innerWorker: innerWorkerRuntimeStats{ + totalTime: int64(time.Second * 5), + task: 16, + construct: int64(100 * time.Millisecond), + fetch: int64(300 * time.Millisecond), + build: int64(250 * time.Millisecond), + join: int64(150 * time.Millisecond), + }, + } + c.Assert(stats.String(), Equals, "inner:{total:5s, concurrency:5, task:16, construct:100ms, fetch:300ms, build:250ms, join:150ms}, probe:1s") + c.Assert(stats.String(), Equals, stats.Clone().String()) + stats.Merge(stats.Clone()) + c.Assert(stats.String(), Equals, "inner:{total:10s, concurrency:5, task:32, construct:200ms, fetch:600ms, build:500ms, join:300ms}, probe:2s") +} diff --git a/executor/point_get.go b/executor/point_get.go index 44c5eb64924e6..46756260acf97 100644 --- a/executor/point_get.go +++ b/executor/point_get.go @@ -158,7 +158,6 @@ func (e *PointGetExecutor) Next(ctx context.Context, req *chunk.Chunk) error { if e.runtimeStats != nil { snapshotStats := &tikv.SnapshotRuntimeStats{} e.stats = &runtimeStatsWithSnapshot{ - BasicRuntimeStats: e.runtimeStats, SnapshotRuntimeStats: snapshotStats, } e.snapshot.SetOption(kv.CollectRuntimeStats, snapshotStats) @@ -421,23 +420,43 @@ func getColInfoByID(tbl *model.TableInfo, colID int64) *model.ColumnInfo { } type runtimeStatsWithSnapshot struct { - *execdetails.BasicRuntimeStats *tikv.SnapshotRuntimeStats } func (e *runtimeStatsWithSnapshot) String() string { - var basic, rpcStatsStr string - if e.BasicRuntimeStats != nil { - basic = e.BasicRuntimeStats.String() - } if e.SnapshotRuntimeStats != nil { - rpcStatsStr = e.SnapshotRuntimeStats.String() + return e.SnapshotRuntimeStats.String() } - if rpcStatsStr == "" { - return basic + return "" +} + +// Clone implements the RuntimeStats interface. +func (e *runtimeStatsWithSnapshot) Clone() execdetails.RuntimeStats { + newRs := &runtimeStatsWithSnapshot{} + if e.SnapshotRuntimeStats != nil { + snapshotStats := e.SnapshotRuntimeStats.Clone() + newRs.SnapshotRuntimeStats = snapshotStats.(*tikv.SnapshotRuntimeStats) } - if basic == "" { - return rpcStatsStr + return newRs +} + +// Merge implements the RuntimeStats interface. +func (e *runtimeStatsWithSnapshot) Merge(other execdetails.RuntimeStats) { + tmp, ok := other.(*runtimeStatsWithSnapshot) + if !ok { + return + } + if tmp.SnapshotRuntimeStats != nil { + if e.SnapshotRuntimeStats == nil { + snapshotStats := tmp.SnapshotRuntimeStats.Clone() + e.SnapshotRuntimeStats = snapshotStats.(*tikv.SnapshotRuntimeStats) + return + } + e.SnapshotRuntimeStats.Merge(tmp.SnapshotRuntimeStats) } - return basic + ", " + rpcStatsStr +} + +// Tp implements the RuntimeStats interface. +func (e *runtimeStatsWithSnapshot) Tp() int { + return execdetails.TpRuntimeStatsWithSnapshot } diff --git a/executor/projection.go b/executor/projection.go index bfe30382c7d6d..c36d435ab231a 100644 --- a/executor/projection.go +++ b/executor/projection.go @@ -309,9 +309,7 @@ func (e *ProjectionExec) Close() error { } } if e.baseExecutor.runtimeStats != nil { - runtimeStats := &execdetails.RuntimeStatsWithConcurrencyInfo{ - BasicRuntimeStats: e.runtimeStats, - } + runtimeStats := &execdetails.RuntimeStatsWithConcurrencyInfo{} if e.isUnparallelExec() { runtimeStats.SetConcurrencyInfo(execdetails.NewConcurrencyInfo("Concurrency", 0)) } else { diff --git a/executor/shuffle.go b/executor/shuffle.go index c1f39dd7574da..7de58e7139880 100644 --- a/executor/shuffle.go +++ b/executor/shuffle.go @@ -145,7 +145,7 @@ func (e *ShuffleExec) Close() error { e.executed = false if e.runtimeStats != nil { - runtimeStats := &execdetails.RuntimeStatsWithConcurrencyInfo{BasicRuntimeStats: e.runtimeStats} + runtimeStats := &execdetails.RuntimeStatsWithConcurrencyInfo{} runtimeStats.SetConcurrencyInfo(execdetails.NewConcurrencyInfo("ShuffleConcurrency", e.concurrency)) e.ctx.GetSessionVars().StmtCtx.RuntimeStatsColl.RegisterStats(e.id, runtimeStats) } diff --git a/executor/update.go b/executor/update.go index ca6eaf7cf6267..b912eea050251 100644 --- a/executor/update.go +++ b/executor/update.go @@ -299,7 +299,6 @@ func (e *UpdateExec) collectRuntimeStatsEnabled() bool { if e.stats == nil { snapshotStats := &tikv.SnapshotRuntimeStats{} e.stats = &runtimeStatsWithSnapshot{ - BasicRuntimeStats: e.runtimeStats, SnapshotRuntimeStats: snapshotStats, } e.ctx.GetSessionVars().StmtCtx.RuntimeStatsColl.RegisterStats(e.id, e.stats) diff --git a/store/tikv/snapshot.go b/store/tikv/snapshot.go index a8a929a2ef5de..2896a16b19843 100644 --- a/store/tikv/snapshot.go +++ b/store/tikv/snapshot.go @@ -32,6 +32,7 @@ import ( "github.com/pingcap/tidb/metrics" "github.com/pingcap/tidb/store/tikv/tikvrpc" "github.com/pingcap/tidb/tablecodec" + "github.com/pingcap/tidb/util/execdetails" "github.com/pingcap/tidb/util/logutil" "go.uber.org/zap" ) @@ -630,6 +631,60 @@ type SnapshotRuntimeStats struct { backoffTimes map[backoffType]int } +// Tp implements the RuntimeStats interface. +func (rs *SnapshotRuntimeStats) Tp() int { + return execdetails.TpSnapshotRuntimeStats +} + +// Clone implements the RuntimeStats interface. +func (rs *SnapshotRuntimeStats) Clone() execdetails.RuntimeStats { + newRs := SnapshotRuntimeStats{rpcStats: NewRegionRequestRuntimeStats()} + if rs.rpcStats.Stats != nil { + for k, v := range rs.rpcStats.Stats { + newRs.rpcStats.Stats[k] = v + } + } + if len(rs.backoffSleepMS) > 0 { + newRs.backoffSleepMS = make(map[backoffType]int) + newRs.backoffTimes = make(map[backoffType]int) + for k, v := range rs.backoffSleepMS { + newRs.backoffSleepMS[k] += v + } + for k, v := range rs.backoffTimes { + newRs.backoffTimes[k] += v + } + } + return &newRs +} + +// Merge implements the RuntimeStats interface. +func (rs *SnapshotRuntimeStats) Merge(other execdetails.RuntimeStats) { + tmp, ok := other.(*SnapshotRuntimeStats) + if !ok { + return + } + if tmp.rpcStats.Stats != nil { + if rs.rpcStats.Stats == nil { + rs.rpcStats.Stats = make(map[tikvrpc.CmdType]*RPCRuntimeStats, len(tmp.rpcStats.Stats)) + } + rs.rpcStats.Merge(tmp.rpcStats) + } + if len(tmp.backoffSleepMS) > 0 { + if rs.backoffSleepMS == nil { + rs.backoffSleepMS = make(map[backoffType]int) + } + if rs.backoffTimes == nil { + rs.backoffTimes = make(map[backoffType]int) + } + for k, v := range tmp.backoffSleepMS { + rs.backoffSleepMS[k] += v + } + for k, v := range tmp.backoffTimes { + rs.backoffTimes[k] += v + } + } +} + // String implements fmt.Stringer interface. func (rs *SnapshotRuntimeStats) String() string { var buf bytes.Buffer diff --git a/util/execdetails/execdetails.go b/util/execdetails/execdetails.go index c8e5e245d17ad..3da02d56185a2 100644 --- a/util/execdetails/execdetails.go +++ b/util/execdetails/execdetails.go @@ -88,6 +88,41 @@ type CommitDetails struct { TxnRetry int } +// Merge merges commit details into itself. +func (cd *CommitDetails) Merge(other *CommitDetails) { + cd.GetCommitTsTime += other.GetCommitTsTime + cd.PrewriteTime += other.PrewriteTime + cd.WaitPrewriteBinlogTime += other.WaitPrewriteBinlogTime + cd.CommitTime += other.CommitTime + cd.LocalLatchTime += other.LocalLatchTime + cd.CommitBackoffTime += other.CommitBackoffTime + cd.ResolveLockTime += other.ResolveLockTime + cd.WriteKeys += other.WriteKeys + cd.WriteSize += other.WriteSize + cd.PrewriteRegionNum += other.PrewriteRegionNum + cd.TxnRetry += other.TxnRetry + cd.Mu.BackoffTypes = append(cd.Mu.BackoffTypes, other.Mu.BackoffTypes...) +} + +// Clone returns a deep copy of itself. +func (cd *CommitDetails) Clone() *CommitDetails { + commit := &CommitDetails{ + GetCommitTsTime: cd.GetCommitTsTime, + PrewriteTime: cd.PrewriteTime, + WaitPrewriteBinlogTime: cd.WaitPrewriteBinlogTime, + CommitTime: cd.CommitTime, + LocalLatchTime: cd.LocalLatchTime, + CommitBackoffTime: cd.CommitBackoffTime, + ResolveLockTime: cd.ResolveLockTime, + WriteKeys: cd.WriteKeys, + WriteSize: cd.WriteSize, + PrewriteRegionNum: cd.PrewriteRegionNum, + TxnRetry: cd.TxnRetry, + } + commit.Mu.BackoffTypes = append([]fmt.Stringer{}, cd.Mu.BackoffTypes...) + return commit +} + // LockKeysDetails contains pessimistic lock keys detail information. type LockKeysDetails struct { TotalTime time.Duration @@ -117,6 +152,22 @@ func (ld *LockKeysDetails) Merge(lockKey *LockKeysDetails) { ld.RetryCount++ } +// Clone returns a deep copy of itself. +func (ld *LockKeysDetails) Clone() *LockKeysDetails { + lock := &LockKeysDetails{ + TotalTime: ld.TotalTime, + RegionNum: ld.RegionNum, + LockKeys: ld.LockKeys, + ResolveLockTime: ld.ResolveLockTime, + BackoffTime: ld.BackoffTime, + LockRPCTime: ld.LockRPCTime, + LockRPCCount: ld.LockRPCCount, + RetryCount: ld.RetryCount, + } + lock.Mu.BackoffTypes = append([]fmt.Stringer{}, ld.Mu.BackoffTypes...) + return lock +} + const ( // CopTimeStr represents the sum of cop-task time spend in TiDB distSQL. CopTimeStr = "Cop_time" @@ -360,10 +411,33 @@ func (crs *CopRuntimeStats) String() string { procTimes[n-1], procTimes[0], procTimes[n*4/5], procTimes[n*19/20], totalIters, totalTasks) } +const ( + // TpBasicRuntimeStats is the tp for BasicRuntimeStats. + TpBasicRuntimeStats int = iota + // TpRuntimeStatsWithCommit is the tp for RuntimeStatsWithCommit. + TpRuntimeStatsWithCommit + // TpRuntimeStatsWithConcurrencyInfo is the tp for RuntimeStatsWithConcurrencyInfo. + TpRuntimeStatsWithConcurrencyInfo + // TpSnapshotRuntimeStats is the tp for SnapshotRuntimeStats. + TpSnapshotRuntimeStats + // TpHashJoinRuntimeStats is the tp for HashJoinRuntimeStats. + TpHashJoinRuntimeStats + // TpIndexLookUpJoinRuntimeStats is the tp for IndexLookUpJoinRuntimeStats. + TpIndexLookUpJoinRuntimeStats + // TpRuntimeStatsWithSnapshot is the tp for RuntimeStatsWithSnapshot. + TpRuntimeStatsWithSnapshot + // TpJoinRuntimeStats is the tp for JoinRuntimeStats. + TpJoinRuntimeStats + // TpSelectResultRuntimeStats is the tp for SelectResultRuntimeStats. + TpSelectResultRuntimeStats +) + // RuntimeStats is used to express the executor runtime information. type RuntimeStats interface { - GetActRows() int64 String() string + Merge(RuntimeStats) + Clone() RuntimeStats + Tp() int } // BasicRuntimeStats is the basic runtime stats. @@ -376,11 +450,87 @@ type BasicRuntimeStats struct { rows int64 } -// GetActRows implements the RuntimeStats interface. +// GetActRows return total rows of BasicRuntimeStats. func (e *BasicRuntimeStats) GetActRows() int64 { return e.rows } +// Clone implements the RuntimeStats interface. +func (e *BasicRuntimeStats) Clone() RuntimeStats { + return &BasicRuntimeStats{ + loop: e.loop, + consume: e.consume, + rows: e.rows, + } +} + +// Merge implements the RuntimeStats interface. +func (e *BasicRuntimeStats) Merge(rs RuntimeStats) { + tmp, ok := rs.(*BasicRuntimeStats) + if !ok { + return + } + e.loop += tmp.loop + e.consume += tmp.consume + e.rows += tmp.rows +} + +// Tp implements the RuntimeStats interface. +func (e *BasicRuntimeStats) Tp() int { + return TpBasicRuntimeStats +} + +// RootRuntimeStats is the executor runtime stats that combine with multiple runtime stats. +type RootRuntimeStats struct { + basics []*BasicRuntimeStats + groupRss [][]RuntimeStats +} + +// GetActRows return total rows of RootRuntimeStats. +func (e *RootRuntimeStats) GetActRows() int64 { + num := int64(0) + for _, basic := range e.basics { + num += basic.GetActRows() + } + return num +} + +// String implements the RuntimeStats interface. +func (e *RootRuntimeStats) String() string { + buf := bytes.NewBuffer(make([]byte, 0, 32)) + if len(e.basics) > 0 { + if len(e.basics) == 1 { + buf.WriteString(e.basics[0].String()) + } else { + basic := e.basics[0].Clone() + for i := 1; i < len(e.basics); i++ { + basic.Merge(e.basics[i]) + } + buf.WriteString(basic.String()) + } + } + if len(e.groupRss) > 0 { + if buf.Len() > 0 { + buf.WriteString(", ") + } + for i, rss := range e.groupRss { + if i > 0 { + buf.WriteString(", ") + } + if len(rss) == 1 { + buf.WriteString(rss[0].String()) + continue + } + rs := rss[0].Clone() + for i := 1; i < len(rss); i++ { + rs.Merge(rss[i]) + } + buf.WriteString(rs.String()) + } + } + return buf.String() +} + // Record records executor's execution. func (e *BasicRuntimeStats) Record(d time.Duration, rowNum int) { atomic.AddInt32(&e.loop, 1) @@ -401,30 +551,53 @@ func (e *BasicRuntimeStats) String() string { // RuntimeStatsColl collects executors's execution info. type RuntimeStatsColl struct { mu sync.Mutex - rootStats map[int]RuntimeStats + rootStats map[int]*RootRuntimeStats copStats map[int]*CopRuntimeStats } // NewRuntimeStatsColl creates new executor collector. func NewRuntimeStatsColl() *RuntimeStatsColl { - return &RuntimeStatsColl{rootStats: make(map[int]RuntimeStats), + return &RuntimeStatsColl{rootStats: make(map[int]*RootRuntimeStats), copStats: make(map[int]*CopRuntimeStats)} } // RegisterStats register execStat for a executor. func (e *RuntimeStatsColl) RegisterStats(planID int, info RuntimeStats) { e.mu.Lock() - e.rootStats[planID] = info + stats, ok := e.rootStats[planID] + if !ok { + stats = &RootRuntimeStats{} + e.rootStats[planID] = stats + } + if basic, ok := info.(*BasicRuntimeStats); ok { + stats.basics = append(stats.basics, basic) + } else { + tp := info.Tp() + found := false + for i, rss := range stats.groupRss { + if len(rss) == 0 { + continue + } + if rss[0].Tp() == tp { + stats.groupRss[i] = append(stats.groupRss[i], info) + found = true + break + } + } + if !found { + stats.groupRss = append(stats.groupRss, []RuntimeStats{info}) + } + } e.mu.Unlock() } // GetRootStats gets execStat for a executor. -func (e *RuntimeStatsColl) GetRootStats(planID int) RuntimeStats { +func (e *RuntimeStatsColl) GetRootStats(planID int) *RootRuntimeStats { e.mu.Lock() defer e.mu.Unlock() runtimeStats, exists := e.rootStats[planID] if !exists { - runtimeStats = &BasicRuntimeStats{} + runtimeStats = &RootRuntimeStats{} e.rootStats[planID] = runtimeStats } return runtimeStats @@ -492,14 +665,17 @@ func NewConcurrencyInfo(name string, num int) *ConcurrencyInfo { // RuntimeStatsWithConcurrencyInfo is the BasicRuntimeStats with ConcurrencyInfo. type RuntimeStatsWithConcurrencyInfo struct { - *BasicRuntimeStats - // protect concurrency sync.Mutex // executor concurrency information concurrency []*ConcurrencyInfo } +// Tp implements the RuntimeStats interface. +func (e *RuntimeStatsWithConcurrencyInfo) Tp() int { + return TpRuntimeStatsWithConcurrencyInfo +} + // SetConcurrencyInfo sets the concurrency informations. // We must clear the concurrencyInfo first when we call the SetConcurrencyInfo. // When the num <= 0, it means the exector operator is not executed parallel. @@ -512,37 +688,91 @@ func (e *RuntimeStatsWithConcurrencyInfo) SetConcurrencyInfo(infos ...*Concurren } } +// Clone implements the RuntimeStats interface. +func (e *RuntimeStatsWithConcurrencyInfo) Clone() RuntimeStats { + newRs := &RuntimeStatsWithConcurrencyInfo{ + concurrency: make([]*ConcurrencyInfo, 0, len(e.concurrency)), + } + newRs.concurrency = append(newRs.concurrency, e.concurrency...) + return newRs +} + +// String implements the RuntimeStats interface. func (e *RuntimeStatsWithConcurrencyInfo) String() string { var result string - if e.BasicRuntimeStats != nil { - result = fmt.Sprintf("time:%v, loops:%d", time.Duration(e.consume), e.loop) - } if len(e.concurrency) > 0 { - for _, concurrency := range e.concurrency { + for i, concurrency := range e.concurrency { + if i > 0 { + result += ", " + } if concurrency.concurrencyNum > 0 { - result += fmt.Sprintf(", %s:%d", concurrency.concurrencyName, concurrency.concurrencyNum) + result += fmt.Sprintf("%s:%d", concurrency.concurrencyName, concurrency.concurrencyNum) } else { - result += fmt.Sprintf(", %s:OFF", concurrency.concurrencyName) + result += fmt.Sprintf("%s:OFF", concurrency.concurrencyName) } } } return result } +// Merge implements the RuntimeStats interface. +func (e *RuntimeStatsWithConcurrencyInfo) Merge(rs RuntimeStats) { + tmp, ok := rs.(*RuntimeStatsWithConcurrencyInfo) + if !ok { + return + } + e.concurrency = append(e.concurrency, tmp.concurrency...) +} + // RuntimeStatsWithCommit is the RuntimeStats with commit detail. type RuntimeStatsWithCommit struct { - RuntimeStats Commit *CommitDetails LockKeys *LockKeysDetails } +// Tp implements the RuntimeStats interface. +func (e *RuntimeStatsWithCommit) Tp() int { + return TpRuntimeStatsWithCommit +} + +// Merge implements the RuntimeStats interface. +func (e *RuntimeStatsWithCommit) Merge(rs RuntimeStats) { + tmp, ok := rs.(*RuntimeStatsWithCommit) + if !ok { + return + } + if tmp.Commit != nil { + if e.Commit == nil { + e.Commit = &CommitDetails{} + } + e.Commit.Merge(tmp.Commit) + } + + if tmp.LockKeys != nil { + if e.LockKeys == nil { + e.LockKeys = &LockKeysDetails{} + } + e.LockKeys.Merge(tmp.LockKeys) + } +} + +// Clone implements the RuntimeStats interface. +func (e *RuntimeStatsWithCommit) Clone() RuntimeStats { + newRs := RuntimeStatsWithCommit{} + if e.Commit != nil { + newRs.Commit = e.Commit.Clone() + } + if e.LockKeys != nil { + newRs.LockKeys = e.LockKeys.Clone() + } + return &newRs +} + +// String implements the RuntimeStats interface. func (e *RuntimeStatsWithCommit) String() string { buf := bytes.NewBuffer(make([]byte, 0, 32)) - if e.RuntimeStats != nil { - buf.WriteString(e.RuntimeStats.String()) - } if e.Commit != nil { - buf.WriteString(", commit_txn: {") + buf.WriteString("commit_txn: {") if e.Commit.PrewriteTime > 0 { buf.WriteString("prewrite:") buf.WriteString(e.Commit.PrewriteTime.String()) @@ -596,7 +826,10 @@ func (e *RuntimeStatsWithCommit) String() string { buf.WriteString("}") } if e.LockKeys != nil { - buf.WriteString(", lock_keys: {") + if buf.Len() > 0 { + buf.WriteString(", ") + } + buf.WriteString("lock_keys: {") if e.LockKeys.TotalTime > 0 { buf.WriteString("time:") buf.WriteString(e.LockKeys.TotalTime.String()) diff --git a/util/execdetails/execdetails_test.go b/util/execdetails/execdetails_test.go index a16bcbc66db84..78e4f3387185f 100644 --- a/util/execdetails/execdetails_test.go +++ b/util/execdetails/execdetails_test.go @@ -121,10 +121,6 @@ func TestCopRuntimeStats(t *testing.T) { } func TestRuntimeStatsWithCommit(t *testing.T) { - basicStats := &BasicRuntimeStats{ - loop: 1, - consume: int64(time.Second), - } commitDetail := &CommitDetails{ GetCommitTsTime: time.Second, PrewriteTime: time.Second, @@ -151,10 +147,9 @@ func TestRuntimeStatsWithCommit(t *testing.T) { TxnRetry: 2, } stats := &RuntimeStatsWithCommit{ - RuntimeStats: basicStats, - Commit: commitDetail, + Commit: commitDetail, } - expect := "time:1s, loops:1, commit_txn: {prewrite:1s, get_commit_ts:1s, commit:1s, backoff: {time: 1s, type: [backoff1 backoff2]}, resolve_lock: 1s, region_num:5, write_keys:3, write_byte:66, txn_retry:2}" + expect := "commit_txn: {prewrite:1s, get_commit_ts:1s, commit:1s, backoff: {time: 1s, type: [backoff1 backoff2]}, resolve_lock: 1s, region_num:5, write_keys:3, write_byte:66, txn_retry:2}" if stats.String() != expect { t.Fatalf("%v != %v", stats.String(), expect) } @@ -183,10 +178,43 @@ func TestRuntimeStatsWithCommit(t *testing.T) { RetryCount: 2, } stats = &RuntimeStatsWithCommit{ - RuntimeStats: basicStats, - LockKeys: lockDetail, + LockKeys: lockDetail, + } + expect = "lock_keys: {time:1s, region:2, keys:10, resolve_lock:2s, backoff: {time: 3s, type: [backoff4 backoff5]}, lock_rpc:5s, rpc_count:50, retry_count:2}" + if stats.String() != expect { + t.Fatalf("%v != %v", stats.String(), expect) + } +} + +func TestRootRuntimeStats(t *testing.T) { + basic1 := &BasicRuntimeStats{} + basic2 := &BasicRuntimeStats{} + basic1.Record(time.Second, 20) + basic2.Record(time.Second*2, 30) + pid := 1 + stmtStats := NewRuntimeStatsColl() + stmtStats.RegisterStats(pid, basic1) + stmtStats.RegisterStats(pid, basic2) + concurrency := &RuntimeStatsWithConcurrencyInfo{} + concurrency.SetConcurrencyInfo(NewConcurrencyInfo("worker", 15)) + stmtStats.RegisterStats(pid, concurrency) + commitDetail := &CommitDetails{ + GetCommitTsTime: time.Second, + PrewriteTime: time.Second, + CommitTime: time.Second, + WriteKeys: 3, + WriteSize: 66, + PrewriteRegionNum: 5, + TxnRetry: 2, } - expect = "time:1s, loops:1, lock_keys: {time:1s, region:2, keys:10, resolve_lock:2s, backoff: {time: 3s, type: [backoff4 backoff5]}, lock_rpc:5s, rpc_count:50, retry_count:2}" + stmtStats.RegisterStats(pid, &RuntimeStatsWithCommit{ + Commit: commitDetail, + }) + concurrency = &RuntimeStatsWithConcurrencyInfo{} + concurrency.SetConcurrencyInfo(NewConcurrencyInfo("concurrent", 0)) + stmtStats.RegisterStats(pid, concurrency) + stats := stmtStats.GetRootStats(1) + expect := "time:3s, loops:2, worker:15, concurrent:OFF, commit_txn: {prewrite:1s, get_commit_ts:1s, commit:1s, region_num:5, write_keys:3, write_byte:66, txn_retry:2}" if stats.String() != expect { t.Fatalf("%v != %v", stats.String(), expect) } From f0e90b13d1be4efcdddee9f996c43cfef568bcc8 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Mon, 19 Oct 2020 19:42:58 +0800 Subject: [PATCH 046/229] *: add execution retry count in slow log and slow_query (#19487) (#20494) Signed-off-by: ti-srebot Signed-off-by: crazycs520 --- cmd/explaintest/portgenerator | Bin 0 -> 7743764 bytes executor/adapter.go | 1 + executor/slow_query.go | 4 ++++ executor/slow_query_test.go | 3 ++- infoschema/tables.go | 1 + infoschema/tables_test.go | 5 +++-- sessionctx/variable/session.go | 6 ++++++ sessionctx/variable/session_test.go | 2 ++ 8 files changed, 19 insertions(+), 3 deletions(-) create mode 100755 cmd/explaintest/portgenerator diff --git a/cmd/explaintest/portgenerator b/cmd/explaintest/portgenerator new file mode 100755 index 0000000000000000000000000000000000000000..74840b24142adb02771a0b0e5d8755b6376db52e GIT binary patch literal 7743764 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 z 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 z zt)c;G$w;zP-(JtvarOJNt_r3rl}{m5H`NAW_Msly1not-&Q(Cr&P?pShfb7>X`q>e znTg#eyxYVs6}c;u|BU@4^;`2rYk!G(I}!Wk4(j8b>*>+rR3P2+9*su(+aEcxh^M+*}%a)!#%4p&v1=^$9P==DC}tWa;h zm7r71OLboT5IczF)pB{=uSvw__ct^=B=6)CKrhOK2 ztA#|S*9G*O!M7LrlFyPzn%`*R5<)Wct6gW6zN=`FDvbaul>ozKH`41mRX@WKdHdKW z&XCv?*C!MOgWMZ+<2UKG#>bLP|J7*b@un5@&K9f!8>kQUM(CES92#Bau$sHn&E#qa z6P$=`03d1Bi)XROkM}1-*i35eBZ$@>k*hdpe$>x-!7gVw@cplR*E$*sME2;CTSRxR zwK&AJK&ILIUP2aHVDFZf=#caO%&1XEU%++pbLJ$OmP=p6;N(RP>nCU5Xw6Dy^Iqft zzEnlz@k`O$mJ{*ohCSD+(SJj{v$Ng+O|)v~=9Dm|>;S3A-4@Qm(tIbVHFPGPSqrjM zxDXtwo(W7j->Bj62cRqpFx=)`YT2l?k()3@e} z)*Pb(1o^XahyPgXzB(SGwTsxyEf7Tiri(leaMwj-aWtQ+M68^`xmnOZ#}r>D#G3ym znI$5&83k$|FivI~+-j6Q6dR8yX(p*sH6YUmTCpm&Q(a#2d#A!i`Kph!zN+}f;KSD-~;;#05v!Lp?z(3U%$o+n2Sxt-d?Yo zDo99@+Z0%9Y{D4o*!O~BZ}45@se0BiMNNV6m+UkD5PjLG+!|#^R0SixJj$scJy%EA zr~B>lRtH?1pBE3TvgC60KzY}8CFE3JCWW7_yn~K%Q zsuFZKxUI6Ae@S^uOY>8lwR-(mY)y0G?{?6w@&8ZMans$gWbk+#f|*E6 zKfoIS_lkl_chKpr{HqHs9CrVPce{XscsD&vXl81GyO)7!WyymlJ0^l9Yl65AXxY0TQOiQXds<0)TkD(Wh+E?xvw5sa*dS?UCRT5sn{8A)D6M52QPFr& zgNugCA?3-Yc=8oZCSKoxlCmksH)YHdtD(2o1X&JY-_(;zhC z5=b>S6aU@aAs$aDp;~^Bb=M4+cP3iVY7y;6JO4ir?I#=x4bj%y{ewJYBx3CN>8wE5 zme@hQZK$-e)7nWPc3SM%X^`bYZ~1Uf#}*c@s$VRy{}W#Y@pa#!hcoQA3D|qDU^e#_ zUC2LeBW39f<4RWNwF0WqGW|!{2{XuI-{xwplb)x8Zt_3DSwmx@+BbcwlBFWs_YPUY z4pZ|DthR`*e+yY{Y&u`yB7X6&P{bk1(ITfJmUY9s`e*Y{^?GbF)TP4)gM65rTU5YaOq#@4yDryIJ(!%blxXPWH}TogpTK;Ear;I1Q)y z1Dv*2!#4-*>c~)!%rS<#?4O~CgT+v{5mE0SO!dr*zO9CB=v)0Rqfw|I)8Z*uhNvH- zh*r?B=xAP8LUdJZ|F3EFiesAlNk4%UVJ)WokIrVp#s)WPTXwv|@biqEHX{%by>tG> zxYfKr1AVU>2yBVeD9V~5HJoD`B zMG>TYcHJ3DfuvSjaKBz~l1RR8%Ye68CHoyYv#6?7x=967vWS?_tzNBf{;zbab~UO_ z$Mv{w(&PT;{g|~cO5B4|DK=W^sc3ZLYy^n6-hRDbdY&ahwr)4g!~|Wdu3D45s(R58 z&dTek2Ut&Ic)wMtL_ z973vM|JW+PH8X+bPc*kn1}0>C?Epfew>9d$rU_LM6Vy@m(O-I_LgjBfaJ{{*LSQJUn9r=Ui{vOUw=~xqb~koodj)&ppH#*?!$-#WAF`nlDPt z$xC*lM)&qdx^SZP>rR;NNJ=-R`zFgV9W!lMZ~)6dwg_8!p)oZMj$x*rq+Brdv29GP zJ~f))mdIE|rXuSq0?1We9OTmUSElKS@B5HO#}!5%%A~p=NCoz^N?R4uk6Qh~Y2lA( zy(JYawr{h=_D(5hk%Y?iYTVkwfmHvdIB5WIQI>xQ)l>qsUzz_>d3BZ*gpSYF8ozkfGYp7MpK4{zD$oqA zW&j`XH0I9^)k*a_@=*EGAh(d6xqgZZudNJ$JBG1fFB=Kc+)1DdkLV-m&3Xlcu^lDd zna?|Vjg2SiRvE>`f0@$?1X45F^smWW75ni&t#i!a!)9DH2C^Lg@4QzX49Li5dM_gU z+c{Xx5KsRV70lo3!`39$EH*8sS)34@6?k}-rmLJ9xMx;KFFI6oJOJw_gr9m_Xi&;m zM3##f8D6+!t0?Oq*J!l5>Qsc}Cb+0=wCbea441rUcb=A2y(Y`6vqf??*7Z~pug)!$ zBLP03an)|)HLb1TfKztSy*&E|41}4Z&@ap|R2=hW&9$U3jlX7N=1K}>PSs6DdfE(K zLcu?Uo4g&_X$`+}W~LDmOJ_*RMsM27$}Ly9V38(FnTy%9V@l{)wLr1imk}@rW9SR= znUPa1Yz#B>dI#9Fsiwf_GG?`m76+?V#s9V*Ot{C!OWv*gnRjHFxj z9r$ay&fBH?YX=UxP_D`-j3;T|!L&B;obu|n=lG3ysB}7Sw}XClkC>pH{}l;x-1;jd zEvSk;(`Q$vf(S{&wD0(d8Lz<4Wy{AXUI%yxvR9e9{MKh6e_Gy$JBXm zsZwWPEhy?IwyRrDp*{&VaNbl`S9t z0|C{a%8;A<(~7P9F)@OvKQdLOs$%bcO5Gf1!9l7QYC@p9Ng7_iOgIIVmVC+f`yhSN zW5gnvaFcX`>u+Z7d-LP?zN;8ELu_XGo06Ir5M&j#gTY@WG|sNiiw%gGT=9kn*(6)i zvg$IDxGTWYH;Nl}B2>~Nc$3`e(0(!H?5rO%pF$iM!uIw`6z`dkJn#(il2jzoR&ROwI|kk`o#eovXtAKMp19rdGQ# zNLC;U`Omqf?ya|nlI^Et$`7!NbHsw1X_^>jDL<()&Lv;n1Zpie@)ML_Ju_5(ch#uJ zRT|aq90qs&-egTD{+j-a_PkXUd-xOe7#t*%~uc@Q&JmBXE8;0T5F}95bG@tH-PoIwXY?3PRzr<(X|A5a|^9-NaC;bO} z*biOQssB~Q>i%vL^CqfSZ-na58|M?Ts%kO6%o;PoR7WFe0Lk_5Sn^+W%1ledmkPw5 zKs8zECmyBkkKP)l22Ehs^5l{z%fIh-1k8ny`hVBW4x0-oZdsWhVk0%7e>y#(jUT>+ z??@KAJe173*#j!g>4zJ4`A3{cuj*pG zyj}gLbDdh))>9Q5`XP0<9W)zXb9%ggV2Sg&aS{ifj#@VcnpsQL=51o-D9UVZ^p~7~ zDzu=Je2dOqqc@0udiA~{vnB@^sUidRF-2vSw5g`y#ljUWXoDUJ{4tu$ZOw(+-YTv>YMN^X z6#|3ZYOAWBQi??Ey*vY^V|oDA&$2ZQFVxd^F;;KkEfHJlk`1tAb{e!&tg2qD2m7C0 z^kzP!At{i*Xb;=Vl!%?M7ll+{=ct}409?O10N}dKncI!ej|}K}ZkDcmmchc`j~!m@ zE!+b*O02&&a(Yuy_?9#fhFXZSJcm!Ih1<9>NuhD?lwxnOwlC_4s3#Qyr3*t=U?(5H zvD16hpE-j7#qspd!|bUZLaWJo%t|@ez0$OF``RDE0Iy3m11_rB$nh{yYT006KT<`M>Sp)NRw4iE^Y}iN?_@<$AAh^EqyPTF zkSwr?KnCp$v)WUyd| zDdIo|~Z26v?Pt2A|{~ffn~q_(hMndzWa0_r@gg%OVoSq{*CObk zV2B3>o6r*XBNlDbj!#uPe8OaWJYM~-FWNWX5p8~M??0Q`vWNIYMO zZ&%`yIG0;o$Xj|gKN&WHe`uG?;)C$!llri%Qs@+sI}AakNU$dZ4hvLz>2sHmJv^UH zMV_1x%ncHseTyf_Z!T5S+5m7zCZ_Bkn*L9L`x6|WWWF5JNj6W{epd3L^8K8De%r#< z?>|$mW-o&*&vxZU=dP#a+E<~i3z!h8+N>067`Oi|q|}mPskmF+ zBKH~bI4dV-=GgIN6@^u?Yc`1?PH7q5(~C5a$6R!u<|VV0laFNC-0-QL*JcyjCv>*cPGa_}57 zt{6&Xy8Mu6j}a^#r~2NBN-Yt=Xnc`C+ChmXWy-a*ETamtfPM%iZXW2m5G(}CSr2p) zMjd1MAKUPdgqc3GRk~2N8!c0LQx4CF8K6=e^Gp@OT9e(4gPYb5R7fiF?8_PbBPf)5 zJ3c3u`t46Eq!emDG=x<1dzb| zgz~oz4b~bZ@u|@p=xabz%eT2;2duQ&3KB`1s`akFcoORNA&;#mL~9!rW{lHR)u06Y zRmDztTb-=t9zMiv1uW9BxFI3!Zz<2%9u?u%(pVz$Zk1FoIkRWQ8-A)x96~#h0xqd; zFfhY2f*JX`I%w7vM`w6R;{fYUDk55QwB&bF=~O-dq`|{HtKfatX9yH=60%uwmf&w) z1=@kg0Yp{o>J8MR;&8M*BRb1Qobmfww8mC&Q<1-{3GjHf9UiTv8ME1G1}152rnvd{ z84eF2*pk$cletH9G`QPAEdjPwvBxhI2OXwMjNCmJ4*7amygoyVr;kEverSv_bOcnu zn46o}lFhnIJ5T!N2N^?4Yz&Ro4uNZ&<1`yM!$u6eakKp2O#szY_C5%>=w5>n3H=usV;Mm;F<`e@CI)-)0kGN3Q!D{);8Rxh!P$z|K;b^-F3 z6Nf7?A;jihAR5R`Aa3pFW;T3AGvX*;;s~CP%s*7}K|IZf#!{_~Z?@E{nOCdxKm>}x z#?h>b2L;u92pm-7^67_Dqk-VlA(H)LXm~9=WR~uLkI9Aq(EkEfYHfpx{i|Z#-&D=8 z&$PNvw3H&H+gOyA48$Nc%DdQVXI;azE_*|;{&0Zn47truwUbVr#?MC4zP$>-dBWp^ z;p~NvuoB|xu>bi4gxra{@tv6>b>-dM7Ky*w%X^ql)+1Pph19w1#2ro}+>-$~`tQ#2 z&+30eg(({TvxgZ~3ytJ%+=PyW)~@c;G=#H(YZ}5hUW~Ip09NyTtb5+(|C;LB){9Q{ zlUv(&HG%O0a>d4?xQ+Xy2Ds*jBYyi|O~4sn&I|Cm@k3WfSH0&-GxD+KaG;BtFDWJU z&v=Y4<2ysmr+7DN8p~?o`TM9YB5(qGwa}BCysU9-mv!Rduyj*HrICgx1HCeK!)^68Rgy=_BYn7Mb@vpUv;% zKld%8tKaYgn)S$#vI;M^8(*VyHJxcMVxZ8%W8J*Xe-*b7)g~9LN^4)5ZT&y4?v&}< z2!+%Xsd7jg0$aeUT@iV?*3|nNwkj#XJxLiHI?(r17F0lKf>7$Hf>Od{TYLPC5;1TG zw{f#rdUnx_)CJuVAMU8$wE^o~GoR0ikhND1tdnFb>nFwH4gVsEQtllRw9= z*W{7aSzr@8_u!gZ#Q>?4;s@wX!9*jCF_vR-xlEV!N`hw~fNuU1<7_-74HoT|R?O8D z(C^DUU!|Z2*bHnq@zqttz&67hkCw^7iwxmKcg!S*m$J}<3Jl8t$lVDDi%YNdj^kwp z@g=Cn0GV3K{jcAiLtSg762+6_$Hu++wgHP}vjT}BKCL7W@_(mVh~pBmw|7}Cd8GtM zRTtX3om9!Sjkoj*K0(8L6B>kX?M4ZZge)M5*li958X_gT^NJ`1If_~9nTA%gmZTvy z%^Nn(qzoe0*aG!xnJi-#OM~S4r{3*^1a+wMBjhQm+svc#h-LW(q1RJq0RdCdUh&kK zxL4IH76SF4u9n`j^nrQ7ol@0Or9@S+{;x8`MQa}tpd>|0+=40Ik%cGG(vimjEf$zd z0x$0YeFfJ>9auedMQPXr6+kOdc7>W ztu|rwa8ZMvDfjduhNjm5Bv%+<%oTu}qDcRk0p*(E7cU z;D;naybJQ<-qkc4GN3|pXLffg2O@MVo%q-Te!zS8qST!1lBVdG9r1~{hqH0U*i%3G z{xAM4Fs2u1SYYcu79f*O?Ccb%RIkqp1O?7Zoe2lN7T^9(yzv`uJpG_wJR5&5H9qCR zHk$9SQ^R3kcHOgulWu5%SH|kC*uR+N#CU2}(FDdTF6!Q_VPlI%vMv68qa=B+;&20Q+051}WjSr&qU{%l-jUlyOy9yLXa4YBzaEqW_l&j<9(Anw&!H)Icv zCHJaKy5l*nDtX2|y+F&zqn=X?`b0xalN8(RE zokQ~ctV8Hc&(ddFds8R%#+Efl8E!xC6moy3)WedQWsPGQ$C+CwG`jl5auy`2Cnd^{w;`V!%HJyQZKg-V!S zNRwnp-a(%mAesLRtE01P!zw>lWfwdc8yWZ>s<9B(p zOh>&LWU?LC^5PDoV7OOYh}9lMb;Gorv$fO#feQm055rE|1UeGysR7tjd6N_N26A7c z#7T6}1+(K3v-?ts zVK7&Qae`<2&PnZZ4llOq>u|LS#*(axGc>%m)am2j#)mc^WX@{*oGIdDSW$l%8#lPO ztmZeINaw!wC*3&iPx+o20$J63yJ6IhzSCJlZnu1aJ8nrx0YIP3@;@D=j!{8_HZSiW zf2JQueuV1)+uz}DR^RgYNU)E?KUq1}wlD8LrQi3zO#cBj`)}Ys{$HlQp+ovqO_6y- zoBr}u4ur4%Y_cf>4;M|)Gv%I%*oB{)vUw+IsD7IlYfEB_+KXM6a*$&N60MmeINp;* zGZavATy*XM1lTk~`-4AWl#t;dPzc(Tfs3X0q70NX8p(NXcw*@gu|xEx6Ub8LEp1Ri zwJp(_A84RSTt5Tl_h9!rmDirU4)+!hC65-HcLAczTU;vP#&=D#ut}Um!uNS&V+hCC zH=r35&d%djfmHym{D(fH^WGIq`ag49d5o59)uEzjLnvIKQSTbISD5l6xZWLBP7^ux zrM%u9hOakmM%Oy^cw?_DqlH4Vu~q!yg^sa^Ijat zC|hTVE1AE3mQ#bqN-m9$XKS~EX*f)lZoZ!s8rq#F;=(OLlo=v7buQj)@7pT!cws-`N^{x)Vw%#|ZZddx6-`x!lD_*a9+Nd~KUQ~svzR$@SB{`v zz)QS^0ZW=yVriDOUX3X|smS$81wN7Kma0J%o@}PvL~Qq`FjoZ{CPbPS7x+|O6DzLq zB+3Swg|U_<2k|zYknAixK(A5};{02_)wN?8K_uDZ_%h(*>XnlLtDB#r89ep~;bA99 z$C-3ZweDV5Yz>vsbSTBOQ3w@RHbsN0`4vm)C1J79Y1dGi+4%jc`*>too)&#oonzlJ$jcYx|TF1^(+eB}Oiz+33 zKE#45TP)aGEo@AV`K(UoSi$BI?RtNv=TiOjbrhHR9))3ZpR&YKu@pMmZWa?w9Hh5t zS+QhV?zFw!_a=QqAmcD_wEcUwQqd}40=bfY%#u1G<1*i4AsyN~+4xMUh_nnJ#AWt& zGjGhapD9%EeSC2KQ*Xw(Puga93;-czC=t8F7ki!>mKmer`$=2Rf$)P?AYLjzk?6Pv zyLMjGR(CV3L)*F8u@(0vTW!r~y7lkp$Y|QCF92MsSGxAN*6iPoxJE%ot4K8rP$PD>|qDxAPQt@xAc4l9rMVVr&Z2`k* z;fksqc@>{k?TA)V|&2CSupBMWeM$h2e!8@(H7HbKIN>#l>zdU@|b<*rlqCT`W%`b~@b^cCqWTl6A%|FX^r< z)&x24DX}vWO(lhn^|Z$K(H?E&?gNY5x!EE(`N~QK6Ms}tYGFLpy;O!0iXZWEhSgqn ztcF3E&f14_#vO#z(3iz}iP-ZWi_!K%Sid~kmh}U(;c0SVUS}c*6qNFJI~l&CEQy)Iyfv7UV*jN=reSY;@|PpWI%c+T6&sbST4UhWBSf}( z+a%>JoN8Yc64+7>Wn#g8maoPu@RyyEEvaspM|)H$3-`Z>y(`D4E%??SuiC|=zoshf zYSJGSp69lvAvhcs@2qzCIUDO=g0IQxWoBbtYN*)8mM`SFkX+sTd;hd3;$t~uYRlLu!7d)N-*(&V9@^1aB$_hkHx&VPy;{H$TfjkX+l$sF|}it_F3@PUrWp8;c{_h@$e;*lg4d;lo#HChykS*Qp>c???c~ zy;vVTO4dXZ{{#)%gnOMik_qJA6Q>=g7NUD}FCr?}AG1>(CU46z${Km!9@@*tajZ97 zP2Wu42N1;ck9#;V?VseUEl_T$V0rW7u$jB7M>fVPFbi!ywdvI+iMr%_OswYrNv~Wq zU04&rv#P>f|?R*0jEC$*_6-#<396-8=ifS)q|#)yA9gKJq}HA z_lMHQEg@9&58@U7H&@(H(hRZ5QS#dC z@5Lv638`K@+NiulkCIoeej$C872fMl1aLQRZ4b&wjfF;c6;)9ND=%GI7+^T`53~4u zJ9%^BR+?!x={dge=LTnYG;yGTnOR)s4cZd-UQp%ZCEF`j&`cww{my7QHK-N)31=Ke zt(cI}pER89IYfk5uT#kH7*F{uPH#IN5t6rqUlMTGU_3c)h@|&aUUJ(i2I#jlsHV@h z>4Y6A2r+676;X9O-&!Q|6{5AcMhuz6_bY%w)I*z`ddOzNI5y-5gt-@Vs_K>MW17k2 z{SEz7L>{mLZgy-OpST+AXC5U|u8YpY6@(;t6ZOq`b%3=D8&|ewNZ*IN^f=c}iVMH9|FpB`!L!vzYl^B2vsMo(lW>o)S&}9%)#O<5L9a?rLeMsyBF8DRo?M)f zpk8UI;dD(MmS&xm3~#4@peOs)GYFr)Tz#b1ZwJu9T}4aQUVoe_t6G|(l+2q=ESa`# z3~Kqc$Rgf!A|bs+6NFUWKD{_c1iHs3A{ByF3MXp)arX;1O)R0h&0D>^V+0lb#(?)- z*Hf8wj-~Ww+H$O9LB4*-)apY7a~AuP#<>BNB$4-z1WGdU0T1r~q2bJ#I4C3;d4}+G zsp)UAN0gLWs(k+{`2)xoLKQ*urT3u{^%|Nc5SVAkkn9u`D~ zLcRD~*z}oRs71Ks7B1}atB&QsmuLCm+n>f0$M-4rxz@kjo*Vp&c>2HAM=EmE?2vYe zZky%beS);hetUxGhxB&l3~h?6{DE;+Z|4u}=nLBpRt4-U!voXiazS6L&tn?i%|aL$ zA~#;l0Q^sXWiCqfeda$_tO*DT5bAQ4)#mC88q#Ag;LN&>l_%m) zX1D8J09kK04$|@|t6j;!nGdg-p=8!fF9pf+E!i%Y?1SNxv_9PFyAGJow0lARbkyEC?hxH9XN=33E>LA4k&#QT>pwpDR!bR&P7nD{`qA@t% zwJLVVqiXu0=%fr+t#0_TC8OE24p&Vl+n~l&56pqD;gvZgjJ9$t)+Zw_Zm5U<$SJFZ zYWQMJJWd7=W~;5Obl4c9#xtjcs9|(HeY|TW(nHs89r=g-Ae783AcqCX;1rU*;gS_~ zN@n?KbJv)6yH)8MPYgjbe@e?wGN=Qzc@EmmosvDG2$J=)WD{JnX`PZ;ev&!XSjI@? zuY@c7M@L(oyVit?KR_Jt<_|66vnxXpy%h0hBI^CqB6M(_h|#fskLu9BQ<0U@msE#e zK4)rHL3ZRtf>{36wMoCv#GdoKgnH|0gZPuXlHbdrlm8~LJh(>(e!Pfgr_Ax<$Fbta zu~o6bZy-{mwQLDPH#x$69K}Z>Hr+nvVd5cX-0smNtN9CTIj|w4-}M?GjE?Lz*bsZI z|I6Os-n{nT>ctMy^Ba_qo4F59rx?!9l2Vb1B!OyGT+CXg&KYQC(Mu*ku11v`$69ec zV_dI>!+~8AY2-2I3gf=G*PS%M1P6-;?l?#OCgYA{&KAYZPtZ%Gkk(0mPQI*7->LIk z61%!Y=Y9wxiJdu;j~Gv|>om_z?A){B3;Q%z3())Y^#HvuXaSc{YV;g+$3$#Dk)#q) z7&%?od3h)DXuH@on)(-|#_e)fj$5@OBIbOgmKsYB8^6MzKT;jb86q(Dyj1ZNL)!}~ zG8M@}t7+b&2E)k7jE}e>u18Royj=OYU9XwUr(%(ZrJ-RHts zILAR)8x5^a{ZJ6fNr+HGYmOWO?p9nsB^FPhH@Qg`g2KP-bSvv`H-^fxO=ih)uKrGz zJj*&Tz`7qFN@gPGGLiwbDA{0z{89qq?s9&T4)BSSLpgd0x5dW-O2QltE<}p=VHKmm zf2Yg}nA!=CY*#>Ge4;C1pu^OBees!`)XRw#6jf&E0^3JraGD z4)GD<%1-;?l&ae6kbzdN#zQHuh*0~H-~yQ1l+~fZHCO7;*B@%x%sDQ4gWvxFns@Br zwanvNI7OcW)br!1=c|6T5aIS#bbg%#OUc^k{E2!=GWa_07}cw#fdhAQvzAdSJG&SA zjXV=8@)EIkUbSBP9x-+|Q_U;9dA<4^!eF7}V1?B9n)Q|Ec)fa3x!Uz}hQ}wakN;$S z>B&(rl=hv?JiP++OSVRDet_Peh{pDyb8qVwYN%DSXU0|NIP~Dw;niGkq$0J7-ri ze1g{cSAZ=%>=h z+n!en0J9c9e~0QP*_ni*$1XNcJ{md8-?kk;NP0EKD#)e2$$APlX4QU32Z+zuyiU^+ z#{Yf+%`2ZoJBVBlq8gjD{l^w^v`FlBlqo%cigj}0$`Q@8BEsD`ix6=Z6D1LmKP!3CWs8=jsCEB z_Uib$9YO?b1hxOVcnJoma+`YP`gcFWh6umlfVNIq=>PPjwyz<8eEbLp(yx9ZSOHo{ z+4HiQ$whAEO@At((1@4Lhw>CfUo<7c=%9vafepO8-vP|)HSaIyWHI?&(2!oE&|Wty zwC`04eTM@c(|aR^I2tL3M{>=&_gU9CHag~Q?g_XTspMa~i)mm{AmTd6w?T*r^egyV zj^M~QejS=Jox$50xy*+r}e$lT<8Jh&4=?DrhuS4Ovs{ zP0L}>=$Y7^9j)c8iY#wt{s`}sg0hkw(V7_F$(aSrx(WxjBzCjg=lg^Z-Ltf&rE*_y zX20^1ri#5rBu}A(oKoCe6Hju>{R=$;!%ehi3sm$XH+~;NK6kmN|MU_U5(t}3Q+ z{Mmh)xs+@FWD-fe^Hz09Y2Wf0=Lrxh!~VXntbj8!1x$U+krM(Mjg~7{JpDU$cmZ03 zg5;1-(*MpHt1p_7Tn)I{%ELL1DbQ$w}p=IeV5y?`}#zVUT7?s6Z{* z(v*{)E(uVwn%S!>8G?X=nuzvkUMc$5Tuk19E$$$!ROB}=2Sm9mU;%A<7%Qb|2zp`Z z3cqM4O!cTu5x!f0pFR`bLM@p>d%#;XN@V4M>K!7Mm$%s7Sw4~XpnNpAc4YbN64qJQ zCFU?m&LL9xmDpjCjgD>-{r0_A>6}n3W5{#jblv zD6+U2xr#UX#|MY1#bC(C9x=&zfr91j3K%ah=PG%D?(ZBG}e0NU=mn|T)mu?)i zz7uxY&Um5;hDW!Lt0fP6LV;7<&bF4+r*( z<3eDy?&<$2NV!O0m2#6yc|}+Qrg^jcM3B-=7)bdzDg8g4#0udOcP|WsZS5PTCgq*9 zziYKRf%SSFVV?`^rXhObAyTs#zAxs4HkZ{Lb1bb(q!p6XjT$=;^b_c?Xl8SUjPT}a z;dlhyyJ&=Wla`K0FdFpHD6d6YbLje=Nu?JYGtMd+@12Sn%~9AJoiA1r^LXbXTNe~n zsmzIYn>%OnuHb%_CANqrqrN{nX3g=|z9G8Nk+S?sk=`@gD5UrUi{dcCu){*htkp(a zvQYcZKE+agKWx`APACde8fU8^#<`SF1bfX)FR~{4MlD3+8tzKj-=!Sh3CXpVQhKwJ zb#X}E5Vj9m%l?sMRHYA6yhuz>+BZ)&G*9l7c6Ly>I;W+4*cJY>{-LT{g~kPi&#+{* zB=hTG7JueY)~$9)hihs=cDAI?Wnl0>K9Qe7#a~E#9CRjVR)3lQ7a}?!R|0bWAWIf` zqbH2UamL_2fe|QLdoPgvUz3UU_%=U;6wH+6KMxK3or+b4bcGWC)Fu92I59lLc|A(3 z^6d^TG1*(1t$C3RSy|Z0^;_%{FMmBJF8<0sGvaCK4*Pu0 z4rwpqrB@1GLa!!2b~uxx0&Mb)sslM-sTPO)Ec39s!HBBY5+POGq1Dz(=A zgG;tgSZEj%j1Ed(1aM0^+oe1&+*6DRi-MG`;$@sm`A)c}m_79y@g}ud8^F}Nh^A3L z*Wctg_u>6R7$cML&j_-a02PmKWsL-KUD+w+?UvHk%Sg7yCHu*tA%KSQ)g&`bp^j7$ zv12N7%t4`4CIQNWRK1nzJ;!QAol<>2C=y+UWaBB)pGaDNbcw60F_~9|#%9K@i{Uk^ zzE|I%ntKc7>@4e9%-d6X1qc1!>L|%lk15Qk5G*p>slfC|>wPP%_m$ZDa=kaNTV{{v zsmRw2!O+#`51M48y9qvC9)buK+>fdj0itjbz2ao*=UV?=*I4)M6Ut+Z{i5ZOiYWqb zcc6dQCzQ-u>+T?#=|lcn$)k-lfxqf_6)DdZRB$iv_JNn{9*=uNi@4X=A6MoE;1 z+c)TwCa9zdOdde_2~ghNq17QH=!luI)y2gk^oiu^6i zMAj=escC_^D3fw;m-3bGhhUlT#dZ(*9e6+q9bWQP?K@+de}V&SKKm zrvIA%;Nj{QiO&k9-v>U7sYrf7KlzHe#u6T#~2bhj|fH)3apEq!Ml!o*9^gn zoWoa>h4G2G+RHmmK)haq^xy#8AHh2L*^xXx%_A$apCVFu_nT_PAW{L(*TDnop|c?`*HGogpmC*AyL_`docUECcgknNvVg9j6nw0sV8rq5++(b45|^QX*XGLEM~u^rkE{~)zrvD(iq z0eg`@_I6gJZPeS#``NP?3u&iad?lABUrX$4sfgUZeP?sd_6-Bq~|e`D4#K`h10 zc+<0_!jf{+6FjTGsp5C3exhU6_J1wecMOne+sN@erQUE^d)*?UajPh@pqDE5#){L2 zcl}AG6{b#aX*LmOV}s;Iu(g)Oclk#2;j}1`r?B>=IRm8)Q$Vjbd%5OoVg|X$AoX2g zK^rTdq=096*I)A=R76}9bPLkSm(9>9g&?j3Z883S9GSrWuQaW=G}Mai=xOJ#7KG=z zwtfnGOahp>#BlPz7db+>pn(DAS!au?o+8V z4Bc$&ZVaUW@$6~}?{;CCe7FB=)w`q+UVTJ7+1;kjxioyf%w7Hkj+6yi6%08UV?=3m z$(v}S>*Pa==kdI1SM^METS6;Lh{TO-{&Sx|z;0~>Y^#5&rpWH|vi&@NRX?fzY={)# z2$*I2O4Ri{~q-4Xi-Za+Ael=Yf#$(k4UHx8K>jVtR zJ?-cVQHJDZ_!+Uu-U?yAllBe7T;APwVvX97R^v>mhRRdD$TdXs*)x@sn<~vtMt;n9 z;5W;l5Xs8qe)JwrVXr9~4}!3FK)&jgqAI=y%R@^8bdm#=3ueh@?NZp|dD@MjX7!hC zJ$U&?01EoG2enK!^SAC}PBtG`hkA}JOqJ}fp0na(8h)QpPj;OEW~V?cq|<=8u95*) zg9~?>

49Y-4QbUjbw17?Tzvfx}14hnc$MwTk1SOXwnZy=_c-b#`(s&G?vWMsDk? zSSQWMKv1L1Qock{A=S}H=I(5Aemt2j+s3co;m@xs^g}!|P5@okfDH1UH8X;jP$wDQ zf5*sVozQ7FJ_`LI&W|4;j7;WC){_P1de>1Q0ufw$ zf>peZ!`S`vDUeJB&~ZGCQIzVLn>q`<2wtcV7I(d?j5_P^2j26-w*SslPIjuaB_r{tNXg3yIjdnqbRAgp&`$7S+evCDdYh)VOVB?4{~aF0?=+xtz4ENKJIoxXBw{Z;eoj{Q z9N&wq%Nv)~HS#LIEe$1+hX|gtz8zW_cS-uP{}|MV#gkyPrN&HrFrj`<*jje&CJty%OE%+ z*|Ugd$?=!-t<_*wf0De4FUPYggO!~VW4!Tnv8kM(xAmGH7LXj952upZL+MFH29Ntb ztt+X8yRyg142|}d zioErHXy`eXbpG?KM%MfB_aMY!*8OyTU+3}W%>1}_eu3PeuHx-l(B2wP?h^7$NsiSj zTjQr}LtD;>UnpUGX1>#~Ue!PZa}=ssX}!!Kg3bBkfGNdlu*RABKsqq-O$%PxsSC0J zDLCf`aNe_K&5zIH+zgeJIysw7TDI|R9=r744`As5{;C)Ij_{#~faQV%vbN0}xasM^!FynJY^f#uAP_J2iBmp_%;(=+7uiuGMAiTaxR`Q{8)y;;_w8C5>}N zmvc>f|Fz})R}3UPhw#!aB1r#Tf&sM!qdWg)cz*TVKb|@(hjqI-dzANYi1+8N`ZcOD zs(BZB8BS-nLC%K&07?x&BiqSiTux``Og?z?wz6y5H*hpMsf!Z z0EenI%UNNnr+`t|>-L40F znn3fu9-Vh9v1N&GyF_o8skf3X<HCz4HPB~1P9F&iuWr+5&0C%aU}H2h?=R|e?L}s(Fqb#8cK4@AgMy~{oD7} zBuIPeGpxqhJ1_^SGi_OpZaOuci%3L48_f`*1$LRS7FvmDA^s`5oMFp&RXA|UGhkb> z3oMKx|0{9I|Y2-US zs0Slh&{H!V6f#auUkQ*lG9V26J-e{QAcr425uiNzzJD4YJj;{o{Q(NM(%0jQ&IW}w zJpAt~OQYTfH1BTlpVr%FCQ=d@Gb zWb^ROge7gNuofo!^bqmhned+GKp%+razni5l&^TIy2=PbyPtlmc+c-j`OUYqFE2Xx z9i{59|2DE^Cq8)Aa5V579N1F5dOaxHusIIPX)x9I{=C=mV9nAHD_1#~zt~@0*t$7I9fumwi@vMum4rwRsT0T)}O|PXi{|Cd|m4&Fv(M22tr2x z39)E9dQCsCJ%2*&!eri=zdr}3&-46^AEI*udn^1g1=av%ej@!&741>RCq~}*od}{XFfsB{ z@Sg8?`-N&l)#4NLp0LooZ?~yU^Zvyn5!(hC@rQiOx=7@0!WbgDaxrg7q=w|tn^MF8 zl@gHr?{|%N&Ffe6>9=dBscK znRYs=Xb$OmOL6XDgi&VcW~s{4)&t?|KOU~^yTocs8F2AbjW+~Yoqu>JQA^*KN!VL9ZW{% z5oQ!WIh(|VjL8+EwwJeuA(7nl5l;>(X!f+(>{nZ1w`vi!7@`glQNR2OqRt`QP7X!| z_ut1)vEE;^o}eYIv#@skAv%|Xo<+~F%x;RjPAz^Q-fD_8@~S^Od82_3`JH4*f^$Ns zY>~Bg&T1ldrxHeMxm{Y>ZVVtS6__A3;yzk4)!Hw1rQ)NtW$x?8d@-v%QD0u<0>1FL zB)}Z*Z1B?5j-3a@4pponVPV?iYBrnJWR!+2y)8xdT6a~ECT^(JnaOkH%ijX1WNqc; zaUC;gSFxxBLU5RiyrEb-UfwpXlr*|Mbr}H=Y1}U~N@5vtex9K}wYaog z5Ff2UH?g$4xu}U(;9AY}%;szdSp7s{#Db1Ud{gm=crR>LV-p4t|Wkru(UD;*kWqu>dpO#r^4gc#Ktr2qdQF*lg z`_I{gHMA%=n#H-a(itX{gg97x)cil;hE2o^=Z7NtC}M$&IC_szge{uSbP-2(inz>0 zbn6sR<|3N2L!fM}yx2uN^REHMX(CLnxk2pjBF_6qC_;SU@5Xoxx+ips_}E4C?G*7B z7m?K|;t3b=;pZL8xWh%P>J(A!B39&t>R}|AOhmoE6*uwpY-R%?Z6~ac(|>k2f7LV9 zDXTxLqefcHs?sy%o~(`Dhwvq&DY7njqrxM;3SnvPME93#bz3S4BVN8%^311S%93^< z$S|OBbh7CVHpJ3(8NPbmnHDG(^F;0fmE;#ZNn#D0nrf%m{LJv8Z6mo|*E9qWDOxj5+Z{Q$e|RUVgcE38sT1%1YK$j(n{a-Qq8p6K7TJl7!#=Jeq~%5G+nhm zIyGGd?3NnZTjs_jhg$4RKQDl($h54EJ?8IaVeXA5Gm8Ca;ChioD@JD}BX{4yknaWE zqk5%!3yYNN{BO{y{HOTQ$LIQZfS-E*>X+z$sqgN8X8#{7Zs}ydMnLZ98ogOYF|DW$ zwv&3eO!jtksER&`)!BPT@`VliX+TYS&lEaK0()~+Y_1YjZfxEp7?owl3s+Q^TsoyP zuj<+^Q!2YH)i}n6lBhN9Bn@l4(Er z`H$6YuFaW3w>g05>XK>KPOFI4Udp?|CtVq><(Tl6rIOBeMTKQe;}_TB@3$KA>M-PX z;_WZ0hnOUHnHFN)HV2)%IBUQ7#4YjH{*HBR*5~p5TcZ!HY5rKd7fY7UIzYA8+I7Vq zO=NQ8K4n~QW^aq=lFX;86|M-`7m%M1IQe;>lb;*NDfzipPvoaPS+{-@WnMCHvXW^* zhON6^DbtDtfwOEN7AIhK_7N(`v8VPA9~vaG3RSVmS5&(nf?J*R80U6kXCBl4g+6r zYP46i#VR)jtk2_Q?Asi$8v{MY>IwE4Qq<3NG*E`M!`PIN2M;!9_2lxI+{7Pm_(yfgVu2WgTtb$0+IvP zl;aOULSZ_}dqQ}R^6peEkfYa>##4i)BQCciGb^^|m#6w{PsCoazOrX|a=`ZV)iiiK zxw}01URiQgdD8dK!Xcns2YGBypG#ahExQ=KL6xy&ccfoEMQRxUQm}q(cF}TAMhwYJku$hcTqmsalIv2L6#l z97EU|pmKmZ0>7N<75WP<5gxXRWT-QOmZv5ldAsQG4{~6xrKmHDQgZ?k!{q#HFeZ*-}{}=d;y8JufE%?8K z_pd9y1Kx;#2QNBT=jPHTL)z>)Flzi`SzfT}-Fz)VG7&qC@2qIe$Ksh(cuC?0|a4(l0&|SgbGwGtG5$01@#v8w&dzNT9@a zALSaQPUSsUsnXCFyu3!sPidsd_Y0bWqkEfJe^n+9b@J~IF#ee-JOwdT7elTSRA z@9!1d*`*tW1|)MicJM-pCS~=X-%Kku`rFMRIj1NQ>u!K!=uW2q#ecUo;>!gp5#1+p zED=qS0)7G0l72@$E*0ye^-q!&Ca>{@6FdqIkU#WNH$UB6#D)D z226@YquG(~F2KPTOm|D5;dz4~^(-2*|NH_nq5wK&vOdD3^*{bg=YBDHxhu z>?he%wd25PAG2DRLzAxi6&&H6oej6;u!631lArC|VM6+YU zXND?AB|Eg|o31?z)ZYNWkJ&Rs$U;~8>e`0cMTs386|SL4THOoLnp$2hq0$U6x9Xwo zD&yUvy69G*+x6mZ1zIWtbyfvupl0e z0u+~QP)K}6kg)k(h_LO{kalkec8u5RxBme|NawY$eW&{04nnjELSGs+^`~&gT{n+n zs4W)r4Y5OM?2Pl04YS9Mh(4WjGP|s&jT@87sT%F&tkR*(@3ZP!vB}uLGys-v#~Zfq zR5)x=0y{$%p$nRS*QU^q(C&|&{@}lhI}cVBI6b75J3Hae%vtyshQ~0?&UD)hU4V*I zs7IiJX#elaxU|o@T=x2D)ZtuouxXRZT^*WKhcY)Y=WK}mqfd`GcefG@!*zj5c7Jsg z^?RSt(i0&a!}U^6Gm&|DJv1|bq|8S5JvI7t&r7br9qp1UPEPi@ zq#Q>wMu;mWl?MWG6vvc}^y)>=k={aW_aB*DXkW?Khc|xEW8}aOMkY6n9QfMs#!tJA z9Qe-2Kg%CE@b!_&MM_?tIwgB#a{0*Y4@X5GeW$FkxezPM)phAtgvG|@pItFB zS#3k>`J#lJ^ULI1Ma{k^p>YW!BAOUsFr46^ zb(*W<97mPbHkd0;OAZ334@M=M@jd~K%ZswhN;bIzktvptD{=1lTQs$V)P_(~zM(hh z(z23QqKU`&8j~8dWVAPETUp6pqltwsdgxEeN?wg7Zm{T~FO2qv?jBXLd)l;7$=5B} zr2!O@0p$#r3@A$W&9r?)h#M}UG1L8sGP3N?3+U#YuNi3V##u*=q<+wd`VF=0J&_qb z-=x-k_JfW!Bp?|DdNc?C7VTe>Q#@>5uc^DjoWO zzlbKAi>S6tcd26|c>Pl1sbzd6u4mJ^K$gN#BZ_`F27x7TQ%9$It|@2Mty#mU z0Mm;X3z5VLaJAN?64&*~svNATks*jkAKTj1nE<)I@ucz=sa>e5Ocu|$ z*4nASopD?vIz`p1DCrd;;%wjP6hyk-`~dujMqyZag#fC)17C_heRk0gF+4DoHe7$O ztPiE&S~s8DcU6f%I90DyuUb)8UNl&xfVfmFw+&iqPwxL=?p?sEDz5+U0Et8ePf*Z! zj~X?o)!?NjN;E;x9Sj<*mw>mlc!?HUgajfACY%H~9*#z9TU)iIwYIiuYpWutwcIKf zTe^Y>&6=4te9dv+ zYx$DBG|EGVukHMu>NOf9tKnD1dsfhwu%og!d`wa}Adi4=e$5N{v8N^%5^H!%&~Gxa z%-Cr@M@>tP00NC?>YVRh>>~veo`_R~5k*Adhy9sNG8;-Mfkfo@BwL%;MN&}`1IXr; zqbLU1WLfg3#4X+?)I5F6D`6x`Z?rin)9P+qi~-E$-S58;`$LA?)SH-B95-yU8LY4| zbF9rKvN3Kr+omLbMK^53gCEtnH_visnHA1^voZo}wy0hFsexqhF`gOzUJ_$@Hr znbNIU2N^=l5`(>e*h>u~(`tXnj~u9IFYRR3#EKk)GXHJlC(?B;Z)F`u$nXPqu!g)2MER%h-7 zYX2L_H8@=Efr?{Nb7iK;##qa14N@j~tVyiI+QQtxU%W1s+PfcvGWvaVHP^Jq@1*?s zse|qvllWUT_6E9j;(-My)DIg`cxVE7l^O(54llXW>PIJY-;(oBE-E)9Ci>?Vx3RaP zWVY;uc5S1SFbSg|QSf|aJ~p3xo>75`SA5=Xxw-w2Ty;fRB|%m~%)Dx|4O{Nyt`DD8 zN?g~esN$LgRyr1#u+qf+5ub%^MnLN?A6C7FiM_&MqJ0bbs)S_RXIw4h!n@~C_yxWfu!c0xhP(3}* zCh*NDvL*CP_b?0Y+;B?wSm}PuGcG^(eSSNC8n5`MO;zpGTHc5d4K?HKHQmkF$g`TUmS5Ax@rq)DFeK8FfR@yzwb0((m>*Ms#xPQ^ zbl(YqBn9L+=&I1ScHxHST8RhZPV%dCLwS-BGmJNa%7u?gq4?r9r^? z7bNEjop{9)vkb*NP}IE#_EDcZY`&7%z?x<90;1flZ>)HJM84!-1te-Cijjt08xyj1ZkV-l~0TBz{=X`#;=U#Lk= zDIL@P+04B25{(>bz#y1}VcvABeBQM(3FlLNP4e78N~(qDc*T!f)y7)FO9i}xBkMH( z!lNMbjjsEjG1e&FqEcv=`TRgH# z1^v>(n$!fAh`(7dMqBgQDaNE`O5qq(>gDl@eumotV-kE$TwZ8a$XO_ve~sY`vwH2A z)Yo`rCEz8k4>VDk`b`bud>zj9@ z@gjohl+OFcfK_$k-#}pP0U!rZxH>f*8g6uZd4Qzm+7k;Be@|a4Y{2@Gc*Ph4ynpqI zQ3h;G;`%_ryHtsVY#)=l9A)VjWd!@V7YsH$aqf3Kd$b?2Ctz>2>pH8;#|N=?b|VoP z@`GE2`9R1~6&o}nNVA6-N{mN&{L5B){s_?PJkVNKZ*Uwy)62;BzfpaBydq`b2lt|S zy4`At(mM~(8G3JDok9HX_O#W#$8Uz->43uVijxd7l*y93GDC8^)Vep-e+CGsUMZ^I z8ARpERPFe_dX9m7S+d)PnQKAk=0|_`GOw|Ey63|l2Bfn z(V?%OwG$Arr_L$3hA#ZoYuFeVVEvkZLVr;CjatLP>eZhT_reDp19&RT$^i#y(}l>J zW-@i@zkQKS`z%X)BdWSHHPaNyfR9{(wm-uO-S=!Lu}iv~EWAazCJz zk=;!)T1Kk38VpqHe7^Z@Ew$;ZsMi&+1|p*;tIlUcTX$ zPWgmDJ7P0?-%-}%@}rM*wsmbyVu|~7T_2)@ZPX?O$0MW7!p|d{cyL1GxD!|$`0v`# z-U$||yes12T1zVLYk4O@6M2PpU;ibQE>=x5sYwz!HT?aSA+g0>WADygVei}A#o_yT z;rFxceUm%G-WR*C@~e^e`0)2AOW))U;aBkYwfDttukd|0e%bSZ8_C_vBT*>uIo`-q zhkNxGFzaks;641^{yX{OD|-8WS@+YtgX2{B3{Qv?+SndUU%8KX?e^8WTY=sAs0SSW z{r?C5_MY$${oml1_xAlF@xouL7^QPHA4aQ}iA@D=Z;iO!ZrNo&2lwChTo0H!Vi)uf zyfT9)nlS7F$(FW|boa8o%5@%RM~b^%fFH^br6)a3-UYth^afUryOtUvs1^$1f}Qbi zEb!=RnY9Zc1s2VvIZZ`D5{XdXGLlG6tF)690(fVyyNlHk-}}tzR0ZQ#cCK;{KS*W% zE?m{v1OM3UCpFFJalV8Mx!Enu=yyeBnY}Ja_tQb!h38aNPMLA*{&_*-uff(gwG6fn-|qYUgX@-l zp<+WZR?Q*LffEjIJCeDRt^V?73LmG|60olVPT@ zmb}TfavX4U_Cb3QfFU(JUz6}kB1y2`#F=Vg%h$mq%Uy)-b=xlWP5_bz{!Lj@gZpr5 z5mn5BhdF#%CSu=8xOdO#%Jz^P?AbLsReD|-A>@2P%OSQG>KHvfg1OkT?k)*MD(|c_ zLYrCklu*q#qj_&O^?182NR7=^(Lz_CZJaQnEZ$s}(|Ccoe6&0FM5$DHm)cj|N`N02 zbX2YvjXFe_Gdh$hGIGkoZYypPlJUiGL1J{<4I$Ld<;n=>0PsiHDhHYGaGgKMuA&7r zoq1~}^46o5c~X^`pUmyWDoBvTc|&7LMW8Y**fgXkViUNJA)WuI^c82>ELNa!R9SZA z97;|Jb%=Q?@2;}Qa@fIO?y8A$-QhO;6g?q(8-Gn}X|cK3#RyA)VcPlst9| zV^2w3?klhOaYe)1s7@vRrQ8GZh699~dq_!?e(+`oe;GW9_*uRh!oWf z4aF7yE3!orCz8C8w?iuliof_?%&c!))%5jYtJ+pI_NOm`O{h^MrST>7L-_5!Y1RU@ zQ?^gjz7cg$SsGs`zg@TsIzYC#QYDo)_B1cSZqkoYHE#mNfQEKOINFlX8}X1qu^5$Cm4*8N0ix@i2d1E|WCGH`der{^OW|I7%6 zXqcZI#6)jjt==j`$^QOm-uo!&f<8K7U69kg#@$Ol9;!iR2c2Bnri-ozcr_^>L#mcj zER~H?P3?2kueG&QdL<%Mx({GBmzIxNFOoJC5pHEoK z#-9p9ri=1tc3#C9It16FEH z`gD>+F%jw9ctz)pYRRdPonh{Edl@9p5re8t;?u7wKU8+#5CB>Og)ZSSz1-@)DR9-i zbuNup%(v3JQ99^+Ty7?Jg1$V|Ey~I2(&U|5KN*>9)uQ9bM62Ga66;x_964+~3y@XA z)-pto9JX{+Vl8Wx1y#e=k4)UD%x9$r6vS8cLHObor&v{2)o?j2GKuw1XF#3V6oQ5m z6oC&kuq;_yRz9|DDk~yYgzo7ZCSU6H% z^Hko21CIhWdMlMzzWqcVrLN!jqZCf{eWEsMb0_xII4Ogk`@bMXWstfF1;M#tltKVb zifeVE7L6rDpO_ibPbHI+i-Ph`8wYC*z5LTDyK&mRu=9WTThRHUP$)6OAc#*dLGkul!VT{(UK5IOwaZr$Ct%4go3X@aI z%BPi0VGP1t!0^a-x;CWq>F)RMQxkV)#itXrERW)ykaIE&{Vdk@qdR~%poC*okMBm>6bh$8)(mK;$KUf-o^F@_YQ1xA;m{B;I!x_bZ3 z?7Wpvj>k#`{bQlKjEBxeL270pspsou9{TTFLSi6Dc-PES>)|t1@Hn#Ay}0p; zmQ1dyd|{NXwZ1O5O@C$5uI+fmrOFg*A7;coH95L0aUM3#2$XD<|FXM%IU7okK*=8G z6W;}1kT~16Vxv#@^{Icb)Je*U>h0qb%?+J68?G$YH7K1o2=$wS1li&-=R5XaPQ z=VK7BmSTJB`vbmvZE?9)Hl&;TY$1@w+najd7Wa-4PWGP*-Aj5a@NboFmEJy7wPbu& zFLWDT*uCgp`z^R7@j6H@r6nMS)`r>PQl?55@SCbidGb3SCQrWd+@w7Bqe7s(jYJJ3Xe9cUQT*mgcL@n;ZdXEa z-BjqR_1Uzf4Ns@p>rAS{A7Lf8qz75vyz4)UcvQ4M(7m=&8t&Tf15cNM?l6DcHGQFh z(HF@+TCMPADB~CvYgDMCGZ=k$_g}l|yY2d&(|41l?}ENpE$B_(-&*!w^sP{~Zu+LO zc_Q@PUwNYR%_pG;eYaw4W$0Vr(%QAyP2X4SbtYWj=w8%wB1_*nQIFMN(RaoQ(YOEi zvh<~UNW>ZWG|@uEhx=ADvz%V?jVD3l3-p}GY=HfKD5H_Zfv%kn5EhNPXmNMc7(Ww1 z?sJi?+M%m;U)@*=yKjD?>7Q0Av!LS@P1hO64mMo|96Bc`)iSncC-w1)$F5PPIqY@~ z-GBiXXo{<`wqKGKuQWQv`S+OW^C-RtXK=9)gvm1mGN7zRc*rJ+xquX2GWed78ZF)#*?kpvRSA)c^ zG%HysF|#h-dt7YZmfj$}Mka_3dUqPpGw8X)?*?9lb)pP2`OOkNFn#4js~z?umnHL) zwYe-(w-MAJ%i1Di?YZZMGjP*skeCj);99k3YB=*q=FbUog%$-s>+|rWV?pPBdN(pL zzT;o~&|`0-6esaek$^)#UTfeOAu4V76e+b{D^K!=zf;TCc0MUSg!_`SAJ^)msJ_DI z@@G`C8C}75pvV_JDbkA`GrfGnZ~5c=epcw4rN@Q(9*R0W4pBdSw5La@M7=;XDcI*PO|3U*efj9JCKn_}OY6tlenv{X;@c+R?Jc|niE}A||3+5p zMIt7(LCi;?e!SvrWo#O%WcF5jD)pr85c8R<4RMRA2Aj~$GC&^I2#BX{O}wJ(YJovx z)fFlNotC&ax+LE_Z6skv`a9v$)fq1J;!n8W7|l|~{pDr4DpvG`5ob;@ zbansQoax&l=kZ)-Mz)+kM8+XDV&u5LC>w{fi}aFDF1HUcOWcX_+O2Y;y0Us~e+z*a4q`{bes`gR)m-8V%QzmRWo z)~+TOy~>|G)#RN(g#~^yio4E3yW`+AUv z?EtdEKxVv#Z@dAh>4JClF5uCTYcTtsf5{sD#=_nW|4;&85+rfBL-39fydk@QS1NeT zZmNejcL#X)hwz$>if0PmD-h8AQ3ZC=-ZD|~G3eut@F1_*0pw@{8Sd#5mg(04*e0mo z-UZZ3Q>1R~U#-=DeyVq?w}O{i4G)3$1Hn64@DAMtyg=|uU5kgedIxyF2;o5;;8hFW z+Yr#LQGuPbx>oSYT&agwxC6XPLU>RIc-wI~xVr`K)?L7>6TC{d=`YsaH4A#Tw|@u^ zx&ZH&f;Up|PS^#!dcg}^hlh9G4)C6$g+UU#$KZ_T@j$Oc;BzSdh3yx{J^RrL(Zts2}Jm>npiVG-2mzgLf!s-}6D^jNk;k3mp&qsa)NdJ7jbcKyKp-C$$nWg} zq}L?#iUrzzjQKrC=ApbW{qs zUL}xS(9^xI0y{E2agWtL&o-mEQ6B2_9iUD$sD49~0p3%9e=fjx?gH@q5U_sT2l${N zLe=BFiJ@*vm#t~a9Bhal;6fE*x@zYxf~3}iU0wJu)_q-AbQf)UoS z4>@Df_OcI-mwndbJQCB7viRruvGy;83U8G`{ArfAv3$?S)d|sz8eWXo$H2gjkR5>$->w9!?iEh5V-sK%GiSE?WmBo-r|5SG6TE-gRR4T zJ_nLMnX$Ko4&0OVpzCPHvk*4i;I_UUu?6S$Y1#g##)6j9|E!yaaynL2=F=vQ46>*C@15J?+xBc? zlc!-vbT@pN9M9R@v7*YBh*Th0bjTx}A3pL%AI`n8dhxu8NDuj#%8Vguf5C*44-XfU z9%#odhT5S8_V#Qnu%#BCx3YV(t9AT9H+emR2((m;z61k0)|TW&i8t}3`6#^Uw7 z2B`s+tm8d@6_LpfT8#tZt=Q9VHkfjrVhxvw{ zu$8G(eoI2~pw}VDZd3Ym`1~B|YN`0_B52xp5UKqp4~TCc*r-p(@yYt69r|dgSg%Y3 z?I2ioX1?3~)Kc-dJ`)^`%GwsEC-C!p-cL#EW1GeBETTB~`8C47!+iKbHKvDuBV9qq8|NMCy`Tm z|31L$&b)u{AXP{w&8Wiia7DRH%QoiW)xyUGrP9o%cKBs4u6mqT&6;M*`9sAy?wRNP zQJo@nyR!7vP*`XM$;4VdYdXGfTc4Ii^N;2&)-Kl!Hyd-umwvP{!u@I%jClu{Glq1F z0u08t216!^Aq`?k164E&kIdE!GyeTg4lKKI{ zfMSZ}yVKdHr;I8udFP9g-?pQdYDaweBz$4rPYm`p`a|UwQ}Psaf8-cwBoovw0sBmI zO4Ye4MP|n5W^k8kWQv?sgWAd<*(+oZ)zMP5pQ-IIx7H6+7t{u+%Y@?(TkHdyk&>)g zs^({YkZE#jbHVY5My$>39N!cRRncrMx`0DrYN*;7p)UN$L@S1Yo_ORhbcdTvW+;0h z)d)kdYpm*KI`S(_I)p1vY-bD-438Q*nE}a*q6dUGVET`uKvVb@Wat@U}oTjYCQHGnRZvBR37dZOO7rAOg<1U5`-UD_g+7-UcOfU_g) zx0uvNqzaH!_K##bdf1bSGB=$`wn0O(-GH43;Yv`H1R?JdWq36P5l(bTEUsg}nR0GC zixtlk#?O6BU}5srC6KxYIa2B7v)BFq7x))!b7(iYo7hR$^^vcj1=@{ULLi0D@j@^uiHcLb&Nkk`+;ULQpGNfJy zdFG11Y((b8U%af%&HZBW$CVC7 zn%cGeK}U{r8h49t-Wp$>tJUrXox0|V#md3Qa|EG}oqihQm0(SI-Z4tG$YfQqk!w3T zI>t<>%2(8Yfd+imKe5SqrF)eSc8V9t(fzF2gj@ZdB}x6DKA3QUj9*R=krL7*u{3MY z6{(@Af$_0s&9x?TVh^m1-Gxa=pfDBig54)J>vY~s#N$UBXsI&#(u&r9&@PR_zGwLe zL`(sK#1B@I8n2jAW9HRbdRzQ+$aR~#T`KniYJF`S(~)gBnyJ`U8SK@`7c%@CUuKz4a%bt;5ir*F4fJe$QJKBmt_vPCx|?SJrQ6m;x=yDm!5t0+ z_o!gq!&6qPCI^mfJda|PrLhGqLn)A0y(HZiZjM^X_RCw5ot!C0CG$3ozKH935_uc> zWe)kygYeZziFUZr5O?V?8`MF+seS18=Nwf2G$5J`eUp>6{O2q}MK`5oK-DJ2^VwGN{ zeF~u*rJs$y{Dv3z@?wK{{rm_&&C8zy#86)tIZ9a!cBf11j-s0Mt!!*?HIIh-dkIfvT`HxorkUgyOOX(`cX5zGm;giGJm_ZN4jJ-HtS&0(#P^AF=rFC z$*w`QRnwjCkoK{6e4Na*EoJGJ!<>$#VByhsi#%3A;83Okoc&U-e*4FfiwoawCaRphFT5CDgBE zFbf*CjTb=xc(7*EXa(eMcF%NU@29{8?4QN|)5Lt`qKr$e*LYp0k)ek_EvuNUmuUFP zY}#)-8~tXZZksl6CFhE*@$Ijp*UoDMDsgQRE%#_II zb$&3GG6VmnA9Zu>HiP^5>7VeRk_%pnl(fwan`T(aR$p>*rlfSRl^hqAyyMMC$$eGl z&wa@ge92NP$t+`}m8{H9pUy*k`yR1&qiTGiTGE#dUafwEGI&our)A-jfI{bI5d7_p zkuE(<)tu?8+0toEds9DZ+71X#+o5EhFS)>%{6(hZotdW1H3avJwaX|$=^CklZM(8} zjwVxhqvIYsRCdoTM#pMj*=d=|Mp`F?1E+^2*G}r)z$<*om@k==DXG}p#)0egU>A*P zBZMv*i?vFD8Du(Fe+9OKQCa+*FdkxyT#gj8-drpk$9Gp35SQo>H;-Y@bC`UT|q zsOD(&c{psj`uj|=4zQTXSTS_Be7n)*=%4W+o2^{gvTw)Q8@WxZ9NgnuOm9hl$)AlH zhdg67)P52X(EVwp8xq!R!8fhZC`zc>1JkKUry z{^Dt?_T`TwP^{V)85}eQ_-ZGq+C5e6XTHFiyCVgx+Jk#kdx9!T<$ZZkL{5$ocAx!J z%jGRMqIr^x06pigRF-vE;S^JYck|;+5qcw(5tuV9kcB&-b=dkjgOq7W0)b{&mNdAN zQ<0aWqb~>WLX!m7I7n{dYfUvjrB!xQ6wU|pB5>Y_zO3hk+UR&WZZ^--uHIv|s7PtQ z!z0kq+duXWU(lyTYNC&s2`VKvqgl)+HE-5Wc;K8P@=~B??EztxN%$r;Oqd`&(Zo_h z#i~kKIE;#NP2kdD253tXIl%-L6i7HLEa`s6lnQJecAP5|wyC_Kdxk!=A|8NTl9ky@ z0Iufv2xQ$)EfwQbVbdL*58=@LSf*xbFfj(1;jc?uV3%wm_rSMd?w1)iSeC;*#+Ru# zLW>By-60E2U}i+Eb2D8=VW7|y=tdiwpR-)kt0Q7H6r#C9$>qj-7>lE~JrwC{>wF2_ zp2ABTay?4_8K2vqvYI};CnD#D&y(0#S$rH_0(#zjegq#A^E=4pR(lxxv`4;{3!jgF zEPQVM*8dB9zFc56UA_Z8M@I3f^Z0xj9UyI(>-q!uoaXU)X=|iS7WVJ!hEL}WJ@Dx{ z__tKtf9-il+$eJb2-W_QMc2>OPU#(Q<@|zQ>(W?wL zgdwW~&+saP4Vk<9`TfDiovZo%20}@1K1)*Y{cHT&wL1|z-mB{UsRx3XJ8{a1 zq9APdKFc-^_bk7khf3sY`BhZWNg_Z$L1eL%z?sHhx0SsH2E1*J*z1dETE zK#h!$GsbePiplAe$@F2IP6s!fV|^IW?muP!Pz=^{dMYPp!@Gz5b?aXbYb-vfb7@P( zz2(w2i&`qaV-JsQU5Z(e)A&&53rL9^9O@ChrR2alq<8DG#9BYP{|~zqJKS^3$L+*c zRsqqNQVC0mgr$VW zgcY@i3tyQDUfA;sc`wpLR*1vts49A3HiqjI~PiV=!eFsw65m~t^r`It(1aIIR&}9-mdDRR8xP0(mB6_ zLQE4T8zdKrC@QX&NFvaX^->>#f4ks6^rBe zExpI^`@jEXm!I69bcY1=;A;@jx=0u7)&E`>{d&yrWn-cVAcD5aaNuL>=1JcU)KB?` zAFO=sv~fD$RmSnFTZVS0-pqFiErq~>tIj6?==OXBSLF*T-U>1w(o-Lx0 z&wb`R)*cT!oh=?`#p2($#DR}LOX5=l#s$xim49O0E3xk{B~Vy(VkLLSwLhww%U_Po z`56xi4^wIpUpV%qKnp*mjQCk5LKkV6%9=UiaE@DgVuZuB5}P9QFLm2sb%D2Rn*M$6e^x1^1y0{1)4D@Yv$0YU9LR68%|z|fV&ONn0Q+ZQn^u22KQ z3wtM&y5qArQ3FQIs;SAAibA?&PU9>uh*rDpUz06h6%YNrZwOLKq3}S)59JMo*!>~) zcB+iUPZYUQ75A=*5_^zOJX;)iYQU9gB#x=TZ8=3E?Yb${u+C1vA)~i-9ZF*Bn>m~0 z?@+#Y7rrs+G@T7tvKhXHod2cLJm;rf!|6-7{=U9?u6H01Aad6tAu^baJ)gt%Z(HKP z-#=}LjIH(^7Bp&zF6gzcMOv5o784Jn^>g3iy?jN#d@)+l zhkdQ~3w=eGbbdF|T#odw>ul@Y)=BieAax~?ir$E|Yr9bpd-e^ksFWmbcr)0riEF-t z4V$yAfA~MPzMlGPQbX=ucwWv3n!mSi{uw^?IcQQvM6(OR_9OMx8{QvNzP1V)P)+p) z*WGTA9hq34{#cCON$X$lV--F8XMxOC#93Wce^I8Q&hOTw?h?DJ%hyj%bO6Y+d9$&( zNln-3*R`fe->V_UPV6^p2+_GFsK{xNSp8b9txzYQHjyA1uo~V}cutS9%JLq1%G#QX zrrHLpkMybQp@5w1VwU0t7_Ptog((a}b#f&o_oWr$4x#=&Nngn^C z->!d9;n}?mOlnejPyeY$Z4X%LkgLMlMs#-6q*{D~7f;D2;9vR{8mUAzyt;LhHQd~L zYV|AW!&RALDlJX#7e3O@n$vseC6)KWFb$eJ>+vj%%@=VPJHpPM%DcQgI|xjEHZusU zoXenh7FpdHbNl2hQfu5uJz3f@dTLc#DNopMmO7Ycu=1Jri+uQk?U4FlCBEb(Q(|-Y z!N9*0`LHTl;!pap(bw^qec0&hcs%mq`{4(x8UoF?!gFNU!!efX$STRuxVD&H|o9y1=zR?IWk_tXQmVF92T? zZ?0#UdS5w{wI#M7zMK~=pkP1HHtCc^Z3B&AN?TiK_g)YQU=qW~iJW;VF_XK`x`08u z1qc4Cs)}l)s(q-I->ie*^kF~>p$EWUDn%6AAadS{OkS*sDb*> z!3V$7_o#Lmg9Vo%N2f=OLFB0yKX3BQsOmTaNYAeDOv z+Ufu_Sx%(}NR>_E4oJqx}2Z@WJ?Zx%PPq`*>MSZ;Dh~qSGyXqRuv!u`5O4gcF7m< zZBn`@3@MUL;C}o7C zVfKD6LVv$5q}}u=hURj4ErhK3GWzqudbc-TAhT zNEH;mJHMXpEkgS_mZwo0yCyr_87HtP%hsaq6@gyu&-3ybsQs0a&q`HM+tyc&Vw8|r zXm^%r$Xua|rn#@LRgcF5@x3Kdx zh+=)-yzf3bT%Dr1x#ysu$W^z{E1XT%v+Y3eT9u`_B9GB(+9FkeB9Z)xBX7bHy@8>n zTL_AI9#>MJ>O7Atq=LiT_3cSDu2rPk=XglPIiGG)*^Imwy;eyidibvx64)AUf&sq| zBGg??@qTl);{CA(WblEcs@)631{7=48p3!R3xUQ6(q9NXM|-|x0e_*EhH)45$3p0C?|bD zR6Kg#6cXz;IV)HPMZRZmmh3-&NDThPfTG zUy~Ye2KPtCX05btwQ#6)tNy$MtzELSV(~$eg2XmDRvrfCy1(m#x)u?FwBPTCzI(l@ z?&S|^HP*)#$Pz`$8+`XVH5~R|oMGJyFS-2W8K`Fen4IUcS=Y43&R+_dS{bmLY%DJs-!f>psjTDVnY&l#e(@{vrv0sGU1;whKaxY76!mz-N<$B-rHgzgK)d$I{ zBBRXbY?aVO8_m2tF)jupklS1auBi)uC z`1MD$05z=t35%PyzXIgzENKnf4BU7&S-4R@w60Pc-6vtj^Tb&h6Krp*AnbGh#1Qtq zuahSlQoKXS6Di4uUqxdF*edJ(eCTjfj-r$O$agXunf;&W_*@X1y_Y&h`~%RPh|JL6 zP_*)mC0WVW*7h3<uvcU5u8 z`N`b(Es!(u&l?Y9Yw^^5t6R6_K<_C8dipAgE_CzZ#GH0Sb@|3AhX8Qucoik|RWWV( zd0hIm;J6dU^x+1vZRe(jzi+{Us+YXeuR1ln^xVWPLvlJF(={mhM55=iKpIy9Jac~Z zJ12i+Y(a^?)vcCMt`0ZfEyV$(%grvPJa2np`_@R9=zBFlCXtLyGXB-SnRh!jV+5g8(zZk6C%e;$*7zu=PVWzRvZg+BhnP}$F|AFQ-C zKT^C{zp3ySTCCN3yqP0IZFU8+j&9WEx7<`bAl9~r^n1AD7$p|^S?Af6M_P=804Yvl zXl(R;`~eIoq6x%Nud>k%bQ@~ zW&YGXYLe#^)bv3x4v9Z&73IY4Xr?Sd;)qpyB4hH*uMm2LtK!*#p1hGLnC!RkYbM^T zTHjgq*|I*3e?C8TSstM`kEkg>dfMWe@@w;_K3$W%wO~viE+IIg^VeJk5^K9$W=SgV z>VJAIuG<#S;sXb=f+@9K;F8?>E(XDy5Ya4Y?RFqfx%3d=NEt9NJyF~O-a+zgG<+_R z-(}4F<&XdB(v8UlW0Hy{wrg;i!XB*jKy7%__y|Nq;**I~VIv5eaWhMeu1`3>FeyTS zG7=DCI6@;)$msOZdYQmLx2d1n6a{NFIj+IB0iwG_K(~kAGB$t^r)7}LwVJFv(6i}6gO660Bs#xuXaO%}~lC z$Wt{t3d#=&tE>GvBW+@~CgDVb5N8t6O z*EJW#o|=julzT}((Lul$r{o3YuTT3cXL~wfDyOoS_2%a=&rc*+lW^>lQdNk`wi~XD zTVKGfVe55^=(vD0f_1Fy$V*Ces&REJIX1qhZcx(JFG!umHw1k5t}nvzmeHi7bA=Ms zbX1d6(fg(c%uJqZ;>61Rm41du;~2>?e#$`Wf3349QfE_+H(d=vk?J%>knt>NfRsTV z1Viyc5kbE0%LUOr})L$F#31K=x%#2 z#mKCt*?p(~&=}bI!DAwC;*nx=qceotFB)W_k)3_ZvG&JowA6u7CYlTgbM(##-l8hO zr9qb9nhRDnK;fVII;hDbBZJ=!e`7lIjsw>IE-B8q}`EaQAFG>UQp zGGE^_ZB2L)s1uTmZ(-HYzQA3dEkrBo#0nrZM8bME+p~2#vFG}!YDh>!!A)fba7ov{ zY!uklSDg>m@sjX6QL%$^UwYd9dg`EMQ)42Lk-$`8kp?Jh3{t;Ok8fc*c-IFBIH)si z2_&s`iQhlvPyf;;R?2J3vWG$X%x$3_ZG%M9?COM3III>){&WicR@Bd$SH1dS^J8WP ztjPQ===R&ARe4`NbhvqE(KX)do)#sk98ZAVil^;+>n%?HhPMveP`>Pz_YtgJ z#-pT(HhH!Fw0;0BYyDuZ$=oBwE&8QD={GWM(55?Cw;O`i>ET)MTU9VC(!X5{rm~RC z;3)qj*8bui*rU(sR0Vx;k_>MhgQov&R7wHyqq(edlYcJK^A`Wik@hx!`=qw|t*Fv~ zOj&y_jXdW^o(ui+d34&)GH>1fI`Z07fqp8DKb=o&z~XUi`1sSRhnJtrpbz~d98b|( z@~*XficimFLx}~4Pws1)qsun2T!C=hyiNU)(eS0%tdm5l@-t#{eyV*VVTI?Q1R3^9 zV{KEE8eb@gL^KWq^85WSEzdo!RA|KCmgltkz>BTkCr&PQKebCb!s$r3!))D~LHWR! zhqIqx)*C`KYg;2|i%@Lx1CgqZIzijG>4>V?1TkaY+SdoeZk+wPNF@cqmp(FDI=;9} z5ZtCSq!~i#Xk9L0LB>IKj-l$go<5V#^!#jVnti+t36P)0s$!y3;v)?s0&}gpaGQ{s z)9Oy(xhceBlC*&YMWYB>ICCGV9ci6eDJIm_B+srl!<@MVcYw{a@O^Gb!g|p$(etN6 z0OW?>C9=q*Qj1>iux#&MAL)f6gd1YnGD?7)PxzcaxIB_m6aN-t5hF#+~>K(L+?b1w=nNbVNodA)x&?&Y(+Ox6tdqt(vJrbk$@D)dd8 z?IXvbmDRTCA%BC8iSZ zg}V#$)WFgBGPrO0Ju@}t6)#q5BC{lZOyJ8G%Bm>H6lMBQsWw~QV-HC`Oj&pSY~xtp zzefms7{J_AQ9hZsri_!#!s+MpEaQXIA{kN4+}}t>H&Q=`d#tFNXX$pYz2X za(0l@z2FgB9u;o$JbrS6wRyrnBNZI33SRafPP;eq!Geq~=0kF}qzj`CllgWN8uVe{ z-f1&nci$8#V+0%!Vr$w&|b_gA%>^#QpEtWkqKM;?mO)B2>!ldD)4mI3ZE zpKryuNX15`?~u>ED73PigIu1#?yDYM_gbVByN7bze3 z3HaIK7QWRaN8si`&+E=O^)0(8U6;+O)5$%9bM!vDbJK3=tx0}^4O&-8&tH$8$H7~Z zoQ$4-!t433#0{yhJP^Uw^!$aQE0mj0ouWkm&A~^eTDd3rotH$)PDGjsLTekH+TieZ%Y$mb0huP{Z+rvKF z13N(5ENr4=Y4tg;+ac#d%b6KP#`|n{To$R-Qspj#4Pv0}<6SI$T1K(e0Y;@L~!dp+F61EG1@F?%HP&np9pz^qg}MSh$(jQ3q1K z&``3qU7Wt5$1XXRVexKr-n#F$kTI3_%%%vc2H{z?7Fnz`VqU?{JF*?K1Bt$C*_cLI zMTo>mPoC4M=&i`>p#5K2>9&7kq@>F?0@*s;jZ{9v!&fxkjt(hb^8-6 zo(`9i?bP2E=N_)MZ}Ks7Ci=|*lTV=R;BWy&=Yj5BEb^3ZjI~S9v^%`5hzA|YZr9!i zJ2)L{|CC%U3!mUG*8RKu?M8uM4B_E_ZZg)~Ccel?pkwV1@;6@b{GJ!_a>wnw;4zY= zA~V9>Q>J%`FutkXTAGXZY`jYECB_Q;9NbSe6o(WS^rf{s4_!2wLo<_b|9%>@F3Zu( zVafY_*+W0sqStx%n(@IV2XoE&k#W0qJK%Qul**g8C_;Q&Sigkr*|2MM)cQ8AoZ&yr zcq~%F#*icZhY8CfA9OO!4d6qE``*d$u}Ti1ZsHmLzH4;;0DY(p9XMjx3z2RWz1YMH zbtVMKLfh%s^ieoO$w`HW#}5V1{meW6bxlGErDVLF_L`Oox;MD}swlJITh9gDWca}q zEZE|Us5Orl8@M5Ty{PBT|ImBp3WKi2T5q2*TGbTVVml8d>><5Og|(5BF_J>u=zLnI zFT~e@XV_P}y^ua-RgCPDZ*lRUXVKMKNT#0t6k#9II6+4c$tt&=mhwo*ckTgOJHGL6 znT;Mbw;u% zUtNQemsF~dy5Iw~Lu}B#8uu348Pn&P4=>yKcNzH+wpJftG}s=2*vPHyV;f$> z5<|_gl_e~0#b!TBPMc4*OfM$H(7V>@Brk;H^h&n7fb1QOGoN!{g-^+FZP?&!Gu*oDi`i}dt6$V z+D1x2`bLh$pS?adTN;+NxLUio>DS~+?xlkb<*Q>gtY}}H@1-EK>$`jKkV5rJAL&pV z`ne&QHmH*nAwnJOorh$e+EV8QhQ7DaXzWNnIjR&aA*ifdgaTs2B9NsWy!`^t$0tV&2aIPqR}$;+K0P+E>jS z+L0R9f5{h+b3-tJox!`SCGeHtLQrK@^`(hC9tRSRl7hN<%zJ% zMJgS8@<|>WECWBwi?vOMY3lcQt)xP?~{)Y(>(0dAWnr#PSF=R#!COznh=SH$2!R$XLoBKC$G5|6%IxQ6AUGbFy z673*ST77n^XeB0s3bc{qfIezihQ0@LAfPrHd~jCc+_?f@S$t{)6`Mw!Y8Yoaa*tLX zq)(~5b>EJZvFUa{E0bAdeQ<_l8#6kRO%mY#rsjiby%A$3+1&ok{K@sW+`B`=kGUS^+M7D?Eg(j4)dP#6Os{}Oh^K70;RHykTl<7$iFZqlF@|Z&=C1%Lw>B!_E^*= zv3(}n)OdKc6Cruc)8)9YM?jm9EVnWlA-TqbKBqd8&4lEB5o}|l;df|rTI_hj#a;-EM^cT6wV6XpmX7T>kMAx$8o3bp~!v zf&00@-RTR|O^(!WOS51p@r#poNq6f99g^9^Bi;kTV#-{-ql8Utum*1T;jzN;nw`?G4*P6a*C<9OcHJy3 zV3!TyEeS!jn+CwHWkLB1x4dUV|0_@t8;0eHC3->um=0xNY`c^MTLEe#28Y}$vUO$7 zpucSRGJ}z2W9io-8L$j+oV(D*5sz2b%qv3MluMFpkn;JUt^05HsE#i#sL`>*O=DQ@ zttnr}J-F4e^H+~aa`)}#rgO$H1DZor?VReaC1Zwes2R#dxy!W&c*(Xis}EaR(`S8k z`Sx4bM0{Up287;DMhqiO>vB#`CnpioV%jRj-39fuiEWTMBS@K?PkQ`73lrn&3=JsvHi}kTL zZYrgzoNg+$f{heP4yRMy!qP={Yfz)@`yFnR#hT>#?6x>{+Tfb<7b|0TJsaOQfC_d?zNUPC_ z!I#~inQ60w&|Mw=UasF%-X6b?^a=Cs{j5%X;`pQK6GJJU5$}k-&U|aC;-S;lo_iV8 z8B@j@#7y0?K&ng+g?ex=n-|`urNj;jljrwra_#?Ce{A*&mFN-AAY3P}RWGAkX?MP+Ja<^e zZGGf<(DahE`{7J^i*DtLQ}tELO^2=16P?R~A!H`ibnXJz_hNP3iAY3TSFA~jq|$+_ zFg_fR|H-GCP+|~vJ`!8N$+Us>-)Fg_4}*(bhvb#_C;~!3(5W~B(S4mrX6b{l(xVjb zLGRe?gf(MFnPygWrRoldVN`T$>9lcA7b&MM{^sC^xh`#{pb*PubkU?q-O?2#m_mGP z3fGjY>^10ss?gO95Tk^{6awG*7X$3xsnMCF-y8wP<9lG-3tvrJ;ZLRdAPdp@16*x) zinZORZvf>O7dTHg#^uBYu^T6``WZvN9H-EW0V-Q4)DnuKX@50_CN!!~+I~lYjO%(v zK9nl0NMB2gKQuDm>)lZodc9j3wul^^Pgtvy*6L`33sqZPXRG1X`HEY0IIYyy4DqE` z`)0yY+J~;6NULaHkk#pUb{K_r<4`RdtAp|_Ge)qJG`C+>>$VmeK7*5Jm3=zj6nda7 zS4g9fMUvb@?=Yo@Oi*4QGlN7!C#UaNLAHPtFNk>1Eq2Eeo}isD*dh$JxV~f5*c*r< z@juE1q`FWX)Fm`hS*?ET?tgY-Kub0LpYp9UE(gN_r&qOZZ=u|bfkD@b>hhJ7Ur)F5 zs=*DaW)Wqlr|WuKS9xm+1YTep_Bc>h9a+5979+Rj0<;(Pc6YI=kN_gF3e%oI06UBo zI+qB{ZUL;Ttėh%AnK)`Q1RQmeX~JKVzY>9#J;hb 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ϣ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

    Kf4u9k?>t+_rVL{+}**%8TNR2nZ1m#<q^ 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

    my_hRVMF(4mSgf>xnkt(_Q?8wwEEltCvLc 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

    M4RM!6Np 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

    dAQL*jPLaAyLax-toZQNk-se?qj#iu6UKS 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

  1. 8=Y+V@WgFH`J_%mI2gB0$k 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�Wmvx0-pc8~=oHJ3dbGElOLNR`^oslrn%_u!X5x8q0Ydq>gy1`? zvo35aXDj#`>#lf(?~EAX2kg5$yD6!K#U}fN;hUPelaf!wI5}e$qH=T6^JEz3pZrzB zKL;zAFiFg2B<3@~4|9I;1B|FrpI>Z5wU~&O@}DyPQ-Pv_q3*Osqp&BiXGT!iR!j<( z@SgAxcv1xzXi2~=CLNIp!WnlXNeOV4o4g!Lc;McsMl2L44?!^+@q-bLO|b1kPT+$B zj>HX$8-$Nd=cs?*p(Ppyh8dQG9HLneoNAyfJ&W-)aS_uk;)@>|e9~~)B$SAa(9gaA zO|s6ws1I*}vJgW^^f6HbLR3)PE9bo+@8$Cz#^dO36@3ttB26Dgv+lvb>iwU0qN|f` zPW=aZbZ}CS#^qb)f48%hq#9Q&kwE29kO5vD%cg6F9J_*fxT!)=N9^r{-14YgJi()b z8Pe{&9Y==~wGY2QT zs{b4&5w@adhc-!MWC99!WtI4wRrKL!k$0=t9!B8*R9{0`II zF4f?W=U{LpLY%7tzxi2g5j0K2nHef(aFBumH|aWX1^zK31+>tkV3>NDV(hgTpG)|n%0NfM2N)wi;2=%Vwlg(+d4tPpi?OUW zOFb`%OIJ`vY%kB0MCG08lS^lWSY9bJQNp-^R66ok;LE#eIUG-V62z z{x?Gs=p}E_47rx_IN#%pdA;q z{Pn}%FM8W0!cU-gvY*~J|K29O*8IN%%TzQ+ZQAF`E-2+3mW6i`7>KfjK`{=Y6N+F_ ziFL)3wBb0qi~1KCMpIq9)0_l<=L+o%5sGCu)%D51qz>wTW)P9|%<;CXPWM94t^2O&6WFwa#6AgN})Ue9HaH zt1f1P{0O%&Er#thoarr?8Jl|uwjl4)68^DMRi+)8ibjg@2Ddsb#Wh$Y_FkqZk-;}{ zPkG$3Q^-o$Gv*Nti8q1knSU726PQ_wX7`Xk-Lm-yRuBeARv|Kg($RlH)9TKTz_d-` z%98k1r};ID{Hh?oDi~gcfrc$+NZ0+aaS)L>kInNa3?~@*!y3bSF)PF?PxQN(-ldAYli!JY3VCu*=2zdTgCc0)=( zB^zw$L1D-YQ2-fmMBd$8i0WR+sceafDk&%YgapW9VAh4`aMg_(T{!By&FG`clEV$Z zzp&=NMc$=e(?U?7(D)1xM5g|!kW7_0l8n>>8=Z<7X4!FV=8<~0wW-`~?K-=K2fR)J z!ZldM!Un+hz&Yo-)Y9$h!K_d_7asSd>Hdj(Ssyc(dc>*!n1K)DLkta6a9uRtA0J%Ri?}l6koaKN`@kece6U~sV>M1yA+RL+RkMMm z<7jmgVWsw$*8Hx_k<{!+We=c<4cPk*_HG;myq_JNjja>6SWXRF-hg-$hqSWqB~<_AfYq>v#{~L z?9)H;1g%v3U z8y{1!M?OZu?oPoLMkLtTEqGFZB(K%zzTS>d7Hzn^%xUrj!AX&C4}@D&THu365ey7RbPM(3GWG7wUb~?c&GMPxIm%CIBc@G zN2llHN8}Q8%3&vlXCaYLTOBSSQjBL!6b6=n}Fz zrzQ(dfn>E8vJP`?Ln2vCi&WirplLh7lmg7_XZyfN&@UC;a5(CZ*QDegJR-r|^JtuV z*i|hNjO^*Hx)ai8;XS8YwWncfGrZ?gtM(+hxX!B0!$s^B5UehI7l!H`%<%cmMY4VV z|5tyo4OW}_Gcn`X|GEBLzd!oZZ=~BRDfFl7)hT<$=uhC0z3NZRH;MZ5+6Wg`3PD>s zB_%AQKfixCE&*^tJ_!*0If9V>@959JhNmHG<8M=vW%TEjhe%di`ZIE8qW;wT!T9y( zH>trG{kc@YXzPKlRArj2hInlo+H=}MX}F1 z4irWmw{x&KpV_cI4DYxTshIib#c&b5trdFXXB=@*InQ>cX5v)1nf-^YtejSL)rd&u zL3U&&-lvtQdXUV_wj;gil*{3iD`3$#tDpY`;&w31q{Apa%k3=@c!~SOh*!c49rGLZ z77Bmp5!|?s-!bsS45BkNK=4NnTRCaMl<5RNY~@w(R3jFQI4D!EjW%FD9F_*ms>uW+ z5CoQlmmZi0&azfic4#RM{|rBHGI)b4ID(I0!Q@`;23)}tOm7z|dfTdhSllzW+nts* zY;9)liQ(CF1&`Ch)6>iG*!@E|^?o##IF%HAIP=gFXDnVHmvz?K%mae4YQ70~N+W%= zhc;ByR77DOMDM{C5VRSapgRi;0dqNQA^UgTPxk9L@y8O(XH!ej?M=6+x&K5D#0Z1_ z<|Wp(Ai9$IXz@2}9&VI9aDRC^eYsU&Xnpw+;b;j?jU)`&9YS>@nC;*Z+`uvzeO$p0 zJfN@O2=1aI;E++B`&S6^+4z|vUbN=FujRL#@(aJue-M#XFg}9(who@oOA|avtRD}a zux?iezOyLf=$wUlVfG(>K-lB;wz=vq6Z8YD?3Ref_&?Uoac5=hg?gCnoQqDx5Iyrq z9GOfcYhEpvvNSUJ5?0(0mX5~aS!yzQ@UPP``J^T6NWHRB0{+PErd!p@CNLL!5$f^8 zk7v5gr!eIoPfFQ*v6hp!?@P9M#`Ly2f?&2w1T+0Bs2~J|7B_AWs7G4w-0~z)DCY>d)X%S$t%_tTa~@o~OtqAbNtx6A*lpyVnOsIV!+W!BBF8F?tbf1crE*_O9o)FF&Ho|G#EK>S}+)&%*19xm%w0* zg~8|qgJHU|`c?L@n2id^=h0`l@_8Z00^%KI9-L+)FfpZkLV3mh-$NaMKSrJaCqnMV z0HF3u2<10yh9+t4>AtqbBzZZA$F4}(wuzJOmbSg&6LJuSB`_Q9AO-43Li$W~!JpWA zqtggI0vC8NQ`o72sbQ9DdXDwOl#o;81u#E{2B}B36DC)+FUD1j9*3!+F!%|`n~Pj( zQ$T)ULJDeE=}(23kKIjXdIbA`zk~sd>MOwGc9MH`%6PGs^^hDdUWbdgom?hZVesf1 zFJ6py_Q_73%ojnNjQgFyp29T5eNvW^IGr)1q^$oviStLjONgH&mCncXydE`{fsMEL zA^8nvWhzLLA|#lr1dKoGHDF@j&=`J!*>5vyJdd@I95s%V3)sxTxQMOdYrS4W?|z7) zL~qm>x0f=XT0`7Z%t3JjRGy7+i{wY6=VI-}rmDV@OD;Mms}ctzxVa-86-ZW_lOu!C zpiVpF(wG(6k%N(4>G|51%&th-Dv2oBvs=mm5I!|Ms;XWEqGeErB>aA$9jVz-#&`yb z$bS&el(%8Nub(akL{i;e>KoA+X25kUA)!i$KATY+?62OC;@Lgg{^o0xVSfu~*61N& zNw^`!-|l3;BS42qBN8<{-m~m8bi&thLG~OzwaC4612mg@CsyNN0P&j%ZKCDcVyCMr>^gywbdzp z#;$G7CY-jNeIWBHW_S?PMO2(ks1v8loE-!h^5>pSAR#p-TAUj&Bpil4Ah5Kz#d1ER zN}2hC3h7t}>z6P>D8;ma?AlVab|xecZc~aryr}~(YEX}UtB(Q47jr4Bqo9eB&SfZ2 zatC>P4DTQk*ZUv2vj+Z(3VB66j~Vi&58Y1v=~TB<=Nd0bB%mYolAm7cox&g!2r{@M z;TTtrjZsiBzMFdpMkg&8-<<>9#1+PO*?1!NYPsS90)GR>cQ_JdIaz@pc4Rikcl}JN z?-O*fmUw1yvDOjHbIxx!x@h&x&djQYaGu=S%rk?rzwkv!Bi-R}4{>oy$d(G?dU$s% z5GS>wz|dV2KtbeaO%K0abIi?_k{XkUp=`*2uNjB7Hr=QkPLvC?Xu;pmO9>OEiZCC%EfvhSOX7zpQXM`8f$9i>3I1X1w+7;lD_HaA^c6JX30%b<6;>qA z-uU}lo$@j?<|Ft!&)g^H2iNZB`0z~H-!_u#JUBQZ%1k#tR2Ln`c4QP$XnSF39;QBYAL79CAOm}{i?uiJ4Lkf*Rd(v zhACj%FWthn6Qcn$uK9xfI*edajR%?E5clu^F81agZeYi!?17~5;6;29f?5ii4ogQ< z^TjD?qPGK0Up0^>zk7fQqI;;|%)jRzo<7CLH@|zhBQ*@;9_9;-w#I`85{z~a)ewDg z53}R~%5W`}LB@k;t%9)k#Lu{}<0_SZkTKm}{6kyg!MD;Vz(_tzF&>uww42T!}>76VYJR)Q%T;UOJrtqAU0ZvCc9AgOiX@ zrSBqipjCH|0Ft4ij^SLrD~00a>XFs^99iMyq(~|3?LjiK3iGq-R~hkoBdc{>qZnaA zCPm)y@rzPQ6GVp6wD{(@_MttFtd2)90JU#}3bHKVQWMp1n02`aD1|DXl^T#y^HT+o zf7GEJe{*asG($b}A;6}}viHJM(Z+7Lh-)K@$XjP;zJa{$lQyp7i_pe0khS1Mmwze9 z`t5}&`B$d-H{MCMFm6243|4-MIeR_cpocul55}*MnW@1T5BdE{KI)u@&r)}y$enS#uG3?CRHmjE*Y@Ua9*>d|MxhW0=q(H;r? z|7XTCgTC3@cqTK-4o@1-G;n7A|IT>ks=jGd#2%AUMT)hG6x~Ep{0<9ZO^5aJdmzYj zSnd2U{QB{EX-XIn1e&q;B5^frJ)Rj$Fnb@*-0~MlMcd;U)`O0NZWM5=o6oT>L{Y}o zkZTbz$}X>f6b8{)dWyo1@2qi+I%g-pFZ6x~RrUK?%1!0&p#b01;M2z$=cF3@M>M=b z(G?G}hG%>2=c>*h==OuUhUDqxXn%>n{So`ozDHTE8su+zEL(m=yLo^6XYWV*!nlcz zq$*dvXLw_9-}MY2JVXfo_ECw{Mt!cE@QCxrdX_z7y=)*%_d~dy5FYp+wU3HhwEvQ6 zzl*>90V&)6FZut&7GKY9e!4CG58n^|xPpuMA%F9;+5Drrdz1LTKlp3@OYaWy1ITR? z|NUxT_%H2$@R5%{E1znMKl{^ug8a|)w?DSc_9_2C+6x49{0BVFx1qmc3kp14&63{( zyx%$MHA#5zlNzjTP`jQ41u5kJj5gYr>f{2kJ6TMl>FVU2UE$o}R!yV#v(YC^zq)_? z`ZctT_LK1!7(v7iYM~#-5W;xeZ5)67?Zd(Q_X?!P27e5r7z;$3bYJFx6WAnv#}jDq z`FMl=_WHNcp734UmMm4|Z}D!nxYBLW-`;>W+M_JzyS5}tefgCSN1H9K&@Jv`dyrkU zr)>w~AAfth|J+u4`@p~Mvfy?KLL=edGPczw|4wOxUM;umj`h2Ir2dM{z2GtrfBp2f zg`eghbTvy|=Wp=fwD`5zp72lFJHg-Hsz0Tpx2^UPge5RPe=rDDD z7IhwDO?PEwW}cE=lfcX@dO4&jy=pDQ4JZT0*s@%oz<8jXKJ5&~v7g9un~IiD(K|D* zW3J0)YOSKg$wVvyWx*YMi%Bna2v%1RcMLpP^z2VeJ{e|^gyYgA3DOZGl2bnJlfk_P z^Z-;UqutHYh`H=m#<$gB>%qmh38R>ywe60a&g-qiLgE7y5P+L{3zjYR8^vrT<`~R= zsvK+~WJe&57GeVseyd)~5OO_-0gNX>KKZfcuh!#{eDX6$e&V0N$^m+fkQ#cL-lGZJ z;~?G1zN~=@*wRLgF>cc~)r^VnribD^;RK#-AzNT})x8&SS?Hk0 zLFUm(;|=7;SL*rjQ@E_FddE7_8d;Xt$iI&H3+dS)_aQx7!6^0~Fk%;`OgdThmDt5K zA?tyfK(J>F$SFZd)F!KLbrzn>y?oq5K|bzH<~{6r!R-h#D!b~(pt+<#9{;W*W&l^| zGwmz!6&tkiv{;^2a{~&wHx~Cw%P3gk30Ml}pVWoVb4Tqa+M+-{4km z+0oNcOr$Hfy2us;B>+XmFr~n9I;l@L%J@Mj+DY=+H)EoKdy%e0!xYJ}P?3J|ju91U zLQ;cFEMtO4kD-y7!3_uq)Au)B4{5RL`f<(z%x6=S9L!&TKxNUs3E2~N14t^P!b3nH zPYd-C3p+7PIKCT=aEtRouy6zfz zz$&XFVGKZ{TV?f)RsRLPEpaN48JfmQs}9%ekI}{jICmWT%F3$tC}p=cFH91=gV8aE ziQTY6n0|vfvFexLVF)j2mSHwMZdD|igi)AUiPVh8GHJ~i7Q?cO=TgDWNn{uJ31oEn zMY)ju?rWL}_*E+>#>+YsU`GZS@;|s6pD@lOV;3U^5>wBsJlBD3DC?SZdLVjir3D7BBT|x&gL+WCG zK_X0@wibLwIW>|hKo$7HnXnTmqfB;|@-Lpi9wI_hGv6ln_%%-l(pO{T%JkcI&TFqj zp2>6_mXA|O;1L7e4H+rtYlfEr^-r-^q5~#h+^wuMIN34ogEIT^KTPuJ{cCHoR+h+u0*Yib~ zo+qW5z=Yg{4xlT^A$4XwzzASY9g*HFFf&~4aoy~I{ z=I{&x{RDi(?AAh5BH#+MTQ}+}BoAldD)yLo9@l_(u7$p!);5a6&>4QX5~D5`n@teB z4={R@jN8o)Bk~?hrRw+vdjRjnwsT`3X+&ZeTAL%28(}|F2#bvnLOj{XE1$cK+}660 z_r!b)vA~ln>>{F~FammGvI|5hp{_k-6L;E6?kpe&rE`G)i@yU5P9ZjSJM(H99i5^UoPSS;4IfDjubUf9JYQNjejF&uP83KHki z2hbAcSEjUtWfb}17>|iik6@ylhmR58npelJQQzMOa_M=K=nK$T?B9B{O3@L@GV2}D z{Zb-=I>t|}`hQW5oXg+>xb&&NnKF;pPUEA5y^78GNN$A1CX?4jS@r#-NpFc8Ch=0g zcb|xk_ulDTb%k-#-Yc|&WK#v$gvF?k=Q4E8vz^_}aZNM(4%$S&ad%P5&MDKK6P?D+ zNv_a7>?QPvRA`r@`LSN}Da8AX)XkUc=1-L7{nLP9QjTJapXrX4y$DFCeAH!B|H^R* zNdakNVM;a~A_dmHl;UNYE-m8k+zKV`Qly zb!lR4h}w*q@RU=VJX2n#HmBeMVN2Qtc(w#sse~t~(4aS81Out2f3ngruwhV21{yW3 zu1GdRM$j>Jvq)u*U6&1FR_bblvz7t0(SIr*p)$c(ML0f4_kTkc@xgVdY(gYh4-+Y=a5X0 z4(D?@gs1zp)N|9JzGnbY7pw*UIO=F2HXRKT?a>qcRWx-x-*2 zu*-3AdBSm-W+ul+2->pbs*-HyC*U~Pj%EaHB%Ht?lMIyVSI7ttt73TPwwSWKA3jHh zAi$$Qo$-L4I~EwlgkiH+b@<>``M);B5Y{pFFsy<4CFlL`!4=nk9c0E&+{jdqpH9FN zT%Bmu9)+v;_-QFc!i=9#A9#dW|Me4;4z3RFZX8IMh62I%A?G~3{!4q$aV#e+2*x(? zP4KV+>^u4(&Axc9Py|+wUjwJ6G({EKM(p}6$uWahJAx{`MmpjpK(Fa$H5;?}G)3Gv z)d{@N$pzzPMH9wMf9RhQ%q$INk$};rhyx}m2Gn3;-_vDSg!GvnEByddqsL1B)K{=Z zpW!O@BHtW|5{6h9KYjMcoIlu!gOk+f4>AfSS&Y$z``8Gl9uBo}YGI?SntSjs0|MJxad3M(G9YgO7^2n(kjg`}mcbfv%1+BG zIQ7W1NU^o;zUw$P{b94cdiPNKsC70_SOPG1yPb@BMOIaxGqn`v5<+n`8vIWSfY$v8 znZglo?X0?;yaE-((2iaQVVQ|x_Spx7aPV0udiZE;99Mr0-Wm47_^L^hMn-z{ANIne zD`8qjM#lHgMAij44pw&mI2nC!)p1M~iX6_BGa0pSR31VT0SEWXb}`oS+0p3$zzEYh z7>Z$XCOnI-foL$%HIEkvfFM#xL{oxX3U|AVwcG6uMbFDR-{}h2(A`k$sWrYyN z7_s98b?sJ_%+G(xCIL)aoUc2&vV0}sz~T@MWE^O5Hl4y;$(4EeA#LdS9S|sH>ZCLl z63e?fgfgy6Fg?#h3FLGtST!kYhH0w=vN#9WgW(1~1Z1)r*9Z&@za)=O`ikRy%J0GR zS%g{^8z8jk{>DC)tm&dh6T9Rc)VNzMM%1M)#y>n%>=gWMP)FPjUHKa<1wD5veQCdM z`l2Omx#&i+zKEVcUqo+w`m)n<=8C>>189+EtuH;azAVPw1br#?^hGQ(SY4b}U(hL{ zG*Dep=e`(4%{5~}wbLB=86;R6N|dXW=wphiDABvTN~uIv2y2)}7j3ZW$KV}LiTcHr zsGm_HhNyp;Budl;uZAL)Pl<{}iMa09RU+KcN+cvwiKY_`D$y0Z@RZ1o-T;-(ETjfN zSq=$Be@T>PUQGdovgid%CCsV={?w3XRE6)R-{m-JvmD34-;H znXa-32$&?IVFdZ%6R9jH&@_of@SCz*8XM#4$vV{!%~4N2CX7~kGSS~W1_%kwpDoR! zzD!_HPtd$;`}}$`Mkw&~q)L9a){{y^e(HSuV@JMG9r3q8ebWFvVJ%-`gzM9nMm?X@ zBMZHR!{@}*;EXZ;b@X4JkFf#2!_8r<=IwAm zsL-hg-Y8*P&0^eIbuXvGy@B_q?cC;5u<@0?DVvANvH54NNMfVQ9Spp8K?c>Sgd}XN z>$4BsyCo&}$Z22wG7{=u{qi*u8qwA<9PHxJ;>Ny4B*>~=`6+3EUnMPHP9QCM$$%6s z->s@REsvsQZF123@{BaBx-(Vt?(m8b>I6c9&?Ru|09XtaAiU4$(6xrl0pXWp>^D6# z6zwP>4);%31V#>fetcCy!N^Eggi45jB&Io*&0BR7@i@dqFK1;%-fE0xS}Wc_{c8CK zy^y#(7!eNkFfucB&c#@L^QKk*7`V=*I3X;~AGUy2`mC&)&n&!ts=J1tyC0d&yKuq1 z8!DioN5+OBvgh!FZU~X!DDbGE<#1SYhIHckMJr`ML#>>CT#7D8oKc!k#$NF1I=L>_ zT7ibKdDoYi?`}d}r!FP{w6g*2Xami}|6-pd&|okVNDWO~y7c*XmlN7aoQgF}XL6UO z3@jV?elM&NY6J$DSRoQ;$KIz*Urs#U2}K&!MVx`ZjkXrU=mq==mI%=q=a!s6{m+^a z1~o83Vj#W~RKGb^&q?VR$hAE#7T)v}hI_i@SSNtt`9pR2`=Cd19O~Y!5cJ5iLepYZ z7+8?I;-GQ9)_>f7Oks5%?~}40moHxxX$iCBNiT;n(C}kzaZ+iuAmedozc3liINq)L<~` z&EcKk0TVkXiA6+u6t$o_BsH)lBB12nPvZ&fD5+h+ko0YtHPmj|mBiS;DC(7jyG5M% z^Y|T`01+|X3ZBsKmDQsQpbf8J8YMB_miqTw*#o})1G$mx*um|rMPCA`!8p6S5r1nN zty-RqiX%;DnEfORF~2kK7#^g=i7O|&%bsEk8P`cf4GFsGS#v5Tsu8o~oMFe5=%zY~ z>g*H!`^Gb^jdshK>PF2kcOP^D#gFOjpmEgRh`e&Reh`}Qc=gh>kMH|q;$w`86TTkY zVcuDT+gJ4lkn7XDhQ~+zDX|q4y(G4hS$W*xfK|7JX2%H(N#9aBKx)@~bQmMYgz?e; zLVvw;RJ^|?Hv9T(<6lS^e8WEV*YA$shyGgpNFuLV_1Eb1k5BYAHQyM_(?7EcwH3JLN6ZgB;n>1r4aR&2buV>~#elpZ#vx7q}(=kD2 zY4T-&NDY9?LSn+GTp8sZC5+t5`fs(+|65z>^ZBg9O0hnl``sQSHCimOsKGI1i!#w8 zvODW9Fx+07k?}lCK}IcVi8v_e*GQGW6IUGEAP!^HKyQP+=gCKls z_CYVv*fOt#S4zRSd%sJNEcXNnd78=+ocM!2jkkcz03Y1BIJanV3X%{tSnO}AiNv*o zEBa!UnuvHIgfzf18zSSQd`6pgRIF&K4H=8T2E-X3k?DH!hsxG{E*ahcRtuip$ zHQj9(wcs2q%c52#vHT{NO}*m+gmCRNYQEE$f~K^nmh zv2pOD)kRlUOt{9Xn}ln=FnMC-r?E@$gM2Scz_VNF!^D$g6X

    $ps0(1li94wj@Y{7d?MoiMJ|VqB|(*Zf*h=J}SHvB-!c z-U(sRjVh{(3JZem-_;86ooHF2zAX;U+@2AA1G3h`GW+n$KSEgGm#ni3m`j>vLNOq< zvXO7k0CbPE*^TYXs7}D2F@SUS?*g;g0xjwwR~XR{jq5HN9pDtN1(U>4EJ6dE3a^{A z@Uy7Z3nGD9lO@8OM$XtejC)V;#d%xX5VcBZ9Hs~$|S?;EShmPr6!&-Y)U=bns+0w z@k#|RuQgfl^4#pm4QB&Z*;v`(j1JOvAd|)d8gG42*JPw{eR5H?CYvPx!k2V69#%GW z<6TCE1G4?JqVZu;J`-_~154PqP&*&8R_V zAYzKD3J*fu`=4U=ZjLRd|49s=e3hUiG^6*lG0|3k@;DlAtm zV8RSb!y4MmgDrr0JfwTg8V7y-`Tdeqf@?nrv8+wEpoGh^?MdbIivonmk0uTRA9C4T zmd!Ee(~sx4DQuKebB{~zS}vQUI-s*sS6DgMKkN*z>b%rf^EoQ@)mYgUuNz{}n^#j? z;h7I^I{?HO;(YXvO~{asN>x~z znj+jgoF=-v2cOfBE_({$rq$mNpC5c1;W#7_sW*FQ5cFc>Xpl38?RBWJ9RqGK!o6T4 z+mfe_;NvX;LNlhuKJvx+w$N8WtS*2DCXkcL6Bmp%FJ< zEjVruA3kB2iJYbzJ2^rlVTWa^1OXZETZ%se`g_i+O> z`>j9AZLh^#r6YMI%C*-F6?dgmXL61?aicFpBNLzNA&Oi*xGR#$bS|^{u<4MfuAGbO zj^3=-G+n#eblLV0(^t#}qjAQTlrIjh+K-v*5-l7ZjqeISH|bi#7>bccu%Kqsx9LFl zoszk0yy7FX1!}#k$i;E|^kAkW6;v_-Jeq(#ym`uF26a!Mg6Ei`eVH zXxNsqvUmQWQjoS|3gEA!!7!SLEy+bRTUHP>j5N~52PQlG00;_#llj7Ci0(PT-NPAy zL?%Cip8i9*{^#}AA%|$zzMF9$B8J8O`s*j7Hcfv$`Hla8{#x^QP0l9iuaE7^jQv-f z2X)Tn8I-rL{(8(E8>hdX8S{GQrLSk`ojxAqt?fenwPgNR=&w75^&FU4&n{Yf$-EfROAc#AoT@8Rl*YAmzC`GHYmHk+I|D= zes+-=t=$@RzdYRj^D{m;>AKTzmJ=z@p`_b)u&>cKx9=d_0B9Q!GR>XQ*!K&w8vm^| zI6AB84SJMmtV1NJfx1a=8^@I}A(J#{bl-?sv&HXE7#;3U zATTgIumf4y_9p-kzdu3OH(6UgDj-z#k|&zZmr)j-FJ0E1Yz`T$4JH<8#+RmML&2fx z^S>^de%mmn_0W)}_t3*Z_J4)=AwvP0iV0MH|JP4E<6N4>Eu+#{$us!=FPh!p{x8F) z|3m)%kOgiG%-?VO@gV#?|3A#%3ttqy+%SLt@m_=R_q~l%Y#M+6BcYIH_YEG@6H6g0 z_zh3s!q55X2(BOU75x2K&G^Rf_oH91)or?4CXa87JcQq#@O4b@M-Qo7)RkK`e5sy? zRt{e+{$E+Tys2V?LO}30!EG=h;5&Qv7Xln3mr1!1e>l179Oz--~sakiOcUJ>lj5fILwCyyj_>)5p46UQH&p` z*KjMu1wsqV{%qbwNdfE>xvIwae$$@1@vd=4Er#MO4)$du;j|ug2G;tnvExD$aKx*6 zv*QO5h>ab0KO9|;6V=qhV<89%>*KY71m@DQu02I*@nZt19GE4K8%WX>Jw znIu#Kzye^iE=f9>d21uVfiw6rb>7oSGo3fw zJ#Z#c8z%Re->}R~RD10(2|fuv44@C^pbu|`KCDZ>h(*NO5KWvS%XUr_r}(w2ln{R^ zI`Wy!s}P^8N)F3!{=NX92v_1c%FP@6056r#yj~rDk~4mY$=C`mFTd~&q>pQ#oKJ9y zPD^{CNA4QJDL#aRV6d53GUkcyJ;t?j>zM9hU;1TbX8Z_Ns1K?L3MpN5Rnhp!g6%7< zJr0V=8XteIzGBh8X>D6IHvJE&El9P`Yv8%&)2@y$;%I5IU?@<3p5eo|_G2+6sF~G0 z)&VsGFfcMsWMV#vT;D3>K~Rp;xh-69$|9WLJ~Bl?EHf{sG8dVmK2%yj>=bL@tn5ne zw5=}f!i`Q4%985%-zwLiEBXv`Y1! zZ&qdhyRvlkm2ExoC#O6uLQnh&3)Uaj6vmzKYt~>44Gk#jGZqI=?F5N`QK2Q}GF#ON zJ&7C8Ze9fc+Gu?HF!)4>S!Vpt);8HB=d(Cu!$23npyDu02G+W&gleRn(Wx?)C2sE2 zbqKY6tRnAVFVRwlR+w|qRgn6Tg{nN0S|Ky!`qZ5=C(?B@I}*8KQVgLry@!Guzbc*z zot?Nl}_F#Gr1t0yfsfcsk~mFC2a?vBepnW z%?Ek{ud;$bPs~P44YnuoLmt={m7MZ< z>4%ZF2`&Tl>~X?bGnQRWG<${O!di8BAA;a#Q7($SK1VMh`5_-B zV9BC3gNJYIMa;0zx_LYnP3l<8VICz*?JCvC#HV6qH$P<~x=zG8&OWk){^#0E4Y_n} zr0pPmAcUiBM?FZDijG_@7ulMX#GY{x>uRXa=3J!Ke7OkFKSk#h!ZvFePmu+~Hm_gQ z3E5r*p-Erf8hf4Pwy6GB+33L6TY<%2Mi#7%mVOqQb%7B|-%mGcA2yZD+r@kXTNTwm z6GRqt_9f(h=on<|<&2$B<-4D>k$xe16lbd)z;GgZ=$~R2CCqaq^y~3lT_90G;EgQu zmGQOFHLpb%tv@OndmEbcnFv)?d>OGfSB*5%w!j7&^Wu9_ z*SPOM<-4>VSuoUqlAQQu55J|}m$<(aICMr8=5~;EGlYW&0bC2-miOE=P5f3^FVbAB z^M-Knq`_!?fzsu=62RLzwC;h0topBi%`P!eJ|ReCn+j;lY>)hkQXKhmGfZt4qsoZtcC$c@B|Dt1E4~I#Q-uRmTL%R z&D|>^3s&k@)LCDu;>1OevI@xk2{qNY4=PJPoPHvQ#o{4W_0 zC=#$RIM;&~@kA05bl7mmEi7HTexfybu*E-T01-kBfGjo;hXb)s zT0M0k$WwdM6Uz}iupMmSPq-lF8F-=NGmx8_<+tpUVi!4hk3>2fMDJp1NSy=8?_Z>U z3Sm|yLAgq-gVy)|zA-5_-vm_tHMNiPl=bZ>SQd4NXS)i7bKflz|518KmO^p_4goAj zbW%5%yXW%4;K%a4i-vDZhx+FU>2q+B>X|}pxmeReA{~uih#~!k7Z>sMGoCtv#0PMV z7x1(=uF=CU{#WS3Z|o}gW!lFh1L?yj@3Cq6@L^B=2lV05f6}VlBz^cN`Ts5Y@VK)> zK0H8t*S-l6W?65M-5?x;#djTbf!BvmezLzly!7)>k1e=$Fg@1m!)w0d>)AT9o?S#< zlX<&e8rHL7&S3SJKKwobk7>RU4Bg4};nV8;II)i(5$eNl7f2sI;k~cchks;@p|?J4 zGOhfB-acOEqK2~<8`n8XC5$+@^LPp+CL_rZ=;UnSI#ABr!e8W3I#6R}+9D3f2^uh7 zl$>cfE$FH7GK)2Fmx5|9;lKG7S&%KBTpvGXXCn_N*hlx#q9t!elgH2rN#_?n=l$Xv zRK&5qO=Ae5s}b?ymtuq(g0wmwdc`Z5!b4J_3Agg@SHUIvR1(HHq5eAKckh5FGk(*_ z)v13;2Y~0)1e5YKol8>-Oe{nP=q)r{o5Wl_0+auB7oz5?j*j~#XiFLW5S6ZIx+;(E-V(W%`uXOEjXN5_ef}+h~ z-LK-6ez`~Q+ycV_j9y;p4>G;d=XZ*VZP;r4_Lh*XF5w7D9iv8sWw30Y48Ds2Mbkme z8m!Df8}drCt2iqdPTb_eTs^HvfN{#t$9fVn2HkoBMC`ZWiHUrfpN?QjHxqeO#zguF z?K7XBQE;Q|*_Zs$R-;8}_1Lqwh|Ic`8f4QBP1*$Y=Z^Cx?TX>63CtT;y0mE;S#mLZ z=gQPQyefMs+Q28M6lqiUC%ygMKwtjuFCG)H2Qzgy91Q;-3sUhuhe9I!!lzJNFrbVL5h`TQ|Q|APCMge012E|#ljv=mf5l-L6c z9$U+jg2h1zjdcIgO@Q@*D7yj9`)e(#lQ?Mm$#uUaA%$-5_uaNpIGXgoun*e^o`{yT z>SS{Tb&n>fW6@4x`sO^O4~ZMKLmVSot6h5^A667}O4$_*gnaoTk-1uKZIf(;xmxR6 zW{e&-G}3B@OIxYQoaoDLuUGKL#eU4Ova|o7nYkd^H*yuVFdbmKGnnWiS7*5%$8#Op z$B9l+helb$lCk2iot( z=*_r9x2NcA0-)f#tr?%?_4vA_%>kH39En9UZB-Oh?P!sfxv23i!a>T-u)&|WbH7?9 z^vdu!e*8Yo*wIN=1N-lqFPn_2|ENtcL#D;LX!6E9dlx3MaPql>$W~B+9)he1u12QT zbB4CF4KJiZX+qxPE^RgG5n3a2D}xM-%%(XUnd%o2b-{4r-YsCTN@rBRg6~SITUs9V zKw-mMG%+PVvY=sfG;vu$Rib4snW_?TXC#VC>0zJDX!glak@m}+&Hvxw`P9+%@k1c~ zC_l3Fg|~WZDBxAG6wA?m|Cvm8tedEqL`^X53)hRG)|)jZQG~ONZW5bHn5J_}bW#Yb!^}Ii7ZgzB^R^XFDO9RBZHiz{FeYUT5 zI_TG>jx#H+M+xS(y*Fw=R-2Xbf9XrO({fXAXVc3BpS=P3+bnIx?V*3rOdqdymZ(|F zD&f51?>qGiv$S7GsV!<@P~j{GI6n{YKM035M8GB6-j{hUIpWG?s7~x`YkOYrxLH`a z4Ux9@jMRmCTMa>j1fNIRS`B?}thJw8>+I*=Y5I{RS3B{vqFL6HS)WLOH3-Ee(YSb* z&`Tnrk_&>53%?|Q9!^C_&0b)Wi;=C5SB!2va%sgu*^vb&KuvC}p~m`nOP4hy8y|DJ zlHqz<(4~%4C4b;xQx@&^;sLV%u54w5zb zc^O8a-#&ehET|}`r=8%i-PLtL3vG@`6Y%`ZrfxHuLucq@Zg51EstG3wV3U_pm5dcZ zJVEd;qW+WXpVO#~ZBUVN2nF00$|oYNKcg=mq_&3WvZ%fOK#^bNOU??d>fwG~e~p~C zizaRrZ*P00kPTP?mUXOVArn+An&6Ej3R}wG|PMRjM zz&yvUq3*k6K@)0s|5|{r6GoM%M-I?5={3RaR|2_AkTdRb!MjU?;e~<&17Ee$ztd#j z?O8;sb&FsEwR!-}rJhLoI3Fw0TBJl(4yt)eWin^4B{E8c=l*!)U8symn7Q)xdxWaA zG+#*?r&xdvr}PkvnDl>&Q>Zki4!M_dbU6MhC~EKCd7L+%4>B5mVU7v#VS z#VbH%hj@_%Qy~bopl}5kT-y*$luzUMf}!$}<2Fv}cE!j;M~p6SUEkCVgnwS+?KWDn zh3W|p`FaTA)1`oi{gPK+gmGC#vCCF5TEDTfi|(}!RZwv>enKIXjGQNocC;-qrPxur zL}j4{)PE66K$XgUj89o;?@QJ5Y0>1xL5~^_fV?9s`^zfS zx6QZ9!h0KOo3}YdVxLmeI!Z4ru>Kwgxwr^$4wqWgda<&^MXMV{tLd_qM1cm(7?B%; zJ==`J8l zT+^(s$cZw>3WRj#Heo=ltowI13&Zp+evP4+VZfXybw(5OOYEn)Tt5gJHx%Y585{w< z)al${=VO!-a_x{p+BhMr!IrzYNn&!%LIEzs%9>oOkC@tUyGO>DwJr@)+p{$5&GxH! z*U}N&y;G9acyziU7PlivTh4Ix*NGN%ssMdy)-UhN?cFbxmL+Nc2Bw}%KTPB-T~$Ip zv8u+M-*DUG8gK90MniDd^e@+U-xf_Am)rcXSY}q^LA)>`g_bnnjw!FJinp{|qxT9` zV`V?M$Kblexc-gJ`jj}DCPOLe1W;rCJWF0Um!GOc^BntW@3fx|HxNw7AM@3R%?!(d2G#j}YnH)lH!AFF%-^ zbd-WDRYe6z4MYL8O|;1mS8}_nMN73(wd|R$#guK;vUUGjns)JoUE>l%wn3-o!sxc~ zA?jsP*FP&dj~$`2aqpHH`4i3?|L3Ni5gR6t%R`P@-n6x5M?hIxzE^hl&->0*P4HQh z!v|)j+y;YCvsKah6|Pzam+$){a0^G=@2sM^dgqKXJAT=-j**rY<{4NVdHJ|rtOK;| zRH;F+&m{fBBagV%XO($%tpv1r-y zxY9qy%HIDqD^$0f-Dp&T+r^#}2Tz)=t6&7;M85Y4m%Cu*d7b2DRY2NQ(o&<86<4D$ zF`E3nRz^^v4@bz;h@T$az5&1UG}cO8)YNuczb2rwz_gqTE#546a$A+KrOQfY<*~te zM7WGY_MB?R*Qgh3P+Q~TM{}j<*KG`kMdQacguIT6T*V+_W!u=d;n8?PVsrOz>82he zA>Q&a65{O~n8(_H9xe}NlEC>V-H$|*kJwn6NJxEv*D~FKH|-^qAszKC4w4tM+LAdh zoFIaNVExYTyuhJ@1UM`l;NzG{JlecpdF{upP_V1M0G@81Xn++c>&`Nmw^S9TV z2o!vge)^E7j^L{2$XGx|?>^`oKXtvj((8^K+*>$SSTaawWw0f9XZg9&sUy7OMXEpw5p{;xJ!4EhhXUr=SX%|OJpSo)I$U}$hT;BRg(|dNB zz@E#)kk>*iU&V`w23$qkOM)k#rOVolJ&?WhZ1LAY;!$DOj9)Dj)Jnx%IgRu(B33FO

    Cu0Z&zWZtO4Az41i&vYSiaH*~cl%X|{<1ExH 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�?_!wSk-@j{_+=8QQ7Shpf%2wi*J){=d50Yd=~ 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

    )D&;0WJhU;5*O8?}@{VveYO5+}O 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 i2C?rMHb_WUjLGxDGi_%NuEWJoiIe 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≫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 z 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

    tc-46u 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�)AR?*RStYTuec<$Oo>RTr!!B>CK4Gu=K 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%0Am@zKbiH@-zhij7Aw=NLkphbLP0(!qi?CM4Q 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

    6^+i-cqK-fSZN{ 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

    *&*B@t{pvF{;YNZ*RK!dPwOHg@+V_OX;_ntuS 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Ξ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�nuA`dLI?n&>=c-vyup*$&1Zu+3gohn^YIwV7awF=QPqWG*^dC(Q`t)^ zIP(U)TtcJmg)hA$uL4WR$g~--2a?W@G6qNxaW@mkft<>D`~qIrGEpYg%;QV&3qa+1 zOOdA22XMdnG^PvFhpsyINqOdfiL|9_Fi1eD?i!@BgZ=vNoI=NDbCFpd@Ql#_^PpJ0 z{6zdx9Kd+loNd&zoBX+C6zD!2m}mW0J`+#Ug7a+J9<2rEA#}=(w_vQArF2{aa-V`K zQ45<%@(3rNCo*l0&Ll0r+oG`@0Un}owoPG15RWa*@%TpLF#_ZIZ1mND-B&;3i=U%c z18Ekmty%){^&S_{Nd!J@2Cj?={%oniqI)|m4k4{fi=MnC9>h%R zu((A7WrlB{UQPpj5n(sb#m}LP2Rcl`>=SoLnN)X6nniE7h25jH_*#t{WSH5Nsv9kO zzb(i|Xfb9XNV?{9SPma*!H4oRJ!O|;az7bz&pZWtGvQdxJO*7BtaMIfn$e+>sMuxz z7WaqEx|!i-U8m8QK8WaS#vTxoXJfVWI>jlI9=K&6cMalTcBXArjfXeQ{j``y=VE7Q z(YIqhVIPlRpBUd>Zp&D@H)2Of@Yjj>!$;`C!BjrrlL(hZA{+v>Vl=S@eBd?b>86rkZB`(>y0Qtk}F3 zk0OE(qF#Hbz1*R_q4s5az13+qTIKZCYr)E8Hs$E8zm819s@ccpE`-I$V(J=N(xIW< z&T@28jA?m9XEtN&WdNFI(~1sS)F_i0M((5kw8g>w=Hgrgs;#*kIHlBcw|tga>N@tB z3)F8fsxfVqYwq7&4Hm2W75d{>O zM}gdHX;d0naZJa^%A*CcIhZZ_KFu^Nq?hnnbaDgvmT+G@UY={w0b?^Q2&4hyAN=!p z4-JD>WcL_sa5k+vA!wzu4}KP~$3C0Ae6c!_{^g33m4p{U`=LmfZ%|A&d-)cupl)NY z=#F6Qd{-sP8vD9a)^c1PuU9A1+Ngq1BM0SpuV$h!tQ@Z^isxQfg+CM78FrOjz^Y}K zFlJ%8VFaj_DXaHyJOMrG6xtZ2n;!FFCt5`X%A{{ft1`J(Z<1dh4K&l&*k}@M6YG2{ zR&{3DYBZrmx5<8lGcTD(^8lU$8Typj#vaj8528!{S}#?%QvtowjN7U$6QUzz9784XmD#xS88z*bf;>7PhC ztATD#6VtU=wjleTV!APnI;LVPC7(wi=rQvBz$EWHI ziIU2{W4fseTXa%qPG_tezhkfJOe@SxMHW3#JDzwh9ha#(TlA{=r6PI?I@M#5*Nm@6 zU5M=7GV_{H=D*IRsFs=OFR8QA-eC&NV(%@~DHEEIsWbxp`bp6)r@!Mgvc%zpsnGqL z!;9LEWXwkhOhArAtI~iKV$~5b-KG1hqeXK|O9_<5LeUw2uBIm;QZ2A

    i=cVjTDCJS? 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

    PHBoe(6MdEN@1}*#h^$ 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

    =xke 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%0DAC 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�W%n#OeUJGvb&O+@h;G!^-N_K04F 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�-%pIdzz>F8Q{O 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

    q`P(=as8 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

    GB zT$x+sL6Ei&yX~VEh)6;>$V;}_e>^I-XSNc7A0KGz!n8ML!D<8AL^|+`%SeB6x1=|7 z7#$Qq=l(S+10_D*6D#q8kLzuLfGA5Q@XiKDU?122S4oLj9nNi+JXwr$|Wdu)lx#z8Fb2#=%QzT_=^nTuk(bJe7jDk7O+b8k0CL; zV%t6UoNX@@^gPGPdj;ur_v^IiLTceHtDdsKUpScU(Q0@Y=L2)LXsgU5&XkbGt&AA)bU-sgiJ;|RlYZ6 z$2(-p(a=KvFAMlCc*{{%b#CnvgsDnkg`;|f#Uu&>UZ+3>Yi~a>pS@#EADUEAOMs8B zatL)3D0xNl%@o4(&tr8|nqtEquvV`M13yeBc`uPj7pm-di|#nH32;D{9mA>@#JcuB z1Sr%vUVT2^s-m`0{A`U~y7cFF0`-&V%E@+{3V-To$kr`1VdX!b5vdwOcbhRT_S_SS zzw4`;4j9zx{XLEYu=cJ`<<)wa4POgvt?rLce2Qih4g0aG==M9HzYzWj6T!av)F)4m zttAj+@DpsWg=G?E`o=D&K*d2*c&gD2Hy2~Ew=m8@>);aCnA;gRafsk-OgN({S$;2! zFNCbc%gu6wo*t8h>7rT`QjN0Mu9*vO3Hn@VLPT(&xiOg=CMcRIDb0In2}>LP;=R09=M>wN$83t9+j_-@A^#Zh zZ$^7aY+4+T0k1hTuC~_M*Di`^7S9ewA4G9W!qu+op$yj(d$M)hy7xo(+}kpXjC~o9 zL`BsD$M1sB@>w1EL;6+!v=tSEQ}B6YltS&`y_*JhT{!ZEZ*4f`K$N4T$`2+n0BTa| z^UYp8f4s6kj_c?pKvfOhvcxsHcmvqbym-dfeShLBq1pC|mknR446c&PFQ#pJ3U&f0 zoe`vG^-7IiaAjV|hjB3L-%N!Bl#t_1#_^bl?pD=eVtL=J7+Gh!xZoaxZ zMmUb>FN`0zCqVRx=--;ZMVJ}f7qZt4Y;Oq|&cEYO${h|gb;-qt6DBe2U zz)7fiSTnL!0w6yq;n}Sr%{VaxZ#}VS8-ZlPM>4`1FzoVCN1-E?V;<3VY6Zbp?`<5Y z9K)88%Hs9bAT8Lxv<{Czvso3K!v?(1XrHmTC({@*vb%^_xgP4=^B!j3Ct`k@E{Dzi ztmP?!>@L3NK8c76_sYrMXF=85B7bc6@zs|X71=LT*-~xT3z5cnmH)VVV){V=s~#c# zOJmSYV2o{vf@O?0ZD^|2i6p|kH2Y`#6B`R{>g9lNn>!fyO+h?YCidm?1b?!uGp(Op z1|H_}j^^w~;hjURg03w?t@Ce>4a^K}sX4v??ZVyzsn|9GP5foi)Hj^ zhIlR~Q<5@UmNnzEIR3lse>gE>htu3~-6^)g%2#YqJKL<|5oOSF z#El1k+7z;5hXk$&MJg+V>KjIUMIWDfOY5Whhm{_HwR}>9dnPd4<%ZxkbQOKMWjzXH z(wz(joq&nFGNS;k63&&0jqQWw?*zf$S49(oMgmwCU4Jh-41d}?3%2d4FgPT#eZi7- zIx~6iFhX_{ER!r6zV6qLp=(W=;D{2ylDGf;4$J6Ufe*Z^dbGv)`$v&LR@OKpU8{a_ z1Or;X_+I($(%GF;{zOOd@qSx}X9hYS6wN~-DplGz+^Gj9= zN-sa1qn~Enn{LP*vwPlbLHefL5iy`h?yp~Dq$BT&J`UXSy7eRw7DqxQpLvRp1wUr8 zM;uv^;FDWb%I*W(Wywg#gdSJ6KY}6c3_7S5rW# zB6=52O+BJO6WvHu4B;WY!j?!-?vLd=uJ!yqvW(pSyE*uC-uFs5cly}Ii6uf6d##*+ z$dV5z7FQmh1W#$Nw%^s3+1rukIiem8HUolvxJ+mcq}Lcd`%D8`IXI2IlDnd0Px~c% zb2$+hOtc<(dE@Hx>7~h}q+B$oT~175@ls%+$$7!!QVg`FQF1kOqW#>+M7{#;=IW5 zs{YRnT=a^kbmG^F267^;oU4yNs3kuS{eaYXQiRF&i$^c`@Euxg*&Vxhmh-oU6Lnz! z`Y@lQfh2J>B*P`kusuUcR@96mSQ0wBFJn;ygGATixrJ=~H}t{m#7WEJ6VmCS!18A0 z@x8;%tmmh|qF>XW(=;RhD!&y!V=UT3ZpC~|p6c7QVf|3`qC$vKa5Q@zo4`U761|eq zzl!qX+mo)qAZ4Ngt%H~2`cs!i6`nyeQ(Vev&VWhD{6-4^<2&EfTP`+L>cCtVYM~dX z)gtH^!OPAol~)X}@u{C9Bz#L9S7aV`^3akPEtQeZF`i#AJEzsEwnC%I;Ar7cI<`6O zb(oMpIh)|Q*KS_X0=_QH3>UBX;h2heogXOC_j;+tSYlgnQ=N{EPt&o zpY9sNIcQ&4dM$Vo`bDJVbaS3G2l*hrKBU;dPk00E6vdSPjO5k%SRxPlyhbbKLU{~$ zZu`odJ}*4IM)FCv1PWBZtMiirtc_^FJ!$-0V(1p&JEN<)`q-sZi_m`({hon%Ye&zN z*iD<84FAb@Mts1U1>9U=2}&V?f@4X3= zg1bo)*ZK2FE=23nKV$lkJD9%j2v^FsACfzkP!CUs8NVg}B2zZ|qlxKe(OL;0yhs&| zO;utN7qF+~n^}d2u^4)#WXY(fHlNbEPIO^q}}!`gD}|?Y)WSpc^=fwN-ZB zwS-rGly;`ZSYb5&L~)dsZ?(RB?|W8G!d|_XndV!qdN0K`ffsJkks7V#-9Q+N(YYPC z#mD37z0tX&v!VMp0P86E8&~|I=~W`HUHABkH8<{_Wwy(~d*~u~%QEsE#arJ@@rE{F04ZvuZy{xFS$0uxp|mOuL|E7ibrb#s9)J6Uby+f8xxeu1Qq2lLuLbc$vX@_} zT2YH8k$TR69flKjUBw*w!f|TGo0C@7AeCyVjaF$AwEPeV$cJgWkRS~tPwQ9>cK_v^~F;Dnj!6djF?d$-2&_))@ zGdSnR3%i#4i&!Xw^u(8(yI0vMw3z%Nd_aM7;X;3Ya8;^HjHZN_eyw4YKqn$4`Okd- zQkxqr7>Fu4qrLH}*YcwP$iGA(=8rV_xdHLgXSQoiG3pgA{(wIfDksm%Vj1IU%itcD zTf<8ak8u5AHp+WAVBqZo$3NWm7+(DcaVQ=b&0K0H_o&G{@ljAz>74FaF&` zG2luCe)YZ`Z>$X~QarAwvzzaih7`O`rA8D-mz1u8hxSKg8>!~~mm;F|P$Wy9PHNhY zr_QjHePF@_i1R=dJg&C@3;8ix;^GlBl9gKZ2#54OXk=Tan#n-^mvUTE>Wn%Po&1?Y zaXZ`%YZu{V)?Qz{ZdNKu zo@ZAjClr#*g8D`cj}cPZHS!phkzpc8xgQd)ZPqjf`gI45O}A+$Gngqv2IF=Arx5~4 zTA+-o05dl)h+wviIpAVn zU@b;CD%YmeI3Lh$F*0sOI>3+hk8eyIf8>00ztR3@+6*ITE3WB}cZs5bV96{peNr!a zY*m7^8R(s6KNw}co=ZAX>tv-|7{AuD)`%Zu~@|8sOP z7@N4+%m8EB&g5e^Pm(C=VP|}jp#v=20z(KmE2W$A6L_ix=&ruN-nNZt~Iu z*wH9=v_U>3V8v{ZX!oKjBxIymixdVycSd^Febj(hko<>MCsaTt`~6w5QsbYoZIeR- zz`TiKTdp#$pt~Ffk1W)Cb+;uS!91|Q#aDHtL%YQGB3?u~3lP!AX*`6HNEYTJXuKV= z5{yG-+8x!tTi!fE8Xuejja;~iCyk@THXdY)m_BDwmaZT*+!MD0ltU}py7m=E7AFCO znFmFo2}X5jtjZ)XM6MSr-+PmfCJXAnqgbJXjRuQI-YPEH8R*xJ|qYc76cEknJ;e>9J z66ql4ajLkvvtc2tK3DBcA>RDM>IrQ83GVPSvs%uQ_;>be@F->;0a7je;hE2NA@Zi` zS0h61#(+106YcmF{m#Uh%*T6gPnrJ-(GypeWPR1~ zp;h;-hxWHEOM5Ct)sp?a-&f#;=)dVqNE*_qjjeareIW&CfrQ9Inz&trVIBA22BOB9KJa`pd`#TK^jw$I2^Z-XycL zWr|N$v-*Cf(Pr9fKR|{X8DZ-1Jv9mr(d-@P&lES=kjBY`VkV80W&Uwk5}z%_0u1{O znrN-j&NcMNX1M!pKECgs=E&3^U;xKR;woZ;z#Ri+E8sb<&1Cpq+ZUFN{oEgi|HGbv zt|O`^+bxCfc$=T@e&uN+2+;qnz>jL4osX*JXFv4Qww4H}0(YOjUPHgTi(}ov_T&n| zU$U7jtPPUI^|Jqtr(9LXTgMBw#Ni_2V=J|GWhVuO~xn4ph;w&9BLeGjlgyt|AX`JUMLn(ja)W34-HxY_wzU)>J~jb)Y33&urR zD6{mZxBKn5bDwn6E7c#qD7h&$lAvI%^D{fb`7X0uu7_VzL~~~KjZyhr7Y7RC)Kt3V z?8_f_pA{s0!p&MRlPU@*{M6##eU?E#I;E@Wfu*VRr}Zz6W-6K{9Y}Zes@s?Ej6x-u zC5!sP$}=epj>BvE(t+mJZc^?SU81~wlt!}X+BYO0mTe9l&;c;&_zxyE1<38aneF;% zGqfi@*g73@R8o|r>To*mv=9D6P3OD;PEpt0yLN_nr`|!nB8QF${C?wbuDzwaMdX!7 z5orFdb(zRh$hyFLbsKB15;RZ;kuv_`r#@WA=0jHf;|up>n?9@cT{}8A%I7CGiKomE zKn;zhEw?TMb3Lzc+55~ga~eM?#0~qrcbXZWQ{eP+_OzuXK4`~dN*<_J9`e$Z*tys= z?_w+Zo%z(rG9rAeW~JNgXc0)HS+&Z`sherlw;ArjQvSsNZNZT_jF)~Sn{0x3P0iap zzx@(#a(+Qrzgy8Q;}n7SWoFXuZMd;Ulw%J7hAQ6vJU0vm5X2w+YNcI@KD3d#L^3+b zS9UT0Vx5(YUo_J?$4zHxf}Ims=>72=ZTWGBJGqJTl356H94`?A$gzcCNfO@~s}cId zJG^8m0H<;*(EilWty90L%27NBSQ=?4I27%&E1#REpcmknUg4Dh`+H`~H(`d31dK>@ z_HusMH&x^8oQ6doH_Z&2n+P2l$QiUzM`yB(`O;wZ!<51%>tD*7q<5!Y;s=o8D~0drW~nz?^>es15@q|kY~4AHJgFB)SRbOUYg2$yhqsB-tS_9*hj5Pj5~O8{m(==k?HmO~q^G6) z>`~=j6)0U<9>B934_ZQMFoQ;Vwpcv^khz7<<(JWBA^tZpY8f-ZBND_WH(?l+2gx&l%*>oYPw58-hCDBSeZt7a$)thC7!m~%!wZU?*3+vLUl1(U}7Rs!bM<@0Th*eYPeyg<9z zkmMsWwDDk${^D*79%H(cl4hmp1eQF@y{N}ClfVMGjKK|qH$uEV4m%*lQ;Cg9WB|sH z;clKY>K75wR+^Za&(gngdc?!_oDs*i6C8tQ9-|uR0~i(Zg7;e;5oPLNN&d!L36nUr ztu>Yxp*tp{IWCeb4fa61d-{4CTD3sDR{^t4$FAA^;PcYi|-&CnP+ zm@!>K;wavX5m)$Ro8=!O(Fsho(UvKST|7ETlPTK)ZaJRFy~$72d=WtAPVpKeBQ4{O z);l$fmo8clBJ=_TAfJ{ixIkT#ERJ~1leK?N_VTMlx_p}I;B4pp8W}f^edrasjJ+pu zLL9M@SH&=IC^GI0Hl(o#!!gBDE%hAi+&SXAu#{qiAK?{Zf0m>Q7^*AV^Y^>QO3tsP zm~@T~2m0J9N1rvVFKkyF)8;m@s(TmXVe5Q^6O?Z)0c$UCToXK^y=$~W7(6oO%L3*J z`IpM3)q2pDXfgxDQFr~c%)}9q#$3a3|DiZa@Bt58uBZDpG}VX}I=ZB>zXRURi9!bG zg?~MDOaH{qv6xG8nofn^zY>i%#v1;&dWcT_fDmJ>QD!W>gzym-!qLn(=Sd2T;%>-) zd#V0DHB`LT=$I2 z_7kTuoyq>^;%oWz)sUoS3&&r2PT&uY@QGx7R6lLnc!E zf(uV4^k2;SL=bVEZ}9(hE*r#2x;N6qs9Bp2AdwHZvU0X;z&fR*egSwnRokJg)O=sK zpEi|zJc~?{j3JGh6JHBCvR?1r4mqnOJ~=bcj*`%RxLrbvja~%VdGsEQBI2#BeR^R2 z*Uj(YjH&dBBTYWxwm+#c%2CUv;|Vbj;0aYKhCE=h0*=mwj)zs?p0wwfS;fCr}ou9zsWZT3TB4-1QNO! ziTSYit^v*S<+!v5M8Df4tDQl&_BflsnACGOD5IA#1~R&=^f#j zF8!g&LlwVhOW$O-|-=b&G}CXH}6C(ByKW$%zfwv-D7&?<+3DkJfxKbVoF9hXqq z;t@}xSE}2<_x^Z;0gpMqInrD zaP&#JGsamx$Wchrcr)r+Z`zwur(|=ZVyw?GVq=>>p*&H@EF{zzu8vZ`#s6KK*(UkE zGi~w`Srvu3LD4A)ettaZ+QJ6Dn4dciiE$K=fdUZE?+wj`xlv$r9K3{IO#bu2aD!4W z5b%C3xs^YTS?*d>uXGx+4@7>a|GuXtJ$1~MDs9CgfJw<$7f_c6Uv4E@-3H=)Z$=*W z=}FGv&JZB|hfxg}nGZ+)&ds@%;fc(hiecb+!P}&PevO7;))+wnXhKT?iCtQ`Tb9E zvjcN))6PI=csAD-jJo6e@GrQ*e^t?6`YOdqV?DEdd@82{fEugd$5peMSNzJ66d>cJ zy!``|`yy3*&$uGPol!IRLPp(#!#znRzdR#$;j1Do1h^Sz-d##Db9j*iD3_Rdb6+?V zTUuu>rmW?@awmi%6l@s26#h3v!wEBOvZ0JU8zZFTHL9NkI?S;u=8X zW9Cu*W5{bx1o_Fzyi;kXFrmW{h>hB zN}oX`XLKe&(j}Pi?$8qeYk)E3kaFSdNAq0T5DSX7@@^OZ69wWIcqBg&H32by1RecS4!Xl=TE zh113AnPg~;C>{brrz$6bd!WzWroZaLOCS|~K4f)bC{*!@M34ACNqYeJkus#p9;&mz9o z#<+DjfH`a&)@ma6lH7(_00O6935?tApoz5P_3wI*_%<7B=VHrBv-fgBV&Q4ku8M}` zdUx5X<}yp%FC=!R5>>-?5#Nz4VWkDHdfA7f05)ishkuNvyV8{y7i_|8p|XF;OdA=<88In{MQ^G4+*cl>MYc}1KSM|Uo@E1kmZ(<&Qz zUi^F)LsPxk{mqfEib}1swO*mV-gZSp@8%44$>6z0zn`4Ws4N6Od2~K!(0{n9Lb)1!-ht7!6~0OHZd<`&VSfcfhW1j0WV;_P0ygvl$>MqZwU zo-)Nli=lkT6_xe~sWy5X(ZD22F4IfKa)=91MLCM=`)y;+Y3S4=P|_Pyj+k%32S|UuTJPBcjcfB(u$=`SA&xfyB8e zI5P;z5(B&p@asX)zFVTI5Uhp48BV^n@1;%Y8n-fE&Dju?y}%8jqN36LTVr6^k}v$H>0`$ zv9JH7d}`$Vo7F6Fm=eczl+ARD#z6_JT4Thss%nOWX%>U`}IE_gl-d5RKfB|4FMQ+G^R@#9_l6sJ<0IER_mCaxI_J zICM*!i0uh=LXC+tv66B}H7DzqX*TnR^cqW+8{Uj#%}+6k+^cG9dc$n*byCm|?nejK z_;GKbem^cDz7#D^M~5!estgg9IDHRNLN(% zoCpE8RT;X%2L=Xw7WzHu3aWzb&oqCm#rDR1>A);>CL5Fz3)M~nRFbj|eI^0D6VN%N zG9za5w{4~emS*}*{Madqj}?VzMb5B*!u^?ntl_nMd^rh$?#KxAAzAYN<3QspLL&WX z0!e)kyL~dx<3BNHEer&$SUd~y%fLKakTaZ28AqEr!Uqh!(#--rXYsK}!S4pVnBf%= z3w!Bl+jgIk%PTZekNE@;m*7PuKa(upGC{lpa;XXcx~NUG7q9rTZld}=2ZqG@Gk|~? z>v$?Vc$zrJ@t37+{^DBK+FYSXDd^`ZUiU5gb|j5V|1N}i@niaZ;Shj9=RdQsN)kf>Eoe;-z#sh7Q=6f;J>9S+3WgTno@<6$1@|UQco2a)Hc2iF@(xyi0H*_vx+y~WI~}Zr?Duat=Jx@fF9 zhr`6bbyZL(v>FQi<$gG6baue(?8o`0afg1hjFTs3>R#@ZNcy#DOe+P6+P8OCvy_}% z``4Qu^khphOY0t3j14p`sg;}DY3UUY<0EQ?X=%$HoqaOvez~*gH!EdgGQNZ zUZ%=>PPvHsAJ8v zCyf1VA7z;8P<16T-qnWEHi*m)ElWwxwUDb}oANf5F2`_hD_xBlo6(=0?r&5Qgjq2S zcPoybX;>;;LXBbmc(UyF{82P)I(g5U-x^ z0S>xV$>;2vVtAqUiyxgNL)S9P5#QIkIegTZXN$|oI40J(u_j_ro;zk0i(r1SETt8E zR{fgOgJ1)CApd3^ER(V+>OstnVN)u0#Xh4TM{%K#m_p~PBjJ`~EzJZGmHG9XdM=<& zO)B;p#-pNYTyUF=dN61_E)ZF{sz+UX2gXC0_}HYKo3auwO>)kIU{-DiJL!MYb|@Ir ziBH6f(LOLVJ#ouvcj~(L3{+{ND7eS;efwxEuH%nhIm8|MZTfiXwye~ch=pa2tMu3= zF0I@~OO4awGB`P-62c7r>1MvvC&;Zq_9vMJ6UL6x4nwLfGDrp|C9!<7ICtN8gq{>G z9uHZ}A4@GeTbM(R0_cmI@eE^Ya2_JJ#yk0iIJ~~_WK0AS1`60KElBddSCT652lA}f zwF8Xo*|3`P!R49V>Xs=j%W_O(_8JT+RVQ`a0hG?-Ov<9u%_x*1O7StL+jsBWxYXW0 zaC4VYs{<+5i|a;3!ZOw{>NT@(?62F>dPMJO96_p*sc!lKZ*r#L7`LUrnQfOH7nD1+ z;AC6nQrRd_SYY{(!v~;fS7fL}`4tUNbE zlt?%2m6>}EwBpgIO&ikirXdG^8!U0uvR{%5`I|@KnX6mwbb#62Z19{RAf?Kv)S{mL_uGos|pT*Dlb0Li~0Y1n8x0PV%k~(E|Y_d3W%g zF&qhl1Dd%P@GB+nhkm%Z7^jKCC)-CdXDw9uHT%+Z3p;Dn^SqsSJ1T+YW&_*KuQ)UZ zAK&r8kl2!=bAI7s#A}nF^J7B2z>g|5m+si6{HP*@Laz@fcsQS=f>A^=kpM6*uTk&I zes3j|9|bAwOqp%39~W4;wj^_0zXyiJ&H{@#VapFT{Y$bqC|1!U+_u8MeRDshkF3=g zS&O=V2x^!L4J&1P@4HE&42%k6lfOVXC{&J!nKqouM*ofBM?^-I&nM2)Kb3=IQY;n8 z?Ps^i?Nn2{qsxYWjf=D*au>k2++B)^Bw{-_2EyK$L6SlJUyhpmu-@DQ)K%aj2{_x6x;`T3{0#^=8m}v z^gu=26?2D1sZ||jUm}CG7zba88_Z~ai|YUNV7{-*>{u!;Ri!V+mzI9-izc2NEy6oZ z?M|xn5rI2}66H*jt@tmmKKC|yyk`zrYhIUths$J&#LSL7K22_#3pm)JCE58S%!1rW zixc$O7m|!K_Tg)_XWdDiU;Ni3JdJV=yt#7q$80CLN|6`hn1NK_@?!UVtz?JT}Qa50S>v9IH}ZjK=XlHlE|3jW5&AxIE(h z5GdIHYj{3s4Odv1lhV8gNlW9Ig}Vn;ORDJ;emzlu@Q47RFdR;e!OO1V0-u2`xE-en z!4wtmq#i!qzSz0gmJLEZ;9wzNk8j)SGhE+ zri7?rh`uabnVBQzn~e=IvKB#qUV#%|9dy5;OUo&m@j?fy^9^7=-|m0L(306koqww~ z77ahQxM|OjM24Bs6Dgk~L&A_$N-lE+(o8M>fKL8Ks{SLeDZHZu_Bq;YUF6vosZHMu zj2jmu`KjQYGu-#U*$ii$;3Ju<<$(p+;BoTqrOqzcdiZ}2q5cbBb6pgi!^}3taJPoR zcnA}}e}VYGF#F<1OPAN%DzVNFNiIdX(tte6cD_5~mTsf!eVaW~UquI3GvrU56Sr>+ zGbYC1Cp@K$pU&^IH@hy!po8bA*xr&~v zaSer|%^v#ax4xtd(9p&|uxqb`;)39hbLU@4i%f|+iN{hcoc*qUx^OShSk80WxnY#n zvl=OYE33~4h8y)h(!r)vdY?*kz4B;#u5vytdnEdO1NZVv>Guj}tja;$kU2xY5#1c} z)@cdklb`%vA}N zEs}yj?c9czdUUFHp{`a8zBJuWe$*VT7MMXVnDj5#^iL#F;bx^z*xx)5r3^2S)$6;P z(&jx}*%Dl_kk~bZDE9}&{083Vv)0?_t`Y6_!I1oCas~p)r*7o3TjFx^;7@8$Gc^dS zPdlX>u_n%lA#MY|{@=M_ueChjda0RffvL=E;EECo+uA5kXH2u~a)4^|g!b$E#kDk$ zxK!wRjUS$_kIv~0w=>FosqHYwRyD#^+x^M56uO^vN>w}N+lJ|JjkYxA!^o2KYssRG zojeWKD>bKY#R=U0+xzSYBX*{Cx8YBs4PE`|Rvt<%2Y7#B`Tel~zD?=xk#Xqux)@FP z@H^3ey8knlD!wI2Xsa0oL>Of0?K1y=sQSvNwwkb8+={yuO7P(B9<(??ixrmw#fugx z#U(&+2`#pw)2?-f8Gmq`PpEF0$!1!FNFRLX)DW+Dw zKkH1Xqv5rE&BZ!#@=%{gc2;p&xP5V;%y2Gm3>l*aeH;_hQJB<2a;ZeKGqpvhB_W<* za?;)(2TUu?-yMgp`YGlw$!XY=t6D+?`%6g=3>*-rY9$i%pv#a^=)||by>7fbqfWSr zjbpj^XiwM(tJ9xR-O(2Ca)%MCaR$oJPgYMt)D#_ z)HaZun7#G9Bv2ffG6~MxU1uU~BjruI_tYBaK;%MAmgzt}^-Wu_>H5{BFmJ-{VnzXszK}Kit&QM_+bguDvTTx0su%w+7wR-8 zf{v|8j~hzgmqYI}i~_F4_p@QwkQwQD=bnMpymxU+?@9k2{mdJNH-st;CKvYspRZuT zgIsxCb~v}vTFLA$JiR6~#)Wc&Ya&n=QOSse*H_xGvQJJ-AtP<&oQjaChA@uGqW53p*fGeI}3z}j6uM}8E{l8P-Hv8U`r|iD&6`3Fx z1{fqw13PE}O^6JIITjCSFU*hpJNh~Ot|Y_v=!03MI{U^pC?od6|4)D&(-#cd#%R0R zej-Mz`Vi)%f~aN=F#k-AD4_x^KJ+t=Vq*bmrUM)P%*?HJL6mSR=yHlSW}~w~v&@q$ z#=)GOA7&UcZt^w(%#SKC43S7LWQ~=YF|trJ`iu(KFrxzVmx&3%zEl0^#8l9_RV%xs zigCEC7=|pc@y`TyqYB(rz4nX=mrFo%5?OGKX=ncN-g@Qu)$C1pS?ZUg>C_mAmQn=h zu{in5Pw?ZHwo#LL2Qb-D=)9?|gOK4eIL#buEYCdgNx44~G)8X@GoL)O_*Tay%ZQ$= z9A2{S_n_6NV-Wot6cuOGqc{qmOsjYJkqK0xxDLS&^78fbiKHKfdQd~Y_buA$j3C< znB;XsnZEe8<%V@D{)kF|S*!Wn8`=A1PUgMgVf7q+F0F`SkNBfPA}a94^w58Ac-d5a zba43Sdu5#yw^wn^FUbCaJ+6~K)C-)uTmIgDx}Gv~_QZufX^(SdMblpnOfKGz)OX0Y z#QdqAu1sOicuP(9$naQa;{1_j>!$KN#VH|9qafwwx39`Yk8FtgminVllZwsqdWj5^ z;rjctPBqD2uImg|Jncl^Ey;~-K56?9oY8~vBplREX@7C9d67gu78^~#zepuJCCUpa zpZs(@7yfBjpJVbvSg=( zKgtr{b@*3QZke;jz3s$$^sluoddtDYC4*_K{77hK`1Gge2%wO>0VK%%D|*MDF)(7)$p*3)hCf)f|B4_y6z=qk3BO)9k#}!%Qadt^ELV&~ z?0WbA_=^gD)+rRpxvB>k~EUMumm?VT=;+U#gGO*HtY8QCZ^P|TbEdpdR?Fu=BV>}H%Kom38ETI< zF(D%bmYdSSnmrFsr(sQgu}p6Gv!p2;=qpWL=$1Fwd;f6J8VFJrdq7lUSoeB)SH zzq)UX?Eerh9>>X8^{%TRKnAx6YbwuqAwcyfG*cP ziZ%M!{VGw%GvmoX@_tAb2}c#N*R@%{Ww6WWTMIs1wen6hgb?R*bD57*tyYOFi^5dlI#V@GTJ6v z+_t}AUoY`c_VV398rEA<$z!@-7Gv#V_hQecEZh3^)>YJY5nr*9xnvl^N~*|Wq8mrl z#WyRTJh{}NP^>ppNN?Xm%#ei%#TQyEJX(}x78`Y-Mui&SY5X*$9wC5q>RlGDl^FN@ zjVanpC^N`Y{`#z`UF&b6waSG$I!jrOtp?H;ou79hh=NM-D={i^G*?r*IAP!-dRNc z4}#xRecE%$Ba;%6MA4{F@hWx*AD)qAR7{2dIKsYEcRSb{DGMJJ>^rWdJXa!HVwE3R zIu@elwG>c85&erGVCot)!~HnF%}s%U98Zdm>c>AlOqtx!_lp~@#d0~3B_T?tH2CmV zS-GY?MS;<}8ReFCdN?CpE*MwvJU%&+cN(BJBvqI5+FzV{w7S9O)jYVSz_=KG04K>Y zVw|V{>Nd%~DLL?a195Wx2Lq0go&W>+I=^wE#gb}bn+Aj~<|5`|< zRiwj@#%BgrjbDwJRx>kg(jM#&KAh*1%>^ zw=f_1`Nb7H1cp;O(V0zpqeXO0UV4gCmXAB4Z>(bp>h63~eL0!3S9fhFG0kAse(!!% zO8%#XSZRaWfyrO=Csr#jnFG@^X3{C@FHroPEvAlv$y)qPmf+22*Ek%iUAUc*lr6;uYGG@}LA(CMh0`jRA4&9%`-M`GNd5N2d`=vve+A=?uEC8`ScDK z>Z)>O3&Q|V+1~Y{8F;SrYyxJ^4W5&9^j7|)@$h|EY`Dt;1+H*3B6?_s3b3win<8dV zfd9E8?ast4^;zS+5T zN-(wZZ)mE4EeQHBr_)^%-KQqLiQkhVsHF)AMsxj`;j##Calqs~a-Aql*3Yi}IlT5# zKHh)izl`fYLK~~pVNQj9K{=(=^cHdoVY>f@$B3=UU4EkL=jO4*V~R7HTc%SUwHw-X z{Hvwg(9`Ct&Ei6f3)sMO@2jQA0*%L<+Hq{4NrkbGi;>abu=VmWR}+rgYa(axZ#%QO z=atGfJeCN7g47CJy>T3U-+~!P;k!iIyXH@zI(mx7y}!{7o4x zrgwIXqZT+y(lM`159Tv5(VPTye~wh1pivG!8nf-`Xtd!eH&9mYW7aLKtU%FRjxVI1 z1O7$}(-mkiX5!)h3mvw__(6MCl4)uX+;RBE1-tTRYgcYemeJxs*1ERoW7Ib7djUzZ zK^n(`o3Yh>2V%?y8oP3F!H@eZpZB|pa8Artf`w5}ga#wlKCjpGIuiJH40eyLpU4x4 zPHX+1I75w?^>Xmz+a@Cr;oje%=27%3>Q~95Q1liN{V<q4iJLZcPTsw2f6)(XM9}E7y9d)0 zRi6aFRl0v0D<(X%lLFjyvFfM+FA7dDlAtb&Uz|N$6V;DvS|!@XNiLJT^O!4Yp%3r< zz9K+rcf2}EhV7_fy>;^S(t9d@eovHx2mN*};$Tb<>MG9SfO^i;QqdGJu+HZMsZ?b# z9`H6^rG3({S&u7~))k9#*;`L&hBAn~n9(ic9goM)c&%ew0kHi0oE-#ftLQ2LYF2zz zM=jYYe7Y-Wd*rf=`wFrfXo9*~1Q$}kF+!*7xe4o`N@^ssbilDgPb5jz0iurgG&-+r zwdz+EF~k67{;{~r^!H0y#*)p@oX7l{5tSp&B${4F<{6pLsfNy@5&c&b$ni|Ip*eT~ z@k~s$msR{DKeBC*JN?iciXj(4Q`8zB3a6IQdz8SlWZ)(K`0>Lz!p~x|Kn#=dGl1<` z0rBoyb~=t!1j7%1`iUbrX$p`FRD-tw6-rwAOfmV$6hf~PAy!#@_dO#jGF0heD$I03 z3(_cNuT2{x*zuWEYKE&or|zE$0OTc;DoFMlwg^ZjRDOqBuK&_2>l9~sPlLE%-?LQ7 z-&Gv+xRbfALOHlok%_ey`}*;3l>_6!g)!MR4ST(G@dlZ7N9+x#R@whW%zc<7u|x5& z)8Ax!cw~PDs7})fX0J$t+b*4t0ob>O%hE z5wa4?#F`D)_#iC;_6a673Fx5e{n{*Txgt_;N9Q;I=y>{};w#fpIgDR*!JQGCf;YAq z_DQ-yo<_Ab#5f_I$(^#0ze@ereqG`=+%8RBLMibKs3(#Ml(^-etD{W^_MXY%A4AyszR?VkJuU4 zg|eg+F$L)PTPqRfUH4FaKVBo{3pdm%RlHf$nakgE&#SgK^m28yx6$4+9ssZ8IwPAXjQy z5T`t<6O*R9D{-zg15m<#i_6^{+#EwS*pe0FeRwoyE=%5n**)>cbwTPxCRLdN&3`(L zTjmR3pZ0j`-g&>u4JnKB;S*d(f~w7cKArH^GW&~{5%|}lKpV%E=f-52-JilrOM2T0 zU?ZSA0@w@v%|Wam($k}>tflXqMNzfn#Dv%@())hYWQSNVR%-pXP{6!2Z4U>x9g5=W zB>|!XRy@HxO((1PKVPX?@??O}4Fzt~iK+2Abaai$fqLl#*AN$9Q7{}J+;sTx&%^n0 z@c}+Zft~;PJ=@1x@&f`cHe9o1RrBJ$akHZmtqb zZ{yqK;V#&*J{T)2qJ4PM$PUJR&PZ7`fSJQOS^nBDkaqk1M>z8IfB&mTVXw$tnb+g=2RT9htAt{?WXVW=Pz&jAg&d|sq&~ARQSc+yxX5f#ywvoxK!Ee<3MVkgeTB`MSn2;*WD2zd5CZG+ z0p%j}K3P>X$RhucIuVJQO3Nd=ar25juz?^$X)v-f?^BGetYUFk>F>}{!DnO*dSrO& z8+7SBR6!3*hu4@pUA@^fid8S9dI&%B?p)J>jOZVRzZ*(L{=sCp7D-O3%5MBu=Z$;k zP6#-^_v6lUo0rNDp4zKe9y9*&Kaa{1GW3|jA`RiZM>#Z%yQ=&gGRk4W$42(MbN|tN z94`;D+Es185l*inbMcJVnrnZh)^7W7BKu1xUYF8W*3IPY=|M;nnnSFFBXz~VwOSMj z990byA{qwLjTrW5++&c}Q5>U;qD2;*^&lM{0a{z^!_+4nu~FTo{`EPd_`f88(k(Cl z`yc{WMsYzy<>E)tlek4={W7k>R(Om!u#S=l86B|EX+UnD^H7|?8PDGa!l9-l<{I~wL#B&2xXqa@tfL6bSM{M3z;U6{QN<>OxP@uy z43(rr!X+jkPvuv!X~=NDb^;9^6gd2^f?zK0JIy^e)()@s-$VGvC|I$Rc1g>JP@V?N zqk=8=BDaspBt3-XoI!GPj%5-v-5!p|7IaG=zsxfVS{q{JV?sYmlBXGjj6SFXrKqm| zA3+iE>O*e$?TlYa=`4;daOqAfy3b2oXlH@GU{D)!PDEQfQMtMb2F0MJ=ZrXYIoeL6 zK+doi!UJI*MP-53D6{$RjYB8pIwy~Mm|OlXvnYHZ#y=G(sIh*u4;6{D%!-Fw? z{GMua$z!R8IEfoK(u#AUit+xtvOQuT7~13#c@_mnemkW2&!@Z}e=0t*^d8a!C7B9K zonA*nH_ZUMGZ2^-x!MI1^P_@fA>Zm^L~V>yMP(k_1|%Ksy08yw3W)*Uzb=DZ)%4F z%9FV5OISVKfy5Lys!#f8m1^K62QTowYs|bagxYx1gK=-?LYvjJc4(Y<0bkM+meIWi z+xfrA-<@$syhum3{|Bd=ie^l#hW7eeR#R!u_uu#Xr5(e1$p?Z|9kBZiI3q zrSm6fsQ!ES)x;Lnhzv%(W&kNOwIY@6NX`X`$mly@6|=P3mxR32M}=k*?m@Wb{WoKJ z=38#ZDHFUpCrUlR-4^l}pbs{l_BildY{pdMWhyW}8W`mKwy{7~(dPRk66QvgCn~@C zEbdhvDs&R#U3k7MUw5ec}VS?ffGWTb-RW~qS zU9e9FbIbZSycm~~^WU{oU4Uv|(CgH==hkn3$8Jv(KXd;{sG*fx_Lm7CR?;qg*Y%RHji4M2BzMXY z5|f^faKxTgk-ss-AyvrY7|vRvfpcrm`1a2Ebnv-#azaO zq(~Rkdr)KO(7|(^qoyJYO0tT39#`EM<$J##9sKFbt89e1EWKaVDShZJCzOF3U-Z8|!ac`JY zcG%FO4e4kL7W>mmRQ@9>=xX+rPh7%QC_{BMMSAc=qR^0lb{b0 z85e8ektCvUpHlR}8UeZxTB>8zCK|CEQ_Mh!$=d#Xpwmc1AxjJnEzJgi71QZC5KHr= zI7YM4H1d%&azqNE(nMm^uW+kDBth{Ou;^<(MHcGcZx-8Z>;6hcu2gTID%e?qNveac z^YM)D8OdIqBCY6Z-btUOQc2KgkWMVQ5Vg-!QLR@{BV*$Kx3zg6!Y_M#W+=(?Gn4Z1 z22f=JJ4XN3xYe#qnUhtD@s|r4I+w>qC2}@KC94?#I;w#gLBD7nKsDRH&8cQAHvHV6 z6vMQLG!_$avPt5|!@fdLcx_8LqvB}mP(4Q%w94J{*u<4q5o zOgI;QKA$efZMF)(z(Bddugiui!Gcc~x!2=JRW?2pSsU}sYK7Vt*X?W6+-A#u&xIFw zi2{Pzo;7=H`(~JHfL8QX#}*a);I3l&bAIpF$F7UOH4b{a9qyz&Ea+rvqkk3!yDLhI zSV(<}dW2Xtq5i^KOvuxVay{BA=vwU7exG*2KhD? zu%-U6;8FBxHWg2-`^!mI{DeEj)ghxR3H0*fx0EBeeXg3t%TX2Gk#pw}elrJj={yoh z@uaR#xz;Z|Yx`YwZ#5k@CkZ!6qKf!7yK#JYzRK7c0eTkV#I(AgUO7ryMKpzb z?MTIF>Le;&rj;rGv6Z0%xK|$rb8wK( z7%VVgfvnw%wdHu-kf~MkP;V_{OLQZ{*{@0Y7Ib9yDbmfuMP7#}sWBOT?6vi#gng0UnSnUg)~)te#;f-u89ZGfuJd%ch16o4|NMszc`-g3$+iRCZB8Jxt z3Q1+$SDeXu^xjn~gJU8sp%o6N*kodeb$JyxY~VsM)OuDy6pM`XFw%9hFnwN^X`Wf(JZZF{YFQkJ>#5%;RRb|{CX zy|=O5XQ6b%j?=?&WhE)Qpav_^4&neI(nh_vF3Y^EDX+KkrPn;MK-K*h(CXZE;a=;|Q%Y5_bJ*Xc zs2w=o5Uj8G+{T)!V?_k?2`R&(D-%E@`Y#n(D#c^e_ZGah#M2EQi~8YA7Wb#00(*r2 zT_5eFIVFyK2wsr93tGF?jlQ?|HZ1h#G& zAMQdX9iA^9v>JzQ4Hs_xlw z9uXltUP2|ko#ntj!V`wdM3aWg64xkjsbYJdLX?Em58-P$syPSYYTxr4mQHi%Ll>YB z+RIM27z^dGkpeb&0neV(H7@C~`8oMoCmJ|K8c(3>`Pcdl--EJm@ZbgHIP=Rl?0Uf{ zqZ+0YalLGkKs7hI;-{(G@+$V&*5DO4^M)K;xr)w7s1*+PNOJ$=fcn`XA}SN4$Dbtm zObbnO$}3!VV9T+Dx@}p7Yc zih63;t_S8}7fsCkRa-qeINAnQB|=~Muk8kWrnA0&ln+FPZcxEWe`phag_z_UVT1By z=X5MBZZ7AZJUGF9dm`0i+cd`kvu3TM{%nNmp;yP(VOmd6?d9J%+SEsn_zn|GO%_+5 zBSRMA)=}IIwKLHi)$q_$UcokU{^77}-v~;f*|Eq$!}5i&JrB7}ZHaNv^j-z^urMTs z3O{&cFbf9VGUporstscTCj5RM&tZiKT0>)PevOeWYumP|px0w4IiD316Ka;3iZIb8xxel=l59_Y!ZF+*e0Hqd9w<}(ijADa<=w)s&n25`J)0$ zCuqVSqy=cc{5&#P1pbC!XcLu8Okoz?jU9=l${QP3hpUYOzyl);Zs# zzEnM#RK*B?=`XCo+IeuGK&78o7!RIexBR)8!yo@i@-8?%dPJ{rKr$|~OxBk*Z8-WU zCMsM*dnCwQWse@wz;gFfZSx@?QU5eb|6vrSy*7uq zOmf4>MtmDFP*1@ z;;D9W5kmSz^cqlGqI?Z#UwoO=19lU3_8dz_l7!;Epep^ncWMx6vD_p% zko`}e;49mdIHX z3Th}>qf}Y{J6NFm5vPRykGGt2VePA6)JB#&@*Q`C)f-&ZUsV<9P3&I=v;5ijGsm+% zii}^q#VLV=b)%V(;K{F1HnOacx{H>_Dc~MwY5!8Bg_no1L(?p}$8oeb`ufTcLOL&_ zO@IMSXwGR6{8)UAa`F{XY$;Y6#sjCNRYy_$TBFrPoH`W-E~>z^DmHsvFR&dn^apmO zuW8~tV)o`f$XwaWIV<&iZe>`nqUyrlSwILCwJ4MBj)I-PO+(8^mD0-`XmY<{E6Lzd z5CrW+R<=^B%{?JJz3DFW0Ur}+6mrQ7M&*H|A5na|0x@WWI0M6{Xt%|>Z>)33walos zSbh%-8*zT(#xAEg$A-GzDL!$CJO8qPJlvJ3P6evR@^&l8W4m@;l5(Zsunw=_K^Q~9 z5++0fJq)u#>a`zu7g7}^Y2nx8hl>uYM9_ubSezDc?J(0lb`x$=&7>F6R?>WAN*U37`cK<(TZmnFyn4FA{~;OKJ87YBGCigPgi1w^vU4R! zxb{TfyYzbehoNYjReT(OO6#R!qSZPjesV^ z{T*OoB9_3@0bgQ$^F~Q{e!O3`JVX0VPam#yRTf!{8&VpbKy1 ztl^QBBq44rt3Ils0{-tMP3CX&Uy zk4K8P_~j(2NGJDtjl!*}^aK{DC{u`BURQt(bASl_-UXtb8S_#2%$v2?M|+tLN4vQg zHvzpGaD(rjlt?ohF3_@Bm2NiLiNQSdHbRro`NXjcRG1SYg4oK}0@=SXZq)G) zfm83i|GYi1%6Cjij91V+TT(NaLHc7v61@~xIr+mt9ZqsyroO_zHa|0!HToWMWM=R5 zI-DwV$h@1fN}$QU%%?uVMrv^M12mJ-B3W&oyu6tCN5MP0g;d+im6qRPcZSs5TOG1a z{$3*Bty+6Fp7#M~)a9gBi6?RC^^Cz-?TdOKx2`l(-7yed*ys%8iAdbG#3EvTqM-F& z81}vR{?R4tdts67f?VL$X8|jZDaB{g|GhKu=MC6HDts zkFQJqR;28Hnm4n7ffk!BkqBfzuRlhTG*@WfjF2^GM8aJVrlnA(zI^0$Pj=XiP3q2l zSgO2-Ic-exGIr+2hqKn&+?nE3%g-02TuuCOMQ7!E8d*$i5gypU;rZay62UHX6W|J` z0Yn$rG`+PMtvcEVGVb+agA*nkZH9gLc3ctzOv0w2<*NZJt*zO8t?>1N!k-5jZnRM9 z>r^6bUXi(r=l=p;o1Uz9)aLYHhSn$0LGFJV$!N>)lij3=ba;9BLo0D3OFPCni}rF9 zW0tO(_JqZ4{nUGsavOgtg9R0~zu|;)=JRtp6DZXcF(1qdE1$V``VkiiDiSBUYJ^^S zh0INkW-@j97=Hid5>Mz!Ss!ErKR5Ziw9y@lgNBfxxqh5T#Nd~J-7>ny(mT`vc7)Kp z9??f^u%ihCLr*PVe0^Ac5Bc(vvK$5^~Pe=?pR1<}96G%w;$7P^&8}5=3q4ekeQ+Mk&Yv z#lel-zAGa{8aG#HW+v(&WV9(*_(@ldSBC3K+EEId9r1uaYK;(rQxI-qz~kMhF|;1k z(mx-_`=LO=@2I=zG2!dg;iacFnvxZ&Fz5=fM<=Gs9{O<&gbG=O9di@f2n&0 zsx%KE>J>EJs$9z1mXgmj9$`qkv!~dCLx7pR{q1|w=}nGc3~$exKZ{b zh%cMe^=QXlnS0-d2)+ed!-MO|_JMp*_%7H=vf3iDH2BDS#Kh1_@3Sk2pfsuBb*Kb$@SY#Z0M# z%z^&R>{IxHhHXL^_P-U8z&Q~)+iCQws;N6nc!nCP@&-VmYKf4XaDu@)(I)V z^>)PG`0M9ZbkRssXZr zZoj);qIH#5GAy(^pcYlUa^mWJ(Et6(NW<^9m!1-iN(!UK+LE$C}Q%%V(HGfg2vYL<3G? z#C8n;f}m^!30nF4utZ%r_O7UQ8~L%49<}?~qhCy!<*GQ5z(MGOdXk`7Zsh}Ksj`H| z$LD6PX8wG?m^AJPlH%XyrkyD5T16$H|E%AveEL%L2M*yp?5?JnXSr%Fm4op8SC#$n z3HQySo8wE;4Lca!`N9JQVgx2@j?IW?x$@y{-8;5D9g&L)8vz_P0&YgZV z%rS&?ex#|5k;!0WJuPS~1?_xZwg2GZA*|*M4);Af?g;xTCALgblAPWUJ`G}SbWZ*6 zr!aG)iu`IA+fL&7aP+5g={RbY_e0?e5Kuy2M#pT)?_T4@h>CJm=3$KoX>sCZ;%hYr1g&&qBT;;JEPXz zo!#tk%Q-&>If|n}$rX^5Z{5L;J)vzbm}JVknTxx!wlDl6HtNsT;>W3>Y0&by632_k ztCSL}4kIC_qX3d47`;m$4o;;)*j;Bh)wt;~KDgpfW+u;8d585sp|6{`;F5}BF_pJO zlN&$c{_u}BpR=kRroMa(i|&yJn%jk!*^Ab4Qm~*q-7l<9Ll;sPKXH|&QUzdKgFooU z^k9#!NZf~{>Zg@Cl=zX;(P6AFy1vSj%W+L1zYX+KThT09<3kMqb=?OW%(6YmOZ&&xYUZSe0*VEa2*-!X|C*aAF39!X~Xt~HFax$ zpKx?rQky+iQjsH;y!}+9bL`isUQEVJcRbU#?`viqUhp!98dA;oa0AgkmJ9LiD=LO< zG{f1%f-0aqo_gdAxd2%0pU)YLwmRQrDdYWsq4}mBY~K; zYnP-=4~Nq3H{26@>{*%YUNX*!|Mw|*I}bX%ViYJU7Uv%Av@sIjg8;R80bMnhtnsb9~|ILoFLUAdcfESuFD>+`b4 zSpQcxKSS;li;c0x337xGEGqo^TH|DrWujGvZpefEn8m8}jW!KOxGPx+@c3re*7v{v z!l(yNR1JyAdg@j%K_r=8K5jJ4HNvY0rUjlxQI zu9UPh4_!@yX=C}n#OxF8-RS-|(wA!uHQEz>6lIu5} zG~>KNt_FryQKyfmYJ4eWqb5z5{{6@!!P$AC-Oue6Dvc%HNIc6W0syuFP3WoCPpGYvScY z1}iH?QDbTSO=x!z3guBULB-j@B?VlSOA;Eyd_H=5eCM*0BiUMQK43Q+Bl`0Epa=q56~H?Ip}?Z2GY+z5s=g4vGTrGzD9zXws>Pw-Qn zD0q2X5UDwXO7`A_JzgWlt*iF@D=P800I4~%unm@?4_*%}{k{4k&~!B6kxWffMwv}V zxk_QJRWfKNGN$VEuF;C~!TcPPFZud~v@K(1l1Ay|4{q1Alv^}w4SmS6ja6PwP8hv& zWz1{lAF<)?AEUl#$vx}bp}u+TY!yJbH1rsfb-z`?CR|pqNBzs}wTa==KjFB3*^+i@ zhh!plnuvNH^gRDYl~_^e?D0?zos@~rZAPl|_uZ=PDWfqd1$M&MQ`#)Tx4EZn;ZlQ5 z`7BHHG<1731nBVWGyLXjXM%Gmv!7p#Pl3K@UxW{jDO7g9`#=wci%;Ac9FKd(rhU}J z_iiLwXoeP=7(RN@9#uLf_q~q4($deHamWOv<85g#lsz?o^2FYz)Sm5jkNqntg7z`U zBKbkp?;+Hx)e6(sRj-8U|%D0}Cd-eeNcKY%tNOj(5?mg}t3!~msrV{@(QS)xCK?;d# ziVz8aE%>xFXX7-q`LDg|*N0>3x2Ixh6)^HJfN=bkME}8R_Y3X^y=j0NkYKJn+_T*3 zyI12s)5O@2coO-tkerkFmc*mBZm=nB?+WsxYyD$ff-~1h+n&9CnH$$gg^fzpSep&5 zzqGUbRPDPkRf=*MCOhoGEcg0`GIoNeFA6bN@}Ehc6O(czLua$xL27^ac<9}$u4amd z_$ZCBz<*n0VwJ+a+T}#?D=Y{`eW3ocl%1n8e7?&o215v(kL3*H?%SL*^*HTJdR*|U zITt<<$4HbhUPXTL1#KJ8y;?*ujz4eeZJ6uVU9QJtTby*$8<7abDcK|n#tK?S+F6|O z;3p}WJ^d}{f)3_sakU@nCV={!oFqJ2%xl$PoPURE7E{0Tcb|mbKiCwFnR>zRD{n`Y zC`_Ym*LLnK$dp5uPpL+G#zHP{2u8U+kB=O5zP_`VaUn@Nv$MQ02nfY1K-$ODdr0sG zVC_Ejz$x8s_S(Ik%Ww}We7!7w^`A)M-}O}03BAVqL8=eW7{ZTd_3i+=X(4|`w z_mQ{okWW_xI7P*>_hBfjBosxm`}DeHvsmiKn`>;$xC zKHqZf++mk@+KR`OqRQH0DN2$J4^Y@BsZQt))~h9NZGA*Fz(_qwU16gQ98|x?RjjmE zruC_{;V!;`Bdl!kHAF&jm}L@2(XOmVa8cl9ryPPVDBx6-1e~gwyn;RJ8G|=OlgPNf z;PR^B5y6twt#5Mz2F(w!&8!V1I4g{yr27Q2=`5tZ%v-#88@*i_6}AvZ!sl&4wi-^n z+9wsrx?CZDWNp`!wq|H~_uJ5aFM7onU!Ap=i?7tw&^P3QQQPk&7b&)?Uk!WeE-^Dp-an=9IVi5}pV7@>%-H(bNm$LD=&2@qQb9Z^Jo z;HU)B5J3Te@pViGI~zG4&ao!VG2u2G?q+ij$bo>VS4I)5J@f!K7F3BQ9c8*$|k{WBTH9(o`P+PWbO2{rUx!D$s^Rx+H4B#tCl6)VR4&%<|993W-h) zx>^&;hb1$dP;Vq(4a(>cv#n76$O2y-wI=CD)<|;@w+;p2+6jt01aR9Sxx;%sEc;kG zbB!Snz7#-7`!ry$e3{{lUUeh+LcZtLT{J`47wVLfF{$1Nih6V{@xFaa^f9B)W4S-k z3)GuyI(eueoRRlFDs4ahRfE}YO>kd@6j48pabPXPvZy1WLN4A}Df*zor#?LPp}ej) z5~$N5qO2{iG`-QfMKu*#jL{5v0&`LNwALQonZN8+B1n9t~%* z4(!2mP|C{Vv~vtNKuq3PuV5jm4E`yth5yIgN()H>_}WuPxgY@QXv>G+sz66f;y?k^ zHF1W^Ibkr=FpMqjOQB)$+6Mc$7$jG+K0GQMtCWvYZ0)P^XOLxhR39Qv|F`T%B+|eP zXA1PjiJb5ZB7RN|nI|>`+sV!AFP#^Q%13v&=zJ@>Q#E_F{!x2XD4AQ81!U13Tzf*r zhKZ{fDP1U_TzdoM`VldwRgcpdN6=*=Yu^&oaDL{i!p@ln5cWs$T@x4d`^XG`Y==ja zLNQl70gCVjp#Qt_Tg!q+X_9#gQ3RBy3-$;4zcf7G;c#|Y%h8M7FsKlUQv1SKKRojp z@{g)Fdf@eKN@0LaF^asS11sJ;4*-hE=p<$LJBG)>Lr@p09_I_?fRXIV)+2choE~Su zhfR10*A|cX3QD8p)4w;WZ^$vORR}!pl@@*E%&RC9vM`qy`Wr70rZV^R2DpLmmIKS879?Ftv&%rVtHA@xXP{bvD)#lqqW{_`>UV_>xtr6qPZLvcjz z{%Ih~nXL2Tk8VIN3U)?*sGdc7ar(qa?2OG9)02F5lKG$(O$9pAr1G_wTzTNkSpVqj z9o;`^${#cgM4k`{08L=Ih z4g-#!2;&t=4=c)R+B*Pp@(iDtCuyY!+Vfi%#BKx_v`-o}Rvxyl5d%)*o8Mpf--HE! z0+D1<+Y0#)gHiP>;U=G+7}NFzrLri(u&{r@8ps~mhzDC|E7Wp|S)3-8v>{qF#y%+m zmYUZzlUsSZ)pH>jM(r`UEjQJU4A8yIX{6`n;I*_R7dRkm6{SWUD-V zuXIi+_)uvB_V9$sKsFwDUChKPMD7dTbS0|B+97XBClk<=ehPS?2@jEPz*p!;`5x|5)>WP^JE;9alGz}DhXk_vdbg^}Up9k*B?sFAseyUOp!H&j);(_hK8 zx-(UR=a->&MnW;Gas;LH1!_&D1sPh#vNlX@Rdi_|XWZVE>Fh(SkHP}3M!C3^r#FEs zRZp9@cS|k|>$f$<95?WoJ+4eG$5d4*ig*BQbJ}2EY(SFonyix?kfb(wNh>gwa|?>k zJlaLxGvt;`UvZRqF^Cd8xaOs-iVmvMqM<3!iQ(Wu4CGG*0NvY@+<~iq*hEokfXmWH zlU1Ea0PWsuYF|>AAg4aGCwBhwt>~R`Ism?%o9YRtPEh}mppEgpf~8X1_ffaiZ`-XDoAPA_xRORu zN`DkvN@d%Z9rTlAyD?(qq;9htav4KT)wq0v<>GxN{@B?ZQ-2>**8CSmy%peLP+8`o zAcW4qx`8`&1uE-=-FJ;L*2;PVIula!V{HKzfLWskwee%?D$w)2&|GOv zg(KfA8Qf)MrEL6LWn9bWyJ3B*p>ov}Fg>AbOj_L3;ZoEhzq@7aU4c4ct z{%2B<`Mcqv0uTjY%ccDnAc5`R3}EzJZE1`u`NS#E^-7t*Y2AFH>(!qRjHuTWFGmwK zKxiy!CpWX9Yi%%w8`XncEZs3@`WVxML`!BzjQYP0mb1FlW53A_SQ_lC0{bW6-hl8% z(8ts|r}x0I6u@pQbTy<2QP_#RW00c8cCOWs$Su$e=|gld9p4cS;S?p@aJ?2o-000SP85G8sskxuNMxHQ~)6r94}E?!0B#dI*XgzizDS z0Ucu{&^PrFDe35`U7{UPCgX>olzc`XBF*5a{|d_8^GxwtDz{e#m~1eJkD)74tZW6vJ0vouI*?{Dg{&D`2JdfX}=I#!5CxV z`vZ3vAKCoUvp?gTTj1?D^vex^?+OD(It!hSGRve8mt&$&vnVRE7j~Hw_J=Mg0C^Rz zyeE7_!>-P1mbVV*-8UaECiYVFUMRl_L*tAt?lWs?ah=N`tfqWUs1?O(PlDiP3nFRC zPJPY{fMw8H_&mj7WSBOJU? z1REJlYW>5(c(+OmRCR_s%O*2KjVx=5s>>&1i9tk$b~T$tKjQ?LJyT+AjSFb@kc!8? zKSXZp<}vB}xJQ~We>L7z4S+{fMkra?biF`$!&t`a2U(4QWN&2H#e(#$`K}Kqk_Dk+ zOfNLHz2iaAqnwJa4hcxHyL!yz0()FNw-DA3htvU(-+hbXQOg844 za)+b>|2lziF8oGkqI%w!0ER50C%pB#v$SVn@>SfgS|M&^Zxnm%x%aq>3ms|daVZ)W z&zA*_Z(BakMcPu5?0ZHZqOu9mPXs4AR?!QN(Gr#xS=ZiKL4koBW@_D1N0ImSpn!}r z50!yyy6-#H?dYCD^xpAFqy)QGs1@%^zf?lE(Tlc) zHUb>B1NI(?jVn)#&k4%TT)a^>wTy_Sp|Hy@EZ+<#HVkRpFNTC;SX|~YZ1syUuT1sCs+MdM;ab6naR!1 z2b2WG$jrWiL5T{J-ZDL6lL=zCtH6)Az5Buxknts-$X=U}5T|e&jWFjl3#!iv?#ch73U^Dc4yNw(O#^ZM3qWZ1@u{xHV|6k3&EL>Wu>iYg)Nk?P#WQD zk}W{zp&yi9hi%~15}d4u2JHhss>-{_opSGF1e0pf99q&MYN6~f-2W}%KA#bIbb(_3 z%MpE-0`uK#eHb|{{;fMXZ7Xh0cmlfU_@c7)m=m@NKh+_rYB7tWj&2bgB|@6;KrcM@6GE z-UdqV;BKU}EA?tm9G`_sKlp+4tLOq%aUJsfvmZby8b|}cL2U$Z6aMQh2 z=>FaIH(dQoA^&kP_jE=fw;+Q6xcOSlLd84U(h_5}^rdMG4CJ+6pmxVU)5QP^;B3HI z%|l2P+X2KIwD!E7qW@l3Kwk9>$d~7Q+X{9yEo2k|Y@|TD%IaJ9|LyJC6MV}5|9WMb z|E+}R?Y+Q&y79Tm->pG%K!%OCf(x{26lneUj^!rTtw z7BfdrA{PP2?1|(rooGqnU`R@(F;B$IxWgi6%A;7Z8?wq0!31I8<^H0>2ZWjCJ+4XB zJPkW^YxpvS>sv5G$mrOQPDTrAu9-)Rsmuc^=nfpW+T*O#4aownPWvdtD8u~NFbX4_ zQU2P;#yQbqj^<+P7oyyXRU-Lpm~X!E99Q}27_Or!lliw_c?RXA2B30`c8q>Scaj7A zFvZE2(diY&Z%1{4-;G!oWVWVI6}QO>)N_9tlIbwSP)CiY7W~A_1`-;lGq;7g+wiNd zXM{YY|LA&}VCpDm4ID8}QDbZD`psS{T zMPfG>dD1$1J-)$X|G9rE7Z7ZFLwTP@Sn_F8u@;V#rwg3os|b`RzSIyj2WE;7sZQQ5;$ zNpIDL?3GLgE6~`;DqX7lb>e`xAdtg956l9-#|8{msOqSIn7faAB}nH40C4gi&<6hQ z`N6_&VJ^XBz!x|wX>#tMH&Ln^K~KF0vrgo`jz$mbTm4QPt5l`ciIrrDFv;XI92E@g+6-W02;}S(XRy_7sz}{J`wJB5Vl4RM)P@o|SB)9YO zm6Z`YQbn^Z3iPUet60Xy5c~~@L7rBx|rL%ijnAkxzP^g;$g8 zG46?&pZpKN2nXb3zmmU85dDyuYFUL(+oPp>pNE)mw}_zm5>e|Amb}Q5v#8q_U6YpQBQ0af|T!ir66i2f(>EPK*EU$r;15Qk7H9KCOFihUd$5PmEl@4N&OlRZ`S z)N4#dl8?`Z)Q1`=>WuH-JMXRgbNuJ&(R>>F_eNB6rG`ZU_atyRurCbO0lpF7TVmwq zZ^MAPHsrk*7))mr{8y8PY(Gn#-fD5x!wlKD1XiDbZt$aoj)nf0QMs=rB{lSBJ3j%U zW?C_SU;6u)#i}n(&xtlnYUI*)b`-g^W*UifWIc6n{PSO$T|~zunSID`^8lVem->he@F`f?2HkR0hG8x(ZP6?fq2Yuai2f{I9$_vp9+L5NgU`u`Y655 z3j&hNxu}Nol(Os0)a0d^MW;B&@Y4^Svx|-CFPKd87@@xCH7ULS=$8foJrS>e*2x|5 z_wroJx6x{9zCdFCkvSTG!S(!YB~3&I7hYAwdy>h=LjFc2Aby(dLM)~z_$B-F`hn^= z0x(6f7VKBO1TdsN0lh^4z$vZw!gR(s2Dz7bxHn|~k^y+p0Sg!*k$=_OMFG`-3A6D| zhlJ8>&Ob^1T!oc1-cX3$L%t!KxJkOe&h}ff0#ggPE;Mh?H!sxEXJXbT{8rN6wa|%^ zo-*ktVEdp$BWBK{E{)+#=377;S4J978+@X2*}g$eq-Jywz~RFhqN0xd%gM&Py(>wh zK`)rUg089io@|;5#)(x@@*9Q@r`~|VSIX3nA;VKRF7Bvc#eTohEmp`ypG2pB+T47` zQuaSiz6{YGoi-LtLpXB_%bHCI_QeuyTSQI**9}_ti+=!G|9y(JqA>N$2+; zqF03!rNp>~n5F3X`KftP*nzLNka1ppS{a#!A&wegRCEf=v;owyrt5=P_MxZ1qa4Im zEzLhKi<`W}A8?-KoaNZKN>ez(Kv#1S(U-!fd_SQiN6722opU#diSGs!cAP*X^dM#~ zc@Q(R;!k$@;;MllaZcCxnH0I>z-rIuldcwDp@`GxiLmFM?#kQtzX3OwD~A~iOSY$; zg17ng++)`~ksF+BPY=YK7?37qK$Q8#UVkiS)4z%lgzqbTU)0i$+8~he z*GwVJ8;;5jb2s8xBs2ca^v?wa{A-9wLBN5uyzAc_^hPH$#k8MLi5y3!O0kZ%D=_hK zT$wu0+GH;1@=Ogr^;f5MGWo$APms zT0{vl)sxcxorKm~E6J|e<{<4XWhdE{Xht_dP?YL{uL~}tkmSxZ>UcsEyD<*tQXW({ zFBqSC1n{p}K?NfFQg68>?P8td<(v)LkhLcHr-k9d-S6UzmD5cUc#9oqQHo?^5sJAX zel{C6_1p5(1R_byc!Ulr;k1ZU$W`!CZG=V-I?uT&fNrQT2|OyCB^El)x22lR{x0g% zb&cU>n1E#J{6h|b)+Uv5$nNwqhJdulkfjhQk8;pjlbj#3w&K^aflk|0uaDLdm9sh* zLKrCgBc+hb8qLis11_ZrJatsjRE zrxVcxa*TuGvkyqQKBcd&7U;nf)>{!KPL$Qm2NmUz`_Ot}W4Y{ldddbtuy+wY?xr@ToQ~R?kmqyS@2_=` z4XG4leTsQr`JTZ&WpP9zW3F}iji>h@if1(S5k;5ld&=ydU}PK#{ zf-_97vFX*1$ubX?lqA~Ja*c&FQyisx(RZC5$-&yaC+BNU@{V0em@P#Ey@72 ziM9b4=pSjY+!XFGkF{_>tsz6y$Utp0bb zy&fg-@%#`qb<*ca<1K!Nz0JG-Q`SdAeJ|z)B!zWR9B@(^4u(MZyqWl8aFF(Rfrv0L z1uRXL303}NXW&mIzSec;*YZRn^L^W^9~8ZIB%e`{kqZu%_GD9CkfWHP;{@EO%W(0L zw>hMZVF+7%QMU`;+31A`t)-QBLW3>@f-U{gL3FgHn1gz-fgufA`UY&kegh*%37dJE zQ9wR|#X>&WsK5?8@4tZS1zSWHoeEi0w}*6$CO0j{+1ZoWeJc~s|CLUtl>}Jv3QK(;+|y+dlJ<-%DeT;Dk=jL;?p17fHI*?Df~X1S@wc;nt?w5Hy9y4rk5KQmGvNO$^MsBV1=r!_R8lt+FE2$%Da(Y*EkRizq_EiQO>vJ#`{;X zv=vz!vNpda_Jpu!Xn!0vz1R$4KMkRg90i7TXAGDVSmf~Dv+)iURH{`y#$87G@ZbmJ zlbvI*`F$ZdXJ<3GpzhJ%;~2@>Ci&?>+2b(SV+h`plM4qc*Xv$PT-GSGEsVR$O(om??d(I4=(R6xdp%IVRYy`@FU(+2 zdqQsuKkq+&Oq6ve@fC!|09psw=4q2M`T8LOSyK3C*eSXusL=$1XZ*L(X6AWuJ36ds zEWzFXihiE6B`-wgBp(Wy^lvGy_Bk*VyhpJ=z5^LY?t39WCafm zdLWf_h@RHVe4r)%wwt_Ci&E(n>sNt&IO9z2@bAk|+e&1XFfMx(w6cI8t_`*`V#;y8 z&fx_&ugJSNiW8H&Z+YrPnFHpkx_Em;_$3>R6PL4Iq>^r1MJg)P2Sj7uzJe7j{g)JU z9i$i?rm5Zd6L4c2KNDJ|eFJ`+iG%>bQk%ZwdzJdV8l5ng2;z716W=s%QU=9+E&NHF zZLdQ6KrD8d?CQiNids9FYOL5ZO`gd+kIK7{b$}^Wv*t^IPU(TnCog>PFI(e7p|AX0 zYkSR_uaut)p!>(gno=M8?19`%$jy%F_5DB6b!Q>HXNO~vmp@cAuZ!@%*uzZGnbMaOCL~~V zR?4nihn6AbQj>j|pxc5MT!AK3j=`=vOS-C*tMe!uR*H}EKW&Uuta*G@~ zVvVn58k&O?L9PL1jdp1EpW={JRRBTp!e}NR=B^dP6ziZDghceD3QROC8E>V43I9Fp# zE|#5=V(RP3BMiATthUGz8dpR8h?W;JvoTb5$r>tq{*G3CBvpyNIyk8uxW#*uY32{c z4em(oO#TC_#=&1O2m0++Qff2+FWoB^hY$X`+q^e7<`?q#YiB70`^}G(|I|kNWA1N) z{h%AFdWPEJDKWel!4HlyT4V>3Bzt!62W+(eO{Ln30oQ7=>4?xIBGW>H=$59=weQQ7 zPJ(Az;8iSLJXBZ5(_$o%`WMeMTP2+J){LqLH2v#Of+OBj&+w~RCR1G@Rgq%as042F zO4U;3%U_0Y>`4^hsPBtfIZml!&MI!3etHH0(Jdd9z@4P9*6$l>NfuQ}v)Dz&$CVml zNmCUwm>MKz1*@v{5y=xK<$+cHIrx4d-cVah{{=VZ0+@5Z!2Bn+DK%5X zXBmE9oUQZkmsVKN#SO0u|pYw1G(0z?61E@z>@6y|d* z1>^K)8$9$coNxeYDXSiM*a_)jGdvAmYjPOkF0T}eERiaBOovojI1l@4I_0+RIngBkpQx!-s=T8*MkS1(!yxr3NNl=eU(p=iY^;6<#4C-PsE9(s~S8 zfxYP8-#tYbjY4kW7rQSr z!+&4XBDw+%A8+`aNBqH-lED9$`qNiDw4JO{83(gGnW1c|n}{rS$+%C~MBK{!0C2kJ zh|CU#KJ}WH1F7@v^4C+iE?a-xb7jc6T)!qPVWPk!)wgV`%QF?;N!-GvSeMSRC5!}E z;L@ld+c?p7Q5NeUIlq0&JFmQ~wd`%D{2U`R1^01pJA| zgKa@HL(~h8+862wds%y%xVmBHe69|I53~cnRVuL$b>{~zx6U$5?tIHdBm=Nf+UF4) zNbud}7f7Lcwr$V++^CI1cz(!?XkV-@niFVWaBT|%f076<>JHbqB)r(s*~*7_a<$zd zvj8mHM*AG}DTimu%}g#9C_7YXzf9KJ?~Io=x77!2D}$+qsFw0oXYDZ)s2}K=?gZdWxIZ<-mvMv5OnL)3bE~9zB1s zVRF}xAL-i5HlEZIGLgQ3vs*4Awmtox`-O=8xb_W_Dc@Owbg_icCmlmJ@Www_VfQDs zEdpnZUN1wE8#XQZa->V0@cmU!6h};M7cl5oR`96Z4|fI`!Oc0=L&@S!S*$Rpp!2JG zQkO4%$<5*AXL#9{lNQ%ix)Dd5_HBZxxH~VDs~Sx+d3Gl6#Xa7=&2VM%LI%{s->7&I zUp5lFDRQC0X_@Dfjo?V*CXSD)mNC`-57wRQbnH{{1~y_x&ckPW_Wv<7=d? zOsq?0H10y^fEzRf;-eAcbj%iL(8XQ^U|F(h`|~&8maAg9y5^xk8mo`x0hpkQhjq!e zhmN|2Km_2TFt}U*Bi;T;Y7w*2;K~a|mUD5fV;2)f^wECA-o&4BvWu-?`3c`y)hZq_ z9U>AmRB+Vih78uYW|h{xZEnSHe%CdoBr1rGqU=+F#YvpiIyC5bbz8V=DiVu-GdNor z@Pakt57{W)z2SZ7fO!5f8+bmAq$+sf{4AAkwI%UmF0)?n=pTG58F^~@{Rp-6u z%l*={VmmpThxV2<6j+0$7r&YD|6}o%^~fquKY3B@$F96p-m;uuQM|}D6E5)#T(K?U zI*l)>7B!dANuIvIyjiumtTDUe={-}s58k^cgK*i!-6wKlqXdo+Ig^3|xQi33Mm~Fo zReu;=^SUPnyPf4pw2l7$>0mAJtj1LK`B>4{ za2bX!ea{Dg)zat=T9CWJFI{A97bucX5Yu}mnBVk*H(BJ3EB~z36CgnLlI&qS6FC_i{1z9bCPtJm zZH+50B75gKjkRm$Bu~vMYrl&_@_%{XH9SY^!2_sqh=l}Pe@NvYp%tZ954>?E3rVcSGhyv|AdmCBkvq;r=s~-8lxgMFNgLGYA1`mRiCXe( zpB#uYlG5-MG#I3pLQ5K*6}(}Asz3${gkmRI>iiFQLB?8bpGn6b%H~G2KvL4CeEEPf z*3IurStoSaz`G(hB}8l=5iGrbD2PeFD@e$07pBh=d%-V~0FCzPD&mQA7QXp8(A_mVG8Q|@AUZmblxcZKoGrk%=2<0A&Le-M9TNmkR)?6 zw-J)YRAPylAKH{OlS5RO57JA%gr^Cy<-8*_YW@L20@1N1{gdOPz7M;{`JD~#;sCjT z|2A1>JYdnqqqA=5?nEc|h68XIqFP?~+sn|O$q__g{Fi7bw>t&5Sb9Jpa zq&EMmhQ^sLr^TO!mw@Tf@W-;*g0rk*9)ZbR11i#R?>zA&dBHt zP+D^4K7`Ay#ryTEjK~R`QQf9^C24+hR_m5xKir0+TIcl+v0E5w*w_g&9=Z^LonP9V z?~aIUwegc`x1y$>YfbI<#SmiLSLqtNpKp4=EO(T^T&U4UH8Pf&|FPDj6|&$x|78o& zjS0LW@f?-?u#>W#wD`{A?^a#4L|!Dg$(_7`BHmfm2#aSGKnziV#worhUpq0UW08AV zyrzJzf!e0=y8n8as(&fgbObprg8fKis)L;;>2wux&N7Ji=~aBHgFA|+;9$3XSgso{ zr*1qqR<=LRlXyLdV|V1Yj5)nsbUB17tt-r{4Zeas0u|Qg3rE7cO2J|`&Zx@(GEJas z3Ah;Ni^CfEbmpi$e16Cjk8gBwJlESs*JYdR_3S7wNU{<(lOD_L#Et->F~_FyMxG=~ zR+BC&(#M*)`HBV`XF)SN4@ZqxPSL56+1gFA^&)Tf3@o(Bjh#jqa{cz$6hYR>;aqlKA%OJb1&)nKod~}L%KLwU2!A?vGP~KV6+Jd>ujt?Q?+L4Z-tPb z%PyUCs;5gD9@EX+pF4<#Tb@`vI!4@C59fM&C#8y~Px9DL=FL_Llt_-U6680nS2zb- zsdM;wKa!;hx_ZA4NL0JP{X?m;J-#k^Jtu$T2 z0{{&#u4ZdTqMt&(fZPS%w0GJw9`Gz0c8f8@vT1V2_KufJV5BAqG$GMn4F&z459J&F z2qV5Y?fq27v2Ud1vT9iVd{%r5<4M=pw!aoTQ(HI#W1ErEW`WK$EoK2SNK20l>xt3b zx|KZ+6*f=VsL(ie9C#k+h(xF_2+H)*!A`6T4*B*2(#jW9aksStU2So-0(w1 zX79adQ`K?Va|gtkKp1JZ9OCRl8ZWD{HE~2iXAFnRs%`eb4_2|9e#WRBD(7gw{S;>A ze#*|Pze(ffsQcGf}O zF}TyKO$O+~WK*Z4A)@ThfbEtaS#%3+$4cLH~gMfKc1;y*6zj2Os`V zur2xAcSYDZ9APAN3_)*;nuOldflD$`Ag2ht;#+;sI~13L)0id@;xa$CH+qheq@O^evMQVCp%7wc7#-xy1X^e3 z&WrVreNb2ok-lta%RwbH`ex#@rOXa_!wMxPl;MtO;TF{1cy1d+?UC|7M3W6Ze_i2g z6B*v-hK{4EObMtF@E&)1-@gup$|GZz2^FrccX7WLi~J8;fi`5wBM_rxxz`DS>R#0? zd>7tj?eF#PobexLF>;YI!TGTVx+mYG%-ss%cbuj&?-75?Wp8h1A?zvPuS`>o8%U8?o&o17fEyR~aoroQqJsSSL=GU32nd zRE%h$=dM{h3W(5^tVHMq(-*7~fNGJG&GAnnGVhHDVyGI5A>N3K1ydL#v zz9$JL^7_b}!r*S`is}Vb1@Q5Q{!*0=M_WJTI}U|U`ZE@Inmb58LG7)k=TV^P;p%Sq zC)WkWU8IR_$qAwE&i0nB0jNaXk@O2=CYNP>Jp}Y zxA`7QH!tqe5AF8^bwnoZW@Q?yQQ;=~^j>4NBpSVNlLF3K=|_@Gk{Nus*(Y~R7PCP+ znGI=yN7E$~5X&!pbADnJV&PsyHBv8aD;BXFVpHVm#7P8lz^g#zu&fT+`SXc`_UphOh;tKoKoN$E zx#+&*h1o$}S~0LzrRp(MO82!SxbwJsM}H- z6Y`AUr)9_9ex0a<)Qu$+CuslIt31jawYz7shO(dp8Zx92>>AQIlW7Fe+`n_%I8CMa zMnS5TGba&s$2av`$LPlu2UrE|2rtjszQtvL4QBq+D^zLqU#dWjJ$tg@G+x=;*G!kB z3N0mb#hQN&Uj$DO?q{#~{qUP!Kwa^HLAmR2d9(AgOq!Pr?7pbe=Rz%Wm>D+&(&UcjGw-qXek&?4D^);D4>{d8J zOI4}8+O`Xg^OM%uRGG}TcfU0mw)o(mD>b>6heqh;^;EOAR|JrD$O=FW>+ z%rN2Q)bq_`-B5AZ+HFpfH5_zLK;zk%&o;K2;VK*&pV7`=K_hJQCz*|dZ0tPCz6wGc zp%Dhv_PODKS1ha6MRGBH0fMUG11l8juzY%D0(xYj?{mkZ@xbssWTP@Xp*CnJ`3e`{ zw7g&Ri*-Ed;Az`l$&y3m90nHkm~s6%S}TaKzG*8rV2`l@;V3&z5%;~v_Rw1Rd#Sgd zvV#p7e%FHH)&WiVkSU?cEnbA|ElTslcW{!;_Q7;vw|7rbLuuP%*hH=+0gWi#W9o^E z9n2y7;bPFa(D+Puyn9pM(k#=?jqO0|v^|qlyMG-{b$MT-r_B{U-HCYR%~oBd&6*YHU3etWL(7#DFg~UzU0&yYE}HYJR$V7MEMIu_h`P#bcpPT2m~uRD1Pvo1e#Gde4kvj+`OKF9Ka{#g;BvcN1~% zw4lSuV$!dedLi6SAc>0*B+acEojOhx9*6*1(V+j9<&6@E_x9UqVOAmhAVKDvz?B`t z(3wMdZ~CVB@E9`syl*^+cAc6GF`wf{p0$98WyDzjTVhwMUHpWR_gPeAQAp?FFwCKT zThkek4xBM7&h$dI3z1h%MnB10+N1|sxa;8RZYj4^KgJZdY`H+~%}(O1M99keE|RPA zMLboGdEm=FxSPdw(dbj(i*YHaiwVGLOxqJ^ZpaMtYi~ke0C052sNrtp9%L77Tuj^zzgiwb^y#g;vHfb3 z)544}+B4!lc{nFV-*w1Onc9>*f=}3s&j&tRZJ&?*BQ*w6R^Ld4tNM_4Mg2IPK zX)`%XQd9koQ-}ZVETV9xG>;^6xX3|i`LHD}#3!>~WZz+^Igojvt{>w5d=EM#Bm!xt6X+Ti ze%F7lCRRoqUGIRQW|)4+EAdOioHGEL4n67X9^3LTzC^f#)jN@o!kyj*NNaIHUv?*HGV@fnjm4xst`8FLwP*QS87qqf0@9dJt18nC z^;Cx)yj8Z6)mw`-W~Q{baV5i;53J-!+Tb{TSEaS>Y;etGMHul9ZWs7H!wcveS~hxu z(1`#Ykv`?|BH zTOxs7-0U5_??Zk2BD^f=$)X__0t%Hic;)arOmqbRfUg7DaMrMO1cevcI)TWpYPJjq z`c#L}c<~Vli({&naZZapQ-2B<|4v zZ6x=kwXhV1t|_MI#Ad1pMMSXK5bmu8VV;g?Vg)MS^?Z4IiE^_HX+Mh?E9A$Hcmvim4-)OWE*XaSER;t(KyX;!3*g-QHfcC zQpsl+t@R*C-5hr>i1^CkNhz{W^mM3&0+&{A=7>4J@r(2-r)->!d@57B|b%4e@ex^pZyps~;`B501a9_a!s|Nw(K!9uZaJG;+xgA$$n%*wj zFQ00*YC@E~-PN!kssl@yUxCe-(km;@Og^Bse5L0FlVTd%4GY4oQL73~cmXSHT22Ai z>~nKW$%6nf3?s^245`e%|rTk{#j$f11(S3~10}Zk?=Wl?-#$J?a(=FI3DD#cj{rVUK;QztS zeH+4AId?&5OY{Mf@hNJ;RQH92ZT+ZripB zf9TE6Q$P=9>!SI{Pt`!WXZV;KDWx_tjK8bCv+TV#a<5UW!wGguA^`D@+&A)F`$1pT zNE8rmt$Ib-v^!7o=gq9c#qGF=l+cQu>fuoeqx&pA@S9EdZwE+NKcQ75PBaS)S+D~e zX>OJo%(I+-HJJB--fUHtMlfAY@x$ad4|5n~gFAPKm4rJ7SX>OpSjoX_DWtT`*$(z) zOx=u7Wk)%ddb#eB%`+91q(Q(L5o3S4QHQtHd&V!x!P6%7BA-QmKyRN)ZzaOlRI!oyDnS9;MV8Tf)P4XQE^#09U>s`RQoX1)~V4`QUE6vbt79RDv0~ZBAs8l z0+63=Rl^#TE-2jA=5wX}U_jg%0#4odS1bb1HvrjCh3t&BXLw97(C2xf;EX9O(iwxP ztOqP8vrVWgSH1&GoSeXj8SpQPo2zBwMAYm0do;2EsBd-^i?Tj6O7Fdzy0yPGJ}xLB zJut-P-Ko9(Dj~KbNTze1!lZa#;EUmA)tTAFDDN~?8~|B8mF^0#HXXvrZ(5y`)PM71 z=HL3#q#>ahitsa4+^y4jEptw*yHz-M0=y%*G33pA=2a-+CRgR?m;9p3Qrzj0l-fD ze*Lp~w=@KhU|=h<;a5PS)>JdEjuT`Jzgv5&G5SxDKfaIvc0L~JyxK>MEx96ZL~Hd= zWC(z&Vq+k(#iRI-J%e#EMg3w_HPx(X`Y#oa(mG^lSJXVpUItekP^qXrT83c{9Ze5R zSmd^L;+31Fy2}<$Qxw8DxjmD!zl8jhOsv{ORZ@HEy;Id&Fz~~e@P;Zo)Akj%E?a4olvVctJy}Rhy?d0!kAl41;dc4v-*70-f0`4f962`xOoz* ztJpx00TJKYYtXV=h757+XKjTgo0S+p+DV#Mz69 zMfb1X{tIWq2LTd7PEa(s_v!;!1=ox)P^Z?2##C?TESz3TQKWx722!UWjcLja*ll(v z2O*vzrY&im_&IefH$Nmc$~ALue#uY^TnD5N1xrVVI6cWJ$N}O(D;VU#^1M&9Tz}*TVXT@I0h&3!>b}R5HzYc29ehy!V6_ z%EOI=s_dryWAZ95u!Q%yk72wIT5nWKNw%$*oxj_*L9Wbbu7n>d=z=I*wlMAqu)c({ z^Nt`Een`NW84V{4SB`4Ba$S|6@+`Qlk=TS9-fqMlQ5@cBCr|QZb|XnLW_6RG;vpj& z_F1fB*{n4AN#)k|^of(m>NEF4vw7iSW#rx}uQyq^=az4X1id!t8yk+H-rBG4Y2zkL zcvaKPaxRP-o*+Z<0*I;Vj>3snso79g7`s^}zcW9`(<^-I^k64SUXWUQGai;jA+g4% zbP$jl{(4P?c#?QhRQy?U7mS%DxyTgI_>JrxM8c!?n^p9bA1!}%GFZ6!-WF(}QIz{St_Eqtg zV9^Y?iiS!JAz?O+MnL8L4pwnX_V2LlQm%Rx!+`#b3W~5hn%J>SfJqe65hZBYqqY3O zQPsi_JZ+?fSI1#$)3k{<>ZOyU>zX_`L^^-^L5fpUy_md2vYFRcz=m@Zi`^iL#-0IK zvurMqVt~@G-K+pNQS^D{17)QrT5#=W!0GT*0H&Q1#%i!c+Q09quR5Fd8}jq_JY|GG zpvJHBBn-IaFRP|ySZ>&CSR~OjiKy;3i#D%!TLxI9q9LO!l*>uweK+^`cLd{c}D% zffhQM!G%ZEFgf-*>H+;Y=dp?)<=4<3{WvrsK+-u;A82+bh)i;VX1IYuTEb92;$5Q> zc~O1io79QIvy%@%?7>!*^=r!M@NjKa$JFRL`ui z>1-6vnxC+;EsynvYCDX0om~+j~nlUCZ#Ncy-!fx z$Kz6wgJ0gpnXtqanh$KbEJZ64>}p$qiNL=4Kb!7pGB+_(Aw^dvtMjXax)*3Xi^WR! zn2*emT0Tgik2@bItw55Zzu1@9>ZuzYL1`6NTHiMmRL^rgIb@8C`m-ee^ZE86!WDTu zOO-Co+@`TRn^Ji!A1b|LB5i;Ej4kZ%$iJRVSnfyk}hK*83m8;u}UiJ;d$! z(;xYY4Q)R-^fYv7oem9dAjr#mV!8_rX}OiNvp&(}u;wRn<7JN^pF=ljZ(;;?^|qa1 zhir3(w20d$+z%)*e;kf%+B z3_rt72>kT|25c2!_7@kiW+nD@VR&j@tvm^+tesSIcGEg!^BQR(5f)yxLY;+nX$wVD z-@hEy^^LKp`Lu?9nwKb^ptyL8-7SoMlQvX`?}U1@Yo!*ZhH|sJ%@gJs6!zsh?H-F} z2gnFsZ;wzJH@xB!k7@A260QjTm9_KFBxoe@$$H&OtzzcmV|EL5pchqe`wJ)|FF(WeQm*WD}u33ZHh>C{U&X-@%sjF%_Yzk z8i9;2oo#$YERx?eN~cVLV&+pkocBOV@jCCZAq8r|NNID#g`G>xEr5Ay^q6Jf(5T%# zD2CjN7P6`D8h!bZS0)(QO-+?Op*+1v)4V-r5@8mW7B-T1}YY+L+W$D=m%Jj+|s(C z;P!`m=R;M1E+cJUBBKv6`H)pN_4CBk2S~febn<>vkLns2m{4($od%@;2=&890s`@IwU#iXCwyQ-g_tE|v&D^Oirv97g{hQ?> zYl4M|ZF(7VbT8ZqZ!hU2B3nr>FHV14n_6Fv7wvmdN`k}DWmI}QE_zi(YX5nFd)M8WS}^hMohyv*daqiIMH4eqS=9Rzn1H)u@_SCY zbsHWDvNo(n=WN5mEyHfWkLX^)i}UVn{^{@ch?(96_lwP^uPB=aPouCG-NM&;;IO8XjLu%(zS0&UF+e( zhQ1}{kx_lwZoIx{%GZBfqZsjeCi%m~YGDs_{dogm1CCfN?mkZko}QF%#5%3kA4^N_ z-H#Uxdt9diwS9NWMa+6rYeqiLiW47n5^tBZcq3oPn1_8$47#QIBAfiy$PJtut+a+d z->+Rp*reh1Crl2Dk1FwNu~S6o!3AU###Y-{#q1&wY%*jqDgu5-gFjFW+1L}*Vwf5fu&jUC$QwSL zc_Sq}=^|s87b}k3rBYCbN5~5>(U8Lp^YXER70(~wQ#Z?8CBv-3A!!dsB|Cv`zca5m z-xn7*JFR3dj1}#*#@~h_^b0NQ&m_ba?y>2&^R@o{`I8ralJnqP5Dc94n!u^k-WXxy zW7p*N>%t<`QS3A&H;6mXE;;dz>ZzOVDw=7KVv4xS3)E~pB@uHMf4w;6LNhAuh5Plo z=tN<$4bTY%o{B}0!}}c<((NNAn3)7f&X^WHJ7r(lQ8KHLV=$maA5Zagi%2F^({U)q z5%mJ?z-*Z*m33bV%|(sbv6u8x2fDn_x;4;p$eSZDBh``n0TbyZ?rp_&$*zlwX^hOa z!etdtX{F>llN}OJVW&aUdJE4V^f_j~CKPCm`D(+gE-hkTeIxe0Uz8#45@u#VZt6w!yWWx zLFT(1%MDzQ+=zAjO5F10YjM;&6y!02z3lXu06(WE$`MBN@)LoR2Rh}jD^tNK0oB(I zWt{q^a`_gC0TP##u~hVKp3a-Vj1hL`nvkVn#=~!mc*Jwk6s{dbc>~~hss_KA=d6Zg zR_MA4QfuXY3>VTwlZ$ZYjFy-%M+u~JoGnkWpA-^y!2$EbfDbVkBPkp52x04vJf5zKRO`dt| zd?16Zv8=?pA7Xwdnog4wz*ObqP0|*iQBEr^F-=le|FQ4Jten>9LuAX#&;8`<57(4Jv8&*m%PlrfYOR-_Xa(b z)9i}p$G)ZT@iAv^fD4(W)r8F{r0G&Zf(u)42hYGABo*A%mRxVKBK3NV3uj@5p7yf- zD5Wqym$&c6Iu> z-JnBXsyn=`%#Etf>ZsP@8hb*C?Pz2R)I-uBi#YL9blu)pO^Y8f?S?;H;}|V~n}VT3 zFZ3(3_2Ahq>;v)CTp{u9I0^kV8DmZ_Covx_gN`gbf4v}F&a-zg>Qy)~hb=1EK~fFz z`dio;7Gvdr%+Oobl^ZFm&x!On34x8@`WG&oUHEN?w0L^RJ#xYuib!Uxac@4QH01kg zri66bB!s)ZgGd+?*bVFd1f)+A;geCL&8sqNZQ9XoL)=X4rLqKND!PehGq495^jo0~_5vfgJkqWh#Ccg&9<1!Sm$zI@%KIvZ$6=7JyuMNLG zh1}zH|K@l6v1)=19>$jrih`FYRww0-7q7`ys>p=$;%dvcCmAH%Avu-%rX^Rcl#eB; zcJENWiKM?oNxO-1)TG1f{fX$3JBBYAQjbTevOU_nR???#o=LZ7@wR~N!+DDC_MF$L zJ#e^N-h{TWgQrwmvyZP>G$YAcw=Bv+^62&E&Coi_k0J{UL(ENeD3we@(y29c83W8k zRHsOI699@QFD8Vop%BX!Y}5us#!l2T{xE@tIvj@lR)>{E#RdA&z)RNu*WLBOkl(Lh zYk76F#WmJCnMmTNF}Kw(Gq2AO+m;!241YO;^v!1dFAz1Ec))_(?^v88DBE{H&vo9n zJ#;O{5j4?OT=B|6A5}nX>!w@bHrFt|8LX8JkYvj_~JB>=~&T*y!B-$grC%>)1 zsJaW^wF(0H6=kRk4X~E<;YYK&H53&y?Lj} zt5SF0>Xs1nue_^oqf&##!cc99)FWL>O%THGdYR6;y3dy+pZv8}4_!G84}bQZY}EOP z6tHP+VX4}+@AQ5)W|iL?JG+$15rMVjCF_BU=ku9!56@mrb~@lAosGravcE*q;A{H+ zwieNzRR8E~Y9^jBp2oETF#*C*jV;>k@O^B>ix(YAGvFlF;CXbBi zSKqf6D(q%lf4wJ=UB^3}e}xf$1v(C26JJ%EU{F+tppATQ{3)IPLTa(1^XXEUfQPJ1 z=+l_s;s>|#?5@(g2iz`!tCGyaY1mf$?sZHJN~13mHoZ}&8s?@xY|X}p2tE=BiZ9Cb zCYfxB#^3+CH5irP8-I6AhTp+>U{UHhd+YT%)qaw5lj)Nv{~dP?95x+lcUW~WME{k%(QXk|$T z`X`%!B)OFHPk~iG5omQ$D~M+$Kfp^C>`zqJb7f?aM)_X6Vz&vAT4rpxu6tz3#N9w1{*XTeHLtlE-sXjzk!nuoTzah+Q zVKCV4xoVQL&jwLI3kt-+%uMN_Rsg)S?)$?F2j1{|%dWW`pTm&ok^)vnbA)>117kW- z$!)@gBi#he|8)GLxz95=2lv!%2Y!U^%HS9=-{M?-;r%MQ2>D)F#E|=&ZYerIo6ZvF zvxjEH_1ny>n8_UAj6OlI7!jG)pFg0Xz2MfneORw`0r-#y3nXuw<3#sn`@0({bJ94|pU zU5oCh)dO#Js-tYfptg=eA!K4nZ8~&x=6UA#-#a8gk4tZUfNO+C>z}{w=~@7prVA$% zj3zoDa$4`;Iam5~nL^qp3(y_2SVFP~Y^*J_JaIP&*0O&{=$m5w%4HOpah<(lm5 z57EG&_h_I=v|_D52W<*)UmHq7BmXOZ4vV0(`^R+=W`>gx)=9@5C|(A#NS9B>^*a-+ zr=yVx{j+~(@;;sdc6K2-TL?&3a@F)DtZdxO)NSP(h=zVi-vho&P_n3gP8qyJb*T_= zsinz(6H|XJB_2T>SV%xC_PJaTL$y|0G}D8{s$8{}L_zMlgTXPHyT-hjqUl&BPJF zMO-5^YB@$pm=&7^uzrpiVNEBE!|RNcg*s1ncu3C+b`5F zexQMd(q_=ZVtf{4hAI%DH6(9~-N?#LMq}I|2Yp+jCmg0|4l4EI8 zWnX^cIe(6(6w?*=?8CutDzfCAZcjro@wPumcs6=2aCn8^x+u5_5BgoXZ(OwmZB9=# zYJbC0-M!eKp}4haKvXfu`&rwO`%VxDduSJn^;dUSBAi-zF)zC4~5!A(NsrKPCy`zk;^~*eKT+@Sf(47s&FvG~?fW z%UB7uX6>l-Rr=swZ!7f}&ztaQ4TIsv?0q)kR};dbe9v*L)N7^99q96p`+^{B6(zL( zL2DoB-G{(+C~-x>pm1ueEjpaedf850C$mj>ReV#^H>EW%QY5jjpyUc}9Cr|i*&0@k z&GeU(GvBGg{rT&XuLRQX_v@jd(w|-=DnpZ}iPF{BDx3x2b!I6E819GNN; zD$6rMGu544g~>hB@s9+?lnQB~i$W0&u+wTs{Q7yTT$bN8ua9w#7XV^T!|26-%}ro& z6r3zd8vhZSuZ%_t(??g-U+(#AGNMcOhIx6E!B1*|G8(nNp1AoQmg@IDCJ#6aj@XP1Z2{fS?&ZZ#BGo28Y7JXmf;I(uLuU)>2EUj^G~ zsa?MKA;9AVdPj@*mmFr62#Qo`L_I(ID671OZ*#!#RcO`;$V#VsME|xh6|Mx;#TD0U zZzqWK$A%93rmx?>O-{`9W6k+|h+CG5uh5-aO;j@9zD|ePrv{bGcOm{ByscRG!N2=B zl6+gZG+$IRbZP=ZP-0~&Ek`dR#mqc{ifeFZ!J?3=FPK>P-96p^wZ-)0+(L3Qb>t*+ z+%tVLIQ!G>L_Ds}Yg(C~*Oc0H(ISYPXb3rf2z;4S$NbO{U9fr8bM*m;xpD`eehs`n zv!6HJbu=k@Ys@6yL??pf*aT#Bj6Prql`#X`3hximiG4F!Rrr;7+kfG z_`)i^)3!)kBOYc&-DiNR5TTM8WrtERO^UNG4gYB*oh}~FdbfWIk}ad@Gk#zt>KQI0 zwwwB!%q@N=gwPj^#q=RW^3*@y;IzWg`$P_GaXP%d;Yz{$F$jildymHMo$aPTcaF-m zi^H^wzJ;jx92`p=Bt?wb3X*Zc5>%s~-C^Wtpp05RbP^tldjb<+C~oVQ2#}PhQ3i=x z-!1YdVpV-if%WsAf1l6eFN~k~>!qnI%4tKAqM=QtA0qf?(TRc4?JMy9Pl!a#XmKQ` z94*zgZ;XPt9bF4QrCEBo7GHR=VyUCzlpVPqmLShZy05G}3uy3??(Nbein|Y-VftE4 zB{5n2jO6}oZwWqcO;ulgbyilrQ0?;fL8mqE#o{t|F(*Ek>HubzUa(`%b_(i&DZj1z zGW)QQ+#6jQ1DJ}|&hf>D(;A_7#5@auc2l(sx*2oTw52N%D`3;LO)1>sl>iVn5-;~H zdmo;1Q)k!~>9tpy5M4Yv>bJi!?|>*su90Ne7!9n^MCI~i4*6D@gYgTYdwdi}D3qgc z&-oI9)MoCDWG5KqkiCne$=%+Hn$wt1($k4r7MioP<^%f5NwR6X6K# zj5Fp}AxP;kI@F!`Pb)&QO$XM=R(a)?i4 zKb3636xG{*$sZrO7Vr5>x}8?$CJFp0klK5#Uqln`qw=>)oKEi;Cr)tG0>Zxln$KBN z$;SX7n*KyEX66U<-jK5nH}?K{%OlL{+Qeb6!2okU2GbS%U(b9C4Cxe}JBD?L2LYbi zQhm^asa@TRU7^}IdrV52)Hn`vsyJ}}Rby|C$b?Y0(j^Mmst}#o%z2HNQno;W6^LRo z10oM!;ic`myh0`O6Q+Mls#QFYI6nG!`Lc$6r3BIS%LgR5UWzB~>!<4mhO67|NxVKA zT6^Ox2c}HagD>)D$}{ty9o2g@Y(`NI_gS02Zo@6slAJRk;5xeKbp!p~LdcH8$Fj8d z9FH4_fDw;$@TILrQ~_WDK0Z^4zt6{rlqX>yaJ{A+52FxMlNTNSc<@=F3Jh(l1qUpV zp-+Q3EE6d|J?`pb5AqH!==N>6;YU)?Y)mj?H_4tq%*^ze?0aTpC4J%x!@}6ParLvh zU5{g(0Gf2_ij}6-#7o(rp6-jUjbEys1zO|S-c4NC%-Rbkm+lltN*LKaUbIF^U^9P? zM8!?m7W)BTQw&hrI4-f9|DAGR{P~g}R`$EEyfyiYA)qb`$qHjv!t~DZa(P*_vIS9D zp*UBMIl58f_ko_w?wOTeCksI|=^Vi;VQA9y@RHB_5)lQV@bF&ur3qu{pU+bIj$JsA zm9J%Wx)#IYwHSt;$UC~pgx*as>^T4-aQ|2vo;qOrw<-H;bL4tJxT&TaC}w6MBdsNR zr&xo)?n&dqZ())IkYrMbEM#SqC}I3nU}J4pi8cqlNm8`x-mMTt@gl@q+u0W*Qi#7y zhr~vzWxuv;0Y_F+HllXv9^*_H8j7ifJ%zfU^+~>0Js?AA)0XYsca^|)%-X2kU*Aof zCyJeG)-JiOkAi`59Rw(eg`9`Q{tsKI*^RQ5QdamRAR55KYqlFw+BIOe?TH_j>=R3I ziUyU!1fQ0ybWWX%JuWOyIhNP|Om`zlqU3OxaXKFexu5OtCXPZ_#YvuW{B=zmGdx~I zJ&SHv9?=|ndS-x=K(XbZYgP-;zauzL?! zdZh?rHa7D3c&!h5L$_aFUMq+O_*V;?m{pyE9`iok&fP;c(Y$qN6+7Q4P zl`rigfEZbsR(ybI62f}3J~JSfKK^UilUjs)d&TS8SF1__Af=!5zk+;;G*JF!3alAbm}b z^1)CQw#pg|Ss+!o`Wx$}QKAfdcJt-(eTODKvf0H-HhcX%M8EJTcLlre*@@?VNT5Up960{S8~oj0}ZTaQgB6+q$!@6 zBVOz~uMf%Oh0?!4DpYsR>#~S@i<#<^$_Ot23)P{ zsyJ)g@o8yTaCTwHh>(5@3+iR3O)hmAmjF-EodZJh<<@va` zdHD13UzXv(E$?c>1d1L)ymyk-Njk00eA=WXPA>bE|E8J67tC{UDY;r*koh0^r^xmO zbGjm}=5K`@kOo^4RP(7y^x3TY3|@$ds}uj|kNhue)!ez30*zTd+ssg zuhbg}JRxKk=GToGb<9G)rGQYt6?_Oc4rT7GKD2VGtJc(!Qv5UvPO8L4`qr9I+&$fo zjF3W|l&}!uQ<>dj`f>kjyO-1K0Yg=jLF=~==9h^?*3T~Fe(=4_I?gJw{suSFo6(G_ zyb#Sb19c$+%>)DWYGN8`qW%_K$c_wkTu>Xmr8pvl?#$x65i}I6CiEWEGRK9T_o)Xi z9iQ&keh@p)U)fq&;3ifnyV75aXWBOjsP+`@;7pCLpjf8xhP#W8*K1-Q?CqXV`gi`nrUkVO6ShUG0~YEk_=UZ`K&9v|<~mA#p@FwS>Kq9ozd=$a=jzZCjZq{|4e zYU}Qbq=!yF-8o(l(o53TvPr2O^P^L?ds1+=4|T@Q*kf-fuL1To_89nPy@tUAB|j$~ zH|Z@Nwm7WfB$#)Ezl+yUB!M#vDk06VAkKaA()60}bs9qOGO@Z0FIBRLd~uoB@j5KN zf2A}`X^)8=2)khw$xRkQ*Z@z2`QB+)Le*Wy=yj>~-^ND_ni)8t!cOa!c2-R$l<0v{ z_B}SzS<+8+Eap!Iu=EloE0(|6Y3&tLczlH-wKmX!Z-ayl7kEP}(BIzoGK%?L$lEZG z)APuwb>-nOjqf~1omk-#tH4d$P?lNMi3gDoU5y*DPFC6O@{9{BmO1d;H*%*`2 zDRln&rTY0I9OE_&D{Y_V!e!w&lddyakmtq5-q(P&vY9uAQ6H0vA(m)f@aW zqTA4!P2KAX8)~aUDDz|mbqeAK;=EHCF)#f(_W}P<0A}{bVQydXiX16=`EnqS_EH*E z=~xcuPN|3F1Czzn$nnt2Qe0_QTo9pLL~W6r>eftV9rI`zqKgrins0s!?!plQwdKG` zvvI>q3tY~tf8F8W05%pU!!^N#7$!^NPD#KV-gt!5ZG{as2kwuA(K!vj8zxo0MNIx3HN`Urp9&sk1kU;$GwZ2`QfDWARoaZ7m(%%`a^~ zZoFw{IHoS`U;4POU36XYjd!&t5LDEVWa>db6oEJ=OIwNR_%StKNjkE6wb*y{um$Ddos0zcV^Xae;XXMtFD_I|^{ELos zW~at4p(8bl1>zUiPqeoHn+5L6zLtKYRT5&tLq&Ldi2^V=lDJR#(>M22W`Cit+43Q^ zAH(|WEQ3$|#LStEjN<=9bPP`BucTISg+?r(0;C?>aXft!sg0Mc(x@V4YN~`Mn113kf8dIdlqNf(28 z40sRoB0AUTGNBh=5g8~D&cY(Z{Hpcv7lFUw0eje=h`-Ut%TklR*1`GaJ94Ec(g>c+ zjEvUnI&=USJ%$kuE8H7ArX#aWJq_{Ym|Ydb@!O&a`=QFGsz`NkeBbeDJEF_w9na|p zQaBEfd9UQ`YEUxT%X|kidP*QP!S85&*x8hyTsEu|k zJBwwyIS=su6Ras91Z=dUFjV;1TTg{69qlZeB^TlDJcpK^i36egbs1Xx1g=Y|FlmO0 zY%G!S$FA-g9XR{StR&A~d5m-hT6x8FiJs;>(9AYE185n4JA zy|hB@1QfG(jq3D~LAC$hu*jz7K3VE>N-4+o;UBLAen2D7w-K~za(Ib5t1cFpZU)tL zbB~L`%tJOpKz#5Bzk%#@f%Y52BN(58$&*~Kx&B=kMVjI#FJ98^2ou>aL4wH5ji|Qe zHuQK;0NGP)r7T_v1hq$ue(GAnfsh~L1xp0eEu(_1a>0e>`3KB-MXx6UZ zeS-GEiA?>24v(soM_j)t1wq(2(;5;X(kyA zQLaUotiz8CyB1>f8;D2hYJK>IrlHWJ1^vY|R3Z}^rGrYna0t04Mrw1+#S8-zmAl+E zoI(s@ZKL9{0jfy$joR6p^%uL|RPblPN}kSPEZb|@y5Nc9zu52LCpqOCUEZ!b_P!}e zBwxbSLeoltxiSb`V#9`71)5u0E+Hr*f9Gmy^h9qIt5s*Mj;^cTec@lU2@kXr?C)>= z^&upqzUKRWT;iv`gWflTXBiW&ykawfpnElu?n0g?lM)fx>1r6{nfRgCcUD(?s>;fv zADl)Dc3&Ys)dz8GT=uS-!mjeO4qgb6hYl{?&K6Dm99bBWyVj#v!>?gw%f*D3)NZ6Y z#xGmADk*z)j_Pauvp^F^U+eU>!(PC*b6Ng0cgYwejb-;_%E4^sSfZ<%!h`CY zcJg*TC-&PT2}Msl@ry=he>`zxp{23Wv>}v+N6ig2VpGti5T%XdSe>S*TMbMyon3jPlZ_S5IgK%VZHe@?a}%%5 zUaHn+iu_w)sNo=MrGN6o0Ee8gpGjWq3n*<@Xpj-^L<>9fk_5aaQP`~C&budeg(2NL zCjC@dI?fAS7}KL7+7m-!J59JNgp>H+nN()!v8wJGuQYrf!$mX!U!Kw3{l6_9BNjWi z9I%a+G}irbEw!!Kh<%^(0~4O~a3>BQOf%av>g~K|6k-o)J+rWBTCw@c6^7F%Z2rFS zhH_-@aXtF@MxPY-(e=;yHA^s_iTCJr0V@xExC&o(SQ6Fx4xuMNpr-TzAhRU$ZJv+!ltn!=y2V~}?*R==~fh5%WX z#Zh=K5Gsz7+*agr_@7GD53gXAX%*7y&&@sf76A!k^Fl=?@C{KMS*9Tp=P_W71#*_z z59Nq?^P3wmtWxWgumQr1>OEY#EPF9-Hmiuz2UPpNY5jd+L5hqXx!HV~zRe=~CVM4}87 zO&kS*+S_Qj3^~>yPeUC;Y5=DFoNdzw^R$Hm-tfNB3QcQm%SpGs)kT(aoS;?dJ1xk~ zI008KBS>?rk+S(f`y`4VLwV(Q`9u3~Up8XfW$Ah63Zb0^HuJ1JjJc-Arh)*)UmRcq zX>PTSvmZKVpxf6Bh5;*8h+mf?$Hs%Z3DX=MzP^#PFSp)eKy6W`OeYJuM&}V-{q$H< z_m56e3Zxzr)vip9wggxga4l&uYHA}($kd53#;aD2>UUlkk=a#$*@NVzA$m~4aDY`e zCIH+Ms)q1XOaWf)w1iO&d6vJ9NTI3c`qrBZH<+(xpX0M1l0%efKRFwT?uukMtbyZK zH$V>zI4xVrT*}-&MtVSvKz8WUD$v<^ds*pBiuvH5t{QC)JsOqh)rsCx_B4g|!0%Mo z`0f3yoTdF`i1{az_>XyxXL!SSQqlwZ-Q1(!Y9)MnMi8Wfy6{WRlMh+>_9F&(3AaX) zElB?PWn2I!_Ed59eyW(EdcmzRYNjqz`^w9Bo0pQ5GI_U`ilo49D-hNN)P&C~4!abO zY};MuRC4&m&x||#^h|un;OYTv2n)>UDR+T^bbe{e2CoPNtwaq60fux%O_ELqVJ>eVj`aBr1hyDo=z({FdNzJ<#0S{hI+~aKWB3w3#}?ehd9*9 zA;bs)uRr(9kyGbs#*iQCGwqVk06ODGf5$iI-Tj@X`yo!IuAvWXEBy$#9lF+N0+4Da z=5cr+P5Kgr@gH2u+L>bLv|DmwkqUqSNFI&Nm9U)}leY->EJp`j*}R>JZ7B-6`a0_a z`4FeQ@NxQvoA((tvQlL@0Fcy$A7OlZ5Xe|8x1T8i;2=N#nT~Z1nfpyqBu4xQ(-jiG z8rhS;i33PINFor1M7Gj8za1*XmCx35ulB)9YYzs|`ccC{ukgYf2$9C%(YoWQ%$F&oROO5sjFLmS8qA}=ryKl-Qlh1g zJ5)JGuuk>N{hj~vwK+A`aFoUcS5GG^+;hgMsIy?M4_je)AxQ%Dn4Aq_-G?aP#4mN}d zE;pP}<$BMqFaGF|y@+37&od*KwW+$eQPZ&?nbO0dc4A0pnU34EPdtr4sUo3%tjKpy zw?g^)XUoxyW0<|Dl~2$ipZuJFQnO9V6&%tnS7ycU1=DO@PLu1TG0Q$AHShAk$=1VA>LtyUlC=P_P3c}bf zA0P}JqHMWpl-LeXE^3NKVZivLtxzqVs*n#b4$(jj)y~i+3$3|#D;8Q!S( ztFQk)pARQ7J;PoK!3}S0M)e|sD|xcP8&hqX2csCrAh#s0A{68%MU_6JKU(3orGDB; zL0s&|!fQh(no3S+Riux41iXcZo*K)?jsB+eIv+1WqGmVfAG&D-(0xGfE`PFExW0HS zO1<$+PWto)qwN1l{6&`vb4`#b#X(mRa}As)TA7cP&z^WNFR_5?iWGJ>H~K`bh2m|9 zpEJcEFeqC8zuo0sWHOlC6Nn5{$cILnVmi_(zw0AIgjAdeWdCc%%Pc$EM+-0wM00yl ztIQu*w1H${gi{&Gokv`v6$sdj7a>~_LO9!9B4JE(3;;&Ja+B2qi8IGp1t|7xwJ3Le<64N`#vj;EI6LGQVO6eKktVVzY4GTliSSjnC*;k>Km5W)-4=e_>xu`-=j;`soKhiqdQzc)<|otnL>^KS+`Fpz zZ0n&wGFbr(uil(@@S|8qBiUjIao>Lg+nogndDvht;tenBE@@L7E<$S>rK5f#5@cUQl%V?&?6S$bkFO zVb@iN?fsYc8ojlE<-|$|Ovph`ue=X`Gy|H-I0=cFM8Y}1nc8?viL`>V$-f2uYofOM z_Vs^P4wa1qR^~8GjZ<-1D}M}12YzH=f;0hN?&*>eSGasK5tByZLByyvUTUepGzuUg zqO+3!#xsF>_PV|_?NM0x%fHg&P{GyI*i+nf??)kw8U;S4{tU=;iBl&zt2SW_gPN>p zE7MKkK-IJj4xRy~F*=}9wXZXR2MMQMi4o&bP7}Ci2cF2?M|uA?l|uhd z^7mM0?ZFv4?;kVR6!9jOYnGZ;kxPC4b0ApL3nAu+c1$~Z(4u_f{3sQUL88C<3c$16 z(a++5noZe=O~r%FY7u()|85`fw1fY^7hpo*c$$-W6uAca*f`)jriwS%O8Se~q zN&@rD3!$67--hN=nEcJdWy}*hxjG;UXl$*+5beJyCrqnA0Y55M%={F=ZixwpNh+|ajsgWZN=N50^-OOlTX8ie0mOy z+c^083u3$ABe4qF1ST9|KCdv*UhHI2~z>V2IKy;~<;~XlU_Q*wp?ZDS1DM zY=P2E$E`OE@c9fuz3_-zJRoVl2nT$+959EnN1a0fxpX@2PA)DOkwE1+$GEAy4GI`S z^{8cL%UF=lU#W|IprJ}k@==pggULX#;s4fwdzbHkWTyE4t|vQve`bT1{x{lz^c)5cKPELz>f|3~2^A@cei!&xxCZ3?XR zB%g3xjaq?MWuMlGV+nWueexX>(^Z|snX)0opRnU!vHL3nEB`%?9$0;+1LgVvp=QS0 zWu`^jWn*iJIU4VnT-!1rlb}y;H;gkjB(W;cYBd#Rt;Vyr;3{ePHyVC3MUlkAI`}oN zSR!rU&{^)tGc|wvDl~89b((v-rvG_B{`MUY$!-kwn`_U zxol{bc>P?zzT=lDXtG6HC}VYCEu=PTUt4tk`Qdx&co0$7oqhfio}3u!WBp6jRfDdF z=?&xYH9|X0a+^3BS~e=KKRb;gT+o$2X4YTA+3DRIP#cw4?%nk<5CcqSul11_>j!ES z`WFK6@sFMlk^%!-NpKO-uuy$~J^qycQvpaPdY7Ysr)ElJKQ9{{&YFp;WW4h%av42Z zw0ZS#Fy?rVaQndXh`afb3=r=7@6Qkct0XaD75{OBNdR%xe2!M7>95BSdK zaXKO&^ZN9YV7bOD{2G%-@)ihViw5RVfI$1v{dhO+Yox_=KttSye+BHL*xf4=aQ0|g zDu`9?&-l-4l~GDJea4QXK)c~MTMJ__LV?uZI}4-1|C(Ne%5cdLRs@4C_8)VOEAb3w zCHHpb5G4k%+$UHXgz=g5hSi_YUoodmwSVY1Olp^RE4pO)+a!{TdwXB@<+I( z5;DY~!k*;+s3`if?&HEZ$?)#`Tk)#W!BRoP*7Q?)HQKO!A%UQ_bys|IEiLZ6nGr#PW+qOTs_2qyJeqvF+D{v00(+w0bnb zdQg;JHGk8Fj8B?QgJoayu0KAAH>>J>K24nDpXmT+2P7IF!?ZOQa<>rFi(P4q8iiVY zQz$L6bE^Qq42Q<%U|U|{MBwg3%zb49xpeiG1Pq3x_CP~RY8zn}FJ-&d4yd7N(X}r! z%>2=i@kj1RpnxF}a4d1zZa>Le;OK$xX_2di^u>5Gn7!o4a#S#57HkQ4!R8)oN*_-& zZx>?%vp0>8Ma%~d=t-{#hAs}I;3ibY*l6?ji4=0~wQWje^GQzD{F2_j0|4=7hlRB( zJGgVV?T!w}_|XfKFMvnH_XQC+gNJAl*I&%{+fhYV4ca$b_EDo|IQelFA}Hzh;g1%; zpuHejLwTxroZ#I9gQv+8>zC>WCdse(B>DBirYiSvsMa`mHgoq!7^_3VTiQIW1fq|F z0ywKNWC)bmaGxS@Hpi7Zh^a_;Oaq9u=lEoTh{=OkNPU0c4+K|+nkC8W`R5d$-7PO@ z`gyxHawBp~9(Y%Z-P+y{f76_r`g6dPV^DT59G0UJc!4Ec&e1>zYMe955E6`JZvq!9 zUimf2yMJ!Q%#ucc5e3dQ&kBd-Cq$RwPe|U7|fOYc6dZ_FlCf; zi&iejuAjQ|9W91G4)LT`)+_ljRisG#o0oGAyT01qiyuT@6jnf=>v5EDICiwn*Yg&N zLum!R{=I=+0gZ@`ex+&d!6kPqVz63#S;NX#ROE}kDY0b9g~b3(?I%y_JJ8hCR0Pfx z(<{I}m~Z@LRZ{gCzxz!gor_PU>`^#wZs{bGLUXN#Ncs_b2;I*quGxtOdp-U@g+sN& z6Xor_v6!?snP}6W%o8>a+aTGtItof!uwtdNKUBEo+w+mH!P$03W%loSLOqFpDR_ZS zNHXqm$hww3V0g@3%vPE6P^zIrW>yxb7`Q9Y(izyNGNvId(h)|j*vL{4FT7duMYxcq z4gtqC!zxbtd{6k1E=Oz%+8%y{CXb3Le1bcsVx_M zt1)EP8!$(CkVa^J7V+^%)Z{8UOs!(Ixt=4<_y+#KsH`!VpcHd{UO@#2L~n?1AC<2M zTLQt^Q{^tmVFqv7qeP;ix5YVAnoQf#8KpV6qPsKs-bABW$&@t}QN9GfHv;?Ltl)!R za9o!JjT1b#miQtL`V-EFPS|#7Se}0&myUz|eq=}N-$NW9ZB`ova`2=Fp^pk@zx>E* zDHjN`v_@V65kYsZ7%CE$!7Jp`&Pe#Z@n(%rjnMH>S<{3t41K*K&?sbyw`8}#8JdC}AkVbeKjs+c}X`*gT0 zpx;qFG#^sBkAmHd4t}|<)i;*}WnH|Gn*$SGVnV9Uq3^fsB40&X-odszJ3WmD-q-rG zPpqyEv^K_06S0N`x0;N+Kd(|RSLBQi><5q9gm~T4Hm*%W$1Z1S2H7VLdm^r65qw?% zM$S=LXRNcft1Qxhiu}QcZku&y<>+04aJWdRm7+t6{0<7{Zg~M`eb1yo%MzN@*fSBr zu85L+t4-pJr_aBN%61d<5^NP4oIVlQZ;sf58R5dKUrrrCU1n%XU{4}HiRo>B4s7yt zt$CtxN_5Gj*&LSrAnbCE1#87=!&H~VcmHO2eH5=pRs-w;P8YLf&8X>m0pYA{Ogtfi zQYSfCqQKpemi5$nlI}6?O}G2$LCpP8Ri{2Epf@j`&nw7u#vvj;eS|+@C1Euv2S58e zYVcY9GadfxIX@9Rs%Mecacw@U*XElS*mVHnGKhe1!fL#3GwLP>{k-xLQ=6rQz znS?yG5(e*k2m7@CA5mW!6<5=Q2@LM;?oMzE?(S~E-Q6u{2=4Cg?!3qlT!Xtigy1r; zlW)(S{WWv0_3iHJs;8=+Tiu)48Tg~G>_*Xm5g%crod!b+nRRiQj<=0n6?M%;qk9Bq zT?p8BE=&_sxeLM5RRV;jXRvVQsH;-#mYcu8fA_QIi%E`#I;JpBMVtxUD{mc*5c~x? z%TAWmbdl!jlMw&c6=S?;|`I!|HPnw1t&IDDRt>D&i-*}^%XHu;cO(Vi> zrhRbv9rAx6<{5AbU;d7RY<~IxoL0!PyRv0E7}8ZwhklS%`J>R7M3!$)Gx1t7@FB+1 zYMf{74-gv4QX-OtEP!-JrhnUB&+=3J+X9fkK!}0lj z&ypGBB*(+&xUv@*Pkx`#o7da0DE{8TfbP==t8#(IPr_WB*H)_`R~H4H3Geq8Bh2f6lgD{Hb6qupX{EJFifl`%?-2cb zS9Nt#N&;%OOgYOs$+Te8xx0TO4~M11s0~6e%U5I*2dRCV8NattY%m=raIwmshCK2k zCvI6sVJB(%KtFVu%3T@67%|-*2vf{O)l|N&DO8lXXbFMO(kjoPa5wIK4xZ8C^y{Eg z<)@8Geed(4j?;{@?B^3COufo+k76r5e6x?hXc4P#N=$Z+lRiEsLSlFsJsy9G&sAEQI1(quj!)l8zT+ z5qT{;QwnxBLA{olK?aAD5q8(N)M_3u++x7#AH>~Z4uSuX4kV>J!~!znFN?K&pvBz$?$y{+gnoE3zm`BzZ$_Ft<#+P zTCs_EIZIU^t7S~~YeJg5Zq{uVENwbeovnFN-9?<6M*!wKnKQL*3#}FVl9SwV}GKxk5c4 z%HRG_V&)HS(F9KqmEM59UKV>VtXecfw#|mvG+>F5-q#s5+yt*{K0~%%A??l{#;Eoi z%6P$0uy%2aQLh+;`ZEARAV7Z-u~1WNn^X?B7kx!R_jc9oBQo2Tx9B5s%K({S_C=ic zh(_yyM&J=*7egMR$WN?w%ROl^ELFs1X7}t`XzmMO1u|SQo4Sccf_e|A1t1=7MW=QS z)PykLZ?`J9(Y|MDjmjRFI_&us6W5Bzwqv?6?8#Sr6|5Sax@i)3;a4-}tntL~MJ(?E z2bcBijaDPg%8DGlMG85mJnBYu{^P?V@zzT5wQfPNhebPFKMUdpG-9AiZ$PF|&0VW1 zK`^EU5AhF+3?52b0P{nQY9#H7n6(NEGc)1+@JEME5uZe!|M6m6p!baup?4$UE-0x z%j=lp#Zvuvn2wXS-d>d#NP8ROr#=>OL(N(T)I6u`JCUmLAL3WSI?!oa{uYl-cLLjA zZxS~vjbAvi$!b^e=t$re@L40Z7-pmMXzfg%Pr$T(9FLW5=KuCQTfZ6%b?)H1CfgkWz# zlOEWChvs(k8)T7$8F?5~e1U`A8-;Hh>j`^irc>WgFZ1nJ$;+36oeYN0XP zeLEg1dD97IUd-d(`Iclw!omgQUk9XoAV=aTE7+r&-||cu&DIR9<~BF2><(rlNSJH%3JCb~|q@Hb=kAhkXvLcJI6}(hRl)^yJ7}Y5Ng?bpwg}P0fPe zmq!j%zha(l8;IXB7IGixzQajwU%d3ho-u_O8!>-pyOri#(GGS#F>oXWAxQT>06A<&H6L&LV!JLM zmPu{okRGm?lCL4e1|7+tjbC+e>GyuSG_-W8h|apA!EbsOR_*5Anq&}PY^ZxM(JF#1 zZmyxyb>_`>gJ&eeCeflpW-em2hOHI>7!E?6{+9 zLxC;{`8lJ7`Qlm_w^%ox07y-l-=+KSZ(KIapy4+?S2pMbsL9w03Lk*3Hu6a7alX2? z%M2St(G7&!I>0eAc;XW_&~87n=O*B?Kki!y1JGl}XlZ=NYqpT&$@9pf9w$|z@z+Vd zR^&+KJI3pr{g_9Ce-v@Ja*NEw;5V4j(1Rk?Yv>5`DpjknA>Tq(Wta$e*`ff93(S^M za1FQ#jzWWhUtj|n9PZPYmB`0`VOS!H_QW4O+&6v2_fbqgbz!O-hYHvIc#s^u#7X{W zy$Jr}Sua)Sex@7Q24kk}>v6Bvd4m(7HZ_#I3^NkJQ1gT05w9FbZ3bc=6FWg3fOZE; zsZ9y<`IFTN_q7nm*D^HoAyGc%Bu|+-u%{+K<-PF5=mz4L1!ob^VO-c#z=1TOR}e-# zoime?_yQ6jyRr1J`77SH;u^OyK8yq&lnS}oeJ~9h-eP?s_o1PmId?(QFEPcz2Evx z_`jWlV7igA|K>gY-q0X@TI%^P(0?N8vaF+`7w46Bh5PfRqMf?4ZzhnCF^1j` zkK6ATC=gj8Px+TH@xS`W7UzNV^#^d}f0R!C$uD}epzL~FdnS-_FOd(?HtU)fpO~3#HsyxKX_y4n@y6xy|tD!!c1ri#*T_E zRggqfh-TTzsL^Q#uB-VFr3#1orb+4@!pc9hvn*_0t+=fhhvrn)e6LTW_c zMIvEcu%#OH6mUKB+K6MZqyBZ@Q|dw!g7#R9cC|-j{(w;PH9oz8z^7Wv zc4cnP^IFF=J$6H@7p>G<1E*#KG@n99+2SzUYt0WDti@#2pd% zsSyiPc+$jyD{hIn94NK!306P@Z3WTF0DX;KEMNs1dK$MB?n@!4;wP_k)jq~T}DAP+=>TZlOD8~iFHDC*i7}&owVp= z@Wyee**k+FUo7a54tiNPoJQc*yr_n}?pm(&&y$i<2c}MHZ>HKeoP651yov_iny>Ul zk{mO-zI`RUyZ0f7&0A8A=0B}1K;f5udK(+V5{>5XQhMYGAm*tBvbOBATNVTy=VbP-;B(j_|c>W!z zO5*#@$DLTk45R=T^8Bz+@zvZgFDmfv^vO(Mhrz{|i(qdJ!BP|5&RE80Ux9&+&pnX}B z@Esc$;zo>lY4D0roW44hpedyaS-(006e+lJeC}|e@?BRF&nVx)B^pEh0~ODvm{D&c zlcqi9q66raQ+@p4vhSit&)#&JPY^gvfW2>=g@3*F4J)0X8MTdv>789VJ;uSq8Xk|W zmd7wX-b?#uAj_+1f%R?gLg1NVEt?1TOvS(JJi%oJ&|3bVS+(AAUwn@!osOKSccePC zpe28cPn{Getg}+66p#DB+QgwF#p@^WTsG8?n}C+wo6Cz9mOnBF6V-U?trBfRlK> zK-#z~vnFTg#CKu1YDAj5lxN1;`~T!2_w4Bm6sN>?>2K>p3F3cXI^$?p7dpJNWKml~ zr2*z2RYB-BU{6TCW(qC*S4beW>X`-a>i}VD5S@waazDAMl(pa91<1T~2lR?Oo;@p+ zfGYu0$e|7=v4pCrF1DohlB!%e17J+JI}vNctwcV~Q)K}MhI*m3fbz!$MDdc3UNDT> zk5SctO4VhR^J;?998RN&sg(^e)38*Z8rhrjQ^&HEtW7N}XB?}kCXSn961vqJN!0Om z$?_tYFO^%?0XW@7JGd2KWS{Ta8{LYv@5Dt_v7;*@@OPR{Hu?rKje^vrSXCedv5cVl zDr7?L$)=J~nH5Np zTaM?V===y-#wH-|vzcYb3-2ccuL{Z>duxlU!WJDcpi%S{OgxhRL^S=})R=O3;<&)5 z{PT^~rnkscOgG|F@xL!Y=mABlBxJ>&0-E!>$Fx{<*jJ z3)*uoyr$QFg3u&cHK1-MNvHgy=X#`6*W1*ss3{_%De-6+-wzUphptv9*oHS^gs0|VmA6QU!?EEQp&L0 zh?@A{icL7-RiNBsBvh~z3Sj;%$$2!%GT=I(=kPw~RpDC?Qf2KIvWe{|$_|jKpDVrU znq~LgJWk>LMpok2(sw6k+n!6l`~MCPDip9^o+>2Dy&@L?OmH5tZ9xE(aS$Bg@Zpt4 z%@>m7H{LCj6sGc+vv=a}iY#ydQ%m=M7$Fb63&9^_!sFax&$JmXm$#yU=}QDZWsE$_ z8l=c6auYX}jZ!EO5KPVJ{mMytL=`&W`G=y>Mfe}0O)Z=1UV|0r(_b7lt6pO_2|tjB z$O=~VCSY#L`diw8IPryV9kKHA9X9?rj{)J_TR+OeF`hnmN`XM|zq1c;7%t||EMF_u z4AIUgWKHGd8sbuyAx6-IA#m>E;9~2Is__|DRZkAjsyU@AwWb_RD{~K@ z<;@kx{a6Zl*+A41)yXq`bq&r&DF87x0b&bN-Mf8`FjN^ge!=5UFsf$n1Nk|YDecpr zDHqi74sHaV55M^DwC%;03)q-5@YIo*>CwRtSBKZ>}2!G1W7v^cEL&Y+1Utm z_QfD?NeAQ9JtDNN{&&^BMB0>?^u z4v~}Yba*$A1KeM5lQ2SnK__-=qyIhf-|45JH;sSt`R_iYu&upyPnfzd?*D6*4C>|} zWO;;1)k0K%t`6R7$nyeG-}D&z-+5u=Z50T8EM5xqf6v6or3-4QFZ_Sax$lAW|4jn2 zEK)bzAZZ}z|G#O@aqP;~zhD#xIm@XWyw^U;Lho!~_@8P%>XRLU!mf6rnlD7jZ|q3! zx4m{#u!jLHTpc$`TA3*0FIKbRU95!$b84Gj{XPrZr!;wn_OZjF)|^L9vh7+M?k-mI z>)<{TE|g2gSsfmdsbX8re643s?TUWqA$PiMe5H%N06m$;%1I8!=Fs#d>2&&A>}h^b zWPkk6LJ`?_*}{O)g?C0`u84*o`VF8%eiM}auVLQMuD*~7DMg!Fli6XXq(6_~p0|vR zwUvTMJ&ONwc_UEvK6%|HikyI39L9^tYVp#Z4LAiCG_JJJWKYN1wZRv}K6R2T;lnsx z@THvahRmzQ@fE;0wb;WJAqgnPwCBxkfPIu$dqq9-y>`6OMxXiD!1K6ZS>2;T?S<$7 zhh3f;Xc3j_k8eGEHyh&PG|bpDdBRi6=`u$k58!}fuOUhUO0i4@77D{xB3}gW zu)Jg<*Zy2^L#u^I3;2$GRj+*m#on?gE(TPTou6tgez_9;-#;)2QrkrPP3kCwvSsyz zq~kwr2Jdm$sq!lVYhv@h5Z?#2lD`EF!P*j3wx*NtW>IzbBJen@oEhz>or#BHtl*ed-GbBfYECS^ zvQU@{7%;xA%tT<7B{g7IEfd@bII>d_^JqZu$8j&ktg-cGU_So)hq${~SnR@@#T`;UfoGJ_=^uzwpLfdO7?CfLX zz_zwjy?~?uj(zohSK3P+usI)w_Zp&Zz$^PB#3>;rC3*=kFJipdOe&FoM{!Y(ME$d> z)zD3UqGl&E-5aA9tfH!d?v<_TX>}GB1hdjG!7)4L`tM^WscF++C^lD~X=x3b_XLx@RGc8b3&~S=_e(@$;6nbT~C;~z}?N>1Vl%F(@rUJcHN_R|DQ%RO>6kj zzhN|k^yb69lcH)S%iP#aY!=+Csz|wP60yk=2&5J`<8Ylr_@23BB2G;3sqfDo zLw}aZf7X!69@G6=3&dVJ`XK zH}|_h^viZYTAu}_!23JfTF%slFk4tN;b}5BbXAjM%*x{HV=5F$9F@_c+J_16nz_Ze zUlsPZDKY?z0Yi{NuM>C1C$4pVECj+r0-cSRz%IoRAAA~x-=q8<+Iw0dx2s?*9z@;Q z>aD;$DS`)C*Cg>dZs<-d_|2YSV`U)IIG2p4equs3fw7Pdj`LcuYB%n?+8;ZmCL}58 zi%*?EKDg6_(KJglUP%L!+X7I+)+J337%UL4Z$WGN^}s3OhE7EHhQ#+Fd+20;6aZ8k z2@#(v#XsPnX{O`=ACPHomJ*1+HV7DAgYzZFN5?1!QnX|#V>2)0smkBIxa{1>Rv7aZ z&sfyQZt<@_5JV}@7vg59TY`gnIiop47wguuI-rK%Fy~nGBEUIoe>02Cg#2YiIZFBZ zY%2dGBDIFXT_t+LpP#`v#u>cMA`Y!>kIlf?$kFD^H3ePLZvUAxUx+-njRiXS zRZwHV%u3ALybqAvb_aVo1w|@vLTY;5>o4-6AxSJcQ|p-cVwe1B_&@Lq;=&5L%6Pfz zMq8mlus7)%p|aEAUR*Y8D5UvkPuocA58Q|(1)TXY<%&F&f^K=ZJ7$L#7L`Bx%2NDL20N(y?zX0u^R zQiec~>o@3K?y>KB#z7=!6VC|rNy(%w@J25nXqcL|tl4-H>KZFUPVr$vKDihe+g&)3 zS-x+Io;~5(L5C4RG@asLsjtCK#6af6_{lNxl!F*AHwuMQkj2Kjz>flV^@g8Z^AB1y zcRi*oW{91j>uG#zA~gmrK{64ERthzRGIUQ0O%K3p9C8$HB!KhyX^Vn?*NhkRvH(*u zCAUxGeXLW%;`o6Or*U}TaIZHx=_P7e!~}i+cZzh0+P4*x)Y4qxQ)TX4Ru4bH+HDjM zs}>;D zKAl)%r9_9-q03urs*vZ=DlWoy$Tz}4fHM-ChdgRaU3Y1XTUZ^@98%p>66c{2EKYdM z91?N_I^`Cuq;%pBROHghO9te}vXM#6{Js-S?L@S=0GtWTN^OX=Vb}EJGkG-q0Z2{a zEJ13W4TyOI?G1{V3znRe3ZG0=tP_Z|`l+aM9&)R%HQwTv;Wi4C%RLm{>`Xc|SU1V_ zeSsZ?m^tq^lfrA}H4hDlZ@UzTA1La_KC& z2=`~;QU)A4U==P@UGF7-ze#1t0*RE`fOx2Q|9V+Lz7=fKg-NyZ^r?)yaV+*A<@O0P zZNCKv2tzYBx1IHgrKe;*mmz#Fg}3?%GFhyrz(kh!-NC9*(5rH2EquB>s>u#6ws zd)6~7T_57|{R1VY7MQBH9W0uH;MtE- zF?RIN)COP%4?H99QppBz^eJT7qp=fXN>Jaf>VD(v{hp0Wsx6WF-$f#hHYr1JNc2|0 zDXo7Bu6uX|CN5l~0$O$H2Mf$4^6Wr@)Ry*txHd5GaJKYc7CGWpp=?4IQPogxgPaX7~ zaERU|ou}NXwIQQBo;WyCQRIztL`PDmAV<;99%}hfF^!v!kcnab(W3&^5HleR|)fGAQU&=ymM@13qNH4T@BG8(3QCtH@$?O&G((r%M z8t0z8R9l~o6_>83U+i@Q5%Dt)XHn#gA z#t2EYDZ-#k8O#eP&iYTff{;yM;v;d{GdjNcWKp2C(chb+BzYfqLksi&42k5!RsobN!N&Ux5Ew^Rp3C% zZ~7GGQX2)$v2hW3#n2M_kO}n}-S#dK-g52A89nOMAkJ6EL~BSeJL1+ddQ;4r!(qNW z<%PJcU1QMN-*P?}!-~{jR2)o}xXs%6F(x8lYB?58`EQZ(MsKb`OrA(sDFu+lGKFpv zGqH(Q_Evyv(>uPR3t6$+%bL=?Za){LuAa_>ZVK~IGFIr-;p{FJ7~u;dkASz#<2 zxT^6aD;`Sb$l%V#C`r!!bOy|$O7o}F&+aGwSV;?L*7w3eH*M5ah^{g*23 z?__7bA~@&JNO1BAFpAyp(3-nJ$ysh~858a{AK{2&HP<;Ni%Q&5e>}xi49NorU2&>8 zaZhG&)Rke|oImLM3L75ryG)eMjOKU^!GwB`*AOv1fm)lu0ezi>Kwc&69lv*Qp?8G<*4V!q1z)GPF`u_b1;WjbN za1q1X3pVtniry^=eI|wTWC3g$=0OMVe*ti(iX+z}v0>gtf7on&P-y&xm={L}N-^HN zTj{fr)0_{vQw;%1C2xIQf?vT#uX$O{UI4O(SBmgk`ykt_QTxJU; zzE4#dX!~z3T$Dyoq0sMHEyl64i|j zK}IA>vFlSATcDVv4x|QS7H3)=9s&uRT^_?$p0C^8S6McI(HNK`wEiB~dGKx;2z{6- zvQacF2w@trH2zQFFH%I|&{_y!iVIvQBAuq?Pw*hJU%{ld^z+5guad<|ztHV}$mpah zML1OwnFd!Z)i8WOP=$Va?q84i_4(90lq5-`CN%%bM^F)gq|~XM`JS0)9Y}G=pLddK zE>EOrz|pu>kgw4SSP+;>WzEh;zIVR+$AO#RSJF^oB1ySY&+H_Q9%irM6`umoUU*Af zcUOOPR6o5fAK_^;9@w4I0MiJj$`rs^{bZGXYLrPf zM5Y0cSJ|IB^IeY_G^4|zt4Deu(vc*Fy7PPQQF_}TDMFsu@={RT1r@ik)X9u=91Xd2 z{E|IIdeX(YBBeZ^{fj?RMNO@2b71M{&B(Rqu-$kww_{HqEf5_3{M`NRaVNPt70lEy zywhmDS_i+g6Ld!?KND7-Kg-VWO(ie|)tkx*J$VzFxuDqrK@6$U;Rh6|7jW4`^yt4d zM>#?!13vO)>@^1I({0=^egSpX5Mzn%PgoCs6@Sbo{fm&Np}Uqojsm#M1@v^0x9+i8 z0{>q*>hB#L(BMOm%-%W{5{x7nKaa=Njy1rbm7OuyvwLE|453bH6hyVDZvWW%B4lx- zBWllq)+KJf^u57iuj5Z+e6E5vlL7bkuU-~&FYdYQXHx78a8ex(q@?>(^k_3O+y{mp zbhB*1n-OS{KER5f{TlzQ{TEZc^*&zwP9t>v1lBvk3E3rt!7%_HO!FnuQD@rFfWNgZ zOiuqIS%$~CXNx;`)eCk3J?{z6g165$xVWfPZqe0SzxF|K8Vu((yDbjmEz3*BRwNet z3XqVN1JY_Eunp}%I4t=v-HQL04|Er%1Y6Y{F=%^RVt?~aHShzH=97!pqMj@`7U!;B zvIkd}=xFz8WFq08!?TT&)I+8-PRDbay`6FV(!rK9*m(sowM(Hoq&Grf_%!6)I-M%_ zVk$`ZSn0!Uj3=gdDD$U~y2uCTVgG_-G8AkU+8C+gU3f-4WR-@4OS@xvZqL2t?SxZ@ z-a(ksW|LwZl%Ry2qHiQft+egoWqYpwfobKnWia;z;VA6C`jZ@`F)t^6T=O3&=WNXGkX8f4E|J=R_Z79zrrxU5yL98on+$8eGw9+jbMU z{V?|1@jrPi`RmZ~%|kJGQrK5oVJ`X1csDFWKGLd87U`0F8$;a)YC_1t^#7XK5&Iz` zo^BcphX;{cz}eun1L&6XL&s3tZq?&E0Dhzh)E0s+SXd`Q4^W_Ax$y}n^ctc95^q1# z0!ZEb>Cl()iY5ZYrx+Ivct{QW#A{u zcTc>zff8a^WoOoypzNoqt^GQm}pT3UPNY(ce?MYWcM4 zw;u+f@0(=*Bk<3VOgrT|VmOds*Z50p6S!PL>IIbMea~(!#P9&wV!Z9#7|Lugiw(^& zEOPq>fp}SG4LIZ!K1Z8W7==;xdqRUEfs)`G=0@d5HqR&NdL`wd74-vSFu(_J-l4qo z^-3o8RpNphx;CV6k6O`U^?Kx|w*OLsoJX9;H+@#hVJle20sIMC{aW=prPlXt6P=sp z?^~iZ&SCAV29w#{hZ;9!Us_b=;t~p_L_e6i!?+k?uNh{pB5bm`v@p3+zCNpc;ZbRT zm>a8hE`+hk#vwXAy`YSJ;5Pf|5Hi`P(W_lF;}?~Eu6V0&bjsai7x#PkQ0be8WsMyJ zlcSYH+H!}~M`#mgq_4SSJ&*a{yf1%MLrn2&ihgU}^=->eKTR}@V?K{9_0EpDexqc3 z62r>qlW$V1X$>ogh_%CUje0=*;t&^C|K}y0A~3_|CQ`aRO+<=1t+M9n$jtMmdU|Q* z3a90akW|qyBX$LV<7ajah}*=ETNP<=`XtV!b-GuK{hQJ`&p4rwQNW|9QeRS8v}7*)xzB39|4JnbBm zaX+rI&&bHLlw(}&tx#pmt?n#emH#Ti9~U>NO4Gh)Y|B!xy;R8K&gjeNMd{)SN&A=i z+&YO3sqI`ZKh_9O*ZUbb$vlfNXZbKt)_)qVk3`sI=svh^e1u8=BWhJ9l)DB<_CRAY z9sdFR6$L|_@Lw?Ye&6<2oaWyGVmOcm669q2PtYBPlKE?>{xl1&1-qF(S$mI!T+N9A zVUQCS{&jt9b{lV;H;)n0qf^D%`J)^UxLmGTu_q3Pa8V#^S=-p^{8at^0{8pZ?Fmwo z+uuRdwXKCDu?u~3VCRKo?}7}jZKt{TIqjjhl8c| zffqn1w?2l_JHZM*!x)sI|43z3rb(<~trRY;82lG>JMKS6z8w9j1NT{><;>7sghaUJ z611-58=3UNk!qg0O2hjIa2CBaO0dgEJe5ks4O`v#_+-=17q59-m7M;N+MYFTY*2Cg z7%gdBDK}icAb3i1P{SkvW$;WaGkrqu$mCU0jtR zlfj&8GH6F;*3|R)R^-LpNCu~D9;!rD_^ZQ-K(`WeBREQ+j%_3mTc#vmU|FrEf)iZOJ)Ckj%rE%tBx_i{FXLJ1x69jm?_smwjN*MicMP5m1GP;8 z!mex{C~u9Tm`Tk|Pdeu>kG9oF@Rk{o!4ZEiVDBM;W#=CX7cK9TdKQ*}-{T*>-=>CRsfd=Lm@u6QJ$#Hk3j&8!PXsS1I^j6kFx;vf0GKT(5x zXN;{bD}5YnZCc`r^geSE+|Q)7UmfTU2hq*oCQ zVn4{<8NsyKLYK_#w~QS_0i@}k!laa*4jJGPBu~Mq>aims>S2nOfVVHO)e83x*NG&#x{br1K{-9j(Rd z!BX6=Y2NhJ+Lt8~Z>G0)Hv0lvn?86q%*zH;syl>vvMu6i%e=|u-xTAqR_e?&kPj}H z0Kpv^SFGT{lws(H_~{`lJ(6>EZooU&Uv7t2>-a17=+&gM_mALx@Sul?;)cwxj522L z$ffDKC%3Nc(cy^)9_hXhUdX&(g-OcrT4oo^U#klit~eJ~?GRsH!jhAG84u4QM}$Rr zIaDHg=Mz`05oM0665G6M-q_{RE5siiW%YA~9U_-lihjKDh5?mfS%XB2Il<~x{THYr z4LAud)=();FNhJ#9CHKJ0o=+rMEOWnXe&L+=hk$f7HT}bCOcSs5dQu6RPpm+)l+qN z$j^J>Sf(g*cXtCE}Aja%QSK@p`9jeN#SP80`)B_pTjS!KU!wR{UK0YD5$S{rh*zSDYSh zmp!gYjoYo=k;)N6@%B>I512owIstE`&oPRo&XgJ?w@h(QS-&DyxzAm0H``VnL$3h( zA5Wzb^e2A<0}laAY$?o^bgno!M}?gO#E%zAzXh?fI~9TDes_MrT9wqKlJ|$qPVn-{ zTT)oapfGnL8q)DjS6sfyCYv-aNF~wD)B{D zlPa!163AJ2{AE(3X$8PUw||tG8-T(_Rdh)WREAjoP;5RmJ`u3tMZ&+>?6cS}tqP0|t6~n1%OLBrt>=;z& zjnDqbD=E>>l%@zQL48c@v*eVU(h5m}5gZ=5fLpqlW@UN5yM03a4J!r)4inz&R+L+O z$##e(o*PuzlgGA>y1p9tcB4*m%u*Za;rgp!Lkps8q>X!S22@3`XhC}P4zAB=Z*iFPGL;VF}Ae?mQG;q{!UR$O^~ANbJ4cwesc`Ab2x2% z_YhjI2Z_yobqRxV1Z{nbv@0r?>zZL~0~lEJDY#A#_fC&kUZ}q_fR9#T2cs#074rsI zF;DMpj|PBmlZgK_hdVc-MW_0eEW7hOO2)6QEa=pBzgqBp43900w%&~fNCa-SSK0Nd zq_-WkPXI*D24gQ$-Kc6tQvE1-ZxSAAPI=o~ruU_OXI|eAhyh+eMq&4J*U3N zbu8546(tF_$;^jk6vbR<&ZWeBam`~?hGQf}z%9X*npt?mJT!F3U%S8}wY@-$ZV#cY zzk`Ua#t~${3_l{sIB6*2Xsuu9LXldEI7(z{hA`N2kNT zcgXrJys=5dwXU@tO<2GCtL6m>j}xICv^_;+U!HtIblH_-V|; z*?Ca2JC(V0ubOx}6dtZ+K0R$LBtHv|9|Zn(ZQly}#?*Lde1%@0UFs(&w}x8M77$yK z#{%!9X&laaE%Jxv5wN?T0rl&+>KW;e9l*jNKQ<6k_k7<3aB_RbtP=4Kh_U+)t}O>i z{KNQ=;ID$3Ep>&)t)XGVlCPjtL~5tO)?EUbbE@iA6ULM-eA3dZ0G5ebvoJK5R43I;Ra<*<7wjQxAK5Y-@66}p~qTDwGy zyh!uc3SN~6lK3fFYw$8i!^|sHlwyf0X7%FEKAKIM?oR{+9d9gN3OY;-;4A1F+fKN4L(B|fj9VVAnRq{*f zN7XVT0@A2FjpM&5sB9Qst(J(J1oKTIoy^>~PA|nXF`!7DWz6m8;Iy3y`7%l_T^T)> zxUnG_ZTVz-H{D9*uPc`xo-3x#MCzYcgPkm@_0k;bean{NrQ^&`1;4+VtGe%1%J?hK zo4?%2Q+u4u8X#D&yS4smzN3BF0DtyNcWit0y###O{Fo-4$IJR`-(-d?Sm!b_rg#bS zt4-P8EALn5812@?he}JI66xxkP}dh1Bd^DpjQE}12dMl7kyI88rG3S5fq=>x`uG+7 zeKVwV>!rZ4?(ob&R3U$F;|sc)pz<&UBi{ToeWVr0r-_R)lzAzp;7@|!9h+QFZRTG2F7D3BOG$XqWncZ3YBWV+V z-Y5zJgrD76-$K8QqGY(zg8hjA{$a#>Rb2twAA7ji9#O0nPhlXAE&-Lhjn?ScH_c0} z%Y}%Wf#TozvSrr8D^~Xo$ZZeI|F8oDp3KU6YW`OoH)eLP&UNM-NLnQ8|Bz9!otrl$ zQL&5UFGVrt2?)Di?ROcy;0}+PmCw2sAZyFR3lAkO<^L1liZ#LM1p<#d&?&_*jr%rXx zAUhW2$#ku-WDtAw{AT+QA!btqRSfcXExO(+#b*CVQT4Gm!>n%dPGcqjku>U&PO6+Y zm5ZP~@Mx+-ec5xGeL@mI`gw8bH;pOkofdmxyt#>$+U7^8dN(|?#zFm`yFY!{&mm}q zUn5cxz^52KFNV5EQC|IweloT0TdAyI2O|D_;YK+dhKE_+k9tRKe2OXBPlE4K`e}6^ zhVqitKH-tx6Z)mc4{qc)Ryb?28%j=2x%*oxzsJko!}UQ3$PSc|@uwmsExWQviQQu5 z!Be~ccv(@~%H-eHjHR7wsWSCo|I!0j@Sd| z;-nmzg8BG?*#z(v=XG8{)l*)Aq`z#*aRAdtEmj!y=N!C!fW7!=E0GoXGalvTc*Ktm zH?8uX)p!|UamN<)i)}}&dr&hoytMt0rLep*SAlIW^7H;<9ZuGC5#5aL9h&BJRRXdg zeJx+mh34QVIe{bAD~3gOm9R>&i-kgN2;gq+`O8~kE5G&ka3N?(YP*aR- zD`?gBdMBEE!+bWl2)ZT+FfY*Y0siU0ZR7&^f6iuF%X?*QtF^+Wsaaac@uxVKX~y$^ z%zXPQ9>}m59DhY$R-Gpp#_i$MpEwDpw>Tp>oV)7*WS+ zI6pGR>Wd%h;J&qw?+)(*CsCUp+xc^6R=s~m>d{Gr;oNBB;jnzO4>{2ep2(ln)R~-% zRIifQDotQXf@7#E!o@$QrAyNPnQ$jyH0e;<-N+f!0H>fx9I0!P4ht0Y4 zxxV7g7uM1le^gSqjoPhyqrmLafu^M=+C(&Ee@^XILgI_PSSw)Lxb>t`p{-iD-1YC4=HRfsRYpQ|h>TQBH*GXx;yKs*kimxHldcu2 zp;W6UAMJ}ahYz=ADs1zC-r88|tvkUHuj-}hkVdVZ2mT=!I(22IGG}Ku;hUc-KYhVgZ>iNy70@SAOA<~e5@HJU*l@o(dPzHXDtE(zue+l z#xz7?pO&C=KO!C%q&&5P!d!4{YEe)grrj+SD)}>QJ-ogzka2(bc!hX|} zJ6*hHMTB=RIXQUgB?)D%L{m0sjy|nNi}KIiqn^PEkr{u(DSZX_Z?oU+<4!sag|@DZ ziVDImq7Sh?X1z)Z1)cgE{l6mj%X6k=2Sh@?FqyL~GOrBj^(oKuPkRF-R~^_j z^kMka?>DZF+PNb5R#jAo)zCCkns;ByLjZ8b27-AS0`UQ#z7e#0frO^A-&z!6`x4e@ zqn>kjFQ98VU16+Zpps*T*_B=!PYzM_rHl0SqjzogW+lysr-J^X1xrv8(l3d2|2hnS}BxIPxE>IyHNE} zJktDnoqAVayYSEU^5~kvH$oPwJovN{au48vt#rXo?#G9NpAxy`7@KSm$zWz8V2trkVg6=e|ctl5k4dQdl-=Se5s03ZJ&3w;_c*Zh=DP9}h8Xu~?@MaJ>_+^L90$QVb z3l)DT^yhqXaZfnirp32fL4@KeODzDuY;|Xj^!Frgm#{P5kPy21^%MvhVl6PJk_l&d zvuHc2`$m?PP!|k2uYB3Nn{T*7Dj|900!02OmvaD)?bS0xp1fRG(^0mblKG08k*Ax!Qtt!>3~#6{K40zi}V@El1=+og9- zLHQyXye{xF6AiZjgo=!N?_p{5?xlL~5oV{irYv$BK{ziaaH;w9XFc_FT!=sr5dh!u zaI(Uq*BES1KoSJ-<){fODW?RNkoG6)DEpv@JkfQ^(jO;eK#9j}NH$%!?WD8;LlK)D zsnEexOG7ZUW(?HbOK!cT7C7`J0Cn+?#>!2_o&HxUiG`-f=h2m}`_gLQ$r2nAc*xMq zGUKNplZ{1Mmzoty1j;dfRJ6FB&uYgLCN9z?KgTaLEAsw6VbTd^4HijO`T*we0@nh5 z{_JM%Og>z~4+H!8&KCh)Pkyh#hSF z%z472Fuvdzg-RpIo>WH!3)d+S7umPVzg;5%=q*}l)oeE;$$wvbEm|&gNn~Bx3dkA# ze{YE90Hv_ZZ>!&B=St=ZO*IXf5cJGokaM3m0ae$fE-z2>G{W8dEl=_ z0D1R$$3O>0dzr3)_@@mM&R^&j2QkO6NTNr>^#-6w@Bu%n)5N5`8_(xb6DkP0X|(74 zp#%+*%J;G4R+{u8%^jo@ZsI$c2wEHiDDrp&;D*kU5-e8|puaX9i>ZKjBB&Ck(kp8o z97>)IqyI+}?1Mnsx&T5s?jR*?bt&>V3XeXOJ7l9dNZ%Pp#cLp2SOUnfBk}0VoJ4V< zJ7-b!)bOU(MZx603WRikl#KwdU!!&Y7drW6qknh?Pi5xt**_`0`3)YQHYDYD#bKwQ zyi)RCaM~{s$k&w1J}oW#GQM`5QIrPiX&mnVW>uLTa+~PrNq)34-8450dgeX{<|gpk ze2Fj&u6fkx^k%V_HAm=RQ$f`HeX*cgxSnIoQ66wtC(l6H`qVhHI z(Wo{bL?C&*y4Ft&i)8{)OUDG%*OnU|Xm-cX9Zu5=s%WJd#aO)}NQi`wZ@<-c#@TnA zc#rG*~OqHclx*?#vwAAP2KAvlaa&wJUh3*$8D5}08idU6lSrvQrB*7V&l~s|11oo zF>Wc9oeE)3m(Q9U9B!r03s4?6sHipLpuTvd-4BPFQ2pG1{S4ku zDq%;DNw;Pb3rl7^40tyP<}S1^*57_rJk{~llH&8H|8$H3`!u4x68e7MGazF;T-pAR zLs`qYL-HSsheZNfnw8M8KF)-&SO8aq*2)%5@%$QcF+U_M>-&t{C04N(D06~Y8EcJa zy@hX&qaT399zaM+k{n}wkKT5IYF*H*9kAlL^%-EPG?&-eIe|EotSFngN%DqK{3pDr z6`Y-0H0;d5slJ!sRE4PhjY$l6(}F#GZxM94ft>UDP|cXJ0S{W$*L*;3Qa#mh3UFhF zO6NY-KzZ$@64N4N$5%h?m0^q9Kyva@+oeOhcyS(;`2?ueUB8JIo*X28z%#tSnF+{B+EDU=7~!&CUpc9@A^$&nyRFe_ zvbXDIXTK`#rr_z@Kb4$SeLuS3y=~rjdnU8Rt$>ANAfX%^HFyRhOzHnt>L`gyR?21w z|0zb5BTyza#{FeUwq4}MJ&gzV*D5MfFDQfh8X^>cp_FehyKW`p5i+wm!ndqT^JCj zV@WgJ*0we`YD~PswC;ye2cL(HNDJ9ni$?h6{oN59he5Ec#^(P&0h>H>Z$ z!=3cp?{>vUXnTAAwC@s*r>-;68vBNpg^#8UVR%a8NU|Fuf#>c1pZypuL*b?W+9U!% zJeKhvnsL@Cuc5-OwyVW4(9*JqVE^1d-%tMSi&Z;kO=s!)NVv$-Jqi8qdj;|Gsh- z9q-!q_IB?i9b@Gr@^L#Ajb#_+CiVhF|1N+{n#!LPA-0`oQ?N;Vv5WO#;doCSi|y{X z(QhF39UR8ss05vEKAS4h@(Fge3lHtr-)N&l$Oq1C#XNZ49k9wq+SE*P`}9fy8rxpY zg(X8ubQ9x1lz613iS>Ee-1FJ;+8k{K+2sz#_!%#jxvs3QKecN2X;iZ_-GH+e)gdda z83TLGX~?YKl~7mqF2VL913X%D_rxK$sgyC%)j%!`!AHU24L zom~`_Jr+|65HEUtQW{i~LrNF*{d81_X}s-jy;o_oh!0xJVFuU&9WCcUF(;Ofaz3iC zH?OPXJkhJ;XxDy`8&YaRd%W&FVva6@PcdUrk zpA-ZbQSH*zQT5IhEvICe&RZYI;Fk>#CtJUBPk|zQ1@! zGyv|^>S)7ES#1%1H`O{R=eZmrmrL&$&(I868=y~dp4JA*@;N-#;V+AUr3f>kN`AeG zExDqf6TU=amGSqrq79KTfZND6lE!OBQUGoS80@;S(+@|2oZxcRu!>8*8aWY z41ReO*vus7B(Yas4A5c9NunLoZxh|I?*s-Vn}G+Z*bJ|K;F_8|@}E zHNo&(==%{3nrQxO*+YQGWMVpC(>JoX?K`;5N#yzuaVlyuGTKyA02wMW2#=E!NJ>LU zv3y08VLe5s%o`2PEqLCb*DDg0-4@uxh9#J6+Eshfc)bzGx$8gP6Cya{hxZlj5WF=G zB>4DdAmq68K3w^asHB05p48fvCz^<3#A0FtD^OA~0*%<~{Eq86sZxcNJUjtNf_CDj zBP0ft{ugy?sv;L3zC+wPtZQs52K)0ATlrMC)?-oQm>l!*}N*0rM9&$a&;-< zVbJGwF|-U>b(FMR>X;YppSoYIh3icKHL9EJ?#0bWV|#h0BU59F#`YscNmflEU;^tcOdyXiQdIMfJdyN?Iwyb4*Qp*W zRIKbHMDec4auY2cD5T22GUR>0CGd_e5Ydb(e1RK9ul6PN$Az%wdRU`;*ugbNL;1#~ znHnflMchnh%g;&iJ%V!^ua*0CRVSz2(2mp&TZKsDe#ElENSRL70XPm5;kPa%JV5D> zKx}T*D+Cehr=z~-18}?q(Sfs`fR(tG}BSJ3Ke*C z0^7ya&hCr=*kl>@71eq9tS3r)2o#l?cp$SmiCt7td%}BfZexTRt+IOq&{a zD%WEJ8v)n0`2f6Y0uMi$u`sWFNhl0g*iXkU>)TN-`TOv8XE?>Lo-#s@k*&3EpemTO z2-+UGQd3heQJwf!^uN)}m!7iUGDT3dlFn`e#1hn+deoQ3E+QHkNEdvBD<*-`|HcP*f!M zx#Qd#z)#Vzlj8TGgnlPc?r;sr>PLIv~iZ8D^UOVACeY3(}RgC)%V97QP3 z;S}5}ypE#9;CP>w2xflbd6`k#+8{QXmg(h(JPo~MfUhebvzg$_WtX`GSKrq=U*RE% zZ?tJ?UYH(k8I>sVxqSARCwfZI4QMF_AeWE_I~D=fhb$~t_J%jTFO*TWMH%t^wyD{U znq%BGUpLFV_?qt+uRa!p91CdBFu$OzMt(#;2k&YQMuTv_J2ByNPA!grA)+WJ(lp_TzCB)Xg%6!UF{b>tk6dC^x*5|~uJGTF0 z){a#+bk?d$O3QFMtzKXix^dMuSspOEk}3fkETj~}kBfb6_LJRZz@Z&DzA+)>KpaW#X9I6(^6(f@F}f;=l=Sk*&o<{-u`w2Nb_->y^g9PooUVtg z$uH$q5_1I_2NBGNK7ty#0X#YvnqnA1hJL4Y5jgfnfnz}rkOHs$vA$q%6pW_IqjR>5 zHFWbz?&yhpcuJqXQ+Z2=JAbzjmMgJr*DoF-3`Thj{}g> zj>KNOIh+&-`HOzjCJGJeikH^4ZnkiD`yDr=f%t@F&l~0V9PKp6K;~68rRtY7(zQeX zCtj7<+7j(NU5KDW>4$BEI3}H(h49A|gp`>D0^;_6x1uC5{(&3~g!(vq)a=6swR)^p zwt8^kIC3@=bCyS_80sayp++-wXz7TS2YjLgDRowhDQ@YT82*=>m{%d zh6>2mwQ{YFPZ$qx;T>VhP|p`jjmM2xe+fORKm^Df^7@3smh#yDLX9MKyFuxN&Kdcq zP3XI8haCC)UCo=-LBULvSo`XB?9wRth2dN>Z&pT$lLyf)4n<661T6cE^8L>d7a>$6=@e9 z^8%tuj9GhrAN}}jl4@7Mh_NCuKU1oSOVC)m{O+7^u0F zdSN?DIfbaKjkaf@SR6z@)73bII4Ff4HMUkmbE{8pcS>tc5kD-czdKycH9Ey@FLwH1 z63=6PQ)2m#(|*q%>bTakBo8>T+aa~ga^>ufQ6|ncN>UP}n7=K;;D1`jtg(gqyGywZ zbU)rk9V2OjBiAT?IsSt8Wy5DRmA0@*^eyBh`PH2u5^gCQ-lX~CsDH|E5bpp9wA{=s zEPjAQw$gOS{qw(jdt&rQovK2TB@QV!1)?50fx=i{DJv=BiDUhTKh9J<7bRkk+D6-Z zmBO(Vp#wAmIK!)ANBiB2WRYNWa(6%oqA2|Rlf6zs1T04U?5(CTAs%dP-EZQ<)nsw$ zrGVL%atX#ml@LL>jlQ2i1*=N7?XJ6kwR!(k<3O3XVt;E8ppkR7tzcCJ zzgzr9m}jygG(*I!Mdd1GU3~0st+`gLYBz>SD9fIjDD6U8-sdRz(9kRt4hl5|;nUUU zOf;=R`Xf~P!BC5?eY2@MA~0zSM#G?g$XjO+lbQZeT3}4+-P-fTpQ^`kU?fV=9x zT)QwS2N(#!^ha+vsvuMS(K+a) zAHUv(O7Bs-1jp)e{uqLn`-NWP0Jg8>|6pbU&U&)GC*T1{;^xJLn4<#8?enjRzkh~> zS>@mmMC{2_G?2gZ*Iwqmjy1h!3@XhEH-wwRAE?8G zjYudvX$>pavXk|D=zMB2SuzDPH<{pdXPA;{BiKbdK%HK{Ht{?2Kt9?l*Azh&^vgv& z*S)@D9A61jEJQrvr(EVH=J%iCtYE~VGk@}`Xv}xOK1Pb=7l5DQnvBc`@YbpALLR1+ zq9mO*rYsLoA=_S@TK!{R!e0E!j=q69$sb863=$38MYlbhelST+*yoXaLR@c(t-Vz9 zO_PTXw5J{WyZ;(!3i&9Ajj`yVt<#h)pnI zxq>P>u7(2ulZ$?R1KpXOxH0dIq#3AxFj@8TC&1^BXv;uiTppU|I7Cp$B!X^3ve2(P zZTLn*c`U&EbRTu!Kf3D@ztmk-$cSyQ_`Z35L%MJ|W@f;`o#;(g)^}1(E?IvPB4ZgW z6Vb+#hwBslwtg_Vkh!y|l9NI4eW$x_`YLQdc7Tc)zWOyWI=5=S$FcKNR!H7(xY8j# zOrh;e4(qR=ZbKs7e*~&$*j5_PuD%an4+JscSUIR`s?8AWMONpn z?a#wB6J{L3%p?I#=TguU4qvmFu3_IeA_w6Bn+jDph&;LtY8BW>j6vH+qxx?n?X49r zDp?Kj&SI_?-lO|hU4rVjjh}zoJ`GUBF~WID()HSHc0Rq~$A3-L*yAr~+p8AoEUmix zEM!$X5cKxK99GHOmn7MTW`ziR-+tqQ2UupKldIZ4ujOAr0|OYe6brlIzR&2I8hJz?z zv1?VVemM^>fa^jWLg#XG7{x%~!#5oi_Cp)Z4=1-egNEQ?BHYc~C=K=53+D6X<~W4* zNEdiwzdJaz!I-ts22c-Q+#o0Lfd9(9~i0! z7@wlTmr0EV*`0glf2meGxjd#MN^tn?+!7_sAEJTLS|=PBTM2wbrxDwv*W2IuYh5}9 zp{)FyL?oX_zzf*IB20Mwm|3^Sm|$@du|#v1`FB?_IYqhSk)b!Q=5(Sbo8yFwn*2o z+FheJwE?SXsn)-`7EwIg|7o+^sg72b8Z$%A7-8XIMNOvCFoqv738ub5F);~-fXI>f zo1lnW3TL#PrCsFRv;PHU6wuOy&mZ{De`W5mn-D=_;w%L+m{G{Mvnct`K}9niM#+=K>I^^|oA z%upEuvdJ1kc;BNbSn$sT<-~@i2_oOboGk3Z$O}z5f}uCb(7&0+=GTja0+VkWWf=)0 zu!Ax#LkyhTbR$P7E-{pj(6=vYzOWayt+KvwmMrzMdJHyFslkYk;I$_#f7To(F5JZ% zEE;FcswfsVrEg%FJ(sUl0va{IeKbOmvU`tyq7>$u@(#_Yp7YJlUViDOIARMIt26{$ z4h2$$Mk25_WBJU<&rRC~yO83f6|DdIYOl;gLhK z?#|l(TDn$AJ!VOkZ&+J2 zMeT8j&EeEW_DXo|(|f6-i*AFXU+KjXpJnqV{L|UU`CO;GQ5AHe{qgwSA?;*<6R0EF z#eXoGf0EOAaS{+Y3@oKH+bC0U$srrG1dq+W2yrQ$oqn49c%ZeDdMK<8Fz}kym$@#T z5sKH2`K!_7fAG?T^{Q@FOILkm@1|zs@vve)K(})PevH+tA$=ey%Oqq#ORia#a(cQ{ z`+O5<2XV?by#7y~Ft-T2944#mby0MTj+f-no6(T;|W5K{t#yniiG z7gd&3a?AuMM{VcuV+>umk=s6s|MYkb5hIPAcW*?|Z0A_L+Yofq-ysr~&kaW3$y~5N zWO$WUSG^LO`?MsJ6YWM^Kj|i4rxLky`Po$kVpF(UnUa|MchW0ay{&lIoC!QW);9B`xMSn zS$s=MydS=}`DI=`6`{AM-zoC5M(01zK;BtaVG|MDtRf$>HRL%>r_IT=GRFIU1;!U! zcm+YR%KG+8&7-RB=auy3v&n(CTYmwyrMen(t$u1Ugei3p@9fcZqg|E5HYR1klyBi@ z@rFffFF|sR*LUgk4nQ;Z{Hdjlz}7gomieeHtc_X5Hl_f;zz@ zkF@P3NcmQ2jv4m7AkU4GZtc^%0Qhs<7x}$5gFD4RWCCCF_D>cuX_MfT0uLq}0ly5V zf8BXiD~`W@6~pt1?_n&p&oU4^@Ju6?p&FF!96ywKIL(!zR?-^gly%F$BdTDT$vVK` zRMlFie24s~v~aAU7`9G^6A^_kg6!?g*)ix!uYxENRnxoh3>}hQLj`sx%!yWX0oqBx zaGeN-HM|nMc|`WgXU&LFtE9usNzl%q7`%2sP%lcjyz`Zpv$aoQePl(lvK8>3WuR@P zCousGz$2>EdZ5mj4!<_1e62*=s77+C<*0a04y^Xyj?Z5cj1iS;)$%5e=_PszP({_Mv3y*B(jXqBVOqxRKgJH%5T1R_VJw};A*dOs9l&=+h zYkG@(mvn$EE*91r5rD32aKjpnB|(>l8=iGyr7lzRDQY-Gn(14y<}X0cjW{~neKs2S%vHdFrDSyJEvC|?EG|ZWNtjm z0`Vs5DYWz{1cLW(c>GGw5kw=puCPKlQ8v;`&c;BqolNI4H=U=8?wh!EBTW|li!<3dDJ4HlguDM!4}aI0bee;0!|P8??favUF3Go=?mvcu*`-(y@0es=QH zftpm^elHhx1&R(SL{;aL>uWw4EyGCj52k#tr0~RBmWrrWg#Ru+C&H6)jbzSLj$-`d z3)6G5^lsa)NXc>?r#Oez-mW@(Xl=j17P*s-LOIf7a{f~w^LeADs!$+@!(lb9M2!NM zr-_Cgo$v-F1iv*WX%h)u;adT#15>yvJltD&)bBH@v^a0!n8o$>!1IfT&!4O&7AK-y z=~5qk{covu>wmvgSXHjvE|4`bY&cBD7|*Va3ZBpB!R_i7uTM-7*Hf zCAwFHqH;Xg-j%>`E_f4;SM(E3gREo7T`GOBDR+J0eJCT_;bTieR-sEvy*wqwr zv>}Lm`u)ZmHIgWiRK+`LJ`iWLt~H$u8BTrbj_(GtVJ#ENy82RWzkwglwif5}(<`1U zlkBC>8wsVF;T%MTuUK!C_R^`;5ktbT;)3&Rcem^^Ra5EbK-`tbdafBK6od>oWC$qNKD45ajLNMEEl8w1DU!}O zYF3fPA5^8sBIycCiy#Y%dX}4)T6^!ZLF3HHs_hygSBO6N?i9Pc@fS& zyh#~)D*$J%!RA7GWSO~P=!AZ`9wOyK=uC2xQdjB5>{_jZhZ=j>9*7FA2 z^gI2$&4^l?H`hexE`T(%s!Kokrv2+iTlfm;mwfSFH9kzskbcZoq6mzEENAd04e{3L zF3Dq9yz@;tKgiDL{n%0^v62~2KeYfh&qvYD(T;X8Gj1@1B6pllOw_JSm&HW|y7(>9 zv6V3$0|RC^EDnk58Y`~d`rXFhq z0yArx%dK*0!%ogSj0~-I=S!CQa~q#!7ddOvL1IwRnwBzG(Z4Oz&&r#ow_IerRNr;I zsZ;JT2YIkR;WRZ_Sc${Pr3|-x@D&g8ngb``A_hN0)rmUE{ASV$KC`eKwS2F!`XCCz z8g5l+W=Y1scBkg`+@GTTaUn2QKqhutno&r58dRC0bya?*7LTwd7Qh!`5>{$iO599) z2C6z5gu&=P51jVQj8gfb5M>lVHGKGGVJdzKdJ+-^P{7n8z zeSK%u52MhJCF<_ey78m7e^(UDUe)9)v|gMef_Rl#=GV*Ezwqt?lwws1YYzJ2NvkIW zvs0sg2hp6QcgY0_EM@lpTl(hA&P=MG@&&S3Ml4WhrGTC_EuWmrjV(%_)kuk+VvJ>u z$991ZU8Ie4^yg2hi3h#s6HMy zb^8&*rBJJ|c-300lC)kd25zjdEFH`;!Mf0)Dc5Du%lb#^yBr%d5YLM|Ng`=M&injK z$KtuaZBaYiBRW88r@u68qo#V;wxQ&vUBx(e@0u~(2$_|ETpvnWWe#NAFly_1fiV4f z_ysVoo^=s-Q8&DuY4N5wp^eqLO?L6e0YZ#@BVwYJuZFD$)$=zB4InVbi0ur(ICso( zZWG81&4!P4eL=m~p~U(`dTFCxU~1SRM3i;;r>3&Xyp%YN`YfXQUtBK#E%i|IhWPtA z?#K(!pDjUT%ZWbaL4ZnMg(LI3GG0ag*iDcWRRtfT1JEG%yVhu`) zLwN^TyZ^j&wcm2|Q(@!74_tSBr!+!*kP@iV+%l}Wl%Gs2%v%eO_xbeaN$ois&-gx6 zFy>_qZi7h@>@bMv9H1vzXl);ZnH$a+*e~ORA$6RSdy#DvNup^$_tm~R&GaP}2~VeT z>ffQ*Wx6e8Z^OKX$qfl_oK{8tVhD_Q6!iAMEazUs?A}ur=L!8P8p`5HKNv@>|oc@n5rI?-l69bHeuv(PI2<64tS6H)$jRyhoThlq;z0G<^VJv zj-<74qFDy#tZ5OjQsRCAI^u>iZPfp&tp?Vy9{$YitV9MWmF(?H)h4jmf_%(_m z&lWXLhv%QMSQ8*5YGz~yE64LxeqM_l56Kao_X=&I^)fQ3xZiVo+CIIqzO@SJS(-p> zi1XUEXK1^3sNwfEi8+d?}CjanvbD&z2h_gll*Y<0Z`u$3;W^LoVIzFE$#=IdhUp3|dy@W1;t z*=Iyl%&)HoCe$ITWp$XHxioFps zK-!LV$UE*-8AUEbc|rS7fA;emtxk3QW%;V}01T_hPuN0JyyCg{c(0_PKXIs+J_XYT zEtb0oj-N7cc%U5<3)lshlyyTtC)+lKji41>L)lJWNYN)D91Nyc*MyEdC51OVEzRc{;15kh%Q@BCrfSKcb<;qLj%JuNPKQCd^gb3_3KE@e9ELB-`^LJYDH`Q;d z(8t+h7F)ujHpVC@npMB;17(%S+vm~aVfDlnsln!OL%^Z_e)i>g26Wivj}Q%>g}(Y{ z9*Gt7qN+Jh`+x=UUlby!&t#TtXhf=L(2({lI~ zkN@J6?`u7s|Ea+krK)-QVZ1_SY!&GlME|sl_Jqu{2qXN3f$ZNZSg*M?|MikM2zG(^ z%YW@%_$vV2o_a>#%knfYm1`Z&<{nxTW&8Z+o<4xbH=dp9%t*q?NBpz{Fr3p+iYlgu z`TJ-Mrd~f|B+f?~lHcb(ojUHi%jHy)msG*z5>Zbi_7oCPBFJ46^%;c&AZ*&_ccB!> z?I^6JSnmH)Ug{Yv_7~EBqxld4v-2r3MTyLNN{>Cd>ct4E4K(lW`)zb!F;qz^-;Z9K zTBUKVRKpKxY@yYp6z}o6I##Vw7K75>hGqGlpAv?Mpk9d!)?En=#)wbcq}|i3 zA-i${H(t4Pd?zxqo$Xa}{drjZ{6v<4Y%2cGEsa3kReZuk;BP~~Or3gCiKfasiD-*C zK>6OXsnM>axG?JC>;Y~Di&8JwgrUqm#Iu->=iiQHSF~V#v6`+J!^thS%Zg@Bb(o9! zK-`|uJk>L-v`UJE$c;l;l^7YfPhpW-KGTmMHkJWQy6Ih3hTZRY?$cE36x^1GleTU8 zaZ++p(Lh?+;itZ#gOSY*INmTgi|Tfqjli4y=;=Ig{KC?a%7ZZ?P$sKUUl%H}zPT{q z|NZek=>2o`%+%HtX*I8G!`w}fJ={iVzJG_u+`Y(4cJWm;n?Baxi)!}rEs76uKBfeR z*z|KYFZkPec9`$03SBGF4BIiUSib@9_zO{gDK@0E?^evQXm^&G4VnJWVN_175e#$c zZ%(bDAJNofPOgiM-Mgz~2z=9nP8uQZP+FSm!v$lo`o^mn@1z{<{2l5=8me;3!!PF% zMdRVgeA;yaO$(u$%Sru46C`hZxRr~%WWxm$9?}zg!=aAQ?2%*m>}Kh*s8?NV3Yvv< z;uUrPerdPy#|y^fQ}%Qkjw3Ruq&E}CHYW&6oaWMxBrse4?h^@*M3yWeszpi1NII3s z7qhimTha{uK<{AMxL}*3kalNxGs8ljSO&ap9Mx)`vuYfi)A+%sNG-s=%WHbQ!}$i$ zw7zUTfhKvh`L0ew!zXa8r z&ewVEK-7*YPZ1g6jmg0RvXOQ(0=q}zL!LDcuw=K^0i58hCgxmY?0JdG+gMty@Nm?l zE-$fs*4pS<0?FblCVPp<**}0Wr^H)0lSG`|(`W3sae1Q_OL z6y_0i?+$ql;&8E&V7MoRK{=aFekW4zmPOd`y2A8L2h01S`40t5@y~06AINB zQ|GFZUC$myhmqr2HEsvn{8N!OU3oMXZ)hkVJ5O_aTCfcukPMDcwe}*|HGD6U_%tWS zr4O!Xb~{^XHWh=R|J_Q~L6zc6=kD}y)(zK_8zPSS0wIm!O+%?gMRC(daZAJH_g?tw zJy(p-)V6pfKQbMkB5w9KL4E%;IEqymu9K_^7^p10Wxo8!dXghPu}#XM(QU~SGJlqw z+7K{qiu(b}Y&BO|d$5cT!Z)EeDR?CtS~)m-ffJ#lzJPc*Abm2$_${I9UYWSfJ~cWO z>Q(hF^JgaTRTCnFD;sN%Q~SqDQ4WbGvQg~x0L$Dcx0`}*h4EDRh&Y&Xn-3YXCq4P) zy3ZS3-Xx5W_1=DOC5Z!u^%G2YoZX72-y(%=Wh1(;Ma)T2@XzjY)gXAH0=Gkv1|%@a zDyK?}0V8S(M;3*L(2qCI&i?*YarF6pJm3p7;#@oP=)i*uk2Cbn6c#%9Tefhkz?weU zGT)xer@5+_oqgfgm7>{OR-X*{R`1<=5tTHZ!NlybAyap`t+d1EVAbMnA z&z3)Hm0ZbSyPXFME;e?lDsmhl7GoHcZf3^Irrakoca>d1$PirH54;`eTBFQ=YZMjL zW2Q$z)G%(zuHP}-6!I^{Q3@QmhrfA4bUJCLv+1|>`B5mPbN^}mDo&Vz(VmaptRKFq zF;V|z5zuOJ{gQFtOw^InVh{<_|I??1@8V8N>{=4RBC4*#oTc8+qTR@-R%bK`ea?#B zBc1dzwWUt{m`C^+B$M4F>4s@tK?M82d0BEeKaVMCJ-YJ+QdXU-u?VWH)qXdH2sD;U z=drY1W7VJvfbL4^v}>cW4|zCyoZtE(Dj5`K4F72p zy9SOB;QbgS>}GNwE9w0Gyu&e{x(%zL?c#&uDne`;F$VSY8_mT*?neo^;Xyuao33H9 z3}udV;G%smD1YW%1DRDYw)J`Y(`^)Mrn+5z@83|4=t%adRP88A z-B_9gF9(nssA=$CIh}I4o0pD-to)adl{854)voycgW%b77vQB<5_W@1%daVuy`%VV zX-G)l^TM9}M7tpt=amv1BSBlVE`rcu>8qf#Aq(6s&hD964wTkc{|}q}4_xO)h9&h} z&o~LYG&c5p@~@okc(R(e+W2Tv)p`t{k(Sc7aAg>mRGSJ|ww{RPA@-)wf6fHF%`_OW zl6hxZ%rKjyTv6J5hl45sKDt&qF|aUO)(yt{vE(koX(0l0e_U^R`xR;&|I?d4_TTRK z#qQ6ph|w()fU&5%&McaiPB#*GPoMu#8?E)+MIjL|5d;ij>mrA^`6}cz-*|DdAYEW*gf{uy0PMZ4=N(X7`Xb@GuiS!d+16hNq)U zoYu2G#)8p9Ihx@wX3KaX1@-w)=_=#yW}vLg+cdK=#OZ9J5XV3+=V00%`%VXIQd#1UnO zvkqv|6QLCyNLdzZ2m~jZYy89tuFruz13IHhVJ|0AW?r9vemP6#JkFQkFh&F{^b&IV zR;|4Jn!h?G+^vt3$cKaKi7LJ0)qcRaXsR8|U+x5Zk5F`3 z#(8+2HlMmSjTlyILL?6ijPP33v$DXH@>?D?vr{2CD)7CVZuJc2rTkRX=f!d&O=(fL z3zGPPpxo(Qn)$c>U{+uRe4)|)@2;@AvD=*_Qll?%a6t-NX1)vI_BtMK_C1a6dZuL- z%R@xc;@AjES8dQyQ}12&pp*6TYv}wlv!8#ii?(hTF9!uRBMq`)w=y5`q~CdCSb1yz z$g3C9Gw~*0X$HJD<%4!4qbtZ#ebKKU(gI!X(z0 zlI~m-=}P(rmLL9vR02m-*`P|~&2nHuY48CUEVY-HATd#_jtbR!zfbFdla;5z{6yYN z_S@4K!UX8z*`h3p5R(3P=PPH>PnI z?v0M3%^mhzB7dd=9ue7w`~EUC;Z!83bv49e&KbY)X9oxkbE2cOnyp_^x-6e*3YkUd zIWvb?Y7kQ{t`peewZC-5?S^#sxtB7}zes({Yipf*p_%%{Y)S`z-y0fb9IATN=T5M( zJyQ7N&SMhvAq z@jc4Rtj|G0nFdkhImvJ;QVfuz=1<*%1g`#8oR(a)KJHggScQ-iM|I$N)Fb3`Cn!$v z3w9*S!#8REA%Npe9o%<2c5)nf#tP62w%=4Z>FWg)#Z1$HK;; zYz^~{${9n+3TYIZ*LryU46rKy9IcI^e>tqW40%~>VD%5^A$GYgC+^wJZ5^0 zl6MEZ{30_o)qk%u9VM-a@uFs3iOkE!w^i5cMfl?TCf+!0JbMsJMdv5kl?Vh6=ZG3b zB$;L#N!{lj84Ua2?|;@9Q;zS6LHL%Jh&g56dABh4^qBixzIJ)9rqLcdG9uDWSxsMb zk{i1iUr5nnaJ2k&-|<{Y7)m)@x(!2Ee;I*U(71g)s2pCDEDvyW=L8Az2y>;WY;R<%(pe#uE3}01gQt}xCdhQGy`~#f6Uk92B+fl4F}PX&;xFm1VG3BOl|0^1 z*Vb2UJn9$|Bi7m)r;;583oi~!RX^qjmIz1|akw7?`#tkB@SFWeEIgKwrXUSA`HH8L zl5hOi*Y-I_Wynmkf`>JwLaCxQMkonUfvcEA(rar;YrHYDl4IldBGRpUtQ_m1k$U1- z1XEAKV&W%NO1xnJ(@ygTPFIdkR{~|Z$l33_-=$i&s%4t66CHveL55YQXf<3Rdt+Pc zm^G0}miZvJm_lCQE>&|$l~PUUnb7f>#PlMva?W*iA2`~9!0@Bih@vNL-U?pcULhSij3@qe$y-NuAeA`9*cWH8L28?L@t!#^p)fxucw(obF&6zJ%Dr#r(*)kj*o%=j zZWjig9vokOt0z&+h?vs*glM&jVl}`E4t-f8e-%1I8#hZ8cNr!C>(<^=X;QjRcfKUN zXKiJ8Prca!tTSaI8PlJS_(dCY*H{@Ut*_(}pwHpJ>&2=tQa(uivtNE#B%uAo#?q>_ zbWeK1DYV8J@$tM8SQ;^p5m_D8-rrd*CbM8Gh`efntrldrD;f1KEu~7L2T9Xc_B9D? zS+|0`E{B5P%#`Pxw^pw8?zFzOxM7aDH7Z(Xy}6gBah?>HY>U6=$1=YGQ8S!*eFvW9 zbz|guirDg&_4Krnv(m+Tel&4ycC~1nR;Q2QLAzoUnTnDaSA3Df3o5e(jtH z=m}kGH%RU!p1PD*OH!{)$OQB%Tgzt>O-;adJG9@FUxxt1z@Fv~187v|6SB}$z)PiP zDT8is>)l&HB1s-KV2UPE&?Ubj{r>&weImlWma4`$<5KcC%-6!&a{vBJ8>wsR$%&6! zf{@VZ)ESDd(b<@GxyHKt=I!25*1wmFgUMG(Icrybhl-kVPbzxCO?}Q~tM-$aRn7qw zDl`cXT+1k+LxR=0s>aKyM=3F|M3Kw$1Ixjjjzz0PeTHb}FVSyt&>G?M#(nFAoUPtL zsH47si8W)nhDHe5TD%arS4r-0nIr%l4^~HAOKQ0_d1;QIFb?c%yy54&DP=Z0u?_pT zUxZsCuHGbczZw+B-y|En*nnQ#Asp=_fg@dKx$ns2KT$78ju!?6zcyuZXAnj-EiFM_ znGZ{>Od8yh(&is!2AZ|=(lHVZl7JWSZa^RX)EAQ-V?sPY@1F&k__bCx)Si0<|G8(6 z4QNi1i{6UUDC|oX{^CGi`mW%Wa#qJf_J#3H*Olbt3+cY+5ms}Y*@1$pa97IHo?pQ| zhaBu++OOZ5m`=NR`53$$dgJ-sI4i&mTo6VtWsvYIZsv@koFapMAW8FcgLl$bg#Vqd z#y%@i7OEUu7bVq$UyVyqg+ln9|7SM6ATV>wiXLp*c}Z_Ri{^X=96U*pT`#}fU#MhI z?uomJ7^AMrJ2oyulU6*WtuPZ$P0#N#aN%Z3G%Ad;ent;G1v+OmhpXZGW^JhOXu)4E zAU0d(Kziv3K!e0V)z-p@dRLjOBv! z9x*u`X;;0lrPhUP)P$5YA&ZSywvU%6I&rh2Mg1d+Ql~r!02aC6O9Z2122AgG8c0OttX|%PC zc^xm`gZ|^}DoT10t63@(^>dy)(~ZHYK_3MV)sA>^g`uT!7(W8=7VQI8O42b`>pLn( zs{QY)Q?0w{Z!c+gsaqCU5WC&@a)4P1&wa`G>S!YPP&iHtm>qe3K7}549D(-lGbec6 zK8DnhaK?BG=aZiFegf9O;O0?=KB6uYujl1S1!Ltt`gy&cNjlv#ejy~&Rr1#3+PMDu zT>S&U$h<^b!?;r6b&j&2w5_(^bm_EDJ6uUkB`tqOtgMFHm}F!t3i(c_WQTBA=p zSg3mpHd;4|^7;_GXQAhRHBqw^02wK}0apM`KY3TMDSVc7 zO%3J`2pLYnboK8?+ef#-$%a8?8R2jRL89W^WyFmrh#HHXGuK=1_+6 z;i;PtRk%Yu_cu|>N{}M)3vV6{Do6X?^~YV+mB1cbwD99DwmGP zX1WI}f1F7D$0EqS0mhW zR2dKy3a`GBSFcsQ#yL+*(H=+9>kq1y$cEzA!8_-sFqDH=QU66Q+eS71JvQwHCA~ih z(7L|!B-YyIi?Y-Fu=PUd&7^!~;+xI0jH$_7MaHcB5S&$Gy#$21b{%xHpLqsL!k_4E zqL&>f2ZB&0hT@6?JTN_(Y)Dih+R=puk}kq@eVqqStT4V)n0I|$SjfZk|I|8e{w{2NY)&B#I~}3a2U>rL}2%((CH3 z9Wu@#Otj4N!ilJ<_M|YT!WH`@UtC7;K${=YDC$H_glm-tGzK&QQOs`cW=t>3pc2zw& zB|FQwsZp-c6#}HJ39BGd&iKZx`>o}Yk^5x^lBr(7BqxmfBhIEA z{BxUTx?fv|CsN{6ydALE;Eu|)+!C>6z&aJsI-%L<_TxM=dUx=%X8S3Uy;*YSx*=<^ zpVy>oXu3=;;tsn(la8QJ&wD51$gsaEqP&8A3BO^mH!%QgwnLPqodaAo8lCjty-tB= z_S!}0+u^gS{wy7AA3EA9m9aow`yo4_QW;*rU_o}{NMHVF>F6$B(*D})ow@E!6?ajY^##lnteh#A??YWAb;*g{U z)kuQl5>|_bFb_f*XWKd7WDC5GA05-z&Zw@A@&G|$C5LF)Y0mkZe_y`%=?QIU?q zkbC~^U*~{e(PrKT<%->9<8W{MLY_B$_lVIR%cd$kaaQEDxv+bdM3|`&dN(Un<)Q_iUY6i4C3x~9hBIu;_ z1?YQmQnjyS`oEwew?n7M0h*Fa5_h*HCF}|&AwStefqV-^7YKS?bsY^)bLTC1R%CX5 zttcR@F-mQsjGc-9bg_4K{R#I%Hx+mdofj22WAR}KxP_F$H;dRw5L0GwvCZ}aX-0s} z5AjoE{&fpi)6)It-;V*@YYs25s58P^zo64r*CBlpfRM~3=b~p0U!4m)R}&6~Yy5gJ zlk3z#kCg7VDsXUT6`IU7p2JX9_s1<%$-s=c61Un`D(OIAe>N|u<~9QuAJRKW9|WKP zBV-rVxo3E5B4#Vw^&9glu)hP=9(hO;F7&I1u4a4|3h5rTRZiKycx|eFvg7U6+@Eq^ zA5v2Nn2 ze!U=0KKQs7^cB=d2XWpHqOVy=-ZZ;I2XH(uz@|GQ-My2YrSLfTTzqmdlez2&+F{8- z*GnR)xmXM32P4A^-K>q;q`i_PaG(Vnm_o>p88}827cSLXs!po+#|D~mrtwY8?@euV z%{3}aK<`IoxJ}mkDw12HJ}sz}w89Y5f5W89cf4v2f&k8UjYx}21@z0sxr!Cee!Hq} zhvtORjVj4g_R?rUPcEJKa={*hUC0iD!^J|85?C3DPW0gn^?^Wz3EdBUb3ugCp~C1y zb|pt_ZAPT$Qw2K)_q;?Z=?9x@9fX5Mj9r{8jhcH;!wO5?9Bvnxg-xlrX;^TRFu$b4 zRn{{9gk;A6ZnaWw{Sv%9m!F2Rvq#NUTJ~I{GE#&Q4Z^!OOK@`vVk=UPn$6YUN<-TVW{dx$~PonTF_qds_kVFYh>21A9MM`5p^q?qD z1^nZK;c}7jEt)LN5FMs+Vm?+ZBB@o4Le@tzHAOpBToW3pjg!l)i1O)1=bLJ6k`YbO!H+$_Bz z+$?;>rB4FJv36HWQ~WS((mTV{ww&_d82uKF*g7~eO1DS*iq_W+4nH=Udwq@*4O z7^T2;L%Wnr8l?}>Jb0^M=Cpbpw#)Lz577iI%p18uQu-R|PgLBXDV_i9*0OGpH}gI> z4QI!_*}I>wPO_H9PS`Ta@;YjOsv}(3bn_sW%@v8d~(okMvtSj!WRLZg$u#wj=nd?wq{`MlF4a zO5K+|AVa3*=~Z{Ok0Q2T5naO6a&qFv3OH%SeBa_zf&I!PcE-InNOGqj5eB2JLO$Z@{ar`cyxoj3PTDoRKm1)DASl zrC$24M2)tCo6`TmZD#9$;9LO`Gt}8$kKM@2fu*UH7>MqksA&jZnYx--2iT-ZpoLa4 zIn!RZzdig}-p!7FvHzVeZ5rDP2 ziFOqVUKNafS{|WjUi*h+ zX!JSNDX2R*Q&=1eJYe{Enkc@f=%WV}{BD80V)zg0!IEIpM=99n1vGZO|T$GXlR{Ln1TczA*Rw`yz6N{iLFPMi-i6>}kzEU!IV()FvbNpfp8`iCsG| zPEwztxdh!KaWeFSIXHjS{+QQm_iA2*B;PLsc4kLYD?lJlZ7kAIv-nrr;4KfUhs|=d zMvW)8(Wmn60qj%N$V3a{ zW5L&z^yNJb_g7b$BV)3mH3!8KXfO0TB|zc6)K0j zj4lnrJT5b-t~C+wkL3HFXme{`n4B%b9C$6nBh)IS+fw}ws{ij0mNa;ww`dAiW905Z zN7uALadH&hRyX9%SiXu=;HPL}s|{1DVB9r)L6OF#&<|Q=jBGy(-bW8ijeNpBHrrj5 zg1hPhx||QQTq7$r`2G)K*O-V)x_!E^p1sdDr!>zj2rpbvgLxPRmLvxqTA*dpCWnDRR@@LnSKHw~y}<;N#9J3Gh}hnJcj zGk7LpaoOd0Wax=^M>gqasz@V@E@-^W;@kHkS1&s_b z1=x~QOzJbN6qfN3I0v0OLGyPal*&Z;@W6kCkwiLo;d}J@O%|a4|1^?{E72d90rpc=idF0kgk%^Y*Td2va24U{~F$h7H zdx?z`R4+Zf`|euw_d+Ds+9{Sl&fo;kl$I-_n;V&ATUdo`jW=-mi)}yk=L4``kUD-& zgFQQL@P*}P7(IrYyPu2zl9{bkCqLP>m--ZQl<_a?^JT)V#Rj31?!^Y%iPRYAwvHf6 zy#AKTj0<0kYcIci-Bf7XBlhuN-bpvq)^1{pM`Gg+ zTLxAsq^sgebUnkDAJHaj-elJ=MU%{y6W0~|o2KV0#$iEqWDBuj12^~5hwdv(l6mJaSIq}T4`MBSf{;DKt^XrzG&D>F1S~X^HPER@TCpm%`?Je z2T#sJHVRg$9o_^X=@rp;3l%c;3sB*Yu+q^pMs`2^1Q_nL zG#bKYqdJ-z9N#&SE?&n`foyz1wUkxc(>$L}#dlO$9lwniEmhMCn%C0Oqn1ze+~n7; z-2aBiwRAV?+g%U#gie9a!qWlbq_AVKxi_%~u&HhE5Aj54g%t3He1osrZYEzN^pJ!O z7esCYg4&w>0zoK+tb=|D^M9lU>fd}w1wI;((jr1qR_6H-9I&H5=CzW6k<cfuvWJH=Yi35N75-YP4Skw< zTagc|9WyI%6^W$>I5;b5!GoA}Qy!-QXv!@2vTA%jzlDhpQeH~L4`THnDu-NP#F zoM-w(A5H>E1ME!s!)6by8k2UfclTv^9Z9T)#~;*3wo>aSTY96F>kL4A`5x5lM4Qc* z+{d6gm-hmdu)8^q*ZiVv^HOoI>g|Wro8GV=Uls_3-)Yj%`-VLg^9OGKazKN8UJ$w@ z?&X1kqyY?2bEJePYqGf&>2LQRtukMO2kaa9YgJp3*v}>-Yh9=^*)|OH;npeHZYATq zL|>S&9DM@{6n}On4W%SAqjOk)W_6rvw6JrMz(~tzTx3=)N-yL$2ChB1_=xQ|E}HNv zG3CCU!paPF^o_2+5O_6&Zd_Ly>09Zw@TUi{%-HyjAF7NuHWq(MWSB?Fl{9vh_z##} zf+LbM$P|AhRu3ng*&rKUnZ7cJ?RN{EkFn51ixVx|>g{qX|!4HMo`6g19*M zaUEOxNTK&7tx3rW?Po_7x3zM%is4e+kEEh?I(e)-ap1bqu@5vH6>?_yX;JUl)0Boy zE}UqbqvUSc+0%?o*#`zqSSS;D3+05=$4vs_hwv#AVL>#=QF8tGX^ihoYn6EuPltA< zmSzSEKG(7-G}ET+4P{HxtQHn$a5I>*_YIo-U{9OU&T&zpiTtA-#Oqoc)*Y2@v?I_r z==mf5DoJ_VI@$S@%?Svs;jtgouph9oFZB!-6ekURvgtU5d;Ta2IH%=4a*hdOa`-6& zQB>CyZiLTDhC5>^SLbxtuT$(#L(BFzvb?&QwdKGS;?ymei$nJxxQmp(?!DYe_mY%* z`@9aAy>QA@*uT|k^>sD{=2Yo>Lkr#1!c9v>qL9z#rKy#2z0^k`_n-ay^hh1geBnFk=M!r&zsFDc zooiB>f1c{rJZnVy5N^I`zjxFZ1uo=&jMEN0<9UDK7bc+E*U`5gihFnJs~la_q(FYc zoo;l>R<6I{`9iI`R{!Vdr6H$PD1FmDOn_>>j}zOSaoRVp&l|yzl_avXNx$`*{sym% z+*8WgA?v~b+erS3Vck;3&It*5$Ap>cP2%%_s>p^F|lOlO)Th4{@?za{!R=JuG#xP`XJ@6cnLr^>Ag z4nkNbmVJ827s`fG0&{1SUa=#}7qK5=Jeln$lxti$i83O;2i3hWlr-@LhCe2gfpEV5 zc}wG3|65b**AK_kq9C-_fVb9W%N)A zl*?x%(mW2GC{uapKTMTP-g*BF{}Qv^G`Q}YUkXuKHLuR+Gv&CPwTNdNwh%f>h6T8y zx5NJ^JX`wcK{>vu*$2MUP(9jrFq7-P2IvC)&@A+iz#&gxbfHF1p|NcuNEzL_Gvz<` zed)_riM6W4J3PJjjl$dcAKdP1kx6E2j5j4qOY2@h>ef0?JehUATWiyj$K)L@D&@}O zKl@f*2i7t=my}d(x70Y|4$`Qo-pXQp5fz0-f`Qb8LBYgO%stB@$Xs!tg*3TJram4S zr5YxM+MWj9xxCCr5WgK0Z9tG-3>Se>8j`?dy$pc}WQ2NMFZIekl~G%D+>Y&-xO;5s zFp0v&uVDL`?a}%G;Yk3a12)j{4I^JsWLB5~2I6b4rjY8}L$b zCsF0FQm$6=xcIr9V&yQ(saxdSSJ{&G;;v(7YqXFvKB8@}W0iea#%i20Ai|^W;c&`h2ucIhV`$)baITgxM zO+W-2v2W4=-K2Eg^Hvz^jlw~k4+d*i`cTc4HtJk0+`Ih5RqX0;QqRF+w0r&RAHfzL z<>Tr}+OG0kqZ1337RS!gCr7#Qdcr2!DV_aHx$(@iFG)-*r$7@;h@R^xlC;m-NrbgS zmZ=SEq~ONUHC<^(*o=nC^zfbI7~>osadP%!y;ys$;(Ib0!P%3x3y$ssp(l<-Ett1V^J5f+SY2S(4l0j{0^asr_$?h-t&V`FI2 z(2=UwWOpNkdDBg@={vnx(pWk+EE3Xmz-%aAk1Z0GsvwTqOi15#1_-gAy)gh7TC(tQ z4Xykw=%{@gK-K^wpS{@-Axn!%x!MOFgqgtT3bn+2v0Q-@DGFD zhu?v+b8x^U!LUHBoQD`ZuK|)+;048$(U;dPfUP!|Ed!Gy=a6?JSO&B9LyLr;^ib;+Zxy&8l)n=H;lA7l+DV?_Zv~&nrl_u-!A-Dq z@<}RjbO$T|$8RP8{3}ZxZ)V3ugvl)n7@HQ{lu;Z?v!91XyHpKq67F5WEop-sYtK2v zGa~^=Yjws)P2ubUPHxo$_Xqvi&J-Zd*GDNdwCnhL8E_8Im4(Nhmpl(<8%bIijWdN) zR2zxhaB=sdPoK^E^4QU$iDeY)xhq^6=5cYYo6Iksp(-&TL4HH#-z)iQ6N&yj;TCf< zL3BZN!63nzoJKlFt;w=INja$NSFM}TFO9|D7Rt=uH@SMbRC?*bi!W5FO}uxQy`Iv# zAx4RnGp|rnU}$A*s{#qKK;?g)E89ciQF&0R^r{MCDD0UnGZ*rv5&Q-ctlNM;fT};_ z#YBs3moLw@@2;CFwVb;mf9u6k=~dLNKK03RP9;PoUpOHhLVVzx+Qjp@;5F+s@j0yv zwbo4q{D5dqp4vp&Ife_G){PCSx(G|I+C)G874fOojW^*|>Xue{Hb0~zg!P;=dkBM6 z8A#BWO@o)J{_rQ!WD4u<4;kJjJ-Ys>jX%5Y1v>1rnd?Uhq>LNIgmrg6```_IItOHj;W<#uqIT;JSj zkp5tmfaoH*f4-xMbf*|DQXAfkW{w!zER2pEGG#7hbblP2thcDg3yMi8g>R{w*)TnQ z*E%{a#2%bd%8b}5SI>RUK6kRAjKreigRl78wCppSUXhp0hH05IG>eKL9gwT!KnF&K zQ}swY+zCi2J;n1#E0cVsYn8j<6*(5xQd1B=qX!<4T&QkIE6adm_eEY>00UYWy`l%# zrljr>)mO9E}Tq^0&=o zbQt~Qs|vj*PxxYCV%3^+@<+5iqVKAR)OW@`1eg}D1m5&lz3bmP_GRz$sCeSSk4=US zywK1j3;GU#+K@O~HMKshqzsR6TQyF001yfQm(00F0w7!fVrKxbIDwx!1b}&I07ifT zFy#TjIp{)zmjcLp27o1mzYK+;==+ULjey)rd~cvYMi|wofnl{Sj|v;Ir~w%)-~rx0 zLbKyiGpfgE{(A*3knrdqaiNih4L|_^9twKD@eYm%KsySC+6@FiTo02~^sz9&!s}^D z`zMH1wf@l8y&!mg_|7-5I1H`R303*XT8i$3-tq&6PmfB2|Am(E?3P zx{m)6AITo{VQ%k zGgr86;LvdWN1M-J6vuXehA3od97s_6n*e#VOy!n{r*N3K*!EX6q(y*G>U@p>drq^ zb^%v;voFz6{22N#&A z{H@S;ph7qm;I?i*0z|19K~CePqGLDuY;Xg#2G>&JM**W1F6XO{Hc($D09@0*MZul| zd+IQScFV5iQUw+Fd~7NF3j>WiL`S#Qc?-<@Ykxt=LL2(9~P~0iWB9 zPS^Q6j2#4LL#^K|jmlN8jf(`BXB4%{NlEK*PZJ=B$EA+~lskeVdLPb=9TzIQGIw1ZtO zy|pP@ercs)?08b3=IPF8-gG@x<_-C_N{5O97hA^zC)j<(FL! z@Wi_bh*2^z%AUq7aFp#xFwy!|owAU>jIAaKVJqR7*w#?nasXJi!cm03APtZ&%XDiT(`8o>f%OkAG`GIR7Z z^KmJ6*mzsoh36+p(gfagPd^n7)(AKnY+`JI6fKtbZ9qFrDSV_UJShLn&zcCjZ-qQEw8blk#pZdP8)m1kiWcB4M* z*L#OGMPN#P~tVu$~SN7QN^l-wj1W7|$x$cuxzbM0doL`HPh?Eotb$c@@>W|fO@TeJjj-Ai zsU(wnJFUn%V)1?uZ!50&u`5WD#(MnBj_QU%ap+?@wL*|CCawQux{0PK)35+vn#AE` ztI{ryNkrP{O%`$Lx|y^+fG9~PJ6H?FLlRfK%4JGc)!xoB!m!O=FvhbTiF6QmYLnpZ zD;pPd#dep!kho*Aly7y(X^lIY&2*c#50j?LyHP}D{iXr;F4bEVXCl65f{lpEzLNy^}J1I_)j~M ziteTs=QIad@53pZqUEjf*SJ-Zh1krEAudx<h)p~Web1>xWvGQlWEq!kyds93*i5) zvitY{VSWPG7XNRJJzhuuE!3JnU~l}3)%pLhViNfuR_Igz!|IF6zgZp0{X=&QZ4;pk zHsQER{--+LuKyN0baT>w)+1R0CW<# zS3Ovk{ztGVw}1HS^^Mv5?Zh#=y2lVn$$xb%*aZB4TjOr#|C40Q;kP(g5~9n0OQPnG zwg*^26jgTrzkx!E2p%ZOSU_LCZaV7f{9$pfKV$ghuPj^w(naCBFjIJJ+C<%1+fsCS ziu|s?oL>w4k{-4xWJ*mlyJ_*14ih8a6)OzFTn$NplZS7^pHS}qZ~8CV(a*=GqWAwd z>j0bG{i(wZb4TBN-|w=l4YLW6l7;zzx~K6d4NoNgcO}8Mk0JI89O)(=J$)7lzkl6C z(GaXjvZb5+aT5fxxTT_K(zYD%z$XT%yC_{6?4%KhJb?Q6+Il=U=o&LM}b)&J7l6%&18_cqT4@IN{Imw(fZE$7gA zmM4JE{UiFnOu6d+Vd~BG57Xg)n0{OQFViZWe8AO<}{(BB(#+O_Yv zQ`ux8(4R31!T6cZvus5$cw85K;qn_vZkl`Ox#=+(6yPbHUs|CXqj|id|H( zr)N9`XWQV3U-nVN0~b_*`w|uS&LDO?VxsngbxPt z1cCNrZscUZd){b$C_kSYG?s1yRss8&ZSiLW&im43(&5J}h#Rn%l)#%jR0gFAPFAZB z#SXp%P!Q&eMLpd^xlZF{nbal|kfRI5iGFxIvqNZNGODz~SO8=Pk$SkD_FIyy6eR8A z*K5yX1k#)X9i8UJ&-0^jt%b;lX}23y4A>)33d6o{Bl=A%3VWrc5ginDpR^a;?0*x8 z#D!`&;QJWeN&MI~5ZM?KW9+vQ06c8T!|yJVxx=##yzmIWT7L+=rKH`S*Bs;O15O&m zD2o1=#xGy4rt`}4pey0*b43tFp#0H^D8|@&6kw@soDI3Vh?IWevd`1d zzXmy4^ZxdeK}=aWNMMyD$24bmiw)Q5Oa`fvf{IU4J4jBNUY6#df|2weB{^lve>Y2e}$-x|_y<5ilL zkA4aU&c=cIdA6mRJkqJRC*a##3$m$Aav;uxAg zqQu=U!gN|=-kWX>a`%U=1j>KqhKFou*Cy|^lcM_iMSwq`tEJ8W=O;O%?}v@6U1oJs{wEP>Z!r|w-dcs?U2~#am*OcZHe;=Mn;ffYrQwv6V2%6 z;;FYa1CB*67b)4y@QVg(nOEQSYIMjIDM=-pXq2>E#%K*wS#K|inkX$|-l_DC-WnvKCVEzIwlKVE z`FJ^oNeE?)U0+x$p6Vg<7*=fuw2gk*TQWszWv!Xrk~v>_kht%HFeZJSh+)QYvVW!R zPg4mK>ZAnphsaUxHPozU5yMOyG6UJ5OE{`O1{q=AzxWN7-vxAYEd@bn|GM0! z!MsKA_LmoLKfz&RsenZKWx@?>V>|K-JffSc@&%_k3IByz;xQs=O zZAWNj!X1Ws?sUUOxnJ;&UeVsTez-;LWGefb&PT2okkUmvYRvM-LVqD9z}{aHcL3R- zQ1L!Kr|V748O&VXFwN1@ml(*ovLh217RcxVL3B8EdR6>ZWW~fXlKs8VsS@m=3BH`h z`z2ge(hp+izj8m7aV<4gyw%25El(1qU4A3HEMRh*Dxjqp+Afn=21{bdm;e0{Hsjvg zal3c{J$O%)QjH%ipIemDb-TQ`wxEBxf*5X@RaUi$Fe3hXEu_TK$C|^5z)euqZQY+< zR6^O*M}r{G>T>FKN>iCAky`xjT>-q=$4Y+L-aHIJf@zQ^RYTH{_XmqN$_-@KrsDa( zaFl74@<(rK9iRJ+AxoHAh}-3n*?FLVuc#asL!u|%p(O$K@N#FLV6qrGFZAYs2<7Uo zO_(nNlB@{}qz$gv4kNiAwL?Yupb%>6p)cEWS(r<@pL0-EB%G^PcgKACtD|drzWANL zgRHzpPv!Rlmosv7nR?(G6RLid?5ajU}CeQK1+~DTQf<%=or_ z^%&JP&}X@DGVRq=JM4EY?}xpUg&Flc@g0r+hYwkuKCg_ki0mEIE^aWg_e9$t2KaYCrM1%0=tx z*Znt;a{>LpJd`(`m7%H40_;@uES-@nk;~N5y2goRV#Ur?!Lh!zB(VdCK=c5sWcEK! zXvqXRXuVxo6ep<(o>M4jqU?>mRJmwn$us+MB~h3+Ww*)WvXb6NCq+d`e# z2U^XIy)6Zq!Xf`!J$w5>#jYi&i{fXk{vNU-qH1`uEga)3v1)mY1Oofi;QTVK_OIGg z7$B^-vDa=TQ6sxaU+eeQ!i01YKL1gak|eIie2-rAN?z&yPSrtex4f6x%UujfMRaHP-KuwI% zsuhI`vG$2NgtJY32i#~44$3`r?$#pV=l1~0VxvEAL!h14!Gg_WJ1{p=^xwyGAh+am zk3vMFjINUN;c~L8yNbBHu_%!GO0#%;0#8`J{4tJ~Pn7K}XuM9p@itwxa=`v{A@52g z51Z#PK2C{N`Mg8S^e2gpGG;PSJeG5z+5_&7(6d2}u8|^1vFkeBis9N{MZT76U))CI zLE7cYI9*rn4T?5c*Vy4Yoqymx1Aw z)KwSx6}|ZuWFCR-W@g^Y{=j`4DeR~Hlo|@UP5uM zuT36yE6254!2?DKC~NDknkMZFD68CEYhMwV)(R5mUXz1Xw;Ku3t}rDaOVln|k@~W= zu#L7{ts8-e4d+}fwdYz?QBy7>eIWRKfCi&3HD;k^AiP(? z5>Vj~K%4poWHdR@ts$nEw!P4YB>kCaQd+kF!!=0qFi`$V-?<*Wlg)V!PcwDu7b=(j z$+YRfEn9B9+Ms|-E9%{kvKrm&*r8EgX(I^E1i-_k1wmLk=|jG}@r$b`eyq|_F>T6L z&B*jYFrNi3`sBSZdfGQ^Mp2Ct(b_u1Q5!`1#%YWd5>90t(=Zxf(e2vk;eEr1Zh5|; zLv30ehQo+XS;HI>z#vM=#Fk_wL^c)K8?@wyt5xcgZ(BJS5uV>eR9>N1Q`3P2KJ>6Y znuiA0ktNn;A}40ON1sR$;%&}G!uxndl@TpX?wz~{^(a8)MO0!F&E2(amK%8TNtx9%h$L zJ&+5rMX#+6+7xPTydys$;xPo_K{=f`I^efP6Qv$fzJEO)!*%#M z`Zjz~TCH=s4AT8$Wcn5(zyy-Djvj~a_+o)LT&0%Q*HPsEM5qffl|8G| zxy%%o#I6){&?U9JL69pMI~oK*`Qo(gZqs^8$@rcnAg^YfA{+9#`PBvAS>BIoH*>>q zKI690vMt0Y-4^WHG}pX8==b!|{9r>7G0GzsC*it8CwxM`eZhuJLfCU8g%NWq}D=B3kdlXG8$_%ZPzpCb|(JJhv;Zf8cg2cWX zW=hZPI6kdZ;T33ehZR9ESTWqNKBi5y@0TQW% zDZk@$Cahzcpqn^tRZd@WT%Up=4`=yug{7Ro;EccTXeHYp=66PVIRmZeI5Ui7i?_zi z{#*I#ac$!Id(l3&b96lLS90HYe@ku4#{G~+PxxHob1py|unV<*OW`qqtmIZX%;@_Y zA?W_;&G$X4`jquB)y+xxl`h&-HSn9X%`%s^M@Vc8D5<&F&-nNudmTe!ge`49xT?T zEg+sE!E+5GStCENKZXYWAC9gvAdY4U26xvFcXti$?(XjH?iMV#L-644!95UyL&D(_ zJck5_L*DX!0DbJ<+}`Z$bahqFbU!lO^~tMoL}WSVo*ZM{=4$$~ZFqbJ za~yd5=bi^4E}wq8Gf0tN(cbvGI}p zDE76_=Mq10D2UASl%Mm0V#$?coG4c;)N<|g4r};l(^+#4*~4m#(zhC5ws8+ehx>D5 zgn0(zIN+>ws2>i%V9y5Yn`bJ|oBFt6+G6xG>NZ+&0Q)v3pu65o2E&_wjq@8Fg9bbx z|8rx*uQLg1qwLSOvBJ7j`bGyW&^d+@e5yds6@ZH84Gu&EU#!=lWPj(_4Ub8cq!lS= zWngrU$5+>X_89WOVm#S8Zq|}GvysfFg=Gt;&?w|W_-Y`zFClMOPovbs*?A8&0~cEE zrHzYkobn8U-$aK>+ZP^b&OTF1}8#Njc6;UA~D!ldeur#YdGEyWarWi7+p z4P;E&Be*65Ek9n-fKDqE)A|gwZIL4EETj@v^M2%KAU1T?#?z_lWn((ZM#je}(@;Ug z7cFTGS}7A&kQ~c$vE-vy^a5}Pb9+Y)PfF4j)Uvp=zw)Y3!R9uV*BL6gIRFRU>X&I&DU4^!xSK#&a_&A^tPu$4ZNrj%NOg&&=3J8laJjg6JHrDfk0( z5ALf%CDrUuQ^aJS$n_xj<^j>(I^UYbE@_8&02w7hNFp}APPHvsScQe%KbvEL2pbM; z^g>pD8>v{ueWZkB3>D$wDJ!`jM)9MNBqJDE;SgGEVN$XZ&BGTiX&K83t<~NTjk%mX zvNd^f36?1;K3TFX{002_9~>((3)*%bEo?5!X*IV}97*!$eVyT}vv?Y>h+=zE=G=_r z&cdo)oyex#eLbKY(^+y$~e%dM=1^1OSiepwN%CMY7Qjyym2`Ge+XOM@+ zebVE%xut0XO_sbh6V0P$MTy;+q z8%r_NWots=35&yc3ndFfHl4KJ9}A-JTcW%BXnpshLH9EnUqU;xc+!1&5GNkfs61}$ zdvyuthA}1t-8xx9vW?QS9LowKxbUoN%f5!wFfGKizglq_i7)oVa${Gy+-wF(NP_SR zElA!VzUN<=&$LoY9&+(WjZHLr^`{mvaZZ9fZPwL3B{k~&aKmd*)Y4e0Hz6&e1K}cZ z;x*85PV(%RbrkwIgC<(;H##X>x9Uj@~F+ca5v< z4Qi%{r|3n9e(~p4CteRu_T%x0vL(Ms5 zvNoD_i?qd>42+KM6$c5bJ*XZohMxgqpivDtUpcVStEt_a_c0U+w-N^L^GGH_3{DOI;KLPmqmN zuV%}Pz+jH z6eVXD!j%omLU-!gI!t#iNB=Cc?YQ>j3sq?NmqwmVeBM@sHcn|XxTNZh7>U2ATiSdO zNZUS&{+Tm;f*=iqb*K}a78(oPrY}}gI`oiW2+qZ)btZW9Hl_*WAHqpi=_+ztoO^>u zT+sIi*XcB+#1nj|5-msh-|(#D1G4(?Gxm0(e{zGz1&o(-Qr++;E9Q?&KBNhO)C`87 zz-{5NKXmnpwxS+T_LanK8o5xspxwkNMApv-u^tg zH>-l1#YMNnF0w0L6p3~b>$|aB_HyHwFSOEfg{~^?8iupjmPQhvlqv->uyP)-QrVsI zj)PLs`LnUIc04B^TQ%YvQBSxukX$iJi<$T8aVMMX8ebHJk#4={-<5M7N~PH!*1yF@ ze`{MiNNW)c;jW19BZMnmu-N@5Hzx>3{$l&%w7R)N94ey$n(sS+3Fn@^L;q~D7$PqH zEhuiJ{bL|2^F!ilt>g9AsY+`k%IuA=#5+MFQdQAw23}kQO6(53;tkV0G^nU(0%Vy~vqB>vI(?;- zc*$xs<{!I7{wim09-Ye3y;$kumz}$j)#_=XclpXa@uc%V%L`@_gxhj)m6x)@xS8{&3l62omNm zaq0rvKN>!N!?r6$?3Yra7J=Onth|M#C%#ypp-Is4eGcJPVG`DOo5^s&HYvGt^wP}6 zJdP0055_+KgBgU{npT@m%lkN)`QLE#obb$=sYIShqOoe1j zlk1+O?+YwyQuRtKVfHRrN&`QsC!sQ!(ejm02@X>;xg7JGyz{B1@RJ+zUXC-*OqiOC zd+|?c5L9hl1J7k*FmcJKHMA&4JuEMb2oaC&$Ul(Bhq-Bs__d+v8 z@r=rHyTDw)5INMSP_AL)u79#lf!eTNcW31CAh;poyAfu1zEUozpkziL5L`cGacV@- z7EOrX!Jenn5n9&Hy*3IrCJF0I55p!oe)Dt1ytXR>|ev+#ESwYq zqJ(x5SGQ)6GhhFKS(=84_a9X&HVqoLH}#?wnp}^l4txnww}C%VdL9y!>0lwPu~LD~*?uUO*~hs^L!Ww&0kkcThzi*`n!RVL@2c^H ze>F>6v_4sam*ZMy<65*}tgdHURztA?M)WV@R%i>Jj2N6C)UP(?Y94U`rO6`Xk68Q; zMM~73XEDDWiOH7J?0$dA=Nhyf+X6^buBgvsCTtJCHa?-~1<=g8^;mckbqgsy8+!i9 zo&Gq;Se<9W)?yP^p9}C4fmCHU(*kR@S=8cC zVkmbu>V#qBV0Rv2^D5|Rw~)_>zpH~iybP@gqY2i;3SHW`3AC~0f%QCdPz3_4GuT&O zbD>q}zHBSxbqL~U*8@XiH4&=73Y*kG@|9r7V{L@fJ~S-yp{c~O1JHrr&~uG$_7yxv z_Z4pLECPBnt^ZkRx`&D!9|uJ#S_1F!WirQ)cy1XY#@*Hb_VuLX=enwdFTVL5<&_xx zKwpSaeTK^QUvZ5AG$zLi7RsOx=1XzF-!Me?YGSQfb}l;TLIFZwF9{8@R<{qX8lE;L zv)Iu5rjA1LmarX#qjllbSXudL5ic+RJLz`G=RFVy+rh-`Pf`LZQFfgskUgl<3jviQV4}`h6&;Xlrgtp78swAf zL?SPlOVV5gie$rV%Xz`s1D1bamH1jV23)7rk9&DOkpU}505EqC7s6~m0To52t?rZ<# z2SM_dBH&_;WzrJ$hg)`6SJpq7p}uorqhS^@Gqt`lVtJf^9z8%XECa0cDfaJ8@?^B% zm;Xa6A6GM}U@5LVO1ARp7u9fl4wU7HVOHMVlf1fWG;ENG+>q$fLhUq#7H8MT$zZIL zNt&pg(2|*}TgN82Uxh2HnsW#pdXd159a_GWmS$9nOKmiV#0FQalCaTiQNEu_~s_sNYciwS>r6x6wr>L_x;G{r7xtFGmx}Lmma;gcgWtS zIGvnB_xNq2fg&xtX`w|zDfeoFXLlNYyq1dp?-?Euq8)=bIX1JzZk-^ivx-0(E23A& zC3Im%ksbp#dI6p2f7!Ov&8_|oz17Lo<>w@d-BoPa(q*m6K%y$xaFWoD%+WGQD5v9K zWkO+c5#FuLPb3-JNel-;ioB!bgx-amy2QC%xK-k&QfL_DP$IZIVla zQuReYA-c2ta7_^TBpdNPqO9s8XL|!`;z@K zeF1YT!?g|(`xI5a6}a$EShjQ7KAoG3@wbonE}gY&*?U&YVtOuG9SGKc!X%{c2j_p0 z1EfLXaAH%3$cpi5dH}rnK3Y4E54LhkTiPI;f0XI?fILE}PM%emddjPYU4F`3K|Som zAU;Fm(mR66xRD2Bm@a@JfpK;1X~FEzMsm(L%vkH2mo`BCGnqIWk#3&WS+mqefI_!jjAJjme>N)$kT4MUAfSu20L=X-p6 zYyo-YoTVK_tu^R%XQ}LWn;D>?3#L6%+w5)XRv~CtE&+U7AyTfF$m9Cas(ph$&g!gz zcTu!a zi&wA!gVHE-yix4Ab$NlLT!RkK0-t$VWZB8@#DDrlPA$rvx6#Ai#S94>ThU0XMt{{Y z?aa<6h{d#g<4pTJcELAFn;uYI!>t6$$z9U8Q(&e}7S+BTVjm}@k#=VD{^o2Tf zfnk?()SA=+Ru9J4p}ZFUYS5won<|szB(Z(f5hrWXHMMm(7JiDGlWvQ&3iF|$x4$wu zo%Kd4YZsz!#wG%y}FJfCy zMkqvNV~b>yewt$aXR1VD7R`z+Zrm7iEExK~?I%hj?|@NGrjIa5sPhP^TifE)Oj_ob zRPPe*MbxgXj?w%*S#7+Eo%mq>YDzWkiQ0goRq?SCdZ^UM3R%rQ^uX@HV~$4WnS@8T zd?)lrjSd7=4rUgr6-la4*`C|Qfy=cp;$sfgu{o04W|xUyC5~JA$9hK-YkX~-hw?^e zd#b9A*g&aY+gnf`?f!+aIrm>_N^cBlrzy)vo9m7-E}|8XeTQ?7`YQm{?Pk1>=r zn60SzPgQ_GH75Jk)Tv?aK7h}uDP*kuK5+Z(&6r^0@9WlmPgTcV;9Xz;6uCx{a`rAP zP1flT?1lOVsDAtceyOv_?1LKp1MrsD{<#faS>}zRT~M)8ZUz&hiJz^gwr2e{MWnB; zU-&cB+RC?kuQ(l=7Zzb!HJk)7qBTAmYiw*2eS$FIZz=;tRojCT7~>uDos^VfG9wz( zO%~feO&6eZ3TxPOwy=b?fnPfF9uW*bwItkx=e^>dajR!afV$iTL$1i{^pd-Cv7YG_#fs~UTpu@L64)qUs!lvbv_rtsVG;vc8EQmpVvEr+-UzU zC@{$Uu28QKdD))SUkgki!mhQ`V_?Vx-+67RYQCAzM!pS>2%7+KQZo^_9Hk zDkWX<$CTq~lLKMP;*T#bb(!_jwrb;Uzx--Kx3dP|21fK4+=R z+#3Igf^Z~`v!w3jfs+6Akd?K%^w5RXK0SZXMFNeN+)*N9`PmP}v3m6a3(q_~zqhMo zaiYuCe8+2k%$vEumtCZC^+}7phOV--5?f8VD_>EV6OA{^-?HbI_FlY0bvRkS7zbevR8n0wL zS6mxjGhuH{;r0H!-a^M;o_F|=7VnUBy-TtmpJ5{wx^KR!z}HbdMihd9-q z7LuQzXT{r(4VpB&;i3~-glH?gmbJD(6idd-7UX>GZ>%SiT1Z-0N@bqGuR=I}YSa z#_ChfqKbM=j*Nu{nt`VQ>@50BRbdEgQgxy3m3y{EMJnJWgIP2Bq@R(#f5K~g5WEqH>dTlDq=m4cvTXjQSMW!%L-K0 z9u4oHNZdy4vy>P>tLl~ zVrSJTP1u$rs5->GoN&ENU!FawQrAAG047td6|$-|B)clF+zZm1m#~mh{n_8@L91@- z@jsUP_I)sJIcK<4@vnu=_f!A;WDj_0l6vV7hx{iU-d1{NXg<@AsTF73;}l^^BcFUG zmtYGx#xKrcIcl?7NS#kPen!X4$L7-K8xl7PIf;lTn)X#9b+&GmxbAq7%gA&_@tAPO zqVjyJ{Z(eEl5Kt?tGPL#+#GyMUGtcM-OtCP;ggj@1Sg_|l+vafA%Q=K->Z;dYO0+wyX>OVPHb#U#E)jN3*7RIe6{75Q0Ax>P zV^!ppE*4L=iAl)vjpJa=#I~{}zOXeL)er?Rh5q-gL6%x=?y(o+)<_-2E`Z4w*HjIQ6miKsuU?N3wzjF-zi zE<*-ePE4g)p>KC5=+W2(pw*!SmFHl0%k_2t(Lbe{1lwrIJ)qI>3bs)6kEd0`rXS#5 z1;82VVNd>nMacT}|1^A7>%syYWg>se(9BsF9JcI(lT58o3{bK@Z)HII5wMs`6~S05 z>l|JPnP(DUGSaP{buyqQLdD#d%_7gFIPOFj4bJ_P<3_+dD$I;cLLnTKGC`$1-u76w z?f43E+GI3SrBNZCck&m}Gv=Zne9S+37aL66Pr?VRP4KXba%%SwR>UH7W{DCooo%h4 zu*a;qlmkJ@=*6w9Cc(`c6!RDP{5NzQ=EqrGxjnKJv`y&`k9 zY78w~U2@kImri21uSW@&w82*Sc10AnnAhx_ILn#jRrIn&RQylE5%EW*zRRt`co2`u zc3ri9YFs&I1-ojKONWbj0Zd>SYnH7rTXa#B@hDKlv`he|8-w;j6vshKY_lyjqM>7m z^7Tr^$ZOun0PJ`+XsJfdF<;5Hr>ZV`vbI0p+V3BJp}MK4S!tK|nX0zK8-p<$HaDd) z6BY5qthS#Y!vStDfAbWhX(mqxKC3t>vjr_evn*Of8J(}4xd2X>kd%v(wcSMP`-Nax z!(s=b>Wz;nBkGO4{~8^$-c`)aMcQQ|%zI5c3$Q2Dtk&umJdUlt)bjmjC+TIi3T8Lh zrYASpY}^=1bd6n0v76rrm10jY^#KgSN`A>$z0FyS&=yiCiI<-;dQi^4420wwM}rHcb&yM7z^>}e!4EtNLuOfTUp zy@le>UTOD%%gE^dk!r-t5U}3 zcB})Kjz{C*L9iR7IBW>RA_Wgc!by&RM8yw6e&g{x(iK4NgD(vkFSi~cldzR4PL6VL@B_Y;T< zSmQ8jF`0p0n0icLd@g7vmw?U^fxgF$2s+A34WslZ=nR7^F0sJPIP1!;lH`-yBOniY zNq~AHT7LB4FGPNXPuI1#K=;Fpo5Bmaa^H8~KBKYU-&oLm?pxDj?DrDVuGw;>%EvoG zWgpulod-3jtx#pC-nigebzL%|uP-bepTE7ip2WO`uhrPxSL@D9Ygw2W1&{_^=V!6z zXH|_POJ(;=L^!ikt~+m@{%U1#jup3MMHYJNZwO^|8+nbKE=-=j(tfVnaaJIu?u$Q} z5B>hO7#D`wH|WsViNu-*G;y~zd(TS8?EEyDU7wZS9MtLd!;mkg!SSczOEl?o==NNH z@erQ+B&R%X|3irHrHEisTXq%no!rnWbPG;Iq7<@V=n%pTuj@PXiErO*0))Wp=Su|g^-b2lfwM;?t3 zg7x^w;ax^6&AsNTbNB5RS(n=c$rhetSYg$EjlPP{{jS3bC6B8E8sDHfg#W9*%4!Xhh$A!D)?UQ0)_U(o1m zbWi^$7Paxj)(j66q{eVd+UdV-^*`H6tK)TsJn2k1ee(}nalmt-_V@5$g@xI;MaG5U z^{3Ev@w0A*d_zT-!A1BtB={hF9?rac$iPHF`=EE*)`aKVxeKy6;R&a5H=6!p`c*?( zl)irZy!5#uQrFESbldB!Xo8=(OU+-vVcPG6-r+^v3gfx?{@d*NJV?8-m4?2Iq(ktJ zdgw6^h1(QE4I+LfT`{2q@plP=YV}U>!!Qc4>n+YdU9p&Qvry+h(LUEqp@}0c?G!fv z9v5Z4APBB$?2{9Z)wT8z?LNq613{{Rp?53pNY|*QX`K_trv5WH3oQ#hTC&Lg`j65!7p!w%O6DGhd@ql3+tNZAn!I%3t@fBLm&;kAEQ zAmW4L!@_q#?uA_?B87WJwP-1C{$-^&j2K9&(NfUNI`QP{^nmkV8ab@n4Nr~ab!%wo}NzY z8j7OVeGcndZfKI`g^ycSYj}&rI>qO#ZY=WAxoBfkDlCGIPOB}dMOC>IZziM!tLkEO zh!EJbX>7BvsjU<%%dGk2CD!P&;K%b|MM3bSoxq2wHD+H}jw(99Yh5v52c=rX{%sTp zc;W(0Eo|9q;G-XW4+^wbVn{3li9~F!ez=!prBv(cQiWtg(W4~A5`X0_I%sh5Q0vrs z`5*%S#?K&w*x))$6UyG+lxMlZ(LxS;ZnryWP(pfti|-eKoe7E`LRNfkPkC@X^OHo* zilPtj&@1Iz3oI%^3HmRyO{Ekj#$E1ECau3(z2b?3wann( zB7#Fv!a4}Yahu|=rT;=%S(E@XpP!sYILn4suq5e%|_#5sQX)0b6PG89I7u}dj^ z;^z!bVISI3@AX|TPy@c}*J>B>TVWBHnYI%A6b+ zIheZMhk%{0q=ql_dnso}G62ARrd5x1$lfacC)D#onxCsYBiXgczb$uu(NBWZVYVYU zB$Zf_)?hBz?iaH*4Lk?B-#1>ZMAZ1dFS;{8QYJ>Gur4)silv0kwkktT>cYX|d;*>4UpmbB+Pv=5Luras;u zZYUjC?@^Pv`Aox5)gxMf7*Z0+!e$Z>n+9Tn^`|_LGbzSg=aEOYk?`UFy*(Ou{`coe zilI#!Y%+8g^b!h+3C^?Vx>pAMM;LVa=2h={U5cv)mKl1DZs~8Pvu664ys6Usy@7@0 z?9Bq@pGo}^WI4DpZF?Mb;pneZLu*kO<jySPtQW^CP#vb$=ExKhYS*IGmVh*4abt@0odds zWADM$jUo0s-MGRevS5Wmi);?-8p$6n{CEN!DcmejN3vXPe55H8b75s@Ui4AA1Tf6(6R#W;V|W$`E3N?D-2 zWq+@=I`^QP;Q>#qd*Eu%x4+z>Ziu2KeZ$ZR^m{vOzc1Wx6U9D7zwNoc@qS1wEj-Ua z-2|qrdF$=8HV%;hrhO54>r;vc!OT&q7IK8_z>gta^pS-n4eQph!I%+3Ift{8C>okE zLjJfLuKov$;;d@-u&cytSJdWWur6YfnUce5x#LWq^lGyRazus3@B4}0$N7E8NFsO! zwW6*iOm@(zR!>p6@-Rb$td)N{lP&utJ2XWSC!@yTxa;fkg=pcNt<4k0chjeR0teR@FbbBi?|#KE{c}H(B9KunG#U|OQu?JHtCyfz*WzEs@L9Pl zpFD(0+`>$}QgjbPa5|?OBnL9KKE+W@Ndsjz$kPo<9FSF;oSoT;SQN(!V%$Z*KD79s zbIr8eF|NyZKuGrfD3p?jCXyo6XRz#{WVZ>suqEq@@*+}sK1u$*8%cb*n|9{R_<*CO zrDa-Zs{eg+{*6+bzzAHY6vHYfn+*i}s!2g7`XT_Lvs%zUelR-?sU}!eN;}_NhUSx; z-`>=-6_d@Y8j+dxgA(rgIENOIOgF-SrGa`>m(IB(GJ zo8C8c#|e7y56Q-)VZaSE)d6BOC)VEl;E;GB4Ax_l{R*JAUDJ9sWfL zg$OLSkC#;v8U#V;&C8<ce+GhOGnv%~k=Is2CHd6G*${lq zvJ2Cz{&3bj3npz67o=A~?=$;A2hmYZ+c44vCf}CHvuSqkGc+v@0IMBuI87IAHgtS~ z22@kQokIN@uq}W5Vkn$idU5BzoU1g+arm0m+$8^|EWS|`lETrdTlfO4qI`yxUpNtP zHnxngL;`chF%y+s_CjlK>F8(*yKIsFXCxY874l*E^~=h&cKzOhC9CPb(on+wl^GE*O@j5Cb4HZHFyVNJQ6lwc0R8 zZ#X_>W%`hK=(-K*VJ>2nrXjQsM7!b9lzFm+vPG`t>Cb7k+<*8>lKAjb?9Wfo!C;?L z7!RySvb@Py)BUPu4#%V0-kBxCwJ}&NeA9MeQtRJb_&SLAz^Y)IGCTj}l`7TJ7s1h@ z1RYfhHEGpszo)mAu^?=`6C%?oc6u&W+ElpHb~iZ5+Ol(@-WPFxJjhDW7#?+w`~ug5 zU^z?_IUks7U5QKBI@z=&e?SpK=%k+s{yH$X z9MAIxmUJ}(+plI#g}Dlj=TRBxOJBZr?kP@x)x+v?;$*zxM=2M3ZU3yMs|9~H>;*cr z^X|nUGJvKH{AMVVr{Y+nj85u9MFg)hUFtZ{1Q((_)53bJ&O6anl2Q{Ok0Pi&gJY=f zU{g3LosaA@DCEm-D2@?%S3^cACcXHxrpTe11m<8mPT!zfaGN*R^(|V~wpU;w1uQb( zp?<<$eX*rgun7zSr8$>GoK$m1H1 zY94%=UBW0&1D>GtyJ69t@=H63)|`kE)q6fDS_846uJxWxFBL5JPq|xW`zA_o?4pFa zbAkwwK4n~v%kn7GhD_H=Nmi92nS?|_nuy4CfLmzqYSCT(EJJ3cBr_>__z0}MwQO?U zA5zuWHP-nHE+heT1rHS5I~X9@I|BMb3dHxHZgcFnJ2|hUdbp`C1gdkJrR_sMj{?h0 z?TfopgnzN|Yo5RS6%-hrl-cj!BCU3YPU=&9z6=m;Rw@D5=>Qp&{F1{CRtBx>m3QKs z+(^Ch@Xx!YYj#<5*8h)ZMPOX&yuip(5DI4rZK&ztwLe*s zzchia(r6|o4v5zRbWu(RQY#a(a+Ou^m^nB3%PTBt>9k}rTS8Dk8x~*7Z%7zyiKF9B zblVC;PyQ`)W_F>Uaovp#Lgc$kqOfke=o>b$q>7Ls*sVTBtw;e(0E1wn`;oDWO2UuQ zuzdU6>_*BRx*apIgcz$~L2c(JBFYQw3(f-33v6v?%*RpWrUiCm=&fa3qA9|Z7&^M% zXoKM8oW7GW>$%zcnWI6lgSDSbf2YfB?S=fcwY?>gV`vrJFR|D&H$VeO?aeV#f7#LM zKMI&1TMkpWKGs#g4N&fEk^uC9Yhu>w#>4LS&XIYyD&DQEcZ>Jkx_!51-Yu7Ri}c;< zf48FEttotMz3UqMW%cXFcPs1N>Hw^^C|*WDFAy?PH<^)mKk?K1TbhBxUe~~3uYz|A z@^0n4TPgV382l-d$Ofk9^jSHh%0Ej(flYoS#_qyw<^O`+@#(t0CM-lA7OCKs)3N~V z9<@$=o3&JhQC60kY3e9BZ*y=gZ6&Aw!YqrD(MG_gkha|#!$NZ;Ma}dRa}z~H*@}Sg z2sOX`=&LNhu47R9xyyf6R;?}M#)9hvs5=j7ZH}W?lk3;P>UoTZKTwh;x$TgaR zSj>brnG4YlCS||}L$9_a02P}1k9T{Hd}sZqnuSGU*MQszyqq_SN50(PJcgP7 zM5iX9K!!moEiG`FQKR>x=SU6TvbUv!p?I)=(8e`J8zLAKZ6QOPs?VLV-Y7nv?tVtO zu4{Z__~Z%V?@Ke~PgC!{m#S0m)mzfTkvozkkL^zf-OLaJC|f{O`DRVC>wA1PK@Tae zZ*S>xLy&IwdW1z+ab}N7uHJcP7>Jcc`od;C3z;RHuF{u$X82>GiPk1ep>NlB7x5U^ zH=OT$@W6}n^$6rmbj04XB-P&a=-zPTO~s?tdzr_6Ly^Mk}Scz*BXb z^z8UqDu{`PbJLM*>C=d}&80Y-!>wS}ZR#Pf-P0qnf$zo8EL}AS=X1G37_?){lKs!j z@e$B#T*FGq-Fbx1iC(i*e(j@?C7~-CN9Ts$1Yny^p0BEcl|&e!nK%4zry- zAU50VyJrI3;5SQ~$+x{Vy`U1kW@j}_na0oT6RkYdQkbaH?wJvlHSi2i6Fo%tSO_2#a}(IXs5(oo3gm_qcl%${iQ;+b@0Hic*5 zhMZJ1!@%nuqY)%~wk3e^5b71a#OCgMZHqHg%-}GgUP9V`*Kecs_}nsN!Ye5nu?}RK z@@p?Kf>|i%QiOj$R@v0cow+uTEid`?`IT7TTF#!U?7AeaJT`^Wu`V;Ygj~+X z30oBa*9YRj-Tp;u`Vcg*+(351S1~{O!bo~TR|!A^qZ9FyZCbY^`L4x|GZBRyq50nx zvQSqiDbkiXL~>t_VqN7J<__XE2|!KX-U(B9Xg2}h&u!@?UkwBjeMPrpFFoF;A=hu9 zL~uxiqZ?{=?)NmFH@FT*S3=~l(Uu-G9!?+LgKwie^fjz=0B8wVhHIdps|mr$eNjA% zF%`xGLIRZ-XVU6^ycW93P`Vk(hYaMj-ocn<1J15m2Jwg>2_P1G_=wc2r{s53<6kj< zO0k3L=}8KxAg}Q5TQaP7w&pd77fPh+1aDnzTJRyCtW>0APJGI9-r--#JHjcxHd&2C?n;5ulebp`Kbc zAurEWk!?qog~EZk7%o|x{Ujs8Fd!_r-_#B7{g9D>EkmB$?He5xrDqHB+yX`iqn;e_ z0)&1iGw_sP`7vXOJh-^EE&j&D^^K8r-h3o=`(tBoNmnQE(rb#_&ws9b!ydV|_a3h! z4EavfJGgx#p!nn3HLnmoX;POMUKbw)!D!&+=ZG0BHU*dVmV(9B3Z6G#65il1ddB`5 zkh`v^4Z$OVbsQkx5&b_jK>pURCz07I!^qq>28eSnCQ1sf(NBaxs5RsXdtTskUKB*h zq>bR10`sB#I7TOpR($&aLJ=O@gxnzifxAnmJO30YmqD=n>WX3*G;eW z0s8&E{}OuYh|8MRxV00&XC`*-Zvt-Ms`42D#>Q+{DpJl9h=azLs2LSc(l4wD`(D0M z+4@YonoFnqWizo!ue3)+_gN_0{~k;$@D?)|<82gexSzVKtL+-K*5YmF1ow)!es2BtfoaeMv+!A5 zpTv##a)Em9-ZG%u|IT&yd;JBd1j<*|e*3Y{KMA!{#+H9+AAx3UM^Ek;Et9Q@YHvc3 zDf$=bizR^AboIH2U_5y&wq$^F`S_jB`Alm$I`q4(`APQ$L{bKxTKgn~L-OpDpQ0~B zp`Pl&Mkxe4>+ckqUO>#k{FwD7PgB&I6>OIT{_ATv*ykM?vX54XWV7A4hy6@bd5*Xz zs&T<6OVexWPy{RgVdznNw5Z4fc&@zoj+H(Pzrom6xcEZfq!if<EYVM~iZOaz&PL9Mep3GFP_y!1(mJT0hUY`Tu zim&pvasIvf7Npb{{{23Ytvo9JjRpPcx$KH`9gJ8z2S~azXP~#KdJ#WK|57ohw*(J+=xPaEL3m&8b^u*Mn5`Ry1ncbZ&)%cYLxo~ zR3u^RH2Ltxc`bQE(IK@nEr zqH`c*vB0CeX;Uo}>~N4g=EGo$ku+WGXJG})Q+D;A^fkb&9>jgxxPiwCfsU~Pyiey# z{Ka)>bqHI=Vf=jD#4h1Slq}Px>Q7U@y11ozn78Qr2q(P4PDh(aqSZP1!d@d=(g>X{ zBK@LB5L}ct__Q93?7Cws-yxtEr#kskpL=8Ond{wC{14yq)#y7w88}Q3c*bu!5+r!; z9t?=)#i*EK0x}|)gw=8rSUTzMX~!Z}Pi(AefyI4Sy+NYUZ6T#B0hT&~Tdtw$*=ZTJ*7FEk?rjF8TTOGUsjN=#k=m zGRb*eOtkEE5h@MkdVfj&;#0T&)hhJQx>?M3^l9ATtL&OZpDG>gXW?mWS2;-2T%?#-PcNNH_F&uj3_)$!cf?M_@0EXsQSP^OvVf*Egn{ekp)n<<36GYpo(GCr;c9E z#P_F4ovZ}&y`Omt3!JGj@!o(2dpOVlZ>~Rzz-K`e;LK`^F{4R~rp`Ca1przUv%U#d*>_bI{t(HQui67iwukvAWScQyH2~ zDRuj`6$N_a@cPrR2Knf#D-Il|Z{bc3Ftl*v-2378a8ToELXt4THV^7)g9A#pIrN62 z#t;9YFV(3V6D zZGPXUkvta%Dk0W(|CNt~-#Q{~bh>c&+@3p`)r!!<>Iu#JOMh%EJ)4(-`qcM1?B@}+Bck)I?;^WF{BE<%2q zhuI3^hVO+#bZOd?`Y~fpPlK% zIoa-b%>N?@!~dvD7HxtAhY!JRZnNBegB?V6ER-c{$&GyAU~sg&fd3uWb7JtY6ujIQ zX>JWvITY9T>aZ+RLGIkmgcsY z((I_`8}jf6=Hpc+1fv zy6lSdu5kPZvLRn>c~;vrRmcVQUm_rHlJF*>yy2WF&KekIR%!4*b#B^0-| zpiVUaF5IyZHo-(8B--M4?kV&a|J$=GwF*!W%qVgQI!->Bo8$NATuQT?zoxFDh|AwF zZkh<$XJTi?Ai%o)(Vat_FO@!)L@)VHRuB@#G8SeBSQ7&^nGav?y_Y?dn(>j(gTBjso4pPs9lESwq4&g@I69{ z&+q86<~P}uHcu_OjzvmymYU2V<)vpLh%$^om%w`=F>=}eXO$}4B&|pgE|qm^^(o2h zQnoX4&8HENPLH5_ixUn{R{?q9>#qT;uq9)2F-tp}A9Z9#7>1cK-P;d(7!6~|FD8XA zeuV$In}e<$0z)0Lx>5n@U_An?F-5{@HeUUrQN(KNL2N86H$At$b0uKG)fhzhGpBm) zKXs!4;5i1ibiN=g<`+_n!JX=w%AT8&Ou6HUwl4kis{h;l9mG@uJ=v#^f2|0)-ws|_ zHv^c}%EQyaptKMS-Dyx+ddsk~Qj&!=2Ay_IQ4!Wmg47x?2r18w-uASfpfgw86Z*+O zh1timTK~B7d|y)|Am-Z<0nB4M-o6B&N#g0+_5B z(?|Zw!ZB7$d}5ab*%QpT$_d3*`xBe6s>OUs7%R&0!RY$5bgs_F;lk-Eg>uvYGg@Rc z2u@;+bevOop4oX(@oGW)ct@I8XZnxtb-pO`!0K#Ly4wFg)9P+~Zr-x1oSa~FAZeln z$a(?)+ds(p06{aLoXAMpoCYpV6<_xZJQ#3H#qfQ63%cGi;qAYVkbJ4?6`@l71;@I7 zQbM11H9wocojLj4{vR+2nrslz7f3X;O|CcMEeWY#YXNr<8n?c%;_3O+L|4j~Zgwj^zBFM!NY`Blr|v z9qrH%wHCz?x-}5Ke9*bgslJ}pJ%5Elvj1#8y44)J)+v{>Ri; zM#a%|-Qq3@?j#|&26wmM1b2527Tkhc2o`*BcMa|kba3|ogS*Roo#(wj?pn~R2d2BL zx=x+i=j>fozv8e~F{CNTzQKd^dD)&;_6J{>%CfiQmRf|4y%x*v@78 zZ&f3g&j9Q3l>(@7CumJv9f$&rkj|>B>Bh&^Ote0zQC{5PI@HG3BoEIPzsY^dh*Dgt zTS5$|23?ZOvdZZIp)C(wTkVriWT^eE(^-x47!zb4VX!&)I4uJL3&mz*c^RhfF*s+( z`WGkP)U~A+G9P}r&Ix6gG~M|8{WPjvK;Xk)blGnz)7iYJw(}%1bIBX;YZ-^jX0TlW zd0yzdn_wU}H5Jj+iUNMK^C89@FY&qFD??RHP>kJM1TmH_A+7GTnn-gI*Z%wC!8t&ZrqpTKEhJ#Qw+~D|R~y^Zd)gx8LxLd%3zoyUS~?ew0p*o>z-I zdEUbB=Zoy7Epyx=;cL4KLEe}`mO zI~~`^6H&i>#jpap8C|bVJneuu%i?}J6ISChHCGt}h*DS++b`_AAMCqjAWOjL zb;0&qb}8e!6ON>oy=9bE7@I`k0CInP`u4O!If-gWqcHpDcnH?#GQ~bsR>TB1y6(?lg@P&! z4xJk~UymyGCCUYVE&uAj4W_aDnSM#&b7UIaIyh`-rKWeI07$?Q)e0kT$i?-o0lYyqq(vqa99)PxQ5y2#$|^AI+_cmkqW6xB2OOlk?NMh zn40P}=*G{lERk4V*+$y8I&?(t8G~&5MXI7Abi~;E3^i68P?XkQ`+J0pXp1MWhwo!y ztfLp+n&u#Do(yb6LOo7G>DX^j2us-7WyygraQvgcQJ&jl8PJK!u220Z!q&m`Drj`K zaK_0J&-%~J=yZ|^r83&x!1rM#{`dW8)aUM4zxDso<;?-%JPo)>a8W`i+PiO{{{R0K z&6#4>HFv&7AJ4nQ9$s(+EJ|3zqdQZI!+R)UckKaW-p#N4?$v7Zgpdf$3ocT?xK@A= zF3z|3ZuRuTU-OSqHdxQ}DyBG38pZ=3UtyU8}`3d}u=o$$G-fACiDdq~Qro|YlUH&Rt^z0DJu>21nQFl^nqTC7U(F#xlBmTA6AbuOJ!zvd+rRfu z$%SW?3i3e2W6Z7h>i^1WoA8Js-GIvZC1>r;3F<)FVm#b`*9sCh_JOofC0>c&i@?P8 zQ%xPsF)+H+8LJtc$Zm^BxuMSvssSA0O4rKW?E6!tbIR{u{Z)?*yT4%1=tiXWO+_O# zyisjUyVLh7s6z=w2XS8l2v<_D-l9lW;@g%&U7dg%7Aczery3+}UUl05DPbe>eyt#}_X`D0@3`>&vYc9vbkeC}&r+wp=Pv#}Pr>A$H z*9D`f;BcEl@rcg}2>K}D56!AAqxiltR#X0NgThtF4XmfB@;eBT=YO4^?0om>YqK1- zKTC*o(X_8*u^82jH_4QT9^;`S*SL@1->R1>3S>nE&z7KPSb1y-fmpw{1uuED-T5j$ zNc|f$?<6U1GWCU&5&v9xzhbSwT+VhN1hFBBp_3z4#t$2;e2r&8Q^m@#-garyt^DsK10v(i0};Q*7==KEV9UsWay_3r+Oh4oTnF z#uQvKFl4kZlrPq7#6Je9M2EgFgb+SruHn9jcYR?{J6M2kEEfkjYC`xnX3kNyi#&U< zylUH92KS4*ko;FXds^5>LL8+@HCR2W&9yi{#u8!s9(zQQn)z=b|>I?p+3Vt@52c}_F38%T|C=Sm9fw_JI=#`|&a)2+6nxiGA!m};t$o}611 zUD^S(JCdGf0-`JP`gzyjlBEv34 zv)N9kEEdNrTDSJQL+FmvIAu;e6=li{Zzc0%5bGow;(XRfDs z(gB?Ql5>Tf72X%SLi(5GUWYgL3u}z)Po}Rr(RG=dRc9hEN-GtDyNWE85=>!HT9u-v z2w%RL4rnzPo{?SUB73Sj$`-^g`t~wF`5i79;yw5(E=y8Wq59Kfw*UpdoOZxYvSMTj z9o_b9q0H1kQDdU4w8OPLs*v!kTJrkh4h#Y@c>X|>ss4%wshOOPBd9amC46%p4^2quUM>UH({3Hc`&SEB@@yGpV zD&f;k@+FGC2q(dnU$&c*956SM{1Nr~WP7Lfj&>nyUCA331alaUrS;KElI=K&%;txaF6QdGg-Vk+r&-rC&AGO$wmeTca z$#Iov;nx`~e6#w8v!L4HA^I?!kyEhjY{=Wsh3o|?p9rS4W5|&!IW;8!#`)!fzJv@h zwtxqIN(e0HnQID6&U>TQ6(-%D9byeE!$lK&+Sq>_;bo#A_lz_hLM2V3-!*;Tv%fQ1Ga)}+#hPJ-FW zJ!D;g{BHPn1_#2Lc`jI%`}F0PD#AT&tA-;fR8sZR%8esN)}c!DnzSAgGeL?wyc=3m z*eSeb4cE0tO>pIO{2crCqtI-pa<(HozK&x7^XS{;DavcLUCDpx=8f8L!lfOU#%5S~ zAWo8eS5A;(Org0iaT2BjxO*ey`HPx+`JN}z=HG34x1ld2X^#;Bex8*7kgxyu5@CUE z#%t3Ywosk>#GK*k13*N2l2M-{_p2oo#sX z^nEK`>!2evtL-t=ew z46%O-t|b{(p6_ZI<)P^=%3Hr@oG<|jiEXOLP-Rl>efoVR3tR*B=7-fcx{oFYK8vRO zB7cj$ci~6?cjC4d_eVs`OsoG?ToX*66_l!&qHPbwTpZ5PGxgVSQguosYop~V^^e^}?Ap@N zNBEIw(?>v$7J1}Mn1l+6FUZUKzo58(uxwfz9r{YdSvL(uo$?Vr)&O4V?+Y2hzfI1c zd|;&&#`}`g8JbH}YQ3Y;xXkp_C5s!Rq}-%K(ZwZ;ug7FdW;QreSA06OBn=txrz(A6 zHA?I@BHs>LDXp)>53Q*@)uC}%P+}Wmx^G7K3AMl+c88mA3SwbE_l%#Oz`{kpNA$7P zoZCmp!uqNuvi5$ng<5N-CGZO49dZ``%j#HAz|Weyre}QGL32qpD!ri~>%txxWbiOD zcBt6K_a$s22UI;jzHI6mX_utd-ZS8ZoASKF<-@BcaeJWT^;y#S!JxY3Y=pE0Lx(j$ z0m~G=&Go~e{kV%(8PSH9k?fUFE3Da$qsow1_|I1lGKP|VfsPL@nB(XKG69$-+#1&%vR<%F!Vt&k13YQb`PdsIv(Re znnFNFzk{>;5)p6=vr#F+%GxCGqc>YZ^AjV@o1V`qX#^ssT`4wCF5yK&zg=J!dsOo9 z1dtcca#pa!o1Sv&KAGhIc)PD`>=dd?dAkY2Ei|n6Wvd^Gu-ci^*V)$NO?Ybs$PZay zkKT9^CWVmKKEWLgQeVVVLL?5@6`v3q);=IsN;Dkecnikov4$;wJXyo2;SuMe*$#kJ zDn-IsL{hoU9B>47tYQWjFGDK3Ebhx|64MR}+pT{{3b{hNe*;^IiM6{E4v|9iARNeE zdT`dnL@x}xU&JOb#bXo&%nCDA=1P0*$w)etJx;0!nr)94yXCS#Wg3-yQdREVKyhS^-#jKjr(5 z+>+=lSf(4V^I}m|Y#G(^L~aA0v?mLi=%31C2wb}ZWuqKup66wV0o-lUD>T>ug?R)}2n6q@g76fMeb{n?BUAN8{P}G!QONl9qQyTx<5Zy+ zzA3d%yqE7f(ZH-)sWvRXGK$A*y=-GXL9soZ;EH8bE1_DnOj$6W-_i96zaRNP z2Ww$OMI=h#vz`|8M@}>)Fi?#3!-w~Da$t0G>zllHl5Y_to!*FXQ%AfbMA(K4n`;Sd zc?T=W#_}w3Gk^zsSgswY@gry{#s@p)g`PrxN{>ftIMyOchNAXjjzVWuf} zS*Ss&WaE?l@Ea{7F8d-8)J#b01cFPF*Rb7J(zl%8azN9_Ewk42 zbGP)8v_af>+L_kNGFz@5mAa)KeMv~{m{A~5_cqxmxbtf+!`u$uRQJXoEVE4;(WTmw zxxmY#+@UDS6kAl0CW(<_^BLa6`>O_k9$uVr5G z=lNqr{Q$pSZ(S|~;g0WfyYG55Jd$78(DC$lWpZg-MmjMYA)TSN-W~gl+h zW9a97n>>xfRNdJEIh_+NTEN#)=Q) z&2*?5k5}qZ0(78}3c+M)mM^A)4m8RG4IYqUNR6+uzWlbf>1K}SZEb1MP@3dd4wo04 z-JHg&b%n;WV2t!SY|uQ29?Efz8PfFLtW0Bz(xD?F`2z1(i+?0#cRKKfx7o5K!L#kj zV*Qa}Hhea6MBDIU-X+IrC3AhY3Vz;esj*H4>4&c7h`5F`!=P0l8G$)%XR$H%u4Ex` zm=Xi$i$&vBq~Xm%aqfkeQ_)?s)%Uj?ts2F@L^kKfw3SzZw*8#WKjgd*oBoI@o0RN_ z*VtS1yaS26H2M>lyRr3+gHgGVHz=61UCYWBdg!YVaiH~+@|W#ns!LNycNt|m+I;~g*-#WqawSnlVq-|Tk33y>EovN16+xv;$j7@Y z(AnXW*4{J@sy)O`ab&ms5JJF^w*w43mv8aeIok5aufEkyF@Ib2nXZ`nzBr5{OZOio z^lh-VQi>0;VBALX;Z9Nv)r{ogFZyC)S78l50;6rnpoe%z&VrmTs&_QoO|8}Knf9j> z;QLPqE(XvJlfZZ++|LiC1t^rd{!*R9OIx>`_%Z~$-mZ1-y@?Khd zK>?Pz%N5G5r2?-lqFiCuN^~MHD^IZjZ3aKqiKk|9 ziAYXysQTAxr=ceuMOq46-xrkOb2^{*hvyF?n%QzL>$SNQXOs6bsAZOZy5X%E!O!68 zW2V{iW~jZsQ?{Jyr;~*Y=-fg^IgPt~NIiSL`zN6mw1WMS^>}ah{j=SMOZBJ`$>GcM zAxK%(17{GbGoQ7>cldbhi&0S#(cezeQS^BCpD>LG5-ee#8Kvu{NamhWL8d&VsfFJFt(b%m17g%t`kuE(T4L`(z`@S`47v-~-# zuauBcURkP1^?VZeoWs+XW}li-*)Rm0%*mX4Fs z>aADAH^@Ex7FzEe?{ifaTFC_y>hin$EpXawrk4X~R6KaB6|x8L{4V-(Z?Nd*AJ*W? zp!W^Z9PV;g{Us^-Li%)g_ zd|YcrKaZv8)7zt@J;*|u<~63$^~!_vcQqv)t*g^ju}+E1QGZ4haE ztnznZ)W7=jOJ=Ig@v4Ih$otdrb)k@i5`GKBnQF_ibpM-;_=Q*W8t+ zw;sej8jnTu52On|^7TQ_ye*B|c z3x)bE%B-#K!(DE;VQi!_bXF;R>xK6E5xUBTHGVl`JIg*R_2W`E)MV9i7y4qs$LZhY z|LPZGuuBH6z5@!?f!El?wMz)H(rZgQHZX3f0T`kvW|6lZlb8Go>6P?7KaJ|bx{O4ij;7k#FwvwAUwnNGiSF@N39>$~ZS5nK zed#39Eb{$!+6A0ZW_AJo9Yqm&w zfjMM*`|L-IN1Kg%Sh?8*LFavD7_(v1jJ8@t}XI6av+pBOSS z`cZ_PD2M4AabH2n@#i~}@}lOQ z6`%v%;F&J%==_w)<6vn`VMm!^LFr&e$_IM4@$6D5>G6abbWgt#UKrDW_LLlB0*Ys@ z!|*hSF5&VNF_&08LYa)*0j-G*=y5y96ihya8&Mw;&{xEso<#>;1f`^Xzy3ZMW=V3! zG9NjwC=r4yWN+!5ml0o0MSE$*O)l~*Vn_wkEYS|wbrZrx_he}6{L7z2`X`KEEefX6 ziSq-;3L~!=Bx>shc)A^w$AP9<-BuPVDG<2azAj4)Iw6UX#*`>8}L- zm-9qWdUoz|J*YYx=zMy3bA4?)Bcn{XO}10T586-2bFsgG#*MSda#+)V_7vupD+m4a zI$w3@F8AesZp2S$r-=0T#*2EF9#g6|6Q;SWOsN_+y;<|9P)oln;-(74@ZOFBqx0LDO)}U=`Zb_*o!@mC#l6z( zh2M+Br2jvQ!yRJ{wAGcyzU#NjFLob^BJ9J#a5tg|{?Vea{niMT;pqEws`?WqWM_Ir z&7!$i*QeeAz|fw#tdmuRUI{<9zw1X47$#{H9285&(y?|ewU%#P(GTtB1V$bul%xw^ z{){ii-}&zA#I))mg_87%2zUf?{)D6Od&*WNduI#hS9~@XA;JKz5=$d|Fe}EN{aktd zNinVP?UO20Ye{Q&CPhTdkqsM9B0Q1AXLww5jrtA|%L`ob=!lL?YeCm)+>D&vw^#Y! zG~IYP>3=$3HFEUaS%87K|C}rAZ~Pjyn_cYHTz=p@mW@E7cl$&T z#&-@6CW=LDaC>qOvPH;K(s6lrXn$1jLQnF7YrP8LyUpmyiT`Jv>(L|CoPS2Ah#5~1 zqLh&Ms+xLciR2m2GQ$9OdJ7Y;MF7l41YBb@08aISjy`1=KaKs7*$|g9#Tzz*DMY%5M5`ZBvF^RLm;vv^13nUVlLs5XdS_uvatYzBY&@XXzGU(AI}W@~ zSQ$5)0&B3Js&PH_t!)aOrt88x?9Mk5ERRgir&}`~*~IE9n)xV$Dv%zjY*LCx%Ct_h z#(AlD2JIBGu{;K>f@W+sdD&b#aI8|xys-)16xxZds%a*IUeJ#=Ia~qIs~DQ#=o|^f z>`9%AHFDMah13ND0O-tSIy@cZaTl;B%nNJd)}*LhJtMW<<52YT{-+h_XCKr;yN9lc z6&4#P?M(=$P}xh==eCj;qqV1fwwar(&9YA|=sF$jHpj#O+Hn~&=Jo~EPLSg!qRGky7R2-6`K^u$BW<>uj3$@x>9W{q~Aj^rq+nq)*F@t&wGu z6(?e3H~%<$Xk<%v_3LJb^85Q2++To|Z>-@)g|+pN?kP}Nro#Yt`TKD`~FZ_ zM+Q3RePLVlZOWMHo@LS?6Cbpyo6x-_K%hwYJF_f2XzQ+M1KUH=0ZOOcd}Z;RTpwxo zxnee2`SvhmiC3gkHn18VQ-<oFETeLh&*;ns|e&Fyr6(LDfl+rO|MfjJ%gTj ztNi}%&82!7<(Gbb&fEG@Hp}4h$K=%Fk&!^h^|^c>&bc^bt($-+A?0M|^1J<4CzAPc zR%%OSwY5b>px?k(_t^8EQ@9$T+&2G1qZ==xbR?%p)lu`^?5n;wUv@G}a5L^OLY8Ve zM4tLKm#XfNudU#yTqF&B)&?N{aNY(&r&y$QbL%GD`N1)b$qV^OjZJmggZ+CcEhnYG zbcO!4$U0NU&ui&zXs*fW==rrRvCgZQUkA%8^6)3V5sv*)voT-mO5C6P=BKk3TG+y8 z>Jo7y8xVX5^|nkeo>m0eV|E?;20>|e-OwJ|+SDCvrH=<6J_Z;jwycEoY|V7{H-4-N zmIuPjT6dXSuNuS3p%M>;j^!ZLM#KE&sTBdjL^S2RvbI2G*8CX3kspoK8Zox%av8z`;_O3Q~Lc>Ft0e)NmvtXqCX5$APPdE-&Qlbq+xB>nbJ?K=@Ix|Q(O7gs4DO;zpuYvt&b4T#VuK8_pE3EK|i!{$j7oxwQGhKmF7u+2j~FC>E?@Sxq9V9h+1D zYQKmNi+YWCOb~QPokO;u7t+WAY)8Ydg|r<4@Vx@yvf=-%xs9QW=OAHIEwq8{g9D_B%O`5KJ2CnRKlfvCE0r2(miOXA+1x}Z zoLfls@j^`y3L3@EfVHLoxYpPUdaj3%_SOgw?1-l1)|FLSXj9%VA?Re2$`>fvbaIw( zRBi+xX6_YZA1WMStZYg)H_bIl5Rq+H9rKm+yo&20>LSj1W2to5@YKH4q`rV?>=)Fgl-)MsL?g-xp#=>jT>cRu? z)QAoU*3fs`ocFZZT$Un?kf5D+M}hNw-N?XXbK%F=A=J7$f>*hLF~Q_*4HR!G-3QMp zOI5L`8J7?GN#E3_hlSG0st0+5@K-l*u351Dme%d(8ID7ox~Q4ZJpH`)m_P2=@s)z8T_tg* z^@mD~Vi!cB!Mr60=MTk7MQVJ2xoz{PKG+p|Tj%82|M#&iK<_(!SrbYt?_h+vdd_QG zufl3=@{VK{&v83Vv6p1naA`f{e%E-LJ#s_BB6e6lDfZbfLJ#<;rlK=Ppr%M>CaL)% zQ*-YD)}=C|FL%z9jWcjJ_aUi7Zc-L_)=0x6{Q~Y3Ke?cuZcqDpYu76DTf{5LmNaTa zZW`squGPWrWS;TBqf8j_9}c>-?a^X1pA-+E_q2m*+x40E?CLfi6jXO()s-0Ue1^m$$=K&#I z7`tXJfm$K7ltoSG&|qc>^lAaE@`R0HGhOL!qe3Puya#8+h@){|lq)vo^PT$Wip~21 z&)Cy~HH>++&8QB2q$6B2{#qf*c`Q56UJ4|6djYsl^l{zmKdKCA8|;`e_y=^kqX)wd z&y09LCPhlMV`D{+^8Y();Xz_W675sSGEGbSeA5-oXvl}%jkBVQE)vN%rR#izxX%i^ z;O33<2YNo6-IVMG$5dM>qplRkH-)W)zNv78R!RE4Ty5-!>I)y3O|4klGDY>}*9~b$ zshR?ZdY5~ManZ$UzLI^XvK1StKbBy)^jwQO?sgr?(DQ}k+k!hMB5#xa2Bq5IPZ@_= zjvQ1nZtG=GoSSmvZU@W(s)80Np>`fwOLpT9}%4#|0{*R)J-D~wq*r5 z^x+ronx(!~v`T;)_#4rPsvDiPTf0)NprPnZPB0M04Y22PzDNCOB5i|+H(>HXf9I~> zbEccN2N*aU+jL8~SBWPnd`Vt+L0w3ag7(^~PGZ+g(~Y@fF9h~Rcn@9IX+S_@=QB#G?o)okS!)X)u(;KjI|gxk6XMA8`W zSlETKL#04c01`WNrK2E^TET`iqUM&eD-J~Fiw00HcB*|GK*hTsV)edsJ1^t&Vpv;B z3M~$Kksv!UEj23m)?gRl_WNVfc=&a*23%1&64QtG1Fd-X)fJfs)!sgr>aCS@dZUfd z4~_BttAJlSjHU-3(l^R2Q zWQ!b)K=p?y5@J*^lv=+PTa_TMMp7h6{smzmf7$4nbyQ+w=Q^EH_JAw0xJNL&&_ReH zfF(0=i^ykgKxH<&Hrms;5PsyS^K-{3=9uMO8!=}bCDbfQ>)b@dGTr5LUQzY)fk{Pl z16>`CP{o&GZRC0WAruAVr0~B^EoTtDbj@#akKCD0|C;YLS4FBzq$+H{5sacK?eHpE zG8ei6dM4x4ltb3!2f2asvFOO%yb&%+Bn7>tl0`7~ThvSui{M9w`bzUMkiYiiAMci| zh%7e)HrNKfBJHXRkYwgh%$HqDinbaX!lFYq-c$B6nH-KfYKa)k{( zU#NWR-3$a&t@O(zoOCj(*G{0VGlVD#IIRgeWK8D5pwD(;*~FMH@v0Mj;gf;V`s`8M z+T~MgSai0VauvjwezAFNq9K=0Z2mEXFob9&DX-- zBpnb%iJ+0_nej-~nPYe&Ck<#XnY&r9)?5a}*UguJmu|$&q!kJv#$ZsU!W1z8sd1!? zkTFN%>Ac}M>DFS#jYQ32G=ojEJS)Bv_oY!?TuD0bw$276b69WcgRO^M&LBi!XHRRo zdYerXu(h={oxF|l^s)&KDJCW+b$*ahh_nRII;>lLRGV?><%KloyRePmCeT@BXgZ5uF~1_ zdgUp}O%jKo4IsaH9_KH?=E=>wiplaTe~g?Ccj4!Kc~!U5RgzBVI!zT<$S*Qj62gyJ zE$)KMqqxv?`>pwAIw1H{&2I1-Nph6hxniTy^fH4eZF^IfH9brWqulcZ0@11FA#>b1 zu?`ZH8l01F=~Z@YdxXeyZ5($=HFae?k!?;Jv@XX8&}DFqEPTluKR%HjY#fcv^k_{C zs~t2IjAgKQuDM{)Y#@uP-NMdZKA~QYb~mkm%l&JhKy*R~M1+E7R}c>Fc(1{|sp8Q5 zmplh$V&;YZn^3yc1GMLRa$s!EYoc={5k!V=V+L0OD2(xD+vc3@c}TR%IOzr6*5I73 z3!@|6pHX?E!Nl5~^i5;kQ|>&c$}216Ws=07WGpMOcskaYN^>+fh@D(=jRMS*2BePa zRhowcMrYLi1fZF}8j9b3d2>TK{E8}BS>c;>F!39$RaFLmR)XvTiw|C8k(-3o*TN4>l zm{=;X3!Wd)hoIkG!ve$;`JR5=E+uDPF}9I+ie4>qRNj5n@`$FG%%)#?9Xf`{93*qS zei&@zdZ^DG{zjXqA+U90?>DH>9{Ir`e2{1jt#EtdIr*yDv0@Q-G95yFWlBGk9O3f3;t!8>iy0b_a&qAyAOy?>L&_jkN! zZprvbwrmVGBfJ-A4A!L&CClwj2@hP>OtELGhy>Ohku}Or7)z$U2*Svx2G6fLsB%+sP7qptaTB&4OU9~j6HPmB0$%~3&~|}-z93Wi#$^TRUmkRT zog?Tl00xu8J<7t8cy8m59^!w0O;iOob^i}v5U9K${_kwn<9!3M^{-L@9rQI}Th1c^ z{p=ea!%_bA-Si<9kPQ8(S!U7Wkv0*?;t2GlQ@tkccV6uLJ9nY=ALNC?3e#!}A=1Hc z--HNa>qBSgzMunfggX3dnf%uSkMd)0Sz84$cIir`T4}}3k!aurTP!VG9u>vThgX#| z9_*~CR^%&l&b66HSwkLc$-*1H#GH6>UtLpxBkZzFAKK4POnx3e#|8dZ{Cb`_r~g$- z`m>RbjUdrP=mRBaD!VGbOJ7A7$BABjYDC=|riX0|H5S-~Ca&a@&TZC{Fpc@hkqUlf zPx&&5+TC={)v9uAR3(I6-hOzORP-QHaRZ#u{NI=Fia=D|MwN}Kt2c3& z46ZNG$Xn{Uh-n##Yj^$_eMb+Y2 zXY6#;%jrgb`Qq6+M%zm8YuvclaH3eX0IC-Y#C`vR9b5aUw;PFNwGWIzA@=H9`kDPL z-?yAdx0vl)7fioe)|D?wdNDztN?T2w&`H8HKH4GecFfM}(F~?PlO=Tp54!BLM1>Ka zN+;S9zd%uw20wF=>QN%UD0%W-#)1}Jh#u&{M|eFxK#@jrQ4Too@t+J9@_^EKV;Bth zFYqs};aw+sc>aYKtAS-;>%2o&j}H_(;B8snIyo#re3KjOVh z#=;>{Pt}9pTA{s=^AT%(UT2Hzl6+BzvhK`;D4cx_-3k?wIuBq`qc-Sw$Hr;RJL|tu zFV?8HD%F$<`qx|4lV*EfYyi`L_g9gCQFmWFfQU1%kw?ngrpRTzT3&!QaDH{|S6!tT zVXZGJ)vmKCtmne6z`*jK~9*2l_O5I?#h!2%`T9bS>;Us}j9 zCqrUsD1}qSitjp6{|yjVBgyJ$t()!PFI*5}Frx*mj9tj^3-03S&oO?GhUDZs+_1Q)Y1pwe;u3~tpP{y7 zq08Yd_|XA(#_PDK<&NLv347(XU&8`!xqbExz8B>v-b4h8qyx$<6#$DF6-9%Oc|#uj zjR9ge6^eIVrn~(1mf3i_=#ST&lKyqw{M(u?BpOH2MneXT#-ddnJOenAQ@5RicTVt} zNCBP^K0%R3iQfd>V>g?PmEke5G z(&qtUm6g%D@MZ3DrDez>xz4CgG^4Y$82Z+c612O*xmc1WZ!DN@29HZBdkqz4caTiJD66ZAj3OCb3QF$SOFwk7}1lI69I?NxBax#bqmEX@dqQREk6J)WF!4?bhjeo4t%B;Qq zyjrJXf#b=l?uTPVSf)^2640S?^O;FGBG2yB%;oT3b*g1DH8P!Vm3u9h^to99rnFMsh^P0Hk=PB*1PjhW08RL!t608Iy^D19S1i|%86@7| zaioqoHbNVrLvk!2axT5wmIYk0e;H8C1=iJLAJl|uKOGVOt;irn<6hM%s?gC0t&x z?A$fI|7!;Y%f;4D>RSEYaCu+G4!Kp%NCCXEKI*CwlFzGnk#<1ynG&bbKW7EXnHTjZ z(5JNaCbZDwj1EigwEv2|$5pr)oO$cuo?iT_zE#=cM+|X)Ca*C?K5u;?`clbXJtJLY zvG0Ck=(VQFJCE*d@Tsamq&@~PCWm-sc#z1nf=t!@$^hk}OS*sd5UoYIA7o@(*v%lK zYC61%5;T)}bK5j@Cr6o=zkb<*y(X~jREWJM11i7H&FCUmJCV2pmTbE{I?KJu1r}hs z+Xrhrg8e94q zp;}t&pzoe`O5>5ukO!XO$i(-+PjhPf9q<(G>8Ff_F3yFrf144`H zcUX*uIh5ZRw>trgkv(Qq7s9c^E2F3VV2J#vx6Siz1C@q_V|{U9^l7s9aw05=$Tbh2 zih;K-+cl6SG_p1R@hI-63!}bNYVzD|>NB;QbmN1h8kHSWfrZLz;!f?`9R7i*_?{l) zw9dhOG)LGMu^ZyQT_J|eh+H=(aMc3HYt*2HGm^$dOmwNhT1 zfEE-bs_v)!-nT|kPQkjp&)kV_9?7@6;~zjP?dfq&i`(6WVh0H`rBZDmc(1W03~l{f zI6!>vV`!cJDod+UZ5oj81S((LfatgdAcz0%i48OHBnKbO12?Um>VYu$pIgeOIR?8@ zI_=P2WT7+@BeJ>wo9IEq#gg6IU4r3$^&VUI<3EA_Bn-Qw-Do4 zfLok16s?5AE(Ysw_@|cLFqAl>kZ98zkiwCNM$Mhw1R7=CmCW`Buh@4UjJLfhw>9bw zzPZ}9kUkHEC-c26bTMBGdrkQ>DRSm-%r(9NRv$tA)TJf!o@XYyFLlrx++7s&+6|nM< zj&>)?b*l)KldMz6X>3gP_MW>{ZX4EhtGkP-5%@?+EG5KH%PpY+T^Mldk8J+xz!A9> zaPCJl{(!efp920o&A5iY(K-?3mmkV5q!=i}K{Ci;OIg4d+7I$28XluQd$_ z1wx0TPbM$Ub!+sGUC=@(wR#c#z4}Gv(bd0WIcW~yn@*&kfcg^T0i)ZE(sRlEy!$8M zjZ8V#ljPShTQglxanfpGL=8F{c>|n#o@I$w|G~F!(8zu%Nf)eUeUf71ENg%~BszeL z)s8E&Hu#aHx0I#AbF%76-xcrqCYG^5FV~myy0{#Wgm74ya1Pd1C?oIjK10gIYmeOX8Y77_AuV579Y+jy z3^SsntE~m|DXZs$3~oj8W?$^cigRf_z$dv**H#K38L=JV8#==v15!>p@5I}a@uWC| zfHZveG@jhB-#vGkym!v}twG7dIu*?=8izIlz=3ydhz&JMLYg z%>=9!UTbs1*Z|^Tzc^tC7vY~+7t>4TZWhFP0*=0K4GPDZoeC@EGW1@l91|T%6>hXS zC$e&Bg}cn0%?_1dWA7jV@VnR`5slGHbsd@UZ2{ZA7A_hKmjT< zIwWd30q!$s=xqQZjU(vILF@&5-(Zcr#8j<9*6Obb5>1LCNHwT7P>L^1q{3YL;eDgL zoD;+%%~Je)Ec6XE*BH;4qY+s6Vxf6}YAmj3QG4_)KW6~PD>I5~Q zn|_Z+?RaStQFt^3Z`)P0`xED7f**E-y@J?Gy;!@8-$ChSTA@Mz2}FiT^GT}Fb5rMV zP(z)zXu@b3(_<*W*9KGJPr(H)m=+`m1IVyV&$3PYA2yn(m1V5Pe(%??*~hCe16hLw z7NB@aEb3F_orF{p9qgQCCCPulKn<(=8PPRpTwHPwlUv#WAlA&}z0fAG4GV(S;OCi| zFnRO2+ncl*Q9ReEhu$aIIPv>_z$BWfQK~J<&SAl=bUf&@7zTvsyJPF> zMj=kZ#FmFi0e&22kTDI=R4M$s%dyO6K!))lJ*ctY?rRWf=1%xmGVG7U+w zma@sF2B0M9Gp0l&QS*C$oCvHXAN^vdHc@yx2RQt$kd`xnKD5vJld2IpFt`i#L>DgL zZyyhdF_?jODz&|A!5rzts;=fCCHPhWz+W5m>hL%@OzKly_x8H$wv_JFQL0&{`i7NcTjTM91kKg-;TK z`*LaQoCgNP(Y?pvEzg_~sN?NmOBXW4J$KT=8>92E5qkO9q^>dmu+RQT2lZ!Y)R9MR zC>JF!Xc})u+|V1d5n>Y`jZ`?X>>`h#g9XN0N0da$QQxJPll#Z=<_-!GO3bLyW>$;2Do z*1|uVw0jJaVpHd>)3&niD}zYR1eSY2gTL*OHNA<``^3z2BiJiJk_)utoDGDIBMxRX z?#31l^WucotHr0?Bc{GyWSsoWBUFgghu2*9=YHUtuh>#lx7dBQDwYy_4IoL}0N1En zh^$cnjU+X= zDVablftwNZ`o0frop$IEL+vF%0VU!Try2{qBP64;G zHDtu=9Jda#hkam(nPz9ER>;S~XzjnDzPx~T_W2*snaUgNke$6 z*;tRw=Wj${NiMXN^qvSEfM}8zQ2~JPcLZgf^>0NGfgo5fqHx2ncEisFCNB|zON%5b zxP!+(UWgZAh5v+1s<|0H_6aVLjzRBmL1m*~l)6g9gO7hfr362uUojFB_>ppgo#>-7 z*|wBz&&lhzh<2&Ul$u&`FPF*xBy?--9buSu=)yJcnq^uk8G`G;T0WB%D`xhMGuVld zZfcwnv6FoWzgkMF5`v?d^nXl!byyo;&~9`C@yX5M#X=P+Zav|#;N!Q#grI(+N(+TQq1QgwC# zGqvISNdu4UlZfptu}n#k3lnSv2Q9)*ze1}zj8}M88bAhNKp^M3xwbD;dIzsvqHb3K z-*=tVoy=a|O=sAXE~jk_lwHsDkTRnZjAydL6q3J*Qi~|TF<7Uj*SI`t4TQ5Bf3=2; zm0nNQC)e;k6O-kt8BhPX^A)pqn(O-e7kGBA<_T?}idYxf+Hd+D;~$Br%3HO;#`|C4 ze*V^C0f+u_;%twE>+bfmGw%y|8a-SCWX2daz>wl8UrDWf9>sZm3?T4LgsIW=-_hc) zNpkKSoA-kC%hotO!IW6vMl?0xHxhpK2dY1BXQaUKckuS7T8Hnn7mjrveRpE;9=|}m zQ30AmHK-Y`ShF;cCH`dfHlc`ZPTzLINP2f0UmdazMCa>&8ncxL$%{m+Oas}12m%u% zGPtg=;>M!I&k+k_jV98ERkpMQ;ic)f0*vR3Uf z&tltZsj*g*gYWH#zqUlkU;7Q_rJqxyRIi4gy&mpI{>=&Cn^U9;(fHg}H$j;=IO~8F zJG>tanC@!0wu!#Zcl|lzE4^#)PKEVMpl1A=x&+y1Gl4v4$Ue2*u#Yc226_&h{P2@G<4&YLmy8MloK+Qf(Ut^rHNC-LB{`rd_m0)V=}G+H zMQP)c^y*vf$CvqbTv1wSztC{`E*d%MUe%pfI8nIr@bLMb=SfVcWYTbW1b&!`(UCHP zv8k#EG6a~cyr?9Igt+|jxOjauCB-B%r1JT1aU+VK^t?ZGn|$cJ855h{?pbi{GCZm6 za{TRjR#6$VT8>fx#&>dFLuOjn)^{CWH`@bITTzlZL5rRmi{pz!pY^GYy2gUB2C&2$ z-V=7G5f+JQZD{s{9>9KNY?o`Wdnmie?n=Esa^<|~uor5I$?0(T<~DGZj)TdeA(PEq zxLH=n_qX!Ak`#?u!5~%F(|zac`Sq`DL@zS7-@1^7BZ(9T?Pg&SuR)*dM}(J4xG=-j zX~u8i=MIpD2oEeiHj`fXx)_O`(4iM(g9Ae?|K%GOFb;kQF7FFv-|{ikT<1(#(6l|BayFpoEIB5y4Sw9Yv>1=fqFw#o-v(k zrm|@)t{Q_v0nF?6?U-4pA-W1j7YxCoHxs7t-5XX!!nGVkoWzya(Hz*5;$!cqfa0ipWwKl6%RDWT> zlSB{@43(2HLz!CZR*G1FlD#;wG`0!aIyf7T*zcmC-p7`tK|g)7VNWEE`|F)qvR7?? zX;GA;RhUa2w7M7S`iXdOJ={Cx%TA#ys@Oa@Zl z03Ad{U=(+XY$VJ8xlCgVB@UKGa%6aC(>5&e@Aeyx{A3yy*B~qWD=hNqy(B_j`wyFX z*18ZXpJdTW#{*GIoh%UX73x&IRO0hVVeU!n{KMs8{7!Q%?;>86xk}10%V$&iN7QqH z4WM$Gg+`@+>C7>U%F0$rtuyjIB+4>l?uQ`D@`^WQf*$Xz2Soz7@hZ_hZ9R??aiE25 z+k{26L^#8#fA)Q0+F2qe2_qRAj)DOhqudx#2?oM49Rr20+6765lPahi=yP0YU0j;X z&k&fxqtUqhD}3O+#ct-sES^g7#|w^;1vy3>w9TkSDvi*QvSzyKW*Z@%gREx*R-kuk zd$K-~kqgriCH!Oz|EP9rMTS!)gCC>jId)@)zZ{g1;xrU>u&t2Z+;Den{Z2L4>i4JS z3r8znB53bD0MT@kG2O@f>}4QE#8kVS-f7#Fb6S<=TLg)*#V7BB`cevk56cq4naQ1G z$nH1iXqoUo8796nHasx23<>rKy*FA#AYKh}5J|Tv+ES~JL@A*-!8uc_w-#FTK22c= z#53U@Pgd)9O_c@jyzT#8QXQC~)&#ZCZVc{5(mRgTZj_rviUFi1NlR8eJk36wMUYU{ z+)5~;=2Ei}l z$zdxn6|dgy?^q>Y|I8`BzjYDlRwBVXYXxrj`gXM;Jp>q?%>15bCFYu;wzV8Le^sCzuY73vJvkb( zb&Hdis@P`L8qDhCzkD+P{oeq+OqO==w~XdLf@PMa39V=?3$efg0f$d7a&Vfazik9gdD+gVaF z@4W)&QHg!m2zLo>_)^mXUE?Z3t@_vN&df078=&p<1c|17KSWY8xWMSG&Z#i(+@5#5 zaWOtP$%f}H{EZJ%$NY2FHb+2dWaY|>v8ojB2gEx;!Lcv;2(Sz!YZhW) zx05k%lO4v`A7e9qisQuG^N5JNQe=6)k?0;}{0{nm7H5L^>+G8r{0_X?H~NX-w30}@ z6fmeV^0tJ1U^^hex~Jx(EGAxc!B>Vudsz8~%8OQ;LdB1N{3opx-y0vnjumg(I4XG^ z?12L7Wji_cK5Bf%Z8jwqG{ycJaF#BbVxv$=6%zfdu{J$$84Q&XoAHTtyhCoRJFNBq zT%7$j$&F<@fOuhUq$tv;xEg?gq+br$jG{#Is4<{m=SWZtXd}Au9NZWq4~-f__8dU{x_a{J{FVl>EYk}-w|xqi>z;pt3)#FivCng;>fo7>m+2cqO3zg{+;XKo}|#UwKhUtg*&ElMFw8LL*`{D4Wq^z&wjJRsk# zEq?iam>)wAWq!pE>$^9CKl+RmK;rNeU4PHmcU3VniS=PCLFR8c7gAn((T5(2rQfDx z5O=;mbU}OBNN*Ok^Q1$j)kr|A*Ya0d5HsPB=n$-J|K)`XA-S$ow7YrK%?XXr9@JwS zR|e+&0~=~ZA13HT#?@e53a2uy( zx}0c(I2O^SX{z=`x2-*@_eCuNFDro8sMgKK%xl9>FtX!kNi4I8kbeG4Nt9!EjIH01 z0m~8>&7zFtw^Pusy5+%2rp=<)J!l3s8qYDbRr3`us-q6x$1kqd!0Cdlg^HJ&f5Tue zvbt4TFO>hiw);4L41LkKtOG{N{u{TMP_0|O_ipTVP84fzPp4|GR|A-YOqd9m6+w@_ zYW}@BQlsG){uI!ssA+&y+K1eNk6`gWTcNyj7u@8oKn!MY#q$#S=uH z2-$wyHu=++8?AWb9SLyC#p`XS4DW)pt_PL5+QHl61J*AuN-ioNRXZeyoDmrt9H^^^ zgN9nT%4vjT`4)*D_jKSE4x=?SnOwy0N($#+Cn6Roete|vjN!`B+Do&~8jfW9V9NOM zz#{P~TOsCfI&RK~O^a`(c><{z=CLQ>2&y5exLja(_w10&U>KnOrqdQ&OxaDOtuZbzj2-^X6^TSN2;^coBlZZNUWZsChl<;uq<&uNgPyiBfDRMm8*w8BW8K{{P z@Trorfi=h3y1XG@|KOAgygey${Df7st&ZXKn#mELV-^AO~GEX~+#go;;bV zcg{QqFw!Xpx1C<7BLc1>6l%{aVxMin=kN?O8_ePdd%oCd_H5P8IXsgyu;0SZO1G;o zzN}vSk9#R{d_oL2F_|nP(<(~pix5rilIR~XU2u8rq?RRTv<OfyshI> zXY!;^dhF>dsbqf{5r`*-0e5y9$olqOxfj$c$*`47py~B#?abs9F1a&K+!w;Pv|pF9 z-pa~!EL5O19b3!K%b})sQ}r)X9p4)7|E>U?#`jah%CgCnZp-BxFYjSa)0h?yJpaM;4UI>B*CZSV9Y+U zRz*sA#DZ`#l)aupGA#q;+RN)L`!h#5I-|^a z!G%JuzCfs=$x@Ya!=>b~Mvb-8YjJ)giBP{J6_PzqNe71N3vDFX-O++4Fj-~T`IJKa z;T>|`%d+z=x61Nev}!&p{XkfwU< zew-c88navy(7wBshHO9jHcEYk?@gjj)uYNCu%9tzo5RGm#ss{TzCTi>o?Md3q*C)3 zq*k{ZZI1|IVdG^+(#6T|S+iX4S(xkS+@d0Vh5=y3DPHWu+C{O*@#j!(&l>7}PC)1w zZ*F5J50zb*YBuFOUo@95<~`%p(hBekHmkDH(H8n$?pi)k(~T)sMT=L`7LglaxOT$v zmzAN7nY3=AwKDZe6v7bgsQn0+CyF0uHqgriU3Q8_9d^?K`7|96U7z`daMa)gYHu`{ zZuKMfGCbI4p}Oj*5-sXsENJVvwJ_6P_jXz)^W~8^Wifxt46KydAW0YI6kJ@2&72j6 zt#T%42ci%QCabndl2l5AgcajNzi&K64o3f(7fSj4%&gG(nyA|oU5v)bX4v5CQPr8r z<_#V}dn0fN7vE_nnBHkQxG0>VbD8PuqmMbwBG)92A%&1AVjvkb_Efr&16ZH9F2c73 zXCKaRSqkJ92_PjmxOiT!?Z(7vtP?CidKUnc58WP2ezsSq9*pR zk*)>yzd>=RIV1054T3t-`Eu9L9KlXcz=e^vWD3_U=+Y_mbvLbiGMS9nDG21io=Ghfc>G zDHW^Mou&mZ9)T^-gwy2j)c8RE=Mc zjg1az-;$`jKM$@$^rD20KE4{BNQS%5))+F&6|Yg*B^}gEdxkrSB;}XQL)s$%h)K$T zB#ywiXy|cg=Jwv*Mx@u~E3?6z;=hMYo;>U*rbHgGH8_(2;GUx{qF`R=gil1>a)B_; z@?jCxE#Y0>w6)fcK4_3j16pI=G{=p+?p6EH@~DGk>m4g_V(%zo$lS$PXwT*J%*T)m zLexbEe%W}PAC~OQvm1gnT7TtxnuxqJUAqbx%8ppim%zD;#`JjOG_Bc0?|qayRg=FI zD+S!OJpcUb3m|Nu4Z5vNe593pny3KHtc02(2@suG{<}jFSSBqLZD!J2Fq&}6*a&D9 zf+;ughcQC2W;Ky$P&E1n(iJz9`-<9$_(bM8#CgY6KC4}(;pD=S4+sC{4+}X#&z4RR zh>Eyv2{Zc)x}R#ipvJh!>p}M!@!xE0R@!`nY#nc1{N4mj1zlQ&)74n`&6_&)vmk_c zt34U$=yNm(XpMEkW$~!@lgu$rj5lUokP2T3t;U;$vU{E>K&?ceX67KSm|*)!_9pB* z9NDCZURkC`95DTP=i7A*f$BD_h=KB==uDcaytX)e47e7H`0otr8%C@shX~2D= z3V#-XhR|c_{&+fRkS%MVl%`RV;ahx=JT(EASUyAYqsiX$)2`!`7`a>BzVe#Ccuej1 zhMVm>k4e=2U?!6vLtTmu@P}Ht5!!^We2KkH zS!-}`&eiH`0-`+xomv!vs!tJbePZwO?yW}zslN4-R8^rh2!f)#Xbzt6WS-(ic^5%} z)O0xbJ(3^EOFyGMeE{p8>3G#eHL5@}w><>Beoh4SSS?W(R(0gU?Bu-5@uuy$Hkc_n zpV{4l6Np0?0CO?Oskmq1t`NPTc$Cl4rS4>=%>iz58we6 z^lkNv=HXv+MZ-+jJ@t)gZob1Zm_i~Lfm6e@wOxR>9ryg>Bz)X8Vkets!r1XlJv`vm zv4sq1l}JBRxx_R=`X6CrT-cs;#k2bJ?kdZPQC$l*9ItzCNn#+5&b-g{44b!~i#KkZ zF2c}!Q<4ELO2iluYC=~jC8@~Nrd|9p42lvg$OSFvgCwArn_{`Ge3U(rWUC{v$)6U0 zCqRV|hzD)!y^zqpl}UOW8F3*xZi0i>H_}&{6b;MxFPHU=cM&p(>E_*&)V3Cd1IR@y4GNXhU<*L(UfB*sJ2*q$&SJfF#uT8zf2$r&mKvhY zE}?%!yC&C0;3=GOSrLd}sbloaoI3K&NI73NqDUB_h@+g{(NknNCq~c0f*$g=?+mOS z1zea^LRIagim4=*6j;!s+{h&d1bI3sg_uZI56%lyfPe)34O`-6Ip$7JG`r`Q6AS9F ze^~aV4(H1J%Wx36QVJm2c!5+|itT?brKQ|*1@)XS`N;KymcPG}VZF;PYRaD-6CI~p)$ zUV+^nBOvDEzU>(HrH7Md7CCN;CT3ka`d(td_r!a|r7I}CBOFb1wiNk6$1vu>TVgY1 zgne#B4$p^wtaVP%-VsB)&?9q99q~D&thj4tBkJK5gh%zT_yHaI#(jLDZ$$)b<@tbG zSyC8X5(Q~lX42=Y=BHhdszAUDA#unt_>I*!umB+4U@*ok;FKQ{SsFzvSYS>VaX+nt zrP6nBlx(Y8aEjtnt%-k9p@valUBksoA>}quzp!QDRM2oVknLL$gvdl9`8Jehi5@}r zn44dEw~)c~_d}6w=t3Q&HqNru{;rmod|jo5WX6PYM1hWsDnNwer6h_M zo1EX%xj{-{&ratl9Z*P9xK7wt?r&5?ZA3Azvy$-23MuGWoMi`E-7c z3wuUbzKrc1YIXkD1M|_}1NN%^8wm^^$~_mUZ@We=N6;#Z#it(oK6?0*6g%Ied-`rc z(eU{JRrRT^jI9H-ng#T@tpXK+yKw-57@W}`fGA|Hr4{1X_};cpwx^NhVvHg{ZhdV^ zuR!lfl{jP^NN=++n5ujv;C`E~GYV@T*@p*V0GGy_yo(dP?W=u9ns?8%WG_~+>Zf?r zGFI#D2w&6ToYL@Iq`02QGS=vD75l&r=~-;Kc#&4+PV6_MKh7XiK9}Je#>z~257<-i%1qFf7DRlU3|n~8-kw`PqO+n+&~1{0du7lRZw$KU zpk_VFAnxNfY&ICImQJkcL2GD%U2&IytZPdNq*VNdDT2x8bLX9-#~MLI&9heHws(Pl|B`z_dlM4t+3c- z1)4kH_$&NyQi)2aBgiJ&P)0Y_-uS=f_mo@ZwsMUj8(~j!&?_lRSZ@V+W5-C~<+Xn` zoIsO&P*ItU$Ru~a0Eo3n%39~A0e1h`B^?p{hlw-$s^L%Tl+&S)7M6|!X`RT>$fE#j zF#b${`@G+dQ98Yxo|U>e*KoDmY{<@q34j)Zrpcpbe0U*zjlgRd(#M!My}Mzlfx}m3 zucp?#8a&e4lb0UZw3VuZ?zBAru>C3D{j&;zaAn-#C@y3EF;mQHUr4IIm3}@ku_y?C zsIuF6A+gyV`aK#p@Z!eMjc>DdNBXIlu1nbQE;_0=8DK!Nx9rgUhSpU1-aO60bO6d4 zHrYHRnKG`Y@I-RS2RreFNTOb2y!rl45M~4Yc#lHi(_y=YXh=$)!(avEQ3^^CzlouQ z*2)Nk>4K4&(8hZiWV)omtGF4PUt;wNhZ}6jvBd_~l$|#ao<8ebCd9!LqL z+C`sy2G5fq6jeW7qds%N*SjWYa;|eLeIdpL%F?(FMeuug;`E59m`!hEvy%r}h*qh| zb8Tu%zEjcEd3+X~i~G6R+D%|86OenCDLP*<<-GRJg(G3eFMD?q>s+HhMmlM#^nLru zxD$L0E~Z)|uaq(te_)Am2k*2x&zQ(n0(;Lji}JrL2ICbLzh*smOO3-%02SX#Di!}w z$0H_|u~&6}CeIK5Whe$WQiF&5uoAaP0c6OG`l-;T)(V$YaqmCwgb>;Qw1^-DqubJG z1$9xBl$U!fc-Q(V7z@Z}=|^q*{@HniBsU~T!C~0RCRy!jEB?m*N2g%1PY3KUOlu%w zJ&Ux=l50An_K5iLn6U!upI0b~VTmPMy zsl^irTae}99BL+SfH1jbs8W*USle*+&no$SFRL10n(?qV2gN9D z0ULel#bp0k8%F^5gvGvKHBMs1uV;)11MqM&n)v0;Q2$O7Vs^aas{{z%SbeLEgxb^k zD9ruD!wYOvF;^mY4^tN4y(ji0MbgFVAnHJCTJSyQYWH_VAIcw~r`t%pn`-y$3Hqh} zMTq`yZ(9lK6n9H^qDfT5Wv+!cjNAgaGqWK%I!28zd2`kX&m@9-ES`KrthQHoEURL> z+@5no4xgp;&~t|thS%94?xYGfV5rGqJ({tBy3OQDIF{HL5&NWFu3LyG9gNp{pR`tV zn(i+(eZ&U=9Mw!=Z-=n!9j^}}5|~!7HEN7=6_7N;A1-kvN2@@$#$Amjaqe zVo#Mwn@yEUZ&Yt(6izv2JdhsHj?iA1|WT5+Wh6eiB`nz_NR#kUH`KRlL>0LO%8j|{=OeFz?$j>|6KxPpG7B+>mADfXAd${8fZAnD0=?$p0)GouTiGRTaR_Q!chm(p4 zc9Wy0`V=@e;fk@78J{Bm{paP4rDRdp$I;AxO8gQ%4&}OsqN)O|a696~&UH z^nhd>UKML5v+k^e{ieCj695ib`W&&BUiy?A!MkhaLr&jgP~66J}%C^h{zsUioHbI9Z7>5=HMNMdk zyaB}}SJ8}_5UGOK(f-*KGuq45#yg$d_YG zA)Nr)%iy!oi_e)}RP`XlK-AvxNY81ezWLhYx=se$*hFH3!SD0hOji1J9f^yLt9cp( zOO2}=B=&8|aRZ_G1|6AcnGNEew9o-%+iVRNs6`f{)%C_ql-DsrzZD3c`_EHjLr8DS zn{u_)1VVWxroDNby-&dS`!48Hq)K(wtz3*wL!SZIE#3EYp7 zVlYbC%o&)dCuP}QU|ICozT$+PAnY3zmM)?69{&h==&!OPXphV;H0Bf6I&R)K9}_BM zit~QW^ftK+uB^^sI<0`hu9i`k>FHiOs$4)7_{ricEcT-`wsahmRm*nB2em$-$K}iF z6rhi3UtjQ^a%we{v6&5hh(xM+W@U&N=6ldCf>$A%;iBdgzAy23*Yqph(3o9!B&)SAkeZE3fyMWss?f-heC zAboQ&__rP6co7UIRZNC5s1)X8CX<$q*Y)-?IJjS+x;py!735Fd!?kfC3>!-AZv^=N ze6a(>a`~baqm1_i*)ziruHyv$6;&!4V)3({g=$qDW^$inOk~SP87oM+dXNNsH4KMZ zuRQHO72qj#J|{ed68Q4BIkT;WDZs)Ad|BI&z$N)7S8O*f|7iB{d^HgC9T}@?tS!`) zig_?fH^1GxvkmS$(Zfo``x$L)6%1rWIT{jhb6tNs6cLPacL6&tPs?D9{%-hb!SuLx z(a7*90CqtTIQ=}dCf=p1FLJO7t(El`g4Tbd@A*K9DnJwHVf;Y~8VdAUdzmkL>4C2c zk}AqxlkAVq1k&thqT>rvdu%=R8P9D89S*gly~v2kU8A%5 zNi6JNhJ{lO7LtI%3CCwZo~nT6mE3oPGm~f3mPyW3l{Pbzl(?Bi&yLkkCEUCRO8ORVR~_=t+UlwNwJdo!Ih(SK*Up`FT;SjlwhiM+7}z zA4X11;(pA*n-}xZkirhuSZ^fSlCNyb&ou~pzQCFdNt(q)3zh}t5$x8MPz7DTy62ZX zNhs3UJBERp^SSlR&>ouSSUsKt#4_tUzgz6Q=-CBmUYx{@naw0&aPyaX26(rr{J8wP zu!E}1X?$&7iZc4j?q}VuhutkP56LL3Uwl>|6&CXG&(YZ8;|1*fKkz3^eR1c`;Ak;v zC*W|Pm`oz+kPpP}u8Rg-Lm%GYAWROnF!T6<8y0v$G`HTSWLHE zMYu5m-++$KBlN`xuW{tDjZLrpb2-H_;o!&bT)#VZ<@LJH54Z%&>~uP)H(mFxzIw6z z4R>wU9E=LX0drL){%n!cBX0#BbeJDzbXDrf)czetR%IuyvlMqCU{W=U=wl|K{e}4s(40k9ZhGt%9MN~q~xATbz07K@lAn`O!a}!kx%4hBO*P`cU7zd2nw7PlK4#l zrOw3dky86BTcbs3$@`)>E3XyKUl??l?3sy5S6MAq4*ih#f`73HeP5^XNr?=|rOGjW zmu^w)VAdb)1e7Taop%9cgYWzVWDVG&rUVN*zM$9~K)Wy-m<*qdQoqfmZ>H>m*wpQ$ zETLWC+FQt@<6y~i^DZE5FU)%z4&|fFTh??0?sK_JZb);V0OXj;_b$B=>vfGF6KmMb z4c7$V#T4N$A^63}pO2gyU)#)C zQbsyOK=+Ia9rYBg{7@)a?enqf5pHlFM-9l=yl9QyOB~B~pcA?C<=ae_aR!q~W$@GP zR^oUYq(n~l54nRwjB{|fm`xWj_ae+4cA4^Hss%YkblDNE{Jb;i{ZHG_4E*6qv(*Ko z9?a{8?wN2Wc5*&Y#7BIoa{lu zUN8dak&gA{_e}I>B_|-E8z{DKBqD>Wb_BCaaBytFttBTo% zI9#%HRB~y5tYZ6ZLpL|~uy6DH*KKox3!jdAq$LrINPH94ujOVOln+Yi$Su zBvP(cUVC`E%2Y?BJ^0cel9YKiVL33X4LjBo^KeMPFI;0n(3*m=Ldq;AS4fRzfbAla zJiGMV{3I|Pp!Tn~^NnQE&bk5L_K}0M*7eu@*JLH8In&`i9cS7cM)2-ZJ;8h~g)G)+ zkaodVsP!2E72*{?6rwPfxc%Na+2)h1f2kT^ub1)E@2PeT{t2QO>H6{hHdSdP1~}Oh zCNI5G`L5~yD~s2nP1*0E*PK@V?1Q_uems}YBB{)U!@pw@61zzq^hMC;(ZB=aUm(GV zHby$Pb+O)f`p+D~jqZ5*>y)?{8hG#L|MK!LZikw_l-5H)v$p%hNaGM+*K zWa>EO_@Y1AMaLV{De%;aT3z05z6s#}14UN(3Rc3#EE>KE6qmv=nR@wj7LjF6VRvoy zy;uvz%`~h3*>frP?H)`Mc9>_VOlTsGKAdAO&tSbcFrOrUhYBrVe?m6x^CPvb@*&Sz zX@g18YB|78k8~2(D1f?wutjmdh;Gh9)f*r z$Y(s|g?=Xy1G!R_;>D6nBpk9e9rY*}(r7KxCPHYauKTLFB=$A=X50lvq3I3MouSM^ z523+SaN|dfy~Vm^u+^a-sPeH8d5;TX8tt)BTN^wJec%1y9Gt(aR#HiGHUU}O`ST`( zOQf=L3f`0NA8t2WjIG>BUX+44n=3jATNg6)4v-U!pM~ge;c$rVC%pF2+zBbvdC(WU zWlm$d_Q8%apF_`OAw7-30#7Dju0VorTefxhOi&%!GQ_G8luQXc%?bt_1F_f`;h z^fr8hAUp?l4;@uWpx+37+vQfC{gsNxC#+is`vP)U*drcgW+TCmq76+M)$La{?+jEe zzI};p&r7j!LF$LuyW|Gqf63dmaUt2}0EdX>8L5;LP4Nl|B-tA9k=&{??brbrt+A8* zU8~68AuWnoMhZuO>L}ge+qlXl_6jj+mkN^dMuZoBC0+-U)P;i#fMq z=fQH`oDKI2mtbHoEuiXQNeTC!zT=MhBk8I$`Mgrmuul~iyCU0Ii0=rWp^SccpQje) zAx^_JZjvO_Ps|sAgn3`AFb{sexVxic)3Qlw%$e|>IP3#Ht3M`NQ|T|gT`HsjPn^_0 zi5tic`lQm{_)REpZplrP`$o$PVb+HrKaq>ZR4b>1zSBMq0YzN(H@7spL!-#x-)=_# z-uflkR2ME1tAsiAvTyjB<=LzjjrXU2wZ(|xUZ6%gKvay^>sE<|2;{LwNVf+7PGP{wMKQRLU_Xmk~qom#lz?VO_y&}1>rwM zoWc|LKBZ>9#LmkX8d3ePwHeii*k%zQ_T?g$Yi~*;8I*eC&c6LUAcz&o0OMC!4LKW z@q-tbHqgLx4R6bAqNH|s<-P1AR=LIS1I}(ALAsN0N~k~fal$3BU(_#~DSi#6r>nx@ z?G9=kYRx^eTtQmhGQeF?Fb=OGFIvd2i-}EP_^BzK^mVu-0Na6KK2l#9C@ZY6FgAv3 zPCKUELGW|CoA~GCOU8{-BMwT%ObRQk;>`a6mxyEQG^IH;smJP20shxvdfPi*UH>0y zJYy>7v{gvrh)+6@OySB!7pfKlD-(WN+Z`;v1zTtHw5gR|hPchhI+VhNzLJ>9I)>ff z(n&jiOY#Q$##l7)EeS_@8LIkw8HRYcmEF&o_R0%&-2+CS40*dL9SH2uE60K;rvLA_ zp>|?DO}QHNvY6O9#-FQ2y6+%NSM4%v7082XtV3Uw!~Dq{n4(-5@uW1r&fUSA0xVK0 zYV?JG6UH~1xMnu^la2MwrFcI9jaenlm`fwt5ll)Q|2<_b7N#Q&;7ooda8c=HP4bTZ z=8a&LPk#gcD$`Br!3|}(rZbi>kVz8-(kCZN@`m30+{%<#YVSs@(DXNz8jhFbV3ggm zen66*vH^$oa>VCP3O!%)SzyrvaP5tUWwLIXr4a3cAg~(F55mP@-UY!Avhm6{I}+9c zNxvC>M3cpt#U7JE;0!dlDJ5~1u0a;~_LN(${nH5Gf)7&B%rafwFu{@_?~PLey%}u-6Y+fn2Ob;h=Slz4wr2XyC0JKFA)Ns15h@0{TLza5KSPQ$t$i;=Xwdsr94+FNeV8TW zJ=xnQBgo)Vl$zlkCgt!gk%A-#>cR{IL#c|FvvGK+-~`}(AXHIgaDda?%gp^`3?X#G znROarrj|k!fX|OPwglEe5m#%IV8L|pgE79n!Ux7+mzaky$9|ZunAeS4tSx0{wKCt4 z2kIgozUY>Z&g&>Q9cuURfoj1_cxhY5RYdwJ?$LsHjz)6Jvz2V+E3+rI#x=n z1IEvk7+-{9r2j>KCFw$#L+{v9Nxub)WSK^iF>`-N1jqsqC@*;R(|aXP+VKpq0$;wv zDUGibyk(vEU3Aq5&R^OHuLbHNn*Y^B@J-vQnc#~js2IPx_FMzVmCm_`vRAzEhs*-P zui$e!{=WGTToE^Ko!~yJjUqxsZ#*c4k+x;uRR^D;2`v0#*JcKol?TWq$#G)Xr3(;T&FS)slEmtL;m?+7 zrHgWF%%I=*;1cQGw+e4OG=P#~C3Zlb@jw4`vpGA|3thH;tcM4R(Z&82$n5!=@8HPV zPA+rm1G~xYb>q%ogE3^quiT;Dk1p_?Qlt+O-zCtmuX+d%d?N!4_>{OX2xDuGnjQU8 z(nqwwE-UZ!Y`9!k9EjT=D!VrOfo#18wQ5fIbZH$c9I)^=EI$gOJa!{GJPfIvP!gWp zfM!3(HP}S=ab71s5=(5p@vk#mV=!5gvshGAMQKOR15uaTs;zzX@8_ysBB z=&hcHz$f3GeNITL1N#xxLDAI$Zf`p{#2@{J7V;AE?q9y}`Op+1i7CMJL1Y`iw1yJ2 zhGa@)rd-%=tn8TnNHYFAwZ?%{+N$@i7>u8>1V9BT#}ioi0byC~qE zyG4tcVK5hlt>wvbpCCy-rcDG`@5mvlDnuHI%hwg%21JWi+kN?0b#bZ7Ii|T)W|;<> zspX7ow6%W?DDM(YKu(OSmBpGykr$9{UdQ+-l}WIvXgm4qy?zI}gA-rE+h=$OX+sEh zEd}GM8vf5`?aTLxujx++wsBrFiDaJAo)gFUl1+cM1~hpt_9b9TDWN>-qvu2|CAh=$$*f2XJ-n0;x;EYD0U7? zJCaT^0P{-0{k#^QMKq)ZD(;JbNPQ6*38&{sixgbJtL9+M6WSNw?-Ds{C=MC+q*TFR znKXY_AdM*%yUi?96SX48kMD~Grx`;A7Xm+TSA=Z+TITdJ*}UeYNhnMgn!S4%2=3uu z7``|uG$k?~T4-7qh!x=Zj-8=}>J1c%<3psH!?VkA(QSDDExW@u&dryaBBVdm}*L-t#;JN_P--qBYqD(JA_bJuFj3 zzkr|h0{a z0)jW`hvRv@;TxSsi6~I^4P}%*F&N%K|7ep>_<;o4R=*Uf-`UcRx#?AB{^P&IDl!So zA7W94)-b8ICMN%f38?zLR#0gwAXMn4oQ z>UcsOrT?4AB~f2T$ILXWhkOZ>We5K#7_?GaIb~c^DXAo38cxP2hROv@(`2JzrIVn@!<9! zyIF{4?2HoWCI0uci4l30c*fVn%-FYWOoQX|v2IU}6;m7F6N(WMA$JfEnfY5l%(M%T zqGkqqCG(T*=o%z)xf7|#;b$#_azM!{3+DTNmqy`Dos z?}0ePcNqYN{bKRHqa4l&yZ+~L#dq0fmjr6HP|hvtcE*`wEZS+BU%Th|ms8mL~;ueUeA7r)m2lF}svH&+6= zd8y)KI8ug>RQExBq?>3nUgjAk+GBn0=0iw-1tOB8f&Z951Fu|rI-Zt|ObZWcD-4x~ z4_Ac4ijAcK;nIJ?RUjb71-G>sKS|AB-}`hON&Xh5dAi;>)YIfG|8e_S)caW5`&!qv zSse3-njO|-Ctf|sO}@Y5hg(KpDxC25u);4X`-ZoFr@nb)<|Tg=qTpJVX?XHYy`81_ z&Ld}u$qi3`SNwaV#z)hUtFEl+r#J=VVg63y2{=j2eHXRU;9d`f?+_`MJpTYhhY{(p zfxe$vxFgrN&5ljoy|to zIi|XC*=g4IuUFG`7@p4WC5gDC%dNO{3B`I`f)m7#jQfm(B+O%GQj;Y&BX$PByB5#( zPSx-N+Qak@G*EDE;x7WotkgGLi631FMU7m)lbPh6%||b_ovcWg`kCbS+g#gJhx93?t}=j1@}8Kllw5nK;g{^2?BY#bmpQ%tV0OLE1A{n^ z6WN5SN5%Yj*U-mQf#Z~g$|Q2x$CyH1zu4r#Qde30MX>J2%N`h-d)!fhDC&m&zQfFV z(?>jE0nI2NDU7ul^Et0vmH=^Ft@d_B9W%C0=EI@jmG-IR_s!Y)k~`lEjS{h-u3CZA z@^C?!uXH@8wAbJ{r5QeC86BGo8JdFRUcC^t(Kr*xpjFXB&W&78&03jJ$);|t&u6tF zxDnZT@Sp66tFJt|B=4HtbVRv8cQ!*g*QQ%h9U5mjVkmZo;M!kGB`3E(cBBCM?&L~Qspk)B9o*g@DkIm7RA`Nd3G zbO>uk2<2v%Q_yk3m}-koc^IMPr@4&KSjiavjPZqSiDhK)CLFN0;4_VzdqwJg#T_Qa zHP}ooV5-HYLRXv~x9aE6pu_hd1KDz8#Xrfk)Qvm*?35@12O}A`O4LzgtP^yGc;gZ3 z4Xdw+`yBQv?kM{{)F+-)w%>h?7i(#$w8!F>E58YL6@`f-2{0vBj&Io&Fp@lQ|At~l z=w$X`*^)dELAmvHNY}PxF>Ai-kpO+KjCGnUztc~r`-VLPPhD!C!g`0e0Xced+;XqP zqpQ=VyCazcenFPZ^el&lSv@$$t~Zhd-dDx zwMoq>^^G0cwaH|s+kiPBJII_VMZU80(tl9GeC^Gf8$*@~+M%t~bziXl-8}gn4RQ#E z4#H5KssbgM{(l!ECcr7m<&q4#AXX0;Kg9=8^K7tSER)5lQ2a=|^S5WmV~WqIEjuy` z+lgO_2^}aY3lk^gPAafzHMvqMp;a%d))vdJtBn6beRn1&#w^?JhxdrKMTgnt&l=1m zd~B)7vAyHpx-=2yZNmxUrn^rI`CR-fks(9*N;Z|o9% zXadjY{R+SPeiB_9GaJM=CQlMukQbsGf0p_sn_tcbcrUaUE~aR<*LFh32nw@)kJp09 zeJ@shPrU0T!90ROx+qfNmF^f93;MZAn^N!sta-`5ydga9x;mnp>n~v@6hhX_2ZJ`_ zE(67}oQsCWtKOch`?fOp*{=fy_p5JdSNJaly)ZX7BUKI$bdn5kxHeShdJxV$YLx8O zFy@FNl^kX6$W_>~Yb-$V6^@&!Ax=HgG3^V%Ck>e}AMozkO$gWto8Nu8M&JIM{Cy75 z&L|=Sr6#tH!inwhOvO5PccfOGY)p)@*(vJN%vY{p12-uQ^52qrMe_xb!;f^dwo)zNQRzAp^sG?FjHxs-7zxxD6SM9Z*X z@{uyf;``&lxp6-FX$r!o5~(K5+jtjWv8jr-QKx<5d>l~$?usAkCx?D{gMT{#IZh{mJ78%hyKMh@!7(2#s9oqCS!}m34t{Ilm z6WBZKsI#!(fm-!2*VX&8x8bILUdA(_ZUoF06%x}k={0!6-=h*2{*-rQF z-?X|Vy+wtUF700z5k5-!v}Vz{LyZfap>s|rbVw}9*yi1ssHAs1wUv!cl}Zw-XrlV> zer!J*nIJCGSJHF#eTjcH08{4VPXN^s6in&;=grQi(^Gnm~*PsW@YQc{-xy}Css}+O8 z{vG8H&SbZoT>smOsFRw#-k9&cWZPCVHM8pq;@>vU(RtDutaKL+cjlcHSviuqdvB-p zXkMo3`qcv0Q_VCeO3PIH=hwVpE0buoJ*hCW00RA(#BdiHr3*PWQo}^@YFwJ#@tb%e zq--P0WWKQ1jt;>0$zN5H+F}uBfLW>+ejCdVG*A9uBDm?A6~#lry5!8#cZ#K*sU9?N zKkF@6(V%%ZS6S=BcQ6{5HO=znZ>gHd8}hSRH~9*=1nULY1d;)1%j+td$)|{vJoS8A zH>lv>Bu)Ya6583pbHK)qzv;6E7m=;~zJ4MqIS-B| zsM^(!w$y0VQ1O~Kp$s_OXSZIOg!#Uwc;((x~H zUcC7LtwGZL({F~K*tXz`q+)Xa_g!Qbv!p8NboBqM4mUgm=p;!&AXZYz!%mAA_r%kB zRg+Z;vnFgp8gh^|4Ar8NOF%3|#Wg1F89PY+uJQ0JE3^ElLsAt@7+=1PS>~z=G@8ys z)s-KJ|3K6zRIulyF)^ zUTc?p_+%&od0RFCU7>-XN>ZZCyHOA?azCGjWV`72&@x=1Xd0%x{c*@YSe*RrtLF=p zrh&B=J1Xl*8-f~(vs)#tlN3?`OFs3=HN$d=$hn+SkCISj4ss`sZMo2@KH#>U(^*&z?S;g|1@;1iDZ%EOo+ zMSpXQkh4^Y2q1~Yk3GS1BE1mDe1_V2toBXv1K(%duW17U+()$Vt5OYrA;SIAQZ8W8ck1%7o{@EdgQv*MKcI)WB*LNOe z7B|T9pe@c|I@JMjQYhJs&5jf5mUY4cn%l|eZefjq(ITHHlEM)kMqQHW5*D;J5&`#z z5n4mpasFSqC~C$}Z>;DdynoDxWkGX+4td&(ddg)Qi(8T;d+NYO7vY|^w;!fpTIZ{> zGVQSzBqBsW=s_GydDxQEC1di+%QTB>h>@iB9Ph0`-BPKONqP!|cy@9|4Pf+JCV;hk}8Hen-I1p}(dvipOW7ScH#a-+@o)LE=Ih-2}nwpUX zwOOh`NGeKx5I?Py(~RptRQZY5wi_pGK%n%jPaB&WM|LGJXqM(lWDanUgMSj8Wn~l` zd^rNxYz*&!Y1Fvut)F7XQO8uO!l;6lF~;(dEwYgC>+PPk0Nj~!@qdPpJKr&C9hXQ- zGG9IVHgty-<{uV65$-0TlvS&QX@>wP4G60gqBx^+WeY~(d*UUjmkRL{+zLiXZ&h7{ zDAVanP|Zx((cuYFR*)KN8kR>MtPudzMWp}%Q0>p)PdgQzj`{eeT5pj(Pse#Mqnrx{Xpqxay_6%lmA@nv{7}Ej`JSltxmib^H%EjBaPzq6 zXM5AAZOw$cyf(l;tUKaJ$}^seQ{I;txg z6<6`TrMmEk3kFoe^wEEPtqe@iET}S)2Jq#b0{ziB%^y7qnpp|b54@a(NYlKOT97(Q z=+5jv+cm|Ss^#s1R?pYTZz-~Y7bk^slYhv^{L%?;))Fb!p89s07uf((hitzyi+m&G z=ZyM+m23PBUj-KxBeby#2oGFEhb(rWWfrwCzSf^V$PK-IOwj7;pb7h+M+J2U@a!BN zJ}Cvg4zy7f*<@|@E!Psmhd|J-ieS#p{OA0jKuj3=#|=cUt5g*1|+C4}WLQ~Yo z_5GJeepfT#PJ^&pMVKfmF#JDDp$j^c!90UXOy?Sdl9~>&3Vi88Hfk2aL;DKr%6&oq zalAbFPIb_K&ZyQ(s8+-_T1h_JUZBHu8Q6oB4y1Y~ye3O0D&PWpxk)=0kTCr4GUFC4 zuz}wvEE8-Lr3P{5s`OG>YueofdfZE>VGgBGIBa0!Bl>n6D=E&dPd|%HY|%nPs5Rui z_&@#Clqf6ke_#dG?(efPX@JT*vDEv^Ca|ryr1}xWxz`P8)w|Utm)iDCM%|JMo}Ozh ze9iAM3-84JA4HJEFeV4uhu^#QoG4VbRfC0tN`xYkXN=kU|8Bzj1=A#AcWza7@`-02 z%Ty4p9zST(j%0C3Zc33vN1Eaw7D4)0+Ef(jG-%HLzjmyZ26-^TG9T6RD)>okPtqnH zm^xo)6w~fwz8{|_u%(8}k(WY9=H@M=qhOY|)Dtk=!Q}sb6U<)eOMv?(VOX8B7N^$& zXxt&BT($seq!sBCpQW6Uiy@PH>(l>;rLVhv+As@v7ywNO`f3r$A(w}@HS3Jz>8>MYxE1S zKl?p#Y1hdrLk`#rSJIg4c(p|Nvuu}c=08{;mE30K7M2MggooW`UfdwTVjV$uxSxy~ z<`CeFYJ!UfjF{f*zj)CMo~{rD2{^;7^E%r!k|S|{Al-~{%(|S^q;~Z6}60)jQubHc~Hro z9gjNK-UfjHyStio-awnwQU%hfekIFyG73(R>)4AuKN|Hx?cNHvKZZL>+lbn$?cMPg zd(Fv@hX*uF8&=mufipu@mo(YfI-hdFMayZ*GxMlA+bL(nPSF~p)C+IW4vL6BF_dy|=QH&9e=F1##!RDwyR8htK#yK>< zkc}G;t#^BOAlK9OMAl8dA~rQPlVNTa=?AnjtNXec9zgU&>lUy~<4s9?{d$1{?7HIf z7kr3OWJ|K{-kJpfj26okQNDKtTqc{tI>tfKFy2!?a(Dk4GSR`~8W>dKNQ{ObAx)xv z65oSqTE<@DKoUhpfoED5#A;J^Pnz~!r+l@hBW8phd{59$`3C!n3Q$cGx3ymY@b_n^ zoej6;?eq`->NDVeg1r!>_)e%bA`wWgM@50kWDwXL24UE!SyY196L@ z#B`0~=^D9sxRo#HQPT~X?x0^Fg3?CwW|1lys(1zi&Bp{{@N>&-m0d%4*M3et-%&%I z+eD@K5l-C0cdBAN{ z16Wr?$p! z)EfAZss^L(7CsTRG${FPS}o+1SMu0oK(*~(CZ!=9v5IDRaJsohi+Rn8+?jeA^N6;z@XxoR=sHRX7M&4FGhpm11Z6$9Qjo31>59KKAxr1PP~+_Y*!uXF3a;5QFs6 z-r3VBg&)7xzv>{j+uyQ2c?4SZGSgEX>S4ZT1-nyk-v5`;NIBJP6G0pMe$5XunsWO= zqe}UKxQc2$NA*mnBQDW1<#ZPNWtkj=eqOmZ|NIk!4y2AbXNK3~&1@@DXC6t^ew{ei zvo&}L3L*+Mv(8pHII@!Ywr&A%Z10#qnjZ(}$Bw3UlG9cBZYMxawK>XT0cNmb-jGbp z73h^q(4sa1w;BN%KK{og_ukJkjbkYDEzUDdeEXE(u7md_9>_W=4tv^docVT zz%4%}i!GYTR7q0#p>EpcWTyiV-=TQUOs>Y<1M2l!z&)!z?(>`;u*u;rN$1et4q&Wb z9~-z11no9%Q%&qucOtkDx88?5f$0tqN%z1Jb&H%YPoa}0f6Su&IP?>CO>{W3Tam1T zqga7UopQOOd~l;o1lCJmM3t5t9B~CA1*&W2#k>4iD)1!*y_uG;uWM!cBeT0c4h_Zp zufOFlP+`m1x4kw^7dXVJ4>@mf=^lbZOPM&-9XHQpnVsb>!iSgUGKn1WL5zDeSM;+-@RqT)bPy3cr@erxiDit&-N6+Q>T zfA+WbVI(%X%qZeDa-t&q&@2Uq*nb|QjX?7Rt+;i9uy8PAezx+Ry(!zPW8^S9mEk@4 zLJmfAxtDb@pP4?VD!d$1d=-zO*)hr(cPkca!NDk>11F`BF|^X9MloK()Rs!PL`nna zi`IA+Ekzd7Cl-EIFX3lSv$X#&2nuU{<6=%;Wk8nQ8oKr+A^iI#?4P<*JhRJ}di>Nm z>k-%)kuVQ6esd@@m$r8XAtm_oJK;!b4n+2j{VoUiWugQ8s&G$hRYhSdI3vnPTO`c> zUa6R|W=gk93h!6b@}30Fnj=?Pd5sI2>Zd6?$f?Vprw)w9Q(6hBPf7=u9DE^MGBda^ z-r%!-dexLlqe*+8RX>^rf1Dc#kNx`HEBpx5w2;xt$xC074r(e!)ta(ew>8=lRC`@r z;C@a>3gj|0SnmPtJ)i>>A;8j`SW{7W1~ie+`n);Ht*ZBE4Be8bh%UH95fM~!Zq^N> z5^Z8}kHV|*UnZOao8*|)>z3~J~b)!ts)K=uJk8IvYbSrB=2Gu@GGD+EP!;d@NSZt;CA^dNCxTEtf`jBN_y0PcWEN$3am9u z{obbzxE)wEY`_U2PsQpc%Kp_+l#{hmQA(hW8KS#){Y-Jc%kXFRKR=N>d}AgN%i_ap zg2i<&Iqe@ac4iFd12fE3zU919NV`P^ftU;ktVOgTb>Apt)m#(0*?#Y~dR+ z;UP6ltX+)SN)f7tH5gUO1U5;PnX#Gq zgDhXrdAEURlQ9D>;OTxG&l%)2dfFFkGZr^K{ZZ32ybf0x-M%xK==54A64tV8=smQ_ z#WIXnV1dlEhaX|9u>m=}M8%D8(}3GM&yXV-UIRa-d-P#Bqlb_D9W}DSZK*o$#BH4M z+_ff(vez!d%WV+2DT$_QE|%zbMj*O}zhf`_El%R;$p%6X&)3K(v>`bDE&hN9e*pU~ z0Jq&puTaRL@f2}sR`5tzsCh8S_B~#Z*;*KbJd~c4fRFUOfqaiL#vf_mf`&!JX$d5a z-fSQ$cDocUopi#+w}l&Uj=`kQhsmk`B7aiN=qEa`QSuu=2C{$Q(9jYO00^UwB*pXA zee@|r-`C4NMTHu}6O$|?s zFQLT-GpJ&*3{F&p!tWmNjk6?$x4^e#w8=ELpwBqk3Tcp!A?svnm_~rqVMcwdW%Xak z#$P+FT&y`{VC-l9-U8Pl?mwopBVpG)<}C ze7`{Zc3D9hZitR~FRMvg85lRdI4(+tAZ4)3F5_wb6M2p{zys(`v7Yyru?Z&O|odYFPJ(4H{@O-Y;IV z@Fm|OeNGHjI8?Pv3>8#wEe8GNQrF6pp=TOcjqENWJr=k(0m_ZZE~_xgV#lI85{;DOUjv~>7+-_%%qGm_~6P{ky>G&=v7Tf%q3D83OEq_|JMdK&*GfaRp&8m_CHF z;QFX}kGva(m4q=k?<%R$GaLyHW+NCIJh!)U79AVo#qAsIR9f%_&zUA4S%1R`U>0l@Arx+uh`gJ z($6D=*A6^WJy2sf54-rPe*%@uU!$iJL-ZSXzKYRPf@`=>YL$q<3d(fFwBP)!)L?N>s zckX8qM6;QB=#1yJgYhPp{8sN3s+6c=4a~0dhmfbk)z72S!n6GOxAwwTC}6rflwmsb zi-p)f%T99>CjJF8HWl0EwL(S`{5?xfbGP+WG->=BZ^_bJUCB1=zr6s$!|sv*%Ox>q zBG@X?h(}-@*$Xngg~yxD5V^M|#MsqC+vV3(Jy{fk2n`8r`<=v&BLPZdNL{r**NUXb zV5Z=4&w0$OY()hqD7AXe?%1wmfn-pHf57(Ky9+V9VK30O6^wjKb5#E~Ug z|BcFX%lbK$O6P?V2GkiHQuhy-sGhvBVp#5wQi@Z4VEKY-oS5H!EgHyxmCc*L^6xBP z@xB72dyh*qpF7x?2@+a)V-7F_?P72q#0EPz?|5mZCk}oEC_Oq#{eh8MShCBg>~|Rq z1_hMxeia79F6@lZ>`1DLe*`>zIk32`!~$)PA$Yl3=cZfH&t-LBpYnG68LY(Xk=N6K zY+KuH?+oB!Qde`$YHlLS+mnN7_Uc~EW-`xIk4uvC6a@l0dRXCLcz7pB(uE`FQc+sB8XFV@1#FBvUkzVzRSZmYoZuGriTiHu< zy9~!1J^%hd>aB?gQjOF8dupIDOuh3US2>0MV_(6k$tC79cWsJ2yJfhI7#YuBd4O{v zvL&=XaR4~V>1*90|GqjaW*S z@Jw5}Xu~~IB++Yb5Xl5W(NPC+-VdqX!*OxvQfsFju_M02a`Qc8GgmRJa@05(3jf%3 z`AvZ*${oZLrUls*f6^7K!t934_`a_aIO3S-qx7Iu@b|LV__gqP8 z?z(gZxr9+EoPJcB0l~l)&+$?u3iU^^bdN28ypil*hMyHE*SI52Kq}t1$HB->Q#E78 z+koz`;kQ{!hkTDWseyMzvPyCFXgzTMmWIDeIyZCzeH!5(*(RmW^pELFIN4exW-}Mp zlI)lT+;OdsxC=s6VlHXm{kQ_B&{dU5UWid5K*30D6A8qlBN<37`5fZeypI()}_F{JMnd zM*NWz>?#J3D;mfZp&O8oEsmU`Z1>DOOE~t9iPcxKbsU#3%neApAAT120LRYLS^kvg zzmE}>zo74rmMI4xyzPO3?_Xyx92#ETVkL}2$)<8_KbSe;ECZ_jqa0?RQ&cT3{&JnP z?8M-Y*|G0RMnP;*Ag{zk%5}FaZrW6;DUE0^%@=MDx2{juxINMB$cfEzOYxJ4AnLvN zQgj3z&uU*f{iJllW#unnua6OwATcnof=$5(%tVe5N{}A>`*K0lh~Dvf5U>y3tSAV} zp=_*woIO8kgh7V~$Y)STd}WctB?%n3Zkk94O2g9a%^-O6@-gcy5)x(fJV1g&k76EI zv>wDkQeoch$5@@*8o_vtI6o;8%6vAMj|Cz|+c&cG>j+E07_|L566T_GhT0_&S}oF5 zW^OpEOK`!wf-X$z>iOb<_??5OM0do6pIRhURA!X9H3mq|brCKY&HrmG#4sL`{?40t zHs&YrMd%o{uaJkOF_hgu2?abIL1xF3+o@AW$?A^K=C|UnX?h-fe`J-G_BhbKNVJrA z9S9IClc>K%u5=-2-2+t)M#AG!>W9TT5ZhzJB$2nR-3Yeli0hK1%Xn$a@XT?)vAV?g z>olWk|M^gZ++*k&@#PJ{707=#7v+LZ0GJ1Oxv7#WnKCM$*fnLY}3JtN7oY z?x9k0tsRb>CnVk8%CyRKW2N(@(t#cE1JlSQ3^Ds>kpYD7g-L|YJh|Y4@agQ3eFAw$ z*)|dQQsqD*_WJ^nEG4fW^F^gGH(cfb2L-R?pp*AXJH|-Co6DpgQNDqr zkL{jUBoqXq3# zonguVk{@mg5ULboNm|vp{SsU|uO_`{yH$$Vb{$5uhixJe+W#lpYDM~Puu(8wS)Yi*8=C) zVZcyI*uPj2Z3y(9QQ54_-}*z3Qir#1FHp!L?fzj}FT~}bRa&q=iny(fj*CAK9w732 zetN2Me?V)qQSTA0wuONVle7}MM96P6%DjGj6NpzR7f^uaQFqh?bgky zn_G?Vk4!AG)89x4O%wV}|Et%ajB>J+Wg~pac}(VGLE*JwONEs5HgDPbn0AcSAeiER z+H7g@V4I#hi4nAOR`69U@s9*pgk(?eZ_Yc@ND0!h{&N{myr^5I|CCOFz`C9MK(P#A zB;7S0-kHNZjjHk?KGw>Un@=W(Bd$pmlksXt2)E^WEG3^cv~`Y$PY^9npOZ%ClH zxGZ(1`-X%pXnH$nHVK?sILrv zqqMlSb^9dT6ShC^9RnBqIOwm1cM?_KM=`E|ir^*Q{OrUr`f5f5ID`e)dlqCxsE$5S zQRs8Q0HxCN_PQo9Nzr;Tuzg0M4eanY!?Yf0PAEl;?AnIcw@{6^7|U+iE%C~#)u%jP zz~3Cxn$q5#r*4IlxoEqP=ljrZQ3jBheV|+wyzdTE1{&%yR=DsB;eTPcaNDSFD{yij z2agvSk*BASgMmh$s^5X6AJ^uPDbcrQ@jd+w4(CQY=3pK}#sRBtvKD+P0JP49=()##>hHMjDqtiaJ zJeiX2#k{xlAoy7{&ti_~<}Ld`c%bb#+lR9nE@oeZhw=Gu^D7+s-Av@#+3UIG{AT!5)92ZW; zL9hZ{Gsr-k24tvgS6p{a{Dq*)TYt9=i>@|vec(b9I$lxcgW$!NQa~<~qHV3lmgJZi z`RVsK{vA+LD*grfG38i>RHn$zuuk(*+O!fvo(Vk@dcPg=8z-Tw z|AcUwP~h@EOFYH+3Q!KZE@Xx$U2~EJfCwD&K>0)3VvNmHE<>5;rJwI7C-jRXG(38# zXW(6%sVhGZR7!{cTpF39Wmt)rz%O_Vs{Arr-JJ?*>YF@y8&B;JVNTM8%7eF8g8~%4 zd3*c^ow}VBC+Vi~x%tV4gkS=P#?83s{h8*c6e4rIs6*@92XIm19m(M1%L|Q*#Qtas za1!L<9v3L?8>9&jGWuZ{%`Ly})fLIRll1lDe=X5R(YL;gS5yg@3nZaZLSG~0hh<;i z=6Jd0cD-z5T#Le3lRGt%xcFP%bHqr!+3Uc^J)vD7CEw=swNY3DwPx5Gp+ZL5#yl;Q z@zObx^`aY#d#Qk?ai|vQYMME+I=XS(s;MX_Vw7nCO&kaTK8#7xnuMWuhx%1I?17Q5 zdF_C>k;KK)zCg~Xi?Z*+O~;B82n;5qt-ej`7F+L8%UMh4G)GasoAG~jh^%I8$z4wu zN|_W_OhYwimM~9@EQ#-+f5TRoCl`IEkO;^J(iP3q+h>qVixf;L;KdpI^ku93v!hR2 zjTlw1itfd}m=5!Plo=&CWp2>)=m*QjTN<*52^-38d|p4r8+3^8f<>iacXMiRcAev= zXh4#?DtX+kIVQ`vmXNdpDwR=NxjCV4@?Hqp2dWan7iE8y*~ z3JZui)fmq;t_XWN{Hy8H$ia_d=2|wNgSS4swY+YZ+rmdxF}}p53}Bh9V0#MW+4OnD zBzeGlPV2%|e6zxBR-|xTEI|$O9P?a$*`#Xh3A|+kg6|GkTN# z2h`fqDz)|L@!tz2hY_d!+bED_AUr28E|g%1OQMdKApH{dT4KLmGvS`iqV6B&xk)5| z7RHLWnHzU!O;2*vX(+`N5fvF+au78lDg1Al70p{Q$+H7BD2Z*NvYUJtmPHuNuTWQa z&=oYjBFI~co8*G7KD;{t^5yluEp$&ZY$bXQ1J@ERMzUMdW1hzDZX9u?G6~zuT5rin zg5U7+0!0`!tv*_Ub&nnA7=Jztw07JJfq?aB%XbCkYS6tPi&{lbE&_^ z;$%AbP^U)C7r&tQxX-(rT|`=W(FM`gZ$@nE+lK#ntT{HW%T?uqSzX6*?qzpOi_>JW zwLi1&vi8oLQNKo_a@>W4>BB|)5) zb-~@Qe)PH+1~~@HoT__8aK*jPY&tWy7kB~9;|oANoOcNtFfHM*VZY_6em_Dy4RN>OaH3OD<3r7C$6Hv8jkOv& z9-n;s@dc2E-7!&7Dc7;<%^g+*`MuSQO!P#r`je0(nWvtE}Z6%N0JyiJV3d?`d2bL>`z1*G+;wGV; zp)DcJv0+o0K_QE!1p}RBnK=tkQ6PMW7!{QI>6Ydq6Bmsn_=i!|`LhVP8z{3kT6=9! zk|CR*3F0IS?d$6ucGbhCe=OsS#!{(qJ_NU$QKjFCWji!dY+XiuxW}$bA zCt~W{$4{s*LsKzr0Y7T3C|`T3&gb+Lc9c!DffZ7&6y62DBEEa}iwk`>zLLnDmb86e ze8BU;{fe_d%o6Y8pxBs(2eTPEg2bILmZ2kMj z$~A=4ui&}lJSpg$&7bk{I=W?K5=q5)jm8S%!5bd`HcgZ$gTiGj&sXf!Kfeoai!7W3 zt*DeCq3U`+X`~ApPw=CYh;l%4m-`2h0;;u5jw~W9kZwvYA}j|tiR=0h1&tgPkD`9G z%$A)S0@AnO%RxfQ)|7)zfYSrYFo2A%FgPLi51bG;Xl859b9Bt?G&Z?pu&;&~!QuWLB6QX@4rY)BBX zP-yGj{(ALlXkOR_dw%R!eQt>V3SVv~f-Wj5e&>1iN{{#I>Uv-eSs>mHsohsryynl1 zXZI$V8Y?}a2kJqR0`4eMjCUa5pB~i6i+tT!HdrBT>5U7d`0ScbK73JO|NFhxdEEpshZe7Zg}0} zd?3#oyQ`W63L-z^E*j-OBEP?(SxAxs0v&vG5VHtxbc00~w^;Q3RX(kM=KW*=ZF~;V zblYq&IY4s~m8;CXt`3H9sD?0CcPr?UP`R3***9<9n!9j)*9hwB^q6=nJZ+L*T6O+p zd8FEN4uW-<33I-G<0ON+!Ah<`U_FZgVvXU%k`Mo|c6B(f{?cBaXCykxU4bVy?iK25 ziQtKCT#Sf27L zi{{!UT)yY%-8rj(yWkI!WX_K2)zSd;DJ!8`B^^%=kV^jgKYt$e0a9=NdY`KV@P8_G z<0b;rZ26t=_34FW>ydKlrGy7A1>eK&L_O2Q>os`V+PA&V+*4Tpei~Q*cg59MxknM* zAPFJ#U#donj-egdr}!b(B__CGdhr*j_9(MgVa!3qiz$lKC~7#9CDV(*cWn+pr&7vae0*j-nw+nmr*t)#g%q8x2X@Z(wB##tV^m6!lfT+HhGT{HrVrNwI4yX{mB(--lp;8V}C}x4UWVpvFk+!app>{ z$9ksD3bL}Q44iG@d4c5U@DSaiUnP=A)iH&&c}km8@w7`%&w z1IlrChYT~xZXWE*li{DaMY<@%3l7ums;ntyO&fH4w?l{)qeF?V45{wk7enhd3A`S_O15aCKys$=k<0x?}xV2cp1sp=>8h-PbDSL z={#aatrC(Qr*L&f!mEwN+_KBe0<&4uJmuXc)|)$@EeH>P;7A*nAYg#sWr0fRbx52Rq?OK+vdIo9__zT>)?(U)3gIYhnCU!>xdNZ3ta zT?-s#KL{L-T0ObZpJtt{b;QR?o&2y^Bvkx1PD0@5ivck<-zLLLYwHEZJbskd2<6dg-8RE*((i}k?Mst*h69=rEnSg#Nh zBk|G-!edtI@{ zR+)q}mzEr%^{8Mqx+e-#^s*}Pu&ioZ8ql8`?=`m(-AfCe^>!{BhYG-&63`zg zSWVHNKN4KT7!GTNdvmo@4OlfYlD1J}N^rXg1e!Us<6rYNrsz4h(81c`fZ#<{`%Nu|!#O{bNJh73aYi9Vm8Wi^Be z$qI~VhhqJyr5pthzD6L1!fUOXKXTm@wBb%SJz&ks5I$nKFwvUo@3ef@#lqIbi6YZw z5-N)9E0&$>kK0{nFYnSw-2Auf+! z&Q!;^025-iXhsYVsh=c$m6*P})giw~zPARs5@Ww)>9NczdJ}ZiWd}tzOXbcxtgLlq z)Xpk1VD=T1omDI-6p~PLeq_4iiB%05i&klVT517KLA;7~JMb~MHaFdgP9C%@eTDtV zx3L}>>3~x;TJu}sgzp8fbC34kXujkrr!5c$i5%$7e9+Z2QT4A{8)B|Rdh-YE^=;hE z@5KqMcB-sO1+o!=+vF=L9&@y}FA>&E&9epibHDbw)pQ_E_dPtkHIJU44w~#N^~p^M!8{N4oC(ko37Okd4q0}CTY z>}>*WY>!V76S9;VvXT17ub#yMBSK(ex1|-2YEq=&#cEU7TlO)mSNhOk1jO%mqY!=^#EE~whfE-3 z!vfxq8jLT`B2C0}|1l;=*6T6ATf+Cpe|7a2yqyP@$+Vc`s_z!RhW0kf@$N(Ur#954 z^lqL#@ASF~74KDkp4~W6qvG$IzM{#RxZ*wGp9yY0-{^!wNE%TK-F$pBM-41yK37q= z{Cgma>72m27w>KAb#D1Ci?1MBSthLzcvu@}rYRKFtm;}cfHew|-wD6(ZzF$}+B5ZbNrk+*)o2%lL}8 za#9vg2ToJvNPHRo6!trtfMX^j-c0}Qoq1!N4j;$pQzZ4bzCHP`Z<4E#Up_qFD) zWQf!4x$2RcO`RIeAWlJ7rgKgLi*h-RvP7HfQUp~4WW1PZqhMd8?5r+-xR8Lb`zM@2 z&NM|94e1kVJ81eE9lc}$=5uXh*@o~z0h`-j}=XEGZafl1eCV?VvM1;mq3A(;f65gZJvtaaKlpy|r9#xQ6>Y zmV<=ow)1jG!W*`NlArHRWs$ZCa9q5$EHIrpq)!SX=a5gG9X#{T_jcn!T*GC#jrbHu zW?A^?RCB+ifcm4}akENK`%%Ii_#PxEhLae!wv22(2zroZ?^mTA#=lo*RnN*QsN}d+ zDL5^@ps4Tix0lc}tyB6`&>0f}$g{hikJdC{xI-0{=hnD{22&b6Tjat?%~R@yTG`6T zlrOhH!6}vE<0d>}Wbpc!vh3++!QsJI^Eul9LY-!Yk~zxsys6LF`K=$`R;tV3R^Lxj zZ|QxIyvG(GSReS**w9UEnV!{LZ)RR&7Tl%%IBFgnKc1y8T3nmTUNQX$rLJI`sUp^{ z%Ax>Y;&I%_Y2J)uqobuBqEK2!Nfz9T*Y;fpmj@XyOXl7c9?U_gIf=Z${m!&-xze<}MHn`E>nH0O#V$JH)p&JZ#P*&wF*GT0qqK7A+b6?8J3 zQ@t|soZhM~k5w+`*=Bw71aLqlB+*j+G@+ReXL<057D(DGDKR!{7t-<)%a{&C%jW#r z$B~+&i(uqmhQe4LG&K)Bot)u5&ZP36wC%~)^!1(iz~v9R;_dA3O)9@($Q5i>`n=_v zzfP0=M)IUUU8GxgDx7IQ*X^$J#gs8lS<9YQl$|2fzYGa60JE+rFOF;RcKW62CMt)68#cCLpxi;O)P0}yZ>YvzD=vOuWa^ZERRJ0=a(ct$Hgk*-0~yuTRv|gM znN81{7Xe1pDstiyZIJ;cEcYe~lgR=Gb{V=!Ar+CDhnY?;>)O{VR^VB(fR9qaKj5fM zJ3BBEoB!Kgw}V>Kd?1*7h=)n{5sg2Vq4CqO5;s8sO!@4U;V%s1_f~Eum4?mPhA^MW z;^wi&+}9P^T5@)z?wzFB81O%JCym~s0)WvyvLK@ehN63+f>VHiuH%9k8NJ_`dzD;2 z{M004X9@EgGC27lA4*b#oBsbsO8x&w`o=Gg44tc=o7EcdCvCccG!DZ`W?xZ$?+Zp! zdufMRnDAqqHd5IGhsDy0-L7{*T)xIUuVCz;;DACpXc!dyR=;FzaMV*I{gG&-UI9vm zyg%M_Ee4Ez2L)m60k~$A!0Y?cM2>eGbsb2y z|9dgZ&WM~k!a>^f7`0>oiPSGby^&P!mAhEB@Is@0xCCb&I$blJqkVTTG-e>Z_dlp{ z?2TB^TE}}C963)M=a#~(os9L`u#L8PL~%|snD<~p05iK5m^hmS*DU)^OJb`T5Nx;6 zR>s*RWXRH7r{Aa2gSM5c7E~}4ddtv_v0w9!f87aE?8_se&zmk9(G^vLF86j~fa`^e zsDj$hNe#iHO@UaApi-GYH`^~yLbH~O#U(M#!btF)a@I#n&s-b5&CkL>UEQ*mt+o>m7eorN5 z#}9`dUbI^e@awXMjNXw0${=A{+kp|!1y|c1gA+DY1Z?;hit<-Lv1w=Py5%W2Yg%+&Hw`%urP0gAKz_MH6MKo<2MA!Q@~l|s3^0VH zO%!D7eXc3(Hb8DtjJ`SGEEO}5aV(NyV@{%ys^mQ$o)~K>3Q)4RPfi;AMx-t{GcYnY z3b|&oM6xCddhab%=kwBG96r_17a+{=!ACYV!sy4VwrWpyE{^b9Q4iaJ>KAwqIb!}? z?To89oGqJVg^JfTuzRIrGlQlBT3jG@Er_H>`r4yK_)w}4`?76XHLQ`F zcm|4(nr?q0W&4roDKJ;~uv>P&o^m=Mk#(qxC$>NfV!$47z$-9i5WIz>+cup-eosYg zHsGQzaSFKyzP=+qaxLyO_+#j)D%#ZQ)L zC;D%n43YlUR@Y1Cf3K<@*Tuf&l5WYGqGp4*pox90A}~<*mNp zXzW%wEr{y>{H%j7FV6;he4A{Z{j(HEm$0$Gn{~xlO5q2gfmGiHkZ8pEKvDM5OLk4C zQWu#3VSc0jS#7V4?L1#0V2px9>VF4qFuk*XmqsoBB*C1J0H7a?mJ18b9-hzTB{ihi zWZLnJv)hIZE6ce`LM@w(sr;jW9m2?vB5Z^H=R$OR(d??v+;G|Bb?uLOWeVov;U=@v zVP3dkC}dwBZ<>PnY8hi^Z8nhPBH0!n*M;g^(}R968QX)kHXP(@vq-@fFyo7xW6xMz zQkZ?jN?q;$Vj&~Wm1f@|RnatGXJkPYS2t*M*-?}bb`QgN3QZ?(A%sdgns$I&BH;S#r1Diw>2}cA;loa5y zUGPVztoo&{+17xUNejcR2Qu9^%C6%og}pS5B2PIw-<>=!OBhilU#n<*bWcTl1GVBE0oi4u-<_BC^t1^pN+d7|R84Z(kbH`>zHNzBv zX9H8+MP$!I=!ci3|3(Gn-J2z7)C2MoN2Q#Ps50L!No|TsuWcB82WaBkr_-)Z7$vgv zT*{N#s{FvkO_M(v(`osc|8D<0l5((vV96|xbDt?fl?8*DdfahS@UJZHwEvdS!D|6C z;em0n@E2JnsNhNS^X!#U%a)8tLtya*iq)g_&}v;iB&{^nc9{3@1$|6|QFm(R%H}A0 z5;^Nv>UZ8ZAtjDJ@s$0qsn$Ea-y*8K{CHG+4RjRXo>9m15LDLOluIL%Byf1qsB`p% z`xepP7fOneTMpcKwv=?Nc71vnwyw(5d(O}O2{%ZOIor$R#Uy&F*Q`0Dda6lX41T9+ zovYh!)6KnQwUOs!PjU*A6+o-J++OiExrADmgIJoLf#p^p(ZVxt_JlvjNvNLxHY|Ru zr?F3gML?y}{rm%9ABTsca|695ojH5Cp2EY~=; z@olI1b6wd@n`u0f@VNCEq-LVx6d|Q+=pU8b2LHpm-_X*C@i%1Y^9R%V(wjPAe=psH z(z>xf2p9WJ&l62kraEsg6Gx22=cKnVi@<3x3qDh_u+(?G8$^zU8M9zdys%SuNh|Pb zrHYs3+V1Op_v0T5U z8e;!O*UyQ5R_8hzLY$WXK4Wq9M?<9-l<)ek zP^5YDVMd5TyrbG@Op2zwwYZUl=PCxg(i&8x`Qs}gJVH@zGOcs*?&6n9dhHDAC*>>p z+K;TVMc3?#7qBX8;!~15-|j!h{OCQatO=p7+3n0W30FCId=N z;q|6`yk{N7irWs~QF;9~iu9<$pRC?air|RtB?P%HTVmiH_ZH@< z+vuJ6L9gH-Qm{6?H`DjP0Ms`F#^aybr5f787zK%;Pco|cP68~O`mn+2A8lU0+Dq2S za{ZlJPoS1qbv-b_$9CuZiqx%c#!7bzcK&nAh~v${)w9S~W2*e($c>srjDi9{(`#D=rVO_=jvJNvP*!G<*d-LBvrW7OE;_?kW5*9t&0WK!7!_ zsWED8EF*WwZxg!GXXOvoNlmgt3T#D*{4`qh_R)MjwrxIMCBhIUHE7MiCSqcfh$hdT ziNVpyxiN|e?13(D2R6d@zJfgZK#N{d~>bU&)de7U2+Y^0@KPOgw~9hLvAK z*pDv1L0Uv)7L)UO5F#k@p)%oCCcj_hS8>yf~=Wj6H93Iag)YSwwS|c$rUCM|1 z?(*$^+pU?7ic)&bOi0bcYo|%YVm!eZRG35-3H~|1fdw=^#2F}qX%LabQ)J~+E~$qP z{_Lc($Dbl@U2anA98Y8sHp8W0lF#$kg<;MucpRl2KJLwwFJ6}SnweOjFZ0Uj)I&Gx z_^yJ41FVK7g!2PT&wZB4S=nznjw$4rp>WKnDa^lyjE*v!b&Vbsvvd4o%0f&~m=_nj zTox{Bz^kf;yWC8(1pG@mfEZrK7kHo83h=%#0e(^%)$0 znfZn13h2fJEuT2X!8zki6qbY4u1Q4gKfN!gUwPHh$wx3zX8R6A(5V)wypXJlNBl1J zvkdWsC$-4MB1Zmo&hkTLe-%WgjJ-Z|fO9a^Q}Pl$3KQi4<5VsRA#9+3zH;;O)7Tb- zvDTg|6@(}sk!rMz?#^X0{yBL*;9%&`7zPbxs5uW0gus6?whs5quYJ6|WHF0p!MjrQ{c8q)DvU7PvgSEG1LQP|$TY~=c_NjaqcT)95qTI!h zAI`mONDvc*TMt8QrRQ2bYF2mX=Mw~QHEGi4z_f=Q+3BO`%MMz{iLij$ojy!i2Z{t`AAEi|Z4&(5l18%s0vd+Xjl-9!I zMPoUPj@+khUB}zHU(tzEI$ZQLg8q8Hvf>YyP3bJTifP2mPi^;m$q*n>%Bu!|kAPm0 z0kBCvHW?%v#Z#WT@))UW4|z4DRh(?*@;w;MgTA%k_&_CZvB*W6b3@>VGvc_9yJg?+ zRbaYO8d|J$#DIJm1?Z*!_+hDibURrAK6s>~HajlW)>(%R@;u^{MYMV*vubdK)BE0L z8b3Uj$%Wu*$!L!I?EEQ0<3%XzdPELAY!dkoT#O=akm502V^UFOw5tvs-WG@XzPhbN z_zOWXLeZARvYYOUgUl1RyP{Kc$pAM+H#us_3E1X5LA` z!TPPhEb|7HaWcQHZ^q9E5ytySd|A*yZm3DKq^3_m^?Dcc_*{vekc@Ra3lu$9g<8N8 z%%S0I=}>-OZ8r};RL~|LX!fhtB-&D@#50(g#;Q*}94pZKy*a`Y`{l|;mH&6q+b1A4 z^DOMjud+KCOEG|qm`DFHGzf;Lrg{#T{D5AANV!vnkg$IY8wkeqZyK^6W{hGq2tN;b zQ1!DyxLfce1?ZUI1Id?!RReUvXQyPG!YfIx&6@v=>Pn_h`kNWx+mtadS$S#PPB>B0 zVK_7Rr8s2wENpG<0r|-Mg7eh)lqIVXCU}t#%f>0BprSECpVR1HQwfb0BP~;+?zhl0 zGE4yldHx_>s!T$)3P*hYN|3P8~lVNZ`p_F|U5W&&1kw+Q6+=j2|*(?IAdR2Hv8d z?nulgq~QqoDNV|9v|5(q>Q4KR?!(G1`-+u&9`_3qi>8+w5>7OPUE5+Y3~Px(k%#Xk z|9EkR;VxyR!x;9mCufZ=#@GLpXeKiazFg~S7aV?RrCI?{aztbW{o&3bnRB%5@~ z6>x*e(p(OQoDqZ8@IE6rd!1n{8a(kU7>bt&ec+iziG84^d;GzQYu*F)uC ztcWA3NO9a(>L32QwXwAp1krRjZ)w?J8}PDlQasb7JrR1MyFLt>)Fk(0ivj zB?GE5r)M_KhMD0MR>tX|l)fp>1LvU4jdblx zrJYwRzxt27wbT}$=BrO0Soi>1X($8GN>Fk^^rsTju5$lYKj)?>Dw$1Em4l(-Yumt?{BL<9sG_M2)ZHW!3X_0_fno2u z(ms7*@zI^Wind+5`A*XL24YYo}U75cnoQVP{6WDp+whC%|lmT7eFL86u@M(Kezx~ z`5ogYG|DTKzBX#sP!S5|lWo3r_K!p-7OhZ;46jv_$PWV0CUND0EQid}^PSM%ryZ7P zZW-d|H6eb8o=4;Pc%FpRor2ijR6M4-f|JO;LLJDNnRrwe(xGMdeX3EzcW8nvo4T+j zOC!%A-=c=O0G*ok{B60v4#gaHtOb&c=iaeIl`0Bi-lA+~=cQGmR1MwI)?q<>%41ET#U84f< z9U^?s`(OT-C=y(MtXY1Cr75?9-I`tpEY10MR>5BeMM2|QGGl|rMaA+=EVo!=s+VGI ze&z)~`p;L)vj);|pET)ny)$v|M)G6722+3M_;XS-J@vx`;+hnGo*LgV?Sh`^|N9>% za}UaBhpM}Cu)o59Or8&ZsCi`Fm+l=OSHHt5#=adChRa&k5;6yAn49INWhXJSq>8*f zN-5jDmo%u2HHB!47~d=F!c@39qVhIWGK5-lQqBp>xd8hfS=J(V_ zLhNvR2RqLdW_={VAMha@yPeYpR2Q3=mJ6@K=!hK>PqQn^Zkad)shw?Q9k>AoH##9qf8jk*d) zYmC2gAdXcZNod4JmbF%P=HTKERR)8OJDaS-cTfp$wv?!pETFx+TY!*j@8cxU>s zPbPNxf9Yl6wyre>ux0h47P5(1!$rp9%5tJr8M_Q*?*vqqvWdymU>Jr#?p2EJpIA-d z4cj2~lluXQki-gp((MYP{&^8|ep<2hCu(aQ73&o}=qlH1rONjp@_TpPya6vtx5?bN z!v*C>#Y$xfPZ*vet|T~=9t0KTwj&uJ7tp*6%vG+h(WC4kMt1YN2#H%KJuRE;F2(L zKW?hA&y=73;(OXrXHvigu?x(CgD^Z_vikhjOM1xvj(J!Q4UPNt(wAplDSS;1i~Z$o zX3F4866J3HMZ{Yf=Hbn>xeT1M?5BRugv1*HItd{>YES^aC^OzIbTR)}SAk?Zv>@T) zkgM)AymYN&9;R12hPExlMqQ_uVKgFG&odN${kt{Nygt*3MIP?agtQFQomZ5LHyoqn z7MR3&J)994=LMI5QIPqa6nBowjC0A*B2dmE^b#ulrT>xb&oeKr4<0heWfdObu@jrW;K39UBpmpqbKmyy5gUE=q5w=4fTsP984nX zC`abvfe%qRShU$lOf#IBXZM;fA$le^3aAh|SLNLu(LJ!)P6AYtjmML0RK; z`3Yn!Sy>ef{@R1r4#t3}oOtM-dh}YpHnImz#)1U!HQwP)^(EOM{RUq@>OP@aXG1gI zk#Az&|BGFV9TT#A&GQp7rQHuoq{dd_j}t+03cRq>&-zSqSc#{_As@imDAqKyY>dku zl4!`ObAlZ&jN-&&t>3%5J}ozw_flwh5`a zG7ZZm1&Rm3L|gwk3a|uEZ2{e!HKxAnR=`p;uB&FIF}oLJ<#k8r;r1JjMb#?GwtLSw zHJKhHx;%(x|MK)5;Q2a?tk$CsgR|XARlEr5pAoVBxS0O`rQ+-)SoHhjX;NjR@ z{2g<_(*_~0R+qo?Q}cdZsLTSb*N}h=<}nJ!tdSmz${J^93La}q2p2w3 zZk8Xl4iFa*@;QPY;6Up^C2_w^wx896G#@&4e-WKTP-V2tB%-( zZ$ohk;RL(@;3SlI=qtlBZAP;Hku@l|hthqS;ljP9-SyV2#A@KH^mT4lIlKh? z)!$j^5FqHO^HrocLY~ma^6>)DTz`Ju0}_?c_zAkh?5;Vde^xI8__#B+#o@883eqY& z7j27fWgNSXrVl_<3D*nX)jtv6d%~|x#v6R9^a@Id;c-RNn)WUH-a!v8I1N z*>@vNIMA9Kzb%mVX5w)}sF(`4C~CTBTQg|j!Y5w_RvHK@PIx0mf|7mt`5;7b0A72{*A&uA@}Y3*s+CSEbER`uXI@|R#1e?Ha7EWQ_->D0E3hMmz zR}0@V!zSCgLDoV{el-uhVd_&+5`mgnh(6Q-uVAD-x;%Lu8y^KbkR{( zu3!HENL9D_;n4I&5sd?f)QM6c>xafWH1+7o{jH>O+1FL}#c!O*&Uwckg4|xebIgsA8N=qT9>fVW==vK+r`nvW?i(5+bLXuqW)y{UCV1(ncOK|QOV#6Wz;;dB6FJJ_>fYz##hBL)YO8BZ;TkAR_fc&rRL0mLc(w;v+-$La5ME~ za6_2YGT)D5dY-jj~~XM z5OlLmkuZJSdh!mpuuf|pUJp=(m(iG3#sV%Hv{BR<`;_ZZbBn1}FB?N$E32glqDv)g z1(J#RfC;0@u_EYs$s$rj>gcRaBLMtC zd)oD~@G7?MI(@|}M(nb(Z2PaDbFfmQl{qAg5LJNs>zU^NujTWTM;J40@~9leA4M&{b}_@e!&q* zj~;n=Z#cW=VU#^2vG2tSn=^d)5wAXx6_5R<>@U>2CJhNxz!;d2eiwa5xtc{A?1@`<$MG__B0ZF<;kOHw#uSi91% zsmqF<>Oh{$_;~;5vvXpC-3wF$nEx6j$Ai;{Dvi5indHkrcGp?W14G}dK-<}A5{M$- z5OFAW`5?rqjK5z&V6ik4SzE?xcf>2|ZU!j48$kU11*?ZJPj|~CMYkbcj0X8Y$`64- zHvyym6x+c@?b$N^it>N?O`W{4njCrK6vd8RtJFZ$(j`+>`arwV1$17sd=oMdA>gC? zg6&$jBaCz`N8KX{bK+V=)gyLM3--FXs*D`crQV2f-q-Tjn z&UpsmLUa84ioI>)52;)Lz&n;Y$W;}fpALm`h7R2x11qQ$*;-$KAjjrHpz z5)obFDKU*_Y>j0i@6|qo~D=1Zi{0%N)=rJh!BQ82DW!F$QN0 zRBvoNoQp2fx3ECEA%b)nGR1A0-MiRO1{sji(fz9tQ6+*Nm87Z1O-@^75CG-ZzXD%C zGEy#~^wysgn&_Be4Nnh3@NBQ#-9m}leOi7=WcRrA#A3cHx|U7 zOXblT6A`u7(57#e$aod>$Uq7jf3F19MX6D8d02`YnMEBIT#yzhsD30)#vyuEE>s^s<=wI@UV8Qi0=hNd2* z;MkWOjCB1!?OF7NH=31VDuAI}$LCi)C3My8r3`&A$jFoquriGI$dvk*6S%iK9-i79 zZ5kg#b`gj6Z`+fa7-rGDLl1)ekYS8Pv$I)3;(GzY{=3De@ncfWL?{pv&lP(BFZw1( zMGHrusB3r2_mY7CiMgc!6P>ZY zK%M7;SnJ(F=h%DJ7`8W0*JId18T{hXj09)}C7! zvk2?}tFE<22eF7t#Wlq<`@A{;8RX0pI(ocvb^giBYC**f$AHpa0HOwJLpu4=S=G!e zcKgsdcOO-hM}CVm5y?G{3l<{I zscZqy8awH5dnL0L7H0}CEKdU6kI`({i*x3^js83)NI}pm-3HD@DuEL!4&6k-KMF9cK3pqNK^|YBEbE+V z+OTR)pG5)!)Fg9J$`2w|2sPz{P~jWPhj-k3$miunBIY|(Qr44@_P4JMDz^lITh)}s z{rhGDDZ7ivr-YIo;Fw9A?Q8O;o(ify8jc9JPT{qmTD+svaOxm0=({cuM%e2DQn}#A z4<|n_`Lbl;fak+$mYO>vyqp22cvsUC;6YR%&k%=TBdCTSGhHJM-F5nL832UsIH(^2fv1+P^ zeR~Tl^V%+m9(OOvy@dIU1#fg>Pkov19|mK|RGR$cl}?Rj`Ml#oKd-O%TpXLc|LgOm z0Pu2@PfL`pJ#~X4pP5gNapTQkCXBV3<6=OhjOfZ&KR!%f{0qjZPFV(RzvFtTD7H zBI^i0bLsF~?5)@-Q!VajGYx0;CT$(DR$g)Y^MDbLdhE+Ems*RmPu>MiC&N!q7(~na zehXNp&NQG-ttBr{Q8xy2&yCldib<`(H3gy5^jR@(3&hj%6(0#pC7-f|<4s}G{y|nb zVEmP)Op51#xnirCBja|kU-UK{UY>l;XQ|a>e#smdOlI%6omm151g1I?u^`gAt_@oP z2xzcK2P#)K#<;X7e!qnR#)tF4pLqU)RT9fm2<4$n9pr!k96K6OCQfd^=F5xxRr1)U zkZJaVH^$I|z?osV*V9)JL z-+6dpzmP|mU2I86D}3$_)H6~aGC(;K4;3KGY1_B5jNyRS$#(C%NEjHj|7qsYC+Bzo z{f^oc*f?aCn_MWKax+^&ohiL9WQu@y7TJRRr5>1gOQYqRqD72Hu4`crQa`cWQEs$M~O-|kZD-{X4TjKKl{>4UTv(|ymtTS z6MkUe1(8A6$4j9PS+Z6rDKng?zm26%zeW2SLojJ3#>d`hWBEvqF(^o6>dpnCA%)+b z4ruBHYzm^=Z6?&AOUju_g9+%(_$=o2k#E%3F?i9bc%B@b7TAG#^FuHGUHEoIw#zP-1i~`K|$6I|1YP5;TTzWwa=! z(!b`hO{A)WGYaYh|6fxN*IVw&tq&3NLdq!_17-XxdtS|SD*x{}T#2F>yj;rv?@l!F zTiE~q)OnUYbpIeH1ugj_*RsW*$IcGKvd*EzGZmN)6&+byIEz&YOcDCl^jt59l~^js z4dde$4^HX>%D@$?^}{mXJVUxTEB6jj@PG5s^uQO(IbWD7&Hr8DbG>l<-!K03l2W+~ zA-2|xwkq$toRUD}W*X$;F4#)?zgIv0_)}HQ0fG~~?)F;P`0dRoQqLUqLde{Wqtfm2 z9$ou7t1Y;J>lCAI8%xgi!aR%hc`oYkmP$8qV2Q|(*5@3L$9Wv2cI{_vR zZgi?!J%7mc{7RpZw5O!Z`gAB$9Y)~12{n?$Uui?M=&mJU#nmF6cb|(LMm28heFD|`l7!j6CoIm~s=6Tk ztqV8oNn!#P zuNIW%a>~|>_L8*v z#C(CE$~g=+2*|}8%23~-AF&72)w|7Vga#2Ff8@YdPAPZpg3)CA%Cc;G{0vh-N* zhCBvwzcU|A%giU{t0^0qza6RcP1iP@fCBEh#T{N;qatKcqg(icZoW@!!7*SLqh$jn z`L0fPdNz$+p&I}5y0D+rSOhR0QZ=1vHr0`@$4rhn-3aE52iILs)3slpDX+Zbq_Nke>PP8I~?GfwQ2!#jVgmqz#(5dEwC5!=JoNAJAL{L))hBP-bY=XSZ$$-h5=R7X%$`_Lj(KH6Qg*atlFN8YvZX z-}Ams)U3Bcuw$*NA1*cLbc>Lag@q@A_Ema+yq6&Zo4c}H^p8VWn9XCdXfWR0+ zM<#vlZM3U?v$B=}7^veR)^!5j?%xG)?7y9&fD8kScLenl_&9L$zs$f*kMp)}usw8O zA5WpNv?2EV6sfzy(NExLb=7ofb@=dv&Ep|8(18Fli!jvNB1h=H>VR3yB=x@MuW7vT zO*D6b%5B^CG3TvWYBmMu!H!J`LD|%C!m_k3db99VgaF{ICKA%VxWRIMP8T62^%@k( zL^Z=uxKF3DC=(g}ER zh}SG#Rlbw#iW={f*(Vj5!b1SRp*rA3bPQ~;TU++8X+aQZIv&DDHJzf|kw9I&Q?(Bb z=v{&f0@iB$MOl9a*9Cr$2`{4Zt$mj{Mry-MMMo4sdm6f@quf+j;Fd3y<`_wE^Igt& zQ~gQW>|bdiPo^hHJbQ& z2(g0|Y`P>@V##y#u8q27HVRh}L)Hz!i@9Y-#+4dS7iY?Rx=6U%9yX9Z*~mAh1#2Qj z9DXJFO^CBnjg+wa9)Tq4TZ>yY5s$7ifi%3*p@1CmDn0*a;Mive8DCJ zw`UYv-Ph4wPgAnLp^1O-b65OsatabKC$hXxLBUqQ3%~{PeGJCv!Bg#YG61y2792ZwA(APXdZm{38%s_{$MWER?CF zv5v^wvj51x9C;B#l1N|D9?l_m|8wzEG;@nb?;65{@s7bV!Ab$K%W1F7eM#XPp{rF* zH=aH24m0Z-D({_(LW;B!f`_C+rLJ#OB+{9^v?3}dz)T1?Ywup`L63w*!rLQ(( zO}OOpa&XKMahPD@vJWN=Wgnbes0R~2XZ(D{@}~VU_=;{W$ECDp6Wu|RO?Pe{PWFq{ zEf>q;-)GAIyV;OiP8r9(C#F}(EfAYm@Nmn;0sc#KjtKlW{$~ZIH!b(JsNCAW8#Ag? zdFw$ZndpBvJHX?)x6h@3*3m{CIq~R-mO}YX5Ky<-6IVtPosF~p>Oe&_tw%b_Iv?k; zMx`6&jlU>%4>zFXET)WvK7R!iywXZBRYMofN@eq>T=jQbETA;hIPW04QylsW8!Kq- zT;s(pamVrZsvt+6_D>1`{$O?pn1usiV0mt}c-Y1q1i-SM<>sA=Qz_zxiHbV47OM2H zDcspt{!wv{|5lEx$)Cs+RkS5~I)uKC>mYF$$!ktYb}1V;NgbNvGz%C^c zY$5R>f8!GoyI+e4b$AYFwk7ED>VT;VAxV~IUNKcYjP zMir7~z?Q1e1qBzi2h7tX0Dix=eYqbP%WG(!>g^o>CijRWu9{2GLyD^jg!`qwsUw+? zyQp4TR2{=0_E-Qo^V4bYyTWtMeBrXw&yanNrZ}4ogA@mH!Cbte=;6r;-{&cq85;@uc&I z(h;bfmv6-PB071AN{GEaUSCRChf64-)hG+{EE6c_{>T+b#LJt}kF4KdZB4;GL5=`X zf&=1n9${+zZ&>yy`zDAAaeF6uX)QFx2NSP49|{hubix~q{8S9Czt;9hY|$4(mqX-S>fAz&BPThbs+6x^?^Yw5~3;PIJk! z1ytgOZg4^=w_F>HN)|zabi`I{2|4Oy4CQ>nRoc%%lWvdOtap_?D4Kw~f$!%5`>`j- z6^_TXw^A?ifI%egn?7@|P-#PjX}c6|i0mzRS?rdw2g$o+fItM}cq0MRB^C<F5@ zMcgaNV;6E1V1^=Dex|{vUrL;jMC)hrt-R2WUY7kNqiRB_iWmK}| zGgKDRr}$Mz4CqIqdHz=oCUWYJ?>G!^`Df;64a^ZyF=BlE7M?}F+GAHv41LD`qICkt zM?i5$%kCspFO-a)IcV>zO|kb^7)Z~Wv`;2&LDxBl^`ZOC$Ex}-5p8i zkDC>%750D(`w`5t)4NI*EZE-^{buT1sgXFs^lxG5Ge>>C@$OqeX;d*4rsD)1HK#o_H7^Xwsu@%RozXkpvONGcBU`j%ojlIjK8&!kiuYtjlDc zc@TNS)?i9=XZn6SE0XfgJ!<`!{KH$GM5B9Bz1$t8rN^Iw{&=yv$tGsQnTNipkD z?q2&+TFJbY)pm~3b&!};GAbhBIUMw2synuGmvPD-+idPAR=P=Ent&S-2wngSSKU$k zcB=FegN09nq;ekudt`Wk>zM!fJfR+{(v8dp9elLLess(YXC$gM{=U39ApPJ_nKFn5 z3*wkxG7{bpxE&ZI??)p8umn8Uz!Pf?@+@x&u4DRWueNGoT_4j$+ogB;Ri3+0u;rX) ztbtH|`8Ngi^5H~p_QSZJ$}_wJxQ%q}BfY{MFN2N2qp`P9(su79<^Ln4n#sn$FM8 z`ZZs#)S%)nP`9Z=AK>O6${vLi@d1`WAMshFlGC0i^2!fk{sAp3+=$7PX-z`uhF3((xs~A@3!(V+j{!FEo`ltJb~hIv z?)c};QZYf|s}fSDGP#lb!pbkNqg((CqEdM5A<Z27@W3U$=4VSFGyH z9HT}eg~#G3m__|-I=OAJ=#qZ{`0@;>nz=~3uAf~Rx z(q`TeRyuuRxHR=G#vwu-c_4YYJF($)^?!Y0%d2hoBCPIq+ZK%%L4+&~5Av;`6I)EJ z^AB#BZ)Z{h1hONA!s8IFX@gZ=5sw!`Hz19h6CxU6svDYVf6$BCXW;$)VO zNH=#}3yIV2NQwwUf@K>O%`pKH-`mGMC% z*oErNXf(bgdZgjjc2!fV<{zAr=(Bdj3Hj{+sP1keo8Tqpx1CWgKy`0mLVhkr4Q(Wi z|8(Fg;DUryb! zo(Ey!Mx92iRpz_CINGS75&UT6^yP1E_1#p=TZ!LEFwYy7NZwK!-R@;CWf{BsE#-^_ z-Qc&N$-k80JhQoK;~UWSgWn{ND=wJgyAUA+NJ&GN6#$^I$6B4+6dG1}fqh7HOShwd z^61s=(_Ip|LM$99>?AW>7o%ESEn2u(7hHy~JGYO9!zf(dRpBqG+u>}Wn_rfO^OGad z4El?$L%@>yWjy5R)w2W$(jjkOTi5i6)AW@vUSA_w*2g?X(EpYsHu#o=MZ_EIJ^ypw ztjA{_nm+>z;K;i&M>1a3L{_{zuvJ07j`+IWmA-Cj{8t?zeb0Q|N1b`8&+2jGQcrzv z7Myu&-1Meex}?L`ulDIBRUKS^ZiAJ%A!Uc#_LND9pjyAKjl98+`RQppV*-_6@w5pmRz?W%xK8d!~v)zYpr72dqoY^sy`zqH_3u`=Y z7KRVPYX{V*cb1@HAjLlS5^`$&Ex2y?;cF%!-8QNNi5ut zLqAJZTK5gW0<#SxSq#e)n%1@TXQCX-EHc|C=0@LG2v{{he*hvpx95a08>BDDFP}=& zLTE`>wgtNWzIkmREiNW1X6TtWq{(CzU%Dvu7B)U9nT5bPxyfAqg%zca#R@CVub$|m zZxSvrd{+kt%2&O$2**o#h@%+t?Feoae`_3Zf>*icA#m-m(Z$`1Yq?ga#9qLyi9u7@ zmpkaz#8rZ_B3jnj9!8j)GKfntfdzbL?H|OvS@sbquw)D}U-wCsXzVQN< z4SFO;xU>UlOXJCK@ip^i%$wi?w`>++5SQ>ZFF5~{svlYMnLi#!PKL4h zzOr|;)yO`XA;iTHg??Els;j?|`E@Qu_ANIdQClA`PxNlVfpS~{HPJ=vc=F?ZXl^kr zgAYD3OnZ82Pi@lkQ+RnO(a>_NTZu~Q2LiLTq)E|Q>XrF%C+V% z)0P*jdkC;;w3>{st!kmh0j`?;iJVvm5b7xgE}`*2%<(bvYk0=vZ^hN@N1PANRHFO4-OvI5(kN zK+MT&8#g@tyOF#j&P48T3Gkj#i<}F`a`DG6_;V$uKR?__3$dkMO9-@YSHXxQ<`5qpE;$A zNk%&#)9t4rzJ1mF1DMp$EAo5JhIHKI2Wok#YS3BYDr9gNhb2wKbbdHeh?{;>suoGpTMlc_CY4dj zg4DS)XNEk{EY_Uv!ajww!#duVJ{fFQ5y8Rxq##w=>8{em1niBLPA?rSDS2SKvi2Fn z@#H~Tzv#JopQ*(1-w{WkpU;{kOt2p=v zH4;N{B>N#XX*Ajg`10LB*;2XKYbkm|-9h8G`>rQja^(!~1~l%IbxMqWsxQZWHW3wn zgm4@%r_(E1&->Y!cU;$5=(?v-l&^W(Ufw`?kR%7aaU}_NUf|>R`Js?V;)Vt@1g~hb zlYHn`Xu>}6;@0-@1Fv}vDDREx@Ggr=-te5V>B z>`Y<%!~%qBOeqIkgd3Ho+cql9s#?_T8I^ydh+}ke1|JKXxQ`ef(EU^;{98vlM&pAx za#qsbfO+I0{p=hM1L0p|UdLlft1167F4#0o+ZOxd{%kH=6;}WIV6!M!R8fk5Sb6S! zir^=mwo}&^%p`C2R|S%JX0VXyY#sffaWaU23*G#N`b3nDB&>aidLFCcVW0ALmy4y4 zpd$pT8ptD|ys?s)?@beT@9*e4UsmMX5QLf!e29YE<#fZYj5Dqjc4h6s(%wn5jj_wR ziknIq37|^*OSXR1AvK#y02kP|7&|mF@O!j{LekZ;L1w2~P;6t70hpWxvYuVIXD{vr z0*3TX5vSr@%}?FA!fEtQKQ(vtX9c_nld&0+(7#e1F79-b^Y03c>(WD#T*#Jdm2E0$ zUuX}xMi$T|yLKW?Jh$1yr^tFo8bCeRB$Df3XZtjhJD76yK|N>MY>qsCfT@m|w`{DOfKV;`8YbSj{VZM8%^pE*ZnfVVElrmHW~NI`$6YJTkT*Pu~bCTjM-||1DFRQw11;N5TGz zyP$xA@&;b$=XQ|W(4k$Fc85vEBbU?J_#)}qV|V;g!0WoQ+x0BBKG7gl!zh|IMXZuG z#kgJBH?rDLwIqH#2-HK>FC4}M1er~Yi=`vLf*jii!!sa#)a#zM+Bos9K2X=w^p8lM5)@U5An|M~%cwF0* zFBn=`~S#e)`{q(76`i_>2x0;J%aGHB_s>R7w9)HCcm@ zu}SV%&uN)fwP;}MtC_lYpvamb8^V_<(!&w2NFdj}YYoWh@T8Ql>LGzLfSQ8Hnr9tM zy=0_gZ7q60es^%6<7$JQ?Ww?(AISkQY4Th7#5kZ+=x#nq(6UHi>5@C1^lDi~-+#J> zffhnPY{`EeN}+x}eYKu|w|Dk`gy8V>o-N{?xgI4Af*Oz=DbW-9x%*4S^LW*63&Q(M zwhalzw-b6^40lVy!59<2TiUxxA;d>T(x)ibO1t0LYC z02&w=dus5&U-BoWpr8-^o;qVqbbF7v5USoi>9%=cG-d_@b5)%8WMb>Z z<#$?t0wVN*J-2!@O?%@^m-D|&B0I19*(F&9P@taFIQt}pUNzZq@b4xc=@k(xjeM|l zQ?U(m*0hyIBplN3h=bOYEn1XX7q0|)$1T}jZ(0ZX37GHBIX|6L$OfhA2&G6HXcycwZS=H>U`>vstuIi!U(oMJd=s74CUaDFRR2nfv=KFmCmHiV zkq**k295x0@@B;Z`TF<7!lb)5l)XfBgRKFVU1#G|X@8(zBsvp|al@eLEPCED|HQH! z*;ejhnt#!jd6cmnD8?OvKEE9aQj`^nFjrjA*(#~fC#0W{fpQiYQ7*^D(Dt_|A!x(Z z5l#71m_GbV^#mbOFJHEFyXO`)260hK;F_YAECIys}tt;{=VoQ&GSn zcsO9+?Sn}yEq(1rQ{4_eM_c9xFiE1I+m{WKpkH}8IYkGDe{xv?K*KdzZEJR#QhD!T zMm!t4q>qHOpK!s+b(SIN#rt+9uJ{|VA+pJF-kK8pkdxkl{Fa5;Dezp!A6)!A6`7q} zQ`Aq<&s(lb2u}L+Lh7>WXfl=b5owzhKQ^b5LY{sMslgPn#Ue3pLpA2~$$*>COzNIb z`oH%O)H*sDNjO~BMgFEyJ#ek6_}Cb3OZ4sixjA8vU2%mo-;Xi0a9=DHAV}eG~ET2-5k$JBvCT zUBk3@q>-1k#j`T`MN?!{y+avgyb{<|9XIhVYSxU#T;fMxasJ$Z+++{Av5vS49uTN+ z)uxy(Yo@wzB6-te75PV`{pZM#qj&EkxboHwfP1ZB)tT!&yHg|hy<5XihC3JU6h@VN z+lN}UZwRwSnAz4#Y9x%rRc&Q8dt*ENU8vSkeV2HeLkz31na$?&(KWC~mwdV4A*C~j z)Xz(%ZeAbx*w206Z%hbneDyqeCNK=`e8;eo#t+3bgT(F!0|f>OjL9RHrePp)O{Xxi zy}L-v^Nxc0MlkWMH(s|fkHNslC=W1F74v80O31`_Jq1A^=w6tX+m2+-)HABG_J(VI zNLBr74wkhpi8pd(+?tU!PAS$Sp*pa=+%ZP3&g~dxIyheHsSHr*u3II64{3lm@Gyy- z{|R^>IQ3Kld75k~i>CsiXOiXoGGho#0y)u_emCwsh8@6du)95gx?1=SL$D%?$`A9J zx)^ID@EKc|+`%aNt1Z20)(m4oWzVF-^t|gObD2lw6SQ$n9tVJ3E*v8q(6y=(nqb&+ zMO*Pbdzbf5N~8ghs?%?yEiUE^lKHXWqA)n&I^V3KbF0!iMwtq>$a>;<@Ol>U#QTOt zvar}Us$g;!F3p~<5}6}qm>P=0GtuWY>K2@cvlTloa)Y-=exfHWR4%#)KfthOu%M%!k#NR&N(opsaDe_{Ae=LUt`Fc+?7rqc7sK;6Q;RMNjzm9MzQ z85!cZ<8V#Wh4EU`V;}Mt_dH{7NsuF;?`k3^lNY;NekUVl=+9Rl}oXW|-5CK*Q;0_}V4JBHRlbjuItxuS90xV49fk9QypPsO#_U9$o3V= zRJ`kr*td6I+V@2=oLtYOJFV~cYRwbm*I3D|= zUdKH`u>4kK2oKEyqE1{Ce2@=w5a@CkQ-2HKzATjmTrN=q(BurDI1f$rs+)c-ev?^8 zxE3EtW0#o{+3fl-`aX#EBb1_dIBfpz%tjG=immV^OHStvs{@@=#9kh<{Q)Z9&uUSE zzEo3aVsh~e!YpZ=wjk$v{ z_DhRf-SKuSsj&HeQG|5MTNnWge41da%heQCIcvbdGK?dJ1l&j^$p3N%pJ#`y%{l>E%{#$g(j=eHjuU+fU0`y$UJykW zNRML{UqfIPHeWFGopL390HEm5MTo?XJ)=}#o-c8Bt<+&X6Q|T6ec>bXHLgD7@`ss( z`+N|kPM<4s9lExi#a%Y2XNH0NCgn3b@=X&A0Dc9B1@6Zp{Cvb3_fNGSwF(_qs7Ld| z4!!W&?h4fWWjp0Yh<3iXhn=v+_6-G3Vm^AS5VL|e32E7X$$0&%;p;C$SNXx z%Js9yPunjRf%iwwgA2jTu&bB(Na zU;Do6o+~v^U)XVktAFMNn|5}uVf(+2?E#}_B2|?tNdNh*VBp&AQ@hX+?EgJAE?0BD z6!zehPjaDytoJmwr)-ihKzrqnY3SLx44@W_Gd_lHa^}5&Dn9KTehbx>e&4J02=BTKKrBSv58|nHaBRrvVwv;Rw zqtR(H%!AK%ad1hRgz&}Kp#f!MKw|Nt$~HTW&70YFk-Ng+?eY4T&uRs;dwmX;wjYV% zc1E?^kgT)rm?d55>_2d)&eBoL5c(3#)^Z>Z8%rr$fwxoNa~qSu?MO)Fz;Pwo!LRk4k%St*OYpR)eKc~DMg zHJsAwmN3LF!mELn8FLdmzg#BO2Db!KOX zt!G0=&Bpai-y3Xmra$R?>N%Hxh=lklCClUc)l!5HWurq>T&OP!@YerrI{c18M_SC4 z=)=nOd+2y(n>rQsp}=eV%^wD+TrBAV7<1iI^mY-D^PqZ|@Di_!U*+mAY&&XtXu@fg zZYt4mhW+NWb~~IU5;`pz)zXHE>4dt_J%`!!N=w zz`7mc#>e;bRD!4P2tP0R{G%_Wzs>%e9RY}a;~#^(8p_~~yg||gEoUbW>REg0TAhrZ{p3pE zoQ98u3$2Telx67UXRsA7P~8CGDojes(Sy)-e)-c|mFG7)8`GrsSLNl&5~51(*9@9R zV!`b6nq1~_H-1@j3A^u07V}(&N%GWIsle}YkB6|7ueaPZzV#XX=CeFF97kK$p#NDj zrGSx{fL76tFmJATp&8hQGr|gGcDtjXTH-eOF0p8eqq6LzJlT{s^FWld{vsmEm9yfG z!qo%!aL5U)!SIM3t8mTL{8BF9zxx7fc_2*3?X&=NXs6Gz_-cFTXp0Wriqm9m%s9zK zChUQsxmZnNLhT=>J zY*%$%C7_-%5=&LRe+|;Ona+F^lNa7N;#81zQ8+=tpt(<)Wb-nX`}#f7<}ww!hjx~i zJUu+a3O9|&u*(gY2f^)rPbCKZv_zIlw!9^2p9Lek9k}{(xsmUSex&y*_+|~d4>k};#md^h^)(NwVJ7k|j0f55bdS_+&V3$d1WJ3~KU#Uo0aAaoTmO5-;3z z=W{E;Af+HG&1NwsM(DRQVwFf1vveUlHZH7#r(wU^N0gQ&m~e74#B`{{j9Q-3)8vZH2`Knu3fYN4GckqvPqV4%PuF0S-d1Qw;Io)F(v3(4ag_=jNOrXKJRl^`n^O z<+U%~ec!UUDWG?6WVyLqP-_^9Url=><2HVqv#saLrn^jz#^o1(+HCPB=N=@CsiRSL z?9}flBk%MslT7?U=ZE(_S+De_jxk;_S0PWsqW#4U#q5GAVKpS#hihXUsK?IivIy^zDL)O?)|-h1&*VO>)UDj;9g_t=IgNKpG&( zs?c#IN{75B0`h{~;Q>=XXU8l`thNe4_e_8I~{(7XG zq_UC*Z~AF0`w!+SbP)!Ofepg%B|%D$Df&SkI=+imT1Bu|ODkVL9_HL2h8i!+kRxRZ zugUn|&!EA4tl{VhyHR`tAxrk6?|`oJo1hcEzo+!;X>Y2y+!au{n*{Ykzw?aMx+Edjd)XGI2CneJ4`gEsKtKaC_kK zw}bw?(AKLrx^XRV0!8MiL%4~;pY*~LNOD8#a1(iM;F|M#-j?q@y}LIQ>k}Q@C{EmQ zbKAe+kA3V~>$2-02-950l6z0b@2{-{uxh~rMfKz&Om~cnjQ4Y(-yxe_63P!RP!^48FOKgNhsiit zYij-K4Ql>IPjkjCsdJqbR)B0h%NepmT0H!IIM2*H*+YI^k9|vt^1k)8S{FU`ftP{= z9Rsc&exxj@o*`oe9*mxPYj5!=6tYwC*DX5x4K2QzvUKGP;qIiwgnbXDjDji{E8P)p z|E)TYcuZWjLF6HjgQ@qxX3K_bHpE~Cj_@cyssTqZfYGGCa5EcdrzEb1O3@l;ixKy3 zeFQDbFF_~L)d-=;#d1JRUYdq^VmVn>?OEUhvFv2^@^CcTf&|Cp>wSQW3Ym|^r+nq zorX|v-vaOp?C6)s*c|u}O2>&luUcyr)k|M}lNIDz(I|V`9lp<;3RvR_)ggS+Y8KL1DH8Zzi7!9>YLg)$Qk(}oeb ze@xg%_|A56i$`Y5{Q&4{1d+%O(Y`R?7Lgce2d;8NEAk=yy%KShh4ruglOYe#6hfNC zHc&pOD2BiQJlkr2YJ~SU&X5bjudZs=S8}w0I)?E9`Z&+9*pLfo;1o$4sLGPeGc!iJ z0xKYT_|_njeN4f8=;0)H@L;G97Kieg)l~e!&vNqt@}?s?-WMh!ZtgegyW#@+W_X>} z7iS~0=|jo^CsCZ6_(gqsp#--kVq3CzxBd?+(zcM+M%YQQ%?-W_9{I-#)%>*FOatNk zm2#fU7ycL$h#-u7fv>Ey{Q!P&uio*DHcT}Lf>D=b- ziGDWyQ7aD^V?O~ySIkC-6X9N#cOJrI{X@vE~##M?zAWE^X-CnJs}UYx!*>y$HX@+c15ZZByJv8KR?S?^gJ?s3I6eFqn_azu1HIp z#^Zk{87wpgXye^-Qq!3{ARBa}XYYaEJnSk2+UJ+HERdZO1FQxwb_*iUii4Isg#=h* zdB7}zAa;be&+`9;by4_{gV^d&-vyHl#3}e!$1_+>P?X zz9wDWOQ-Qt9U#sfytWH@!EYwxDvuYdWGE!;Q;@{W@h5hE?gIRiE`+aKtiUk&5*#xk zEh%$d)Di1D`yvg*1^|->?c8jdxHfXv+?Y{M{@6{sJ~g~iv{I_$EAlGL_5R#5UhCk{WQ@|-)V@2D+AoQJ zQlXY49&Dz~63iQ%Pl)6dTV826`s)n12M~BS_VK;_Ru8T+$C%?B`sO!)Y(>=8TgK1~ zN~5tbZxvG83G}d=Z09ec|eZa zF>bzVM^%TI2~k_IHhb~3bA|kky>lfLAhXW0V-m-s)Zb@U?II~PG84k;iGJR%8pa8C zeNto(&FEuuelttBAPk`~SYx$3z z(CXU#v(wp!oA{5?!N%dQbE(SzK9M*y3O_!Q0F(~@C>&V&r={~k|JPW+>qThI3;32{ z^uL_`D4`cPv(GxDi(USsf`E&y{znDz@4VQ}KV@f#TwHGfCH+bb0a&J_|972#w|u37 zKyM+;SnB#>`+eA1%ls>2h<4PeSY!?wm+>o zKcWWn^sN?=|9ls))loHatNsQ6a7*rV^Q1n!R*QyiZTyGP!CY{lWj8YIALYZI%G33K zC?9+>x02>dBXo^xL`<^_$)(u=LIm2@ z%7V*e#*W%@V8I`O%=o%CW=F1fU?{Fr(1=a&U*W%}pnxhRj7Ep&4FFXW6x|8yz7tO% za)gi$-~(<=4;6Jv%P5j-;fxNXr8Yh-^W7%5oI1l5L>a=OB{W{$sP!so() zs%i_@-QlcLU2}k4rupPCCORx3a1A`()Xrx`YaGKrful^`J&j_dN=K$x#|45Eq5xJb4}Wzad49|~Pc8hB!E!US8;(DlRTCee zJ=mbklu7%vZXkAFBaXsDbK@p4FOwr9NtXXK!tg<46NvWXCU8|2J>sPU{=}&qj&7e9 z6&6u?b?+_FssS=u97-dA7qRA-+Se`c)5%?OerO+9ua=8Y4{8Vb8VWVaDoB07>2(>X z5$!nb{JfGbKu^=74vGGBLD(pi$k;IY@p20LQ7CJk*Gwp|763qioHECe{_u{yamUtn zJe}55ZO<~GF7?=O)pajHbHg(4{p`j)tS>^NgLnrB;x1aX^vHIevR|HoFd#&Wf7I@g z9eS!vr>jx6r{m8hTzP~MBtx-M1Sxf{O4vEF!a~A@uW@};PLe4!uv#q?oS_rjH6|{w zbNAsLj$W6g>^iF$;}s_KLT@Ca8$qRdH3_@C)s7>2VXu7?7E#|$j!O(^0EwwgE_8vk7ctrM%Mth~O=x?sX(yG4Cww@^x)-Ob^c@N_crPLz)~>Rq6iVI?=_)p zuK1%Ycp+4dD7#Vj>9eC5yU+rD2t5J3uzg4-0eLXF-AI!VT*c*eG)l2CA5y_a5Wd}? z404pinY{U>LA>t}sB6WEbtT;)WBsIi-S6bD?ysHdmwFP`;|$q_N6}kUdw^MfD?LSTm=FoB*-5W(9{D9ZskF4>gIGKfDS&0{|8!=%bSX7r z3Q=&P);A=2c{@-Os^mt!P}!a_<_m)OAb+_(qr4#|SWG8_{YyZXUG`;T8A`(CX&B_=eWArhLLa?-0f8cgl|1|Sc`(rL`R<8D4HGU;xzHF zLZg^nzwax|5aCLSyeslgfZeQ1zh=PfD6;Yh zFs|8DRVyb>e-Y8E8b)x{_`n+Tx9*4>#kf`{yeHMDcRAuQv5J)U48+4@Y^(kqu7>ER z{|xlJ$R1hNkF~EgBkliIguf1_xOkTzg&Y1qHd(54x)!kIY?3gshpiO$KnwE>wpRCiUEchTr z1ql|RYXm`I={k2VhDaPH-wNY>Qq&6P2AvwY&)8mi^#j zmjADN;ncX*{sry7?!?G+0pL5(oK1t09zhr^f*$$EF4!?zCB))$KA;sCzGT-{q_at#0KlMI3(l@S$S;=uF_1)z z_OG+TJrCt=%yhM!*`%m|A~{jYZ#P`Cs#-Thp|4QL@gXGG9g@^roS5uQbaS`k6r9Uc zAv-H#!$#47fz!OH8dY#Ue95#^g+6b%(fk4=_HT8fyM2XD;a7MaVNydk! zF3-%-isOA~wLb5RotecH#V@Ddvz@U?3Ee$c*5MjAEz%9J>g4>Rudt!_`{?~df|dhB zs!VVphZqghg_xsbUXhS<=}-S?EdsVk?8X3Ei(;b44FJi`fHlrolDW_YC;mI1gzlvy z$9%jn-U~BxlFYV$xWRscSf280x;^3YV`^nDuCay_<$&R3L*;AG%u1#6`s(#4Gtc9Z zz>^aRaD)Q45S}?~UJ0*saP2oT|6MgF_s$}3u)sqr_km&7BiA0Td_y$Gl{!Sbw=n&w zCixSISk=C0jPxcqb`-_Z*`iY4U^AdbqVNF4s-3~9v+03a8B9!|Wf*k$9<+^A#i^2w zz~v>u{!|&@qMr}U>Yq7ORinDf3X3F2w+AgD6P!Yqbi+0Qru@usN=|DS&xC|-q)|V= zk3}uVt19>*)LujI=Px8X0t_m_8TW&aeh}=Bi!y!+wH9O#-*@vc(n>?>SoMK)ygM>I*^BHJ8VKU2n9%SxG5{9r7$Lp6Nd*D(0sP_yQn{M+=3uiJHQz4&iCav#1C3VkRmekZ>WAg>k#n989>Q>!q>Wy z3@>>IOTyPEx@46;4I9co?e+O^i1LaEoM;T;1oXg+tOE3>hX(B3hOVfJ&H~956pZDn ziOy5O`ugyI2eAU`r%DtEez)&J_Rzf%>Nj#T>J8P6At%qsAKhwqkXNp5fc20{c4&7n ze-^YdnmgFYhc(wD8l#qkBr-@RXkp@zUS)wimV*xHFL)UGU(26G(!&sEd9(rB;0qC? zJZ&cjoPsCjVIrH7b&}6%0IJ_X_L}>k0POgo!$lsiSsB;C-ca?T`Zh=0e;)giflWSl z(D;G16c@btkP|szlJ_$0uFaL|I3fUTh~uwN`|&;EQMK$s2j&q3^Wm~q7(P=NnkPO3 zWn{?cNYrxOJo329rQ=aNdPw}rO|8(i$rnwtSO~Lnuc~NxU1g$oo$Z7Df{3|}dh?z@ zYne8h>E3DUm+W@guk^pH$Bin#T$CtErBg85IM+H6H%gNPV*aY>a_Jq1*t?$msZ

    v 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 cT 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�h6dVVhO8TrY<)9=T`W?ZED~w zctQNWPu9Y@r zwpmZtCnV43VhoWQ5|XPhw^%dPR#ilhFHv=YJUmyvUex{Y>5&ze@91v?>5p4^dQsyP z;>k(qRQZC`<)<6JA$*?{)#)D4)hQt_tp;(pZJZa?zIaAg`Fkb~=33zs5#No;q6n`_ zk>BR){Use`tw9L#HHWpnMVJ}+%Z1z~6tDU>G3Y?T*y41E^wsu%cDane-P^gC+YebyL}j~kEm^Tol1giIQ4q-$9Ol2iv` z;SS?Z5xchJj3=D*#Qb?hD{U549Sb-k24wV;Z!&nLCWJNmY&11YT2NQ6i_VCU7 zA;woqht(3Nyv!JtXAyEr%X>;7k{u-BK{b5}^QgSWBa1SV;<0gYIpD{YaQ*RJJ9|^j zX$w~_!*^~_Np)p5 z^)SR({#Of*6(G`8-#P5;YZ2)R3zOgl(W5)5oH6#9p;D$v+*uqcd!@V03~zdPOb@RN zjTz5X$ewk2dEwQ%WmozJ@xjQSi6MXDm+`Zo8~)7$O5H)bZWLu3U}uJZDFPCG-hM5a zpe2@O5y?Hp>%go>2ealAAxHJ>n>(TGkRD=rv&zHmeAbz%ryik7h48V3z1L++@*+S2 zaCcW<9U<8wH*~~p&b-m#C(}WOoNp#t(ekR$00kG0pGGBRrlayB&h7W;5fUqXM51wF zK!n?C*444O#a*}o7<_x^CwdQnT#X!y3UgM>O?>;jlCS*BXILA2k*X0IjP}k{<|6^= zde|R&eT_3SLN5(n_W{G12vY=ysJ$5=uC4D-+!G^@S>O%Asjw?TGd-zj#PCJW4UF#K z5jQA5>}OC;t>CS#Bnct=EvG8X%Ad|paE<0n*aEC~VO^Z#7+<;|j2SH+L z?%Hskt1mJ%KO{#3w{a_aVtP0n)`@p~oPVZ<*lhVVb%oQXwMr)1<`+G0IL!}IR{4l` zZjTWjR(T5Q+3MNo-cbDlO%3Nn+^LRU+(KF+T9)V=iEpZvbS>_zv+znlNYkZvgmw1; zcK*gqsjp>tbMgzstLWFnwEW3g6tdwUcC73Y4pJ9@_e7lG*2#J0|zD;1FiUBf7>A;TQPpIR!prToah^jDr%QCE?2Dl%Q2!!Qw z_Q~WWhXRCuP3qdFOeOxbJD`4f5hz=5AeB$ogC2sdG^YDDZxVot!C$p|GUG<@B?2i3 z2=e<6A6P<%yD-rs<;}Muiq^BKKc=NlcR9f!y0RRy+qIHwCIWqO!vlw8e^R ztO8vzXVdf#d@>H=n=6d{M}O1#UQ6!ZclFhiE~Y?O>!4G5`)n!tTk)OZ%nB^$78o-* z`MQPGd5kFJGEtzn~>q6Z?8?&N#Ule z{IyXKVc)Gm1fxxCxS=h`2_A3bt5G*!g29kZpB$xl*(?%`C)2exk38IE%y_<$Il3(7 z07WZq`XQ}De5WXxcI53|F1ab)txf+M0&cEq$NAv)5I)>1+G;(#{SL835&nU=KdPNR z&kfJF9u}F^&tGn*qbmgQ$9D)3jhB_Dp*tUzXsXP&smafzV}}H!uSowb5EMlZJI(%D z1R0p&2M>lGSY9m7i2kPylWvDuq=a!@5e{9x%7xR7iJJ#E8=46yRl&+#!lhS^*_ExE zD@7b3!r|GqI>0#*p&+nQDZ=n;Sp$+I=MG6i;gQMmjAj_c#|~$^LjoBEo%FqeRpKYo zVw7|2F0m1*wJF7Asg=5EGLh2dcydN7@uqquSyoK^8j$~0)j#6oMkbdF9Tmj#3}>jC zppwZVfOJ4im#3~ciIRpE4$(Nn&YL(IH0H9ak^D-mR9+&Q$)X*cpO>CtqRb;7Q73w; zR;;^$o;x2^N0%H29qL5I4Ka~}IiCeF{M$~5q6b#SvE*b_$veVKo5z*hgFq6Sqh3F* zCTzDFk-89i4CL0LCWi^J4K8MW4ReS3EWV;8c3|0PhHh-K+ZwovHhOkExEgWzAbYn8 z-ac+VapZzRjwEIh3*qXA`NV*?Wl#1tx1qFZr_<9D6ZuLA8VFI>R^mFK^bkxxL`%J% z3qgzjZKj5CDpDh^mRW#N{^uHF8F^0{%*J$BIOE4t6BmJ^^}8XbZn7Wqj)u&Wt7TOm ze&&c82UOKANTuWOG`*M3F#X2McD)rv~#tzB}v`&AJ)|oj#Bv9q`pa0ihJj} z3U-Vxq76AoT{FQ6iNw4hOViM7$fb8sJ$*NuheeR2TQPIruiA|rn2}FkSDQ%kU%0`N zf;x-AWFH>Ly3t|_lvZT0sWx-r)u27OnGuO8J3~+Bz7{svuXA-JoV)-eGt`LQh0dW8 zXZO_eM~BP3XW-Zs?h}%upcYDX8#Wfp9Ybqt7Nd|lpje%}P+wVzwngN{9i&yA?gP!T zEKmZQUxwCl@Mr`U`bNvK0k2a^H?EK<|3+&idMrwbC6({R_Sc<(?-@l?`(*a{S_!V}ShCFvH4 zzN}?7u~An2`%b;)QkqCD)kyp@^A=s_D5IDn*x0Q6ILMB6^bcx9%;po; zFqcEZc2j@koFny;YoKm9m@#4WQS!oXDBl`%lnVse#hE7c9jQDT*XmAvj78e^17y*> zmtxO=&V(BXx0J%?mU23xD^g<#j9Y>j)LS@cl#4276P3_tNv2GKh`3idZZ`vMDX&64*IK1E1&Lzc5T>ZNm~p*f4<^c z;gp9|p2a&5c^r<1E$fKdq@Z4dv8u^87lL;c|5r3^wAqn_wO*TGJ_JrmMMK*U&CHXg z1kuHs^-^T)Gu54ib#2?))J0cMhmeP$oe;ANJjWVJ=ZQHvUqSs)x*pfH2)C}h#LC#ia<+#?ttcu z_1-?vfsEeGRb16jjp9bMcYMozwblA#-WI?uJMYH~l?6P3T-0d;$Q1VU9Hu~h+_okj zVx8{?bw<>f%faR9fy$*S>WAOn{lk^35eN$^;$b(LtV#>B)qj=Zv@`{He`3qwIq6A1Zu9hb%4bjhK#Y1F8}+bHVU)f zNf@Y;4wt>JKCQjJ6HqD-4&%U&@!S(v(i0_$DK;WLMpMtQIt}P0WBF3GXPTJbc%l^$u#CU3Aq|J)# zVuuBGUJC4LAik~c(;p?cWLF+Ok-q+ zm8SY^ZHX7_8D4d5ikA7QQ=qnIuk54lBL4D#TQkU{*e6k-| zNB9S@k-YHQBYg~LTQO5x1f*?Vxr)|EAE|6I(LlF@Y*ALC`zjv2^aZbg3dO6ODkm2v zY0QYIe_~3q{YqlDu`;y0v7y4lxYQG(0UFT>p(>tV#gC(?Pa; z7R-*#ZWM7O9p0}6zY}bmwj8+F*@ll&&mBzzb8cem!umE?%|y~2ZJZ5DM_vN(rK2+Bx>Ns*UfP-MluOD6fIcxsTU1y9PB>U@Y+?A>g)Q{Vk#uaS?K zO~SV)aNTgsw)LLH9C2 zq}1rZUD?c}9PN+|ru$&m@!V0{n`7WXFJEK`?V>s6z+Y*?U&(zFDQ)1_g%*qnJahyl zdTruV35e`+BwYkdmf}qOd>3EA4_g!ZmB9URvc}`UI&dqvI)mKR5+uq0%BU4B!c&#u z2m9?X!)G`p2%u$}9NFHVksdok&Xw zRN@NIr3(7TDbw-5TE9Npy}9jT-Ov!D6LZ35sJM5jUo*CWzj7?x*(m*`$yz6MoS0{K zDVEJ29_J-{U7JTXK?K0jb85PS*xm9~i)YGra^hS;4!o9wSCNLCL6WJ*>&m16=Rwf+ zo=j_8q}log+j_vZES>XOvR(sPvUYtuYUI6ui7FSiOg(Vc^eQGh_Qe7AUI-zIbzuMV zFA>z8Z?bVFi@dYb*T{KB)-^NYk`pPec=y4ucjbv-;XgTm2496=nfhdNN6%<3RqwS@ z_rST?)la?=QQD9;yJZfTl$`*8il!jt8_HXp+iPZR#6pqq5h7BaR#8JFyrC1xU9?sB zFLxSxg>96ImTX#2EYWiI=K7@iFxyDqcT?v=R{901qz;b@06%L+Q(4}#d9VlOgM~I^ zR2Knv0)j3IdF==^iTL+wb~udgGs5qYs%*g(urH=W&i{JvAIqR4=3fhy5PHu8YK?6S zRgLIJ!@Kg&$3ee3DCN@`Ac(7URQr4-31ReCDDe^|Ustjdn+#&Ujy*M^HW8ftm7VM4(M zi1aQ|C%e7*ZoU-UP|!B6&n!C?W11bu(KfK32+sbnp?LpC(^bbs@kM*-2I-RS5ReoQ zkP-xz?gjw~1(cLjdTFGWT*_tXl5UWYX6a7p?tH`Vz4r(6In3ONy>sq8=X}ri&WV@3 zs3{oi>{YxFa5lfOPzO+SNjycz2YnU`ir~PBI3s#olI>fESG=-kw|o@eNDt_q&kTS` ze$?^d7VAheO+}xZXW&xJRPG^@wbqf2@>5wa;{U5)vL22&d&FyKsy2qzTQaz|*^aO##yT?I{DLIEX*W&UAuWnL@r3vFW6;9Eub8<@c?ydWllxiP`9e zEbQNE@x>eU_H_K99*wwxG97_jwyRIUVQ_N{AwsyLLW|(P4< z0~~0?wd;q)dG%6h$_jOse%UCscjf7J`iWrsSL4Qz^yq$zV0^-8?lW5g^5_s%_=r7! zu90l0kJ)%16W^R#tcfv%`vz+sIb_?kvPz9u2Ehf?9b$J|;jr?f)Giw1bheQl>Agr| zM9`&vU<}XD2>NI4LTPJNi3=g1G!766l{#(chEPEc6CLb$)S|3cbnS5^{?x^-cyJx!+_W~2Ygd4mXiD1p z@37-AJAlVQC{bgxG|`)s2c<)Q-H2RUEHf1w>l6Ar#w;?y7mPl;oj#%?Ls>z#ME-Y- zMs6;$v9BNBO2v~t)VvUx_?V4wy@-P96=+Es~V83Lrgwi`&L;8-=a* z4TQ$aL_BYL=fxhF#wa;L=k8fg^Y_ZDw@l}DD6EpO#{OdhiiWB-TCOHSK4b&rsBg2w z2^&r}cV#q`E$W~NYr&^7Kwwi;?k*3GDfaY6oVCVgBFh8ic}u8xpPdl{t3>>NY?)-o z?N7CvUmJrgO3jrhLyZZ(UwjMxNv@J${H$N$hp)?A8__ofY}a)geX#Z(a`{D@x5C9P z!-@4??_9AZB(HQs+ zZXx;AEVzPZJix>J>IYv5gtx;xO)cP$J6+XL&X5HK)=7o3-^b4iO{}@VO9Ge;|5^$y zdES5#e@e}1(BV2oWzN(*fmPKcg;886amyzm-BdA_b~>|Y`KkDD9XrAt<+n_ZOm{Gn>}V)W7ZmaQWzL(g+r6G#<-O>v?e&l7>Y}32w$w1& z%86}Rk((hAdg5)_Z*eWWGQVW|hCChUb3QTZr>$&+hAB$uyBslUNHJE?8%lg8lBk7n zJxWRlgThSl4){)oRq+b1dqe_Qrb8^PSo&)>+PkNgz++C%aZ`Hrc;fBIF5T{A#0;{H zm3OL0?u;;VHm1zcV3$vl1Hl8h9@ww0o~xSX9fk}kPr{u2HM+iS<-X1TzV>C+hfck{ zDMEPNjbJ`PQ6UvPX8PlX;=AI~MQKQ-Zn`i6zQQN>@5ehH@CnaZ$)hX#aesirsbj*L zUpiG}!bc>1qm_|Nz!IookfdRzMDhFb9DI|W(Vs~=weY5xr6j3kPklqecZkjpnyajd z@sYO^u8jJ_(V@6<%19AN0bP`)24=-bw;m5!%IY5ku3L@1;z{J&OBHL`Vb~v{Gbs8| zqX$CA-^TcARuge`8_Ykgey6AAXxgK{}L zoUHF%ubKLRx)lX^SgEKpZzl}EL$YZ)X)H>uMW;8D)j#BW6)#U)nQL>hc^g?%8?bgV zu&W{VLbq)p17{}hnsY9Ef^BuO54OvpI^wyD#(a-1#-IMSP)hc<5N>$VY8MF~mg1c` zCvn-E+nP}uT4gdrS>eG3Fx?IAAC=ZOLD;E%NB zw8&9m&R5ZHe*)7=xTZ98Rc}OWLsXp1$8X&oYtb&C0aT5+g8UAp>D0Wkqvm=V@y$Zi zTSHi{*KEt+8=by!MLSJ=rSP6$y$Q8XA12C>Yo3U`BL6Lkz`l0I@|*&|70WXd3^YB@ z(6#l+mjEWSxi&D2k{!q3f}b~xk?0+^X@LJj)V!C*&HF=q?{FJH?l=lF$SGKjLyD_e z>3zP^`_dPgI?$rB8auSNC0a}IWoWNPv;gS~MuGM(Hl;{y*k5qXwuQ^Z4isj}X+C^) z*jlk50G9uSzK;KeT=07QY&+N-Ch`-HQt`3t%+E0yiEi>YH4{b%V;MEI z`|JO$uQoHheV&IMR7x)*9X{qVAEsfr1+`;DMmiH>H&K#PvL%8`ha)Ab%RLP5UHe?_ z?WKA*^Aa3BZut70&i^YFTB@-bG#qzNtMZ85d~Z@*kyy^3Wiz$7DtBr&B(a31?y$o& zy?ZH)keD?N{_M9aOT+4?T;6q`MQ3@=0Q1HsC|YPmQMs!=^>kfN7jmn}w;W|y`#@Ht zm8QaGSP1_~m4}tFMYV?vv3H)9yhNMc&j#l^zsYyx*3J>=^nqzv9 zC~o}pNlzT(eqqZi+%F%kt)uxeaRh8=Z{&VPgIZJIC%pG~st3_lH5Duie7c}lwVza%$UjJmBt zIzzQRq?wN~gmd~f`Z6A8A-hR#46~u7gXu3hk}<#0f!#OUtc0XzW0J`G^=ugq%fAdx z#N(j)e5WTN2*-R)Ce6+$cPk#jh^!h89RBa>2AE2L#v{RD^VcQbr%JlSU$K5_GDz3bV+Sia zC}zGBC=nFMC=l1`x0ewVI`u7LIuYeiBp&gP8~+<*hrMYkYA`JVe^0SPl=EJnlUZ?` zkAx`4?nxqk1xVm0N$W`}e3Igyq`v>!JxSaDwc`gQEQ6f0D+ZB)cbx zSOAc~|FwIP3jb^80=v~tqDumbawzAc+W93ZVU68!4X9Cj|m6Yi}EN z7G3m`?MOWNk0*wC2tIIC23%=JP5?@rVaw|3c}Jxw!{#L?9Pf6HWxLvPR4I5bt?tk; zkwRq*zW<0d;eI%2SZJ5X=R*)8UqZ>{j>PC7R`UrVTFLwy-Tp4jP(b&S zouVCRVl|OZFhXo-GZY2vSO(8)kbn}qdCRcvT+n=3ugarlWyDJiBD!q?S;(W^tO_q_49MI-SzA}6MPEIfnMwZLc9>W&ygraHpKH~PwQ z+)<_pW^d0Yl=kvWadzAr!km5>Xpwtkw?22aUmZrOD)2+v+gJZZHrxJ-^m^ux*GL!o z%}m`rl?@S8Pe(H&Wd!`kMuv?l4J*U;Jw#QI_w53c&9VIl2eHlP8e!ZGG(vQVyVn!) zj8||a&Z{6*k~>keOOvlcF(@V5B;Fm4rh+5Yj;XJMdYE#dqFWmb-GBZtM-Hk`rcqKh z(#9+X83NBjl9`{GvM2qvBu8Ji82PKmc$ZlihXWN|JEz<)GRsptk7EDUa#M1yhy(nz zEA!@uvS~38=jp4s^CkIlkeJ$xzl z_YxlGDF2*oEw$$rv>!tZ$DiM#54UKBrYz;~m^kcMDtG6^`LH`29og3OdoqcU1T{l3`TfO(OT@}>h6d~apB~`2$dO(})se_MO-X1JE{MFGp zi7&m=94E)x7QVYD7M!s6VC34CV@vQ@M*O~uW&6VUax`U8=f)zRj`JR7i~QMxN?9dG z3(nbGYatVl#|+Kzh1=r`Iih_YesDAqOhi$~t4p z8boL zlV@2Rjz+0FK#VG8tl4aHhHa`IAHU16cwOk}yf;DCcDwOYkxFDY{lSWlt(mF|EB_u+ zE%d_?1C*YryP(9ap_AAmQD)DEn;9WKEEB=CLAYmYgktE@`256S%U+69UZz|Ul%0GK ze9_=i2k*^&Z*hlV1VjHifxXw})tsYD>N0?4Hq9TvFJu zgb5A)vM~E@IPODy!DMTh{rF6yPaW3%OIf3y3R3=+Qu^}|$c%ZE#3Q#-21C9NPVk1}UF1$j%WZJm<^+pfo_{&0 z&-yj#3Z^l8n_Q%BWX0;m&~3U6x>DPg>h(a9Bnl2N#TAZy*S=A z>O_|Brw;3qtISZ0nD<2vm*)iw6m$ zZx#03)~PYfc^_cf7eoqKk1nqy-l_OTjzV2eF@aAcF9mN&!gl+8h{L`sJV(siXDSD! ze=B!dzPo4hQ~RA=^*86BDIr_@`NqYGG?SI^&-qMVX4`3o7Wf_4WfV6ZO$Y6}KfD_A z)MPy$Yr0$Zm3_!|R{I@@%aH>#KL@;H_$rI&VX=~69x|j&{QmOEg>ZlOb84;R+px?{ z1SAE$yx`WQeE-QL{bmABK>&+~ERsRGw1aQ}T^5vo<@gfnj{B|=D%s|xOI%JK;1j6* z(2mZ)M&Ea-Mox2|If66w5-wFV080tRI%17q$}ro$^ob!G4qFaXtO= zdGS9c#IU$D6JfB7j3A$KFzP-HDNzm?4=GWeJbf8Q7EDHP7}#q!@BdZHtm@C;hb0mj z!SVZnt=^wnOXQ=^N3(}M^ryW!Yfy8u*`ysoNF*HhItE{OeKFHfxo3U@m}v2#oE#9r zx$1?Xh0ZG-3mG=JGd1UpnBWAqo7Lr8Z#OtRPcQrqnxk)D=9ygFb^5X0yHnZc*oh6?(F)mNLs8QICy)s8%$R zsV7e#An%ZfmwwN2(VThs2qjurtE1IW2N$c*3kS#9uE3QJG17)Lvn*B8S$U}nT~*Pr zP2YJa>AvZx{kN&$wIg}zxjJMu6xeWy-~Mn5`jBJC-*Ch;43mG=`#mgnGI1nUTKU}i3N_dO1OV{;KJej z(MJ~c9Y4Mh=F9vf=SR!~kO?+u-aJEIWYMFzHa(@Gim>E-!LR5{vQfdmhgy`{9&~R# z%~GD_wI>zqZB71mp-;w-%d9OQbN)KGmE!qVnkOF>4YR`qi9zgoxU!AaIn&a)7OMLD9uZ-%@=w198xz@M-sS>E`^N$ZkTDH$YpO%TW6En=4Dl)u^(I4$}s7&oe6*{aWbIQjz~$W#zpj zPbS+fHex}k+sHpkfHQ=xH_ z=n>VK4p=C|QirGJ&8HWnyZZ5ON$Z4Y^hT@gSG%+>-S`Bl`pY%kxywVMPC^3-P6E|t zINCJzOiKbA7`;Qt&`hH-bwiMy=a9!3ux(qx6LY`#y9J z;yIr-5g40=270mhZ=6F*?PN&b1v)J%brw74%=K_A@Wy5^*i!1*S9?>6F@>eeI|!S% zJ;-Fw>BrAC4}zxa*b~PQa59oeT*a4{f@V#L*AI3rs(QM21Z~B354acDfVnd=KYTKG zBp1VgMRscUdsb6We?{PEBSZ$%eb1>YUoJ~Cp+8H2erxu`x=PM zAkD%`u8dV`Mcsr)s@J+L(z*x(JFA+wUpHf1GBn1($hrF#VYPBJ)!a)@&az&_$pVv8G5I?EGHJchs%C6h|4#qVsLyMn&+-1YcS4oVLUqm ziM})^XRve-vuT$^t||B+fqW;1fJ94W9Ta(yLi7<*9T%FxP@am)44>KF_mA>}>BYcsg#s$Io`T=+ zQ^JQdB&EwTdxA%5+$ym7{BJ!cN?x4hGUlmH*74YW5v4chMKzWdtb)X%JjHItQS_|@ zsafvW->}|mFuz`nZ)hnCoJv%wQ-B7)LQ-RB+lVe^U1wniLdRVJhrquw4Y9b#!?~*w zv@{xIB;lz9hHask0pc{}*0nSNZ-5633F! zmHrtc>@ofi2luB5G`P)(okgrBMnedDtx*=I6*W@!xeVdgXHWA((et1zQtY^YvUdjB zO_GsfQ{Jt@h?xV|S2$Nb?_`+gp= z8KZI0iR8XRl)>A!ms-fBa_WDjxVM>QXk}&a79ACZiz%NM7wnOk zzclSPBUt>qswzYfS4`YYb`APW|Hv`8l zs~E3eLhDUDB$>^nP*+sm_twU#2i8)LxxTofv@7)G8723)^z(y^keQ(pF3w#m+ecj_T| zm0I70wi5LkCsh09o_h*#ubo1d0jSH>I z>$~bxvrj#5D0SSj`@&)->-vsLeTYz)sqrO=Cpn|j+aJx~*qg)8k3vP!tg0J}EW#1v zC?JP}I-1@W*fj+_x})n}?cQ0E8XpuiuS-UPPVb$-@J)XTQJ^|IOz1oyV@H<8)-XP| zQIL}@-_(QY+~^qZjVE>gOD$`R@_L{0#@*3gd#RRbZx0j_H-Zqv;m&Od4BIJxRqkU6 zxa{Ohwq5hwDfdl;@oIBb0nY{R+xpDpkTWn9wGzn9w&U7Qq{|uE5FJup!z2sa*QAS? zbM7v!jK!DP*0=2#G6?g-2Ep!-N6UcfO$yH?2tcrbp3x7yrw{q~VF2t^!o#KEM+!5t zp$0~v?{_!#)5PEeSdNrf9CbYGBVuFGoija1)#@Mm-oSVKliQaGzC^EEgQo!HCdf8K zB$^=W?=05F649P3u$_1jofkU?*JeaYPJ;L5zYpQEudv_Jmv?A9$T}kuX#zwvFI$2W zj$pvWr#>TG2n0!eW!NgKa5luVgL3ygevn3=B>%`Q-Q)e9PrG`-v7+Jc%2-C;JT_-U z2uazEVe~@of1%^Ptg{$^|5}oKOt|+lkX7{(&RNJa9YUZ(_m}IhrVS_O{i~{!FNb~z z(GN$nzus$KP)b(K|NBTbt1bq=(&q`SjRg?3NBSdMTvHU_=9shG;N4^1z3BXCOxyxsjDv;~+uoTm zzbY}Z!AeD(zCh7CiM8Lr;~QEP+CiB!Ov}hTg@RV5hQ*5Xl0svOfG4ePgM+_7`gG$$raTj!)g+`sZgvLnR%V^FyTWOuj+W$e%~X^QE~52YCOe zc80zofs7#KlT8;D+EVPmyo9YL7ia=~LJHM7bqmU~%sI%c_jhHI)18+%z5DnR+4NTdfL|&oD#gTNhmi{T zmrn0H5EUG5{^QSlz-r84Po6mO4mB|VrL5va2VMCXhKyC(bSm6fTYa}XuI!G@>`@nA z0=kRAorvxT7>iQigDTw3PN@i)16c6>ZRw+QW<5-tEc-3+dJn~{5;-q_sH`w0O$NhbC zd9$t*y}#YwShQ}&nNEdV5aSomLHp8M7j>F^XP0tFQbAYrlLqKW3VoYoxj2WGu07d5 zUXB0nh>=Ys;hv)O%zNUL+r{ zH{X&(PmvRZH7*X@?1?uN_`i684?je=lU6ivKHaD|Q2^5113eIjWlo?PgUw-fAU7KA zVf%mrh8>pgYB6l$RRykZ?TDW|BVmn)x#i}r%U62ES`}XC30gYVH32(s^trYLU{fj% zvt4)TdcDu18D*REYCyWgg1B)w)AvWEKPBZ$ReHw#NtUK!N;8W%A6LR1-qY=Es$VK$ z+)~DTMs=HxKXT{bb(!uy@{p#nasEUO>r@SV6h&BgbhM(nrPRLA#LH4@so@3Fu`JD+ zp>bVL`f*4m`Z$znOi`&{np{V%C_ntpBG5gly+Mdnue+zCgLnDeK z9VX3BDSJmNAtZ99Wy-TF!1J+T4xAr{UyYv0*^8m={Be^2oXrpBAgc{t)I)1VWgiTC z@ZT6U5RQ-ii*1G6)cpI{!w^&NU-?$BfO%w%>evLQJf1JUkzR*~>0e8IRu?Y3JnTa0EPO-=ac8w*np`!b6{}! zV>VbpzpCkd)g5Ez_Idg2I}o+ZLe3N(uhR>6>ghoB&}NKQic--}D4zBE<#azxu-vAZ zj(BBhels5zeH%;G=0#Ybc`Wucmd7wun~=hw}mFKcm>{w`_X zQU6#*-9q9phi0CyKbMKl)jj+B#g|0O&%4Otm^(YKiA;SD%B$LV0>t(>ua;zJF6ey< z_j7P4@LFElhIZ-Sa5DlUd1k`X_l1rFq^!d)X_+|0>8<={d(c0|$f<59m<_6?X`kBR ze5M;KqK*|J-eG(Eeti31aN;ISxsyzZouQ$#i7jK8)@Tb3w_`I%|RLxk?GiRIl<#8ot|w zV=!;G*a=FxW-(JOeF(6P!Qko^`^q})tFG6>bhP6V+Khj}fUpSM-b#ex-@bY3x4=O3 zCA4agB{xuN7?i5NENFV3Fb3JwvkS|GVs&;B7J^E)=LwPt0$B@=$T{3z2v!L11+Y^@ z+te3~uU12a26fCmf&o3jxZno*EV3W_Oph(JEisf4AiE&&oR8b_>{JRe|@{R&>bVDQO;QY*OpTUo- zT<#Ukcow@hRjrG@59zEz;gY6(Y~QDkAs7sw13d}IqPoyzfVstp*n4@1L%kNZonVf` z>8uZ1{B^vwyEl@tPlKUbIZ-fPm>*E`n{;I=xS?{lGkGU+h{TN9c}C60!d}Cey`HqW zS0Uq+4sxB0a2Ekk`&)}gWDqz0M3S0ov@jjMrNM5f(#}^Go$xXYkP3`2tOW^#(AIfB z;Y!s#{Jr5l{R1l>VBj8~ts}ZxQIjanXXz=lbEsK$5)6rBP(&zp z*)o3`X(0W{rOm(_B#_*_V9t5UA{d%ibV`boXxlh^dAuTQYuSzXp58a082JOPv~-#4 z1#^h#FgMw2d3zw-cs1Tm^qG%TS<|gdFX2WoTr{$PQ*&ZTPEk$c?lVjXRMAs8#;hus zDQk4eO;ko@7%}E8P0U$UPQ)3G9>#<9dqbO%P+G_OyImBI;denCwg)Uwb;a+j=3!LV z_@86)V|_Ph(rku;HP`zpu0%zk40F?E5>7&G9TrlA)qqMcYrxMfFMB04H}USJ?+s@E zc)l-jB}5>bP|uW($Yq}r+6jOdM}Vi+vgh2NRuwM3vZ5E;63P7SFs&KeToIWHR}m={>6FfSO94cEa-2P z?kuu$$dv$!d$#Ad6?j`aV_(!yd=LqcMQzCThVZSIMYR$N#0neJLOgkU$N)`!3fZIy z_)5Nj&2!Bz4}XBgv%xwRlo!-B(m+13k*86tc>DRSSgd$HNh|9uPw{pNsyNyXqD$&o zQi?9!h#9;a^2)L{Kfy@4%b#Wd@+!2m1=-CWI_v`pcH3tDV=<3uVjpxZ-zeDCFXGV9 z1%G)`g=H<7S5a(-`=@n8H_F~-x}4tVjpq`>23bcIsw#(WSIl&fAf zjrx-K_0%xh6!azZItg!Ew7(Eclx)eHOXN=C&Kn?Kqq_R?l%GOLXffYFM@(bNN*jps zB5(a7vGI_E4%ueM(#Bro+M#$f{~9fh{;F^LAa*?Z*y^bjp9iw;8OG%L!N~1U;aq+=5@)@Az{FfIxFJjJBYl3tLy`Jk6j1NHT!=%$-g4+JC5o#Ew33C0YXMo77(;{>8sZwpsO@2#(7pD!Fyh_=dLgJ6@=A z*2qeP`ICFh4MbM6Nb%(tG*KcPX%;V;D>E3k$sX%&9lm?~gs=7WKA5KO#k2nqXOFmw z&9mw0frN@H0or)J0xDwS0y<6?n7{UscngDol@Oh*2(ZAim3S_ds9P#XNhuK&ldzes zZPcmvAWig>+@9!+pQB|-bS{U_V>YNkjG6SlRzY{EV0z0Vx zG)>mz8-uinI>VfLbBHqrJSfMe@-f>* zNKi`ZQYgr^k9}AQ1BjGPy%G!(J41jQ(iLx zoq!0wD#DthopD~Hx?9K`h(I%wt5HswBv|0>!$vyTnhpUs00ih(_=MgEa zd@ks<)7(7XJESQ_ik(HoCaM8wggPwbn?{R0&Mih%LrQXu&1GF>yMNYXk4#^;Xk3JN z_Ss9=t=*@*Gjb|NNd%qy9Fs-w`6=^nn0RutZd%-xz7@_qo&RM%w3{LT_o)82%n4!*LP^VXkeC zand%R!921pkmCfk=yMiF&NMwc+}GGFLP`g&ylUhL0?b=7S9a-#mi7F9GN+2A45z4q z7>VETMsF^o+dIdi_Ppc) z9E{hANZBnOyhZHj9h+w@LUB^Ef~}$fCF$8p!dOjaV#Y*>?{T-3rrr$LD z`ZMrF-)+Nn`em_KnKX_2>-|h%yO<<-VkS+q85fJs!c#(o0@_U?77DB0G}0n3nt|-n zsA1UYZkU(vk5fhN?oXayLkq1xnlA2IdF~`LIn`nGH!Uj_|&dJD8Ppv8f!ICt!JAAjogBQ3qJ~#Yp92ClQt5yd0 zn~QYbIs9S|0PVyiub`$N?uhBdFH#RjHA*3w)s+Ff>V4{wF0597B-u7+6YdlEZs-4E#w-E*#0*{~R6R2;3 z%wfcle?x2OGg?TjX+OB#iBvzg1?d?jN1{3TD!ov4TfS3M;F`!0-d>7ZLq=}Gum{P8 ztUIpq=t@P4-0BuYij#7PxzOm=y*P^tbroiz3pNxeZGZs0jlVDzmfxRfV~{|C9y33` zS~#wE7!}X{MV0cW$e{V$6Za9rwjxosjT!YizjcY6Q88IWKDC)*Q|dbzGEI&vkr_W3 zWPq*PKx|jjj%Jz2#hkq94)C@^lnRHsFh|7lMz>4Xa%@yyq_Lgf{S3}_rO!mSL zrWF#Qt9hlqF0gvepKolE#vK0~1@iFkPjj9LTT1MHZ*cgdSV$Ky%~s``)#~??E!j^l zC=X{IBYdOwT2Iw)5y)P?XggN^RRC`ERQu|9iR&8HC&iOEfy&*Eb*;{})jyv_pMgVW z?I?F?V9TJcwMF&Iio0ul{Lydj;=?l^i1v;#vrnSgCuT?E=3(E~VaMIM*I&w8uo4}$ z=OZ&-2M=@tNnTbNuiu(u5Stof%XtZPj*THxFZjk+KE(RC+iMqI*X+isfAS3Hxf*0k zLq)u3=N>e>2B0=Y)Pqm8aji%iy{w8M4I)S1;%Z4XGZwexghsh|a~K^8*%F<)#75({ z4YZH>1zUGCHe<|=B@G1L0rh~-)k{Tg9VDx|rX&X2cYEjYYitHSO($p9FaG;>*luf! z&sjxmZfVeprRGmC=w!%IWw7!^w)jnLf$}Ggus#VeJ?kZVPV@0JfVWF=WQR;|qaj#? z<(3rXr0UrS@7FV5-)u2V<;#`mI=6;B(@d-PtsQNnGt*GQ<(Rp~oM^I0)EM_I*456{ zA3p~R|H1I|vK`%};Tk7}_D2s=DBEXsUBE%Lmnc_`=&qJgY4w46*T`l&gNN*1?0L-^ z5F`_X;3>|KdLCy2)eDgS)*qUd?w2NY5k6tHUo@YXo`V zoVa#`uQzI(I?48Bg;=~QWE-V8rreWEc#RM7++dSojF+&*F_O!&YLkKXQFuL z{e5zGZmarjr>jBz7_c`X;f+SL8IpK1`kLW%bB}RFKZh$So-Ck==R`uIoRnmBwpudO z|JC7GWx)fyGd0J{m}8TtSRg5K7~H@8Ylibs_2!Nm8q^!Pw z{V+iDjTe6VmHZP3s{ChdRDgDklg`j2Y#`xXO!i;cC+H~CkwFm7Wu>~P4vj>I6aDmZ z%=4P#4)g|F;u`C3XuH7)9KLbw2EPuzo4zp0DtLI z;e4}3eOXScC7-0YreQ|e#}biq)m)leVL9Gt(MaxEOx67;-;#S9ic!U`DL9 zx_rYtSk04#UI8>U&PHNg3`V@Gpxk1n%7Op%a(^AMN_=q=mC2{2^FH+(ia-RZ4V9&} zs9Pb=4BGA0EP(M1=c4RJO*heqja2)+(nuwL2ITT-dMEr!J@`{QW${{5U<0GyCk4Bb z-dxMCgXa?!4u1Vy-H64}x?6iK(pKHj^;i5Co1a^Hb%EdWVq;hP)s0*MHq!?&iKP&R zK9g=?Xz{hhj4B}rK$f3i7!ouDlU7MJ^#qscE>!`Fh7 zSZ6Y?;dJNbe|R06P2vQe%j#WXY+7H)Kh@B5$)A_YxB6(fK5C+Uf{Z9ph|{dOBo4Gy zU=)A0W3$*(;Ue_1iW#R?XfVV4GSqO~_Y+6-Xm&R>}mWFUczrPbOlK*37Y)NuIN zt=(7zg*V2IUrOa0+WrrrG#Kva2n&(UB@DOev?J_63p1uB2`Iie$^#>;^B~Y4eTPpu z)}A2rnhbl}&4;&pq(#i{6Run9#w>OViQX-9xu)@cD;ih#M9Z^cG9L#sA^;5ZCN2gx z=(^!G_k;kxwci=$_6>IW&CN3kC-gJgZ)${v$&rE#jXN@cX-%)Z7|XJ4f5RH`QKt_y?)IeFko-EOv<*VAMgFn>*WYfcABWO7hC{mE)YL{-*%!9e%7+{DNIECEk?>@uk7+hMdtyMH}+0> zdtEa(!osMXOEB~vcMl!bnHk`ZvQusi{$>K}6kDF4#Xq$Ot!9x-w6qnc+S7&^l??sh z?Vb>(E+)~NBf8QKFZ!%d&I7BeCGg>x{Qb9Gsp5AtCeTTrbyhjMXNAf3p2LdPY@a$Q z1H~N+VKKh!54;q*W#!N0CDTQO{uHoLxB#anIHd8zG+b|i25mLI+?vBS@=cMoFS5u@J6fP!`Y>B?0CWFHpX7Az1&QoFhb zf~1p!Mmy*AoIdak3@x@rEE>}S;xXj@!_Ks=`5iQ%t4d6XeZb>T$8)g`Sv6^`BJ$rD zG}}7Fzx;F(C3Sh5W{`H?-7_4WOj}%jmq2ryHlH^o+bJ(uCWUnRp}V6XEY#Xtk=&*$ zyP9|q7Bojss#GpJOO&Pbs+tbZofDBEn~nm&%D%$-9Hkd5M}>e=MVp(be{`a|0#qkC z5WtfC2?2e&g?H(M*Z6WzGXVJL=n)k;zBtAn5v;SI{SkksT&gX3mPhQPVboRU+bF#< zMHYxK)i`g?jxO(X6sF`WYo`e99Dr!US(#LRBFPEO>6I8POT#gPT(-BMxD}BP)-VAo zG-E4;2`VuSvl=WhrSKvCfBgy35`)QoIp_`NL$L?B(C#hg-uYA%d=uY`2Y5a)H2e7u zbZd5&6O=!oLozI4AK_2>lO9=d3Oz_)clZ3ZS8nb61ptlRL!~fx%3Yp1<^lT&*>xcP zmz<3+j``pXK*!i+7tSe8sj)*HOPaW!Jpv@q-HIl%R+PWg)T}%~?al2<*rJV++2T2w}kH9MzsfeHvlcRGjTf>zSKV=2U%<&B}6d zK!w~pA5bB%U4tFN3U%-s+Hl3m;zB1msZVJCt3p_b@Ee5?9WqMH9y08}mA z?qk0{F~s@GS?)1})vxI*Zq8FyIXpxE?T7A6gSUfp?TZ98HhXWTF9Fo78=c_K4NTTv z)|>rMLoGcEfHy!%BVY*kii^|>W9ps0*QEE zQvIF&zeosK;u~hRyd>M+jEXx?>%9R6W zULSf)D#R88yndma9|dmjWB6T=o=`aqr{_cG38@0}p;iFycidDZFm+3t8UaMJ57@d{ zhlA%$iLvm9O|#Ftz4ki4LQ^N39Xof|!3HHe-Y*{~f5)>2abZG@l~Q2d!)gk;ZE9L_ z`0PunG57-4YF4LCL^wvtdKmw96%=&Giz0b3Jak-b03s7APa4sMy8J~a*Z?%W*<|6F zaxCtjp)w7X)~${yZ>85#EQ>db^0;5ktfVG!eu#QRpFzp4%(;Uu4=E|=rYT-vs0%gU zCjBn2mlp1ED~QKR8+xWCI+f8OxVqj^wdL4`>B8e`Qxo5tiSFjCpsS@TtEHRJO67K* zb3#>X9n;ZvUf6yX_v=7(rEAGj9sTRbZm3{}D0hCBaZ>;BnNgi%J=wadZ7k+B(@$u@ z#sx{k;A#LqL38Zm$y{GhUz$0e=U#mJPn#X0b!)?oGWErb{5|zW%rf3G&ayH{y`Kw) z6Jk?3zx2*%8Mf>FHm6PGRQ1X``>GOq+}GE3@Db4*HxXpJLA}XxeYiviJL7h{O2XO} z-5JwkQrB|VSUfA04LP|XBUDJ)(4a;sssEOGctxH=A5x!;d@O#y9IU3c^0!ERRnPs| zpVL2|ZE6?^qP@gtqM$rEHg_{S_0^ly>PlP=N2NA~2X0CSvitOg8lm6bJJ_h{7FQNk z2yUMK&YVcdLNVoG+S>>pXs%aGNm9M={l~wg%Ww}lxs*0(dde1BxL-5H7{vr9ME+|X z>$OfiV~do;ar+})3901QaryUqQ5?=inZ^G~R`&buGD{zyW?7i1g)``p=?Qu z0DE@VLPx;jlkd(9nLX%(_wy&#-<2_=9O99vN`MQsmVC0|l#brRMo9YQ z;=7h0JCMgXpH%pe2M%8V<;YLAfQK-4POf&oMRuNGpB(WuqA(r{LjjZhxQ?&-`UCg; z^vMk_9MD}Rn#?Rga?5rM2GhFokq>dY*f9m_j&)QC>ygzQ}>57lRsu7R=X@9)N0y zzb>m0jLKE1st9$~3@GBn9`ZWKLp3xGxux8M%yiT1FU1b~ifcgVh8d#hQIWBx7om2?*l zIoZt{P3$6@_T7`8>%dQ5K(@;-UtW05YplOzst7D3c!WI%7#}0;0f%qXc~RvracH{j zOONAP>Bi5?P{nK%p%ipPKIAyEovYkiR&v)knGN%Y_d)3)L9qzp05@&JI*Fj2BW+r} zj?#|u`IpE^Z_Rp!)0nb&co?B#b@JUTBP%T=C1&qsA^p;3aBx*Dpk}`W&CHwVus|lO zpMMnR5leL58x{+Q)$PSc1IQXyD8JY;5X2M_lhm3u9afP>B^p=FMv1~6#tq(?*7Dom z8Ed7EG>y7I8(*8f&Om7baKh8hKEwckaAMhlm{t^;7=FhHzkkP>e7pO|efRhj0Tmm& zmoe_vC$yKk_e(D&Gc0s{*#k-~%lEPwX1$Rpw7v6U+ZPAS4pfYZDBk83ZYf}62Bys2 zDnAbDXUuOS1|St_>igu-$w)%3;bKZ}p|Rz4{hG2#e1|{wQ1y5=)A9@Ig4qal53#gX zQnj|_;27rXZaV-Dn`~$ak_y>az2js3G3n^BH;`{oQEKlfZ{6v6wC!oyk|nLBhD~AO zM9MiDACU2UAKOiDII4IObTOyyC~*Z*wqqIQt*rb7mIT&NwWzChP4}tqXbYnZ9hTH( zCC6uBb-NrYDl$3mo0>LfI#rnVi`iFYBnL{WdreR~UK-(5%;#M~Atv>MwRQ;HSDwM}JA9r-6 zr}zYSGUz($j~ipF1t@61{8yu{98OoykqRa_9<2EQ-qR9ScEdDMlfwe!4`F!~V4EeE zCDsGqU2lT8`Dp5#-yoV-@!Um~fcy@R!Sr)w{8M3BNQd$r9gt6-#?n!T>RUX1!pXNKYZ!8e4KGD%pekhxN#ly_Y@7bycw>_^qR7v;2b; zu7I;=Q$NRiLojzgt>Y5U!vZU|&Rqy9xIxl!D^hdVWh9h#zF}iqKZBRuuHVbC3&^b8 zw(y4;1VVOVoU^Sl^Y6!;P`9(bZk?IDRlYA!`f$0Vq#OFh#f$gJ)dd#@W64(=EW|#2 zdg&xZz+hCql6mE|psdT7UR`y%T>t&@t;`fMWQ!?|m)qHSMKi#WF0CGJ{f1BI-sG(P znUmksQ{tRBM_N`F9=$oB?rfv%oTT$xSOxs znI|3AW>mQWkWytvsR0yw`^otC>22pgfn|&z(v~2nv<3+~FxEkmlt0DCCX|A};6;+O zO`@mc`OEL2q?$(7%I!@K_pZ)IPI8`kCEHM1?DK`s^F0SMwki1I$ZBxz-~E=z#4@k}yf=k&899frPd zfx#B|uG6A*tZQm$VK#;+b|CgJcfo_G4S)S>9Ac_%;ZFskA3V;VY+q1O=m5>o`C#gj)_ynenLWr)jTVur@RvZCGO1ois3t2)H#o?H;M_(yqis&_!!b8bpe=LcAXzA2yQ zb$;HKS^8X&d=1XbB=thl=nGwWH^L!rZCQcsZvl*Qof_J=VxFrCnxc7^esmt0J>aYv zso4*ic7Izm0o(cS^@a%KIs=R5LjxhC27?O`_X&Hyg@s#5rJdY-&Jg zFFaMybE^!zGl3t3?$Jb07~xrQ|NBQL#2<^1fC#;SQPVXcj^%6~DJ)W|cvP!+gE>BL zvJ6b#PE>~iFz%0g@usqfik)iALb8+Cz*|q^D4EBTIKR44NKiyjbl+NnD#8-pdm>%^ zd^eQ&8NrrGPVXc6_-a^BR*z|uDngbOw_><*43{&};hoJ#yA+=yVvGVPp`fc#euKaK z5WFV2V7)TZDLw0CkfbnxFrFn;=TMZyM|9EO! zh5S<=617$K0E&r{c|4N?VDPGuD2VgmbX7`9u6&?=sHT85=xsIxaSx{0&nNl2hzEMv;#?mf8rPd=}xHXlmpI)>~WIXRW3KNZ??EZ(Ra-t2G| zUyda3C2Rc`E!Q71fNw10zQGfa>Na-dM&5M4Q%0q~$C1m2$=2F$+9b4BCep<4Y}Qmh zH1NZzcgu0l*MOkDnK*wwp7Ursm*SqI%)Em3_>f0&e$VT9`AnNq3k9l_ita7%>vhxdb4`&*xyv|wn9`a;HS?7&L8II z{80Osqb)NkA5Oo;s11j{n{V*ls?Vf0A5!*3+0zxA2aQAZDc&dh0$LAIGC%D3xl_EFs#< zT?7Ll&xu+^q7YM!IeUorR6#3F z+n{tl3ugilNby(E*Ti4B9s+-_qJ0}^^ipmog?V55j1bVisSCeFaws)C(C|yy=dvU) zS3m!7SN|>VIOBd1gk$g<_z<0w; z>ha4VxgwrE93*$RGiRy)v{^oa*N73UI7m~`&TG^}{VrG#dCMOyV zVbh%-gA{T^X05--fi&T#u^GLXg% zLRB!3$G>?^w*`9{Ti|=qFp*q8?76jpqn}aL<;`c&-1xXJLQdau%IdHcU8!>0D6irD zI)?N8q+!9HL4fdYuUg0{xg=MZUEQsq=oO}efs~E~J8=e??wvjIGc*6}sZVUH(EQKV zJx>&3omltde|a(~z9lz=o<-5SJ7y01%iS4xww5i&&*hDEH*~tkhIWC4D?S6V1DMD| zwEPiV^S*Uu~&=3x`MN8-UP=@Q?DTB)FllLnVGOYVWO0PyzSWV?b;8n8GS^54;h&4giC1}Y zbWvB0)?t#QEeti9$ea&VERNDIb@K6?1E&gP&+}qZZxot zIyAR@fNFW~>B8yB;h)O-?e2>oIM%N2rQVM#(hiPb4wQL=NIefclK08=I^JpXR>r1` zTI`YEFH%+&gl-Oe*$>$3EkY_T8D_b_wy+Ytrq&Inb<9}0uw&b_ zBfE>3!>#9(p$Q{wBb5L9ZsvpLpTAA_HV7Jn={b=(&*F3^_LPol`Td>1hl~h(Q_QC|HOi5 zYR%|J+L)BacIs+R1ln+XPU7pk;tz72n9I0$?9$^7Wz(Yua!Qrcfx(;(aeJ$iRq6SkyA6#R>%TmD0^16aY1`yk#Zv(CP=>zV_b=0aZSx#lfi7XG!FyNxtTHra=x_f;5jGCz32{ldS`Tc^ve zegj5g^WT+= z<@zb})r=M*SIQyzF?`d;*(?iF77P>1NSMR1SbGu6@|NQFd|vcEWc0v3LU7nOx~kig zvpJGbI<@cKeydwnwICl;ztiRQ^NfHuQ|9n*#IJ^V%K2IW^6s(9`LOPy=15=JT5xMn z-R6gZCxh~a6sq^Hd?`OA5!Y7j`lq<^CRjkQ2s^lJO@;99GcWq5KHo?Fr($6#-a3RC zp}59#giw;Y_a)%6-*-K~Ls<;=_f1mn^&H?@h;5G~<2~Cdbmmp*zka>q{t_(vB}I7J zCd1sH&Li@e#g&l}%KA8MqOzV~`z+#dXp=X6YYWG`+bn%E{99uoZu~M^w|!JS#42@O zp$7a<ZiZi)M>0&ExGdS z!Sv#(-}hq+bT&ccg;dFV41Q944RvB=g*Q=*X|o9X)!#FMo7Hb6zmxy1Fp~1RB+qFA zTK}=k#J>1BCyaq2PrDNbD~7!hD~Q6*prd^P*BL-_0-hNU=zo_-RC+t=iZEnjq?&pg z5-xgAkmsL7KGE;hWHPk22(>+uOBjr?dBj7UfDa;8xT@;w@gRYOzann;R0Jc*dusN0 zub0gWQDom3yE=WdS-ALQ^N#=A9L@Z|4ky=FW)mglT6JZ~mC?pA4~r!jQ_Yr2Qw`p_ zr0T(!%D)pog1A^Pm84h7}0TGYRtcFF1)ui-h zD>1@xsZ-9ANssx5>#hXVjzqyvquR`C70fkinv{u`DO+T}9H3rO36raf&{b|&gq%S$Q9a7JzrFMU9d3PCAT5zfTHN4yvUW9dU*X5f^zXv#3UA&N?k za}9Rv$7Qjxk)o-PH)O?Ep$y$C#U`^>P;jGV}Vy!L2s{J{nrt`tAxrgvIq zJ`0R0@iABSJ&v!Ioa>=v!i>CTpRc*H8%}2X7_XUEwdM;Vf7({pr}4Sk4g3YTwsAN) zwgB8tGv|M*;!IbrQuER(X!#8j^UFKVx(99$>+tbBLc$q}%OxC`-Yn5)LUc}g zoo@8vou_~ND^ZD&+0gU=h)En@%RmNkHgI-8q0+|9@*Xncanf>t)E6EfoIT9m>fI|D z+lu8VRt?#mp9g!HuOUlmMms@#Jqg&=S>=KM46_i%n{LtAP+|Hch_q(VXLG|hIcc3z z9|^6W#Hu7046RPJYeJ>xX|m%(*zO!h2#T(-8v2k0)Hr}_5APcO`Vog97mk`_?W6rB zHZp3-718`Y;h5yY2vxI}7Fnp=)DIh$LcfEWY{fHgYtCXwk~XnXjT(G>KxT&P1X7E5 z#cJhtLR8gQlCt!$HH*x$^sgdrtYvdt;a+nfBMYkfb@lN;nM5z-6Ra{-#b1G&x^stU z`A8fs7{U|^RcgPc+*p^9*Kn&_jN+7eBm)8p*q#dZrg^H*6>0)ppxCdA(Y=j4ix!8j>G;DshVOc4#%;$MoX& z69}?9GOr1YR3GHup*1AbeQ}jp?3>Z5<2$u@9{Y$Rh5=Kqv;+>AH;VzTzA)@pz0 zZ{MD%_rMTZjgCgmXBR3v|IB!c@O$?5kBP+}#1~&!%8eVmP==2ii29gyL^FFio1YnR ze;_dd)8M}RQN8bWdJV@JNLS6Oeii=y{tt7#_rakx*7-%SGun50K&v(pnoG_P)iP7C z;y#VTQLWS4b$4fiGcyvbwA^vQO*zWC#P0<2C08huvfX<2F#~p*#SqLs5@B&}sr9f%?tFA+WPF@yrV-Pz)9KMdS?*J^VAWFo!CdsAg*zH4+O^3GML0E^X=I`wn9=9XPp&G3-iM17(cZN%Ak zqQA0vvTP50n-(GcVB!$$RgaYoDi#tR#W|qcwX?n(%gKfF`E}6}z_x)KUnc-C)HjMVK%=R9Y) zaXbT#$71+rk(l}q1jW2N&In-m8q-#EFu7R{e*4r8>_wAZ>mp=R+zT5@=s-7DA9^pi zUQ6_qwS1f{pZ$!OGveIRp%p!9O>5_0s0OB3!8Wy!F_1maB1ZYUWgT75N=8-`@m^A^*OO2Ll~+gLkV9E+*vEhxDn z0%Yw*t`z4$<-8&p8s51DlvW4Jpj4Lj%GgJ5zan~QEPB! zG0oAZV;q!!x;fH2E?O=y@#E7u;w~_1%Z>FG8Lqr)KJ`ZcHn&CT5UwrU0)IOLu|yho zTY_Au=r+Rn1SOMCL>Le1(rpuCKm=aGkU|j1R=T?jWd+NZt5N7@qY{DA366j|r43;RiT`feYJE-kRG`|^&QO-Z8jLB5dqDWzh zGZKASfgpZw(*Da+JD2?KHfKdNGvJ@-xJ?Tju3lRUS;5ZhSF`81~t!{Q^8Bw7U)$vAGsT9(%kn;DU>y@L%F zdLGn4*BiTbF9aH?(N1V$e%#&73-oD!(V*kPlOde?$(bJDPfh>SN;Q4>s-E_Bb)4y3 zX*Ff1h;25HJzJk{E$w&}4a;8ki#=xD8@)i$oFr!1A?st-HSb@5->kZ&>H!v~6NBCO zao>Leh-Wtj4(qm74$YaSwy?(H5maEvkN@7=MOODzq=y=NrNM$4M#$Lp6ZlC?cj?nv z!_L=f%Fm)w;?anMI5#2Opw4MqmD6f3AUOKvGKI|FYWEh}(;QF*Mse-nYhqILvCryN z&;1ys(w@!l5^luj2%j4}N{o}%#*+FE7;Ymf!LuB41(Ton)AX6P^c9a$q~iZQVSD8Y zUV7`n2t=|oeqCSLV1dqrR2n2yx8#tg9N9c2r`5#EMZH8R-7+`w7i z8#OCBa@u9}47S(Q9N%zQ?5w-QWML}7&petSoE3~qG|*6U$U|1~?Y6Bu_j@-=v6oM| zK`XPb#fJaSSJb!8wl47-__DCT~UsQ6w6ibsh*VINMBd zp{&f!?kJ(?RN25~xD`yBc5>Uz%WXj*N%Z{AzsF?0cG7%{>H5btWhM}Af%lyudI=Mz zh+BV=QBtEhphSHXRM0cJ2NmXvlHA1@3b?F{NDLDwW({HxK1TE<40@YDviI?9@%sxr z9Z&71gH9@JxNW*4_;h#JaYXNkk+9fh&@1CnHs4l1)B6czYHPY7H7rLA zDH~3Bw{df*ekoOE`Q57JPfx^yl7lej(eF|Pj{bBmOiB`uq@ld0_ttnX)dS`8t5zq6 z7FHE=I|YU~OI9Gwo=)PASyDaU0YE0YZTl?WOINb>lNpLU z@ZLVMFjLD*8;XGbZ94;9bBoYoYE6~OOz@me(PRiSRvzhD#Rz2qru4T%*GGFL#Q{SD zFxeLg)bdeM>0mbW;U&1s>p)ka=|=>+2yXv#=)w3cx4mPb7BhE5^sHzhp-wDGz3Qx{ z8gF-zX60KM|DTpj9-zn|GW(TyFT7~jI|3vdCa=?UTU?Wq~@52;;m21+wV+Ty>4B{To%VjN#_WwFS_U`{v0M8^y^t;jI4 zKX1_kr&mhMvGNhvOgIUIWqcy7H^LCDxx%ER$GScQg=B(LZ#usb8csVIya(C8tu%Ol z;Ak+I-mqx$3&$-X@S6*22a;oAsr_>M-%&|BlcYc=#0jEJxber=eCwnY&nP6tX&H(YKpC2VcjD9?01AGfeFl46~V>%IuoRbPP*> zuIAAna5N|zN1b4dIb$f$V7rldH663lrWcaE2!!7@DJF51BfFSxd-BY8Qi%M#uZs!m z%3fXfYJ4flF1Ya54ihzSkPZJ}<14D!@y36F;Mh3gF6y%aK@)9Z=@v#VPFd1>IqJ5! z_ZC_o65a|lV$?NH|9oe}q$~7mlnuC8_$3=_B`t=3(3_?`o4QkGVU`t9qD1nnx+f`q zV8oTYgp`!E44cT!s0Wo(k+x|Yr~%ocdz*XE|j&D1M{tV{ruyioF zy>*2K+1u%kNso0*cX792d>y2dsdwEK-;6ihS|k&D#i5{3Ie3=2`4mUIay436SJIU< zH>|5jI)tj;k*gKQDF1_<8`(jbe|@S|Y2OM6W`QUrj{7T-T_vv>_KiTS9JGl7qLXNn0CU0CczWHShN)RCRH-$G(#&cdx9u_TVA!xT&4n2WrPfZHf; zNZMd#;ZJ0(C(@cgp}Kj=AW3TN&cZ$KETGki3)WlPEAWfeY1X7p^(peUum2H{rTL~@ z*Tue=kHYvg(_8j{iiTOE(R(muPcUHq@C0mt+)A?m_t`+yzZ0=TKqN?!zR&O8_}Y)l z0zAv!G_Fhc_E8{f+FqT(mvGNTa&bO(J@hm^ybndy!(4R^Id5&WH`Pzl)yHXpbj?({)&l$psMj!no@eOUjT& zMDr=TU5yvzC*^kg6yL3oePLmY`O~bsE2}`jBG8&k74oocG$C(dPA;eo>WFxq?9EK> zu$tUw3)uVod4{FI8P(#km1|;)vY9L}tuw}hXIkM~smTn5LB>Cn?p1BSGb&(WNjiX; zONFb8JacPZvwA8UOe~IRKx<8;H|2ofeL)4p3dG$ZQrz-&&-*~@CaHFz&Fscs?Zsq0 zD8r1(TDf1&S=WI1(P_1Sb?TG{Tkdn7o>zCq+^c2`5=tr(E(@biSAE4Xvw3{V!+X}B z3P#N>u5V^z=BBK5Kxp6WyjCC;_$IigysRb)TQozpd22$i^z_}%&q|-vuPtefzj%9L zD5X>>h8z;4f6xft742SnY|nB}Y+9K59*+rZaGE^YkgX+vhe5yKP^f-fme0;oqd|4xix3rk98K%G`Rg6KZVbG5vT(BC zD??uEp0*KysZ&08o1tdf06oq1{yndkBhkU-PRlGC5fO`UT>fcmc(B%Nc`AOzWa;`F zBYa6V0xSG;FeVUBU1GF}vk3m?zK&OPKk7O|*OJitAL1;}I&OS|X%*%Juf&<@+80vc z<*oc;T>-XUwHpD=!-WBVR)+2lX_ncaa{fIZ&9X0KgO53czKhPNwysabo1Gug1z3Fy z@HVpSrB_@EKlUfz`npi+*^ho|H0V7zAAS&pts+L;9(Z%_iD$itd>m1Q4BxCphGfkA zo|)&{dhfURpK133s}m00(q(()$KmZLLhB60pS;t~n$uaB{R#3l^+=U$Z3$<$}V?Kt&}2BMwwVie;AZv1O3)B!QrJO~RuSj$X$x$fC|du*xuFu@z!U1>6a7JDFBzK3(X& z+c=L5=7SVULY_my=jzZ73G_o6N!UO+P8GYJUDBv!I!0n^?~+TeuwvQcw%sBpy*tf6 zP!Lnk4V1t1eBfDcSIwc{5A^*(5c`89m^bc_H<9l;kpnBPAR$gRF#$&Pe_VNPkkA_Qb_d3r%uLiz)Jl{+yV8v=k+T=boqGnz6+B@`SdF*JuFd^7$xFgi%#k%)=Q#V`q+*{e~pWYaeSI>uk1|Pi=jA6~D zAmFBlRMnpW`k6#?;a&N!!#GVVw!vmNRR>=garg4e3~%*eqU1p^?@l`&$Q+B9$=&&c z@|*{N*j*WCmPHBna=gzoy4P0>-s!ZBV)`IoapV0MRIoe$)nt8yiz?mu8@$2yQvGgm zt|YOP^wl9|!Z!B$@Uu|=5I9_~^2HbjE>pfYZsz)Pg0K4~(0V5B0(C8R!*+hJ!;ah{ zcj0}Os-U!qoPf@)?*(6YJR(#~s-b#(;)(T`8VH45o?gnz)IQcX&nBXbkgC`c6>U%4 z$Le7IT1>Du6JAfF+Ldt0Q>?4#KH1RMp5k%m{argowYuB7x6EQ|a_8AI0nICIKG~Ql zwi@D+tC;tB^k*K&n`>I(vYIw7)e-EN%6bq`Y$C-W(x^R?}7P<(|-B`gCk*ZV$S&x3g%SKk?YN*;H&ZIn45U zwL&{q1O0pX7wYV5xZyb6t<&`&yp}eILL7R9!7QwcklNS-%?jfLKlY7> z7r1ft4f>L0K}eByHc{5ABXIj^|4nrUC7x?SpmBHWxTk<_3f$ufaF>_la=jXRNRo0` zJP*s0C2kA(vb1_MY*eR7c16 zPvn0CiT^a6MUaKzG_r)m{Bf5A?Lp#g3=jY=eDw!Olz2KNcs`?&!jz=jBuO8|VCj<+ zv{GIYu@1ge=2pndwbdAk=KXQO` zuhV?Dbjl3@cqj$n@e7R|ha+2?wvtJ`FG5QoVUd1OVt1SSl35nzyW3BOu5)~oN=@-xr z0%4r?9hcQu#Y=IsQN>)g=A;XjyFmnDbp0Kpo@B}APB}nJUV)Z!_73Z6O6;Zh`T#UH z&i|GlNGm|;YLmZ2>e--Bp4N2vYY zf_FX#C0XW5RNNF&Qd+zTbuq>R1XV)j*BLV}Pac+2lh0)BmwPRGGM^uTcy^;c9r(VR zcL z)YZ5Zt$WjZC1~p`L^JM|RCZ0V9b!e88fx|xzj>3OrApb~m?|#P9Z|FuZzn|eReS-9 zuuP42+}P6CB;g6t)ZNjhr1E$U02bV#G|(@<257I7o<6r}_8}GRS3?Oh0_YAVXqlh3 z=nG@8WY?~#Sw3wr_DsmYs=-?oOIzm%jz%tA#iDcex}trj`-QWzOJ8P)Z*3_HEprupDmD9ng^QL9`(c z8p*)W14i~hf&q$?71}el;a-|)Ui}!hG9X~HBCbh6SRyO1bfSv4b`uYY7L+C~x1oHEl6(#(m8uC7gjSx7UVZ$vt)6k7X-_X z`|i^IwuijZsJEzl3o&&1`x@f)LNtQ@&2KI56Bx9$RKBi+hZ#>@d(mOg7pD{ z=TQi&Ffn8c(If@`;GY8MI0?z^ZOVw)1ENZ6md`>1>ff=^4w_*e1+g!rScDd6C(-s7 zg6pFd25r4JI)wH+_YcS)X38SxQ<%ItkW^dZv=}Nr>h;7rjVSVYy8e_C2637U-)T8OnYo)*l8U`~Hr0dl?A4tN+~6oJG* zFK7os(ssHeY*ugn4x>8o<@9#|-I`XvB$$_|U6N~SV~lMh1*J6FEBE?0j|y}k_*#$! zT;0zSl+i8+T_%iYl=;pQMP^D@@8l%8zIK zsqM`O_m}dNMERzL3zJDNB?Gu!s8qwcxI|OMll0#tZrimOs=|yf$cjhwAKbEAf?~D~ z1ZmqZ?}IpA^uG5yF5!1uhThmybIk06yp;Xc12}h@QbIAImB%xl<&dRfor0m~(cWzX z!uxMi2-DK&WvA> zsbi0>IFv!$s3DpQo?pOu$)wP18cHj?mP7f@Ka&3rI(tU^dlCZF0XM6lJ^!kJl+(^; z!)_VnwoRYa@GJqgjM;8CYVy9hE$>o-^o>+JMML|mDjkv*F*V_5QXq8z; zhoa1rF(f|<7|U~FLcF^G%nXd@&>Rymc0s=`4Itf}S+81?U0#v<$INiaP5fi@{Sw8B zH7Qks`Ic^BiXcSj)9>I(wcck3Ye@O6mzki;b&JS&2Wj&9Ggd4)57x5kk7r7gB$Z^g zjy6M$M}*ape#IU%K&fjsft0FTZ~8&%=SKL%RuHCw4{Kq{MyVPf2oP=BKgvuQTBR(8;1CJEyBd{QEG4hJ;y-Hm-Lj8F7YhI%_(H=gQqPfPZMwO^p@+dK!6g#p~( zh9q9kGRD1n^-P$oTsF|OXx5Mm93AQ6SE!?-aUMxTE zkd@Nl#s&o4D=U#qCfYU#3XZ%&zrQ-PJTBc8k=fHvk1cdi4_|Wpu$1&~#JwAkboi5c zC%R4mZwdTgON^{LqElc{oyy{DScs8@Q%hBgxw7Qwv@rSv)mP~2!F7fS=@2Vfn0EuY z&k&azd>@NOJf`A8d>w@LfJ%6MPHZ>IxP%hBjZPIQ2m>6`4v2cc2;TbDse@MzANA}v zZXX4ApJajOv631E5>m>)C6Wfkx4+dH1H09nmRrZdg%QU#`B$Sv>(t(#F%1{y(k5E? z*F;avC~S0Zi8DcqmsHEwsZ8RHlU6$J?11T|Y9#B|5yGk0Eo6Y7+V#`{v-K&~e8mAe z7shv%_{$xq)yXTKt+U|d?3#1Wc`$y#c5)nCk6M@wmz}>z_`$bfVICBU|C2tv^zdn zB4X@Pa``1x+MoSS0C(BOTFS!`pFP~RL44W0^s>;ZEcx`F;X3YP!9-FS^c%#6@78yl zre)SsH0(B2Mxq^FD0)1Vj)B!8s~hHE|$xo(Li1!^0OjO`voh8U2s zS*SV30UAE^jaEvjz*u-Va0l^)DIwcICQ*YOlw3OkJ>l(_903;_wpT;+OB7<;iydzl zckIN&VtI&McaVZ&KKq#=Jdmdh{Wge#=wYi^!6W^+0kPA!WXbxI6PWxwBrPqNC30s5 z0Mpk218*0GuPdRJ)?j#%PjK{_JtcJ2i)zi6at%^<;%a{4N;TOkn&dyn53+@NyTh`nDo}#&mvX%Ce;RqC@tw0<7z~=JMC*6ogcP_74!N?)U)qV zx+Usls(b^x-U#awa>0&4VK{u-%Vop@d)V!!haQ^omd`?OGMeGP3o!muIF754Qrm{l zDCavWL6P_dhx&Qu@VG~^gn_oBFN`L%^*JaE%tHbT2PWmxVp+4Wr?xim_zctuBLQ9| z!A&1Rf%gB<+ONf90`A1QzCE8`GeRHkAr&XXV<90&5L+AYVo;y?T3>3a*17m=MX(fb zKk$*tO!}oSWmF_FmKOSAS`>oVKzDTi__nTpMCu7D!2lU0h1G{_bO*ow1A8dg0p2Lh34V`D3iL^*a^W{M|b* zN-6u5!X8G3^BFPSx@HU9$;9YJ{=Y+_OH?Z*YN+F|npY{GklTN;3QO4CR(Mn~)|XD$ zAOJjQ?t6xk*KybFFWbF?N&m4WOJcgE(${aEt+47_JMrKpg&qvW2!C#O`?I<8^3A8 zhTVwN2R=TNKsLoqk~ZMNEXsIxzuqjhs9w$NuIg>}5G&}&WTo)?Gl8BRt>Y%x4;OHB zNlW1pr*?^T5{u+U&k6eMM?B1PWJ>;#vR+ui%Nxm;U(P>1+7u=TU2wuvLe~6zUb!NQDu)w?- zyvZfMwvc9z{oE+nHsm8rQ(^ftmbZ@!u3`*`3oJZOlKvyT0|I2Qv>PCHFb@*Rpt1pJ zfi*8xM$;eXL6gEd>}wS{Z8;n#5e;AFbGv_nGJaAthv4MoCg(`iQZI$2Nmu+ zk)fXvZao)%yn)3M)Ha}{jK&M2*l!^|BM5DCKH~!vv|s-h1uG+vSCZ8frVFB&ZHb`h zF9txaWrtpe)zm~Y1=l(Njbv8(Jb0wg0GG{5pe9nSkN{!Vmkt%Nasa~2aLpK@Vv!9#l12+XM zHsq2AfpKUz7xRx5+<^#&-Ugfm0rneRRork;Dcd~(I@vGPDaP)kdKTtCzfIL_e7E7` z9IEXg3?1V0!{nqLhQO78!aE^B=vL%m1M>1q{U?8+ zlXxf(GN7r^++PcScOhU}dGNCY0d9&!WfwZP>PzJdk0zT9V^;9LNn%9CRW*j3hiQMT=^(Y}0?QMq2758tGDnD$&!O!(|xBk9_9>=9C8qE|(sBs0dcJ z?3a)NchIR)k7xJKAq-$cpg#BFoj-Ny^Z85WOTx+H;x)~`7q&sDs}vW7_Byt)HQMtM zI3vI3-uqHk%KXP1XA_VMTuGY}IuA)+d7Qr$urh%@R$co~1VbP7b0HguD^_TQ(NB{9 zJ9Oi;Ec$%;;@Y2ca-WbKa=up{?0V<^1}?8& zisu8KBdoM+}x7Wy92a zH@4=mnwRr&;n0PLF7@{73aEu=)Qd=X#U-NIXe=2=N}+~^>SX7T+rcFm zVf!X7_F(q|I>1B61zPawk!b$)-lO(qWeH3kI1M=I@}e@0O->2S^e-H|cF5o;7Uv4B ziAd(D%UQjLhX+AzxheimdR+45x`?+5~2gTz%WMumI zU*H~f2zJ%o-n3KSn*39}$@UZ@uh{au`NVvWW%0QtR;>}mXDpd4D)53=a!miA;1ftG zm7{^0I4x8%b+eZ`GISn#>J#GiI!m?~LUS0z=&=#9 z{`~3j1NQI+HzmYC%GLQj^wA?Z#QEsTe-+)>T5%qHsbaDMrltfeCO-WSRo@=YbpQWf zQ4&#+GrK#H$RXy;I&znsQc=$2d|Yz2E$1-y=~fZ4q|lvXPIKBEx4Xi~a%Na8hFLRX zv+eut`u+9Wb!~sluI;+KUhmiQae6-AQyU872As}KBzMI*M)gk_GJgk@Au_(iIvlum z8=nTlv<%wlyOX%ZN;KD?>uTfckuQ=@hU-&u<0sfc`iZ8gD1MkzIqq3lOgXNdv7C&-GPnzQ8MZg%RBq7Bpv zV$RR?s>$Wn>V_J;4v$}ZmJJo!zzgl@SrE0>%XGAhM37RG4BT7t6(eOTB_kJ+6OGbU zD!UYJw}nqE0C6d{W?4Az^Q#sU9h^6mqZMSR(ZTWg`=s6Cg@@Eg6pippANRrxeYZf0 zWiH>%awbI<_Aew(v;U^8BzTRY;Oj=F>e_=w_lEK7u1#J7ma8^3{^-=Ng#V$qX%5^G zcF#6tt7HQ6rd>PMJ$_>w3Og3MRs4zq_a(u%W~PAWL}W;wZhi;(Mx8##CrZ4_eL}It zN6zxwMP8iO>46jj-#~ULWxaGZDiI0H&%;~i1`aRpqi$dr!sDd{>3r+&cIO(QE>_2Q zzp$M@O%8-UL0dr)2ZA7N^k&ek2v;ejxjxq=R??CBocb%{b={@rzGx#EHH!F5DtGg* z_@6KNp(mi^(7k_2pR!HR?yi#f<8qU`Z_4=Kjx_d&-`S<->*Q)kOBBr{iYy59u$fu* z9ZjcRI{Jrvq(SD1J4zm2+ld0s?$8p}1yS)aMj1pg-Fh$RD>x83gRf^cXQDmEo{Khk zs_copB4jxqEn0AO%?j5I+P?yknKH_8D%k!OAvTp5!tEXizGT~N-xzm2?nUzFngFB2 zq0#nmB|Go*tKa9!AxptJhf_wDqr6tsB9H4TF5~}kmJq5_nVQj1=k;lxTkcB?7{yhR zxJQJb%2RiF*H>fk-GHp(o$Gz47C^ej7>QcSwE_3yXlJ1!N^yT4$z=nu4vlO>(Ifv0?tY2HdqYgWdqcgE*^o_C;Ro@SFwV(78u* zIl6K!KKka`06MKZM!9>{JR`}KNccH$<|ux_?5x46@o!(1*U%F~ebocO+9kc&1<$C( z(yU_H`S|0jtrK5ZC}$+qmiZ6pmU+|4*M#q~BA&^QA4>##`s}IXy~^hr=mnq~t7cl( zJ%;C|OL?^?-_M37rZVi%8D#16{Faj$Fca9g4TbK zc}F$=Y(SF<3Dd>snY2s|YlM3J(Po0_&M}|6&p9P>l2V?k16e0^_YnY)m7btudvAp- z*5GZimTbN$GLt+Vp;rD$l{b0zXX_-@CHHaBqcuT>1-ZMi;iF}%xuh)%@eXSa0&YC3IFkOZgrMe1i+f^%5X`%N z@P1=U_0r+xbTcq2hVMrAdN6_mr5Jdc2L zwA}_y_@If2m(yA;=!9&xt^=sGId0+aI2Z&Uib&^BM=h(Pj zSgdrYf@D4?=@zp`7ow)9pX(h-Q&KDx|2%#35Mw5cI{g=KDkqKHkK; z0j>?q;vWHh0-P*qQ?HofRD%{dw(^+w9^6P8U>adv>#-`KZOH#o>%?h^>f`9rL1@YJ z$r%I7RatqBDSiH}ui-W_^u_-LK86W(mVaxqnK-N7vi?c<^A4Y2Ib_9fXLkV z{7seg(wwpOZ?J0FgbrkILlKlY_&;uc{e}C4LjjIn<&BCc4~piV1a;w-IKFe|aIX$~ z{Cl`pai*z`Fan?b%h-CVpFk=&#M2Ry=}n83mLk4_hn&#C>HkWR*E!>Nqv*el(bE~* zVO&3{N!WiqZK1E~B|qX`@^*yTL(gfNk^O}M4e0F(odbw)#5bA$Vxclwt#xu!A!Yo7 ziCMJ_Wy@yVSoWit=SGKQDM2%t37dbZ;L8FU9)H{dC08(H!g%f*^s7aOS3fMkWi+#B z4&3_8rrR9tbXJ}2AGW!?$oMn_kJtzYMRl`Hn=waAMYMu zpq34Wex-YFHGQ{Gp3*Ee6GnNLMt$FqTB~=j2~GYOJ`MQ*3|Z&#{>Ei6j7so_k%Jgp z3ZbH89U-(dHJ1$!`Fw}itZfx{&NVk!=QA(dXXcx8NZFdt!A9fTyMc+hwZp1>zZGp= zzn+kQQU7cbI(ZZ-u`KqAn>M^`^%dm3Rec9?$glT%K-tn!3|Y>FVmX5}Sa1FoTOadm z&RI-x!4R`A|J|VSSF!aM{4B~P@$SX;pV+}6-W~X1F{S^}{3e9BrGq5c9fZ6}PtlGX z0M4-2ii{w)5TZI7%RPn8vQm3zSyEmPw|Y;=Jw^W!Pp)8;L5sm#M&~JgT{{H_V8fC^ zb^Dupws(x9d$l8UhPoz=B=aeLGwJ!8^6_c^C64+?Xy)t(uraIrYI}IwMjz6LU~?V! zrQUq|deQZaMs=@R180Gam<^0_b_&p;~zNd}~UQX@3n_CFV ztxj!f>n%^SkvA#6P>j^gU5Y>Dj#or->O^1A|vp`k#Yz}Nv@W>b>)dq%>02EEi~Xxq1fkrhC1txif;ppyVyLg2oY zcR0^SAtb%JUMTu%%dYafIjC8V?4~+DJzVDqEeoYS9N2l%8C^48%|E`1HgI2<3UxD> z+E7{dn72j_wr#Zn+_Zu;9$g>cKbpmpLya<|r}WJ(Qr{cbbPvYL)RqzCKZ1lDz2lWK zq$19R^+(2v)>4#_Mru4Yh;})_ME2*D<+S++SYyK-Z3$Jv3ulFI-us&Su>g@+jNLnu z5&=@dYgE$eMqnFV@PCzCH&7gU(ZtI({uBO+<|5(0?9ihItDiVCA&ZW7#2m?SY=P{Vgxn`3@me8w z_D)ly&KvOV)!?ob`I1~vio^LFaQ*(N0jl}Kr!Km}lA{~CQ)U=VWajsq|8cxjt@5`|u8{UEZJgOF#S#)p&LCJw}!5 zAT;fn0Gx~fI(wF(8&$cLC(%%5^N6srFk;Y4Xu zh5yfXx@Xejx8 zG*+qUjZIid_)Rn7UQLVuik~07fpRsTXU4_mS&WjEa?}-yy z0?O96A~|}T5n|vv_0&2mQqPe3)e=H&0`X>k#7$se8`C>Fl021R;t!_*H4CDy?$j@~ zC6qG~O%Dh!0|*)sZnswU2EGvt(N)Hy@tEy|Tj-*}zc?|Rxe?+OUP-EN9s7DrT$YaQ;H5Cil*UVOMtS z!O-MDcEU8OjC|8bM3%w^IPXHVS(^W!y8e8fxI7a68RYxG-#R24-SH3iL&WK!>qVxG zqp&epXSW%5Bup645F2NRDJGJk70kNV0?XxTb~Q$x{nq9@OCtiOYS23-H_4Z={0}3- zIIm(=lr#eDN{#}Z@ITs3-5W*!kZ9?Vl{k@5j)NVc)y7v7UG%Whc+WCHTl#dAgU?SOu-Io|e#O zCU9I1r!=FZc?Qv)yOV0|f_^~85H!t@b8U&e_}p5e3xReSk>`MB)0OE*dGDW{p=uqK zA^iU13sH^ag&6x(vov_S-hKnwN9&Hlb3NuC6(=!AmZk7q+$FO0z<4(67yK@@&0v-P z3oc$d<0neABVLhM4aCi2#^A||Um}gOxRh^Ehtn4^!gspEPcG4vD(oj!StV)!M!AhRBKxFg8T(^jvc^Zk?S3Ci#csJPg;`@g3E9-OPZo_`& zODNsIppPCh-+Ta@@6Cwc-wJ`a!};@Y@ot|TJ@-Cqx!mxPZ&n3`^7p9&Jo#Mj9iHkNJDa6f#V}t7J3SP%Hdf&JHgvYyPX)sQ_`f`z# z{x)Z*R*{l>#gy!EUeL+R=}nZFKeZ>X{cfn`d2gc7YXaa$0$_|k!j$wShnLk5La`YG ziEui9l7ZGkwFFQdd%XnS4!9#@*ISs;uj2C=s6y1}?ik|P98NFI`2QXRffd}%D)>PS3|GAEWAX>5SZZMDQ%-kng%b zgu>%7<*9LRVErBb1!JwDGxP{O6@pmo$rx(Owv|rgDGh%h-lb6FskoK|gC4WEGRW^R zfcGW(X(Cf@)XClNo0`v1`gg_Cwg!HRP;LkZya;O+2e==XmpFIyvRD>P05C_w&RN@XL?2Nf&kO zxrbd*86StKKb~9+@}k5RSg+%Tjm~BTJ#<^>*55 zJILKc<-%804N}o~l|{3!{+mi;o{4BHz0QtxrqjSq(o3e7#-0MW^_P>9wdYCFi+?>S zF+Cutd61SaUAZH>);^DMMiF-&{_GyZF(k7ZsvI=;L}@VNWvKbR2t~_}-mF%J5GfWn zx8?GTW*=Dqwe@+oYG8LrGuO9H%izY~8GKys%BQK=$p}lZ1|9z?R;pJoOq%r5zu0@? z0IusS(oqQ4Wox8Fc;OIo<|Mx7{ zsja3>HuA0n3#k_pzplm~&LFeG z%UZ8-|1$&C>kLQ!BsQTw8CxO{;qZ#R1HBC;m+8;Zy-%hBFBsIb7o{z_g>9<&=9*a` zPmofsKSMz^+>bXppW!SP4sM|l>s-Y&5Xr3ii_v(Cg3_EO?X0ExLk5KCiTw$l9(xjM z^S6sLf}x%+Md3hwyN`B66$(BwmA@Hl;|DQ{gous2O~EVf^OroC-l<>IkqquC+l9hz zI7Gh*OB`iaXwWlpkRo+@UrOwWlunN{Of4V2%k%ikA6t|F(scH8M9^GAO>qX=+M|RS z?%OQ zb1ge_`b#so>p00mYV{hIN#>{o^)xr{x_jRlQw-p9Tm|i9pTU^*5PlO70bjV+k&V)o zKGWF3f3716SD25J*eX_~#659z+{Wd7I8P&A$zd~b4ZxQqx(ZCI$Om)yZ^m%F-TaN3 zdHyc&SH9aAuB`AfF;g(B(x1qWc_6iB{Cy`TQHMVAHwi}(tMo|L7)FZ;Olw8AmGIQv z-_+Z{Cw{!=_mq%3oMkk8Cbic&854(b{q>jwh7{X9W!x`M%2rQrtV-=$)rrJz{CF|7 zGw~U=_Cl3o8TB2Pq_i~Cqw8)tkY0Fz#5Lxc1UYyBg>`F2U*2@m*uQ7hSqz+m{k*LV zHQ*z06mUm|o$ggD8u~zkPnc#h2=FLVMxiQ}es4x}EmV8AesM`1EAjf!Nhj}m&83n7 z$UZPUcQyc&Z0bN+w|opc6OV(vkSy~%&4QB?Rp=EDt|p)f1YQnD>=zp*!FA0l^dzR? z(Roj1=DlLZ-RBuzQOqb2+ZzY3uelJe3b=cDWXB?0ml%2br03pq5{MAFqa>CXO4CSL+B6H2 z7^d40T)JbYb%u9L!t|#^9#;6-IZfN8g%7}u0QVV;5v}#w2^-Tsu1dIw5mAh3i4J90 zlU(DiX_@$rdWUhtTux>sZE%ot#PdN_W^FqNGM--SB(j!nQk(lpG}=S|Tf$^(IDS1= zqHMdF2Guo{>AUbp+P>|YtN}F-yOKjpc)nY^5Q+R7;*n3(LvbF$LON|6C|q$bGiA0K zo)J}Bx<(t@F@lG+g?Z$oXw-R1(4sCH9eHDWf%|<2cK#~vdnNmW3M*%X?x>Du$LYh- z@DF5(j%V}{h-}brb_3U8pNp6Fo{axukSl5$fQW>QoddnBmbhEqZlq%WH(uO_+>iq0 zY%leYXVp4p%w4Shs64{>{#%$YX~)D{7h8MA(AVa`Dr`3GJh!c(j=op<@$Uq(Q_xf# z#OC-|HMi0lc4mvaN}WrFf*S&GN-Qj=jb{;rRd~d%)^qQH)DL^MyUT!!GA3ARa!W42 zx%e+o!82B3L~A|k82{?Io9~6^koErq)+uI+)o)z6>s9%N2qg9Lb-wGgs~iLe2e4zf zBD4ziFD7mC`}QRK7ecEHX2!@TaDC@um1=#8kB?dC20hdXtJ^gk*>Kuok-SS7)W7rnhkw5}0$t&r0}{-ARzkTCki< ze6Dk$oB%9SySLq13J-cr;@aT(?cEr*M^cnvmIrx{c*`Sr&epaIJh?w$tHwde<|0`7 z)S8bW%{)^foJ!23e>%O+vH;$9iqEyEffyx}9771NtIl612`gGfMrKt*cz2mF&D6p>qt$MPYZ+%8 z8vJXTAj$cRBSF9UkJht+Ncb~W-TojrXOa`%-|775`H$eKI}ka7C#GM}%4_hb!j7D1 z0DJ|wk+T1Snd{T%`40t47!@!y5H0QKb#PBOrP_brI^L^}l{Op(vgnVfVn&UF0^B_G zN|wLgGR<$_nY*Bo-}ik&&c)l5gsgx|j5&u=n(#!Zux-yu<>WUb|4l8+cQEOJXLKJe z()&4YTAZYqrvu5X!h&|67IRq8rE}^&S{iH~U?^v`2%yeCW^T3!0QU4B%{5P`#FYB& zNVw45&7S((HxzTmLvg1rbI*{1A8*vNr29D&2iq6+lZ0s%#?9l)-!R01n;)-61QDQ!El^cRzo3Cj?*X^!tltLiSn(2TuCmAINQTaNK?S zhDgB3YXj6FhpzN_JH=kA3SHg`(7K#I?dlVdsY~NbUEBfPT#j)#t&qwb@jGXB_090Y)rAF*#iR@ z8AGpeZZu4%=9kUGao#Pz2l=fzlB|&7D86YNZK6y$da*KC9Wi!oB`dx-NJ5txk zu_L)KPdlVII2M%A(a2ek-3N98Ha*%No?idU>BP5ERIO-Z?Xm3-D^mU2#uxsbywGNR zG=Cw8^yEDbRmRh|AQ~*2CgZ%6mjlxa&*_H1xQz4sG(*Y+t9=J*rqOaOhy6`@bgDB0 zFnTt6dw~uS{AVB_bx@@{FIGa(#g)@;X4$3h)*Wo_FN&4TXu#=KaNt% zz5}vw8dh-ZtGqKiXeKK>824rpO=qk7lIhahtQdAtG3*yS+kq@+Sh^8IaG47?+-^DS z;dOi4SV*=^^&*YL`}qMbTGQuSMW&Ole1!{!?nrERsCvEOcgU2x9;JCAl#(4LGU(y^ zmo9U~w%vjA)I4F7Z7CH%Mj6Q>>>L|FIW0`~)bt0@;W_fCQ}HztX4||Vl{o@Hm;-b4 zG|UNGi&!%b$2+8r7z4O6ly6gGg%=&JeJM6J@iq(X8EOEW|E zUSiJIzhs`(1&)TbES^Kd8fZKG)$sEA8Hu-5lY?z2AJ=8Or|We>(S#Kv5R9wxZipvz$~pg616luZ8^;)Y_#-?s~8 z<<#j0ZG32qUU}~^_}6;xsKtr$>u5uJfrNYrmLorCSASDgBe=ZNi%V~qFdB_GzR`!U z_6r6{`FJJXP6>1liK%ifoE9Q`QvAszfd1LcTRW8_mw16Wcr;(8( zD+_GiwW84)$*%UDec+}@7j9mxf;P}-_7t%oCZ0#&jN|`}t2UDZTX?u}VtNrK2=Qfl zS4Yya9X|1+4%m;-<17s}7MtQ*^l^-YD=1oK=_6tfa951PalOWsfwls{*p4}WVJFWy z<}HhBe9x!EZkT98;VRu|7yU*3cO)|GYy5#X4SsfB?beM^dAwa&_O87vS)=u)!toWcHxci!8D$)fx3UPA9GA z&lczEZTbUn5e5$F2mlYxVk9LOZvr-gPSiyjTPx@*!h0Oj9S=A(eW#3o^w4eK42K#5 zW>{sb4eYl`bFQKsw&o>Rc9IaUBmz2XbOiQ1J1GQ)YC}JGW7Vh1FFs*q%5*ilO2`Uz?lxC;N%& z!79y7+oc5^01EJt8OQ?k(V+CkdcF_zTn%A8Rvw)HAfxsh6^7nzUX&m`;m$0BlF2^H z+Ev(n8&?M#HpaB>Niw5BdVU^`4OJ~a=yp0XwBrQk>z%z;ihr<%A;{T zA9zTP6!eHz*9VN!_`E2RJc+l-G}h4`>nk@pgzNoiB!%c#jy;T8G~TPr9&{0H_taj? z5Zm0xUJ(xBuk3cN#QA!H!nqyWmo|zv5NgCPWElL3fRorkXgjdpVmwaX+TG+GYRBH_4fhn~pa>&K zJqd7d9I=^l{Ps@MprcH%_nDAfSzLXzlWt?h%U)f?T|hk^8UM(LTJu*TNtX)1L%sawMGmo&C!=C z5wg*GD4dmoz;xsdyPx;!Gv94^Cx)v^tS!pqQv5ztG2(d}P9Jy#xnK0B2zGd#T@Iu| zJyvDZ=PmVq19CgKzu^TK!YsMido=b4nD6SoxZ9DGRN|NeQJann+b)CTD+p$xNH$NC zLzl4;z_;Nx_&|&(IFsYTycvoJ9w6!fD`Pr`Cgeic2hCl2Yue@WT3 z&xk#`$%$kMNXi&*@6_TRbagsoKReN=Epx(pDRu zo-S=dFoRWNUF&DP0Po@_jX>VMRcTRm$AkPFanj>HALt=7oLDjNEZ(L4`JX_OesN0S zH4<9N$F2@4xF}U^VWEmA?P&R3vB4ORLH;dx`8cX7yO2sEybh)SogoEB^xl?VU^Vpv zWoB}D(rmJRzrmH97Vb0J%X*pUuA#~YjJ&}Z5kb#;hzso2Kyu-2X0_Y>L=f}cvI2|U zr}hH;TxMbisw*#pM?DA+t;)`+mv6Ql+(|Rwdv|0n9B7nmAx&AG%yS%bE#pgAy87|T zd=hUzoz#`R-}kkW0sqpv!7)+*wfwd2hPE1g+*;jY4o{hlIBVPe0ds&oZ$WzG;zf~_ z`DR~(T({Q?e91yLPZf8Lxu$*^d$7AN$h)eZCffJ&1-P|RTl3Ysst4AvXPBbT%knhM zwz;u;A}*zV`mDS@`4?bBXg#zn6zoHB*gHyG04F{x6fFuVj+-cEh){r*W&e@!QfAQU zux5t8r!9wiWw0q{jBkMVa)Z_%mbsSGVm-*xERY4C{8*dn;bTXNZ3hT*uE#q7Y#-*j zrNL_y!VNQ`A&c6v3OtJdxI{hEG)t|%yY@aVBBS+$=|x16->D+wA!E|30 zwDv@7SpX=ZsG2ey%@nuveiNuG#(dMQxFc6YuA_OpEg!LIpA(;6yj;bo za0`D{xYRfeG&miP{H|>n)aW5T)v2*+bOTfK`UVdObcABWi0{fN7pLj5#m}r6P8}$e z?f_81g@Exwm)3=HDn=NQx?!Ot;UEw2W$tC#F!c1HUu16XdIH8M^Rwy8&&#r_hR;sD z0E>KtXw1D`n|rqx-Wp8HQO90;Fq+IMH4>$k`Tc|`A`JM?6dgualA1s$sfdF?ZRYjc zWl*hjv8H&NF~WWFF%R#voO`7np@430w=#ahbWsk_N}!S!efFdQ_#>Lj(_pAM2Yb2! z+v9uyEV2?KT+~3^{zWx-{yPDgrwC?$6o{d{b}E`ToSpZ9quia_w~auC-iP@~hB|B3 z03vaGhbOFG$8Ai2!0v)J+VGl}^01lYU zBJSOL7Glt~ZKR;KC|;bxi~w)+kH+rrwXA29QT#E7V@j8g(5z2>;rQbPwPQsuqF~6T zI*BpD_$-lDLOnfX!)#_(2cG;f6sJ&*^jnH?aMWpYtIhewIBwA`r(5lo2xOcYZUd=J zbt)E@2S+dl8*WG?;@6LxZXv1F^=d&+I&L+N@|7#cQ_C!dP4u+`KJrgyYuC0O7dsPUQ}}*+=6!E5 zM$v9wIWg4^die+qBBQpbU!0S_DPhr98CZpIo#~F}VFUa=eBKsg$hy9sS`A+?7r%j4 z6J@^d*4(iG+Nz8c2n(97$?VNj%XY!E^QlJ}dV2@1MM$dj9a_Vk3%WW%_w7he+6HAt z?eYaJ>oKeC(ItP{m%ChIMX3Itw;`pf(I)M4B3AP^I&v~cUD{6>9T=ymnx#;6p@(Ss z;$og&AsHT?;cFS!pu*{k)&nm`@WkvN^{TmDBN)IF_U*_*c%A2vZvd7CKZfpzrRR(Y zB!ax5=C6MttfG``>Tn5#o@C#_lt!)^unWDbPzGR}hL zDHM{*FGiJjoEZ0fOXZ&!r!W##yDrnO=+?A!jmiD$l>09Vp{>s^Su2~pvc*=_Bt`); zNzz=I9mYZ~!}~2e$atK%cu;(+1c=N|>?2of(x;iS%A?+g29T|~p!!X#_0o?Hmt+Yx%7kENFG)A{M1cw=ahAXfJgXy%9>O zQucaiK4jq#Kt${b^ugF}Jj(6s*vli1KKDubWmv#F#8y7A;;GDJ6YQlr8>`jiRS8>_ zAFW`DA=z*28~(?M!l=Z&Qw@=Kv2#Uce6e@T;SlR|o39LtujbF+am^@9AZ1((rX9%` zad7;H69jbA{J{cx5vp3(2XCy>7hs9$g~dxDv*+ri?^_Q3wW>DHHc|vvRN|5h8R|ig z^IKRi@RyuVf`vZ*InlI&h8z(h^hFJl^iJ0pbN~IW!bp5)2s{)|YN^M@BR8W z*Ib0>zHu0R$+4J_6e-2itRBOpZLbVUl8A((n1eC%(7mH}3+Fm=6+kiP#-m(q-o|Nt z_lPXw;QA^6^ac4$HB_)9oUN3%;`w!?qjVE*C~99)?Nf4=5?PFOO>bxHbMMaBIZ}52 zbDVzn7^9pS@C4NQz)F|2V`23ase&dgNL2$Ebw*lBBPl%zrgs{Hog76z~B7Z&SF#0SyRL9Lc7=03~ z77()^G_L{dCkJ9nb|~7b1NJyfC550k1=m`ctpcBCXZ&}S(% zRycgoG;}@w7HO+u_83&!cTgJ{DNLl$V^0dYHUanSaHa8WSmE|q%@}q0FwkuTRpCFQ z0JhV#LqmRaCbljb1e{^nXCgFnd+|sbGa!0YYb4(QZoHNQgPvXXGy^#`q(?89PQ)H$ zSnnPA!`qM!a%Ad=*-wrhl033}Gh3mSIKcYH`8asRWHMG>M+}QH-aPXMA{brf5>2KP ztARLtKOA$+X(4{*dq0PMV^C{qy&q^nlL5Elni*dgMJ7&w<8bxce~xG=aMF}y8Sha? zYT+&O5Uj$4oa{VEuDqgYRDZ>fMb*6>qoLOQv*6IEm;Vf5N8qoL+2V4Ad#nTKh=t+5 zq+zwm8N{*?Xq3`m{7~uN+SC5VA(^2OnsAgN)O4foD=ehguhRH>d#_w|OOtlW$p}$* zyvvUGH(@!5Ga_fhk^O-ITeZloLu<$dcwoaI6$on&Qn06}%Td#s@(I>CNCCY{sLgl$GrX|$Vhe_=P`Q>v}#Wpiq? z6@CUZ2DhAjlR3AqJ^Wm~xkS$?pxa`BxFZ(UJ-TCxR}7%2^&<J- zMen17|M}Re`+YSJ$w3q)e^%|44tA0>z1{TNo>crEJEb2yE=?`NPvx>$UMhd95Op5FFER|OA7gb-bS5x3;PZV*$b0{mcP{V^qa|b@S9}y8F}Wu zyheRp7_c?USal>z!}fNOQUM+9YZL$n9j?L+in|cP_QcR-wWbGY;i*_jo9mn#{RIUo zV6-5BDT#+-|$@M91Qv#^f$i_ZS;Azb!&OpIYwRveE%FB>TcLB&|nd;mT04*bW z&udg$sH%4B7sxO@g-EIPpqQ6Ah6fDi@6VtJ3}JTy=2JDUobm7zDBTBoYNJmtR-*Rp zvJGK`Jm5vopfWa<-1`)Ys$pl$ zTKc~_L8tEn!4q-dKEc>Qzb)ZFtXAepjK9 z7`WH=A$I{IBsqTy$th|Y-CAtRZ77LXwrZdua}uPb-ZVWn7)aW+AI;(f#5#+JAy1 z%Wj^Y>vJk#eryu#Go=_6r$ZKra>*h(lX{A3QhxXuXB95xfLW#_C;+`pzL#$2`>B%9lTJeXt)yFo}N1hBeGA^uXv9yu2I93{Z_%itHM{VopNY9&$a zndgYzR|f>&OQs)Is&jj45I_(2U+%pwl`Fj%jm0UBzGb81`K9Haax|yoc{=X526BZW>a~u}Cj3%_MN0UeJ^d9HjK@6I8K;V7(*l;rX(%xn$Ky zE@M%%INNyAN@a`JRNf(JSGr+%ihDB?3%IDtU*iQW8+J?waZ@&7N6Dq{Gp81)(b#ex z`WG*IgfCQ;`on<$`n%IFB*cYq2dPB(nrYuq!ZH6dH;%p|?BNN}m$10vEIp`bP4BT8 zAii=yCd;34lJM181c-v)X6H5$Q_lfIGrARwjuGY)LuASLl}rV56m89ect(S}$*i<& zwE!k6jSz!XmVivji{fjC29n}Nhz;Vt5Mud@lsEpiLlrulUH&L@D-!Y_#%j~dfMT%& z8+r6I-d!{Io_#|a$21lMqC^h7>?%p=zzDGy&m<;m+cVWD2Me_?@Sb4zNcnxfn3IBy z_&eVrrW}5vg-socYlP*;BTYr3Ix{NS%+ZdO#1y&kBmAe`%eWiu?Q#L;Wl~d-5fWs( zM@v^LU;hoG^o?zp0)mjP---5`RyzT*u?PuSyyTh*%oxBDF;QGYyA%A;m@VX<*F zR!)ZSZ>9W;=_$Kjd1p=3kNm!%iG4+0ia<~OpDgR|xKOjf#TI?C`?7JWiQvI%xYt|O zFAG?))Yho5smS2tp#}ZuDsSo~CGakDl6BQcO4hS?FB+zy(hK-_+KWe#ce^ixjbN>Ks3_RW$#4$!oCp4F-{C#C>HQ}!E1Mi zrr3Coh=XChu!&C{O>`6`;>b`>KW0CD9+sF4f_qZ#^|%{}t1aAiMQZ4-WQ;*h`t_}C zSVfyd;8`~H5DB0+Tv*Dfk*}_EaT$ML=iTR~PqOp81bI)~J-`rDE38%g=6x;%`Jq5< zI8k2S(3GCltx8asQXYHaDT>AJX$aNutuNx5rQN;uNe} z71%8jmJ|#8H5cs8Lz&c@g>dOcr4%9~2oU0gu$lQhR#tb4* z((^HCe7-XvBbcRexRf*S81deY{&o5-hb{7%le;iRGXiyYISvRdZaQw!J%cvT0t@xQ zgavYD_lpe5fi1FZ)2=&-Q1c6?y+`*xiXG=Gv&ka;yJ7iP1i4&tjDX8art#g_I4Yk# zg>x*_m_h$NlMz%Lb8U-^ps3U6xPv6%g;ZQ7;D57wK-8Pytm^O)!RFy6h~P11^U#@z zy$3ty=2b5`L1fBZbc$q0K4ej7fEc&KEiB=#;RIm5 zAP?bmfdLDAdTmGfrvP-Zv_k?Ah&VClhXq!A0Sb|C;fDy_)YuYaB*SF4Vx9{mvif3r z1c)y-lL*-rfgay<13D?8feX3S#?Q8tQ8PQRSXj z-u9!V*A^p}KOZ#nv>wt7&jbci_Ls))17y8BZi@aETHP-zzW^kOn3co{6(5G!3eh~o zBNKy`?g5{9tE$baoyJD_DB=u({{PC?HoQA#Q+*td%QiPxHGHC~(tLD;!E-el;~Dek zNiTwfXdj=6MH~;pmccLCUZamUwC0S1L>43~14nwMa6Qj1R?qBHq?jirA9s1sPOLu@ z^iCI;$(P+)r+@!4s3Q0&<9B0IoS3I^NJ^n5+J&nyAr7$`?35U@San+dODP#LFF`u{ z)7LO?rWh6j{>?TS9f51Ok09u zw1BJUNLQ-c3381!okJF5hjp&T(8O|_YYHwO~r=!-DY z8amFbS>B8)Rw9Ne+jmu=>i}2c5OwxQJ_z!PqImcQPlm z+bvceW|qUQz1eQ%{J&ib{AC^+*%TKJ97)gW@sq3r&dP|(gR{rS_{YZ-1DDJz)gco# zY`ig$B%$0lOA^g+#=R&wqzBC4$@-=<-ZDl%Ytb8%{*V{BeR9E6L#^v)W!x-l%a89# z+2xGYYq_EDw-scj|@w4c4w6f8~P@mEwRMiIZ>vEhUD|-T;I)+^PKl@gMM|AB1^s|ZU7^F z9LPT8{F>46CF)PwZ?e#@%Jg`OVm>Rpc&#|ihu>wi@!|cA9 zl+qn>pJ9m5{VRiqR`aTw;_`e<2A)08HC^uBa|Q;Q0X|BFL*$b;g9#_JeX3aZ$=)fG zB4B3p6zg2<0lH_FTeP`Ukm?;A(1xW>x^8!3#pB)=9mQ8xHjU@J1ouu#Ia1oa4}AsL z^H-MhbVx^P~q?*G4g$+cAOb~;L@Q@NzMj#Y|NLh>uhog#NyvkfB= ziE+A|$Ynyg9QWLZ&2>BFvSe&7Gpr0_vu4I-_J8_&y}WFXmw7zC`#zt~`}4kZ-Evj& z@@_afRxQIkd&M3-VbYmly4z%CZ+nuJ<9VV0b%A%+_D%@y+t}#gl&ViZ&$uJ zF_~g3W>(j{YaVLJr~I~0Pm+wX?v0WEf54ai?Uprs_v9pjJN&gJ=Ig~LL^{|MW6S|Q z6fkZ~rK#hObubt7y68{ap3Mwt`H{o(RS5M3hiGU{{4$Ko9So?vSMNXiZzJ|%wn69u zd);vP{mLmNa2NxsqT9sai@zuOKeA6`tvFlOVXde&pDkmBba&`yJ8<|)cU zkRyM}ENBYX>Pj$p+x^H@4cts~IiM@kASt!6f2kZrkQ?h(*ibDf(ludDuw01XVaM_4 zjtDuRP+7=~F;EJhGoi$qhD$p1vQHa;OZv{b?qwJ1etW=XVis$4qPj+qvOS)4sAq`- zFUl5e=^^gv$2Zi|JQ}SY)G5cc_%l7VMJBEHg%*AWc%uJWI3{LM`8lt8a_f6p>lM%n zd+3}7dQJ0RL+w<2m=?x@+MgF}j%_~DROqNeX+d#1dgsm127mIu&8j>WfBT;=7MmNB znL?vR^3GCKZZdKwNoU3o;;&Ql?Q@J;;j5#v-j;b!Qg|ovT|Z4i<93HU%NeO;jlubU z-tyY(0V;4C1E?V-(~V+U0z;Blg(pAz00qoEi>9!t$wyvZci!w3drmoXaQ-4X@U zgWy>p2I>}I8JGkxlGcfZWoql)BKz*WzYs}n%G$xY&5>0DtP(jAeTXsZBFFzGy3%J_ z7AT%r5~W$UI0%Rwago0vlf0^76CKRI<##3|Ee1F_Tl+f1SZP;G{W(1%STzY$*So)h zx+lVm-C;?gN<+|1GYV@GUuMoNuTaRONxkY@;uqK5F>}Z@(jlL2Nrm8GdrH^Fp`MgR zoH0#}j~Yk%Y+1bW;P$j_9AOlfn3G3T+h)(kKCPo6bO)ZsEnuY(s&sAhaB?&2+SAX- zp*I^0(N-Ta99%1doDkz~pn(!dS)&v6|)KXcGM zk-d62u6ylesOKHPGptrIgGAl<{l%d8i8?)nZIry3Q|MI1xD#@yrx31a zIA(6vX-DJk~VR5{^ou^izWTGRmva> zu?$^2^DCaEw%iZ0o|MWiP4KkoLaUTuVMlQH$y#oQ+Ir`(sZ7>f803ZH>d}&G4<+ip zFuC4Rn&Hb)46(dLjXM*Nj-@Tt`>Iu@cK~L~-3D73%I|fLiie&)tKB!&CnaFXXQ#99 zgpl^EZq*4f#NNYcIxQwXza@(6$S(%893rlRc3eD%p@!LRW5(HHx9MMzKrNHQD4aKD z)+Ji@)nTtwt2u||&Ag%ZSfOw~(g zK{PUHX@2e?kK5Q>3-hGVZe1nT{%ks+buDNoqas>anvuLD7Ij zjv}aXh8|KGUr)XE2u}VQub_9;LwcBL;v|HzUy~YG`#&nGU>HY z2b*~Jgxp9A9REPS8PYuS9HhWX>O=(j?81`v3n2RptPZNoUUyF!ra4}wvkh zm=pmI)=D|QVLKW1v~Bfy0 zT#jsR_;p1`hnjnrx?&BW7C{f1;Wo8cH^guJfI|Pq0mZ5~UG@#K4;x%slUv&QGf}`X z!x`1clSlT05&Us0ym#+b6utiM@tSP2V_<5zojYym(cJsrqdW*@EzzNGBtb9N?QicZJC{*Iv}vSaZ&mv`xx5~MnMN2R%zxhKKuA(5{^6Q zub-Em1FFh&?iT4@flj5_@=kaHGNqEd!OT>35VWm8KFxc_zPXcf-D1`Mjm<-C2K|RV zTiQa_hxfJ3D20$)TVa$1v!nnJboNZMqNtS>#UA?*?+hHn&uYT+zgIS=3&vi=M|2z& z$&n0uz0kVa&7$Gho8egwsJPgNjQYYgN=dJ!g0TEVFbE?FD&8 zc5=pHM{Bwb1S{rdK}*K9V&@1QEYVwT615|KcotRQ#W(R;U_DT&p0vX7B97 z4%e%9f2}G$JvD`8C^pYprcZTqNS!BW$H3K&8uN(GI8!CMc@AU>A%4Vu{Ik~cA^YJJ zY;XNgjGVP}bph)JD-e@cg>R#*_)f3Wcw4S}(u#HOo?*Kjk*umzX25F=*NJhaa{5h8 zaWzhS4fxI$Sw-eGx$a!m^!Q+!6 zvL}a)#RC@K=gQsf<{;AMY=$}a08_nYXJtx_!PG?!DiRid0f&2|y%claN+DPN6W+tg z2#XUgEa{@kG9fh4N8$}rrTCuuvQ|fiV;S&j)*+VRTe6u&x@ydKwK7ZXw&}sQ&nks;yn(^Zs;++&FYpst#Io?>Y4)Fo>^G#R| zJe;YMZq|*Bm)}?9ziwI~OMK2;F+Uh|FuhKEyH*9RX(MyvM&l#%D#Eehbqg%OqgOm2%DbtVpC-Z$3qOl`qS zm0dJ%D}LziC7crFsavWb6xtxm`b^E3>Pohp2CL9@=3BVG?B zb~81A4T`q~BR>)IzM|RZ58vpa?lJ`(OQsah7iF=6n%hU1N z10tWJl?j8j;Pu|Pmi=JtdR>;};pGMXVS=w|{3K#eIz|EnG7!_sP_|Gi0s;rN_7Pla zc4=xy@4DLl*M31aGFu~0Y4^wiZIcL?G%*C0gN?bRyoRvj^MU_<3IhXfA3(*`W4oaZ z_5J>!NvgVlDgR}+f-mDWaBhwbhkPLGPNk%*nof5r^oJHmA`Bcl%UhJPe0PNPC8|EJ zb8+>;l%l5spgD7ErxX6ERlh^hMIO-iRuWZi3B{*-&{W}J>i?fr)w|O2FSya#7H;GYf<~wO^q`fOArKcrZqj@&+?3DtqI%Cd7;P3w~xG8!lltZ-;MTy}a(W$}G3wIuf%2g5>4GTemVVvl86L!n_|k4=`;WXdeuScDXLWxi zUPFPzqrqG0+%%XAO>p>Z)3<6nAFYt*!*|9d*<~m^jT7Iwi!yrI{&9STW0IBWA+Uxj zg0fkm-#@F}z4$66AFTVEL?ICV+b z`cJJED|MmAKXc;pG>%0DajS&3Q(ysOKWwOpYYulMkC^B1+l6*>vejUju?b<;{xra@ zE5##1mE#`3cbK!DYMv%4h8pNI;qA{5CKHn84H@u1cgZWIGStE0m4L%kyRR!;TVZiv z!{_z!-Hh3%J2a>*xZ{*_eSD;>*PO;I+%YyGdCndj?9qUX99l6|kDCK1gq^mV8Bf zeexwLjG^L6s;Y=2AI+DT(P2SxYpq~A*8mNxp4w&Sk>@;4i?ZXK*<*5f`4_XnPN?yC z%+#~vs=A#-aGM%5smj>RBY@KD3)xu$+{-sRkz8mc_k?@e?WPH2C?&~&AvkTF|7+VA z(jFT*AsHDXr=}U~Xr6PRB-IuuA`!WQnB<&S>C`T5(|sLHlUrqFr-xdgo-`kU$<2|- zQo4R^f8LWs1Po(z6PCLfm|e;T|0u6X)>&YW4IkN@T#uCZTd8AT0Z1-%_4cP>cwHHx zv)>63a1-`ufdYg%LrCiF^$Dv0CIr}&%gS+#c{*`u|8n$iK^$N@WvAI75~K{A1Llmr zK;?QyHGNZIa%-KoSLkaH6!lqDSj7_UMJ))gV(o-K)(@>bUvU|E!!vBr?ALA-&C@i% zF=~Va^6pU2HNTP)DN2Lzgv&b<^wz6Zgi;yob6tGp5$quKmY|mOXYIG1ctxCN4|Q|t zjz05>z0p~rj2I^)?hCqCCYiT)tSw0B_THam-$np=&AL(khYJYYR~ z)>c$5Dp3|xXO^N;Ee8q&y<=ui^;eZ`&;WA#zT_nQ*Ei}Q1B&;zj6{%n!6)xSXESmb z?^q&a4vXcpZB5j%Y=+m&1l&*#VVXJBCvQ&H$-xCquxIAY)z!u0>)m6SM}3KXS4_G8 zU}`$ys!!Z_XQDfrM5@_4oPA&+nK||0p@21IisCRkpRS*gqeE%6YAk0bs5cLtn>Vwp zsxWh8^lzy3v^S%JJR=#SS3l?-CXy&+i$r9+WxPt; z!olYj+ja-UeG*^`=l_7a7&2@tyi(Z_%AC#)J?%KQRL6njP5HhVBye8UvDxrv-mcX)?gf{<`?7`J*hOfrnO9~bpIuw8 zaT_<(4|4Z-%u(rjRd!lyOf=M2GrMB`XpfQl*i}q!^SjM9AYSObm(sM2Bl}_4w^Nr) zCo>iKZNB=C*$)q&4?nJL>xh0_kmKgrl-d1q0I(KpwsD|Vwx5MNjhw@c3Oj-R9c-;i zz$DJmwyym$RK6UWnBy(FGK>1%nYz!Ss1$x7aPjp{Bi|@WQq&MfGwV@Y#n=1_U{l0Y zvZn2H=O5S#u@`#g#!(K$VnE(-oL9ANRC2?ciU-;&WM0x87g;uQCtx;Y82Wn!wf9Gy zv0PQ={6$}O%z*;m?qX?b14iAK2c{RmOG;&vgZyiM%7k82< zG2DTe)w!|6=dzj~v}sKM&~zKG`;JOQ**jG*U)AdcIL!^MLz#N8bvi>> zFIp_Sd-ofs<|^Y>R6f9LS7juDue+gvQ`YwrPI?ElC+2)ekI5+=cNr5g`s|Lbm|s3= zq<`$L`PX-9*}Gg-b+&z(!%jw-@T{4*_UF`9^Pq3Ho3^j6h60Ui zO3vKvl{mmFzMgkrUy<%@aBjg)q3>@&2Ms*6S+jp`$s*=X0~Z`V8Y;2h*heVxzan1& zN&^|j+G|il=C=<)(i9C8_=k)9Z-%nP7WgiG*Cs5zCh2yadC=B7gk}v>3%Jv8#xSm= zv9$E#@D+1yHp)){KqpbzgyhWxq)g(fvDHNnTjwOa?dqXpe%r!o{+np~2GM$Zu10od zgpGCE^z-AYB`+~4Jv7>p$=ToA(-EuMLxCaaw=<`=%2P38;N&^1)~EqW_Ntj_{#iS z-q&xWa7C3a!7a;qa+TCQT6u|e?OQW_ba31iziixA=m~lJy z%~}Fyc6!s{r_Z6Wb158)frZ%^Su%o&*O53}=%SEjEYebC0Ajmv>JYV1oc~btGhe1j(_!Tn9Rs})m3bVjQv3Y=K3jQ;^?I^KP)QStiwWU;tuEp60MAmc&H6l_~xA{-Vci1i%0tM)_XgBe-nRRM&{H4*WqJ94XgTn|zcU=_&K4=r^ArlA>&W0R6RS0LE!gnMQiPZQ|tZnSoZ9(4Zhs$Lq>AP$b) z9oFZ8RLYzUY)_}I9<%Ch1~B^2PlDfpfz8vl2&lq=T2UdOh@X8q7$w~^-J3BP5_>%8 zx|55t#$4QE$Y8CFCfJ zn#F9Eep^^V4z#>2`A~WPQ!@jVpeRG~NUXiwlJd-6(ey=3i~^k{Ki`IKWlYWX2)~P3gdfn!BaY0m&@UpbuN??`*g6jo@GjVHOSZRX@MB*0A-njHL2kF? zwd!nHmGc4cJ+6JezQ462pN@=QN@o5Mo8on|exYS0yuKxk{a!grsvER^3$c@Q%LIrg zaCd)Vcatef`pP{ScWI?q#*RUw$&2T90EOi6id+5m2TSR(<;N4%F~zzpwKlJPY;WKl zZN$@^?h8=mRSJfa#$3b?r*Q1MEL9x(VY?p9>dws3fv903)8o8yvEu(*x;6tyexi%P zzyr3*-q*#7^L>}g$|I)%kkOxFZ#x*VR023;B=@~@(FW(1TVPlQdlY}VV}a7Z#b3m_ zD9rn(wK_59XM2hbFsB9j;m_kK_^j+T`*fUQbC@+JxX7!HZ}n7#H-B4$kfL8bF0hqT zzE6EtC-=4o+oD}D-6X10*E!L7Nd-hx~mCjMsp-Zr%gLkyb5rfVP)kcB#;7R`BjkL**L$g>=rL_ zhH2f2_NVUkdS~gGn{$Z5-il?INq6xZ@fPeL{}IGaVr-cBOWFf~XB^istxpqWb{pxh zOr%NrI*(*47!}SJ41xM#ZLkQk*%Ovls`JhISDS7Ia_~cj<~Z0lWTb+Vfmw+SMxUwn zHJ^E_EWh1^$9AK#G zHA5cgf0}c;(qe!AEtjLf5`c-L#6OGi3dYu$QdW95Kj_nW&jXU$UB_n4`e#n1&-+Mh z2G}ncW&PWOLrzAoaYvCU(I$>Y=>mF8B#Sd$Y~g}%Pn)`b- zxM$HqUguVpQpfNJE-ZhR(h7eYxiYk9K+OrR6d#0p*!L7HOXRwT0kSDG3IfEJ>`nI0 z`)^F&Oyq05oH!DpqumSGLo()E(vS9uPIb=FJsyo%wbYdl zXFjOYbpYygwHiQ3^_*)EyN9hJf5y*tIjJXNpB3@iq0sH!vCnG^%CqQ>i6{f;v952f z`+}K&zlsm;MT_g&e|N5P^kcG(CjEIwyvJ2}Dh5bJ#m zH@szRp*MAildtax#!0Pz_Yp2iEJj8Z-54`ykiZGcL?VwZH$B% zfOtR^MDnK)#WE|1_rPZ%qs}JYqRowI zkfStz^*%_%9k3?StvoCAprNnAKQl6e(Iv&YyO@!Ez3##HNcC}QbGf%8m4do;YjGE{WeD$GF1HoP zfj^dMBx~?2ahs8r1K~p(G6S#v8$0tn=j(d;X?w=??6<(of6$*3-ghB26#CAIpJ%Sm zAze0c97z(tjy!H4E z5ec^_gFZP`tIh}b4A%E1!xaWH`wTSrkNhs3#i*|o^Do@KTe{bw=W2_J&~MKeCfO=m z8)&{M?cVLT&0{$0G+FQ|)$shTC6!rq%86^?@IV87W1=1~&YBUf7v#}JWYR@QN^^v- zLWOLvqpDRYrgZ^#G{|KD?rQCY^xE2hE3kj3A6u^l4(b6=S<{s$xAxkkQ)i3wN?tF z=lF$rR1PZnSiv0yz>2lYcc@9glmhk| zP3YRQ3iXVu|lzT^Z(T5`ILklN59|G)OKVG7(k4Qy{ph_sIbG;HXpC+dvrcM5j5 zxiqm`0Tp4PZs5@h#}tcyCj|1p^h!qUC8Gi558hUW@AG@RFUsQp_~Se3uC()H!RJn3 z+@oBdEXaKJxlTUlumNW&u881f3n<@$X>VAenK>Qs5GWo#C~u0xdIXn%Kk*om$BCgK z%$$Q$!V8Yd)#ZZJ@qsmt-~7cvg{AW*&A2Jrt^(mFUUS(dFv;VF24Yw4YcGdb_2_sk zo2#-AjqD5bfz6FmO$%X6z;N85$4|8;W%OhBTDBV4%vDNw0F{oArLY)_nq+{F2pBqH zatOJ!Er8vw@6(NsVrV#f?*mvj`K9BuArYhN!}5q_mhN@i3jHL&Y7!8rXlHUaR4P-{ zg<3T~Vxl;#33MrS!?XCO2hj$T%fic==tBgaK$%vwYH{xWe`H-)&qqB|6HmfDDQ`4G zgu%W*aCitKXmmslc7FP6rPy z-TD>ACa5zDDoOf;U01B~+I-nm;I|<|hXt-_PQl2`%_*4G+{6g1acwnLRyEUTdi|dx z&V~B(y@xmC{UrYUS3WWAnK_RJV0`NevT>Kl1;}=ce1$3KKJa?QTqmkCaO1%XI>B&s zD=DW&d1YIFt>epY6g~7w;y@f%Wg|2)Gy7N1 z+T?`_{pR*fCF`#qwaM`lI2o7|FN4WsxEhuf8@KLTjT-609|Iu*~{ zKsc4R(|_LmlaC=~!8{w4_S>W;XsTK;mJ52YO&F4Q?| zpzN#e-qcGJ7MA?H+$L3s_qc)`o98i2eEP!$3dsy^X|?*=FUT&=;kchTiP{Lh?i z`Bok5drmVWEdTSGR7>L%;ceNwS)UHb+Gva53*WtexT@y#r_bwj8I>8W8`|DN5>qY@ zkp0LKX(56-!=2MTnJr6-6){O}+YP~kw*WeYT7R^PVS~V;u9_%-4w{D%9+cI*z|Jeq z;H?<9uy(M}VoR3BjR73T@?mmKv#8G$ndp((ncAWzusk;x`?h$JrLkTmb3eZZ`2=sv zJA(Zs^Wrj=858Q6;o9?0QV(SL08Sm$J!A%Tz!3_bC z@fFMv41P&_$-^t0Q`$F>Ezf_i`@<>*yGBz-6wUwCtKc?HE~hagc8QATmmG3kQmp8a zCo;OmO%+WF=V{t(m4F(vLoUU-{g*2GQUA%AhUi)NhV}UYUX$LRitl8}gZ&g~l4lF^ zbYHygicE!~4dZoGzJi2jIA--g=!Z21|Fgi?w61V;^a3DJy@EzKbS5AKJwyaskS8~G z=E1tEv)=o!o^0c0cBwwifux&s{(39z(z_?M*wAFmUYg%uRKj|YOV9u@gXQA;IH!6m zvt_~7*~0jL3)rw%_#q2-mLKS&6LV<_hKg38+ScddZ6h51&bQqGR3T-lk)um~zUM2S z1lNp9?8}BxuggbJZmQG`dc(E~Q0n&tEFk)q{`3V{w;eukTf-z=W?A4P@{-$Jzc@;w z0JbQ%NUGtT;rLEl0WG3aF&Z)$^W6vUW}+@+`klX#iZ3%;?ZgTX>7pJ|pVj`k{i3n% zcn}^DhgRhGLq7>@=g_fzo>dg(3I6F zCxRNH&`o%T9sC$u0TWYN@T7%!?Zj1GfGMzGc6+|Hq_AWPW>NE^WoL6?$v)<}T4jY^ zj}}Gn@$~p!$L!;@^+V6Ic;?CPbwSJ@ktf40*%vCgmD25Crt9$!sLTk6UY~l+3f}(@ z3CHiY2(?rb=)hPsok^=wmQ<)I^1Tbfjji^83kRtukin8Lf>96NWF+pqtT#}@_e31S z_OOAVsQ1DEc9vGkdw=5oipk_l8*&66TIQY7cir30H?!1pePscZTOD7EU#U}LEf1kh zseV8!kMWDUyY!{dUk}bQG-Npax#ovu7xUKgTe+^x#kMGbX|;p#W3T2GaVX%dL)W`9 zUO?<_o7or`BVV_H>%cE&6cR@eo4F}m7?gR5_L5N{rUx$lYzuuB1BiGX4C0Q$_}g^E z`_D&o`v}SZ`kH7a=Nw88S89%sm{^gFeX8R3=cV;W>hGJg)zlc85B!qS%nNEUEArr8 zv3Fb|GP#th%O>0%)STFtmD1e<>#sdnHuj23O*58{`QR{!rex0h5haiJNf17_XX)6i z`V_zs<(}hP+@i{Q6#U~J{Ou=%;~rZEW4+2`cb9E`X>qw9lkuzOQa7B|QYp?Yl>zmM zY`X8eDuK71s^XOIr1?|N+^kQ)ajO_=bP*kpr#s7OP${W_OakdVP#((>m6nf9E{SIU z(o9PmHpv*pT))4KrL{jr7^wQ4suQOgn(6f(1qLgIfwyv5i8;rX#nLg>$iPhd6l!U6 z5fvB>(^ihyhvUnvpo6hLv2DGL!mrBWS%bU`5f&V<>0oVO$pu>gQ#}i97&WY@^P!gKfm8*}1T4S#wxs*PSVxrIT6ZL9DlX;| zxqpN436R7J&xs{Z%FW1Mhho&>eBSA}OG2v`eC;Xm^8r*iF?3;?e7Bk|9=-w-_fEHG z9WO&Uto2bej!`#nMwq-@zAO~U1g~0*o%qWSeyvtM z>Z-l1S4F{deq^Az1|xxV6PAT9h(t%{BILl(kBvaI!uhbSr~&qKSme$i_kx21H7`aZ zAbee5VMCg0?hK5e1HI^_7W*;b`(n1wW`7T8Tfa1@Nt8rd+f*^(T_$!^^9dmKA8x1K1kbu#3swgPHY4~ zoc^l@H}WTuMvx5ds`a5ZkSm4K`y~`0)`Ud1>80c>Q3Rc9l%rSd71o^;U@G<7C_rM! z0wud0bdvx!2s5$KOzYUB99*8QVtb0viRs)uCgdC0y*b}sJb#+CDnsx&A^IKw>;!iQ z%|Q`P*W9?uLDgA}Vy*snyCY77brV)kL}xXN(pwG-Z`bl}6S80anPX@uQ*v=ox)#kr z9j=R~*XUZXZp+!t>1QXizND*LlD-a=|AD?<m@=H*Gx% zdUU>fu58m$O#1m%Kj@sBG)7o)t$%B$sXFuLmLqD2S{6vg@8W3^7rn(xPb5IRSKnfb zOy-=Q9Aj8?zpI_L8_)p6Ce*CT`?K$(fBNYI_YfYybWX|-#hUnc7rDx7_&A58dDQ7E z^wpJZhR1jgD&W)3s1`ToJK94MSQE4j<&az3vW^=`)NNp1_pm=8H{B~HS4Q5EAyM5L*fk6Ie)ul33gs4Y zcU#9=crH`W@&D%IJ8NSLI2I!(!XFCW0no)2%-BC4IJ+`@=%^MYA+U<2LxGpY7Nwv6 zV^}!G3omdi5Yq7BcoJB;CIzcIO35gq6tN~%Q+Hu)7bqn#^2PBl<_oq7*Z2k7&@U3L zu{X=1j9{=__x`fe6Qm_c#4)|g_78};0G^F`9r>qT&uCdHl{)4KxZcPHg&D-{kLLvN zVMX&YaE5^~{PXbs5nn4{ajm3t`^qJulGZYw55#i5)7|t)3iFS=C;#7(PVWwh4~)utjdS!2#~9t(-~Mylpov`^d-~IU7{qH<4-#g+>9& zVdWIZPdKL*B}v`-{WhqgvtuJWq($Atdm}IkdOX^1A0T?Dg*0`-k-I>1vayL*OD4@n zonWuIOg&we_^-4P6vN_citw!rldrv9I_-61$YO6b5woGp0%?IAQ^rv(3?G#^FAhRw zg4>DCVk0^6B99=5#3Mos>5PGMJ&NN^E{m(z+J;*Q7K@uPd}X$+4W|oDK7URikRaRGhN$@`SI7N|qPW zaiFKKMcrlKC5xqm?H+@DWXJ-1emR?5LX1_LUYkO$FaJJW-yox)!P!rHjo8()kL
    GasU*qQ&)%evAJqFN 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

    MPmsHNl)q(do`=qtdj5Sz?i{Z5{7!$5{>Qy< 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 z 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 literal 0 HcmV?d00001 diff --git a/executor/adapter.go b/executor/adapter.go index 38a1cc1e3eba0..c86a613af96f5 100644 --- a/executor/adapter.go +++ b/executor/adapter.go @@ -893,6 +893,7 @@ func (a *ExecStmt) LogSlowQuery(txnTS uint64, succ bool, hasMoreResults bool) { BackoffTotal: time.Duration(atomic.LoadInt64(&stmtDetail.BackoffDuration)), WriteSQLRespTotal: stmtDetail.WriteSQLRespDuration, RewriteInfo: sessVars.RewritePhaseInfo, + ExecRetryCount: a.retryCount, } if _, ok := a.StmtNode.(*ast.CommitStmt); ok { slowItems.PrevStmt = sessVars.PrevStmt.String() diff --git a/executor/slow_query.go b/executor/slow_query.go index f689b42374e41..999bf309c32c8 100644 --- a/executor/slow_query.go +++ b/executor/slow_query.go @@ -321,6 +321,7 @@ type slowQueryTuple struct { user string host string connID uint64 + execRetryCount uint64 queryTime float64 parseTime float64 compileTime float64 @@ -417,6 +418,8 @@ func (st *slowQueryTuple) setFieldValue(tz *time.Location, field, value string, } case variable.SlowLogConnIDStr: st.connID, err = strconv.ParseUint(value, 10, 64) + case variable.SlowLogExecRetryCount: + st.execRetryCount, err = strconv.ParseUint(value, 10, 64) case variable.SlowLogQueryTimeStr: st.queryTime, err = strconv.ParseFloat(value, 64) case variable.SlowLogParseTimeStr: @@ -523,6 +526,7 @@ func (st *slowQueryTuple) convertToDatumRow() []types.Datum { record = append(record, types.NewStringDatum(st.user)) record = append(record, types.NewStringDatum(st.host)) record = append(record, types.NewUintDatum(st.connID)) + record = append(record, types.NewUintDatum(st.execRetryCount)) record = append(record, types.NewFloat64Datum(st.queryTime)) record = append(record, types.NewFloat64Datum(st.parseTime)) record = append(record, types.NewFloat64Datum(st.compileTime)) diff --git a/executor/slow_query_test.go b/executor/slow_query_test.go index e30829faa04c3..70735155dad54 100644 --- a/executor/slow_query_test.go +++ b/executor/slow_query_test.go @@ -47,6 +47,7 @@ func (s *testExecSuite) TestParseSlowLogFile(c *C) { `# Time: 2019-04-28T15:24:04.309074+08:00 # Txn_start_ts: 405888132465033227 # User@Host: root[root] @ localhost [127.0.0.1] +# Exec_retry_count: 57 # Query_time: 0.216905 # Cop_time: 0.38 Process_time: 0.021 Request_count: 1 Total_keys: 637 Processed_keys: 436 # Is_internal: true @@ -79,7 +80,7 @@ select * from t;` } recordString += str } - expectRecordString := "2019-04-28 15:24:04.309074,405888132465033227,root,localhost,0,0.216905,0,0,0,0,0,0,0,0,0,0,,0,0,0,0,0,0,0.38,0.021,0,0,0,1,637,0,,,1,42a1c8aae6f133e934d4bf0147491709a8812ea05ff8819ec522780fe657b772,t1:1,t2:2,0.1,0.2,0.03,127.0.0.1:20160,0.05,0.6,0.8,0.0.0.0:20160,70724,65536,0,1,,60e9378c746d9a2be1c791047e008967cf252eb6de9167ad3aa6098fa2d523f4,update t set i = 1;,select * from t;" + expectRecordString := "2019-04-28 15:24:04.309074,405888132465033227,root,localhost,0,57,0.216905,0,0,0,0,0,0,0,0,0,0,,0,0,0,0,0,0,0.38,0.021,0,0,0,1,637,0,,,1,42a1c8aae6f133e934d4bf0147491709a8812ea05ff8819ec522780fe657b772,t1:1,t2:2,0.1,0.2,0.03,127.0.0.1:20160,0.05,0.6,0.8,0.0.0.0:20160,70724,65536,0,1,,60e9378c746d9a2be1c791047e008967cf252eb6de9167ad3aa6098fa2d523f4,update t set i = 1;,select * from t;" c.Assert(expectRecordString, Equals, recordString) // fix sql contain '# ' bug diff --git a/infoschema/tables.go b/infoschema/tables.go index 10a7f9d25f7e7..ca232cfedc6fb 100644 --- a/infoschema/tables.go +++ b/infoschema/tables.go @@ -718,6 +718,7 @@ var slowQueryCols = []columnInfo{ {name: variable.SlowLogUserStr, tp: mysql.TypeVarchar, size: 64}, {name: variable.SlowLogHostStr, tp: mysql.TypeVarchar, size: 64}, {name: variable.SlowLogConnIDStr, tp: mysql.TypeLonglong, size: 20, flag: mysql.UnsignedFlag}, + {name: variable.SlowLogExecRetryCount, tp: mysql.TypeLonglong, size: 20, flag: mysql.UnsignedFlag}, {name: variable.SlowLogQueryTimeStr, tp: mysql.TypeDouble, size: 22}, {name: variable.SlowLogParseTimeStr, tp: mysql.TypeDouble, size: 22}, {name: variable.SlowLogCompileTimeStr, tp: mysql.TypeDouble, size: 22}, diff --git a/infoschema/tables_test.go b/infoschema/tables_test.go index ade2c8e172ff3..9675d3fe28ed1 100644 --- a/infoschema/tables_test.go +++ b/infoschema/tables_test.go @@ -547,6 +547,7 @@ func prepareSlowLogfile(c *C, slowLogFileName string) { # Txn_start_ts: 406315658548871171 # User@Host: root[root] @ localhost [127.0.0.1] # Conn_ID: 6 +# Exec_retry_count: 57 # Query_time: 4.895492 # Parse_time: 0.4 # Compile_time: 0.2 @@ -635,10 +636,10 @@ func (s *testTableSuite) TestSlowQuery(c *C) { tk.MustExec("set time_zone = '+08:00';") re := tk.MustQuery("select * from information_schema.slow_query") re.Check(testutil.RowsWithSep("|", - "2019-02-12 19:33:56.571953|406315658548871171|root|localhost|6|4.895492|0.4|0.2|0.000000003|2|0.000000002|0.19|0.21|0.01|0|0.18|[txnLock]|0.03|0|15|480|1|8|0.3824278|0.161|0.101|0.092|1.71|1|100001|100000|test||0|42a1c8aae6f133e934d4bf0147491709a8812ea05ff8819ec522780fe657b772|t1:1,t2:2|0.1|0.2|0.03|127.0.0.1:20160|0.05|0.6|0.8|0.0.0.0:20160|70724|65536|1|1|abcd|60e9378c746d9a2be1c791047e008967cf252eb6de9167ad3aa6098fa2d523f4|update t set i = 2;|select * from t_slim;")) + "2019-02-12 19:33:56.571953|406315658548871171|root|localhost|6|57|4.895492|0.4|0.2|0.000000003|2|0.000000002|0.19|0.21|0.01|0|0.18|[txnLock]|0.03|0|15|480|1|8|0.3824278|0.161|0.101|0.092|1.71|1|100001|100000|test||0|42a1c8aae6f133e934d4bf0147491709a8812ea05ff8819ec522780fe657b772|t1:1,t2:2|0.1|0.2|0.03|127.0.0.1:20160|0.05|0.6|0.8|0.0.0.0:20160|70724|65536|1|1|abcd|60e9378c746d9a2be1c791047e008967cf252eb6de9167ad3aa6098fa2d523f4|update t set i = 2;|select * from t_slim;")) tk.MustExec("set time_zone = '+00:00';") re = tk.MustQuery("select * from information_schema.slow_query") - re.Check(testutil.RowsWithSep("|", "2019-02-12 11:33:56.571953|406315658548871171|root|localhost|6|4.895492|0.4|0.2|0.000000003|2|0.000000002|0.19|0.21|0.01|0|0.18|[txnLock]|0.03|0|15|480|1|8|0.3824278|0.161|0.101|0.092|1.71|1|100001|100000|test||0|42a1c8aae6f133e934d4bf0147491709a8812ea05ff8819ec522780fe657b772|t1:1,t2:2|0.1|0.2|0.03|127.0.0.1:20160|0.05|0.6|0.8|0.0.0.0:20160|70724|65536|1|1|abcd|60e9378c746d9a2be1c791047e008967cf252eb6de9167ad3aa6098fa2d523f4|update t set i = 2;|select * from t_slim;")) + re.Check(testutil.RowsWithSep("|", "2019-02-12 11:33:56.571953|406315658548871171|root|localhost|6|57|4.895492|0.4|0.2|0.000000003|2|0.000000002|0.19|0.21|0.01|0|0.18|[txnLock]|0.03|0|15|480|1|8|0.3824278|0.161|0.101|0.092|1.71|1|100001|100000|test||0|42a1c8aae6f133e934d4bf0147491709a8812ea05ff8819ec522780fe657b772|t1:1,t2:2|0.1|0.2|0.03|127.0.0.1:20160|0.05|0.6|0.8|0.0.0.0:20160|70724|65536|1|1|abcd|60e9378c746d9a2be1c791047e008967cf252eb6de9167ad3aa6098fa2d523f4|update t set i = 2;|select * from t_slim;")) // Test for long query. f, err := os.OpenFile(slowLogFileName, os.O_CREATE|os.O_WRONLY, 0644) diff --git a/sessionctx/variable/session.go b/sessionctx/variable/session.go index 13f5c271649e9..bf277cb461697 100644 --- a/sessionctx/variable/session.go +++ b/sessionctx/variable/session.go @@ -1610,6 +1610,8 @@ const ( SlowLogBackoffTotal = "Backoff_total" // SlowLogWriteSQLRespTotal is the total time used to write response to client. SlowLogWriteSQLRespTotal = "Write_sql_response_total" + // SlowLogExecRetryCount is the execution retry count. + SlowLogExecRetryCount = "Exec_retry_count" ) // SlowQueryLogItems is a collection of items that should be included in the @@ -1639,6 +1641,7 @@ type SlowQueryLogItems struct { BackoffTotal time.Duration WriteSQLRespTotal time.Duration RewriteInfo RewritePhaseInfo + ExecRetryCount uint } // SlowLogFormat uses for formatting slow log. @@ -1676,6 +1679,9 @@ func (s *SessionVars) SlowLogFormat(logItems *SlowQueryLogItems) string { if s.ConnectionID != 0 { writeSlowLogItem(&buf, SlowLogConnIDStr, strconv.FormatUint(s.ConnectionID, 10)) } + if logItems.ExecRetryCount > 0 { + writeSlowLogItem(&buf, SlowLogExecRetryCount, strconv.Itoa(int(logItems.ExecRetryCount))) + } writeSlowLogItem(&buf, SlowLogQueryTimeStr, strconv.FormatFloat(logItems.TimeTotal.Seconds(), 'f', -1, 64)) writeSlowLogItem(&buf, SlowLogParseTimeStr, strconv.FormatFloat(logItems.TimeParse.Seconds(), 'f', -1, 64)) writeSlowLogItem(&buf, SlowLogCompileTimeStr, strconv.FormatFloat(logItems.TimeCompile.Seconds(), 'f', -1, 64)) diff --git a/sessionctx/variable/session_test.go b/sessionctx/variable/session_test.go index 340a842ad88f7..98ac2742c7039 100644 --- a/sessionctx/variable/session_test.go +++ b/sessionctx/variable/session_test.go @@ -178,6 +178,7 @@ func (*testSessionSuite) TestSlowLogFormat(c *C) { resultFields := `# Txn_start_ts: 406649736972468225 # User@Host: root[root] @ 192.168.0.1 [192.168.0.1] # Conn_ID: 1 +# Exec_retry_count: 3 # Query_time: 1 # Parse_time: 0.00000001 # Compile_time: 0.00000001 @@ -232,6 +233,7 @@ func (*testSessionSuite) TestSlowLogFormat(c *C) { DurationPreprocessSubQuery: 2, PreprocessSubQueries: 2, }, + ExecRetryCount: 3, } logString := seVar.SlowLogFormat(logItems) c.Assert(logString, Equals, resultFields+"\n"+sql) From b1d20a2bec08c50b5efd5e732e1c914d49cf846f Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Tue, 20 Oct 2020 14:56:56 +0800 Subject: [PATCH 047/229] cherry pick #20523 to release-4.0 (#20530) Signed-off-by: ti-srebot Co-authored-by: Null not nil <67764674+nullnotnil@users.noreply.github.com> --- bindinfo/handle.go | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/bindinfo/handle.go b/bindinfo/handle.go index c60e3c9fe931b..62bcc64b43e5f 100644 --- a/bindinfo/handle.go +++ b/bindinfo/handle.go @@ -756,6 +756,10 @@ const ( // acceptFactor is the factor to decide should we accept the pending verified plan. // A pending verified plan will be accepted if it performs at least `acceptFactor` times better than the accepted plans. acceptFactor = 1.5 + // verifyTimeoutFactor is how long to wait to verify the pending plan. + // For debugging purposes it is useful to wait a few times longer than the current execution time so that + // an informative error can be written to the log. + verifyTimeoutFactor = 2.0 // nextVerifyDuration is the duration that we will retry the rejected plans. nextVerifyDuration = 7 * 24 * time.Hour ) @@ -808,6 +812,7 @@ func (h *BindHandle) getRunningDuration(sctx sessionctx.Context, db, sql string, return time.Since(startTime), nil case <-timer.C: cancelFunc() + logutil.BgLogger().Warn("plan verification timed out", zap.Duration("timeElapsed", time.Since(startTime))) } <-resultChan return -1, nil @@ -857,7 +862,7 @@ func (h *BindHandle) HandleEvolvePlanTask(sctx sessionctx.Context, adminEvolve b return nil } sctx.GetSessionVars().UsePlanBaselines = true - acceptedPlanTime, err := h.getRunningDuration(sctx, db, binding.BindSQL, maxTime) + currentPlanTime, err := h.getRunningDuration(sctx, db, binding.BindSQL, maxTime) // If we just return the error to the caller, this job will be retried again and again and cause endless logs, // since it is still in the bind record. Now we just drop it and if it is actually retryable, // we will hope for that we can capture this evolve task again. @@ -866,16 +871,22 @@ func (h *BindHandle) HandleEvolvePlanTask(sctx sessionctx.Context, adminEvolve b } // If the accepted plan timeouts, it is hard to decide the timeout for verify plan. // Currently we simply mark the verify plan as `using` if it could run successfully within maxTime. - if acceptedPlanTime > 0 { - maxTime = time.Duration(float64(acceptedPlanTime) / acceptFactor) + if currentPlanTime > 0 { + maxTime = time.Duration(float64(currentPlanTime) * verifyTimeoutFactor) } sctx.GetSessionVars().UsePlanBaselines = false verifyPlanTime, err := h.getRunningDuration(sctx, db, binding.BindSQL, maxTime) if err != nil { return h.DropBindRecord(originalSQL, db, &binding) } - if verifyPlanTime < 0 { + if verifyPlanTime == -1 || (float64(verifyPlanTime)*acceptFactor > float64(currentPlanTime)) { binding.Status = Rejected + digestText, _ := parser.NormalizeDigest(binding.BindSQL) // for log desensitization + logutil.BgLogger().Warn("new plan rejected", + zap.Duration("currentPlanTime", currentPlanTime), + zap.Duration("verifyPlanTime", verifyPlanTime), + zap.String("digestText", digestText), + ) } else { binding.Status = Using } From ba9fe300bcdaf312965cf697ea0e70449ac16a54 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Wed, 21 Oct 2020 14:35:24 +0800 Subject: [PATCH 048/229] *:Speed up parse slow-log when query slow_query #15371 (#19139) (#20556) Signed-off-by: ti-srebot Signed-off-by: jyz0309 <45495947@qq.com> --- executor/slow_query.go | 255 +++++++++++++++++++++++------------- executor/slow_query_test.go | 66 ++++++++-- 2 files changed, 220 insertions(+), 101 deletions(-) diff --git a/executor/slow_query.go b/executor/slow_query.go index 999bf309c32c8..21ae7b4cd3f46 100644 --- a/executor/slow_query.go +++ b/executor/slow_query.go @@ -16,15 +16,18 @@ package executor import ( "bufio" "context" + "fmt" "io" "os" "path/filepath" "sort" "strconv" "strings" + "sync" "time" "github.com/pingcap/errors" + "github.com/pingcap/failpoint" "github.com/pingcap/parser/auth" "github.com/pingcap/parser/model" "github.com/pingcap/parser/mysql" @@ -64,7 +67,6 @@ func (e *slowQueryRetriever) retrieve(ctx context.Context, sctx sessionctx.Conte } e.initializeAsyncParsing(ctx, sctx) } - rows, retrieved, err := e.dataForSlowLog(ctx) if err != nil { return nil, err @@ -126,16 +128,8 @@ func (e *slowQueryRetriever) parseDataForSlowLog(ctx context.Context, sctx sessi close(e.parsedSlowLogCh) return } - reader := bufio.NewReader(e.files[0].file) - for e.fileIdx < len(e.files) { - rows, err := e.parseSlowLog(sctx, reader, 1024) - select { - case <-ctx.Done(): - break - case e.parsedSlowLogCh <- parsedSlowLog{rows, err}: - } - } + e.parseSlowLog(ctx, sctx, reader, 64) close(e.parsedSlowLogCh) } @@ -144,25 +138,28 @@ func (e *slowQueryRetriever) dataForSlowLog(ctx context.Context) ([][]types.Datu slowLog parsedSlowLog ok bool ) - select { - case slowLog, ok = <-e.parsedSlowLogCh: - case <-ctx.Done(): - return nil, false, ctx.Err() - } - if !ok { - // When e.parsedSlowLogCh is closed, the slow log data is retrieved. - return nil, true, nil - } - - rows, err := slowLog.rows, slowLog.err - if err != nil { - return nil, false, err - } - if e.table.Name.L == strings.ToLower(infoschema.ClusterTableSlowLog) { - rows, err := infoschema.AppendHostInfoToRows(rows) - return rows, false, err + for { + select { + case slowLog, ok = <-e.parsedSlowLogCh: + case <-ctx.Done(): + return nil, false, ctx.Err() + } + if !ok { + return nil, true, nil + } + rows, err := slowLog.rows, slowLog.err + if err != nil { + return nil, false, err + } + if len(rows) == 0 { + continue + } + if e.table.Name.L == strings.ToLower(infoschema.ClusterTableSlowLog) { + rows, err := infoschema.AppendHostInfoToRows(rows) + return rows, false, err + } + return rows, false, nil } - return rows, false, nil } type slowLogChecker struct { @@ -186,35 +183,144 @@ func (sc *slowLogChecker) isTimeValid(t types.Time) bool { return true } -// TODO: optimize for parse huge log-file. -func (e *slowQueryRetriever) parseSlowLog(ctx sessionctx.Context, reader *bufio.Reader, maxRow int) ([][]types.Datum, error) { - var rows [][]types.Datum - var st *slowQueryTuple - startFlag := false - tz := ctx.GetSessionVars().Location() - for { - if len(rows) >= maxRow { - return rows, nil +func getOneLine(reader *bufio.Reader) ([]byte, error) { + var resByte []byte + lineByte, isPrefix, err := reader.ReadLine() + if isPrefix { + // Need to read more data. + resByte = make([]byte, len(lineByte), len(lineByte)*2) + } else { + resByte = make([]byte, len(lineByte)) + } + // Use copy here to avoid shallow copy problem. + copy(resByte, lineByte) + if err != nil { + return resByte, err + } + + var tempLine []byte + for isPrefix { + tempLine, isPrefix, err = reader.ReadLine() + resByte = append(resByte, tempLine...) + // Use the max value of max_allowed_packet to check the single line length. + if len(resByte) > int(variable.MaxOfMaxAllowedPacket) { + return resByte, errors.Errorf("single line length exceeds limit: %v", variable.MaxOfMaxAllowedPacket) } - e.fileLine++ - lineByte, err := getOneLine(reader) if err != nil { - if err == io.EOF { - e.fileIdx++ - e.fileLine = 0 - if e.fileIdx >= len(e.files) { - return rows, nil + return resByte, err + } + } + return resByte, err +} + +type offset struct { + offset int + length int +} + +func (e *slowQueryRetriever) getBatchLog(reader *bufio.Reader, offset *offset, num int) ([]string, error) { + var line string + log := make([]string, 0, num) + var err error + for i := 0; i < num; i++ { + for { + e.fileLine++ + lineByte, err := getOneLine(reader) + if err != nil { + if err == io.EOF { + e.fileIdx++ + e.fileLine = 0 + if e.fileIdx >= len(e.files) { + return log, nil + } + offset.length = len(log) + reader.Reset(e.files[e.fileIdx].file) + continue } - reader.Reset(e.files[e.fileIdx].file) - continue + return log, err } - return rows, err + line = string(hack.String(lineByte)) + log = append(log, line) + if strings.HasSuffix(line, variable.SlowLogSQLSuffixStr) { + if strings.HasPrefix(line, "use") { + continue + } + break + } + } + } + return log, err +} + +func (e *slowQueryRetriever) parseSlowLog(ctx context.Context, sctx sessionctx.Context, reader *bufio.Reader, logNum int) { + var wg sync.WaitGroup + offset := offset{offset: 0, length: 0} + // To limit the num of go routine + ch := make(chan int, sctx.GetSessionVars().Concurrency.DistSQLScanConcurrency) + defer close(ch) + for { + log, err := e.getBatchLog(reader, &offset, logNum) + if err != nil { + e.parsedSlowLogCh <- parsedSlowLog{nil, err} + break + } + start := offset + wg.Add(1) + ch <- 1 + go func() { + defer wg.Done() + result, err := e.parseLog(sctx, log, start) + if err != nil { + e.parsedSlowLogCh <- parsedSlowLog{nil, err} + } else { + e.parsedSlowLogCh <- parsedSlowLog{result, err} + } + <-ch + }() + // Read the next file, offset = 0 + if e.fileIdx >= len(e.files) { + break + } + offset.offset = e.fileLine + offset.length = 0 + select { + case <-ctx.Done(): + break + default: + } + } + wg.Wait() +} + +func getLineIndex(offset offset, index int) int { + var fileLine int + if offset.length <= index { + fileLine = index - offset.length + 1 + } else { + fileLine = offset.offset + index + 1 + } + return fileLine +} + +func (e *slowQueryRetriever) parseLog(ctx sessionctx.Context, log []string, offset offset) (data [][]types.Datum, err error) { + defer func() { + if r := recover(); r != nil { + err = fmt.Errorf("%s", r) } - line := string(hack.String(lineByte)) - // Check slow log entry start flag. + }() + failpoint.Inject("errorMockParseSlowLogPanic", func(val failpoint.Value) { + if val.(bool) { + panic("panic test") + } + }) + var st *slowQueryTuple + tz := ctx.GetSessionVars().Location() + startFlag := false + for index, line := range log { + fileLine := getLineIndex(offset, index) if !startFlag && strings.HasPrefix(line, variable.SlowLogStartPrefixStr) { st = &slowQueryTuple{} - valid, err := st.setFieldValue(tz, variable.SlowLogTimeStr, line[len(variable.SlowLogStartPrefixStr):], e.fileLine, e.checker) + valid, err := st.setFieldValue(tz, variable.SlowLogTimeStr, line[len(variable.SlowLogStartPrefixStr):], fileLine, e.checker) if err != nil { ctx.GetSessionVars().StmtCtx.AppendWarning(err) continue @@ -224,17 +330,14 @@ func (e *slowQueryRetriever) parseSlowLog(ctx sessionctx.Context, reader *bufio. } continue } - if startFlag { - // Parse slow log field. if strings.HasPrefix(line, variable.SlowLogRowPrefixStr) { line = line[len(variable.SlowLogRowPrefixStr):] if strings.HasPrefix(line, variable.SlowLogPrevStmtPrefix) { st.prevStmt = line[len(variable.SlowLogPrevStmtPrefix):] } else if strings.HasPrefix(line, variable.SlowLogUserAndHostStr+variable.SlowLogSpaceMarkStr) { - // the user and hostname field has a special format, for example, # User@Host: root[root] @ localhost [127.0.0.1] value := line[len(variable.SlowLogUserAndHostStr+variable.SlowLogSpaceMarkStr):] - valid, err := st.setFieldValue(tz, variable.SlowLogUserAndHostStr, value, e.fileLine, e.checker) + valid, err := st.setFieldValue(tz, variable.SlowLogUserAndHostStr, value, fileLine, e.checker) if err != nil { ctx.GetSessionVars().StmtCtx.AppendWarning(err) continue @@ -249,7 +352,7 @@ func (e *slowQueryRetriever) parseSlowLog(ctx sessionctx.Context, reader *bufio. if strings.HasSuffix(field, ":") { field = field[:len(field)-1] } - valid, err := st.setFieldValue(tz, field, fieldValues[i+1], e.fileLine, e.checker) + valid, err := st.setFieldValue(tz, field, fieldValues[i+1], fileLine, e.checker) if err != nil { ctx.GetSessionVars().StmtCtx.AppendWarning(err) continue @@ -266,15 +369,14 @@ func (e *slowQueryRetriever) parseSlowLog(ctx sessionctx.Context, reader *bufio. // please see https://github.com/pingcap/tidb/issues/17846 for more details. continue } - // Get the sql string, and mark the start flag to false. - _, err = st.setFieldValue(tz, variable.SlowLogQuerySQLStr, string(hack.Slice(line)), e.fileLine, e.checker) + _, err := st.setFieldValue(tz, variable.SlowLogQuerySQLStr, string(hack.Slice(line)), fileLine, e.checker) if err != nil { ctx.GetSessionVars().StmtCtx.AppendWarning(err) continue } if e.checker.hasPrivilege(st.user) { - rows = append(rows, st.convertToDatumRow()) + data = append(data, st.convertToDatumRow()) } startFlag = false } else { @@ -282,37 +384,7 @@ func (e *slowQueryRetriever) parseSlowLog(ctx sessionctx.Context, reader *bufio. } } } -} - -func getOneLine(reader *bufio.Reader) ([]byte, error) { - var resByte []byte - lineByte, isPrefix, err := reader.ReadLine() - if isPrefix { - // Need to read more data. - resByte = make([]byte, len(lineByte), len(lineByte)*2) - } else { - resByte = make([]byte, len(lineByte)) - } - // Use copy here to avoid shallow copy problem. - copy(resByte, lineByte) - if err != nil { - return resByte, err - } - - var tempLine []byte - for isPrefix { - tempLine, isPrefix, err = reader.ReadLine() - resByte = append(resByte, tempLine...) - - // Use the max value of max_allowed_packet to check the single line length. - if len(resByte) > int(variable.MaxOfMaxAllowedPacket) { - return resByte, errors.Errorf("single line length exceeds limit: %v", variable.MaxOfMaxAllowedPacket) - } - if err != nil { - return resByte, err - } - } - return resByte, err + return data, nil } type slowQueryTuple struct { @@ -514,12 +586,13 @@ func (st *slowQueryTuple) setFieldValue(tz *time.Location, field, value string, st.preprocSubQueryTime, err = strconv.ParseFloat(value, 64) } if err != nil { - return valid, errors.Wrap(err, "Parse slow log at line "+strconv.FormatInt(int64(lineNum), 10)+" failed. Field: `"+field+"`, error") + return valid, fmt.Errorf("Parse slow log at line " + strconv.FormatInt(int64(lineNum), 10) + " failed. Field: `" + field + "`, error: " + err.Error()) } return valid, err } func (st *slowQueryTuple) convertToDatumRow() []types.Datum { + // Build the slow query result record := make([]types.Datum, 0, 64) record = append(record, types.NewTimeDatum(st.time)) record = append(record, types.NewUintDatum(st.txnStartTs)) @@ -775,6 +848,6 @@ func (e *slowQueryRetriever) getFileEndTime(file *os.File) (time.Time, error) { } func (e *slowQueryRetriever) initializeAsyncParsing(ctx context.Context, sctx sessionctx.Context) { - e.parsedSlowLogCh = make(chan parsedSlowLog, 1) + e.parsedSlowLogCh = make(chan parsedSlowLog, 100) go e.parseDataForSlowLog(ctx, sctx) } diff --git a/executor/slow_query_test.go b/executor/slow_query_test.go index 70735155dad54..6aacb9a62c613 100644 --- a/executor/slow_query_test.go +++ b/executor/slow_query_test.go @@ -16,12 +16,14 @@ package executor import ( "bufio" "bytes" + "context" "io" "os" "strings" "time" . "github.com/pingcap/check" + "github.com/pingcap/failpoint" "github.com/pingcap/parser/terror" plannercore "github.com/pingcap/tidb/planner/core" "github.com/pingcap/tidb/sessionctx" @@ -31,17 +33,60 @@ import ( "github.com/pingcap/tidb/util/mock" ) -func parseSlowLog(ctx sessionctx.Context, reader *bufio.Reader) ([][]types.Datum, error) { - retriever := &slowQueryRetriever{} - // Ignore the error is ok for test. - terror.Log(retriever.initialize(ctx)) - rows, err := retriever.parseSlowLog(ctx, reader, 1024) +func parseLog(retriever *slowQueryRetriever, sctx sessionctx.Context, reader *bufio.Reader) ([][]types.Datum, error) { + retriever.parsedSlowLogCh = make(chan parsedSlowLog, 100) + ctx := context.Background() + retriever.parseSlowLog(ctx, sctx, reader, 64) + slowLog := <-retriever.parsedSlowLogCh + rows, err := slowLog.rows, slowLog.err if err == io.EOF { err = nil } return rows, err } +func parseSlowLog(sctx sessionctx.Context, reader *bufio.Reader) ([][]types.Datum, error) { + retriever := &slowQueryRetriever{} + // Ignore the error is ok for test. + terror.Log(retriever.initialize(sctx)) + rows, err := parseLog(retriever, sctx, reader) + return rows, err +} + +func (s *testExecSuite) TestParseSlowLogPanic(c *C) { + slowLogStr := + `# Time: 2019-04-28T15:24:04.309074+08:00 +# Txn_start_ts: 405888132465033227 +# User@Host: root[root] @ localhost [127.0.0.1] +# Query_time: 0.216905 +# Cop_time: 0.38 Process_time: 0.021 Request_count: 1 Total_keys: 637 Processed_keys: 436 +# Is_internal: true +# Digest: 42a1c8aae6f133e934d4bf0147491709a8812ea05ff8819ec522780fe657b772 +# Stats: t1:1,t2:2 +# Cop_proc_avg: 0.1 Cop_proc_p90: 0.2 Cop_proc_max: 0.03 Cop_proc_addr: 127.0.0.1:20160 +# Cop_wait_avg: 0.05 Cop_wait_p90: 0.6 Cop_wait_max: 0.8 Cop_wait_addr: 0.0.0.0:20160 +# Mem_max: 70724 +# Disk_max: 65536 +# Plan_from_cache: true +# Succ: false +# Plan_digest: 60e9378c746d9a2be1c791047e008967cf252eb6de9167ad3aa6098fa2d523f4 +# Prev_stmt: update t set i = 1; +use test; +select * from t;` + c.Assert(failpoint.Enable("github.com/pingcap/tidb/executor/errorMockParseSlowLogPanic", `return(true)`), IsNil) + defer func() { + c.Assert(failpoint.Disable("github.com/pingcap/tidb/executor/errorMockParseSlowLogPanic"), IsNil) + }() + reader := bufio.NewReader(bytes.NewBufferString(slowLogStr)) + loc, err := time.LoadLocation("Asia/Shanghai") + c.Assert(err, IsNil) + sctx := mock.NewContext() + sctx.GetSessionVars().TimeZone = loc + _, err = parseSlowLog(sctx, reader) + c.Assert(err, NotNil) + c.Assert(err.Error(), Equals, "panic test") +} + func (s *testExecSuite) TestParseSlowLogFile(c *C) { slowLogStr := `# Time: 2019-04-28T15:24:04.309074+08:00 @@ -355,9 +400,9 @@ select 7;` loc, err := time.LoadLocation("Asia/Shanghai") c.Assert(err, IsNil) - ctx := mock.NewContext() - ctx.GetSessionVars().TimeZone = loc - ctx.GetSessionVars().SlowQueryFile = fileName3 + sctx := mock.NewContext() + sctx.GetSessionVars().TimeZone = loc + sctx.GetSessionVars().SlowQueryFile = fileName3 for i, cas := range cases { extractor := &plannercore.SlowQueryExtractor{Enable: (len(cas.startTime) > 0 && len(cas.endTime) > 0)} if extractor.Enable { @@ -370,12 +415,13 @@ select 7;` } retriever := &slowQueryRetriever{extractor: extractor} - err := retriever.initialize(ctx) + err := retriever.initialize(sctx) c.Assert(err, IsNil) comment := Commentf("case id: %v", i) c.Assert(retriever.files, HasLen, len(cas.files), comment) if len(retriever.files) > 0 { - rows, err := retriever.parseSlowLog(ctx, bufio.NewReader(retriever.files[0].file), 1024) + reader := bufio.NewReader(retriever.files[0].file) + rows, err := parseLog(retriever, sctx, reader) c.Assert(err, IsNil) c.Assert(len(rows), Equals, len(cas.querys), comment) for i, row := range rows { From dced64d5cb108782b4bdc47e6338184c939972a2 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Wed, 21 Oct 2020 15:16:32 +0800 Subject: [PATCH 049/229] *: add execution retry time in slow log and slow_query and statement_summary (#19625) (#20495) Signed-off-by: ti-srebot Signed-off-by: crazycs520 --- executor/adapter.go | 16 +++++++++++++--- executor/slow_query.go | 4 ++++ executor/slow_query_test.go | 4 ++-- infoschema/tables.go | 3 +++ infoschema/tables_test.go | 6 +++--- sessionctx/variable/session.go | 13 ++++++++++++- sessionctx/variable/session_test.go | 3 ++- util/stmtsummary/statement_summary.go | 13 +++++++++++++ util/stmtsummary/statement_summary_test.go | 2 +- 9 files changed, 53 insertions(+), 11 deletions(-) diff --git a/executor/adapter.go b/executor/adapter.go index c86a613af96f5..dc1c2f7109ccf 100644 --- a/executor/adapter.go +++ b/executor/adapter.go @@ -179,6 +179,7 @@ type ExecStmt struct { isPreparedStmt bool isSelectForUpdate bool retryCount uint + retryStartTime time.Time // OutputNames will be set if using cached plan OutputNames []*types.FieldName @@ -641,6 +642,7 @@ func (a *ExecStmt) handlePessimisticLockError(ctx context.Context, err error) (E return nil, errors.New("pessimistic lock retry limit reached") } a.retryCount++ + a.retryStartTime = time.Now() err = UpdateForUpdateTS(a.Ctx, newForUpdateTS) if err != nil { return nil, err @@ -895,6 +897,9 @@ func (a *ExecStmt) LogSlowQuery(txnTS uint64, succ bool, hasMoreResults bool) { RewriteInfo: sessVars.RewritePhaseInfo, ExecRetryCount: a.retryCount, } + if a.retryCount > 0 { + slowItems.ExecRetryTime = costTime - sessVars.DurationParse - sessVars.DurationCompile - time.Since(a.retryStartTime) + } if _, ok := a.StmtNode.(*ast.CommitStmt); ok { slowItems.PrevStmt = sessVars.PrevStmt.String() } @@ -973,7 +978,7 @@ func (a *ExecStmt) SummaryStmt(succ bool) { } stmtCtx := sessVars.StmtCtx normalizedSQL, digest := stmtCtx.SQLDigest() - costTime := time.Since(sessVars.StartTime) + costTime := time.Since(sessVars.StartTime) + sessVars.DurationParse var prevSQL, prevSQLDigest string if _, ok := a.StmtNode.(*ast.CommitStmt); ok { @@ -1009,7 +1014,7 @@ func (a *ExecStmt) SummaryStmt(succ bool) { memMax := stmtCtx.MemTracker.MaxConsumed() diskMax := stmtCtx.DiskTracker.MaxConsumed() sql := a.GetTextToLog() - stmtsummary.StmtSummaryByDigestMap.AddStatement(&stmtsummary.StmtExecInfo{ + stmtExecInfo := &stmtsummary.StmtExecInfo{ SchemaName: strings.ToLower(sessVars.CurrentDB), OriginalSQL: sql, NormalizedSQL: normalizedSQL, @@ -1032,7 +1037,12 @@ func (a *ExecStmt) SummaryStmt(succ bool) { IsInternal: sessVars.InRestrictedSQL, Succeed: succ, PlanInCache: sessVars.FoundInPlanCache, - }) + ExecRetryCount: a.retryCount, + } + if a.retryCount > 0 { + stmtExecInfo.ExecRetryTime = costTime - sessVars.DurationParse - sessVars.DurationCompile - time.Since(a.retryStartTime) + } + stmtsummary.StmtSummaryByDigestMap.AddStatement(stmtExecInfo) } // GetTextToLog return the query text to log. diff --git a/executor/slow_query.go b/executor/slow_query.go index 21ae7b4cd3f46..d70bbd77c225e 100644 --- a/executor/slow_query.go +++ b/executor/slow_query.go @@ -394,6 +394,7 @@ type slowQueryTuple struct { host string connID uint64 execRetryCount uint64 + execRetryTime float64 queryTime float64 parseTime float64 compileTime float64 @@ -492,6 +493,8 @@ func (st *slowQueryTuple) setFieldValue(tz *time.Location, field, value string, st.connID, err = strconv.ParseUint(value, 10, 64) case variable.SlowLogExecRetryCount: st.execRetryCount, err = strconv.ParseUint(value, 10, 64) + case variable.SlowLogExecRetryTime: + st.execRetryTime, err = strconv.ParseFloat(value, 64) case variable.SlowLogQueryTimeStr: st.queryTime, err = strconv.ParseFloat(value, 64) case variable.SlowLogParseTimeStr: @@ -600,6 +603,7 @@ func (st *slowQueryTuple) convertToDatumRow() []types.Datum { record = append(record, types.NewStringDatum(st.host)) record = append(record, types.NewUintDatum(st.connID)) record = append(record, types.NewUintDatum(st.execRetryCount)) + record = append(record, types.NewFloat64Datum(st.execRetryTime)) record = append(record, types.NewFloat64Datum(st.queryTime)) record = append(record, types.NewFloat64Datum(st.parseTime)) record = append(record, types.NewFloat64Datum(st.compileTime)) diff --git a/executor/slow_query_test.go b/executor/slow_query_test.go index 6aacb9a62c613..d8791562a7cb0 100644 --- a/executor/slow_query_test.go +++ b/executor/slow_query_test.go @@ -92,7 +92,7 @@ func (s *testExecSuite) TestParseSlowLogFile(c *C) { `# Time: 2019-04-28T15:24:04.309074+08:00 # Txn_start_ts: 405888132465033227 # User@Host: root[root] @ localhost [127.0.0.1] -# Exec_retry_count: 57 +# Exec_retry_time: 0.12 Exec_retry_count: 57 # Query_time: 0.216905 # Cop_time: 0.38 Process_time: 0.021 Request_count: 1 Total_keys: 637 Processed_keys: 436 # Is_internal: true @@ -125,7 +125,7 @@ select * from t;` } recordString += str } - expectRecordString := "2019-04-28 15:24:04.309074,405888132465033227,root,localhost,0,57,0.216905,0,0,0,0,0,0,0,0,0,0,,0,0,0,0,0,0,0.38,0.021,0,0,0,1,637,0,,,1,42a1c8aae6f133e934d4bf0147491709a8812ea05ff8819ec522780fe657b772,t1:1,t2:2,0.1,0.2,0.03,127.0.0.1:20160,0.05,0.6,0.8,0.0.0.0:20160,70724,65536,0,1,,60e9378c746d9a2be1c791047e008967cf252eb6de9167ad3aa6098fa2d523f4,update t set i = 1;,select * from t;" + expectRecordString := "2019-04-28 15:24:04.309074,405888132465033227,root,localhost,0,57,0.12,0.216905,0,0,0,0,0,0,0,0,0,0,,0,0,0,0,0,0,0.38,0.021,0,0,0,1,637,0,,,1,42a1c8aae6f133e934d4bf0147491709a8812ea05ff8819ec522780fe657b772,t1:1,t2:2,0.1,0.2,0.03,127.0.0.1:20160,0.05,0.6,0.8,0.0.0.0:20160,70724,65536,0,1,,60e9378c746d9a2be1c791047e008967cf252eb6de9167ad3aa6098fa2d523f4,update t set i = 1;,select * from t;" c.Assert(expectRecordString, Equals, recordString) // fix sql contain '# ' bug diff --git a/infoschema/tables.go b/infoschema/tables.go index ca232cfedc6fb..98e1f7a7b336e 100644 --- a/infoschema/tables.go +++ b/infoschema/tables.go @@ -719,6 +719,7 @@ var slowQueryCols = []columnInfo{ {name: variable.SlowLogHostStr, tp: mysql.TypeVarchar, size: 64}, {name: variable.SlowLogConnIDStr, tp: mysql.TypeLonglong, size: 20, flag: mysql.UnsignedFlag}, {name: variable.SlowLogExecRetryCount, tp: mysql.TypeLonglong, size: 20, flag: mysql.UnsignedFlag}, + {name: variable.SlowLogExecRetryTime, tp: mysql.TypeDouble, size: 22}, {name: variable.SlowLogQueryTimeStr, tp: mysql.TypeDouble, size: 22}, {name: variable.SlowLogParseTimeStr, tp: mysql.TypeDouble, size: 22}, {name: variable.SlowLogCompileTimeStr, tp: mysql.TypeDouble, size: 22}, @@ -1205,6 +1206,8 @@ var tableStatementsSummaryCols = []columnInfo{ {name: "MAX_PREWRITE_REGIONS", tp: mysql.TypeLong, size: 11, flag: mysql.NotNullFlag | mysql.UnsignedFlag, comment: "Max number of involved regions in prewrite phase"}, {name: "AVG_TXN_RETRY", tp: mysql.TypeDouble, size: 22, flag: mysql.NotNullFlag | mysql.UnsignedFlag, comment: "Average number of transaction retries"}, {name: "MAX_TXN_RETRY", tp: mysql.TypeLong, size: 11, flag: mysql.NotNullFlag | mysql.UnsignedFlag, comment: "Max number of transaction retries"}, + {name: "SUM_EXEC_RETRY", tp: mysql.TypeLonglong, size: 20, flag: mysql.NotNullFlag | mysql.UnsignedFlag, comment: "Sum number of execution retries in pessimistic transactions"}, + {name: "SUM_EXEC_RETRY_TIME", tp: mysql.TypeLonglong, size: 20, flag: mysql.NotNullFlag | mysql.UnsignedFlag, comment: "Sum time of execution retries in pessimistic transactions"}, {name: "SUM_BACKOFF_TIMES", tp: mysql.TypeLonglong, size: 20, flag: mysql.NotNullFlag | mysql.UnsignedFlag, comment: "Sum of retries"}, {name: "BACKOFF_TYPES", tp: mysql.TypeVarchar, size: 1024, comment: "Types of errors and the number of retries for each type"}, {name: "AVG_MEM", tp: mysql.TypeLonglong, size: 20, flag: mysql.NotNullFlag | mysql.UnsignedFlag, comment: "Average memory(byte) used"}, diff --git a/infoschema/tables_test.go b/infoschema/tables_test.go index 9675d3fe28ed1..409b8ef6863f6 100644 --- a/infoschema/tables_test.go +++ b/infoschema/tables_test.go @@ -547,7 +547,7 @@ func prepareSlowLogfile(c *C, slowLogFileName string) { # Txn_start_ts: 406315658548871171 # User@Host: root[root] @ localhost [127.0.0.1] # Conn_ID: 6 -# Exec_retry_count: 57 +# Exec_retry_time: 0.12 Exec_retry_count: 57 # Query_time: 4.895492 # Parse_time: 0.4 # Compile_time: 0.2 @@ -636,10 +636,10 @@ func (s *testTableSuite) TestSlowQuery(c *C) { tk.MustExec("set time_zone = '+08:00';") re := tk.MustQuery("select * from information_schema.slow_query") re.Check(testutil.RowsWithSep("|", - "2019-02-12 19:33:56.571953|406315658548871171|root|localhost|6|57|4.895492|0.4|0.2|0.000000003|2|0.000000002|0.19|0.21|0.01|0|0.18|[txnLock]|0.03|0|15|480|1|8|0.3824278|0.161|0.101|0.092|1.71|1|100001|100000|test||0|42a1c8aae6f133e934d4bf0147491709a8812ea05ff8819ec522780fe657b772|t1:1,t2:2|0.1|0.2|0.03|127.0.0.1:20160|0.05|0.6|0.8|0.0.0.0:20160|70724|65536|1|1|abcd|60e9378c746d9a2be1c791047e008967cf252eb6de9167ad3aa6098fa2d523f4|update t set i = 2;|select * from t_slim;")) + "2019-02-12 19:33:56.571953|406315658548871171|root|localhost|6|57|0.12|4.895492|0.4|0.2|0.000000003|2|0.000000002|0.19|0.21|0.01|0|0.18|[txnLock]|0.03|0|15|480|1|8|0.3824278|0.161|0.101|0.092|1.71|1|100001|100000|test||0|42a1c8aae6f133e934d4bf0147491709a8812ea05ff8819ec522780fe657b772|t1:1,t2:2|0.1|0.2|0.03|127.0.0.1:20160|0.05|0.6|0.8|0.0.0.0:20160|70724|65536|1|1|abcd|60e9378c746d9a2be1c791047e008967cf252eb6de9167ad3aa6098fa2d523f4|update t set i = 2;|select * from t_slim;")) tk.MustExec("set time_zone = '+00:00';") re = tk.MustQuery("select * from information_schema.slow_query") - re.Check(testutil.RowsWithSep("|", "2019-02-12 11:33:56.571953|406315658548871171|root|localhost|6|57|4.895492|0.4|0.2|0.000000003|2|0.000000002|0.19|0.21|0.01|0|0.18|[txnLock]|0.03|0|15|480|1|8|0.3824278|0.161|0.101|0.092|1.71|1|100001|100000|test||0|42a1c8aae6f133e934d4bf0147491709a8812ea05ff8819ec522780fe657b772|t1:1,t2:2|0.1|0.2|0.03|127.0.0.1:20160|0.05|0.6|0.8|0.0.0.0:20160|70724|65536|1|1|abcd|60e9378c746d9a2be1c791047e008967cf252eb6de9167ad3aa6098fa2d523f4|update t set i = 2;|select * from t_slim;")) + re.Check(testutil.RowsWithSep("|", "2019-02-12 11:33:56.571953|406315658548871171|root|localhost|6|57|0.12|4.895492|0.4|0.2|0.000000003|2|0.000000002|0.19|0.21|0.01|0|0.18|[txnLock]|0.03|0|15|480|1|8|0.3824278|0.161|0.101|0.092|1.71|1|100001|100000|test||0|42a1c8aae6f133e934d4bf0147491709a8812ea05ff8819ec522780fe657b772|t1:1,t2:2|0.1|0.2|0.03|127.0.0.1:20160|0.05|0.6|0.8|0.0.0.0:20160|70724|65536|1|1|abcd|60e9378c746d9a2be1c791047e008967cf252eb6de9167ad3aa6098fa2d523f4|update t set i = 2;|select * from t_slim;")) // Test for long query. f, err := os.OpenFile(slowLogFileName, os.O_CREATE|os.O_WRONLY, 0644) diff --git a/sessionctx/variable/session.go b/sessionctx/variable/session.go index bf277cb461697..e7b923d9253bc 100644 --- a/sessionctx/variable/session.go +++ b/sessionctx/variable/session.go @@ -1612,6 +1612,8 @@ const ( SlowLogWriteSQLRespTotal = "Write_sql_response_total" // SlowLogExecRetryCount is the execution retry count. SlowLogExecRetryCount = "Exec_retry_count" + // SlowLogExecRetryTime is the execution retry time. + SlowLogExecRetryTime = "Exec_retry_time" ) // SlowQueryLogItems is a collection of items that should be included in the @@ -1642,6 +1644,7 @@ type SlowQueryLogItems struct { WriteSQLRespTotal time.Duration RewriteInfo RewritePhaseInfo ExecRetryCount uint + ExecRetryTime time.Duration } // SlowLogFormat uses for formatting slow log. @@ -1680,7 +1683,15 @@ func (s *SessionVars) SlowLogFormat(logItems *SlowQueryLogItems) string { writeSlowLogItem(&buf, SlowLogConnIDStr, strconv.FormatUint(s.ConnectionID, 10)) } if logItems.ExecRetryCount > 0 { - writeSlowLogItem(&buf, SlowLogExecRetryCount, strconv.Itoa(int(logItems.ExecRetryCount))) + buf.WriteString(SlowLogRowPrefixStr) + buf.WriteString(SlowLogExecRetryTime) + buf.WriteString(SlowLogSpaceMarkStr) + buf.WriteString(strconv.FormatFloat(logItems.ExecRetryTime.Seconds(), 'f', -1, 64)) + buf.WriteString(" ") + buf.WriteString(SlowLogExecRetryCount) + buf.WriteString(SlowLogSpaceMarkStr) + buf.WriteString(strconv.Itoa(int(logItems.ExecRetryCount))) + buf.WriteString("\n") } writeSlowLogItem(&buf, SlowLogQueryTimeStr, strconv.FormatFloat(logItems.TimeTotal.Seconds(), 'f', -1, 64)) writeSlowLogItem(&buf, SlowLogParseTimeStr, strconv.FormatFloat(logItems.TimeParse.Seconds(), 'f', -1, 64)) diff --git a/sessionctx/variable/session_test.go b/sessionctx/variable/session_test.go index 98ac2742c7039..b58ab81a6b4d9 100644 --- a/sessionctx/variable/session_test.go +++ b/sessionctx/variable/session_test.go @@ -178,7 +178,7 @@ func (*testSessionSuite) TestSlowLogFormat(c *C) { resultFields := `# Txn_start_ts: 406649736972468225 # User@Host: root[root] @ 192.168.0.1 [192.168.0.1] # Conn_ID: 1 -# Exec_retry_count: 3 +# Exec_retry_time: 5.1 Exec_retry_count: 3 # Query_time: 1 # Parse_time: 0.00000001 # Compile_time: 0.00000001 @@ -234,6 +234,7 @@ func (*testSessionSuite) TestSlowLogFormat(c *C) { PreprocessSubQueries: 2, }, ExecRetryCount: 3, + ExecRetryTime: 5*time.Second + time.Millisecond*100, } logString := seVar.SlowLogFormat(logItems) c.Assert(logString, Equals, resultFields+"\n"+sql) diff --git a/util/stmtsummary/statement_summary.go b/util/stmtsummary/statement_summary.go index f9e3784bfa4e2..35109f9f892a2 100644 --- a/util/stmtsummary/statement_summary.go +++ b/util/stmtsummary/statement_summary.go @@ -157,6 +157,8 @@ type stmtSummaryByDigestElement struct { maxPrewriteRegionNum int32 sumTxnRetry int64 maxTxnRetry int + sumExecRetryCount int64 + sumExecRetryTime time.Duration sumBackoffTimes int64 backoffTypes map[fmt.Stringer]int authUsers map[string]struct{} @@ -173,6 +175,9 @@ type stmtSummaryByDigestElement struct { // plan cache planInCache bool planCacheHits int64 + // pessimistic execution retry information. + execRetryCount uint + execRetryTime time.Duration } // StmtExecInfo records execution information of each statement. @@ -199,6 +204,8 @@ type StmtExecInfo struct { IsInternal bool Succeed bool PlanInCache bool + ExecRetryCount uint + ExecRetryTime time.Duration } // newStmtSummaryByDigestMap creates an empty stmtSummaryByDigestMap. @@ -754,6 +761,10 @@ func (ssElement *stmtSummaryByDigestElement) add(sei *StmtExecInfo, intervalSeco if ssElement.lastSeen.Before(sei.StartTime) { ssElement.lastSeen = sei.StartTime } + if sei.ExecRetryCount > 0 { + ssElement.execRetryCount += sei.ExecRetryCount + ssElement.execRetryTime += sei.ExecRetryTime + } } func (ssElement *stmtSummaryByDigestElement) toDatum(ssbd *stmtSummaryByDigest) []types.Datum { @@ -829,6 +840,8 @@ func (ssElement *stmtSummaryByDigestElement) toDatum(ssbd *stmtSummaryByDigest) int(ssElement.maxPrewriteRegionNum), avgFloat(ssElement.sumTxnRetry, ssElement.commitCount), ssElement.maxTxnRetry, + int(ssElement.execRetryCount), + int64(ssElement.execRetryTime), ssElement.sumBackoffTimes, formatBackoffTypes(ssElement.backoffTypes), avgInt(ssElement.sumMem, ssElement.execCount), diff --git a/util/stmtsummary/statement_summary_test.go b/util/stmtsummary/statement_summary_test.go index fe547212bd120..7517a923b9816 100644 --- a/util/stmtsummary/statement_summary_test.go +++ b/util/stmtsummary/statement_summary_test.go @@ -612,7 +612,7 @@ func (s *testStmtSummarySuite) TestToDatum(c *C) { stmtExecInfo1.ExecDetail.CommitDetail.WriteKeys, stmtExecInfo1.ExecDetail.CommitDetail.WriteKeys, stmtExecInfo1.ExecDetail.CommitDetail.WriteSize, stmtExecInfo1.ExecDetail.CommitDetail.WriteSize, stmtExecInfo1.ExecDetail.CommitDetail.PrewriteRegionNum, stmtExecInfo1.ExecDetail.CommitDetail.PrewriteRegionNum, - stmtExecInfo1.ExecDetail.CommitDetail.TxnRetry, stmtExecInfo1.ExecDetail.CommitDetail.TxnRetry, 1, + stmtExecInfo1.ExecDetail.CommitDetail.TxnRetry, stmtExecInfo1.ExecDetail.CommitDetail.TxnRetry, 0, 0, 1, "txnLock:1", stmtExecInfo1.MemMax, stmtExecInfo1.MemMax, stmtExecInfo1.DiskMax, stmtExecInfo1.DiskMax, stmtExecInfo1.StmtCtx.AffectedRows(), t, t, 0, 0, stmtExecInfo1.OriginalSQL, stmtExecInfo1.PrevSQL, "plan_digest", ""} match(c, datums[0], expectedDatum...) From ce27cca46c8dbf135c8d8dad60953d82e106549d Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Wed, 21 Oct 2020 16:31:34 +0800 Subject: [PATCH 050/229] *: introduce errors documentation generator to generate errors.toml (#20516) (#20564) Signed-off-by: Lonng --- Makefile | 10 +- errors.toml | 1388 +++++++++++++++++++++++++++++++++++ go.mod | 18 +- go.sum | 55 +- tools/check/check-errdoc.sh | 26 + 5 files changed, 1463 insertions(+), 34 deletions(-) create mode 100644 errors.toml create mode 100755 tools/check/check-errdoc.sh diff --git a/Makefile b/Makefile index affd2faec6827..bc901e8f1f2ff 100644 --- a/Makefile +++ b/Makefile @@ -91,7 +91,7 @@ build: # Install the check tools. check-setup:tools/bin/revive tools/bin/goword tools/bin/gometalinter tools/bin/gosec -check: fmt errcheck lint tidy testSuite check-static vet staticcheck +check: fmt errcheck lint tidy testSuite check-static vet staticcheck errdoc # These need to be fixed before they can be ran regularly check-fail: goword check-slow @@ -125,6 +125,10 @@ gogenerate: @echo "go generate ./..." ./tools/check/check-gogenerate.sh +errdoc:tools/bin/errdoc-gen + @echo "generator errors.toml" + ./tools/check/check-errdoc.sh + lint:tools/bin/revive @echo "linting" @tools/bin/revive -formatter friendly -config tools/check/revive.toml $(FILES) @@ -301,6 +305,10 @@ tools/bin/misspell:tools/check/go.mod tools/bin/ineffassign:tools/check/go.mod cd tools/check; \ $(GO) build -o ../bin/ineffassign github.com/gordonklaus/ineffassign + +tools/bin/errdoc-gen: go.mod + $(GO) build -o $@ github.com/pingcap/tiup/components/errdoc/errdoc-gen + tools/bin/golangci-lint: curl -sfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh| sh -s -- -b ./tools/bin v1.21.0 diff --git a/errors.toml b/errors.toml new file mode 100644 index 0000000000000..529f221fc0716 --- /dev/null +++ b/errors.toml @@ -0,0 +1,1388 @@ +# AUTOGENERATED BY github.com/pingcap/tiup/components/errdoc/errdoc-gen +# DO NOT EDIT THIS FILE, PLEASE CHANGE ERROR DEFINITION IF CONTENT IMPROPER. + +["admin:8223"] +error = ''' +data isn't equal +''' + +["admin:8224"] +error = ''' +DDL Job:%v not found +''' + +["admin:8225"] +error = ''' +This job:%v is finished, so can't be cancelled +''' + +["admin:8226"] +error = ''' +This job:%v is almost finished, can't be cancelled now +''' + +["autoid:1075"] +error = ''' +Incorrect table definition; there can be only one auto column and it must be defined as a key +''' + +["autoid:1467"] +error = ''' +Failed to read auto-increment value from storage engine +''' + +["autoid:8058"] +error = ''' +Invalid allocator type +''' + +["autoid:8059"] +error = ''' +Failed to read auto-random value from storage engine +''' + +["ddl:1025"] +error = ''' +Error on rename of '%-.210s' to '%-.210s' (errno: %d - %s) +''' + +["ddl:1048"] +error = ''' +Column '%-.192s' cannot be null +''' + +["ddl:1054"] +error = ''' +Unknown column '%-.192s' in '%-.192s' +''' + +["ddl:1059"] +error = ''' +Identifier name '%-.100s' is too long +''' + +["ddl:1061"] +error = ''' +Duplicate key name '%-.192s' +''' + +["ddl:1067"] +error = ''' +Invalid default value for '%-.192s' +''' + +["ddl:1090"] +error = ''' +You can't delete all columns with ALTER TABLE; use DROP TABLE instead +''' + +["ddl:1091"] +error = ''' +Can't DROP '%-.192s'; check that column/key exists +''' + +["ddl:1102"] +error = ''' +Incorrect database name '%-.100s' +''' + +["ddl:1103"] +error = ''' +Incorrect table name '%-.100s' +''' + +["ddl:1111"] +error = ''' +Invalid use of group function +''' + +["ddl:1113"] +error = ''' +A table must have at least 1 column +''' + +["ddl:1115"] +error = ''' +Unknown character set: '%-.64s' +''' + +["ddl:1166"] +error = ''' +Incorrect column name '%-.100s' +''' + +["ddl:1171"] +error = ''' +All parts of a PRIMARY KEY must be NOT NULL; if you need NULL in a key, use UNIQUE instead +''' + +["ddl:1214"] +error = ''' +The used table type doesn't support FULLTEXT indexes +''' + +["ddl:1253"] +error = ''' +COLLATION '%s' is not valid for CHARACTER SET '%s' +''' + +["ddl:1265"] +error = ''' +Data truncated for column '%s' at row %d +''' + +["ddl:1273"] +error = ''' +Unsupported collation when new collation is enabled: '%-.64s' +''' + +["ddl:1280"] +error = ''' +Incorrect index name '%-.100s' +''' + +["ddl:1294"] +error = ''' +Invalid ON UPDATE clause for '%-.192s' column +''' + +["ddl:1302"] +error = ''' +Conflicting declarations: 'CHARACTER SET %s' and 'CHARACTER SET %s' +''' + +["ddl:1347"] +error = ''' +'%-.192s.%-.192s' is not %s +''' + +["ddl:1350"] +error = ''' +View's SELECT contains a '%s' clause +''' + +["ddl:1353"] +error = ''' +View's SELECT and view's field list have different column counts +''' + +["ddl:1481"] +error = ''' +MAXVALUE can only be used in last partition definition +''' + +["ddl:1488"] +error = ''' +Field in list of fields for partition function not found in table +''' + +["ddl:1491"] +error = ''' +The %-.192s function returns the wrong type +''' + +["ddl:1493"] +error = ''' +VALUES LESS THAN value must be strictly increasing for each partition +''' + +["ddl:1499"] +error = ''' +Too many partitions (including subpartitions) were defined +''' + +["ddl:1503"] +error = ''' +A %-.192s must include all columns in the table's partitioning function +''' + +["ddl:1505"] +error = ''' +Partition management on a not partitioned table is not possible +''' + +["ddl:1507"] +error = ''' +Error in list of partitions to %-.64s +''' + +["ddl:1508"] +error = ''' +Cannot remove all partitions, use DROP TABLE instead +''' + +["ddl:1509"] +error = ''' +COALESCE PARTITION can only be used on HASH/KEY partitions +''' + +["ddl:1517"] +error = ''' +Duplicate partition name %-.192s +''' + +["ddl:1564"] +error = ''' +This partition function is not allowed +''' + +["ddl:1654"] +error = ''' +Partition column values of incorrect type +''' + +["ddl:1659"] +error = ''' +Field '%-.192s' is of a not allowed type for this type of partitioning +''' + +["ddl:1846"] +error = ''' +%s is not supported. Reason: %s. Try %s. +''' + +["ddl:3102"] +error = ''' +Expression of generated column '%s' contains a disallowed function. +''' + +["ddl:3109"] +error = ''' +Generated column '%s' cannot refer to auto-increment column. +''' + +["ddl:3756"] +error = ''' +The primary key cannot be a functional index +''' + +["ddl:3762"] +error = ''' +Functional index on a column is not supported. Consider using a regular index instead +''' + +["ddl:4135"] +error = ''' +Sequence '%-.64s.%-.64s' has run out +''' + +["ddl:4136"] +error = ''' +Sequence '%-.64s.%-.64s' values are conflicting +''' + +["ddl:4137"] +error = ''' +Sequence '%-.64s.%-.64s' access error +''' + +["ddl:4138"] +error = ''' +'%-.64s.%-.64s' is not a SEQUENCE +''' + +["ddl:4139"] +error = ''' +Unknown SEQUENCE: '%-.300s' +''' + +["ddl:8200"] +error = ''' +Unsupported partition by range columns +''' + +["ddl:8210"] +error = ''' +Invalid %!s(MISSING) state: %!v(MISSING) +''' + +["ddl:8215"] +error = ''' +Failed to repair table: %s +''' + +["ddl:8216"] +error = ''' +Invalid auto random: %s +''' + +["ddl:8227"] +error = ''' +Unsupported sequence table-option %s +''' + +["ddl:8228"] +error = ''' +Unsupported sequence default value for column type '%s' +''' + +["ddl:8230"] +error = ''' +Unsupported using sequence as default value in add column '%s' +''' + +["domain:8027"] +error = ''' +Information schema is out of date: schema failed to update in 1 lease, please make sure TiDB can connect to TiKV +''' + +["domain:8028"] +error = ''' +Information schema is changed during the execution of the statement(for example, table definition may be updated by other DDL ran in parallel). If you see this error often, try increasing `tidb_max_delta_schema_count`. [try again later] +''' + +["domain:9009"] +error = ''' +Prometheus address is not set in PD and etcd +''' + +["executor:1044"] +error = ''' +Access denied for user '%-.48s'@'%-.64s' to database '%-.192s' +''' + +["executor:1049"] +error = ''' +Unknown database '%-.192s' +''' + +["executor:1133"] +error = ''' +Can't find any matching row in the user table +''' + +["executor:1142"] +error = ''' +%-.128s command denied to user '%-.48s'@'%-.64s' for table '%-.64s' +''' + +["executor:1213"] +error = ''' +Deadlock found when trying to get lock; try restarting transaction +''' + +["executor:1317"] +error = ''' +Query execution was interrupted +''' + +["executor:1347"] +error = ''' +'%-.192s.%-.192s' is not %s +''' + +["executor:1390"] +error = ''' +Prepared statement contains too many placeholders +''' + +["executor:1396"] +error = ''' +Operation %s failed for %.256s +''' + +["executor:1410"] +error = ''' +You are not allowed to create a user with GRANT +''' + +["executor:1568"] +error = ''' +Transaction characteristics can't be changed while a transaction is in progress +''' + +["executor:1827"] +error = ''' +The password hash doesn't have the expected format. Check if the correct password algorithm is being used with the PASSWORD() function. +''' + +["executor:8003"] +error = ''' +TiDB admin check table failed. +''' + +["executor:8114"] +error = ''' +Unknown plan +''' + +["executor:8115"] +error = ''' +Can not prepare multiple statements +''' + +["executor:8116"] +error = ''' +Can not prepare DDL statements with parameters +''' + +["executor:8117"] +error = ''' +Result is empty +''' + +["executor:8118"] +error = ''' +Failed to build executor +''' + +["executor:8119"] +error = ''' +Batch insert failed, please clean the table and try again. +''' + +["executor:8120"] +error = ''' +Can not get start ts +''' + +["executor:8124"] +error = ''' +Backup failed: %s +''' + +["executor:8125"] +error = ''' +Restore failed: %s +''' + +["executor:8126"] +error = ''' +Import failed: %s +''' + +["executor:8127"] +error = ''' +Export failed: %s +''' + +["expression:1139"] +error = ''' +Got error '%-.64s' from regexp +''' + +["expression:1235"] +error = ''' +function %s has only noop implementation in tidb now, use tidb_enable_noop_functions to enable these functions +''' + +["expression:1241"] +error = ''' +Operand should contain %d column(s) +''' + +["expression:1260"] +error = ''' +Some rows were cut by GROUPCONCAT(%s) +''' + +["expression:1267"] +error = ''' +Illegal mix of collations (%s,%s) and (%s,%s) for operation '%s' +''' + +["expression:1365"] +error = ''' +Division by 0 +''' + +["expression:1582"] +error = ''' +Incorrect parameter count in the call to native function '%-.192s' +''' + +["expression:3020"] +error = ''' +Invalid argument for logarithm +''' + +["expression:3064"] +error = ''' +Incorrect type for argument %s in function %s. +''' + +["json:3069"] +error = ''' +Invalid JSON data provided to function %s: %s +''' + +["json:3140"] +error = ''' +Invalid JSON text: %-.192s +''' + +["json:3143"] +error = ''' +Invalid JSON path expression %s. +''' + +["json:3149"] +error = ''' +In this situation, path expressions may not contain the * and ** tokens. +''' + +["json:3150"] +error = ''' +The second argument can only be either 'one' or 'all'. +''' + +["json:3158"] +error = ''' +JSON documents may not contain NULL member names. +''' + +["json:3165"] +error = ''' +A path expression is not a path to a cell in an array. +''' + +["json:8066"] +error = ''' +JSON_OBJECTAGG: unsupported second argument type %v +''' + +["kv:8004"] +error = ''' +Transaction is too large, size: %d +''' + +["kv:8005"] +error = ''' +Write conflict, txnStartTS %d is stale [try again later] +''' + +["kv:8021"] +error = ''' +Error: key not exist +''' + +["kv:8022"] +error = ''' +Error: KV error safe to retry %s [try again later] +''' + +["kv:8023"] +error = ''' +can not set nil value +''' + +["kv:8024"] +error = ''' +invalid transaction +''' + +["kv:8025"] +error = ''' +entry too large, the max entry size is %d, the size of data is %d +''' + +["kv:8026"] +error = ''' +not implemented +''' + +["kv:9007"] +error = ''' +Write conflict, txnStartTS=%d, conflictStartTS=%d, conflictCommitTS=%d, key=%s [try again later] +''' + +["meta:1007"] +error = ''' +Can't create database '%-.192s'; database exists +''' + +["meta:1049"] +error = ''' +Unknown database '%-.192s' +''' + +["meta:1050"] +error = ''' +Table '%-.192s' already exists +''' + +["meta:1146"] +error = ''' +Table '%-.192s.%-.192s' doesn't exist +''' + +["planner:1044"] +error = ''' +Access denied for user '%-.48s'@'%-.64s' to database '%-.192s' +''' + +["planner:1045"] +error = ''' +Access denied for user '%-.48s'@'%-.64s' +''' + +["planner:1046"] +error = ''' +No database selected +''' + +["planner:1051"] +error = ''' +Unknown table '%-.100s' +''' + +["planner:1052"] +error = ''' +Column '%-.192s' in %-.192s is ambiguous +''' + +["planner:1054"] +error = ''' +Unknown column '%-.192s' in '%-.192s' +''' + +["planner:1055"] +error = ''' +Expression #%d of %s is not in GROUP BY clause and contains nonaggregated column '%s' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by +''' + +["planner:1056"] +error = ''' +Can't group on '%-.192s' +''' + +["planner:1060"] +error = ''' +Duplicate column name '%-.192s' +''' + +["planner:1066"] +error = ''' +Not unique table/alias: '%-.192s' +''' + +["planner:1094"] +error = ''' +Unknown thread id: %d +''' + +["planner:1105"] +error = ''' +Unknown error +''' + +["planner:1109"] +error = ''' +Unknown table '%-.192s' in %-.32s +''' + +["planner:1111"] +error = ''' +Invalid use of group function +''' + +["planner:1136"] +error = ''' +Column count doesn't match value count at row %d +''' + +["planner:1142"] +error = ''' +%-.128s command denied to user '%-.48s'@'%-.64s' for table '%-.64s' +''' + +["planner:1146"] +error = ''' +Table '%-.192s.%-.192s' doesn't exist +''' + +["planner:1176"] +error = ''' +Key '%-.192s' doesn't exist in table '%-.192s' +''' + +["planner:1210"] +error = ''' +Incorrect arguments to %s +''' + +["planner:1221"] +error = ''' +Incorrect usage of %s and %s +''' + +["planner:1222"] +error = ''' +The used SELECT statements have a different number of columns +''' + +["planner:1227"] +error = ''' +Access denied; you need (at least one of) the %-.128s privilege(s) for this operation +''' + +["planner:1235"] +error = ''' +This version of TiDB doesn't yet support '%s' +''' + +["planner:1241"] +error = ''' +Operand should contain %d column(s) +''' + +["planner:1247"] +error = ''' +Reference '%-.64s' not supported (%s) +''' + +["planner:1250"] +error = ''' +Table '%s' from one of the %ss cannot be used in %s +''' + +["planner:1288"] +error = ''' +The target table %-.100s of the %s is not updatable +''' + +["planner:1345"] +error = ''' +EXPLAIN/SHOW can not be issued; lacking privileges for underlying table +''' + +["planner:1356"] +error = ''' +View '%-.192s.%-.192s' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them +''' + +["planner:1747"] +error = ''' +PARTITION () clause on non partitioned table +''' + +["planner:1791"] +error = ''' +Unknown EXPLAIN format name: '%s' +''' + +["planner:1815"] +error = ''' +Internal : %s +''' + +["planner:3105"] +error = ''' +The value specified for generated column '%s' in table '%s' is not allowed. +''' + +["planner:3106"] +error = ''' +'%s' is not supported for generated columns. +''' + +["planner:3579"] +error = ''' +Window name '%s' is not defined. +''' + +["planner:3580"] +error = ''' +There is a circularity in the window dependency graph. +''' + +["planner:3581"] +error = ''' +A window which depends on another cannot define partitioning. +''' + +["planner:3582"] +error = ''' +Window '%s' has a frame definition, so cannot be referenced by another window. +''' + +["planner:3583"] +error = ''' +Window '%s' cannot inherit '%s' since both contain an ORDER BY clause. +''' + +["planner:3584"] +error = ''' +Window '%s': frame start cannot be UNBOUNDED FOLLOWING. +''' + +["planner:3585"] +error = ''' +Window '%s': frame end cannot be UNBOUNDED PRECEDING. +''' + +["planner:3586"] +error = ''' +Window '%s': frame start or end is negative, NULL or of non-integral type +''' + +["planner:3587"] +error = ''' +Window '%s' with RANGE N PRECEDING/FOLLOWING frame requires exactly one ORDER BY expression, of numeric or temporal type +''' + +["planner:3588"] +error = ''' +Window '%s' with RANGE frame has ORDER BY expression of datetime type. Only INTERVAL bound value allowed. +''' + +["planner:3589"] +error = ''' +Window '%s' with RANGE frame has ORDER BY expression of numeric type, INTERVAL bound value not allowed. +''' + +["planner:3590"] +error = ''' +Window '%s' has a non-constant frame bound. +''' + +["planner:3591"] +error = ''' +Window '%s' is defined twice. +''' + +["planner:3593"] +error = ''' +You cannot use the window function '%s' in this context.' +''' + +["planner:3594"] +error = ''' +You cannot use the alias '%s' of an expression containing a window function in this context.' +''' + +["planner:3596"] +error = ''' +Window '%s': INTERVAL can only be used with RANGE frames. +''' + +["planner:3599"] +error = ''' +Window function '%s' ignores the frame clause of window '%s' and aggregates over the whole partition +''' + +["planner:8108"] +error = ''' +Unsupported type %T +''' + +["planner:8109"] +error = ''' +Index '%s' in field list does not exist in table '%s' +''' + +["planner:8110"] +error = ''' +Cartesian product is unsupported +''' + +["planner:8111"] +error = ''' +Prepared statement not found +''' + +["planner:8112"] +error = ''' +Wrong parameter count +''' + +["planner:8113"] +error = ''' +Schema has changed +''' + +["planner:8121"] +error = ''' +privilege check fail +''' + +["planner:8122"] +error = ''' +Wildcard fields without any table name appears in wrong place +''' + +["planner:8123"] +error = ''' +In aggregated query without GROUP BY, expression #%d of SELECT list contains nonaggregated column '%s'; this is incompatible with sql_mode=only_full_group_by +''' + +["privilege:1141"] +error = ''' +There is no such grant defined for user '%-.48s' on host '%-.64s' +''' + +["privilege:3530"] +error = ''' +%s is is not granted to %s +''' + +["schema:1007"] +error = ''' +Can't create database '%-.192s'; database exists +''' + +["schema:1008"] +error = ''' +Can't drop database '%-.192s'; database doesn't exist +''' + +["schema:1045"] +error = ''' +Access denied for user '%-.48s'@'%-.64s' (using password: %s) +''' + +["schema:1049"] +error = ''' +Unknown database '%-.192s' +''' + +["schema:1050"] +error = ''' +Table '%-.192s' already exists +''' + +["schema:1051"] +error = ''' +Unknown table '%-.100s' +''' + +["schema:1054"] +error = ''' +Unknown column '%-.192s' in '%-.192s' +''' + +["schema:1060"] +error = ''' +Duplicate column name '%-.192s' +''' + +["schema:1061"] +error = ''' +Duplicate key name '%-.192s' +''' + +["schema:1066"] +error = ''' +Not unique table/alias: '%-.192s' +''' + +["schema:1068"] +error = ''' +Multiple primary key defined +''' + +["schema:1070"] +error = ''' +Too many key parts specified; max %d parts allowed +''' + +["schema:1091"] +error = ''' +Can't DROP '%-.192s'; check that column/key exists +''' + +["schema:1099"] +error = ''' +Table '%-.192s' was locked with a READ lock and can't be updated +''' + +["schema:1100"] +error = ''' +Table '%-.192s' was not locked with LOCK TABLES +''' + +["schema:1146"] +error = ''' +Table '%-.192s.%-.192s' doesn't exist +''' + +["schema:1176"] +error = ''' +Key '%-.192s' doesn't exist in table '%-.192s' +''' + +["schema:1215"] +error = ''' +Cannot add foreign key constraint +''' + +["schema:1239"] +error = ''' +Incorrect foreign key definition for '%-.192s': %s +''' + +["schema:1347"] +error = ''' +'%-.192s.%-.192s' is not %s +''' + +["schema:1831"] +error = ''' +Duplicate index '%-.64s' defined on the table '%-.64s.%-.64s'. This is deprecated and will be disallowed in a future release. +''' + +["schema:3162"] +error = ''' +User %s does not exist. +''' + +["schema:3163"] +error = ''' +User %s already exists. +''' + +["schema:4139"] +error = ''' +Unknown SEQUENCE: '%-.300s' +''' + +["schema:8020"] +error = ''' +Table '%s' was locked in %s by %v +''' + +["session:8002"] +error = ''' +[%d] can not retry select for update statement +''' + +["structure:8217"] +error = ''' +invalid encoded hash key flag +''' + +["structure:8218"] +error = ''' +invalid list index +''' + +["structure:8219"] +error = ''' +invalid list meta data +''' + +["structure:8220"] +error = ''' +write on snapshot +''' + +["table:1048"] +error = ''' +Column '%-.192s' cannot be null +''' + +["table:1054"] +error = ''' +Unknown column '%-.192s' in '%-.192s' +''' + +["table:1192"] +error = ''' +Can't execute the given command because you have active locked tables or an active transaction +''' + +["table:1364"] +error = ''' +Field '%-.192s' doesn't have a default value +''' + +["table:1366"] +error = ''' +Incorrect %-.32s value: '%-.128s' for column '%.192s' at row %d +''' + +["table:1526"] +error = ''' +Table has no partition for value %-.64s +''' + +["table:1735"] +error = ''' +Unknown partition '%-.64s' in table '%-.64s' +''' + +["table:1748"] +error = ''' +Found a row not matching the given partition set +''' + +["table:4135"] +error = ''' +Sequence '%-.64s.%-.64s' has run out +''' + +["table:8039"] +error = ''' +Index column %s offset out of bound, offset: %d, row: %v +''' + +["table:8040"] +error = ''' +operation not supported +''' + +["table:8041"] +error = ''' +can not find the row: %s +''' + +["table:8042"] +error = ''' +table %s can't be in none state +''' + +["table:8043"] +error = ''' +can not use non-public column +''' + +["table:8044"] +error = ''' +index %s can't be in none state +''' + +["table:8045"] +error = ''' +invalid record key +''' + +["table:8046"] +error = ''' +column %s can't be in none state +''' + +["tikv:1105"] +error = ''' +Unknown error +''' + +["tikv:1205"] +error = ''' +Lock wait timeout exceeded; try restarting transaction +''' + +["tikv:1317"] +error = ''' +Query execution was interrupted +''' + +["tikv:3572"] +error = ''' +Statement aborted because lock(s) could not be acquired immediately and NOWAIT is set. +''' + +["tikv:8229"] +error = ''' +TTL manager has timed out, pessimistic locks may expire, please commit or rollback this transaction +''' + +["tikv:9001"] +error = ''' +PD server timeout +''' + +["tikv:9002"] +error = ''' +TiKV server timeout +''' + +["tikv:9003"] +error = ''' +TiKV server is busy +''' + +["tikv:9004"] +error = ''' +Resolve lock timeout +''' + +["tikv:9005"] +error = ''' +Region is unavailable +''' + +["tikv:9006"] +error = ''' +GC life time is shorter than transaction duration, transaction starts at %v, GC safe point is %v +''' + +["tikv:9008"] +error = ''' +Store token is up to the limit, store id = %d +''' + +["tikv:9010"] +error = ''' +TiKV server reports stale command +''' + +["types:1074"] +error = ''' +Column length too big for column '%-.192s' (max = %d); use BLOB or TEXT instead +''' + +["types:1097"] +error = ''' +Too many strings for column %-.192s and SET +''' + +["types:1264"] +error = ''' +Out of range value for column '%s' at row %d +''' + +["types:1265"] +error = ''' +Data truncated for column '%s' at row %d +''' + +["types:1291"] +error = ''' +Column '%-.100s' has duplicated value '%-.64s' in %s +''' + +["types:1292"] +error = ''' +Truncated incorrect %-.64s value: '%-.128s' +''' + +["types:1365"] +error = ''' +Division by 0 +''' + +["types:1367"] +error = ''' +Illegal %s '%-.192s' value found during parsing +''' + +["types:1406"] +error = ''' +Data too long for column '%s' at row %d +''' + +["types:1425"] +error = ''' +Too big scale %d specified for column '%-.192s'. Maximum is %d. +''' + +["types:1426"] +error = ''' +Too big precision %d specified for column '%-.192s'. Maximum is %d. +''' + +["types:1427"] +error = ''' +For float(M,D), double(M,D) or decimal(M,D), M must be >= D (column '%-.192s'). +''' + +["types:1439"] +error = ''' +Display width out of range for column '%-.192s' (max = %d) +''' + +["types:1441"] +error = ''' +Datetime function: %-.32s field overflow +''' + +["types:1690"] +error = ''' +%s value is out of range in '%s' +''' + +["types:3013"] +error = ''' +Invalid size for column '%s'. +''' + +["types:8029"] +error = ''' +Bad Number +''' + +["types:8030"] +error = ''' +Cast to signed converted positive out-of-range integer to it's negative complement +''' + +["types:8031"] +error = ''' +Cast to unsigned converted negative integer to it's positive complement +''' + +["types:8032"] +error = ''' +invalid year format +''' + +["types:8033"] +error = ''' +invalid year +''' + +["types:8037"] +error = ''' +invalid week mode format: '%v' +''' + +["variable:1193"] +error = ''' +Unknown system variable '%-.64s' +''' + +["variable:1231"] +error = ''' +Variable '%-.64s' can't be set to the value of '%-.200s' +''' + +["variable:1232"] +error = ''' +Incorrect argument type to variable '%-.64s' +''' + +["variable:1238"] +error = ''' +Variable '%-.192s' is a %s variable +''' + +["variable:1292"] +error = ''' +Truncated incorrect %-.64s value: '%-.128s' +''' + +["variable:1298"] +error = ''' +Unknown or incorrect time zone: '%-.64s' +''' + +["variable:1461"] +error = ''' +Can't create more than maxPreparedStmtCount statements (current value: %d) +''' + +["variable:1621"] +error = ''' +%s variable '%s' is read-only. Use SET %s to assign the value +''' + +["variable:8047"] +error = ''' +variable '%s' does not yet support value: %s +''' + +["variable:8048"] +error = ''' +The isolation level '%s' is not supported. Set tidb_skip_isolation_level_check=1 to skip this error +''' + +["variable:8054"] +error = ''' +cannot set variable to null +''' + +["variable:8055"] +error = ''' +snapshot is older than GC safe point %s +''' + diff --git a/go.mod b/go.mod index 854c4aab2eb1f..5e4b5bfafd2e4 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,7 @@ module github.com/pingcap/tidb require ( + cloud.google.com/go v0.51.0 // indirect github.com/BurntSushi/toml v0.3.1 github.com/Jeffail/gabs/v2 v2.5.1 github.com/blacktear23/go-proxyprotocol v0.0.0-20180807104634-af7a81e8dd0d @@ -16,8 +17,9 @@ require ( github.com/google/btree v1.0.0 github.com/google/pprof v0.0.0-20200407044318-7d83b28da2e9 github.com/google/uuid v1.1.1 - github.com/gorilla/mux v1.7.3 - github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4 + github.com/gorilla/mux v1.7.4 + github.com/gorilla/websocket v1.4.1 // indirect + github.com/grpc-ecosystem/go-grpc-middleware v1.1.0 github.com/iancoleman/strcase v0.0.0-20191112232945-16388991a334 github.com/klauspost/cpuid v1.2.1 github.com/ngaut/pools v0.0.0-20180318154953-b7bc8c42aac7 @@ -28,7 +30,7 @@ require ( github.com/pingcap/check v0.0.0-20200212061837-5e12011dc712 github.com/pingcap/errors v0.11.5-0.20200917111840-a15ef68f753d github.com/pingcap/failpoint v0.0.0-20200702092429-9f69995143ce - github.com/pingcap/fn v0.0.0-20191016082858-07623b84a47d + github.com/pingcap/fn v0.0.0-20200306044125-d5540d389059 github.com/pingcap/goleveldb v0.0.0-20191226122134-f82aafb29989 github.com/pingcap/kvproto v0.0.0-20200907074027-32a3a0accf7d github.com/pingcap/log v0.0.0-20200828042413-fce0951f1463 @@ -39,26 +41,30 @@ require ( github.com/prometheus/client_golang v1.5.1 github.com/prometheus/client_model v0.2.0 github.com/prometheus/common v0.9.1 - github.com/shirou/gopsutil v2.19.10+incompatible + github.com/shirou/gopsutil v2.20.3+incompatible github.com/sirupsen/logrus v1.6.0 github.com/soheilhy/cmux v0.1.4 github.com/spaolacci/murmur3 v1.1.0 github.com/tiancaiamao/appdash v0.0.0-20181126055449-889f96f722a2 github.com/tikv/pd v1.1.0-beta.0.20200921100508-9ee41c4144f3 - github.com/uber-go/atomic v1.3.2 + github.com/uber-go/atomic v1.4.0 github.com/uber/jaeger-client-go v2.22.1+incompatible go.etcd.io/etcd v0.5.0-alpha.5.0.20191023171146-3cf2f69b5738 go.uber.org/atomic v1.7.0 go.uber.org/automaxprocs v1.2.0 go.uber.org/zap v1.16.0 golang.org/x/net v0.0.0-20200813134508-3edf25e44fcc + golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d // indirect golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208 golang.org/x/sys v0.0.0-20200819171115-d785dc25833f golang.org/x/text v0.3.3 + golang.org/x/time v0.0.0-20191024005414-555d28b269f0 // indirect golang.org/x/tools v0.0.0-20200820010801-b793a1359eac + google.golang.org/genproto v0.0.0-20200108215221-bd8f9a0ef82f // indirect google.golang.org/grpc v1.26.0 gopkg.in/natefinch/lumberjack.v2 v2.0.0 - sourcegraph.com/sourcegraph/appdash v0.0.0-20180531100431-4c381bd170b4 + sigs.k8s.io/yaml v1.2.0 // indirect + sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0 sourcegraph.com/sourcegraph/appdash-data v0.0.0-20151005221446-73f23eafcf67 ) diff --git a/go.sum b/go.sum index 6fef40784cc45..1cf4fa7132779 100644 --- a/go.sum +++ b/go.sum @@ -7,6 +7,8 @@ cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTj cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= cloud.google.com/go v0.50.0 h1:0E3eE8MX426vUOs7aHfI7aN1BrIzzzf4ccKCSfSjGmc= cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= +cloud.google.com/go v0.51.0 h1:PvKAVQWCtlGUSlZkGW3QLelKaWq7KYv/MW1EboG8bfM= +cloud.google.com/go v0.51.0/go.mod h1:hWtGJ6gnXH+KgDv+V0zFGDvpi07n3z8ZNj3T1RW0Gcw= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= cloud.google.com/go/bigquery v1.3.0 h1:sAbMqjY1PEQKZBWfbu6Y6bsupJ9c4QdHnzg/VvYTLcE= cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= @@ -236,6 +238,7 @@ github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXi github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20190930153522-6ce02741cba3/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200407044318-7d83b28da2e9 h1:K+lX49/3eURCE1IjlaZN//u6c+9nfDAMnyQ9E2dsJbY= github.com/google/pprof v0.0.0-20200407044318-7d83b28da2e9/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= @@ -248,15 +251,18 @@ github.com/googleapis/gax-go/v2 v2.0.5 h1:sjZBwGj9Jlw33ImPtvFviGYvseOtDM7hkSKB7+ github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/gorilla/handlers v1.4.2 h1:0QniY0USkHQ1RGCLfKxeNHK9bkDHGRYGNDFBCS+YARg= github.com/gorilla/handlers v1.4.2/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ= -github.com/gorilla/mux v1.7.3 h1:gnP5JzjVOuiZD07fKKToCAOjS0yOpj/qPETTXCCS6hw= github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= +github.com/gorilla/mux v1.7.4 h1:VuZ8uybHlWmqV03+zRzdwKL4tUnIp1MAQtp1mIFE1bc= +github.com/gorilla/mux v1.7.4/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.2.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= -github.com/gorilla/websocket v1.4.0 h1:WDFjx/TMzVgy9VdMMQi2K2Emtwi2QcUQsztZ/zLaH/Q= github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= +github.com/gorilla/websocket v1.4.1 h1:q7AeDBpnBk8AogcD4DSag/Ukw/KV+YhzLj2bP5HvKCM= +github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= -github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4 h1:z53tR0945TRRQO/fLEVPI6SMv7ZflF0TEaTAoU7tOzg= github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= +github.com/grpc-ecosystem/go-grpc-middleware v1.1.0 h1:THDBEeQ9xZ8JEaCLyLQqXMMdRqNr0QAUJTIkQAUtFjg= +github.com/grpc-ecosystem/go-grpc-middleware v1.1.0/go.mod h1:f5nM7jw/oeRSadq3xCzHAvxcr8HZnzsqU6ILg/0NiiE= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 h1:Ovs26xHkKqVztRpIrF/92BcuyuQ/YW4NSIpoGtfXNho= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= @@ -286,6 +292,7 @@ github.com/jmespath/go-jmespath v0.3.0/go.mod h1:9QtRXoHjLGCJ5IBSaohpXITPlowMeeY github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= github.com/jonboulle/clockwork v0.1.0 h1:VKV+ZcuP6l3yW9doeqz6ziZGgcynBVQO+obU0+0hcPo= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= +github.com/joomcode/errorx v1.0.1 h1:CalpDWz14ZHd68fIqluJasJosAewpz2TFaJALrUxjrk= github.com/joomcode/errorx v1.0.1/go.mod h1:kgco15ekB6cs+4Xjzo7SPeXzx38PbJzBwbnu9qfVNHQ= github.com/json-iterator/go v1.1.5/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= @@ -303,7 +310,6 @@ github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvW github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/cpuid v0.0.0-20170728055534-ae7887de9fa5/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= -github.com/klauspost/cpuid v1.2.0 h1:NMpwD2G9JSFOE1/TJjGSo5zG7Yb2bTe7eq1jH+irmeE= github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= github.com/klauspost/cpuid v1.2.1 h1:vJi+O/nMdFt0vqm8NZBI6wzALWdA2X+egi0ogNyrC/w= github.com/klauspost/cpuid v1.2.1/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= @@ -312,7 +318,6 @@ github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxv github.com/konsorten/go-windows-terminal-sequences v1.0.3 h1:CE8S1cTafDpPvMhIxNJKvHsGVBgn1xWYf1NbHQhywc8= github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= -github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.0 h1:s5hAObm+yFO5uHYt5dYjxi2rXrsnmRpJx4OYvIWUaQs= github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= @@ -327,11 +332,9 @@ github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czP github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.7.1 h1:mdxE1MF9o53iCb2Ghj1VfWvh7ZOwHpnVG/xwXrV90U8= github.com/mailru/easyjson v0.7.1/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= -github.com/mattn/go-colorable v0.1.4 h1:snbPLB8fVfU9iwbbo30TPtbLRzwWu6aJS6Xh4eaaviA= github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-colorable v0.1.7 h1:bQGKb3vps/j0E9GfJQ03JyhRuxsvdAanXlT9BTw3mdw= github.com/mattn/go-colorable v0.1.7/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= @@ -340,13 +343,11 @@ github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hd github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ= github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= -github.com/mattn/go-isatty v0.0.11 h1:FxPOTFNqGkuDUGi3H/qkUbQO4ZiBa2brKq5r0l8TGeM= github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= -github.com/mattn/go-runewidth v0.0.7 h1:Ei8KR0497xHyKJPAv59M1dkC+rOZCMBJ+t3fZ+twI54= github.com/mattn/go-runewidth v0.0.7/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mattn/go-runewidth v0.0.9 h1:Lm995f3rfxdpd6TSmuVCHVb/QhupuXlYr8sCI/QdE+0= github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= @@ -354,11 +355,8 @@ github.com/mattn/go-shellwords v1.0.3/go.mod h1:3xCvwCdWdlDJUrvuMn7Wuy9eWs4pE8vq github.com/mattn/go-sqlite3 v2.0.1+incompatible/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/mgechev/dots v0.0.0-20190921121421-c36f7dcfbb81 h1:QASJXOGm2RZ5Ardbc86qNFvby9AqkLDibfChMtAg5QM= github.com/mgechev/dots v0.0.0-20190921121421-c36f7dcfbb81/go.mod h1:KQ7+USdGKfpPjXk4Ga+5XxQM4Lm4e3gAogrreFAYpOg= -github.com/mgechev/revive v1.0.2 h1:v0NxxQ7fSFz/u1NQydPo6EGdq7va0J1BtsZmae6kzUg= github.com/mgechev/revive v1.0.2/go.mod h1:rb0dQy1LVAxW9SWy5R3LPUjevzUbUS316U5MFySA2lo= -github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= @@ -367,7 +365,6 @@ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJ github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/montanaflynn/stats v0.0.0-20151014174947-eeaced052adb h1:bsjNADsjHq0gjU7KO7zwoX5k3HtFdf6TDzB3ncl5iUs= github.com/montanaflynn/stats v0.0.0-20151014174947-eeaced052adb/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc= github.com/montanaflynn/stats v0.0.0-20180911141734-db72e6cae808/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc= github.com/montanaflynn/stats v0.5.0 h1:2EkzeTSqBB4V4bJwWrt5gIIrZmpJBcoIRGS2kWLgzmk= @@ -381,14 +378,11 @@ github.com/ngaut/sync2 v0.0.0-20141008032647-7a24ed77b2ef/go.mod h1:7WjlapSfwQyo github.com/nicksnyder/go-i18n v1.10.0/go.mod h1:HrK7VCrbOvQoUAQ7Vpy7i87N7JZZZ7R2xBGjv0j365Q= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= -github.com/olekukonko/tablewriter v0.0.4 h1:vHD/YYe1Wolo78koG299f7V/VAS08c6IpCLn+Ejf/w8= github.com/olekukonko/tablewriter v0.0.4/go.mod h1:zq6QwlOf5SlnkVbMSr5EoBv3636FWnp+qbPhuoO21uA= -github.com/onsi/ginkgo v1.6.0 h1:Ix8l273rp3QzYgXSR+c8d1fTG7UPgYkOSELPhiY/YGw= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.11.0 h1:JAKSXpt1YjtLA7YpPiqO9ss6sNXEsPfSGdwN0UHqzrw= github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/gomega v1.4.2 h1:3mYCb7aPxS/RU7TI1y4rkEn1oKmPRjNJLNEXgw7MH2I= github.com/onsi/gomega v1.4.2/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.8.1 h1:C5Dqfs/LeauYDX0jJXIe2SWmwCbGzx9yF8C8xy3Lh34= @@ -400,7 +394,6 @@ github.com/opentracing/opentracing-go v1.1.0 h1:pWlfV3Bxv7k65HYwkikxat0+s3pV4bsq github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= github.com/pelletier/go-toml v1.3.0/go.mod h1:PN7xzY2wHTK0K9p34ErDQMlFxa51Fk0OUruD3k1mMwo= -github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5 h1:q2e307iGHPdTGp0hoxKjt1H5pDo6utceo3dQVK3I5XQ= github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5/go.mod h1:jvVRKCrJTQWu0XVbaOlby/2lO20uSCHEMzzplHXte1o= github.com/phf/go-queue v0.0.0-20170504031614-9abe38d0371d h1:U+PMnTlV2tu7RuMK5etusZG3Cf+rpow5hqQByeCzJ2g= github.com/phf/go-queue v0.0.0-20170504031614-9abe38d0371d/go.mod h1:lXfE4PvvTW5xOjO6Mba8zDPyw8M93B6AQ7frTGnMlA8= @@ -410,13 +403,9 @@ github.com/pingcap-incubator/tidb-dashboard v0.0.0-20200807020752-01f0abe88e93/g github.com/pingcap-incubator/tidb-dashboard v0.0.0-20200908071351-a715a95c7de2/go.mod h1:X3r7/4Wr9fSC5KlsfezBh/5noeWGEJNQuSvjgS2rvdI= github.com/pingcap/br v0.0.0-20200426093517-dd11ae28b885/go.mod h1:4w3meMnk7HDNpNgjuRAxavruTeKJvUiXxoEWTjzXPnA= github.com/pingcap/br v0.0.0-20200521085655-53201addd4ad/go.mod h1:SlSUHWY7QUoooiYxOKuJ8kUh2KjI29ogBh89YXz2dLA= -github.com/pingcap/br v0.0.0-20200623060633-439a1c2b2bfd h1:vEoTsslkTbSiMMAY8XHsI/D0gih8y/kOPQytXYgc7t0= github.com/pingcap/br v0.0.0-20200623060633-439a1c2b2bfd/go.mod h1:NGee2H9vXLunFIBXGb3uFsWRpw3BBo822sY4dyXepqo= -github.com/pingcap/br v0.0.0-20200716021245-f1df51c11469 h1:sp6f6H8j9Iqt1rVzA1XOs4oCEumb9S3lL3L5UqLpKWo= github.com/pingcap/br v0.0.0-20200716021245-f1df51c11469/go.mod h1:Ft2Vuvj6XJkbjQvflDOesJTy+9bui0saz0UonIgipAw= -github.com/pingcap/br v0.0.0-20200805095214-09dcc7534821 h1:7RnBnMctJVWnnl97bxXpuXiGVCNcYsqD4vaVjfroW6U= github.com/pingcap/br v0.0.0-20200805095214-09dcc7534821/go.mod h1:JVsPK6Ibo2RBkTC2l1bzcRBVuHte/tJRERgay5gsBb8= -github.com/pingcap/br v0.0.0-20200907090854-8a4cd9e0abd1 h1:i7bl0o9aKtecGi/VQnDxir2ByBstbIW70OGKAoeryxw= github.com/pingcap/br v0.0.0-20200907090854-8a4cd9e0abd1/go.mod h1:nCJjSVtB6bUTdXlPhZ1vnNavqJ+Ea3JZAELu2IP2B7w= github.com/pingcap/br v0.0.0-20200921112226-ee2e962f5e4b h1:qSh2uuXXuFnXRgL1vU3AvXbzg8Nn9IyFbUheCsRB7SQ= github.com/pingcap/br v0.0.0-20200921112226-ee2e962f5e4b/go.mod h1:q/Fg9CsYlK3wGPioVqcosmce2dKS505GVnyJcqQuNpw= @@ -425,13 +414,10 @@ github.com/pingcap/check v0.0.0-20191107115940-caf2b9e6ccf4/go.mod h1:PYMCGwN0JH github.com/pingcap/check v0.0.0-20191216031241-8a5a85928f12/go.mod h1:PYMCGwN0JHjoqGr3HrZoD+b8Tgx8bKnArhSq8YVzUMc= github.com/pingcap/check v0.0.0-20200212061837-5e12011dc712 h1:R8gStypOBmpnHEx1qi//SaqxJVI4inOqljg/Aj5/390= github.com/pingcap/check v0.0.0-20200212061837-5e12011dc712/go.mod h1:PYMCGwN0JHjoqGr3HrZoD+b8Tgx8bKnArhSq8YVzUMc= -github.com/pingcap/errcode v0.0.0-20180921232412-a1a7271709d9 h1:KH4f4Si9XK6/IW50HtoaiLIFHGkapOM6w83za47UYik= github.com/pingcap/errcode v0.0.0-20180921232412-a1a7271709d9/go.mod h1:4b2X8xSqxIroj/IZ9MX/VGZhAwc11wB9wRIzHvz6SeM= github.com/pingcap/errors v0.11.0/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8= github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8= -github.com/pingcap/errors v0.11.5-0.20190809092503-95897b64e011 h1:58naV4XMEqm0hl9LcYo6cZoGBGiLtefMQMF/vo3XLgQ= github.com/pingcap/errors v0.11.5-0.20190809092503-95897b64e011/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8= -github.com/pingcap/errors v0.11.5-0.20200902104258-eba4f1d8f6de h1:mW8hC2yXTpflfyTeJgcN4aJQfwcYODde8YgjBgAy6do= github.com/pingcap/errors v0.11.5-0.20200902104258-eba4f1d8f6de/go.mod h1:g4vx//d6VakjJ0mk7iLBlKA8LFavV/sAVINT/1PFxeQ= github.com/pingcap/errors v0.11.5-0.20200917111840-a15ef68f753d h1:TH18wFO5Nq/zUQuWu9ms2urgZnLP69XJYiI2JZAkUGc= github.com/pingcap/errors v0.11.5-0.20200917111840-a15ef68f753d/go.mod h1:g4vx//d6VakjJ0mk7iLBlKA8LFavV/sAVINT/1PFxeQ= @@ -441,8 +427,9 @@ github.com/pingcap/failpoint v0.0.0-20200506114213-c17f16071c53/go.mod h1:w4PEZ5 github.com/pingcap/failpoint v0.0.0-20200603062251-b230c36c413c/go.mod h1:w4PEZ5y16LeofeeGwdgZB4ddv9bLyDuIX+ljstgKZyk= github.com/pingcap/failpoint v0.0.0-20200702092429-9f69995143ce h1:Y1kCxlCtlPTMtVcOkjUcuQKh+YrluSo7+7YMCQSzy30= github.com/pingcap/failpoint v0.0.0-20200702092429-9f69995143ce/go.mod h1:w4PEZ5y16LeofeeGwdgZB4ddv9bLyDuIX+ljstgKZyk= -github.com/pingcap/fn v0.0.0-20191016082858-07623b84a47d h1:rCmRK0lCRrHMUbS99BKFYhK9YxJDNw0xB033cQbYo0s= github.com/pingcap/fn v0.0.0-20191016082858-07623b84a47d/go.mod h1:fMRU1BA1y+r89AxUoaAar4JjrhUkVDt0o0Np6V8XbDQ= +github.com/pingcap/fn v0.0.0-20200306044125-d5540d389059 h1:Pe2LbxRmbTfAoKJ65bZLmhahmvHm7n9DUxGRQT00208= +github.com/pingcap/fn v0.0.0-20200306044125-d5540d389059/go.mod h1:fMRU1BA1y+r89AxUoaAar4JjrhUkVDt0o0Np6V8XbDQ= github.com/pingcap/goleveldb v0.0.0-20191226122134-f82aafb29989 h1:surzm05a8C9dN8dIUmo4Be2+pMRb6f55i+UIYrluu2E= github.com/pingcap/goleveldb v0.0.0-20191226122134-f82aafb29989/go.mod h1:O17XtbryoCJhkKGbT62+L2OlrniwqiGLSqrmdHCMzZw= github.com/pingcap/kvproto v0.0.0-20191211054548-3c6b38ea5107/go.mod h1:WWLmULLO7l8IOcQG+t+ItJ3fEcrL5FxF0Wu+HrMy26w= @@ -533,9 +520,12 @@ github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/sasha-s/go-deadlock v0.2.0/go.mod h1:StQn567HiB1fF2yJ44N9au7wOhrPS3iZqiDbRupzT10= github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= +github.com/sergi/go-diff v1.0.1-0.20180205163309-da645544ed44 h1:tB9NOR21++IjLyVx3/PCPhWMwqGNCMQEH96A6dMZ/gc= github.com/sergi/go-diff v1.0.1-0.20180205163309-da645544ed44/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= github.com/shirou/gopsutil v2.19.10+incompatible h1:lA4Pi29JEVIQIgATSeftHSY0rMGI9CLrl2ZvDLiahto= github.com/shirou/gopsutil v2.19.10+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= +github.com/shirou/gopsutil v2.20.3+incompatible h1:0JVooMPsT7A7HqEYdydp/OfjSOYSjhXV7w1hkKj/NPQ= +github.com/shirou/gopsutil v2.20.3+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= github.com/shirou/w32 v0.0.0-20160930032740-bb4de0191aa4 h1:udFKJ0aHUL60LboW/A+DfgoHVedieIzIXE8uylPue0U= github.com/shirou/w32 v0.0.0-20160930032740-bb4de0191aa4/go.mod h1:qsXQc7+bwAM3Q1u/4XEfrquwF8Lw7D7y5cD8CuHnfIc= github.com/shurcooL/httpfs v0.0.0-20190707220628-8d4bc4ba7749 h1:bUGsEnyNbVPw06Bs80sCeARAlK8lhwqGyi6UT8ymuGk= @@ -551,7 +541,6 @@ github.com/sirupsen/logrus v1.6.0 h1:UBcNElsrwanuuMsnGSlYmtmgbb23qDR5dG+6X6Oo89I github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= github.com/soheilhy/cmux v0.1.4 h1:0HKaf1o97UwFjHH9o5XsHUOF+tqmdA7KEzXLpiyaw0E= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= -github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72 h1:qLC7fQah7D6K1B0ujays3HV9gkFtllcxhzImRR7ArPQ= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= @@ -602,6 +591,8 @@ github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5 h1:LnC5Kc github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/uber-go/atomic v1.3.2 h1:Azu9lPBWRNKzYXSIwRfgRuDuS0YKsK4NFhiQv98gkxo= github.com/uber-go/atomic v1.3.2/go.mod h1:/Ct5t2lcmbJ4OSe/waGBoaVvVqtO0bmtfVNex1PFV8g= +github.com/uber-go/atomic v1.4.0 h1:yOuPqEq4ovnhEjpHmfFwsqBXDYbQeT6Nb0bwD6XnD5o= +github.com/uber-go/atomic v1.4.0/go.mod h1:/Ct5t2lcmbJ4OSe/waGBoaVvVqtO0bmtfVNex1PFV8g= github.com/uber/jaeger-client-go v2.15.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk= github.com/uber/jaeger-client-go v2.22.1+incompatible h1:NHcubEkVbahf9t3p75TOCR83gdUHXjRJvjoBh1yACsM= github.com/uber/jaeger-client-go v2.22.1+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk= @@ -619,6 +610,7 @@ github.com/unrolled/render v0.0.0-20171102162132-65450fb6b2d3/go.mod h1:tu82oB5W github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/urfave/cli v1.22.2/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= github.com/urfave/cli/v2 v2.1.1/go.mod h1:SE9GqnLQmjVa0iPEY0f1w3ygNIYcIJ0OKPMoW2caLfQ= +github.com/urfave/negroni v0.3.0 h1:PaXOb61mWeZJxc1Ji2xJjpVg9QfPo0rrB+lHyBxGNSU= github.com/urfave/negroni v0.3.0/go.mod h1:Meg73S6kFm/4PpbYdq35yYWoCZ9mS/YSx+lKnmiohz4= github.com/vmihailenco/msgpack/v4 v4.3.11/go.mod h1:gborTTJjAo/GWTqqRjrLCn9pgNN+NXzzngzBKDPIqw4= github.com/vmihailenco/msgpack/v5 v5.0.0-beta.1/go.mod h1:xlngVLeyQ/Qi05oQxhQ+oTuqa03RjMwMfk/7/TCs+QI= @@ -746,6 +738,8 @@ golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4Iltr golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6 h1:pE8b58s1HRDMi8RDc79m0HISf9D4TzseP40cEA6IGfs= golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d h1:TzXSXBo42m9gQenoE3b9BGiEpg5IG2JkU5FkPIawgtw= +golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -794,8 +788,9 @@ golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20190308202827-9d24e82272b4 h1:SvFZT6jyqRaOeXpc5h/JSfZenJ2O330aBsf7JfSUXmQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20191024005414-555d28b269f0 h1:/5xXl8Y5W96D+TtHSlonuFqGHIWVuyCkGJLwGh9JJFs= +golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -871,6 +866,8 @@ google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvx google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb h1:ADPHZzpzM4tk4V4S5cnCrr5SwzvlrPRmqqCuJDB8UTs= google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200108215221-bd8f9a0ef82f h1:2wh8dWY8959cBGQvk1RD+/eQBgRYYDaZ+hT0/zsARoA= +google.golang.org/genproto v0.0.0-20200108215221-bd8f9a0ef82f/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/grpc v0.0.0-20180607172857-7a6a684ca69e/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= @@ -925,7 +922,11 @@ k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= sigs.k8s.io/yaml v1.1.0 h1:4A07+ZFc2wgJwo8YNlQpr1rVlgUDlxXHhPJciaPY5gs= sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= +sigs.k8s.io/yaml v1.2.0 h1:kr/MCeFWJWTwyaHoR9c8EjH9OumOmoF9YGiZd7lFm/Q= +sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= sourcegraph.com/sourcegraph/appdash v0.0.0-20180531100431-4c381bd170b4 h1:VO9oZbbkvTwqLimlQt15QNdOOBArT2dw/bvzsMZBiqQ= sourcegraph.com/sourcegraph/appdash v0.0.0-20180531100431-4c381bd170b4/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= +sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0 h1:ucqkfpjg9WzSUubAO62csmucvxl4/JeW3F4I4909XkM= +sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= sourcegraph.com/sourcegraph/appdash-data v0.0.0-20151005221446-73f23eafcf67 h1:e1sMhtVq9AfcEy8AXNb8eSg6gbzfdpYhoNqnPJa+GzI= sourcegraph.com/sourcegraph/appdash-data v0.0.0-20151005221446-73f23eafcf67/go.mod h1:L5q+DGLGOQFpo1snNEkLOJT2d1YTW66rWNzatr3He1k= diff --git a/tools/check/check-errdoc.sh b/tools/check/check-errdoc.sh new file mode 100755 index 0000000000000..56d64ba282ca9 --- /dev/null +++ b/tools/check/check-errdoc.sh @@ -0,0 +1,26 @@ +#!/usr/bin/env bash +# Copyright 2020 PingCAP, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# See the License for the specific language governing permissions and +# limitations under the License. +# +# set is used to set the environment variables. +# -e: exit immediately when a command returning a non-zero exit code. +# -u: treat unset variables as an error. +# -o pipefail: sets the exit code of a pipeline to that of the rightmost command to exit with a non-zero status, +# or to zero if all commands of the pipeline exit successfully. +set -euo pipefail + +cd -P . + +cp errors.toml /tmp/errors.toml.before +./tools/bin/errdoc-gen --source . --module github.com/pingcap/tidb --output errors.toml +diff -q errors.toml /tmp/errors.toml.before From 0b0fbf194d8294ac1e7557f21a24a69a611b86ec Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Wed, 21 Oct 2020 17:42:22 +0800 Subject: [PATCH 051/229] store/tikv: fix rpc runtime stats collect (#20014) (#20514) Signed-off-by: ti-srebot Signed-off-by: crazycs520 --- executor/executor_test.go | 14 ++++++++++++++ store/tikv/coprocessor.go | 5 ++++- store/tikv/region_request.go | 26 +++++++++++++++++--------- 3 files changed, 35 insertions(+), 10 deletions(-) diff --git a/executor/executor_test.go b/executor/executor_test.go index f233d63df9abf..53ef80339ce59 100644 --- a/executor/executor_test.go +++ b/executor/executor_test.go @@ -6017,6 +6017,20 @@ func (s *testSuite) TestIssue19372(c *C) { tk.MustQuery("select (select t2.c_str from t2 where t2.c_str <= t1.c_str and t2.c_int in (1, 2) order by t2.c_str limit 1) x from t1 order by c_int;").Check(testkit.Rows("a", "a", "a")) } +func (s *testSerialSuite1) TestCollectCopRuntimeStats(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test;") + tk.MustExec("drop table if exists t1") + tk.MustExec("create table t1 (a int, b int)") + tk.MustExec("set tidb_enable_collect_execution_info=1;") + c.Assert(failpoint.Enable("github.com/pingcap/tidb/store/tikv/tikvStoreRespResult", `return(true)`), IsNil) + rows := tk.MustQuery("explain analyze select * from t1").Rows() + c.Assert(len(rows), Equals, 2) + explain := fmt.Sprintf("%v", rows[0]) + c.Assert(explain, Matches, ".*rpc_num: 2, .*regionMiss:.*") + c.Assert(failpoint.Disable("github.com/pingcap/tidb/store/tikv/tikvStoreRespResult"), IsNil) +} + func (s *testSuite) TestCollectDMLRuntimeStats(c *C) { tk := testkit.NewTestKit(c, s.store) tk.MustExec("use test") diff --git a/store/tikv/coprocessor.go b/store/tikv/coprocessor.go index ba6ecaac67f75..2b1b445009fd8 100644 --- a/store/tikv/coprocessor.go +++ b/store/tikv/coprocessor.go @@ -778,7 +778,9 @@ func (worker *copIteratorWorker) handleTaskOnce(bo *Backoffer, task *copTask, ch }) req.StoreTp = task.storeType startTime := time.Now() - worker.Stats = make(map[tikvrpc.CmdType]*RPCRuntimeStats) + if worker.Stats == nil { + worker.Stats = make(map[tikvrpc.CmdType]*RPCRuntimeStats) + } resp, rpcCtx, storeAddr, err := worker.SendReqCtx(bo, req, task.region, ReadTimeoutMedium, task.storeType, task.storeAddr) if err != nil { if task.storeType == kv.TiDB { @@ -1030,6 +1032,7 @@ func (worker *copIteratorWorker) handleCopResponse(bo *Backoffer, rpcCtx *RPCCon resp.detail = new(CopRuntimeStats) } resp.detail.Stats = worker.Stats + worker.Stats = nil resp.detail.BackoffTime = time.Duration(bo.totalSleep) * time.Millisecond resp.detail.BackoffSleep = make(map[string]time.Duration, len(bo.backoffTimes)) resp.detail.BackoffTimes = make(map[string]int, len(bo.backoffTimes)) diff --git a/store/tikv/region_request.go b/store/tikv/region_request.go index 52783aad679c9..f8037794de009 100644 --- a/store/tikv/region_request.go +++ b/store/tikv/region_request.go @@ -28,6 +28,7 @@ import ( "github.com/pingcap/errors" "github.com/pingcap/failpoint" + "github.com/pingcap/kvproto/pkg/coprocessor" "github.com/pingcap/kvproto/pkg/errorpb" "github.com/pingcap/kvproto/pkg/kvrpcpb" "github.com/pingcap/tidb/kv" @@ -134,12 +135,11 @@ func (ss *RegionBatchRequestSender) sendStreamReqToAddr(bo *Backoffer, ctxs []co if rawHook := ctx.Value(RPCCancellerCtxKey{}); rawHook != nil { ctx, cancel = rawHook.(*RPCCanceller).WithCancel(ctx) } + start := time.Now() + resp, err = ss.client.SendRequest(ctx, rpcCtx.Addr, req, timout) if ss.Stats != nil { - defer func(start time.Time) { - recordRegionRequestRuntimeStats(ss.Stats, req.Type, time.Since(start)) - }(time.Now()) + recordRegionRequestRuntimeStats(ss.Stats, req.Type, time.Since(start)) } - resp, err = ss.client.SendRequest(ctx, rpcCtx.Addr, req, timout) if err != nil { cancel() ss.rpcError = err @@ -387,18 +387,26 @@ func (s *RegionRequestSender) sendReqToRegion(bo *Backoffer, rpcCtx *RPCContext, defer s.releaseStoreToken(rpcCtx.Store) } - if s.Stats != nil { - defer func(start time.Time) { - recordRegionRequestRuntimeStats(s.Stats, req.Type, time.Since(start)) - }(time.Now()) - } ctx := bo.ctx if rawHook := ctx.Value(RPCCancellerCtxKey{}); rawHook != nil { var cancel context.CancelFunc ctx, cancel = rawHook.(*RPCCanceller).WithCancel(ctx) defer cancel() } + start := time.Now() resp, err = s.client.SendRequest(ctx, rpcCtx.Addr, req, timeout) + if s.Stats != nil { + recordRegionRequestRuntimeStats(s.Stats, req.Type, time.Since(start)) + failpoint.Inject("tikvStoreRespResult", func(val failpoint.Value) { + if val.(bool) { + if req.Type == tikvrpc.CmdCop && bo.totalSleep == 0 { + failpoint.Return(&tikvrpc.Response{ + Resp: &coprocessor.Response{RegionError: &errorpb.Error{EpochNotMatch: &errorpb.EpochNotMatch{}}}, + }, false, nil) + } + } + }) + } if err != nil { // Because in rpc logic, context.Cancel() will be transferred to rpcContext.Cancel error. For rpcContext cancel, // we need to retry the request. But for context cancel active, for example, limitExec gets the required rows, From 9c6c698f01aea26d9c3edc15a9d91737ce5be581 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Wed, 21 Oct 2020 17:55:23 +0800 Subject: [PATCH 052/229] metric: add metric for pessimistic lock keys (#20383) (#20513) Signed-off-by: ti-srebot --- metrics/session.go | 1 + store/tikv/txn.go | 2 ++ 2 files changed, 3 insertions(+) diff --git a/metrics/session.go b/metrics/session.go index 4838ee771ac8b..feb38783ce161 100644 --- a/metrics/session.go +++ b/metrics/session.go @@ -142,4 +142,5 @@ const ( LblAddress = "address" LblBatchGet = "batch_get" LblGet = "get" + LblLockKeys = "lock_keys" ) diff --git a/store/tikv/txn.go b/store/tikv/txn.go index efb9edf937e1a..4ff782b35e3f5 100644 --- a/store/tikv/txn.go +++ b/store/tikv/txn.go @@ -45,6 +45,7 @@ var ( tikvTxnCmdHistogramWithRollback = metrics.TiKVTxnCmdHistogram.WithLabelValues(metrics.LblRollback) tikvTxnCmdHistogramWithBatchGet = metrics.TiKVTxnCmdHistogram.WithLabelValues(metrics.LblBatchGet) tikvTxnCmdHistogramWithGet = metrics.TiKVTxnCmdHistogram.WithLabelValues(metrics.LblGet) + tikvTxnCmdHistogramWithLockKeys = metrics.TiKVTxnCmdHistogram.WithLabelValues(metrics.LblLockKeys) ) // SchemaAmender is used by pessimistic transactions to amend commit mutations for schema change during 2pc. @@ -369,6 +370,7 @@ func (txn *tikvTxn) LockKeys(ctx context.Context, lockCtx *kv.LockCtx, keysInput keys := make([][]byte, 0, len(keysInput)) startTime := time.Now() defer func() { + tikvTxnCmdHistogramWithLockKeys.Observe(time.Since(startTime).Seconds()) if err == nil { if lockCtx.PessimisticLockWaited != nil { if atomic.LoadInt32(lockCtx.PessimisticLockWaited) > 0 { From a0515bcc2de91f74ce92b66948a2ecbb8ed410ee Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Thu, 22 Oct 2020 11:20:24 +0800 Subject: [PATCH 053/229] planner: copy the field Column in dataSource when create partition union. (#20559) (#20565) Signed-off-by: ti-srebot --- planner/core/integration_test.go | 57 ++++++++++++++++++++++++ planner/core/rule_partition_processor.go | 2 + 2 files changed, 59 insertions(+) diff --git a/planner/core/integration_test.go b/planner/core/integration_test.go index a515e196c9ac1..499a628b0353c 100644 --- a/planner/core/integration_test.go +++ b/planner/core/integration_test.go @@ -1384,3 +1384,60 @@ func (s *testIntegrationSuite) TestIssue19926(c *C) { tk.MustExec("create definer='root'@'localhost' view v as\nselect \nconcat(`ta`.`status`,`tb`.`status`) AS `status`, \n`ta`.`id` AS `id` from (`ta` join `tb`) \nwhere (`ta`.`id` = `tb`.`id`);") tk.MustQuery("SELECT tc.status,v.id FROM tc, v WHERE tc.id = v.id AND v.status = '11';").Check(testkit.Rows("1 1")) } + +func (s *testIntegrationSuite) TestPartitionUnionWithPPruningColumn(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t;") + tk.MustExec("CREATE TABLE `t` (\n `fid` bigint(36) NOT NULL,\n `oty` varchar(30) DEFAULT NULL,\n `oid` int(11) DEFAULT NULL,\n `pid` bigint(20) DEFAULT NULL,\n `bid` int(11) DEFAULT NULL,\n `r5` varchar(240) DEFAULT '',\n PRIMARY KEY (`fid`)\n)PARTITION BY HASH( `fid` ) PARTITIONS 4;") + + tk.MustExec("INSERT INTO t (fid, oty, oid, pid, bid, r5) VALUES (59, 'm', 441, 1, 2143, 'LE1264_r5');") + tk.MustExec("INSERT INTO t (fid, oty, oid, pid, bid, r5) VALUES (135, 'm', 1121, 1, 2423, 'LE2008_r5');") + tk.MustExec("INSERT INTO t (fid, oty, oid, pid, bid, r5) VALUES (139, 'm', 1125, 1, 2432, 'LE2005_r5');") + tk.MustExec("INSERT INTO t (fid, oty, oid, pid, bid, r5) VALUES (143, 'm', 1129, 1, 2438, 'LE2006_r5');") + tk.MustExec("INSERT INTO t (fid, oty, oid, pid, bid, r5) VALUES (147, 'm', 1133, 1, 2446, 'LE2014_r5');") + tk.MustExec("INSERT INTO t (fid, oty, oid, pid, bid, r5) VALUES (167, 'm', 1178, 1, 2512, 'LE2055_r5');") + tk.MustExec("INSERT INTO t (fid, oty, oid, pid, bid, r5) VALUES (171, 'm', 1321, 1, 2542, 'LE1006_r5');") + tk.MustExec("INSERT INTO t (fid, oty, oid, pid, bid, r5) VALUES (179, 'm', 1466, 1, 2648, 'LE2171_r5');") + tk.MustExec("INSERT INTO t (fid, oty, oid, pid, bid, r5) VALUES (187, 'm', 1567, 1, 2690, 'LE1293_r5');") + tk.MustExec("INSERT INTO t (fid, oty, oid, pid, bid, r5) VALUES (57, 'm', 341, 1, 2102, 'LE1001_r5');") + tk.MustExec("INSERT INTO t (fid, oty, oid, pid, bid, r5) VALUES (137, 'm', 1123, 1, 2427, 'LE2003_r5');") + tk.MustExec("INSERT INTO t (fid, oty, oid, pid, bid, r5) VALUES (145, 'm', 1131, 1, 2442, 'LE2048_r5');") + tk.MustExec("INSERT INTO t (fid, oty, oid, pid, bid, r5) VALUES (138, 'm', 1124, 1, 2429, 'LE2004_r5');") + tk.MustExec("INSERT INTO t (fid, oty, oid, pid, bid, r5) VALUES (142, 'm', 1128, 1, 2436, 'LE2049_r5');") + tk.MustExec("INSERT INTO t (fid, oty, oid, pid, bid, r5) VALUES (174, 'm', 1381, 1, 2602, 'LE2170_r5');") + tk.MustExec("INSERT INTO t (fid, oty, oid, pid, bid, r5) VALUES (28, 'm', 81, 1, 2023, 'LE1009_r5');") + tk.MustExec("INSERT INTO t (fid, oty, oid, pid, bid, r5) VALUES (60, 'm', 442, 1, 2145, 'LE1263_r5');") + tk.MustExec("INSERT INTO t (fid, oty, oid, pid, bid, r5) VALUES (136, 'm', 1122, 1, 2425, 'LE2002_r5');") + tk.MustExec("INSERT INTO t (fid, oty, oid, pid, bid, r5) VALUES (140, 'm', 1126, 1, 2434, 'LE2001_r5');") + tk.MustExec("INSERT INTO t (fid, oty, oid, pid, bid, r5) VALUES (168, 'm', 1179, 1, 2514, 'LE2052_r5');") + tk.MustExec("INSERT INTO t (fid, oty, oid, pid, bid, r5) VALUES (196, 'm', 3380, 1, 2890, 'LE1300_r5');") + tk.MustExec("INSERT INTO t (fid, oty, oid, pid, bid, r5) VALUES (208, 'm', 3861, 1, 3150, 'LE1323_r5');") + tk.MustExec("INSERT INTO t (fid, oty, oid, pid, bid, r5) VALUES (432, 'm', 4060, 1, 3290, 'LE1327_r5');") + + tk.MustQuery("SELECT DISTINCT t.bid, t.r5 FROM t left join t parent on parent.oid = t.pid WHERE t.oty = 'm';").Sort().Check( + testkit.Rows("2023 LE1009_r5", + "2102 LE1001_r5", + "2143 LE1264_r5", + "2145 LE1263_r5", + "2423 LE2008_r5", + "2425 LE2002_r5", + "2427 LE2003_r5", + "2429 LE2004_r5", + "2432 LE2005_r5", + "2434 LE2001_r5", + "2436 LE2049_r5", + "2438 LE2006_r5", + "2442 LE2048_r5", + "2446 LE2014_r5", + "2512 LE2055_r5", + "2514 LE2052_r5", + "2542 LE1006_r5", + "2602 LE2170_r5", + "2648 LE2171_r5", + "2690 LE1293_r5", + "2890 LE1300_r5", + "3150 LE1323_r5", + "3290 LE1327_r5")) + +} diff --git a/planner/core/rule_partition_processor.go b/planner/core/rule_partition_processor.go index 14bb906565071..69d0c75a7effd 100644 --- a/planner/core/rule_partition_processor.go +++ b/planner/core/rule_partition_processor.go @@ -827,6 +827,8 @@ func (s *partitionProcessor) makeUnionAllChildren(ds *DataSource, pi *model.Part newDataSource := *ds newDataSource.baseLogicalPlan = newBaseLogicalPlan(ds.SCtx(), plancodec.TypeTableScan, &newDataSource, ds.blockOffset) newDataSource.schema = ds.schema.Clone() + newDataSource.Columns = make([]*model.ColumnInfo, len(ds.Columns)) + copy(newDataSource.Columns, ds.Columns) newDataSource.isPartition = true newDataSource.physicalTableID = pi.Definitions[i].ID From 73563b0fd0bb50575d28aacb4e4ee01473afe007 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Thu, 22 Oct 2020 13:07:34 +0800 Subject: [PATCH 054/229] *:Record the time consuming of memory operation of Insert Executor in Runtime Information (#19574) (#20187) --- executor/executor_test.go | 25 ++++++++ executor/insert.go | 16 ++++- executor/insert_common.go | 106 ++++++++++++++++++++++++++++++-- executor/insert_test.go | 17 +++++ executor/replace.go | 6 +- store/tikv/scan.go | 3 +- store/tikv/snapshot.go | 15 +++-- util/execdetails/execdetails.go | 7 +++ 8 files changed, 179 insertions(+), 16 deletions(-) diff --git a/executor/executor_test.go b/executor/executor_test.go index 53ef80339ce59..d55ff0428014a 100644 --- a/executor/executor_test.go +++ b/executor/executor_test.go @@ -6067,6 +6067,31 @@ func (s *testSuite) TestCollectDMLRuntimeStats(c *C) { tk.MustQuery("select * from t1 for update").Check(testkit.Rows("5 6", "7 7")) c.Assert(getRootStats(), Matches, "time.*lock_keys.*time.* region.* keys.* lock_rpc:.* rpc_count.*") tk.MustExec("rollback") + + tk.MustExec("begin pessimistic") + tk.MustExec("insert ignore into t1 values (9,9)") + c.Assert(getRootStats(), Matches, "time:.*, loops:.*, prepare:.*, check_insert:{total_time:.*, mem_insert_time:.*, prefetch:.*, rpc:{BatchGet:{num_rpc:.*, total_time:.*}}}.*") + tk.MustExec("rollback") + + tk.MustExec("begin pessimistic") + tk.MustExec("insert into t1 values (10,10) on duplicate key update a=a+1") + c.Assert(getRootStats(), Matches, "time:.*, loops:.*, prepare:.*, check_insert:{total_time:.*, mem_insert_time:.*, prefetch:.*, rpc:{BatchGet:{num_rpc:.*, total_time:.*}.*") + tk.MustExec("rollback") + + tk.MustExec("begin pessimistic") + tk.MustExec("insert into t1 values (1,2)") + c.Assert(getRootStats(), Matches, "time:.*, loops:.*, prepare:.*, insert:.*") + tk.MustExec("rollback") + + tk.MustExec("begin pessimistic") + tk.MustExec("insert ignore into t1 values(11,11) on duplicate key update `a`=`a`+1") + c.Assert(getRootStats(), Matches, "time:.*, loops:.*, prepare:.*, check_insert:{total_time:.*, mem_insert_time:.*, prefetch:.*, rpc:.*}") + tk.MustExec("rollback") + + tk.MustExec("begin pessimistic") + tk.MustExec("replace into t1 values (1,4)") + c.Assert(getRootStats(), Matches, "time:.*, loops:.*, prefetch:.*, rpc:.*") + tk.MustExec("rollback") } func (s *testSuite) TestIssue13758(c *C) { diff --git a/executor/insert.go b/executor/insert.go index 22ff24bd15e78..7913142a55cef 100644 --- a/executor/insert.go +++ b/executor/insert.go @@ -18,6 +18,7 @@ import ( "encoding/hex" "fmt" "runtime/trace" + "time" "github.com/opentracing/opentracing-go" "github.com/pingcap/parser/mysql" @@ -82,6 +83,8 @@ func (e *InsertExec) exec(ctx context.Context, rows [][]types.Datum) error { return err } } else { + e.collectRuntimeStatsEnabled() + start := time.Now() for i, row := range rows { var err error if i == 0 { @@ -93,6 +96,9 @@ func (e *InsertExec) exec(ctx context.Context, rows [][]types.Datum) error { return err } } + if e.stats != nil { + e.stats.CheckInsertTime += time.Since(start) + } } e.memTracker.Consume(int64(txn.Size() - txnSize)) return nil @@ -178,6 +184,7 @@ func (e *InsertExec) updateDupRow(ctx context.Context, txn kv.Transaction, row t // batchUpdateDupRows updates multi-rows in batch if they are duplicate with rows in table. func (e *InsertExec) batchUpdateDupRows(ctx context.Context, newRows [][]types.Datum) error { // Get keys need to be checked. + start := time.Now() toBeCheckedRows, err := getKeysNeedCheck(ctx, e.ctx, e.Table, newRows) if err != nil { return err @@ -194,13 +201,15 @@ func (e *InsertExec) batchUpdateDupRows(ctx context.Context, newRows [][]types.D defer snapshot.DelOption(kv.CollectRuntimeStats) } } - + PrefetchStart := time.Now() // Use BatchGet to fill cache. // It's an optimization and could be removed without affecting correctness. if err = prefetchDataCache(ctx, txn, toBeCheckedRows); err != nil { return err } - + if e.stats != nil { + e.stats.Prefetch += time.Since(PrefetchStart) + } for i, r := range toBeCheckedRows { if r.handleKey != nil { handle, err := tablecodec.DecodeRowKey(r.handleKey.newKey) @@ -258,6 +267,9 @@ func (e *InsertExec) batchUpdateDupRows(ctx context.Context, newRows [][]types.D } } } + if e.stats != nil { + e.stats.CheckInsertTime += time.Since(start) + } return nil } diff --git a/executor/insert_common.go b/executor/insert_common.go index 0df7ba25558a8..58d2fbc7d998f 100644 --- a/executor/insert_common.go +++ b/executor/insert_common.go @@ -14,9 +14,13 @@ package executor import ( + "bytes" "context" + "fmt" "math" + "time" + "github.com/opentracing/opentracing-go" "github.com/pingcap/errors" "github.com/pingcap/parser/ast" "github.com/pingcap/parser/model" @@ -31,6 +35,7 @@ import ( "github.com/pingcap/tidb/table/tables" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/chunk" + "github.com/pingcap/tidb/util/execdetails" "github.com/pingcap/tidb/util/logutil" "github.com/pingcap/tidb/util/memory" "go.uber.org/zap" @@ -74,7 +79,7 @@ type InsertValues struct { lazyFillAutoID bool memTracker *memory.Tracker - stats *runtimeStatsWithSnapshot + stats *InsertRuntimeStat } type defaultVal struct { @@ -904,7 +909,6 @@ func (e *InsertValues) allocAutoRandomID(fieldType *types.FieldType) (int64, err if err != nil { return 0, err } - layout := autoid.NewAutoRandomIDLayout(fieldType, tableInfo.AutoRandomBits) if tables.OverflowShardBits(autoRandomID, tableInfo.AutoRandomBits, layout.TypeBitsLength, layout.HasSignBit) { return 0, autoid.ErrAutoRandReadFailed @@ -936,8 +940,11 @@ func (e *InsertValues) collectRuntimeStatsEnabled() bool { if e.runtimeStats != nil { if e.stats == nil { snapshotStats := &tikv.SnapshotRuntimeStats{} - e.stats = &runtimeStatsWithSnapshot{ + e.stats = &InsertRuntimeStat{ + BasicRuntimeStats: e.runtimeStats, SnapshotRuntimeStats: snapshotStats, + Prefetch: 0, + CheckInsertTime: 0, } e.ctx.GetSessionVars().StmtCtx.RuntimeStatsColl.RegisterStats(e.id, e.stats) } @@ -951,7 +958,12 @@ func (e *InsertValues) collectRuntimeStatsEnabled() bool { func (e *InsertValues) batchCheckAndInsert(ctx context.Context, rows [][]types.Datum, addRecord func(ctx context.Context, row []types.Datum) (int64, error)) error { // all the rows will be checked, so it is safe to set BatchCheck = true e.ctx.GetSessionVars().StmtCtx.BatchCheck = true - + if span := opentracing.SpanFromContext(ctx); span != nil && span.Tracer() != nil { + span1 := span.Tracer().StartSpan("InsertValues.batchCheckAndInsert", opentracing.ChildOf(span.Context())) + defer span1.Finish() + opentracing.ContextWithSpan(ctx, span1) + } + start := time.Now() // Get keys need to be checked. toBeCheckedRows, err := getKeysNeedCheck(ctx, e.ctx, e.Table, rows) if err != nil { @@ -969,11 +981,15 @@ func (e *InsertValues) batchCheckAndInsert(ctx context.Context, rows [][]types.D defer snapshot.DelOption(kv.CollectRuntimeStats) } } + PrefetchStart := time.Now() // Fill cache using BatchGet, the following Get requests don't need to visit TiKV. if _, err = prefetchUniqueIndices(ctx, txn, toBeCheckedRows); err != nil { return err } + if e.stats != nil { + e.stats.Prefetch += time.Since(PrefetchStart) + } // append warnings and get no duplicated error rows for i, r := range toBeCheckedRows { @@ -1000,6 +1016,7 @@ func (e *InsertValues) batchCheckAndInsert(ctx context.Context, rows [][]types.D return err } } + // If row was checked with no duplicate keys, // it should be add to values map for the further row check. // There may be duplicate keys inside the insert statement. @@ -1011,6 +1028,9 @@ func (e *InsertValues) batchCheckAndInsert(ctx context.Context, rows [][]types.D } } } + if e.stats != nil { + e.stats.CheckInsertTime += time.Since(start) + } return nil } @@ -1041,3 +1061,81 @@ func (e *InsertValues) addRecordWithAutoIDHint(ctx context.Context, row []types. } return h, nil } + +// InsertRuntimeStat record the runtime information +type InsertRuntimeStat struct { + *execdetails.BasicRuntimeStats + *tikv.SnapshotRuntimeStats + CheckInsertTime time.Duration + Prefetch time.Duration +} + +func (e *InsertRuntimeStat) String() string { + if e.CheckInsertTime == 0 { + // For replace statement. + if e.Prefetch > 0 && e.SnapshotRuntimeStats != nil { + return fmt.Sprintf("prefetch: %v, rpc:{%v}", e.Prefetch, e.SnapshotRuntimeStats.String()) + } + return "" + } + buf := bytes.NewBuffer(make([]byte, 0, 32)) + buf.WriteString(fmt.Sprintf("prepare:%v, ", time.Duration(e.BasicRuntimeStats.GetTime())-e.CheckInsertTime)) + if e.Prefetch > 0 { + buf.WriteString(fmt.Sprintf("check_insert:{total_time:%v, mem_insert_time:%v, prefetch:%v", e.CheckInsertTime, e.CheckInsertTime-e.Prefetch, e.Prefetch)) + if e.SnapshotRuntimeStats != nil { + buf.WriteString(fmt.Sprintf(", rpc:{%s}", e.SnapshotRuntimeStats.String())) + } + buf.WriteString("}") + } else { + buf.WriteString(fmt.Sprintf("insert:%v", e.CheckInsertTime)) + } + return buf.String() +} + +// Clone implements the RuntimeStats interface. +func (e *InsertRuntimeStat) Clone() execdetails.RuntimeStats { + newRs := &InsertRuntimeStat{ + CheckInsertTime: e.CheckInsertTime, + Prefetch: e.Prefetch, + } + if e.SnapshotRuntimeStats != nil { + snapshotStats := e.SnapshotRuntimeStats.Clone() + newRs.SnapshotRuntimeStats = snapshotStats.(*tikv.SnapshotRuntimeStats) + } + if e.BasicRuntimeStats != nil { + basicStats := e.BasicRuntimeStats.Clone() + newRs.BasicRuntimeStats = basicStats.(*execdetails.BasicRuntimeStats) + } + return newRs +} + +// Merge implements the RuntimeStats interface. +func (e *InsertRuntimeStat) Merge(other execdetails.RuntimeStats) { + tmp, ok := other.(*InsertRuntimeStat) + if !ok { + return + } + if tmp.SnapshotRuntimeStats != nil { + if e.SnapshotRuntimeStats == nil { + snapshotStats := tmp.SnapshotRuntimeStats.Clone() + e.SnapshotRuntimeStats = snapshotStats.(*tikv.SnapshotRuntimeStats) + } else { + e.SnapshotRuntimeStats.Merge(tmp.SnapshotRuntimeStats) + } + } + if tmp.BasicRuntimeStats != nil { + if e.BasicRuntimeStats == nil { + basicStats := tmp.BasicRuntimeStats.Clone() + e.BasicRuntimeStats = basicStats.(*execdetails.BasicRuntimeStats) + } else { + e.BasicRuntimeStats.Merge(tmp.BasicRuntimeStats) + } + } + e.Prefetch += tmp.Prefetch + e.CheckInsertTime += tmp.CheckInsertTime +} + +// Tp implements the RuntimeStats interface. +func (e *InsertRuntimeStat) Tp() int { + return execdetails.TpInsertRuntimeStat +} diff --git a/executor/insert_test.go b/executor/insert_test.go index 24d8a12184c3f..e2176761dc09e 100644 --- a/executor/insert_test.go +++ b/executor/insert_test.go @@ -18,13 +18,16 @@ import ( "strconv" "strings" "sync" + "time" . "github.com/pingcap/check" "github.com/pingcap/parser/terror" + "github.com/pingcap/tidb/executor" "github.com/pingcap/tidb/meta/autoid" "github.com/pingcap/tidb/sessionctx/variable" "github.com/pingcap/tidb/table" "github.com/pingcap/tidb/types" + "github.com/pingcap/tidb/util/execdetails" "github.com/pingcap/tidb/util/testkit" "github.com/pingcap/tidb/util/testutil" ) @@ -1148,3 +1151,17 @@ func (s *testSuite9) TestIssue16366(c *C) { c.Assert(err, NotNil) c.Assert(strings.Contains(err.Error(), "Duplicate entry '0' for key 'PRIMARY'"), IsTrue, Commentf("%v", err)) } + +func (s *testSuite9) TestInsertRuntimeStat(c *C) { + stats := &executor.InsertRuntimeStat{ + BasicRuntimeStats: &execdetails.BasicRuntimeStats{}, + SnapshotRuntimeStats: nil, + CheckInsertTime: 2 * time.Second, + Prefetch: 1 * time.Second, + } + stats.BasicRuntimeStats.Record(5*time.Second, 1) + c.Assert(stats.String(), Equals, "prepare:3s, check_insert:{total_time:2s, mem_insert_time:1s, prefetch:1s}") + c.Assert(stats.String(), Equals, stats.Clone().String()) + stats.Merge(stats.Clone()) + c.Assert(stats.String(), Equals, "prepare:6s, check_insert:{total_time:4s, mem_insert_time:2s, prefetch:2s}") +} diff --git a/executor/replace.go b/executor/replace.go index a3f798a524aaa..450d96c117403 100644 --- a/executor/replace.go +++ b/executor/replace.go @@ -17,6 +17,7 @@ import ( "context" "fmt" "runtime/trace" + "time" "github.com/pingcap/errors" "github.com/pingcap/parser/mysql" @@ -201,13 +202,16 @@ func (e *ReplaceExec) exec(ctx context.Context, newRows [][]types.Datum) error { defer snapshot.DelOption(kv.CollectRuntimeStats) } } + prefetchStart := time.Now() // Use BatchGet to fill cache. // It's an optimization and could be removed without affecting correctness. if err = prefetchDataCache(ctx, txn, toBeCheckedRows); err != nil { return err } - + if e.stats != nil { + e.stats.Prefetch = time.Since(prefetchStart) + } e.ctx.GetSessionVars().StmtCtx.AddRecordRows(uint64(len(newRows))) for _, r := range toBeCheckedRows { err = e.replaceRow(ctx, r) diff --git a/store/tikv/scan.go b/store/tikv/scan.go index c3cbd6b5bebe1..b4272ac6857c0 100644 --- a/store/tikv/scan.go +++ b/store/tikv/scan.go @@ -144,7 +144,8 @@ func (s *Scanner) startTS() uint64 { } func (s *Scanner) resolveCurrentLock(bo *Backoffer, current *pb.KvPair) error { - val, err := s.snapshot.get(bo, kv.Key(current.Key)) + ctx := context.Background() + val, err := s.snapshot.get(ctx, bo, current.Key) if err != nil { return errors.Trace(err) } diff --git a/store/tikv/snapshot.go b/store/tikv/snapshot.go index 2896a16b19843..6e7a88ac238f4 100644 --- a/store/tikv/snapshot.go +++ b/store/tikv/snapshot.go @@ -323,11 +323,6 @@ func (s *tikvSnapshot) batchGetSingleRegion(bo *Backoffer, batch batchKeys, coll // Get gets the value for key k from snapshot. func (s *tikvSnapshot) Get(ctx context.Context, k kv.Key) ([]byte, error) { - if span := opentracing.SpanFromContext(ctx); span != nil && span.Tracer() != nil { - span1 := span.Tracer().StartSpan("tikvSnapshot.get", opentracing.ChildOf(span.Context())) - defer span1.Finish() - ctx = opentracing.ContextWithSpan(ctx, span1) - } defer func(start time.Time) { tikvTxnCmdHistogramWithGet.Observe(time.Since(start).Seconds()) @@ -335,7 +330,7 @@ func (s *tikvSnapshot) Get(ctx context.Context, k kv.Key) ([]byte, error) { ctx = context.WithValue(ctx, txnStartKey, s.version.Ver) bo := NewBackofferWithVars(ctx, getMaxBackoff, s.vars) - val, err := s.get(bo, k) + val, err := s.get(ctx, bo, k) s.recordBackoffInfo(bo) if err != nil { return nil, errors.Trace(err) @@ -351,7 +346,7 @@ func (s *tikvSnapshot) Get(ctx context.Context, k kv.Key) ([]byte, error) { return val, nil } -func (s *tikvSnapshot) get(bo *Backoffer, k kv.Key) ([]byte, error) { +func (s *tikvSnapshot) get(ctx context.Context, bo *Backoffer, k kv.Key) ([]byte, error) { // Check the cached values first. s.mu.RLock() if s.mu.cached != nil { @@ -361,7 +356,11 @@ func (s *tikvSnapshot) get(bo *Backoffer, k kv.Key) ([]byte, error) { } } s.mu.RUnlock() - + if span := opentracing.SpanFromContext(ctx); span != nil && span.Tracer() != nil { + span1 := span.Tracer().StartSpan("tikvSnapshot.get", opentracing.ChildOf(span.Context())) + defer span1.Finish() + opentracing.ContextWithSpan(ctx, span1) + } failpoint.Inject("snapshot-get-cache-fail", func(_ failpoint.Value) { if bo.ctx.Value("TestSnapshotCache") != nil { panic("cache miss") diff --git a/util/execdetails/execdetails.go b/util/execdetails/execdetails.go index 3da02d56185a2..5b7c28e2d8909 100644 --- a/util/execdetails/execdetails.go +++ b/util/execdetails/execdetails.go @@ -430,6 +430,8 @@ const ( TpJoinRuntimeStats // TpSelectResultRuntimeStats is the tp for SelectResultRuntimeStats. TpSelectResultRuntimeStats + // TpInsertRuntimeStat is the tp for InsertRuntimeStat + TpInsertRuntimeStat ) // RuntimeStats is used to express the executor runtime information. @@ -548,6 +550,11 @@ func (e *BasicRuntimeStats) String() string { return fmt.Sprintf("time:%v, loops:%d", time.Duration(e.consume), e.loop) } +// GetTime get the int64 total time +func (e *BasicRuntimeStats) GetTime() int64 { + return e.consume +} + // RuntimeStatsColl collects executors's execution info. type RuntimeStatsColl struct { mu sync.Mutex From 639d4596bc32571376390095bfd6556d7f61866c Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Thu, 22 Oct 2020 14:52:24 +0800 Subject: [PATCH 055/229] 2pc: fix backoffer and cancel in batchExecutor (#20542) (#20548) Signed-off-by: ti-srebot --- store/tikv/2pc.go | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/store/tikv/2pc.go b/store/tikv/2pc.go index c4d3d6d24464d..9e7e2467ca755 100644 --- a/store/tikv/2pc.go +++ b/store/tikv/2pc.go @@ -1723,10 +1723,9 @@ func (batchExe *batchExecutor) process(batches []batchMutations) error { } // For prewrite, stop sending other requests after receiving first error. - backoffer := batchExe.backoffer var cancel context.CancelFunc if _, ok := batchExe.action.(actionPrewrite); ok { - backoffer, cancel = batchExe.backoffer.Fork() + batchExe.backoffer, cancel = batchExe.backoffer.Fork() defer cancel() } // concurrently do the work for each batch. @@ -1736,14 +1735,14 @@ func (batchExe *batchExecutor) process(batches []batchMutations) error { // check results for i := 0; i < len(batches); i++ { if e := <-ch; e != nil { - logutil.Logger(backoffer.ctx).Debug("2PC doActionOnBatch failed", + logutil.Logger(batchExe.backoffer.ctx).Debug("2PC doActionOnBatch failed", zap.Uint64("conn", batchExe.committer.connID), zap.Stringer("action type", batchExe.action), zap.Error(e), zap.Uint64("txnStartTS", batchExe.committer.startTS)) // Cancel other requests and return the first error. if cancel != nil { - logutil.Logger(backoffer.ctx).Debug("2PC doActionOnBatch to cancel other actions", + logutil.Logger(batchExe.backoffer.ctx).Debug("2PC doActionOnBatch to cancel other actions", zap.Uint64("conn", batchExe.committer.connID), zap.Stringer("action type", batchExe.action), zap.Uint64("txnStartTS", batchExe.committer.startTS)) From d1454b118c27385ace0133f33737540e616ab2d9 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Thu, 22 Oct 2020 16:20:24 +0800 Subject: [PATCH 056/229] executor: tiny optimize slow_query performance and add related runtime stats (#20200) (#20420) Signed-off-by: ti-srebot Signed-off-by: crazycs520 --- executor/executor_pkg_test.go | 17 +++ executor/executor_test.go | 31 +++++ executor/memtable_reader.go | 11 ++ executor/slow_query.go | 232 +++++++++++++++++++++++++------- util/execdetails/execdetails.go | 2 + util/memory/tracker.go | 5 + 6 files changed, 246 insertions(+), 52 deletions(-) mode change 100644 => 100755 executor/slow_query.go diff --git a/executor/executor_pkg_test.go b/executor/executor_pkg_test.go index 8b8ad172e3ede..3616d95961dbc 100644 --- a/executor/executor_pkg_test.go +++ b/executor/executor_pkg_test.go @@ -16,6 +16,7 @@ package executor import ( "context" "crypto/tls" + "time" . "github.com/pingcap/check" "github.com/pingcap/failpoint" @@ -391,3 +392,19 @@ func (s *testExecSerialSuite) TestSortSpillDisk(c *C) { err = exec.Close() c.Assert(err, IsNil) } + +func (s *pkgTestSuite) TestSlowQueryRuntimeStats(c *C) { + stats := &slowQueryRuntimeStats{ + totalFileNum: 2, + readFileNum: 2, + readFile: time.Second, + initialize: time.Millisecond, + readFileSize: 1024 * 1024 * 1024, + parseLog: int64(time.Millisecond * 100), + concurrent: 15, + } + c.Assert(stats.String(), Equals, "initialize: 1ms, read_file: 1s, parse_log: {time:100ms, concurrency:15}, total_file: 2, read_file: 2, read_size: 1024 MB") + c.Assert(stats.String(), Equals, stats.Clone().String()) + stats.Merge(stats.Clone()) + c.Assert(stats.String(), Equals, "initialize: 2ms, read_file: 2s, parse_log: {time:200ms, concurrency:15}, total_file: 4, read_file: 4, read_size: 2 GB") +} diff --git a/executor/executor_test.go b/executor/executor_test.go index d55ff0428014a..fbf96891cfd03 100644 --- a/executor/executor_test.go +++ b/executor/executor_test.go @@ -17,6 +17,7 @@ import ( "context" "flag" "fmt" + "io/ioutil" "math" "net" "os" @@ -5967,6 +5968,36 @@ func (s *testClusterTableSuite) TestSlowQueryWithoutSlowLog(c *C) { tk.MustQuery("select query from information_schema.slow_query where time > '2020-09-15 12:16:39' and time < now()").Check(testkit.Rows()) } +func (s *testClusterTableSuite) TestSlowQuery2(c *C) { + tk := testkit.NewTestKit(c, s.store) + + f, err := ioutil.TempFile("", "tidb-slow-*.log") + c.Assert(err, IsNil) + f.WriteString(` +# Time: 2020-10-13T20:08:13.970563+08:00 +select * from t; +# Time: 2020-10-16T20:08:13.970563+08:00 +select * from t; +`) + f.Close() + + executor.ParseSlowLogBatchSize = 1 + originCfg := config.GetGlobalConfig() + newCfg := *originCfg + newCfg.Log.SlowQueryFile = f.Name() + config.StoreGlobalConfig(&newCfg) + defer func() { + executor.ParseSlowLogBatchSize = 64 + config.StoreGlobalConfig(originCfg) + os.Remove(newCfg.Log.SlowQueryFile) + }() + err = logutil.InitLogger(newCfg.Log.ToLogConfig()) + c.Assert(err, IsNil) + + tk.MustQuery("select count(*) from `information_schema`.`slow_query` where time > '2020-10-16 20:08:13' and time < '2020-10-16 21:08:13'").Check(testkit.Rows("1")) + tk.MustQuery("select count(*) from `information_schema`.`slow_query` where time > '2019-10-13 20:08:13' and time < '2020-10-16 21:08:13'").Check(testkit.Rows("2")) +} + func (s *testSplitTable) TestKillTableReader(c *C) { var retry = "github.com/pingcap/tidb/store/tikv/mockRetrySendReqToRegion" defer func() { diff --git a/executor/memtable_reader.go b/executor/memtable_reader.go index 1f5a88e516982..bf17e3520dbb6 100644 --- a/executor/memtable_reader.go +++ b/executor/memtable_reader.go @@ -40,6 +40,7 @@ import ( "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util" "github.com/pingcap/tidb/util/chunk" + "github.com/pingcap/tidb/util/execdetails" "github.com/pingcap/tidb/util/pdapi" "github.com/pingcap/tidb/util/set" "go.uber.org/zap" @@ -53,9 +54,12 @@ type dummyCloser struct{} func (dummyCloser) close() error { return nil } +func (dummyCloser) getRuntimeStats() execdetails.RuntimeStats { return nil } + type memTableRetriever interface { retrieve(ctx context.Context, sctx sessionctx.Context) ([][]types.Datum, error) close() error + getRuntimeStats() execdetails.RuntimeStats } // MemTableReaderExec executes memTable information retrieving from the MemTable components @@ -127,6 +131,9 @@ func (e *MemTableReaderExec) Next(ctx context.Context, req *chunk.Chunk) error { // Close implements the Executor Close interface. func (e *MemTableReaderExec) Close() error { + if stats := e.retriever.getRuntimeStats(); stats != nil && e.runtimeStats != nil { + e.ctx.GetSessionVars().StmtCtx.RuntimeStatsColl.RegisterStats(e.id, stats) + } return e.retriever.close() } @@ -661,3 +668,7 @@ func (e *clusterLogRetriever) close() error { } return nil } + +func (e *clusterLogRetriever) getRuntimeStats() execdetails.RuntimeStats { + return nil +} diff --git a/executor/slow_query.go b/executor/slow_query.go old mode 100644 new mode 100755 index d70bbd77c225e..bd2aae5eeff22 --- a/executor/slow_query.go +++ b/executor/slow_query.go @@ -18,12 +18,14 @@ import ( "context" "fmt" "io" + "io/ioutil" "os" "path/filepath" "sort" "strconv" "strings" "sync" + "sync/atomic" "time" "github.com/pingcap/errors" @@ -41,10 +43,14 @@ import ( "github.com/pingcap/tidb/util/execdetails" "github.com/pingcap/tidb/util/hack" "github.com/pingcap/tidb/util/logutil" + "github.com/pingcap/tidb/util/memory" "github.com/pingcap/tidb/util/plancodec" "go.uber.org/zap" ) +// ParseSlowLogBatchSize is the batch size of slow-log lines for a worker to parse, exported for testing. +var ParseSlowLogBatchSize = 64 + //slowQueryRetriever is used to read slow log data. type slowQueryRetriever struct { table *model.TableInfo @@ -57,6 +63,7 @@ type slowQueryRetriever struct { checker *slowLogChecker parsedSlowLogCh chan parsedSlowLog + stats *slowQueryRuntimeStats } func (e *slowQueryRetriever) retrieve(ctx context.Context, sctx sessionctx.Context) ([][]types.Datum, error) { @@ -98,6 +105,7 @@ func (e *slowQueryRetriever) initialize(sctx sessionctx.Context) error { hasProcessPriv: hasProcessPriv, user: sctx.GetSessionVars().User, } + e.stats = &slowQueryRuntimeStats{} if e.extractor != nil { e.checker.enableTimeCheck = e.extractor.Enable e.checker.startTime = types.NewTime(types.FromGoTime(e.extractor.StartTime), mysql.TypeDatetime, types.MaxFsp) @@ -123,14 +131,31 @@ type parsedSlowLog struct { err error } +func (e *slowQueryRetriever) getNextFile() *os.File { + if e.fileIdx >= len(e.files) { + return nil + } + file := e.files[e.fileIdx].file + e.fileIdx++ + if e.stats != nil { + stat, err := file.Stat() + if err == nil { + // ignore the err will be ok. + e.stats.readFileSize += stat.Size() + e.stats.readFileNum++ + } + } + return file +} + func (e *slowQueryRetriever) parseDataForSlowLog(ctx context.Context, sctx sessionctx.Context) { - if len(e.files) == 0 { + file := e.getNextFile() + if file == nil { close(e.parsedSlowLogCh) return } - reader := bufio.NewReader(e.files[0].file) - e.parseSlowLog(ctx, sctx, reader, 64) - close(e.parsedSlowLogCh) + reader := bufio.NewReader(file) + e.parseSlowLog(ctx, sctx, reader, ParseSlowLogBatchSize) } func (e *slowQueryRetriever) dataForSlowLog(ctx context.Context) ([][]types.Datum, bool, error) { @@ -228,13 +253,13 @@ func (e *slowQueryRetriever) getBatchLog(reader *bufio.Reader, offset *offset, n lineByte, err := getOneLine(reader) if err != nil { if err == io.EOF { - e.fileIdx++ e.fileLine = 0 - if e.fileIdx >= len(e.files) { + file := e.getNextFile() + if file == nil { return log, nil } offset.length = len(log) - reader.Reset(e.files[e.fileIdx].file) + reader.Reset(file) continue } return log, err @@ -253,34 +278,38 @@ func (e *slowQueryRetriever) getBatchLog(reader *bufio.Reader, offset *offset, n } func (e *slowQueryRetriever) parseSlowLog(ctx context.Context, sctx sessionctx.Context, reader *bufio.Reader, logNum int) { + defer close(e.parsedSlowLogCh) var wg sync.WaitGroup offset := offset{offset: 0, length: 0} // To limit the num of go routine - ch := make(chan int, sctx.GetSessionVars().Concurrency.DistSQLScanConcurrency) + concurrent := sctx.GetSessionVars().Concurrency.DistSQLScanConcurrency + ch := make(chan int, concurrent) + if e.stats != nil { + e.stats.concurrent = concurrent + } defer close(ch) for { + startTime := time.Now() log, err := e.getBatchLog(reader, &offset, logNum) if err != nil { e.parsedSlowLogCh <- parsedSlowLog{nil, err} break } + if len(log) == 0 { + break + } + if e.stats != nil { + e.stats.readFile += time.Since(startTime) + } start := offset wg.Add(1) ch <- 1 go func() { defer wg.Done() result, err := e.parseLog(sctx, log, start) - if err != nil { - e.parsedSlowLogCh <- parsedSlowLog{nil, err} - } else { - e.parsedSlowLogCh <- parsedSlowLog{result, err} - } + e.parsedSlowLogCh <- parsedSlowLog{result, err} <-ch }() - // Read the next file, offset = 0 - if e.fileIdx >= len(e.files) { - break - } offset.offset = e.fileLine offset.length = 0 select { @@ -303,10 +332,14 @@ func getLineIndex(offset offset, index int) int { } func (e *slowQueryRetriever) parseLog(ctx sessionctx.Context, log []string, offset offset) (data [][]types.Datum, err error) { + start := time.Now() defer func() { if r := recover(); r != nil { err = fmt.Errorf("%s", r) } + if e.stats != nil { + atomic.AddInt64(&e.stats.parseLog, int64(time.Since(start))) + } }() failpoint.Inject("errorMockParseSlowLogPanic", func(val failpoint.Value) { if val.(bool) { @@ -696,7 +729,16 @@ type logFile struct { // getAllFiles is used to get all slow-log needed to parse, it is exported for test. func (e *slowQueryRetriever) getAllFiles(sctx sessionctx.Context, logFilePath string) ([]logFile, error) { + totalFileNum := 0 + if e.stats != nil { + startTime := time.Now() + defer func() { + e.stats.initialize = time.Since(startTime) + e.stats.totalFileNum = totalFileNum + }() + } if e.extractor == nil || !e.extractor.Enable { + totalFileNum = 1 file, err := os.Open(logFilePath) if err != nil { if os.IsNotExist(err) { @@ -717,10 +759,11 @@ func (e *slowQueryRetriever) getAllFiles(sctx sessionctx.Context, logFilePath st } return nil } - err := filepath.Walk(logDir, func(path string, info os.FileInfo, err error) error { - if err != nil { - return handleErr(err) - } + files, err := ioutil.ReadDir(logDir) + if err != nil { + return nil, err + } + walkFn := func(path string, info os.FileInfo) error { if info.IsDir() { return nil } @@ -728,6 +771,7 @@ func (e *slowQueryRetriever) getAllFiles(sctx sessionctx.Context, logFilePath st if !strings.HasPrefix(path, prefix) { return nil } + totalFileNum++ file, err := os.OpenFile(path, os.O_RDONLY, os.ModePerm) if err != nil { return handleErr(err) @@ -768,7 +812,13 @@ func (e *slowQueryRetriever) getAllFiles(sctx sessionctx.Context, logFilePath st }) skip = true return nil - }) + } + for _, file := range files { + err := walkFn(filepath.Join(logDir, file.Name()), file) + if err != nil { + return nil, err + } + } // Sort by start time sort.Slice(logFiles, func(i, j int) bool { return logFiles[i].start.Before(logFiles[j].start) @@ -800,55 +850,133 @@ func (e *slowQueryRetriever) getFileStartTime(file *os.File) (time.Time, error) } return t, errors.Errorf("malform slow query file %v", file.Name()) } + +func (e *slowQueryRetriever) getRuntimeStats() execdetails.RuntimeStats { + return e.stats +} + +type slowQueryRuntimeStats struct { + totalFileNum int + readFileNum int + readFile time.Duration + initialize time.Duration + readFileSize int64 + parseLog int64 + concurrent int +} + +// String implements the RuntimeStats interface. +func (s *slowQueryRuntimeStats) String() string { + return fmt.Sprintf("initialize: %s, read_file: %s, parse_log: {time:%s, concurrency:%v}, total_file: %v, read_file: %v, read_size: %s", + s.initialize, s.readFile, time.Duration(s.parseLog), s.concurrent, + s.totalFileNum, s.readFileNum, memory.BytesToString(s.readFileSize)) +} + +// Merge implements the RuntimeStats interface. +func (s *slowQueryRuntimeStats) Merge(rs execdetails.RuntimeStats) { + tmp, ok := rs.(*slowQueryRuntimeStats) + if !ok { + return + } + s.totalFileNum += tmp.totalFileNum + s.readFileNum += tmp.readFileNum + s.readFile += tmp.readFile + s.initialize += tmp.initialize + s.readFileSize += tmp.readFileSize + s.parseLog += tmp.parseLog +} + +// Clone implements the RuntimeStats interface. +func (s *slowQueryRuntimeStats) Clone() execdetails.RuntimeStats { + newRs := *s + return &newRs +} + +// Tp implements the RuntimeStats interface. +func (s *slowQueryRuntimeStats) Tp() int { + return execdetails.TpSlowQueryRuntimeStat +} + func (e *slowQueryRetriever) getFileEndTime(file *os.File) (time.Time, error) { var t time.Time + var tried int stat, err := file.Stat() if err != nil { return t, err } - fileSize := stat.Size() - cursor := int64(0) - line := make([]byte, 0, 64) + endCursor := stat.Size() maxLineNum := 128 - tryGetTime := func(line []byte) string { - for i, j := 0, len(line)-1; i < j; i, j = i+1, j-1 { - line[i], line[j] = line[j], line[i] + for { + lines, readBytes, err := readLastLines(file, endCursor) + if err != nil { + return t, err + } + // read out the file + if readBytes == 0 { + break + } + endCursor -= int64(readBytes) + for i := len(lines) - 1; i >= 0; i-- { + if strings.HasPrefix(lines[i], variable.SlowLogStartPrefixStr) { + return ParseTime(lines[i][len(variable.SlowLogStartPrefixStr):]) + } } - lineStr := string(line) - lineStr = strings.TrimSpace(lineStr) - if strings.HasPrefix(lineStr, variable.SlowLogStartPrefixStr) { - return lineStr[len(variable.SlowLogStartPrefixStr):] + tried += len(lines) + if tried >= maxLineNum { + break } - return "" } + return t, errors.Errorf("invalid slow query file %v", file.Name()) +} + +// Read lines from the end of a file +// endCursor initial value should be the filesize +func readLastLines(file *os.File, endCursor int64) ([]string, int, error) { + var lines []byte + var firstNonNewlinePos int + var cursor = endCursor for { - cursor -= 1 - _, err := file.Seek(cursor, io.SeekEnd) - if err != nil { - return t, err + // stop if we are at the beginning + // check it in the start to avoid read beyond the size + if cursor <= 0 { + break + } + + var size int64 = 4096 + if cursor < size { + size = cursor } + cursor -= size - char := make([]byte, 1) - _, err = file.Read(char) + _, err := file.Seek(cursor, io.SeekStart) if err != nil { - return t, err + return nil, 0, err } - // If find a line. - if cursor != -1 && (char[0] == '\n' || char[0] == '\r') { - if timeStr := tryGetTime(line); len(timeStr) > 0 { - return ParseTime(timeStr) - } - line = line[:0] - maxLineNum -= 1 + chars := make([]byte, size) + _, err = file.Read(chars) + if err != nil { + return nil, 0, err } - line = append(line, char[0]) - if cursor == -fileSize || maxLineNum <= 0 { - if timeStr := tryGetTime(line); len(timeStr) > 0 { - return ParseTime(timeStr) + lines = append(chars, lines...) + + // find first '\n' or '\r' + for i := 0; i < len(chars); i++ { + // reach the line end + // the first newline may be in the line end at the first round + if i >= len(lines)-1 { + break } - return t, errors.Errorf("malform slow query file %v", file.Name()) + if (chars[i] == 10 || chars[i] == 13) && chars[i+1] != 10 && chars[i+1] != 13 { + firstNonNewlinePos = i + 1 + break + } + } + if firstNonNewlinePos > 0 { + break } } + finalStr := string(lines[firstNonNewlinePos:]) + return strings.Split(strings.ReplaceAll(finalStr, "\r\n", "\n"), "\n"), len(finalStr), nil } func (e *slowQueryRetriever) initializeAsyncParsing(ctx context.Context, sctx sessionctx.Context) { diff --git a/util/execdetails/execdetails.go b/util/execdetails/execdetails.go index 5b7c28e2d8909..49c66aed1f1f1 100644 --- a/util/execdetails/execdetails.go +++ b/util/execdetails/execdetails.go @@ -430,6 +430,8 @@ const ( TpJoinRuntimeStats // TpSelectResultRuntimeStats is the tp for SelectResultRuntimeStats. TpSelectResultRuntimeStats + // TpSlowQueryRuntimeStat is the tp for TpSlowQueryRuntimeStat + TpSlowQueryRuntimeStat // TpInsertRuntimeStat is the tp for InsertRuntimeStat TpInsertRuntimeStat ) diff --git a/util/memory/tracker.go b/util/memory/tracker.go index f44ea4af8b52b..cf639da4f5f8c 100644 --- a/util/memory/tracker.go +++ b/util/memory/tracker.go @@ -297,6 +297,11 @@ func (t *Tracker) toString(indent string, buffer *bytes.Buffer) { // BytesToString converts the memory consumption to a readable string. func (t *Tracker) BytesToString(numBytes int64) string { + return BytesToString(numBytes) +} + +// BytesToString converts the memory consumption to a readable string. +func BytesToString(numBytes int64) string { GB := float64(numBytes) / float64(1<<30) if GB > 1 { return fmt.Sprintf("%v GB", GB) From a132f2be053472182f5263c8f8459f67afdcf19d Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Thu, 22 Oct 2020 18:06:10 +0800 Subject: [PATCH 057/229] ddl: fix corrupted default value for bit type column (#18036) (#20340) --- ddl/column.go | 8 ++++++-- ddl/db_integration_test.go | 12 ++++++++++++ ddl/ddl_api.go | 19 ++++++++++++------- go.mod | 2 +- go.sum | 2 ++ planner/core/plan_to_pb.go | 2 +- statistics/handle/ddl.go | 2 +- table/column.go | 8 +------- table/tables/tables.go | 2 +- util/admin/admin.go | 2 +- 10 files changed, 38 insertions(+), 21 deletions(-) diff --git a/ddl/column.go b/ddl/column.go index f7f1675b4ec1e..568812d9bfc13 100644 --- a/ddl/column.go +++ b/ddl/column.go @@ -246,14 +246,18 @@ func onDropColumn(t *meta.Meta, job *model.Job) (ver int64, _ error) { // When the dropping column has not-null flag and it hasn't the default value, we can backfill the column value like "add column". // NOTE: If the state of StateWriteOnly can be rollbacked, we'd better reconsider the original default value. // And we need consider the column without not-null flag. - if colInfo.OriginDefaultValue == nil && mysql.HasNotNullFlag(colInfo.Flag) { + if colInfo.GetOriginDefaultValue() == nil && mysql.HasNotNullFlag(colInfo.Flag) { // If the column is timestamp default current_timestamp, and DDL owner is new version TiDB that set column.Version to 1, // then old TiDB update record in the column write only stage will uses the wrong default value of the dropping column. // Because new version of the column default value is UTC time, but old version TiDB will think the default value is the time in system timezone. // But currently will be ok, because we can't cancel the drop column job when the job is running, // so the column will be dropped succeed and client will never see the wrong default value of the dropped column. // More info about this problem, see PR#9115. - colInfo.OriginDefaultValue, err = generateOriginDefaultValue(colInfo) + oldDVal, err := generateOriginDefaultValue(colInfo) + if err != nil { + return ver, errors.Trace(err) + } + err = colInfo.SetOriginDefaultValue(oldDVal) if err != nil { return ver, errors.Trace(err) } diff --git a/ddl/db_integration_test.go b/ddl/db_integration_test.go index 3c9a97d004a0b..6f8d7f9056ea7 100644 --- a/ddl/db_integration_test.go +++ b/ddl/db_integration_test.go @@ -1012,6 +1012,18 @@ func (s *testIntegrationSuite5) TestBitDefaultValue(c *C) { tk.MustQuery("select c from t_bit").Check(testkit.Rows("\x19\xb9")) tk.MustExec("update t_bit set c = b'11100000000111'") tk.MustQuery("select c from t_bit").Check(testkit.Rows("\x38\x07")) + tk.MustExec("drop table t_bit") + + tk.MustExec("create table t_bit (a int)") + tk.MustExec("insert into t_bit value (1)") + tk.MustExec("alter table t_bit add column b bit(1) default b'0';") + tk.MustExec("alter table t_bit modify column b bit(1) default b'1';") + tk.MustQuery("select b from t_bit").Check(testkit.Rows("\x00")) + tk.MustExec("drop table t_bit") + + tk.MustExec("create table t_bit (a bit);") + tk.MustExec("insert into t_bit values (null);") + tk.MustQuery("select count(*) from t_bit where a is null;").Check(testkit.Rows("1")) tk.MustExec(`create table testalltypes1 ( field_1 bit default 1, diff --git a/ddl/ddl_api.go b/ddl/ddl_api.go index 2c0cdd2411f5b..d60241d186029 100644 --- a/ddl/ddl_api.go +++ b/ddl/ddl_api.go @@ -2426,7 +2426,11 @@ func (d *ddl) AddColumn(ctx sessionctx.Context, ti ast.Ident, spec *ast.AlterTab return errors.Trace(err) } - col.OriginDefaultValue, err = generateOriginDefaultValue(col.ToInfo()) + originDefVal, err := generateOriginDefaultValue(col.ToInfo()) + if err != nil { + return errors.Trace(err) + } + err = col.SetOriginDefaultValue(originDefVal) if err != nil { return errors.Trace(err) } @@ -2970,12 +2974,13 @@ func (d *ddl) getModifiableColumnJob(ctx sessionctx.Context, ident ast.Ident, or // a new version TiDB builds the DDL job that doesn't be set the column's offset and state, // and the old version TiDB is the DDL owner, it doesn't get offset and state from the store. Then it will encounter errors. // So here we set offset and state to support the rolling upgrade. - Offset: col.Offset, - State: col.State, - OriginDefaultValue: col.OriginDefaultValue, - FieldType: *specNewColumn.Tp, - Name: newColName, - Version: col.Version, + Offset: col.Offset, + State: col.State, + OriginDefaultValue: col.OriginDefaultValue, + OriginDefaultValueBit: col.OriginDefaultValueBit, + FieldType: *specNewColumn.Tp, + Name: newColName, + Version: col.Version, }) var chs, coll string diff --git a/go.mod b/go.mod index 5e4b5bfafd2e4..b4fcc84b217e2 100644 --- a/go.mod +++ b/go.mod @@ -34,7 +34,7 @@ require ( github.com/pingcap/goleveldb v0.0.0-20191226122134-f82aafb29989 github.com/pingcap/kvproto v0.0.0-20200907074027-32a3a0accf7d github.com/pingcap/log v0.0.0-20200828042413-fce0951f1463 - github.com/pingcap/parser v0.0.0-20200921063432-e220cfcfd026 + github.com/pingcap/parser v0.0.0-20201022083903-fbe80b0c40bb github.com/pingcap/sysutil v0.0.0-20200715082929-4c47bcac246a github.com/pingcap/tidb-tools v4.0.6-0.20200828085514-03575b185007+incompatible github.com/pingcap/tipb v0.0.0-20200618092958-4fad48b4c8c3 diff --git a/go.sum b/go.sum index 1cf4fa7132779..b5eb6d10adf32 100644 --- a/go.sum +++ b/go.sum @@ -457,6 +457,8 @@ github.com/pingcap/parser v0.0.0-20200803072748-fdf66528323d/go.mod h1:vQdbJqobJ github.com/pingcap/parser v0.0.0-20200901062802-475ea5e2e0a7/go.mod h1:vQdbJqobJAgFyiRNNtXahpMoGWwPEuWciVEK5A20NS0= github.com/pingcap/parser v0.0.0-20200921063432-e220cfcfd026 h1:i+r4P7hb4KpW74nPn+P/hqtsW3fu4U9A4JGAYKWMvtw= github.com/pingcap/parser v0.0.0-20200921063432-e220cfcfd026/go.mod h1:dMMvhqeowLnAsDWspyalgxXoRUnP09cZ7wAnpt2e/S8= +github.com/pingcap/parser v0.0.0-20201022083903-fbe80b0c40bb h1:yT+Y2yiuLOXdVlERMA7vPQ8Shwk920S9LpuS/cFj6uo= +github.com/pingcap/parser v0.0.0-20201022083903-fbe80b0c40bb/go.mod h1:dMMvhqeowLnAsDWspyalgxXoRUnP09cZ7wAnpt2e/S8= github.com/pingcap/pd/v4 v4.0.0-rc.1.0.20200422143320-428acd53eba2/go.mod h1:s+utZtXDznOiL24VK0qGmtoHjjXNsscJx3m1n8cC56s= github.com/pingcap/pd/v4 v4.0.0-rc.2.0.20200520083007-2c251bd8f181/go.mod h1:q4HTx/bA8aKBa4S7L+SQKHvjRPXCRV0tA0yRw0qkZSA= github.com/pingcap/pd/v4 v4.0.5-0.20200817114353-e465cafe8a91/go.mod h1:m9OEkKoPMQWjrbJ9pqjjeCqzqxraZrPEuWa1OI6Wcek= diff --git a/planner/core/plan_to_pb.go b/planner/core/plan_to_pb.go index 8fb84f203adbc..c0450055f3724 100644 --- a/planner/core/plan_to_pb.go +++ b/planner/core/plan_to_pb.go @@ -279,7 +279,7 @@ func SetPBColumnsDefaultValue(ctx sessionctx.Context, pbColumns []*tipb.ColumnIn if c.IsGenerated() && !c.GeneratedStored { pbColumns[i].DefaultVal = []byte{codec.NilFlag} } - if c.OriginDefaultValue == nil { + if c.GetOriginDefaultValue() == nil { continue } diff --git a/statistics/handle/ddl.go b/statistics/handle/ddl.go index a974b857bb0e0..127608edb7bb8 100644 --- a/statistics/handle/ddl.go +++ b/statistics/handle/ddl.go @@ -141,7 +141,7 @@ func (h *Handle) insertColStats2KV(physicalID int64, colInfo *model.ColumnInfo) return } count := req.GetRow(0).GetInt64(0) - value := types.NewDatum(colInfo.OriginDefaultValue) + value := types.NewDatum(colInfo.GetOriginDefaultValue()) value, err = value.ConvertTo(h.mu.ctx.GetSessionVars().StmtCtx, &colInfo.FieldType) if err != nil { return diff --git a/table/column.go b/table/column.go index 890293e23660a..dd90400885877 100644 --- a/table/column.go +++ b/table/column.go @@ -377,13 +377,7 @@ func CheckNotNull(cols []*Column, row []types.Datum) error { // GetColOriginDefaultValue gets default value of the column from original default value. func GetColOriginDefaultValue(ctx sessionctx.Context, col *model.ColumnInfo) (types.Datum, error) { - // If the column type is BIT, both `OriginDefaultValue` and `DefaultValue` of ColumnInfo are corrupted, because - // after JSON marshaling and unmarshaling against the field with type `interface{}`, the content with actual type `[]byte` is changed. - // We need `DefaultValueBit` to restore OriginDefaultValue before reading it. - if col.Tp == mysql.TypeBit && col.DefaultValueBit != nil && col.OriginDefaultValue != nil { - col.OriginDefaultValue = col.DefaultValueBit - } - return getColDefaultValue(ctx, col, col.OriginDefaultValue) + return getColDefaultValue(ctx, col, col.GetOriginDefaultValue()) } // GetColDefaultValue gets default value of the column. diff --git a/table/tables/tables.go b/table/tables/tables.go index 7b1563fa3a879..2fce193d438ff 100644 --- a/table/tables/tables.go +++ b/table/tables/tables.go @@ -1006,7 +1006,7 @@ func (t *TableCommon) IterRecords(ctx sessionctx.Context, startKey kv.Key, cols // The defaultVals is used to avoid calculating the default value multiple times. func GetColDefaultValue(ctx sessionctx.Context, col *table.Column, defaultVals []types.Datum) ( colVal types.Datum, err error) { - if col.OriginDefaultValue == nil && mysql.HasNotNullFlag(col.Flag) { + if col.GetOriginDefaultValue() == nil && mysql.HasNotNullFlag(col.Flag) { return colVal, errors.New("Miss column") } if col.State != model.StatePublic { diff --git a/util/admin/admin.go b/util/admin/admin.go index cdee332b84c09..a52c0994abe7d 100644 --- a/util/admin/admin.go +++ b/util/admin/admin.go @@ -354,7 +354,7 @@ func CheckRecordAndIndex(sessCtx sessionctx.Context, txn kv.Transaction, t table for i, val := range vals1 { col := cols[i] if val.IsNull() { - if mysql.HasNotNullFlag(col.Flag) && col.ToInfo().OriginDefaultValue == nil { + if mysql.HasNotNullFlag(col.Flag) && col.ToInfo().GetOriginDefaultValue() == nil { return false, errors.Errorf("Column %v define as not null, but can't find the value where handle is %v", col.Name, h1) } // NULL value is regarded as its default value. From fdd7a42c3504089ced02c9b407b4e7c96a9f35e6 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Thu, 22 Oct 2020 23:08:25 +0800 Subject: [PATCH 058/229] *: add executor runtime info for `explain for connection` statement (#19183) (#20384) Signed-off-by: ti-srebot Signed-off-by: crazycs520 --- executor/explainfor_test.go | 36 ++++++++++++++++++++-- executor/prepared_test.go | 4 ++- planner/core/common_plans.go | 58 ++++++++++++++++++++++++------------ planner/core/encode.go | 2 +- planner/core/planbuilder.go | 23 ++++++++------ session/session.go | 1 + util/processinfo.go | 26 ++++++++-------- 7 files changed, 106 insertions(+), 44 deletions(-) diff --git a/executor/explainfor_test.go b/executor/explainfor_test.go index f31b6456cbb33..337aafe459cc3 100644 --- a/executor/explainfor_test.go +++ b/executor/explainfor_test.go @@ -14,6 +14,7 @@ package executor_test import ( + "bytes" "crypto/tls" "fmt" "math" @@ -25,6 +26,7 @@ import ( "github.com/pingcap/tidb/planner/core" "github.com/pingcap/tidb/session" "github.com/pingcap/tidb/util" + "github.com/pingcap/tidb/util/israce" "github.com/pingcap/tidb/util/kvcache" "github.com/pingcap/tidb/util/testkit" ) @@ -60,7 +62,7 @@ func (msm *mockSessionManager1) Kill(cid uint64, query bool) { func (msm *mockSessionManager1) UpdateTLSConfig(cfg *tls.Config) { } -func (s *testSuite) TestExplainFor(c *C) { +func (s *testSuite9) TestExplainFor(c *C) { tkRoot := testkit.NewTestKitWithInit(c, s.store) tkUser := testkit.NewTestKitWithInit(c, s.store) tkRoot.MustExec("create table t1(c1 int, c2 int)") @@ -69,6 +71,7 @@ func (s *testSuite) TestExplainFor(c *C) { tkRoot.Se.Auth(&auth.UserIdentity{Username: "root", Hostname: "localhost", CurrentUser: true, AuthUsername: "root", AuthHostname: "%"}, nil, []byte("012345678901234567890")) tkUser.Se.Auth(&auth.UserIdentity{Username: "tu", Hostname: "localhost", CurrentUser: true, AuthUsername: "tu", AuthHostname: "%"}, nil, []byte("012345678901234567890")) + tkRoot.MustExec("set @@tidb_enable_collect_execution_info=0;") tkRoot.MustQuery("select * from t1;") tkRootProcess := tkRoot.Se.ShowProcess() ps := []*util.ProcessInfo{tkRootProcess} @@ -78,6 +81,30 @@ func (s *testSuite) TestExplainFor(c *C) { "TableReader_5 10000.00 root data:TableFullScan_4", "└─TableFullScan_4 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo", )) + tkRoot.MustExec("set @@tidb_enable_collect_execution_info=1;") + tkRoot.MustQuery("select * from t1;") + tkRootProcess = tkRoot.Se.ShowProcess() + ps = []*util.ProcessInfo{tkRootProcess} + tkRoot.Se.SetSessionManager(&mockSessionManager1{PS: ps}) + tkUser.Se.SetSessionManager(&mockSessionManager1{PS: ps}) + rows := tkRoot.MustQuery(fmt.Sprintf("explain for connection %d", tkRootProcess.ID)).Rows() + c.Assert(len(rows), Equals, 2) + c.Assert(len(rows[0]), Equals, 9) + buf := bytes.NewBuffer(nil) + for i, row := range rows { + if i > 0 { + buf.WriteString("\n") + } + for j, v := range row { + if j > 0 { + buf.WriteString(" ") + } + buf.WriteString(fmt.Sprintf("%v", v)) + } + } + c.Assert(buf.String(), Matches, ""+ + "TableReader_5 10000.00 0 root time:.*, loops:1, cop_task:.*num: 1, max:.*, proc_keys: 0, rpc_num: 1, rpc_time: .*data:TableFullScan_4 N/A N/A\n"+ + "└─TableFullScan_4 10000.00 0 cop.* table:t1 time:.*, loops:.*keep order:false, stats:pseudo N/A N/A") err := tkUser.ExecToErr(fmt.Sprintf("explain for connection %d", tkRootProcess.ID)) c.Check(core.ErrAccessDenied.Equal(err), IsTrue) err = tkUser.ExecToErr("explain for connection 42") @@ -89,9 +116,10 @@ func (s *testSuite) TestExplainFor(c *C) { tkRoot.MustExec(fmt.Sprintf("explain for connection %d", tkRootProcess.ID)) } -func (s *testSuite) TestIssue11124(c *C) { +func (s *testSuite9) TestIssue11124(c *C) { tk := testkit.NewTestKitWithInit(c, s.store) tk2 := testkit.NewTestKitWithInit(c, s.store) + tk.MustExec("set @@tidb_enable_collect_execution_info=0;") tk.MustExec("drop table if exists kankan1") tk.MustExec("drop table if exists kankan2") tk.MustExec("create table kankan1(id int, name text);") @@ -130,6 +158,9 @@ type testPrepareSerialSuite struct { } func (s *testPrepareSerialSuite) TestExplainForConnPlanCache(c *C) { + if israce.RaceEnabled { + c.Skip("skip race test") + } orgEnable := core.PreparedPlanCacheEnabled() defer func() { core.SetPreparedPlanCache(orgEnable) @@ -145,6 +176,7 @@ func (s *testPrepareSerialSuite) TestExplainForConnPlanCache(c *C) { tk2 := testkit.NewTestKitWithInit(c, s.store) tk1.MustExec("use test") + tk1.MustExec("set @@tidb_enable_collect_execution_info=0;") tk1.MustExec("drop table if exists t") tk1.MustExec("create table t(a int)") tk1.MustExec("prepare stmt from 'select * from t where a = ?'") diff --git a/executor/prepared_test.go b/executor/prepared_test.go index 4189c96fb7d37..aa67084d85641 100644 --- a/executor/prepared_test.go +++ b/executor/prepared_test.go @@ -66,7 +66,7 @@ func (s *testSuite1) TestIgnorePlanCache(c *C) { c.Assert(tk.Se.GetSessionVars().StmtCtx.UseCache, IsFalse) } -func (s *testSuite1) TestPrepareStmtAfterIsolationReadChange(c *C) { +func (s *testSuite9) TestPrepareStmtAfterIsolationReadChange(c *C) { tk := testkit.NewTestKitWithInit(c, s.store) tk.Se.Auth(&auth.UserIdentity{Username: "root", Hostname: "localhost", CurrentUser: true, AuthUsername: "root", AuthHostname: "%"}, nil, []byte("012345678901234567890")) @@ -87,6 +87,7 @@ func (s *testSuite1) TestPrepareStmtAfterIsolationReadChange(c *C) { } tk.MustExec("set @@session.tidb_isolation_read_engines='tikv'") + tk.MustExec("set @@tidb_enable_collect_execution_info=0;") tk.MustExec("prepare stmt from \"select * from t\"") tk.MustQuery("execute stmt") tkProcess := tk.Se.ShowProcess() @@ -182,6 +183,7 @@ func (s *testSuite9) TestPlanCacheOnPointGet(c *C) { // For point get tk.MustExec("drop table if exists t1") + tk.MustExec("set @@tidb_enable_collect_execution_info=0;") tk.MustExec("create table t1(a varchar(20), b varchar(20), c varchar(20), primary key(a, b))") tk.MustExec("insert into t1 values('1','1','111'),('2','2','222'),('3','3','333')") tk.MustExec(`prepare stmt2 from "select * from t1 where t1.a = ? and t1.b = ?"`) diff --git a/planner/core/common_plans.go b/planner/core/common_plans.go index b29b604c5ea87..83d2b29e1a1b7 100644 --- a/planner/core/common_plans.go +++ b/planner/core/common_plans.go @@ -36,6 +36,7 @@ import ( "github.com/pingcap/tidb/types" driver "github.com/pingcap/tidb/types/parser_driver" "github.com/pingcap/tidb/util/chunk" + "github.com/pingcap/tidb/util/execdetails" "github.com/pingcap/tidb/util/hint" "github.com/pingcap/tidb/util/kvcache" "github.com/pingcap/tidb/util/logutil" @@ -829,12 +830,14 @@ type SelectInto struct { type Explain struct { baseSchemaProducer - TargetPlan Plan - Format string - Analyze bool - ExecStmt ast.StmtNode + TargetPlan Plan + Format string + Analyze bool + ExecStmt ast.StmtNode + RuntimeStatsColl *execdetails.RuntimeStatsColl Rows [][]string + ExplainRows [][]string explainedPlans map[int]bool } @@ -857,9 +860,9 @@ func (e *Explain) prepareSchema() error { format := strings.ToLower(e.Format) switch { - case format == ast.ExplainFormatROW && !e.Analyze: + case format == ast.ExplainFormatROW && (!e.Analyze && e.RuntimeStatsColl == nil): fieldNames = []string{"id", "estRows", "task", "access object", "operator info"} - case format == ast.ExplainFormatROW && e.Analyze: + case format == ast.ExplainFormatROW && (e.Analyze || e.RuntimeStatsColl != nil): fieldNames = []string{"id", "estRows", "actRows", "task", "access object", "execution info", "operator info", "memory", "disk"} case format == ast.ExplainFormatDOT: fieldNames = []string{"dot contents"} @@ -1009,10 +1012,12 @@ func (e *Explain) explainPlanInRowFormat(p Plan, taskType, driverSide, indent st return } -func getRuntimeInfo(ctx sessionctx.Context, p Plan) (actRows, analyzeInfo, memoryInfo, diskInfo string) { - runtimeStatsColl := ctx.GetSessionVars().StmtCtx.RuntimeStatsColl +func getRuntimeInfo(ctx sessionctx.Context, p Plan, runtimeStatsColl *execdetails.RuntimeStatsColl) (actRows, analyzeInfo, memoryInfo, diskInfo string) { if runtimeStatsColl == nil { - return + runtimeStatsColl = ctx.GetSessionVars().StmtCtx.RuntimeStatsColl + if runtimeStatsColl == nil { + return + } } explainID := p.ID() @@ -1053,12 +1058,35 @@ func (e *Explain) prepareOperatorInfo(p Plan, taskType, driverSide, indent strin } id := texttree.PrettyIdentifier(p.ExplainID().String()+driverSide, indent, isLastChild) + estRows, accessObject, operatorInfo := e.getOperatorInfo(p, id) + + var row []string + if e.Analyze { + actRows, analyzeInfo, memoryInfo, diskInfo := getRuntimeInfo(e.ctx, p, nil) + row = []string{id, estRows, actRows, taskType, accessObject, analyzeInfo, operatorInfo, memoryInfo, diskInfo} + } else if e.RuntimeStatsColl != nil { + actRows, analyzeInfo, memoryInfo, diskInfo := getRuntimeInfo(e.ctx, p, e.RuntimeStatsColl) + row = []string{id, estRows, actRows, taskType, accessObject, analyzeInfo, operatorInfo, memoryInfo, diskInfo} + } else { + row = []string{id, estRows, taskType, accessObject, operatorInfo} + } + e.Rows = append(e.Rows, row) +} +func (e *Explain) getOperatorInfo(p Plan, id string) (string, string, string) { + // For `explain for connection` statement, `e.ExplainRows` will be set. + for _, row := range e.ExplainRows { + if len(row) < 5 { + panic("should never happen") + } + if row[0] == id { + return row[1], row[3], row[4] + } + } estRows := "N/A" if si := p.statsInfo(); si != nil { estRows = strconv.FormatFloat(si.RowCount, 'f', 2, 64) } - var accessObject, operatorInfo string if plan, ok := p.(dataAccesser); ok { accessObject = plan.AccessObject() @@ -1066,15 +1094,7 @@ func (e *Explain) prepareOperatorInfo(p Plan, taskType, driverSide, indent strin } else { operatorInfo = p.ExplainInfo() } - - var row []string - if e.Analyze { - actRows, analyzeInfo, memoryInfo, diskInfo := getRuntimeInfo(e.ctx, p) - row = []string{id, estRows, actRows, taskType, accessObject, analyzeInfo, operatorInfo, memoryInfo, diskInfo} - } else { - row = []string{id, estRows, taskType, accessObject, operatorInfo} - } - e.Rows = append(e.Rows, row) + return estRows, accessObject, operatorInfo } func (e *Explain) prepareDotInfo(p PhysicalPlan) { diff --git a/planner/core/encode.go b/planner/core/encode.go index 01b2fb14cf759..390857fdecd58 100644 --- a/planner/core/encode.go +++ b/planner/core/encode.go @@ -61,7 +61,7 @@ func (pn *planEncoder) encodePlanTree(p Plan) string { func (pn *planEncoder) encodePlan(p Plan, isRoot bool, store kv.StoreType, depth int) { taskTypeInfo := plancodec.EncodeTaskType(isRoot, store) - actRows, analyzeInfo, memoryInfo, diskInfo := getRuntimeInfo(p.SCtx(), p) + actRows, analyzeInfo, memoryInfo, diskInfo := getRuntimeInfo(p.SCtx(), p, nil) rowCount := 0.0 if statsInfo := p.statsInfo(); statsInfo != nil { rowCount = p.statsInfo().RowCount diff --git a/planner/core/planbuilder.go b/planner/core/planbuilder.go index 925824d5b2039..78b752eb39b89 100644 --- a/planner/core/planbuilder.go +++ b/planner/core/planbuilder.go @@ -45,6 +45,7 @@ import ( "github.com/pingcap/tidb/types/parser_driver" util2 "github.com/pingcap/tidb/util" "github.com/pingcap/tidb/util/chunk" + "github.com/pingcap/tidb/util/execdetails" "github.com/pingcap/tidb/util/hint" "github.com/pingcap/tidb/util/logutil" utilparser "github.com/pingcap/tidb/util/parser" @@ -2946,13 +2947,14 @@ func (b *PlanBuilder) buildTrace(trace *ast.TraceStmt) (Plan, error) { return p, nil } -func (b *PlanBuilder) buildExplainPlan(targetPlan Plan, format string, rows [][]string, analyze bool, execStmt ast.StmtNode) (Plan, error) { +func (b *PlanBuilder) buildExplainPlan(targetPlan Plan, format string, explainRows [][]string, analyze bool, execStmt ast.StmtNode, runtimeStats *execdetails.RuntimeStatsColl) (Plan, error) { p := &Explain{ - TargetPlan: targetPlan, - Format: format, - Analyze: analyze, - ExecStmt: execStmt, - Rows: rows, + TargetPlan: targetPlan, + Format: format, + Analyze: analyze, + ExecStmt: execStmt, + ExplainRows: explainRows, + RuntimeStatsColl: runtimeStats, } p.ctx = b.ctx return p, p.prepareSchema() @@ -2977,8 +2979,11 @@ func (b *PlanBuilder) buildExplainFor(explainFor *ast.ExplainForStmt) (Plan, err if !ok || targetPlan == nil { return &Explain{Format: explainFor.Format}, nil } - - return b.buildExplainPlan(targetPlan, explainFor.Format, processInfo.PlanExplainRows, false, nil) + var explainRows [][]string + if explainFor.Format == ast.ExplainFormatROW { + explainRows = processInfo.PlanExplainRows + } + return b.buildExplainPlan(targetPlan, explainFor.Format, explainRows, false, nil, processInfo.RuntimeStatsColl) } func (b *PlanBuilder) buildExplain(ctx context.Context, explain *ast.ExplainStmt) (Plan, error) { @@ -2990,7 +2995,7 @@ func (b *PlanBuilder) buildExplain(ctx context.Context, explain *ast.ExplainStmt return nil, err } - return b.buildExplainPlan(targetPlan, explain.Format, nil, explain.Analyze, explain.Stmt) + return b.buildExplainPlan(targetPlan, explain.Format, nil, explain.Analyze, explain.Stmt, nil) } func (b *PlanBuilder) buildSelectInto(ctx context.Context, sel *ast.SelectStmt) (Plan, error) { diff --git a/session/session.go b/session/session.go index 2903e20dbdd0c..69d62660898f6 100644 --- a/session/session.go +++ b/session/session.go @@ -1024,6 +1024,7 @@ func (s *session) SetProcessInfo(sql string, t time.Time, command byte, maxExecu Command: command, Plan: s.currentPlan, PlanExplainRows: plannercore.GetExplainRowsForPlan(s.currentPlan), + RuntimeStatsColl: s.sessionVars.StmtCtx.RuntimeStatsColl, Time: t, State: s.Status(), Info: sql, diff --git a/util/processinfo.go b/util/processinfo.go index c7614ad798175..3dec1c8a617ac 100644 --- a/util/processinfo.go +++ b/util/processinfo.go @@ -21,22 +21,24 @@ import ( "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/sessionctx/stmtctx" "github.com/pingcap/tidb/store/tikv/oracle" + "github.com/pingcap/tidb/util/execdetails" ) // ProcessInfo is a struct used for show processlist statement. type ProcessInfo struct { - ID uint64 - User string - Host string - DB string - Digest string - Plan interface{} - PlanExplainRows [][]string - Time time.Time - Info string - CurTxnStartTS uint64 - StmtCtx *stmtctx.StatementContext - StatsInfo func(interface{}) map[string]uint64 + ID uint64 + User string + Host string + DB string + Digest string + Plan interface{} + PlanExplainRows [][]string + RuntimeStatsColl *execdetails.RuntimeStatsColl + Time time.Time + Info string + CurTxnStartTS uint64 + StmtCtx *stmtctx.StatementContext + StatsInfo func(interface{}) map[string]uint64 // MaxExecutionTime is the timeout for select statement, in milliseconds. // If the query takes too long, kill it. MaxExecutionTime uint64 From f1edb86ea3fc61228beaac78ba1c182274c35962 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Mon, 26 Oct 2020 15:04:00 +0800 Subject: [PATCH 059/229] executor: add max font size limit (#20625) (#20637) Signed-off-by: ti-srebot --- executor/inspection_profile.go | 6 +++++- infoschema/metric_table_def.go | 4 ++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/executor/inspection_profile.go b/executor/inspection_profile.go index 36d78fdac96f8..f243db364f0d8 100644 --- a/executor/inspection_profile.go +++ b/executor/inspection_profile.go @@ -513,9 +513,12 @@ func (pb *profileBuilder) addNode(n *metricNode, selfCost, nodeTotal float64) er } func (pb *profileBuilder) addNodeDef(name, labelValue, comment string, fontWeight, colorWeight float64) { - baseFontSize, maxFontGrowth := 5, 18.0 + baseFontSize, maxFontSize, maxFontGrowth := 5, 64, 18.0 fontSize := baseFontSize fontSize += int(math.Ceil(maxFontGrowth * math.Sqrt(math.Abs(fontWeight)/pb.totalValue))) + if fontSize > maxFontSize { + fontSize = maxFontSize + } pb.buf.WriteString(fmt.Sprintf(`N%d [label="%s" tooltip="%s" fontsize=%d shape=box color="%s" fillcolor="%s"]`, pb.getNameID(name), labelValue, comment, fontSize, @@ -641,6 +644,7 @@ func (pb *profileBuilder) genTiDBQueryTree() *metricNode { children: []*metricNode{ { table: "tidb_batch_client_wait", + unit: int64(10e8), }, { table: "tidb_batch_client_wait_conn", diff --git a/infoschema/metric_table_def.go b/infoschema/metric_table_def.go index a9df46bbded4e..485bcbd0452cd 100644 --- a/infoschema/metric_table_def.go +++ b/infoschema/metric_table_def.go @@ -650,7 +650,7 @@ var MetricTableMap = map[string]MetricTableDef{ Labels: []string{"instance", "store"}, }, "tidb_batch_client_wait_duration": { - Comment: "The quantile of kv storage batch processing durations", + Comment: "The quantile of kv storage batch processing durations, the unit is nanosecond", PromQL: "histogram_quantile($QUANTILE, sum(rate(tidb_tikvclient_batch_wait_duration_bucket{$LABEL_CONDITIONS}[$RANGE_DURATION])) by (le, instance))", Labels: []string{"instance"}, Quantile: 0.95, @@ -2413,7 +2413,7 @@ var MetricTableMap = map[string]MetricTableDef{ "tidb_batch_client_wait_total_time": { PromQL: "sum(increase(tidb_tikvclient_batch_wait_duration_sum{$LABEL_CONDITIONS}[$RANGE_DURATION])) by (instance)", Labels: []string{"instance"}, - Comment: "The total time of kv storage batch processing durations", + Comment: "The total time of kv storage batch processing durations, the unit is nanosecond", }, "tidb_compile_total_count": { PromQL: "sum(increase(tidb_session_compile_duration_seconds_count{$LABEL_CONDITIONS}[$RANGE_DURATION])) by (instance,sql_type)", From 5ef2d8d76eab3c47618473ea0411fc64b20dc9cb Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Tue, 27 Oct 2020 17:31:35 +0800 Subject: [PATCH 060/229] expression, executor: add iso 8601 and timezone support for temporal string literal (#20534) (#20670) Signed-off-by: ti-srebot --- executor/insert_test.go | 87 ++++++++++++ expression/integration_test.go | 2 +- types/time.go | 247 ++++++++++++++++++++++++++++++--- types/time_test.go | 158 ++++++++++++++++++++- 4 files changed, 464 insertions(+), 30 deletions(-) diff --git a/executor/insert_test.go b/executor/insert_test.go index e2176761dc09e..dcc986727b772 100644 --- a/executor/insert_test.go +++ b/executor/insert_test.go @@ -294,6 +294,93 @@ func (s *testSuite3) TestInsertDateTimeWithTimeZone(c *C) { tk.MustQuery(`select * from t;`).Check(testkit.Rows( `1 1970-01-01 09:20:34`, )) + + // test for ambiguous cases + cases := []struct { + lit string + expect string + }{ + {"2020-10-22", "2020-10-22 00:00:00"}, + {"2020-10-22-16", "2020-10-22 16:00:00"}, + {"2020-10-22 16-31", "2020-10-22 16:31:00"}, + {"2020-10-22 16:31-15", "2020-10-22 16:31:15"}, + {"2020-10-22T16:31:15-10", "2020-10-23 10:31:15"}, + + {"2020.10-22", "2020-10-22 00:00:00"}, + {"2020-10.22-16", "2020-10-22 16:00:00"}, + {"2020-10-22.16-31", "2020-10-22 16:31:00"}, + {"2020-10-22 16.31-15", "2020-10-22 16:31:15"}, + {"2020-10-22T16.31.15+14", "2020-10-22 10:31:15"}, + + {"2020-10:22", "2020-10-22 00:00:00"}, + {"2020-10-22:16", "2020-10-22 16:00:00"}, + {"2020-10-22-16:31", "2020-10-22 16:31:00"}, + {"2020-10-22 16-31:15", "2020-10-22 16:31:15"}, + {"2020-10-22T16.31.15+09:30", "2020-10-22 15:01:15"}, + + {"2020.10-22:16", "2020-10-22 16:00:00"}, + {"2020-10.22-16:31", "2020-10-22 16:31:00"}, + {"2020-10-22.16-31:15", "2020-10-22 16:31:15"}, + {"2020-10-22T16:31.15+09:30", "2020-10-22 15:01:15"}, + } + tk.MustExec(`drop table if exists t`) + tk.MustExec(`create table t (dt datetime)`) + tk.MustExec(`set @@time_zone='+08:00'`) + for _, ca := range cases { + tk.MustExec(`delete from t`) + tk.MustExec(fmt.Sprintf("insert into t values ('%s')", ca.lit)) + tk.MustQuery(`select * from t`).Check(testkit.Rows(ca.expect)) + } + + // test for time zone change + tzcCases := []struct { + tz1 string + lit string + tz2 string + exp1 string + exp2 string + }{ + {"+08:00", "2020-10-22T16:53:40Z", "+00:00", "2020-10-23 00:53:40", "2020-10-22 16:53:40"}, + {"-08:00", "2020-10-22T16:53:40Z", "+08:00", "2020-10-22 08:53:40", "2020-10-23 00:53:40"}, + {"-03:00", "2020-10-22T16:53:40+03:00", "+08:00", "2020-10-22 10:53:40", "2020-10-22 21:53:40"}, + {"+08:00", "2020-10-22T16:53:40+08:00", "+08:00", "2020-10-22 16:53:40", "2020-10-22 16:53:40"}, + } + tk.MustExec("drop table if exists t") + tk.MustExec("create table t (dt datetime, ts timestamp)") + for _, ca := range tzcCases { + tk.MustExec("delete from t") + tk.MustExec(fmt.Sprintf("set @@time_zone='%s'", ca.tz1)) + tk.MustExec(fmt.Sprintf("insert into t values ('%s', '%s')", ca.lit, ca.lit)) + tk.MustExec(fmt.Sprintf("set @@time_zone='%s'", ca.tz2)) + tk.MustQuery("select * from t").Check(testkit.Rows(ca.exp1 + " " + ca.exp2)) + } + + // test for datetime in compare + tk.MustExec("drop table if exists t") + tk.MustExec("create table t (ts timestamp)") + tk.MustExec("insert into t values ('2020-10-22T12:00:00Z'), ('2020-10-22T13:00:00Z'), ('2020-10-22T14:00:00Z')") + tk.MustQuery(fmt.Sprintf("select count(*) from t where ts > '2020-10-22T12:00:00Z'")).Check(testkit.Rows("2")) + + // test for datetime with fsp + fspCases := []struct { + fsp uint + lit string + exp1 string + exp2 string + }{ + {2, "2020-10-27T14:39:10.10+00:00", "2020-10-27 22:39:10.10", "2020-10-27 22:39:10.10"}, + {1, "2020-10-27T14:39:10.3+0200", "2020-10-27 20:39:10.3", "2020-10-27 20:39:10.3"}, + {6, "2020-10-27T14:39:10.3-02", "2020-10-28 00:39:10.300000", "2020-10-28 00:39:10.300000"}, + {2, "2020-10-27T14:39:10.10Z", "2020-10-27 22:39:10.10", "2020-10-27 22:39:10.10"}, + } + + tk.MustExec("set @@time_zone='+08:00'") + for _, ca := range fspCases { + tk.MustExec("drop table if exists t") + tk.MustExec(fmt.Sprintf("create table t (dt datetime(%d), ts timestamp(%d))", ca.fsp, ca.fsp)) + tk.MustExec(fmt.Sprintf("insert into t values ('%s', '%s')", ca.lit, ca.lit)) + tk.MustQuery("select * from t").Check(testkit.Rows(ca.exp1 + " " + ca.exp2)) + } } func (s *testSuite3) TestInsertZeroYear(c *C) { diff --git a/expression/integration_test.go b/expression/integration_test.go index 05d80f952e076..17416b77da0b9 100755 --- a/expression/integration_test.go +++ b/expression/integration_test.go @@ -1740,7 +1740,7 @@ func (s *testIntegrationSuite2) TestTimeBuiltin(c *C) { result.Check(testkit.Rows(" 0")) tk.MustQuery("show warnings").Check(testutil.RowsWithSep("|", "Warning|1292|Incorrect time value: '0'", - "Warning|1292|Incorrect time value: '0.0'")) + "Warning|1292|Incorrect datetime value: '0.0'")) result = tk.MustQuery(`SELECT DATE_FORMAT(0, '%W %M %e %Y %r %y'), DATE_FORMAT(0.0, '%W %M %e %Y %r %y');`) result.Check(testkit.Rows(" ")) tk.MustQuery("show warnings").Check(testkit.Rows()) diff --git a/types/time.go b/types/time.go index 2a129800e34f4..ac9f4f17c2457 100644 --- a/types/time.go +++ b/types/time.go @@ -789,15 +789,122 @@ func isValidSeparator(c byte, prevParts int) bool { return prevParts == 2 && (c == ' ' || c == 'T') } -// See https://dev.mysql.com/doc/refman/5.7/en/date-and-time-literals.html. -// The only delimiter recognized between a date and time part and a fractional seconds part is the decimal point. -func splitDateTime(format string) (seps []string, fracStr string) { - index := GetFracIndex(format) - if index > 0 { - fracStr = format[index+1:] - format = format[:index] +var validIdxCombinations = map[int]struct { + h int + m int +}{ + 100: {0, 0}, // 23:59:59Z + 30: {2, 0}, // 23:59:59+08 + 50: {4, 2}, // 23:59:59+0800 + 63: {5, 2}, // 23:59:59+08:00 + // postgres supports the following additional syntax that deviates from ISO8601, although we won't support it + // currently, it will be fairly easy to add in the current parsing framework + // 23:59:59Z+08 + // 23:59:59Z+08:00 +} + +// GetTimezone parses the trailing timezone information of a given time string literal. If idx = -1 is returned, it +// means timezone information not found, otherwise it indicates the index of the starting index of the timezone +// information. If the timezone contains sign, hour part and/or minute part, it will be returned as is, otherwise an +// empty string will be returned. +// +// Supported syntax: +// MySQL compatible: ((?P[-+])(?P[0-9]{2}):(?P[0-9]{2})){0,1}$, see +// https://dev.mysql.com/doc/refman/8.0/en/time-zone-support.html and https://dev.mysql.com/doc/refman/8.0/en/datetime.html +// the first link specified that timezone information should be in "[H]H:MM, prefixed with a + or -" while the +// second link specified that for string literal, "hour values less than than 10, a leading zero is required.". +// ISO-8601: Z|((((?P[-+])(?P[0-9]{2})(:(?P[0-9]{2}){0,1}){0,1})|((?P[0-9]{2}){0,1}){0,1}))$ +// see https://www.cl.cam.ac.uk/~mgk25/iso-time.html +func GetTimezone(lit string) (idx int, tzSign, tzHour, tzSep, tzMinute string) { + idx, zidx, sidx, spidx := -1, -1, -1, -1 + // idx is for the position of the starting of the timezone information + // zidx is for the z symbol + // sidx is for the sign + // spidx is for the separator + l := len(lit) + // the following loop finds the first index of Z, sign, and separator from backwards. + for i := l - 1; 0 <= i; i-- { + if lit[i] == 'Z' { + zidx = i + break + } + if sidx == -1 && (lit[i] == '-' || lit[i] == '+') { + sidx = i + } + if spidx == -1 && lit[i] == ':' { + spidx = i + } + } + // we could enumerate all valid combinations of these values and look it up in a table, see validIdxCombinations + // zidx can be -1 (23:59:59+08:00), l-1 (23:59:59Z) + // sidx can be -1, l-3, l-5, l-6 + // spidx can be -1, l-3 + k := 0 + if l-zidx == 1 { + k += 100 + } + if t := l - sidx; t == 3 || t == 5 || t == 6 { + k += t * 10 + } + if l-spidx == 3 { + k += 3 + } + if v, ok := validIdxCombinations[k]; ok { + hidx, midx := l-v.h, l-v.m + valid := func(v string) bool { + return '0' <= v[0] && v[0] <= '9' && '0' <= v[1] && v[1] <= '9' + } + if sidx != -1 { + tzSign = lit[sidx : sidx+1] + idx = sidx + } + if zidx != -1 { + idx = zidx + } + if (l - spidx) == 3 { + tzSep = lit[spidx : spidx+1] + } + if v.h != 0 { + tzHour = lit[hidx : hidx+2] + if !valid(tzHour) { + return -1, "", "", "", "" + } + } + if v.m != 0 { + tzMinute = lit[midx : midx+2] + if !valid(tzMinute) { + return -1, "", "", "", "" + } + } + return } + return -1, "", "", "", "" +} +// See https://dev.mysql.com/doc/refman/5.7/en/date-and-time-literals.html. +// splitDateTime splits the string literal into 3 parts, date & time, FSP and time zone. +// For FSP, The only delimiter recognized between a date & time part and a fractional seconds part is the decimal point, +// therefore we could look from backwards at the literal to find the index of the decimal point. +// For time zone, the possible delimiter could be +/- (w.r.t. MySQL 8.0, see +// https://dev.mysql.com/doc/refman/8.0/en/datetime.html) and Z/z (w.r.t. ISO 8601, see section Time zone in +// https://www.cl.cam.ac.uk/~mgk25/iso-time.html). We also look from backwards for the delimiter, see GetTimezone. +func splitDateTime(format string) (seps []string, fracStr string, hasTZ bool, tzSign, tzHour, tzSep, tzMinute string) { + tzIndex, tzSign, tzHour, tzSep, tzMinute := GetTimezone(format) + if tzIndex > 0 { + hasTZ = true + for ; tzIndex > 0 && isPunctuation(format[tzIndex-1]); tzIndex-- { + // in case of multiple separators, e.g. 2020-10--10 + } + format = format[:tzIndex] + } + fracIndex := GetFracIndex(format) + if fracIndex > 0 { + fracStr = format[fracIndex+1:] + for ; fracIndex > 0 && isPunctuation(format[fracIndex-1]); fracIndex-- { + // in case of multiple separators, e.g. 2020-10..10 + } + format = format[:fracIndex] + } seps = ParseDateFormat(format) return } @@ -805,14 +912,88 @@ func splitDateTime(format string) (seps []string, fracStr string) { // See https://dev.mysql.com/doc/refman/5.7/en/date-and-time-literals.html. func parseDatetime(sc *stmtctx.StatementContext, str string, fsp int8, isFloat bool) (Time, error) { var ( - year, month, day, hour, minute, second int - fracStr string - hhmmss bool - err error + year, month, day, hour, minute, second, deltaHour, deltaMinute int + fracStr string + tzSign, tzHour, tzSep, tzMinute string + hasTZ, hhmmss bool + err error ) - seps, fracStr := splitDateTime(str) + seps, fracStr, hasTZ, tzSign, tzHour, tzSep, tzMinute := splitDateTime(str) + var truncatedOrIncorrect bool + /* + if we have timezone parsed, there are the following cases to be considered, however some of them are wrongly parsed, and we should consider absorb them back to seps. + + 1. Z, then it must be time zone information, and we should not tamper with it + 2. -HH, it might be from + 1. no fracStr + 1. YYYY-MM-DD + 2. YYYY-MM-DD-HH + 3. YYYY-MM-DD HH-MM + 4. YYYY-MM-DD HH:MM-SS + 5. YYYY-MM-DD HH:MM:SS-HH (correct, no need absorb) + 2. with fracStr + 1. YYYY.MM-DD + 2. YYYY-MM.DD-HH + 3. YYYY-MM-DD.HH-MM + 4. YYYY-MM-DD HH.MM-SS + 5. YYYY-MM-DD HH:MM.SS-HH (correct, no need absorb) + 3. -HH:MM, similarly it might be from + 1. no fracStr + 1. YYYY-MM:DD + 2. YYYY-MM-DD:HH + 3. YYYY-MM-DD-HH:MM + 4. YYYY-MM-DD HH-MM:SS + 5. YYYY-MM-DD HH:MM-SS:HH (invalid) + 6. YYYY-MM-DD HH:MM:SS-HH:MM (correct, no need absorb) + 2. with fracStr + 1. YYYY.MM-DD:HH + 2. YYYY-MM.DD-HH:MM + 3. YYYY-MM-DD.HH-MM:SS + 4. YYYY-MM-DD HH.MM-SS:HH (invalid) + 5. YYYY-MM-DD HH:MM.SS-HH:MM (correct, no need absorb) + 4. -HHMM, there should only be one case, that is both the date and time part have existed, only then could we have fracStr or time zone + 1. YYYY-MM-DD HH:MM:SS.FSP-HHMM (correct, no need absorb) + + to summarize, FSP and timezone is only valid if we have date and time presented, otherwise we should consider absorbing + FSP or timezone into seps. additionally, if we want to absorb timezone, we either absorb them all, or not, meaning + we won't only absorb tzHour but not tzMinute. + + additional case to consider is that when the time literal is presented in float string (e.g. `YYYYMMDD.HHMMSS`), in + this case, FSP should not be absorbed and only `+HH:MM` would be allowed (i.e. Z, +HHMM, +HH that comes from ISO8601 + should be banned), because it only conforms to MySQL's timezone parsing logic, but it is not valid in ISO8601. + However, I think it is generally acceptable to allow a wider spectrum of timezone format in string literal. + */ + + // noAbsorb tests if can absorb FSP or TZ + noAbsorb := func(seps []string) bool { + // if we have more than 5 parts (i.e. 6), the tailing part can't be absorbed + // or if we only have 1 part, but its length is longer than 4, then it is at least YYMMD, in this case, FSP can + // not be absorbed, and it will be handled later, and the leading sign prevents TZ from being absorbed, because + // if date part has no separators, we can't use -/+ as separators between date & time. + return len(seps) > 5 || (len(seps) == 1 && len(seps[0]) > 4) + } + if len(fracStr) != 0 && !isFloat { + if !noAbsorb(seps) { + seps = append(seps, fracStr) + fracStr = "" + } + } + if hasTZ && tzSign != "" { + // if tzSign is empty, we can be sure that the string literal contains timezone (such as 2010-10-10T10:10:10Z), + // therefore we could safely skip this branch. + if !noAbsorb(seps) && !(tzMinute != "" && tzSep == "") { + // we can't absorb timezone if there is no separate between tzHour and tzMinute + if len(tzHour) != 0 { + seps = append(seps, tzHour) + } + if len(tzMinute) != 0 { + seps = append(seps, tzMinute) + } + hasTZ = false + } + } switch len(seps) { case 1: l := len(seps[0]) @@ -880,15 +1061,6 @@ func parseDatetime(sc *stmtctx.StatementContext, str string, fsp int8, isFloat b sc.AppendWarning(ErrTruncatedWrongVal.GenWithStackByArgs("datetime", str)) err = nil } - case 2: - // YYYY-MM is not valid - if len(fracStr) == 0 { - return ZeroDatetime, errors.Trace(ErrWrongValue.GenWithStackByArgs(DateTimeStr, str)) - } - - // YYYY-MM.DD, DD is treat as fracStr - err = scanTimeArgs(append(seps, fracStr), &year, &month, &day) - fracStr = "" case 3: // YYYY-MM-DD err = scanTimeArgs(seps, &year, &month, &day) @@ -924,7 +1096,8 @@ func parseDatetime(sc *stmtctx.StatementContext, str string, fsp int8, isFloat b var microsecond int var overflow bool if hhmmss { - // If input string is "20170118.999", without hhmmss, fsp is meanless. + // If input string is "20170118.999", without hhmmss, fsp is meaningless. + // TODO: this case is not only meaningless, but erroneous, please confirm. microsecond, overflow, err = ParseFrac(fracStr, fsp) if err != nil { return ZeroDatetime, errors.Trace(err) @@ -943,6 +1116,36 @@ func parseDatetime(sc *stmtctx.StatementContext, str string, fsp int8, isFloat b } tmp = FromGoTime(t1.Add(gotime.Second)) } + if hasTZ { + // without hhmmss, timezone is also meaningless + if !hhmmss { + return ZeroDatetime, errors.Trace(ErrWrongValue.GenWithStack(DateTimeStr, str)) + } + if len(tzHour) != 0 { + deltaHour = int((tzHour[0]-'0')*10 + (tzHour[1] - '0')) + } + if len(tzMinute) != 0 { + deltaMinute = int((tzMinute[0]-'0')*10 + (tzMinute[1] - '0')) + } + // allowed delta range is [-14:00, 14:00], and we will intentionally reject -00:00 + if deltaHour > 14 || deltaMinute > 59 || (deltaHour == 14 && deltaMinute != 0) || (tzSign == "-" && deltaHour == 0 && deltaMinute == 0) { + return ZeroDatetime, errors.Trace(ErrWrongValue.GenWithStackByArgs(DateTimeStr, str)) + } + // by default, if the temporal string literal does not contain timezone information, it will be in the timezone + // specified by the time_zone system variable. However, if the timezone is specified in the string literal, we + // will use the specified timezone to interpret the string literal and convert it into the system timezone. + offset := deltaHour*60*60 + deltaMinute*60 + if tzSign == "-" { + offset = -offset + } + loc := gotime.FixedZone(fmt.Sprintf("UTC%s%s:%s", tzSign, tzHour, tzMinute), offset) + t1, err := tmp.GoTime(loc) + if err != nil { + return ZeroDatetime, errors.Trace(err) + } + t1 = t1.In(sc.TimeZone) + tmp = FromGoTime(t1) + } nt := NewTime(tmp, mysql.TypeDatetime, fsp) diff --git a/types/time_test.go b/types/time_test.go index 063a7fdf05b18..03249d454ae95 100644 --- a/types/time_test.go +++ b/types/time_test.go @@ -14,6 +14,7 @@ package types_test import ( + "fmt" "math" "testing" "time" @@ -98,6 +99,10 @@ func (s *testTimeSuite) TestDateTime(c *C) { {"2018-01-01 18", "2018-01-01 18:00:00"}, {"18-01-01 18", "2018-01-01 18:00:00"}, {"2018.01.01", "2018-01-01 00:00:00.00"}, + {"2020.10.10 10.10.10", "2020-10-10 10:10:10.00"}, + {"2020-10-10 10-10.10", "2020-10-10 10:10:10.00"}, + {"2020-10-10 10.10", "2020-10-10 10:10:00.00"}, + {"2018.01.01", "2018-01-01 00:00:00.00"}, {"2018.01.01 00:00:00", "2018-01-01 00:00:00"}, {"2018/01/01-00:00:00", "2018-01-01 00:00:00"}, {"4710072", "2047-10-07 02:00:00"}, @@ -125,6 +130,10 @@ func (s *testTimeSuite) TestDateTime(c *C) { {"2017.00.05 23:59:58.575601", 3, "2017-00-05 23:59:58.576"}, {"2017/00/05 23:59:58.575601", 3, "2017-00-05 23:59:58.576"}, {"2017/00/05-23:59:58.575601", 3, "2017-00-05 23:59:58.576"}, + {"1710-10:00", 0, "1710-10-00 00:00:00"}, + {"1710.10+00", 0, "1710-10-00 00:00:00"}, + {"2020-10:15", 0, "2020-10-15 00:00:00"}, + {"2020.09-10:15", 0, "2020-09-10 15:00:00"}, } for _, test := range fspTbl { @@ -149,6 +158,13 @@ func (s *testTimeSuite) TestDateTime(c *C) { "20170118.999", "2018-01", "2018.01", + "20170118-12:34", + "20170118-1234", + "170118-1234", + "170118-12", + "1710-10", + "1710-1000", + "2020-10-22 10:31-10:12", // YYYY-MM-DD HH:MM-SS:HH (invalid) } for _, test := range errTable { @@ -246,6 +262,7 @@ func (s *testTimeSuite) TestDate(c *C) { // extra separators {"2011-12--13", "2011-12-13"}, {"2011--12-13", "2011-12-13"}, + {"2011-12..13", "2011-12-13"}, {"2011----12----13", "2011-12-13"}, {"2011~/.12)_#13T T.12~)12[~12", "2011-12-13"}, // combinations @@ -1825,6 +1842,129 @@ func (s *testTimeSuite) TestFromGoTime(c *C) { } +func (s *testTimeSuite) TestGetTimezone(c *C) { + cases := []struct { + input string + idx int + tzSign string + tzHour string + tzSep string + tzMinute string + }{ + {"2020-10-10T10:10:10Z", 19, "", "", "", ""}, + {"2020-10-10T10:10:10", -1, "", "", "", ""}, + {"2020-10-10T10:10:10-08", 19, "-", "08", "", ""}, + {"2020-10-10T10:10:10-0700", 19, "-", "07", "", "00"}, + {"2020-10-10T10:10:10+08:20", 19, "+", "08", ":", "20"}, + {"2020-10-10T10:10:10+08:10", 19, "+", "08", ":", "10"}, + {"2020-10-10T10:10:10+8:00", -1, "", "", "", ""}, + {"2020-10-10T10:10:10+082:10", -1, "", "", "", ""}, + {"2020-10-10T10:10:10+08:101", -1, "", "", "", ""}, + {"2020-10-10T10:10:10+T8:11", -1, "", "", "", ""}, + {"2020-09-06T05:49:13.293Z", 23, "", "", "", ""}, + {"2020-09-06T05:49:13.293", -1, "", "", "", ""}, + } + for ith, ca := range cases { + idx, tzSign, tzHour, tzSep, tzMinute := types.GetTimezone(ca.input) + c.Assert([5]interface{}{idx, tzSign, tzHour, tzSep, tzMinute}, Equals, [5]interface{}{ca.idx, ca.tzSign, ca.tzHour, ca.tzSep, ca.tzMinute}, Commentf("idx %d", ith)) + } +} + +func (s *testTimeSuite) TestParseWithTimezone(c *C) { + getTZ := func(tzSign string, tzHour, tzMinue int) *time.Location { + offset := tzHour*60*60 + tzMinue*60 + if tzSign == "-" { + offset = -offset + } + return time.FixedZone(fmt.Sprintf("UTC%s%02d:%02d", tzSign, tzHour, tzMinue), offset) + } + // lit is the string literal to be parsed, which contains timezone, and gt is the ground truth time + // in go's time.Time, while sysTZ is the system timezone where the string literal gets parsed. + // we first parse the string literal, and convert it into UTC and then compare it with the ground truth time in UTC. + // note that sysTZ won't affect the physical time the string literal represents. + cases := []struct { + lit string + fsp int8 + parseChecker Checker + gt time.Time + sysTZ *time.Location + }{ + { + "2006-01-02T15:04:05Z", + 0, + IsNil, + time.Date(2006, 1, 2, 15, 4, 5, 0, getTZ("+", 0, 0)), + getTZ("+", 0, 0), + }, + { + "2006-01-02T15:04:05Z", + 0, + IsNil, + time.Date(2006, 1, 2, 15, 4, 5, 0, getTZ("+", 0, 0)), + getTZ("+", 10, 0), + }, + { + "2020-10-21T16:05:10.50Z", + 2, + IsNil, + time.Date(2020, 10, 21, 16, 5, 10, 500*1000*1000, getTZ("+", 0, 0)), + getTZ("-", 10, 0), + }, + { + "2020-10-21T16:05:10.50+08", + 2, + IsNil, + time.Date(2020, 10, 21, 16, 5, 10, 500*1000*1000, getTZ("+", 8, 0)), + getTZ("-", 10, 0), + }, + { + "2020-10-21T16:05:10.50-0700", + 2, + IsNil, + time.Date(2020, 10, 21, 16, 5, 10, 500*1000*1000, getTZ("-", 7, 0)), + getTZ("-", 10, 0), + }, + { + "2020-10-21T16:05:10.50+09:00", + 2, + IsNil, + time.Date(2020, 10, 21, 16, 5, 10, 500*1000*1000, getTZ("+", 9, 0)), + getTZ("-", 10, 0), + }, + { + "2006-01-02T15:04:05+09:00", + 0, + IsNil, + time.Date(2006, 1, 2, 15, 4, 5, 0, getTZ("+", 9, 0)), + getTZ("+", 8, 0), + }, + { + "2006-01-02T15:04:05-02:00", + 0, + IsNil, + time.Date(2006, 1, 2, 15, 4, 5, 0, getTZ("-", 2, 0)), + getTZ("+", 3, 0), + }, + { + "2006-01-02T15:04:05-14:00", + 0, + IsNil, + time.Date(2006, 1, 2, 15, 4, 5, 0, getTZ("-", 14, 0)), + getTZ("+", 14, 0), + }, + } + for ith, ca := range cases { + t, err := types.ParseTime(&stmtctx.StatementContext{TimeZone: ca.sysTZ}, ca.lit, mysql.TypeTimestamp, ca.fsp) + c.Assert(err, ca.parseChecker, Commentf("tidb time parse misbehaved on %d", ith)) + if err != nil { + continue + } + t1, err := t.GoTime(ca.sysTZ) + c.Assert(err, IsNil, Commentf("tidb time convert failed on %d", ith)) + c.Assert(t1.In(time.UTC), Equals, ca.gt.In(time.UTC), Commentf("parsed time mismatch on %dth case", ith)) + } +} + func BenchmarkFormat(b *testing.B) { t1 := types.NewTime(types.FromGoTime(time.Now()), mysql.TypeTimestamp, 0) for i := 0; i < b.N; i++ { @@ -1895,12 +2035,16 @@ func BenchmarkParseDateFormat(b *testing.B) { benchmarkDateFormat(b, "datetime repeated delimiters", "2011---12---13 14::15::16..123456") } -func BenchmarkParseDatetime(b *testing.B) { - sc := &stmtctx.StatementContext{TimeZone: time.UTC} - str := "2011-10-10 11:11:11.123456" +func benchmarkDatetimeFormat(b *testing.B, name string, sc *stmtctx.StatementContext, str string) { + b.Run(name, func(b *testing.B) { + for i := 0; i < b.N; i++ { + types.ParseDatetime(sc, str) + } + }) +} - b.ResetTimer() - for i := 0; i < b.N; i++ { - types.ParseDatetime(sc, str) - } +func BenchmarkParseDatetimeFormat(b *testing.B) { + sc := &stmtctx.StatementContext{TimeZone: time.UTC} + benchmarkDatetimeFormat(b, "datetime without timezone", sc, "2020-10-10T10:10:10") + benchmarkDatetimeFormat(b, "datetime with timezone", sc, "2020-10-10T10:10:10Z+08:00") } From 66ac9fc31f1733e5eb8d11891ec1b38f9c422817 Mon Sep 17 00:00:00 2001 From: "Zhuomin(Charming) Liu" Date: Tue, 27 Oct 2020 19:02:22 +0800 Subject: [PATCH 061/229] planner: disable index merge join temporarily (#20599) --- cmd/explaintest/r/explain_complex.result | 80 +-- .../r/explain_complex_stats.result | 47 +- cmd/explaintest/r/explain_easy.result | 140 ++--- cmd/explaintest/r/explain_easy_stats.result | 40 +- cmd/explaintest/r/explain_join_stats.result | 30 +- cmd/explaintest/r/generated_columns.result | 30 +- cmd/explaintest/r/index_join.result | 40 +- cmd/explaintest/r/subquery.result | 10 +- cmd/explaintest/r/topn_push_down.result | 59 +- cmd/explaintest/r/tpch.result | 516 +++++++++--------- executor/index_lookup_join_test.go | 30 +- executor/index_lookup_merge_join_test.go | 115 ++-- executor/join_test.go | 88 +-- expression/integration_test.go | 49 +- planner/core/exhaust_physical_plans.go | 24 +- planner/core/logical_plan_builder.go | 6 +- planner/core/testdata/analyze_suite_out.json | 20 +- .../integration_serial_suite_out.json | 28 +- .../core/testdata/integration_suite_out.json | 80 +-- planner/core/testdata/plan_suite_out.json | 32 +- util/ranger/testdata/ranger_suite_out.json | 10 +- 21 files changed, 749 insertions(+), 725 deletions(-) diff --git a/cmd/explaintest/r/explain_complex.result b/cmd/explaintest/r/explain_complex.result index fe1e124e32fab..c526e4e859a56 100644 --- a/cmd/explaintest/r/explain_complex.result +++ b/cmd/explaintest/r/explain_complex.result @@ -118,28 +118,28 @@ id estRows task access object operator info Projection_13 1.00 root test.st.id, test.dd.id, test.st.aid, test.st.cm, test.dd.dic, test.dd.ip, test.dd.t, test.st.p1, test.st.p2, test.st.p3, test.st.p4, test.st.p5, test.st.p6_md5, test.st.p7_md5, test.st.ext, test.st.t └─Limit_16 1.00 root offset:0, count:2500 └─HashAgg_19 1.00 root group by:test.dd.dic, test.st.aid, funcs:firstrow(test.st.id)->test.st.id, funcs:firstrow(test.st.aid)->test.st.aid, funcs:firstrow(test.st.cm)->test.st.cm, funcs:firstrow(test.st.p1)->test.st.p1, funcs:firstrow(test.st.p2)->test.st.p2, funcs:firstrow(test.st.p3)->test.st.p3, funcs:firstrow(test.st.p4)->test.st.p4, funcs:firstrow(test.st.p5)->test.st.p5, funcs:firstrow(test.st.p6_md5)->test.st.p6_md5, funcs:firstrow(test.st.p7_md5)->test.st.p7_md5, funcs:firstrow(test.st.ext)->test.st.ext, funcs:firstrow(test.st.t)->test.st.t, funcs:firstrow(test.dd.id)->test.dd.id, funcs:firstrow(test.dd.dic)->test.dd.dic, funcs:firstrow(test.dd.ip)->test.dd.ip, funcs:firstrow(test.dd.t)->test.dd.t - └─HashJoin_34 0.00 root inner join, equal:[eq(test.dd.aid, test.st.aid) eq(test.dd.ip, test.st.ip)], other cond:gt(test.dd.t, test.st.t) - ├─IndexLookUp_52(Build) 0.00 root - │ ├─IndexRangeScan_49(Build) 3333.33 cop[tikv] table:dd, index:t(t) range:(1478143908,+inf], keep order:false, stats:pseudo - │ └─Selection_51(Probe) 0.00 cop[tikv] eq(test.dd.bm, 0), eq(test.dd.pt, "android"), not(isnull(test.dd.ip)) - │ └─TableRowIDScan_50 3333.33 cop[tikv] table:dd keep order:false, stats:pseudo - └─IndexLookUp_41(Probe) 3.33 root - ├─IndexRangeScan_38(Build) 3333.33 cop[tikv] table:gad, index:t(t) range:(1478143908,+inf], keep order:false, stats:pseudo - └─Selection_40(Probe) 3.33 cop[tikv] eq(test.st.pt, "android"), not(isnull(test.st.ip)) - └─TableRowIDScan_39 3333.33 cop[tikv] table:gad keep order:false, stats:pseudo + └─HashJoin_28 0.00 root inner join, equal:[eq(test.dd.aid, test.st.aid) eq(test.dd.ip, test.st.ip)], other cond:gt(test.dd.t, test.st.t) + ├─IndexLookUp_46(Build) 0.00 root + │ ├─IndexRangeScan_43(Build) 3333.33 cop[tikv] table:dd, index:t(t) range:(1478143908,+inf], keep order:false, stats:pseudo + │ └─Selection_45(Probe) 0.00 cop[tikv] eq(test.dd.bm, 0), eq(test.dd.pt, "android"), not(isnull(test.dd.ip)) + │ └─TableRowIDScan_44 3333.33 cop[tikv] table:dd keep order:false, stats:pseudo + └─IndexLookUp_35(Probe) 3.33 root + ├─IndexRangeScan_32(Build) 3333.33 cop[tikv] table:gad, index:t(t) range:(1478143908,+inf], keep order:false, stats:pseudo + └─Selection_34(Probe) 3.33 cop[tikv] eq(test.st.pt, "android"), not(isnull(test.st.ip)) + └─TableRowIDScan_33 3333.33 cop[tikv] table:gad keep order:false, stats:pseudo explain select gad.id as gid,sdk.id as sid,gad.aid as aid,gad.cm as cm,sdk.dic as dic,sdk.ip as ip, sdk.t as t, gad.p1 as p1, gad.p2 as p2, gad.p3 as p3, gad.p4 as p4, gad.p5 as p5, gad.p6_md5 as p6, gad.p7_md5 as p7, gad.ext as ext from st gad join dd sdk on gad.aid = sdk.aid and gad.dic = sdk.mac and gad.t < sdk.t where gad.t > 1477971479 and gad.bm = 0 and gad.pt = 'ios' and gad.dit = 'mac' and sdk.t > 1477971479 and sdk.bm = 0 and sdk.pt = 'ios' limit 3000; id estRows task access object operator info Projection_10 0.00 root test.st.id, test.dd.id, test.st.aid, test.st.cm, test.dd.dic, test.dd.ip, test.dd.t, test.st.p1, test.st.p2, test.st.p3, test.st.p4, test.st.p5, test.st.p6_md5, test.st.p7_md5, test.st.ext └─Limit_13 0.00 root offset:0, count:3000 - └─IndexMergeJoin_24 0.00 root inner join, inner:IndexLookUp_22, outer key:test.st.aid, inner key:test.dd.aid, other cond:eq(test.st.dic, test.dd.mac), lt(test.st.t, test.dd.t) - ├─IndexLookUp_35(Build) 0.00 root - │ ├─IndexRangeScan_32(Build) 3333.33 cop[tikv] table:gad, index:t(t) range:(1477971479,+inf], keep order:false, stats:pseudo - │ └─Selection_34(Probe) 0.00 cop[tikv] eq(test.st.bm, 0), eq(test.st.dit, "mac"), eq(test.st.pt, "ios"), not(isnull(test.st.dic)) - │ └─TableRowIDScan_33 3333.33 cop[tikv] table:gad keep order:false, stats:pseudo - └─IndexLookUp_22(Probe) 0.00 root - ├─IndexRangeScan_19(Build) 10000.00 cop[tikv] table:sdk, index:aid(aid, dic) range: decided by [eq(test.dd.aid, test.st.aid)], keep order:true, stats:pseudo - └─Selection_21(Probe) 0.00 cop[tikv] eq(test.dd.bm, 0), eq(test.dd.pt, "ios"), gt(test.dd.t, 1477971479), not(isnull(test.dd.mac)), not(isnull(test.dd.t)) - └─TableRowIDScan_20 10000.00 cop[tikv] table:sdk keep order:false, stats:pseudo + └─IndexJoin_18 0.00 root inner join, inner:IndexLookUp_17, outer key:test.st.aid, inner key:test.dd.aid, other cond:eq(test.st.dic, test.dd.mac), lt(test.st.t, test.dd.t) + ├─IndexLookUp_29(Build) 0.00 root + │ ├─IndexRangeScan_26(Build) 3333.33 cop[tikv] table:gad, index:t(t) range:(1477971479,+inf], keep order:false, stats:pseudo + │ └─Selection_28(Probe) 0.00 cop[tikv] eq(test.st.bm, 0), eq(test.st.dit, "mac"), eq(test.st.pt, "ios"), not(isnull(test.st.dic)) + │ └─TableRowIDScan_27 3333.33 cop[tikv] table:gad keep order:false, stats:pseudo + └─IndexLookUp_17(Probe) 0.00 root + ├─IndexRangeScan_14(Build) 10000.00 cop[tikv] table:sdk, index:aid(aid, dic) range: decided by [eq(test.dd.aid, test.st.aid)], keep order:false, stats:pseudo + └─Selection_16(Probe) 0.00 cop[tikv] eq(test.dd.bm, 0), eq(test.dd.pt, "ios"), gt(test.dd.t, 1477971479), not(isnull(test.dd.mac)), not(isnull(test.dd.t)) + └─TableRowIDScan_15 10000.00 cop[tikv] table:sdk keep order:false, stats:pseudo explain SELECT cm, p1, p2, p3, p4, p5, p6_md5, p7_md5, count(1) as click_pv, count(DISTINCT ip) as click_ip FROM st WHERE (t between 1478188800 and 1478275200) and aid='cn.sbkcq' and pt='android' GROUP BY cm, p1, p2, p3, p4, p5, p6_md5, p7_md5; id estRows task access object operator info Projection_5 1.00 root test.st.cm, test.st.p1, test.st.p2, test.st.p3, test.st.p4, test.st.p5, test.st.p6_md5, test.st.p7_md5, Column#20, Column#21 @@ -152,15 +152,15 @@ explain select dt.id as id, dt.aid as aid, dt.pt as pt, dt.dic as dic, dt.cm as id estRows task access object operator info Projection_10 0.00 root test.dt.id, test.dt.aid, test.dt.pt, test.dt.dic, test.dt.cm, test.rr.gid, test.rr.acd, test.rr.t, test.dt.p1, test.dt.p2, test.dt.p3, test.dt.p4, test.dt.p5, test.dt.p6_md5, test.dt.p7_md5 └─Limit_13 0.00 root offset:0, count:2000 - └─IndexMergeJoin_41 0.00 root inner join, inner:IndexLookUp_39, outer key:test.rr.aid, test.rr.dic, inner key:test.dt.aid, test.dt.dic - ├─TableReader_61(Build) 3.33 root data:Selection_60 - │ └─Selection_60 3.33 cop[tikv] eq(test.rr.pt, "ios"), gt(test.rr.t, 1478185592) - │ └─TableFullScan_59 10000.00 cop[tikv] table:rr keep order:false, stats:pseudo - └─IndexLookUp_39(Probe) 0.00 root - ├─Selection_37(Build) 1.00 cop[tikv] not(isnull(test.dt.dic)) - │ └─IndexRangeScan_35 1.00 cop[tikv] table:dt, index:aid(aid, dic) range: decided by [eq(test.dt.aid, test.rr.aid) eq(test.dt.dic, test.rr.dic)], keep order:true, stats:pseudo - └─Selection_38(Probe) 0.00 cop[tikv] eq(test.dt.bm, 0), eq(test.dt.pt, "ios"), gt(test.dt.t, 1478185592) - └─TableRowIDScan_36 1.00 cop[tikv] table:dt keep order:false, stats:pseudo + └─IndexJoin_27 0.00 root inner join, inner:IndexLookUp_26, outer key:test.rr.aid, test.rr.dic, inner key:test.dt.aid, test.dt.dic + ├─TableReader_47(Build) 3.33 root data:Selection_46 + │ └─Selection_46 3.33 cop[tikv] eq(test.rr.pt, "ios"), gt(test.rr.t, 1478185592) + │ └─TableFullScan_45 10000.00 cop[tikv] table:rr keep order:false, stats:pseudo + └─IndexLookUp_26(Probe) 0.00 root + ├─Selection_24(Build) 1.00 cop[tikv] not(isnull(test.dt.dic)) + │ └─IndexRangeScan_22 1.00 cop[tikv] table:dt, index:aid(aid, dic) range: decided by [eq(test.dt.aid, test.rr.aid) eq(test.dt.dic, test.rr.dic)], keep order:false, stats:pseudo + └─Selection_25(Probe) 0.00 cop[tikv] eq(test.dt.bm, 0), eq(test.dt.pt, "ios"), gt(test.dt.t, 1478185592) + └─TableRowIDScan_23 1.00 cop[tikv] table:dt keep order:false, stats:pseudo explain select pc,cr,count(DISTINCT uid) as pay_users,count(oid) as pay_times,sum(am) as am from pp where ps=2 and ppt>=1478188800 and ppt<1478275200 and pi in ('510017','520017') and uid in ('18089709','18090780') group by pc,cr; id estRows task access object operator info Projection_5 1.00 root test.pp.pc, test.pp.cr, Column#22, Column#23, Column#24 @@ -247,16 +247,16 @@ Sort_10 1.00 root test.org_department.left_value:asc └─HashAgg_15 1.00 root group by:test.org_department.id, funcs:firstrow(test.org_department.id)->test.org_department.id, funcs:firstrow(test.org_department.ctx)->test.org_department.ctx, funcs:firstrow(test.org_department.name)->test.org_department.name, funcs:firstrow(test.org_department.left_value)->test.org_department.left_value, funcs:firstrow(test.org_department.right_value)->test.org_department.right_value, funcs:firstrow(test.org_department.depth)->test.org_department.depth, funcs:firstrow(test.org_department.leader_id)->test.org_department.leader_id, funcs:firstrow(test.org_department.status)->test.org_department.status, funcs:firstrow(test.org_department.created_on)->test.org_department.created_on, funcs:firstrow(test.org_department.updated_on)->test.org_department.updated_on └─Selection_22 0.01 root or(eq(test.org_employee_position.user_id, 62), or(eq(test.org_department.id, 20), eq(test.org_department.id, 20))) └─HashJoin_24 0.02 root left outer join, equal:[eq(test.org_position.id, test.org_employee_position.position_id)] - ├─IndexMergeJoin_40(Build) 0.01 root left outer join, inner:IndexLookUp_38, outer key:test.org_department.id, inner key:test.org_position.department_id - │ ├─IndexLookUp_62(Build) 0.01 root - │ │ ├─IndexRangeScan_59(Build) 10.00 cop[tikv] table:d, index:org_department_ctx_index(ctx) range:[1,1], keep order:false, stats:pseudo - │ │ └─Selection_61(Probe) 0.01 cop[tikv] eq(test.org_department.status, 1000) - │ │ └─TableRowIDScan_60 10.00 cop[tikv] table:d keep order:false, stats:pseudo - │ └─IndexLookUp_38(Probe) 1.25 root - │ ├─Selection_36(Build) 1250.00 cop[tikv] not(isnull(test.org_position.department_id)) - │ │ └─IndexRangeScan_34 1251.25 cop[tikv] table:p, index:org_position_department_id_index(department_id) range: decided by [eq(test.org_position.department_id, test.org_department.id)], keep order:true, stats:pseudo - │ └─Selection_37(Probe) 1.25 cop[tikv] eq(test.org_position.status, 1000) - │ └─TableRowIDScan_35 1250.00 cop[tikv] table:p keep order:false, stats:pseudo - └─TableReader_72(Probe) 9.99 root data:Selection_71 - └─Selection_71 9.99 cop[tikv] eq(test.org_employee_position.status, 1000), not(isnull(test.org_employee_position.position_id)) - └─TableFullScan_70 10000.00 cop[tikv] table:ep keep order:false, stats:pseudo + ├─IndexJoin_33(Build) 0.01 root left outer join, inner:IndexLookUp_32, outer key:test.org_department.id, inner key:test.org_position.department_id + │ ├─IndexLookUp_55(Build) 0.01 root + │ │ ├─IndexRangeScan_52(Build) 10.00 cop[tikv] table:d, index:org_department_ctx_index(ctx) range:[1,1], keep order:false, stats:pseudo + │ │ └─Selection_54(Probe) 0.01 cop[tikv] eq(test.org_department.status, 1000) + │ │ └─TableRowIDScan_53 10.00 cop[tikv] table:d keep order:false, stats:pseudo + │ └─IndexLookUp_32(Probe) 1.25 root + │ ├─Selection_30(Build) 1250.00 cop[tikv] not(isnull(test.org_position.department_id)) + │ │ └─IndexRangeScan_28 1251.25 cop[tikv] table:p, index:org_position_department_id_index(department_id) range: decided by [eq(test.org_position.department_id, test.org_department.id)], keep order:false, stats:pseudo + │ └─Selection_31(Probe) 1.25 cop[tikv] eq(test.org_position.status, 1000) + │ └─TableRowIDScan_29 1250.00 cop[tikv] table:p keep order:false, stats:pseudo + └─TableReader_65(Probe) 9.99 root data:Selection_64 + └─Selection_64 9.99 cop[tikv] eq(test.org_employee_position.status, 1000), not(isnull(test.org_employee_position.position_id)) + └─TableFullScan_63 10000.00 cop[tikv] table:ep keep order:false, stats:pseudo diff --git a/cmd/explaintest/r/explain_complex_stats.result b/cmd/explaintest/r/explain_complex_stats.result index a2a3ba7768470..534f32420dccb 100644 --- a/cmd/explaintest/r/explain_complex_stats.result +++ b/cmd/explaintest/r/explain_complex_stats.result @@ -128,25 +128,25 @@ id estRows task access object operator info Projection_13 424.00 root test.st.id, test.dd.id, test.st.aid, test.st.cm, test.dd.dic, test.dd.ip, test.dd.t, test.st.p1, test.st.p2, test.st.p3, test.st.p4, test.st.p5, test.st.p6_md5, test.st.p7_md5, test.st.ext, test.st.t └─Limit_16 424.00 root offset:0, count:2500 └─HashAgg_19 424.00 root group by:test.dd.dic, test.st.aid, funcs:firstrow(test.st.id)->test.st.id, funcs:firstrow(test.st.aid)->test.st.aid, funcs:firstrow(test.st.cm)->test.st.cm, funcs:firstrow(test.st.p1)->test.st.p1, funcs:firstrow(test.st.p2)->test.st.p2, funcs:firstrow(test.st.p3)->test.st.p3, funcs:firstrow(test.st.p4)->test.st.p4, funcs:firstrow(test.st.p5)->test.st.p5, funcs:firstrow(test.st.p6_md5)->test.st.p6_md5, funcs:firstrow(test.st.p7_md5)->test.st.p7_md5, funcs:firstrow(test.st.ext)->test.st.ext, funcs:firstrow(test.st.t)->test.st.t, funcs:firstrow(test.dd.id)->test.dd.id, funcs:firstrow(test.dd.dic)->test.dd.dic, funcs:firstrow(test.dd.ip)->test.dd.ip, funcs:firstrow(test.dd.t)->test.dd.t - └─HashJoin_34 424.00 root inner join, equal:[eq(test.st.aid, test.dd.aid) eq(test.st.ip, test.dd.ip)], other cond:gt(test.dd.t, test.st.t) - ├─TableReader_37(Build) 424.00 root data:Selection_36 - │ └─Selection_36 424.00 cop[tikv] eq(test.st.bm, 0), eq(test.st.pt, "android"), gt(test.st.t, 1478143908), not(isnull(test.st.ip)) - │ └─TableRangeScan_35 1999.00 cop[tikv] table:gad range:[0,+inf], keep order:false - └─TableReader_44(Probe) 455.80 root data:Selection_43 - └─Selection_43 455.80 cop[tikv] eq(test.dd.bm, 0), eq(test.dd.pt, "android"), gt(test.dd.t, 1478143908), not(isnull(test.dd.ip)), not(isnull(test.dd.t)) - └─TableRangeScan_42 2000.00 cop[tikv] table:dd range:[0,+inf], keep order:false + └─HashJoin_28 424.00 root inner join, equal:[eq(test.st.aid, test.dd.aid) eq(test.st.ip, test.dd.ip)], other cond:gt(test.dd.t, test.st.t) + ├─TableReader_31(Build) 424.00 root data:Selection_30 + │ └─Selection_30 424.00 cop[tikv] eq(test.st.bm, 0), eq(test.st.pt, "android"), gt(test.st.t, 1478143908), not(isnull(test.st.ip)) + │ └─TableRangeScan_29 1999.00 cop[tikv] table:gad range:[0,+inf], keep order:false + └─TableReader_38(Probe) 455.80 root data:Selection_37 + └─Selection_37 455.80 cop[tikv] eq(test.dd.bm, 0), eq(test.dd.pt, "android"), gt(test.dd.t, 1478143908), not(isnull(test.dd.ip)), not(isnull(test.dd.t)) + └─TableRangeScan_36 2000.00 cop[tikv] table:dd range:[0,+inf], keep order:false explain select gad.id as gid,sdk.id as sid,gad.aid as aid,gad.cm as cm,sdk.dic as dic,sdk.ip as ip, sdk.t as t, gad.p1 as p1, gad.p2 as p2, gad.p3 as p3, gad.p4 as p4, gad.p5 as p5, gad.p6_md5 as p6, gad.p7_md5 as p7, gad.ext as ext from st gad join dd sdk on gad.aid = sdk.aid and gad.dic = sdk.mac and gad.t < sdk.t where gad.t > 1477971479 and gad.bm = 0 and gad.pt = 'ios' and gad.dit = 'mac' and sdk.t > 1477971479 and sdk.bm = 0 and sdk.pt = 'ios' limit 3000; id estRows task access object operator info Projection_10 170.34 root test.st.id, test.dd.id, test.st.aid, test.st.cm, test.dd.dic, test.dd.ip, test.dd.t, test.st.p1, test.st.p2, test.st.p3, test.st.p4, test.st.p5, test.st.p6_md5, test.st.p7_md5, test.st.ext └─Limit_13 170.34 root offset:0, count:3000 - └─IndexMergeJoin_24 170.34 root inner join, inner:IndexLookUp_22, outer key:test.st.aid, inner key:test.dd.aid, other cond:eq(test.st.dic, test.dd.mac), lt(test.st.t, test.dd.t) - ├─TableReader_31(Build) 170.34 root data:Selection_30 - │ └─Selection_30 170.34 cop[tikv] eq(test.st.bm, 0), eq(test.st.dit, "mac"), eq(test.st.pt, "ios"), gt(test.st.t, 1477971479), not(isnull(test.st.dic)) - │ └─TableRangeScan_29 1999.00 cop[tikv] table:gad range:[0,+inf], keep order:false - └─IndexLookUp_22(Probe) 1.00 root - ├─IndexRangeScan_19(Build) 3.93 cop[tikv] table:sdk, index:aid(aid, dic) range: decided by [eq(test.dd.aid, test.st.aid)], keep order:true - └─Selection_21(Probe) 1.00 cop[tikv] eq(test.dd.bm, 0), eq(test.dd.pt, "ios"), gt(test.dd.t, 1477971479), not(isnull(test.dd.mac)), not(isnull(test.dd.t)) - └─TableRowIDScan_20 3.93 cop[tikv] table:sdk keep order:false + └─IndexJoin_18 170.34 root inner join, inner:IndexLookUp_17, outer key:test.st.aid, inner key:test.dd.aid, other cond:eq(test.st.dic, test.dd.mac), lt(test.st.t, test.dd.t) + ├─TableReader_25(Build) 170.34 root data:Selection_24 + │ └─Selection_24 170.34 cop[tikv] eq(test.st.bm, 0), eq(test.st.dit, "mac"), eq(test.st.pt, "ios"), gt(test.st.t, 1477971479), not(isnull(test.st.dic)) + │ └─TableRangeScan_23 1999.00 cop[tikv] table:gad range:[0,+inf], keep order:false + └─IndexLookUp_17(Probe) 1.00 root + ├─IndexRangeScan_14(Build) 3.93 cop[tikv] table:sdk, index:aid(aid, dic) range: decided by [eq(test.dd.aid, test.st.aid)], keep order:false + └─Selection_16(Probe) 1.00 cop[tikv] eq(test.dd.bm, 0), eq(test.dd.pt, "ios"), gt(test.dd.t, 1477971479), not(isnull(test.dd.mac)), not(isnull(test.dd.t)) + └─TableRowIDScan_15 3.93 cop[tikv] table:sdk keep order:false explain SELECT cm, p1, p2, p3, p4, p5, p6_md5, p7_md5, count(1) as click_pv, count(DISTINCT ip) as click_ip FROM st WHERE (t between 1478188800 and 1478275200) and aid='cn.sbkcq' and pt='android' GROUP BY cm, p1, p2, p3, p4, p5, p6_md5, p7_md5; id estRows task access object operator info Projection_5 39.28 root test.st.cm, test.st.p1, test.st.p2, test.st.p3, test.st.p4, test.st.p5, test.st.p6_md5, test.st.p7_md5, Column#20, Column#21 @@ -159,15 +159,14 @@ explain select dt.id as id, dt.aid as aid, dt.pt as pt, dt.dic as dic, dt.cm as id estRows task access object operator info Projection_10 428.32 root test.dt.id, test.dt.aid, test.dt.pt, test.dt.dic, test.dt.cm, test.rr.gid, test.rr.acd, test.rr.t, test.dt.p1, test.dt.p2, test.dt.p3, test.dt.p4, test.dt.p5, test.dt.p6_md5, test.dt.p7_md5 └─Limit_13 428.32 root offset:0, count:2000 - └─IndexMergeJoin_26 428.32 root inner join, inner:Projection_24, outer key:test.dt.aid, test.dt.dic, inner key:test.rr.aid, test.rr.dic - ├─TableReader_58(Build) 428.32 root data:Selection_57 - │ └─Selection_57 428.32 cop[tikv] eq(test.dt.bm, 0), eq(test.dt.pt, "ios"), gt(test.dt.t, 1478185592), not(isnull(test.dt.dic)) - │ └─TableRangeScan_56 2000.00 cop[tikv] table:dt range:[0,+inf], keep order:false - └─Projection_24(Probe) 1.00 root test.rr.aid, test.rr.pt, test.rr.dic, test.rr.gid, test.rr.acd, test.rr.t - └─IndexLookUp_23 1.00 root - ├─IndexRangeScan_20(Build) 1.00 cop[tikv] table:rr, index:PRIMARY(aid, dic) range: decided by [eq(test.rr.aid, test.dt.aid) eq(test.rr.dic, test.dt.dic)], keep order:true - └─Selection_22(Probe) 1.00 cop[tikv] eq(test.rr.pt, "ios"), gt(test.rr.t, 1478185592) - └─TableRowIDScan_21 1.00 cop[tikv] table:rr keep order:false + └─IndexJoin_19 428.32 root inner join, inner:IndexLookUp_18, outer key:test.dt.aid, test.dt.dic, inner key:test.rr.aid, test.rr.dic + ├─TableReader_44(Build) 428.32 root data:Selection_43 + │ └─Selection_43 428.32 cop[tikv] eq(test.dt.bm, 0), eq(test.dt.pt, "ios"), gt(test.dt.t, 1478185592), not(isnull(test.dt.dic)) + │ └─TableRangeScan_42 2000.00 cop[tikv] table:dt range:[0,+inf], keep order:false + └─IndexLookUp_18(Probe) 1.00 root + ├─IndexRangeScan_15(Build) 1.00 cop[tikv] table:rr, index:PRIMARY(aid, dic) range: decided by [eq(test.rr.aid, test.dt.aid) eq(test.rr.dic, test.dt.dic)], keep order:false + └─Selection_17(Probe) 1.00 cop[tikv] eq(test.rr.pt, "ios"), gt(test.rr.t, 1478185592) + └─TableRowIDScan_16 1.00 cop[tikv] table:rr keep order:false explain select pc,cr,count(DISTINCT uid) as pay_users,count(oid) as pay_times,sum(am) as am from pp where ps=2 and ppt>=1478188800 and ppt<1478275200 and pi in ('510017','520017') and uid in ('18089709','18090780') group by pc,cr; id estRows task access object operator info Projection_5 207.86 root test.pp.pc, test.pp.cr, Column#22, Column#23, Column#24 diff --git a/cmd/explaintest/r/explain_easy.result b/cmd/explaintest/r/explain_easy.result index 285296450125a..6640e5c6eabec 100644 --- a/cmd/explaintest/r/explain_easy.result +++ b/cmd/explaintest/r/explain_easy.result @@ -45,12 +45,12 @@ IndexReader_6 10.00 root index:IndexRangeScan_5 └─IndexRangeScan_5 10.00 cop[tikv] table:t1, index:c2(c2) range:[1,1], keep order:false, stats:pseudo explain select * from t1 left join t2 on t1.c2 = t2.c1 where t1.c1 > 1; id estRows task access object operator info -HashJoin_23 4166.67 root left outer join, equal:[eq(test.t1.c2, test.t2.c1)] -├─TableReader_33(Build) 3333.33 root data:TableRangeScan_32 -│ └─TableRangeScan_32 3333.33 cop[tikv] table:t1 range:(1,+inf], keep order:false, stats:pseudo -└─TableReader_36(Probe) 9990.00 root data:Selection_35 - └─Selection_35 9990.00 cop[tikv] not(isnull(test.t2.c1)) - └─TableFullScan_34 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo +HashJoin_16 4166.67 root left outer join, equal:[eq(test.t1.c2, test.t2.c1)] +├─TableReader_26(Build) 3333.33 root data:TableRangeScan_25 +│ └─TableRangeScan_25 3333.33 cop[tikv] table:t1 range:(1,+inf], keep order:false, stats:pseudo +└─TableReader_29(Probe) 9990.00 root data:Selection_28 + └─Selection_28 9990.00 cop[tikv] not(isnull(test.t2.c1)) + └─TableFullScan_27 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo explain update t1 set t1.c2 = 2 where t1.c1 = 1; id estRows task access object operator info Update_2 N/A root N/A @@ -64,14 +64,14 @@ Delete_4 N/A root N/A explain select count(b.c2) from t1 a, t2 b where a.c1 = b.c2 group by a.c1; id estRows task access object operator info Projection_11 9990.00 root cast(Column#8, bigint(21) BINARY)->Column#7 -└─HashJoin_21 9990.00 root inner join, equal:[eq(test.t1.c1, test.t2.c2)] - ├─HashAgg_28(Build) 7992.00 root group by:test.t2.c2, funcs:count(Column#9)->Column#8, funcs:firstrow(test.t2.c2)->test.t2.c2 - │ └─TableReader_29 7992.00 root data:HashAgg_23 - │ └─HashAgg_23 7992.00 cop[tikv] group by:test.t2.c2, funcs:count(test.t2.c2)->Column#9 - │ └─Selection_27 9990.00 cop[tikv] not(isnull(test.t2.c2)) - │ └─TableFullScan_26 10000.00 cop[tikv] table:b keep order:false, stats:pseudo - └─TableReader_34(Probe) 10000.00 root data:TableFullScan_33 - └─TableFullScan_33 10000.00 cop[tikv] table:a keep order:false, stats:pseudo +└─HashJoin_17 9990.00 root inner join, equal:[eq(test.t1.c1, test.t2.c2)] + ├─HashAgg_24(Build) 7992.00 root group by:test.t2.c2, funcs:count(Column#9)->Column#8, funcs:firstrow(test.t2.c2)->test.t2.c2 + │ └─TableReader_25 7992.00 root data:HashAgg_19 + │ └─HashAgg_19 7992.00 cop[tikv] group by:test.t2.c2, funcs:count(test.t2.c2)->Column#9 + │ └─Selection_23 9990.00 cop[tikv] not(isnull(test.t2.c2)) + │ └─TableFullScan_22 10000.00 cop[tikv] table:b keep order:false, stats:pseudo + └─TableReader_30(Probe) 10000.00 root data:TableFullScan_29 + └─TableFullScan_29 10000.00 cop[tikv] table:a keep order:false, stats:pseudo explain select * from t2 order by t2.c2 limit 0, 1; id estRows task access object operator info TopN_7 1.00 root test.t2.c2:asc, offset:0, count:1 @@ -99,13 +99,13 @@ StreamAgg_12 1.00 root funcs:sum(Column#10)->Column#8 └─TableFullScan_14 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo explain select c1 from t1 where c1 in (select c2 from t2); id estRows task access object operator info -HashJoin_19 9990.00 root inner join, equal:[eq(test.t1.c1, test.t2.c2)] -├─HashAgg_23(Build) 7992.00 root group by:test.t2.c2, funcs:firstrow(test.t2.c2)->test.t2.c2 -│ └─TableReader_30 9990.00 root data:Selection_29 -│ └─Selection_29 9990.00 cop[tikv] not(isnull(test.t2.c2)) -│ └─TableFullScan_28 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo -└─TableReader_32(Probe) 10000.00 root data:TableFullScan_31 - └─TableFullScan_31 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo +HashJoin_15 9990.00 root inner join, equal:[eq(test.t1.c1, test.t2.c2)] +├─HashAgg_19(Build) 7992.00 root group by:test.t2.c2, funcs:firstrow(test.t2.c2)->test.t2.c2 +│ └─TableReader_26 9990.00 root data:Selection_25 +│ └─Selection_25 9990.00 cop[tikv] not(isnull(test.t2.c2)) +│ └─TableFullScan_24 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo +└─TableReader_28(Probe) 10000.00 root data:TableFullScan_27 + └─TableFullScan_27 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo explain select (select count(1) k from t1 s where s.c1 = t1.c1 having k != 0) from t1; id estRows task access object operator info Projection_12 10000.00 root ifnull(Column#7, 0)->Column#7 @@ -313,11 +313,11 @@ Projection_11 10000.00 root Column#11 ├─TableReader_15(Build) 10000.00 root data:TableFullScan_14 │ └─TableFullScan_14 10000.00 cop[tikv] table:t keep order:false, stats:pseudo └─StreamAgg_20(Probe) 1.00 root funcs:count(1)->Column#10 - └─MergeJoin_54 12.50 root inner join, left key:test.t.a, right key:test.t.a - ├─TableReader_49(Build) 1.00 root data:TableRangeScan_48 - │ └─TableRangeScan_48 1.00 cop[tikv] table:t1 range: decided by [eq(test.t.a, test.t.a)], keep order:true, stats:pseudo - └─TableReader_47(Probe) 1.00 root data:TableRangeScan_46 - └─TableRangeScan_46 1.00 cop[tikv] table:s range: decided by [eq(test.t.a, test.t.a)], keep order:true, stats:pseudo + └─MergeJoin_44 12.50 root inner join, left key:test.t.a, right key:test.t.a + ├─TableReader_39(Build) 1.00 root data:TableRangeScan_38 + │ └─TableRangeScan_38 1.00 cop[tikv] table:t1 range: decided by [eq(test.t.a, test.t.a)], keep order:true, stats:pseudo + └─TableReader_37(Probe) 1.00 root data:TableRangeScan_36 + └─TableRangeScan_36 1.00 cop[tikv] table:s range: decided by [eq(test.t.a, test.t.a)], keep order:true, stats:pseudo explain select t.c in (select count(*) from t s use index(idx), t t1 where s.b = t.a and s.a = t1.a) from t; id estRows task access object operator info Projection_11 10000.00 root Column#11 @@ -325,11 +325,11 @@ Projection_11 10000.00 root Column#11 ├─TableReader_15(Build) 10000.00 root data:TableFullScan_14 │ └─TableFullScan_14 10000.00 cop[tikv] table:t keep order:false, stats:pseudo └─StreamAgg_20(Probe) 1.00 root funcs:count(1)->Column#10 - └─IndexMergeJoin_44 12.50 root inner join, inner:TableReader_42, outer key:test.t.a, inner key:test.t.a - ├─IndexReader_33(Build) 10.00 root index:IndexRangeScan_32 - │ └─IndexRangeScan_32 10.00 cop[tikv] table:s, index:idx(b) range: decided by [eq(test.t.b, test.t.a)], keep order:false, stats:pseudo - └─TableReader_42(Probe) 1.00 root data:TableRangeScan_41 - └─TableRangeScan_41 1.00 cop[tikv] table:t1 range: decided by [test.t.a], keep order:true, stats:pseudo + └─IndexJoin_36 12.50 root inner join, inner:TableReader_35, outer key:test.t.a, inner key:test.t.a + ├─IndexReader_29(Build) 10.00 root index:IndexRangeScan_28 + │ └─IndexRangeScan_28 10.00 cop[tikv] table:s, index:idx(b) range: decided by [eq(test.t.b, test.t.a)], keep order:false, stats:pseudo + └─TableReader_35(Probe) 1.00 root data:TableRangeScan_34 + └─TableRangeScan_34 1.00 cop[tikv] table:t1 range: decided by [test.t.a], keep order:false, stats:pseudo explain select t.c in (select count(*) from t s use index(idx), t t1 where s.b = t.a and s.c = t1.a) from t; id estRows task access object operator info Projection_11 10000.00 root Column#11 @@ -337,13 +337,13 @@ Projection_11 10000.00 root Column#11 ├─TableReader_15(Build) 10000.00 root data:TableFullScan_14 │ └─TableFullScan_14 10000.00 cop[tikv] table:t keep order:false, stats:pseudo └─StreamAgg_20(Probe) 1.00 root funcs:count(1)->Column#10 - └─IndexMergeJoin_46 12.49 root inner join, inner:TableReader_44, outer key:test.t.c, inner key:test.t.a - ├─IndexLookUp_35(Build) 9.99 root - │ ├─IndexRangeScan_32(Build) 10.00 cop[tikv] table:s, index:idx(b) range: decided by [eq(test.t.b, test.t.a)], keep order:false, stats:pseudo - │ └─Selection_34(Probe) 9.99 cop[tikv] not(isnull(test.t.c)) - │ └─TableRowIDScan_33 10.00 cop[tikv] table:s keep order:false, stats:pseudo - └─TableReader_44(Probe) 1.00 root data:TableRangeScan_43 - └─TableRangeScan_43 1.00 cop[tikv] table:t1 range: decided by [test.t.c], keep order:true, stats:pseudo + └─IndexJoin_38 12.49 root inner join, inner:TableReader_37, outer key:test.t.c, inner key:test.t.a + ├─IndexLookUp_31(Build) 9.99 root + │ ├─IndexRangeScan_28(Build) 10.00 cop[tikv] table:s, index:idx(b) range: decided by [eq(test.t.b, test.t.a)], keep order:false, stats:pseudo + │ └─Selection_30(Probe) 9.99 cop[tikv] not(isnull(test.t.c)) + │ └─TableRowIDScan_29 10.00 cop[tikv] table:s keep order:false, stats:pseudo + └─TableReader_37(Probe) 1.00 root data:TableRangeScan_36 + └─TableRangeScan_36 1.00 cop[tikv] table:t1 range: decided by [test.t.c], keep order:false, stats:pseudo insert into t values(1, 1, 1), (2, 2 ,2), (3, 3, 3), (4, 3, 4),(5,3,5); analyze table t; explain select t.c in (select count(*) from t s, t t1 where s.b = t.a and s.b = 3 and s.a = t1.a) from t; @@ -353,13 +353,13 @@ Projection_11 5.00 root Column#11 ├─TableReader_15(Build) 5.00 root data:TableFullScan_14 │ └─TableFullScan_14 5.00 cop[tikv] table:t keep order:false └─StreamAgg_20(Probe) 1.00 root funcs:count(1)->Column#10 - └─MergeJoin_62 2.40 root inner join, left key:test.t.a, right key:test.t.a - ├─TableReader_52(Build) 4.00 root data:Selection_51 - │ └─Selection_51 4.00 cop[tikv] eq(3, test.t.a) - │ └─TableFullScan_50 5.00 cop[tikv] table:t1 keep order:true - └─IndexReader_49(Probe) 2.40 root index:Selection_48 - └─Selection_48 2.40 cop[tikv] eq(3, test.t.a) - └─IndexRangeScan_47 3.00 cop[tikv] table:s, index:idx(b) range:[3,3], keep order:true + └─MergeJoin_52 2.40 root inner join, left key:test.t.a, right key:test.t.a + ├─TableReader_42(Build) 4.00 root data:Selection_41 + │ └─Selection_41 4.00 cop[tikv] eq(3, test.t.a) + │ └─TableFullScan_40 5.00 cop[tikv] table:t1 keep order:true + └─IndexReader_39(Probe) 2.40 root index:Selection_38 + └─Selection_38 2.40 cop[tikv] eq(3, test.t.a) + └─IndexRangeScan_37 3.00 cop[tikv] table:s, index:idx(b) range:[3,3], keep order:true explain select t.c in (select count(*) from t s left join t t1 on s.a = t1.a where 3 = t.a and s.b = 3) from t; id estRows task access object operator info Projection_10 5.00 root Column#11 @@ -367,13 +367,13 @@ Projection_10 5.00 root Column#11 ├─TableReader_14(Build) 5.00 root data:TableFullScan_13 │ └─TableFullScan_13 5.00 cop[tikv] table:t keep order:false └─StreamAgg_19(Probe) 1.00 root funcs:count(1)->Column#10 - └─MergeJoin_50 2.40 root left outer join, left key:test.t.a, right key:test.t.a - ├─TableReader_40(Build) 4.00 root data:Selection_39 - │ └─Selection_39 4.00 cop[tikv] eq(3, test.t.a) - │ └─TableFullScan_38 5.00 cop[tikv] table:t1 keep order:true - └─IndexReader_37(Probe) 2.40 root index:Selection_36 - └─Selection_36 2.40 cop[tikv] eq(3, test.t.a) - └─IndexRangeScan_35 3.00 cop[tikv] table:s, index:idx(b) range:[3,3], keep order:true + └─MergeJoin_45 2.40 root left outer join, left key:test.t.a, right key:test.t.a + ├─TableReader_35(Build) 4.00 root data:Selection_34 + │ └─Selection_34 4.00 cop[tikv] eq(3, test.t.a) + │ └─TableFullScan_33 5.00 cop[tikv] table:t1 keep order:true + └─IndexReader_32(Probe) 2.40 root index:Selection_31 + └─Selection_31 2.40 cop[tikv] eq(3, test.t.a) + └─IndexRangeScan_30 3.00 cop[tikv] table:s, index:idx(b) range:[3,3], keep order:true explain select t.c in (select count(*) from t s right join t t1 on s.a = t1.a where 3 = t.a and t1.b = 3) from t; id estRows task access object operator info Projection_10 5.00 root Column#11 @@ -381,13 +381,13 @@ Projection_10 5.00 root Column#11 ├─TableReader_14(Build) 5.00 root data:TableFullScan_13 │ └─TableFullScan_13 5.00 cop[tikv] table:t keep order:false └─StreamAgg_19(Probe) 1.00 root funcs:count(1)->Column#10 - └─MergeJoin_49 2.40 root right outer join, left key:test.t.a, right key:test.t.a - ├─TableReader_36(Build) 4.00 root data:Selection_35 - │ └─Selection_35 4.00 cop[tikv] eq(3, test.t.a) - │ └─TableFullScan_34 5.00 cop[tikv] table:s keep order:true - └─IndexReader_39(Probe) 2.40 root index:Selection_38 - └─Selection_38 2.40 cop[tikv] eq(3, test.t.a) - └─IndexRangeScan_37 3.00 cop[tikv] table:t1, index:idx(b) range:[3,3], keep order:true + └─MergeJoin_44 2.40 root right outer join, left key:test.t.a, right key:test.t.a + ├─TableReader_31(Build) 4.00 root data:Selection_30 + │ └─Selection_30 4.00 cop[tikv] eq(3, test.t.a) + │ └─TableFullScan_29 5.00 cop[tikv] table:s keep order:true + └─IndexReader_34(Probe) 2.40 root index:Selection_33 + └─Selection_33 2.40 cop[tikv] eq(3, test.t.a) + └─IndexRangeScan_32 3.00 cop[tikv] table:t1, index:idx(b) range:[3,3], keep order:true drop table if exists t; create table t(a int unsigned); explain select t.a = '123455' from t; @@ -501,17 +501,17 @@ EXPLAIN SELECT COUNT(1) FROM (SELECT COALESCE(b.region_name, '不详') region_na id estRows task access object operator info StreamAgg_22 1.00 root funcs:count(1)->Column#22 └─HashAgg_25 1.00 root group by:Column#32, Column#33, Column#34, funcs:firstrow(1)->Column#31 - └─Projection_46 0.01 root Column#14, Column#15, coalesce(test.test02.region_name, 不详)->Column#34 - └─IndexMergeJoin_32 0.01 root left outer join, inner:TableReader_30, outer key:Column#16, inner key:test.test02.id - ├─Union_37(Build) 0.01 root - │ ├─Projection_38 0.00 root test.test01.stat_date, test.test01.show_date, test.test01.region_id - │ │ └─TableDual_39 0.00 root rows:0 - │ └─Projection_40 0.01 root test.test01.stat_date, test.test01.show_date, test.test01.region_id - │ └─TableReader_43 0.01 root data:Selection_42 - │ └─Selection_42 0.01 cop[tikv] eq(test.test01.period, 1), ge(test.test01.stat_date, 20191202), ge(test.test01.stat_date, 20191202), gt(cast(test.test01.registration_num), 0), le(test.test01.stat_date, 20191202), le(test.test01.stat_date, 20191202) - │ └─TableFullScan_41 10000.00 cop[tikv] table:test01 keep order:false, stats:pseudo - └─TableReader_30(Probe) 1.00 root data:TableRangeScan_29 - └─TableRangeScan_29 1.00 cop[tikv] table:b range: decided by [Column#16], keep order:true, stats:pseudo + └─Projection_42 0.01 root Column#14, Column#15, coalesce(test.test02.region_name, 不详)->Column#34 + └─IndexJoin_28 0.01 root left outer join, inner:TableReader_27, outer key:Column#16, inner key:test.test02.id + ├─Union_33(Build) 0.01 root + │ ├─Projection_34 0.00 root test.test01.stat_date, test.test01.show_date, test.test01.region_id + │ │ └─TableDual_35 0.00 root rows:0 + │ └─Projection_36 0.01 root test.test01.stat_date, test.test01.show_date, test.test01.region_id + │ └─TableReader_39 0.01 root data:Selection_38 + │ └─Selection_38 0.01 cop[tikv] eq(test.test01.period, 1), ge(test.test01.stat_date, 20191202), ge(test.test01.stat_date, 20191202), gt(cast(test.test01.registration_num), 0), le(test.test01.stat_date, 20191202), le(test.test01.stat_date, 20191202) + │ └─TableFullScan_37 10000.00 cop[tikv] table:test01 keep order:false, stats:pseudo + └─TableReader_27(Probe) 1.00 root data:TableRangeScan_26 + └─TableRangeScan_26 1.00 cop[tikv] table:b range: decided by [Column#16], keep order:false, stats:pseudo drop table if exists t; create table t(a int, nb int not null, nc int not null); explain select ifnull(a, 0) from t; diff --git a/cmd/explaintest/r/explain_easy_stats.result b/cmd/explaintest/r/explain_easy_stats.result index 5a870f6ed80ae..d1f24db588973 100644 --- a/cmd/explaintest/r/explain_easy_stats.result +++ b/cmd/explaintest/r/explain_easy_stats.result @@ -46,12 +46,12 @@ IndexReader_6 0.00 root index:IndexRangeScan_5 └─IndexRangeScan_5 0.00 cop[tikv] table:t1, index:c2(c2) range:[1,1], keep order:false explain select * from t1 left join t2 on t1.c2 = t2.c1 where t1.c1 > 1; id estRows task access object operator info -HashJoin_22 2481.25 root left outer join, equal:[eq(test.t1.c2, test.t2.c1)] -├─TableReader_36(Build) 1985.00 root data:Selection_35 -│ └─Selection_35 1985.00 cop[tikv] not(isnull(test.t2.c1)) -│ └─TableFullScan_34 1985.00 cop[tikv] table:t2 keep order:false -└─TableReader_33(Probe) 1998.00 root data:TableRangeScan_32 - └─TableRangeScan_32 1998.00 cop[tikv] table:t1 range:(1,+inf], keep order:false +HashJoin_15 2481.25 root left outer join, equal:[eq(test.t1.c2, test.t2.c1)] +├─TableReader_29(Build) 1985.00 root data:Selection_28 +│ └─Selection_28 1985.00 cop[tikv] not(isnull(test.t2.c1)) +│ └─TableFullScan_27 1985.00 cop[tikv] table:t2 keep order:false +└─TableReader_26(Probe) 1998.00 root data:TableRangeScan_25 + └─TableRangeScan_25 1998.00 cop[tikv] table:t1 range:(1,+inf], keep order:false explain update t1 set t1.c2 = 2 where t1.c1 = 1; id estRows task access object operator info Update_2 N/A root N/A @@ -65,13 +65,13 @@ Delete_4 N/A root N/A explain select count(b.c2) from t1 a, t2 b where a.c1 = b.c2 group by a.c1; id estRows task access object operator info Projection_11 1985.00 root cast(Column#8, bigint(21) BINARY)->Column#7 -└─HashJoin_21 1985.00 root inner join, equal:[eq(test.t1.c1, test.t2.c2)] - ├─HashAgg_25(Build) 1985.00 root group by:test.t2.c2, funcs:count(test.t2.c2)->Column#8, funcs:firstrow(test.t2.c2)->test.t2.c2 - │ └─TableReader_32 1985.00 root data:Selection_31 - │ └─Selection_31 1985.00 cop[tikv] not(isnull(test.t2.c2)) - │ └─TableFullScan_30 1985.00 cop[tikv] table:b keep order:false - └─TableReader_34(Probe) 1999.00 root data:TableFullScan_33 - └─TableFullScan_33 1999.00 cop[tikv] table:a keep order:false +└─HashJoin_17 1985.00 root inner join, equal:[eq(test.t1.c1, test.t2.c2)] + ├─HashAgg_21(Build) 1985.00 root group by:test.t2.c2, funcs:count(test.t2.c2)->Column#8, funcs:firstrow(test.t2.c2)->test.t2.c2 + │ └─TableReader_28 1985.00 root data:Selection_27 + │ └─Selection_27 1985.00 cop[tikv] not(isnull(test.t2.c2)) + │ └─TableFullScan_26 1985.00 cop[tikv] table:b keep order:false + └─TableReader_30(Probe) 1999.00 root data:TableFullScan_29 + └─TableFullScan_29 1999.00 cop[tikv] table:a keep order:false explain select * from t2 order by t2.c2 limit 0, 1; id estRows task access object operator info TopN_7 1.00 root test.t2.c2:asc, offset:0, count:1 @@ -90,13 +90,13 @@ Selection_6 0.50 root gt(test.t1.c2, 1) └─Point_Get_5 1.00 root table:t1 handle:1 explain select c1 from t1 where c1 in (select c2 from t2); id estRows task access object operator info -HashJoin_19 1985.00 root inner join, equal:[eq(test.t1.c1, test.t2.c2)] -├─HashAgg_23(Build) 1985.00 root group by:test.t2.c2, funcs:firstrow(test.t2.c2)->test.t2.c2 -│ └─TableReader_30 1985.00 root data:Selection_29 -│ └─Selection_29 1985.00 cop[tikv] not(isnull(test.t2.c2)) -│ └─TableFullScan_28 1985.00 cop[tikv] table:t2 keep order:false -└─TableReader_32(Probe) 1999.00 root data:TableFullScan_31 - └─TableFullScan_31 1999.00 cop[tikv] table:t1 keep order:false +HashJoin_15 1985.00 root inner join, equal:[eq(test.t1.c1, test.t2.c2)] +├─HashAgg_19(Build) 1985.00 root group by:test.t2.c2, funcs:firstrow(test.t2.c2)->test.t2.c2 +│ └─TableReader_26 1985.00 root data:Selection_25 +│ └─Selection_25 1985.00 cop[tikv] not(isnull(test.t2.c2)) +│ └─TableFullScan_24 1985.00 cop[tikv] table:t2 keep order:false +└─TableReader_28(Probe) 1999.00 root data:TableFullScan_27 + └─TableFullScan_27 1999.00 cop[tikv] table:t1 keep order:false explain select * from information_schema.columns; id estRows task access object operator info MemTableScan_4 10000.00 root table:COLUMNS diff --git a/cmd/explaintest/r/explain_join_stats.result b/cmd/explaintest/r/explain_join_stats.result index 73bb6e2671ba4..92d8bdb095bbb 100644 --- a/cmd/explaintest/r/explain_join_stats.result +++ b/cmd/explaintest/r/explain_join_stats.result @@ -7,21 +7,21 @@ load stats 's/explain_join_stats_lo.json'; explain select count(*) from e, lo where lo.a=e.a and e.b=22336; id estRows task access object operator info StreamAgg_13 1.00 root funcs:count(1)->Column#5 -└─HashJoin_89 19977.00 root inner join, equal:[eq(test.lo.a, test.e.a)] - ├─TableReader_50(Build) 250.00 root data:TableFullScan_49 - │ └─TableFullScan_49 250.00 cop[tikv] table:lo keep order:false - └─IndexLookUp_61(Probe) 19977.00 root - ├─IndexRangeScan_58(Build) 19977.00 cop[tikv] table:e, index:idx_b(b) range:[22336,22336], keep order:false - └─Selection_60(Probe) 19977.00 cop[tikv] not(isnull(test.e.a)) - └─TableRowIDScan_59 19977.00 cop[tikv] table:e keep order:false +└─HashJoin_65 19977.00 root inner join, equal:[eq(test.lo.a, test.e.a)] + ├─TableReader_38(Build) 250.00 root data:TableFullScan_37 + │ └─TableFullScan_37 250.00 cop[tikv] table:lo keep order:false + └─IndexLookUp_49(Probe) 19977.00 root + ├─IndexRangeScan_46(Build) 19977.00 cop[tikv] table:e, index:idx_b(b) range:[22336,22336], keep order:false + └─Selection_48(Probe) 19977.00 cop[tikv] not(isnull(test.e.a)) + └─TableRowIDScan_47 19977.00 cop[tikv] table:e keep order:false explain select /*+ TIDB_INLJ(e) */ count(*) from e, lo where lo.a=e.a and e.b=22336; id estRows task access object operator info StreamAgg_12 1.00 root funcs:count(1)->Column#5 -└─IndexJoin_56 19977.00 root inner join, inner:IndexLookUp_55, outer key:test.lo.a, inner key:test.e.a - ├─TableReader_40(Build) 250.00 root data:TableFullScan_39 - │ └─TableFullScan_39 250.00 cop[tikv] table:lo keep order:false - └─IndexLookUp_55(Probe) 79.91 root - ├─Selection_53(Build) 4080.00 cop[tikv] not(isnull(test.e.a)) - │ └─IndexRangeScan_51 4080.00 cop[tikv] table:e, index:idx_a(a) range: decided by [eq(test.e.a, test.lo.a)], keep order:false - └─Selection_54(Probe) 79.91 cop[tikv] eq(test.e.b, 22336) - └─TableRowIDScan_52 4080.00 cop[tikv] table:e keep order:false +└─IndexJoin_40 19977.00 root inner join, inner:IndexLookUp_39, outer key:test.lo.a, inner key:test.e.a + ├─TableReader_28(Build) 250.00 root data:TableFullScan_27 + │ └─TableFullScan_27 250.00 cop[tikv] table:lo keep order:false + └─IndexLookUp_39(Probe) 79.91 root + ├─Selection_37(Build) 4080.00 cop[tikv] not(isnull(test.e.a)) + │ └─IndexRangeScan_35 4080.00 cop[tikv] table:e, index:idx_a(a) range: decided by [eq(test.e.a, test.lo.a)], keep order:false + └─Selection_38(Probe) 79.91 cop[tikv] eq(test.e.b, 22336) + └─TableRowIDScan_36 4080.00 cop[tikv] table:e keep order:false diff --git a/cmd/explaintest/r/generated_columns.result b/cmd/explaintest/r/generated_columns.result index b7e5a7f68c76c..514e69fb2896d 100644 --- a/cmd/explaintest/r/generated_columns.result +++ b/cmd/explaintest/r/generated_columns.result @@ -71,24 +71,24 @@ VALUES ('{"a": 1}', '{"1": "1"}'); ANALYZE TABLE sgc1, sgc2; EXPLAIN SELECT /*+ TIDB_INLJ(sgc1, sgc2) */ * from sgc1 join sgc2 on sgc1.a=sgc2.a; id estRows task access object operator info -IndexJoin_26 5.00 root inner join, inner:IndexLookUp_25, outer key:test.sgc2.a, inner key:test.sgc1.a -├─TableReader_47(Build) 1.00 root data:Selection_46 -│ └─Selection_46 1.00 cop[tikv] not(isnull(test.sgc2.a)) -│ └─TableFullScan_45 1.00 cop[tikv] table:sgc2 keep order:false -└─IndexLookUp_25(Probe) 5.00 root - ├─Selection_24(Build) 5.00 cop[tikv] not(isnull(test.sgc1.a)) - │ └─IndexRangeScan_22 5.00 cop[tikv] table:sgc1, index:idx_a(a) range: decided by [eq(test.sgc1.a, test.sgc2.a)], keep order:false - └─TableRowIDScan_23(Probe) 5.00 cop[tikv] table:sgc1 keep order:false +IndexJoin_19 5.00 root inner join, inner:IndexLookUp_18, outer key:test.sgc2.a, inner key:test.sgc1.a +├─TableReader_33(Build) 1.00 root data:Selection_32 +│ └─Selection_32 1.00 cop[tikv] not(isnull(test.sgc2.a)) +│ └─TableFullScan_31 1.00 cop[tikv] table:sgc2 keep order:false +└─IndexLookUp_18(Probe) 5.00 root + ├─Selection_17(Build) 5.00 cop[tikv] not(isnull(test.sgc1.a)) + │ └─IndexRangeScan_15 5.00 cop[tikv] table:sgc1, index:idx_a(a) range: decided by [eq(test.sgc1.a, test.sgc2.a)], keep order:false + └─TableRowIDScan_16(Probe) 5.00 cop[tikv] table:sgc1 keep order:false EXPLAIN SELECT * from sgc1 join sgc2 on sgc1.a=sgc2.a; id estRows task access object operator info Projection_6 5.00 root test.sgc1.j1, test.sgc1.j2, test.sgc1.a, test.sgc1.b, test.sgc2.j1, test.sgc2.j2, test.sgc2.a, test.sgc2.b -└─HashJoin_38 5.00 root inner join, equal:[eq(test.sgc2.a, test.sgc1.a)] - ├─TableReader_57(Build) 1.00 root data:Selection_56 - │ └─Selection_56 1.00 cop[tikv] not(isnull(test.sgc2.a)) - │ └─TableFullScan_55 1.00 cop[tikv] table:sgc2 keep order:false - └─TableReader_66(Probe) 5.00 root data:Selection_65 - └─Selection_65 5.00 cop[tikv] not(isnull(test.sgc1.a)) - └─TableFullScan_64 5.00 cop[tikv] table:sgc1 keep order:false +└─HashJoin_24 5.00 root inner join, equal:[eq(test.sgc2.a, test.sgc1.a)] + ├─TableReader_43(Build) 1.00 root data:Selection_42 + │ └─Selection_42 1.00 cop[tikv] not(isnull(test.sgc2.a)) + │ └─TableFullScan_41 1.00 cop[tikv] table:sgc2 keep order:false + └─TableReader_52(Probe) 5.00 root data:Selection_51 + └─Selection_51 5.00 cop[tikv] not(isnull(test.sgc1.a)) + └─TableFullScan_50 5.00 cop[tikv] table:sgc1 keep order:false DROP TABLE IF EXISTS sgc3; CREATE TABLE sgc3 ( j JSON, diff --git a/cmd/explaintest/r/index_join.result b/cmd/explaintest/r/index_join.result index 851d74e672c43..d46b281674003 100644 --- a/cmd/explaintest/r/index_join.result +++ b/cmd/explaintest/r/index_join.result @@ -8,24 +8,24 @@ set session tidb_hashagg_partial_concurrency = 1; set session tidb_hashagg_final_concurrency = 1; explain select /*+ TIDB_INLJ(t1, t2) */ * from t1 join t2 on t1.a=t2.a; id estRows task access object operator info -IndexJoin_25 5.00 root inner join, inner:IndexLookUp_24, outer key:test.t2.a, inner key:test.t1.a -├─TableReader_43(Build) 1.00 root data:Selection_42 -│ └─Selection_42 1.00 cop[tikv] not(isnull(test.t2.a)) -│ └─TableFullScan_41 1.00 cop[tikv] table:t2 keep order:false -└─IndexLookUp_24(Probe) 5.00 root - ├─Selection_23(Build) 5.00 cop[tikv] not(isnull(test.t1.a)) - │ └─IndexRangeScan_21 5.00 cop[tikv] table:t1, index:idx(a) range: decided by [eq(test.t1.a, test.t2.a)], keep order:false - └─TableRowIDScan_22(Probe) 5.00 cop[tikv] table:t1 keep order:false +IndexJoin_18 5.00 root inner join, inner:IndexLookUp_17, outer key:test.t2.a, inner key:test.t1.a +├─TableReader_29(Build) 1.00 root data:Selection_28 +│ └─Selection_28 1.00 cop[tikv] not(isnull(test.t2.a)) +│ └─TableFullScan_27 1.00 cop[tikv] table:t2 keep order:false +└─IndexLookUp_17(Probe) 5.00 root + ├─Selection_16(Build) 5.00 cop[tikv] not(isnull(test.t1.a)) + │ └─IndexRangeScan_14 5.00 cop[tikv] table:t1, index:idx(a) range: decided by [eq(test.t1.a, test.t2.a)], keep order:false + └─TableRowIDScan_15(Probe) 5.00 cop[tikv] table:t1 keep order:false explain select * from t1 join t2 on t1.a=t2.a; id estRows task access object operator info Projection_6 5.00 root test.t1.a, test.t1.b, test.t2.a, test.t2.b -└─HashJoin_37 5.00 root inner join, equal:[eq(test.t2.a, test.t1.a)] - ├─TableReader_48(Build) 1.00 root data:Selection_47 - │ └─Selection_47 1.00 cop[tikv] not(isnull(test.t2.a)) - │ └─TableFullScan_46 1.00 cop[tikv] table:t2 keep order:false - └─TableReader_54(Probe) 5.00 root data:Selection_53 - └─Selection_53 5.00 cop[tikv] not(isnull(test.t1.a)) - └─TableFullScan_52 5.00 cop[tikv] table:t1 keep order:false +└─HashJoin_23 5.00 root inner join, equal:[eq(test.t2.a, test.t1.a)] + ├─TableReader_34(Build) 1.00 root data:Selection_33 + │ └─Selection_33 1.00 cop[tikv] not(isnull(test.t2.a)) + │ └─TableFullScan_32 1.00 cop[tikv] table:t2 keep order:false + └─TableReader_40(Probe) 5.00 root data:Selection_39 + └─Selection_39 5.00 cop[tikv] not(isnull(test.t1.a)) + └─TableFullScan_38 5.00 cop[tikv] table:t1 keep order:false drop table if exists t1, t2; create table t1(a int not null, b int not null); create table t2(a int not null, b int not null, key a(a)); @@ -33,8 +33,8 @@ set @@tidb_opt_insubq_to_join_and_agg=0; explain select /*+ TIDB_INLJ(t2@sel_2) */ * from t1 where t1.a in (select t2.a from t2); id estRows task access object operator info IndexJoin_10 8000.00 root semi join, inner:IndexReader_9, outer key:test.t1.a, inner key:test.t2.a -├─TableReader_18(Build) 10000.00 root data:TableFullScan_17 -│ └─TableFullScan_17 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo +├─TableReader_14(Build) 10000.00 root data:TableFullScan_13 +│ └─TableFullScan_13 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo └─IndexReader_9(Probe) 1.25 root index:IndexRangeScan_8 └─IndexRangeScan_8 1.25 cop[tikv] table:t2, index:a(a) range: decided by [eq(test.t2.a, test.t1.a)], keep order:false, stats:pseudo show warnings; @@ -46,9 +46,9 @@ create table t2(a int not null, b int not null, key a(a)); explain select /*+ TIDB_INLJ(t1) */ * from t1 where t1.a in (select t2.a from t2); id estRows task access object operator info IndexJoin_13 10000.00 root inner join, inner:IndexLookUp_12, outer key:test.t2.a, inner key:test.t1.a -├─StreamAgg_26(Build) 8000.00 root group by:test.t2.a, funcs:firstrow(test.t2.a)->test.t2.a -│ └─IndexReader_39 10000.00 root index:IndexFullScan_38 -│ └─IndexFullScan_38 10000.00 cop[tikv] table:t2, index:a(a) keep order:true, stats:pseudo +├─StreamAgg_20(Build) 8000.00 root group by:test.t2.a, funcs:firstrow(test.t2.a)->test.t2.a +│ └─IndexReader_33 10000.00 root index:IndexFullScan_32 +│ └─IndexFullScan_32 10000.00 cop[tikv] table:t2, index:a(a) keep order:true, stats:pseudo └─IndexLookUp_12(Probe) 1.25 root ├─IndexRangeScan_10(Build) 1.25 cop[tikv] table:t1, index:a(a) range: decided by [eq(test.t1.a, test.t2.a)], keep order:false, stats:pseudo └─TableRowIDScan_11(Probe) 1.25 cop[tikv] table:t1 keep order:false, stats:pseudo diff --git a/cmd/explaintest/r/subquery.result b/cmd/explaintest/r/subquery.result index 488c727bfcc44..d5c492e6de2fb 100644 --- a/cmd/explaintest/r/subquery.result +++ b/cmd/explaintest/r/subquery.result @@ -22,11 +22,11 @@ Projection_11 5.00 root Column#14 ├─TableReader_15(Build) 5.00 root data:TableFullScan_14 │ └─TableFullScan_14 5.00 cop[tikv] table:t keep order:false └─StreamAgg_22(Probe) 1.00 root funcs:count(1)->Column#13 - └─IndexMergeJoin_29 0.50 root inner join, inner:TableReader_27, outer key:test.t.a, inner key:test.t.a - ├─IndexReader_35(Build) 1.00 root index:IndexRangeScan_34 - │ └─IndexRangeScan_34 1.00 cop[tikv] table:s, index:idx(b, c, d) range: decided by [eq(test.t.b, 1) eq(test.t.c, 1) eq(test.t.d, test.t.a)], keep order:false - └─TableReader_27(Probe) 1.00 root data:TableRangeScan_26 - └─TableRangeScan_26 1.00 cop[tikv] table:t1 range: decided by [test.t.a], keep order:true + └─IndexJoin_25 0.50 root inner join, inner:TableReader_24, outer key:test.t.a, inner key:test.t.a + ├─IndexReader_31(Build) 1.00 root index:IndexRangeScan_30 + │ └─IndexRangeScan_30 1.00 cop[tikv] table:s, index:idx(b, c, d) range: decided by [eq(test.t.b, 1) eq(test.t.c, 1) eq(test.t.d, test.t.a)], keep order:false + └─TableReader_24(Probe) 1.00 root data:TableRangeScan_23 + └─TableRangeScan_23 1.00 cop[tikv] table:t1 range: decided by [test.t.a], keep order:false drop table if exists t; create table t(a int, b int, c int); explain select a from t t1 where t1.a = (select max(t2.a) from t t2 where t1.b=t2.b and t1.c=t2.b); diff --git a/cmd/explaintest/r/topn_push_down.result b/cmd/explaintest/r/topn_push_down.result index 926a4a7e0c2ad..fa854a84728d2 100644 --- a/cmd/explaintest/r/topn_push_down.result +++ b/cmd/explaintest/r/topn_push_down.result @@ -168,22 +168,21 @@ ORDER BY te.expect_time asc LIMIT 0, 5; id estRows task access object operator info Limit_19 0.00 root offset:0, count:5 -└─IndexJoin_118 0.00 root left outer join, inner:IndexReader_117, outer key:test.tr.id, inner key:test.p.relate_id - ├─TopN_127(Build) 0.00 root test.te.expect_time:asc, offset:0, count:5 - │ └─IndexMergeJoin_51 0.00 root inner join, inner:Projection_49, outer key:test.tr.id, inner key:test.te.trade_id - │ ├─IndexLookUp_98(Build) 0.00 root - │ │ ├─Selection_96(Build) 0.00 cop[tikv] eq(test.tr.business_type, 18), eq(test.tr.trade_type, 1) - │ │ │ └─IndexRangeScan_94 10.00 cop[tikv] table:tr, index:idx_shop_identy_trade_status_business_type(shop_identy, trade_status, business_type, trade_pay_status, trade_type, delivery_type, source, biz_date) range:[810094178,810094178], keep order:false, stats:pseudo - │ │ └─Selection_97(Probe) 0.00 cop[tikv] eq(test.tr.brand_identy, 32314), eq(test.tr.domain_type, 2) - │ │ └─TableRowIDScan_95 0.00 cop[tikv] table:tr keep order:false, stats:pseudo - │ └─Projection_49(Probe) 1.25 root test.te.trade_id, test.te.expect_time - │ └─IndexLookUp_48 1.25 root - │ ├─IndexRangeScan_45(Build) 50.00 cop[tikv] table:te, index:idx_trade_id(trade_id) range: decided by [eq(test.te.trade_id, test.tr.id)], keep order:true, stats:pseudo - │ └─Selection_47(Probe) 1.25 cop[tikv] ge(test.te.expect_time, 2018-04-23 00:00:00.000000), le(test.te.expect_time, 2018-04-23 23:59:59.000000) - │ └─TableRowIDScan_46 50.00 cop[tikv] table:te keep order:false, stats:pseudo - └─IndexReader_117(Probe) 1.25 root index:Selection_116 - └─Selection_116 1.25 cop[tikv] not(isnull(test.p.relate_id)) - └─IndexRangeScan_115 1.25 cop[tikv] table:p, index:payment_relate_id(relate_id) range: decided by [eq(test.p.relate_id, test.tr.id)], keep order:false, stats:pseudo +└─IndexJoin_97 0.00 root left outer join, inner:IndexReader_96, outer key:test.tr.id, inner key:test.p.relate_id + ├─TopN_102(Build) 0.00 root test.te.expect_time:asc, offset:0, count:5 + │ └─IndexJoin_39 0.00 root inner join, inner:IndexLookUp_38, outer key:test.tr.id, inner key:test.te.trade_id + │ ├─IndexLookUp_81(Build) 0.00 root + │ │ ├─Selection_79(Build) 0.00 cop[tikv] eq(test.tr.business_type, 18), eq(test.tr.trade_type, 1) + │ │ │ └─IndexRangeScan_77 10.00 cop[tikv] table:tr, index:idx_shop_identy_trade_status_business_type(shop_identy, trade_status, business_type, trade_pay_status, trade_type, delivery_type, source, biz_date) range:[810094178,810094178], keep order:false, stats:pseudo + │ │ └─Selection_80(Probe) 0.00 cop[tikv] eq(test.tr.brand_identy, 32314), eq(test.tr.domain_type, 2) + │ │ └─TableRowIDScan_78 0.00 cop[tikv] table:tr keep order:false, stats:pseudo + │ └─IndexLookUp_38(Probe) 1.25 root + │ ├─IndexRangeScan_35(Build) 50.00 cop[tikv] table:te, index:idx_trade_id(trade_id) range: decided by [eq(test.te.trade_id, test.tr.id)], keep order:false, stats:pseudo + │ └─Selection_37(Probe) 1.25 cop[tikv] ge(test.te.expect_time, 2018-04-23 00:00:00.000000), le(test.te.expect_time, 2018-04-23 23:59:59.000000) + │ └─TableRowIDScan_36 50.00 cop[tikv] table:te keep order:false, stats:pseudo + └─IndexReader_96(Probe) 1.25 root index:Selection_95 + └─Selection_95 1.25 cop[tikv] not(isnull(test.p.relate_id)) + └─IndexRangeScan_94 1.25 cop[tikv] table:p, index:payment_relate_id(relate_id) range: decided by [eq(test.p.relate_id, test.tr.id)], keep order:false, stats:pseudo desc select 1 as a from dual order by a limit 1; id estRows task access object operator info Projection_6 1.00 root 1->Column#1 @@ -223,8 +222,8 @@ explain select /*+ TIDB_INLJ(t2) */ * from t t1 join t t2 on t1.a = t2.a limit 5 id estRows task access object operator info Limit_11 5.00 root offset:0, count:5 └─IndexJoin_15 5.00 root inner join, inner:IndexReader_14, outer key:test.t.a, inner key:test.t.a - ├─TableReader_23(Build) 4.00 root data:TableFullScan_22 - │ └─TableFullScan_22 4.00 cop[tikv] table:t1 keep order:false, stats:pseudo + ├─TableReader_19(Build) 4.00 root data:TableFullScan_18 + │ └─TableFullScan_18 4.00 cop[tikv] table:t1 keep order:false, stats:pseudo └─IndexReader_14(Probe) 1.25 root index:IndexRangeScan_13 └─IndexRangeScan_13 1.25 cop[tikv] table:t2, index:idx(a) range: decided by [eq(test.t.a, test.t.a)], keep order:false, stats:pseudo explain select /*+ TIDB_INLJ(t2) */ * from t t1 left join t t2 on t1.a = t2.a where t2.a is null limit 5; @@ -232,8 +231,8 @@ id estRows task access object operator info Limit_12 5.00 root offset:0, count:5 └─Selection_13 5.00 root isnull(test.t.a) └─IndexJoin_17 5.00 root left outer join, inner:IndexReader_16, outer key:test.t.a, inner key:test.t.a - ├─TableReader_25(Build) 4.00 root data:TableFullScan_24 - │ └─TableFullScan_24 4.00 cop[tikv] table:t1 keep order:false, stats:pseudo + ├─TableReader_21(Build) 4.00 root data:TableFullScan_20 + │ └─TableFullScan_20 4.00 cop[tikv] table:t1 keep order:false, stats:pseudo └─IndexReader_16(Probe) 1.25 root index:IndexRangeScan_15 └─IndexRangeScan_15 1.25 cop[tikv] table:t2, index:idx(a) range: decided by [eq(test.t.a, test.t.a)], keep order:false, stats:pseudo explain select /*+ TIDB_SMJ(t1, t2) */ * from t t1 join t t2 on t1.a = t2.a limit 5; @@ -256,17 +255,17 @@ Limit_12 5.00 root offset:0, count:5 explain select /*+ TIDB_HJ(t1, t2) */ * from t t1 join t t2 on t1.a = t2.a limit 5; id estRows task access object operator info Limit_11 5.00 root offset:0, count:5 -└─HashJoin_31 5.00 root inner join, equal:[eq(test.t.a, test.t.a)] - ├─TableReader_38(Build) 10000.00 root data:TableFullScan_37 - │ └─TableFullScan_37 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo - └─TableReader_34(Probe) 4.00 root data:TableFullScan_33 - └─TableFullScan_33 4.00 cop[tikv] table:t1 keep order:false, stats:pseudo +└─HashJoin_23 5.00 root inner join, equal:[eq(test.t.a, test.t.a)] + ├─TableReader_30(Build) 10000.00 root data:TableFullScan_29 + │ └─TableFullScan_29 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo + └─TableReader_26(Probe) 4.00 root data:TableFullScan_25 + └─TableFullScan_25 4.00 cop[tikv] table:t1 keep order:false, stats:pseudo explain select /*+ TIDB_HJ(t1, t2) */ * from t t1 left join t t2 on t1.a = t2.a where t2.a is null limit 5; id estRows task access object operator info Limit_12 5.00 root offset:0, count:5 └─Selection_13 5.00 root isnull(test.t.a) - └─HashJoin_25 5.00 root left outer join, equal:[eq(test.t.a, test.t.a)] - ├─TableReader_27(Build) 4.00 root data:TableFullScan_26 - │ └─TableFullScan_26 4.00 cop[tikv] table:t1 keep order:false, stats:pseudo - └─TableReader_31(Probe) 10000.00 root data:TableFullScan_30 - └─TableFullScan_30 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo + └─HashJoin_21 5.00 root left outer join, equal:[eq(test.t.a, test.t.a)] + ├─TableReader_23(Build) 4.00 root data:TableFullScan_22 + │ └─TableFullScan_22 4.00 cop[tikv] table:t1 keep order:false, stats:pseudo + └─TableReader_27(Probe) 10000.00 root data:TableFullScan_26 + └─TableFullScan_26 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo diff --git a/cmd/explaintest/r/tpch.result b/cmd/explaintest/r/tpch.result index 54f666aa67496..437fbf5b161b4 100644 --- a/cmd/explaintest/r/tpch.result +++ b/cmd/explaintest/r/tpch.result @@ -185,36 +185,36 @@ id estRows task access object operator info Projection_37 100.00 root tpch.supplier.s_acctbal, tpch.supplier.s_name, tpch.nation.n_name, tpch.part.p_partkey, tpch.part.p_mfgr, tpch.supplier.s_address, tpch.supplier.s_phone, tpch.supplier.s_comment └─TopN_40 100.00 root tpch.supplier.s_acctbal:desc, tpch.nation.n_name:asc, tpch.supplier.s_name:asc, tpch.part.p_partkey:asc, offset:0, count:100 └─HashJoin_46 155496.00 root inner join, equal:[eq(tpch.part.p_partkey, tpch.partsupp.ps_partkey) eq(tpch.partsupp.ps_supplycost, Column#50)] - ├─HashJoin_60(Build) 155496.00 root inner join, equal:[eq(tpch.partsupp.ps_partkey, tpch.part.p_partkey)] - │ ├─TableReader_90(Build) 155496.00 root data:Selection_89 - │ │ └─Selection_89 155496.00 cop[tikv] eq(tpch.part.p_size, 30), like(tpch.part.p_type, "%STEEL", 92) - │ │ └─TableFullScan_88 10000000.00 cop[tikv] table:part keep order:false - │ └─HashJoin_63(Probe) 8155010.44 root inner join, equal:[eq(tpch.supplier.s_suppkey, tpch.partsupp.ps_suppkey)] - │ ├─HashJoin_65(Build) 100000.00 root inner join, equal:[eq(tpch.nation.n_nationkey, tpch.supplier.s_nationkey)] - │ │ ├─HashJoin_78(Build) 5.00 root inner join, equal:[eq(tpch.region.r_regionkey, tpch.nation.n_regionkey)] - │ │ │ ├─TableReader_83(Build) 1.00 root data:Selection_82 - │ │ │ │ └─Selection_82 1.00 cop[tikv] eq(tpch.region.r_name, "ASIA") - │ │ │ │ └─TableFullScan_81 5.00 cop[tikv] table:region keep order:false - │ │ │ └─TableReader_80(Probe) 25.00 root data:TableFullScan_79 - │ │ │ └─TableFullScan_79 25.00 cop[tikv] table:nation keep order:false - │ │ └─TableReader_85(Probe) 500000.00 root data:TableFullScan_84 - │ │ └─TableFullScan_84 500000.00 cop[tikv] table:supplier keep order:false - │ └─TableReader_87(Probe) 40000000.00 root data:TableFullScan_86 - │ └─TableFullScan_86 40000000.00 cop[tikv] table:partsupp keep order:false - └─Selection_91(Probe) 6524008.35 root not(isnull(Column#50)) - └─HashAgg_94 8155010.44 root group by:tpch.partsupp.ps_partkey, funcs:min(tpch.partsupp.ps_supplycost)->Column#50, funcs:firstrow(tpch.partsupp.ps_partkey)->tpch.partsupp.ps_partkey - └─HashJoin_98 8155010.44 root inner join, equal:[eq(tpch.supplier.s_suppkey, tpch.partsupp.ps_suppkey)] - ├─HashJoin_100(Build) 100000.00 root inner join, equal:[eq(tpch.nation.n_nationkey, tpch.supplier.s_nationkey)] - │ ├─HashJoin_113(Build) 5.00 root inner join, equal:[eq(tpch.region.r_regionkey, tpch.nation.n_regionkey)] - │ │ ├─TableReader_118(Build) 1.00 root data:Selection_117 - │ │ │ └─Selection_117 1.00 cop[tikv] eq(tpch.region.r_name, "ASIA") - │ │ │ └─TableFullScan_116 5.00 cop[tikv] table:region keep order:false - │ │ └─TableReader_115(Probe) 25.00 root data:TableFullScan_114 - │ │ └─TableFullScan_114 25.00 cop[tikv] table:nation keep order:false - │ └─TableReader_120(Probe) 500000.00 root data:TableFullScan_119 - │ └─TableFullScan_119 500000.00 cop[tikv] table:supplier keep order:false - └─TableReader_122(Probe) 40000000.00 root data:TableFullScan_121 - └─TableFullScan_121 40000000.00 cop[tikv] table:partsupp keep order:false + ├─HashJoin_55(Build) 155496.00 root inner join, equal:[eq(tpch.partsupp.ps_partkey, tpch.part.p_partkey)] + │ ├─TableReader_80(Build) 155496.00 root data:Selection_79 + │ │ └─Selection_79 155496.00 cop[tikv] eq(tpch.part.p_size, 30), like(tpch.part.p_type, "%STEEL", 92) + │ │ └─TableFullScan_78 10000000.00 cop[tikv] table:part keep order:false + │ └─HashJoin_58(Probe) 8155010.44 root inner join, equal:[eq(tpch.supplier.s_suppkey, tpch.partsupp.ps_suppkey)] + │ ├─HashJoin_60(Build) 100000.00 root inner join, equal:[eq(tpch.nation.n_nationkey, tpch.supplier.s_nationkey)] + │ │ ├─HashJoin_68(Build) 5.00 root inner join, equal:[eq(tpch.region.r_regionkey, tpch.nation.n_regionkey)] + │ │ │ ├─TableReader_73(Build) 1.00 root data:Selection_72 + │ │ │ │ └─Selection_72 1.00 cop[tikv] eq(tpch.region.r_name, "ASIA") + │ │ │ │ └─TableFullScan_71 5.00 cop[tikv] table:region keep order:false + │ │ │ └─TableReader_70(Probe) 25.00 root data:TableFullScan_69 + │ │ │ └─TableFullScan_69 25.00 cop[tikv] table:nation keep order:false + │ │ └─TableReader_75(Probe) 500000.00 root data:TableFullScan_74 + │ │ └─TableFullScan_74 500000.00 cop[tikv] table:supplier keep order:false + │ └─TableReader_77(Probe) 40000000.00 root data:TableFullScan_76 + │ └─TableFullScan_76 40000000.00 cop[tikv] table:partsupp keep order:false + └─Selection_81(Probe) 6524008.35 root not(isnull(Column#50)) + └─HashAgg_84 8155010.44 root group by:tpch.partsupp.ps_partkey, funcs:min(tpch.partsupp.ps_supplycost)->Column#50, funcs:firstrow(tpch.partsupp.ps_partkey)->tpch.partsupp.ps_partkey + └─HashJoin_88 8155010.44 root inner join, equal:[eq(tpch.supplier.s_suppkey, tpch.partsupp.ps_suppkey)] + ├─HashJoin_90(Build) 100000.00 root inner join, equal:[eq(tpch.nation.n_nationkey, tpch.supplier.s_nationkey)] + │ ├─HashJoin_98(Build) 5.00 root inner join, equal:[eq(tpch.region.r_regionkey, tpch.nation.n_regionkey)] + │ │ ├─TableReader_103(Build) 1.00 root data:Selection_102 + │ │ │ └─Selection_102 1.00 cop[tikv] eq(tpch.region.r_name, "ASIA") + │ │ │ └─TableFullScan_101 5.00 cop[tikv] table:region keep order:false + │ │ └─TableReader_100(Probe) 25.00 root data:TableFullScan_99 + │ │ └─TableFullScan_99 25.00 cop[tikv] table:nation keep order:false + │ └─TableReader_105(Probe) 500000.00 root data:TableFullScan_104 + │ └─TableFullScan_104 500000.00 cop[tikv] table:supplier keep order:false + └─TableReader_107(Probe) 40000000.00 root data:TableFullScan_106 + └─TableFullScan_106 40000000.00 cop[tikv] table:partsupp keep order:false /* Q3 Shipping Priority Query This query retrieves the 10 unshipped orders with the highest value. @@ -251,19 +251,19 @@ limit 10; id estRows task access object operator info Projection_14 10.00 root tpch.lineitem.l_orderkey, Column#35, tpch.orders.o_orderdate, tpch.orders.o_shippriority └─TopN_17 10.00 root Column#35:desc, tpch.orders.o_orderdate:asc, offset:0, count:10 - └─HashAgg_23 40252367.98 root group by:Column#48, Column#49, Column#50, funcs:sum(Column#44)->Column#35, funcs:firstrow(Column#45)->tpch.orders.o_orderdate, funcs:firstrow(Column#46)->tpch.orders.o_shippriority, funcs:firstrow(Column#47)->tpch.lineitem.l_orderkey - └─Projection_81 91515927.49 root mul(tpch.lineitem.l_extendedprice, minus(1, tpch.lineitem.l_discount))->Column#44, tpch.orders.o_orderdate, tpch.orders.o_shippriority, tpch.lineitem.l_orderkey, tpch.lineitem.l_orderkey, tpch.orders.o_orderdate, tpch.orders.o_shippriority - └─HashJoin_40 91515927.49 root inner join, equal:[eq(tpch.orders.o_orderkey, tpch.lineitem.l_orderkey)] - ├─HashJoin_71(Build) 22592975.51 root inner join, equal:[eq(tpch.customer.c_custkey, tpch.orders.o_custkey)] - │ ├─TableReader_77(Build) 1498236.00 root data:Selection_76 - │ │ └─Selection_76 1498236.00 cop[tikv] eq(tpch.customer.c_mktsegment, "AUTOMOBILE") - │ │ └─TableFullScan_75 7500000.00 cop[tikv] table:customer keep order:false - │ └─TableReader_74(Probe) 36870000.00 root data:Selection_73 - │ └─Selection_73 36870000.00 cop[tikv] lt(tpch.orders.o_orderdate, 1995-03-13 00:00:00.000000) - │ └─TableFullScan_72 75000000.00 cop[tikv] table:orders keep order:false - └─TableReader_80(Probe) 163047704.27 root data:Selection_79 - └─Selection_79 163047704.27 cop[tikv] gt(tpch.lineitem.l_shipdate, 1995-03-13 00:00:00.000000) - └─TableFullScan_78 300005811.00 cop[tikv] table:lineitem keep order:false + └─HashAgg_23 40252367.98 root group by:Column#45, Column#46, Column#47, funcs:sum(Column#41)->Column#35, funcs:firstrow(Column#42)->tpch.orders.o_orderdate, funcs:firstrow(Column#43)->tpch.orders.o_shippriority, funcs:firstrow(Column#44)->tpch.lineitem.l_orderkey + └─Projection_65 91515927.49 root mul(tpch.lineitem.l_extendedprice, minus(1, tpch.lineitem.l_discount))->Column#41, tpch.orders.o_orderdate, tpch.orders.o_shippriority, tpch.lineitem.l_orderkey, tpch.lineitem.l_orderkey, tpch.orders.o_orderdate, tpch.orders.o_shippriority + └─HashJoin_33 91515927.49 root inner join, equal:[eq(tpch.orders.o_orderkey, tpch.lineitem.l_orderkey)] + ├─HashJoin_55(Build) 22592975.51 root inner join, equal:[eq(tpch.customer.c_custkey, tpch.orders.o_custkey)] + │ ├─TableReader_61(Build) 1498236.00 root data:Selection_60 + │ │ └─Selection_60 1498236.00 cop[tikv] eq(tpch.customer.c_mktsegment, "AUTOMOBILE") + │ │ └─TableFullScan_59 7500000.00 cop[tikv] table:customer keep order:false + │ └─TableReader_58(Probe) 36870000.00 root data:Selection_57 + │ └─Selection_57 36870000.00 cop[tikv] lt(tpch.orders.o_orderdate, 1995-03-13 00:00:00.000000) + │ └─TableFullScan_56 75000000.00 cop[tikv] table:orders keep order:false + └─TableReader_64(Probe) 163047704.27 root data:Selection_63 + └─Selection_63 163047704.27 cop[tikv] gt(tpch.lineitem.l_shipdate, 1995-03-13 00:00:00.000000) + └─TableFullScan_62 300005811.00 cop[tikv] table:lineitem keep order:false /* Q4 Order Priority Checking Query This query determines how well the order priority system is working and gives an assessment of customer satisfaction. @@ -297,10 +297,10 @@ id estRows task access object operator info Sort_10 1.00 root tpch.orders.o_orderpriority:asc └─Projection_12 1.00 root tpch.orders.o_orderpriority, Column#27 └─HashAgg_15 1.00 root group by:tpch.orders.o_orderpriority, funcs:count(1)->Column#27, funcs:firstrow(tpch.orders.o_orderpriority)->tpch.orders.o_orderpriority - └─IndexHashJoin_30 2340750.00 root semi join, inner:IndexLookUp_20, outer key:tpch.orders.o_orderkey, inner key:tpch.lineitem.l_orderkey - ├─TableReader_42(Build) 2925937.50 root data:Selection_41 - │ └─Selection_41 2925937.50 cop[tikv] ge(tpch.orders.o_orderdate, 1995-01-01 00:00:00.000000), lt(tpch.orders.o_orderdate, 1995-04-01) - │ └─TableFullScan_40 75000000.00 cop[tikv] table:orders keep order:false + └─IndexHashJoin_23 2340750.00 root semi join, inner:IndexLookUp_20, outer key:tpch.orders.o_orderkey, inner key:tpch.lineitem.l_orderkey + ├─TableReader_35(Build) 2925937.50 root data:Selection_34 + │ └─Selection_34 2925937.50 cop[tikv] ge(tpch.orders.o_orderdate, 1995-01-01 00:00:00.000000), lt(tpch.orders.o_orderdate, 1995-04-01) + │ └─TableFullScan_33 75000000.00 cop[tikv] table:orders keep order:false └─IndexLookUp_20(Probe) 4.05 root ├─IndexRangeScan_17(Build) 5.06 cop[tikv] table:lineitem, index:PRIMARY(L_ORDERKEY, L_LINENUMBER) range: decided by [eq(tpch.lineitem.l_orderkey, tpch.orders.o_orderkey)], keep order:false └─Selection_19(Probe) 4.05 cop[tikv] lt(tpch.lineitem.l_commitdate, tpch.lineitem.l_receiptdate) @@ -345,26 +345,26 @@ id estRows task access object operator info Sort_23 5.00 root Column#49:desc └─Projection_25 5.00 root tpch.nation.n_name, Column#49 └─HashAgg_28 5.00 root group by:Column#52, funcs:sum(Column#50)->Column#49, funcs:firstrow(Column#51)->tpch.nation.n_name - └─Projection_86 11822812.50 root mul(tpch.lineitem.l_extendedprice, minus(1, tpch.lineitem.l_discount))->Column#50, tpch.nation.n_name, tpch.nation.n_name - └─HashJoin_38 11822812.50 root inner join, equal:[eq(tpch.supplier.s_nationkey, tpch.customer.c_nationkey) eq(tpch.orders.o_custkey, tpch.customer.c_custkey)] - ├─TableReader_84(Build) 7500000.00 root data:TableFullScan_83 - │ └─TableFullScan_83 7500000.00 cop[tikv] table:customer keep order:false - └─HashJoin_52(Probe) 11822812.50 root inner join, equal:[eq(tpch.lineitem.l_orderkey, tpch.orders.o_orderkey)] - ├─TableReader_82(Build) 11822812.50 root data:Selection_81 - │ └─Selection_81 11822812.50 cop[tikv] ge(tpch.orders.o_orderdate, 1994-01-01 00:00:00.000000), lt(tpch.orders.o_orderdate, 1995-01-01) - │ └─TableFullScan_80 75000000.00 cop[tikv] table:orders keep order:false - └─HashJoin_55(Probe) 61163763.01 root inner join, equal:[eq(tpch.supplier.s_suppkey, tpch.lineitem.l_suppkey)] - ├─HashJoin_57(Build) 100000.00 root inner join, equal:[eq(tpch.nation.n_nationkey, tpch.supplier.s_nationkey)] - │ ├─HashJoin_70(Build) 5.00 root inner join, equal:[eq(tpch.region.r_regionkey, tpch.nation.n_regionkey)] - │ │ ├─TableReader_75(Build) 1.00 root data:Selection_74 - │ │ │ └─Selection_74 1.00 cop[tikv] eq(tpch.region.r_name, "MIDDLE EAST") - │ │ │ └─TableFullScan_73 5.00 cop[tikv] table:region keep order:false - │ │ └─TableReader_72(Probe) 25.00 root data:TableFullScan_71 - │ │ └─TableFullScan_71 25.00 cop[tikv] table:nation keep order:false - │ └─TableReader_77(Probe) 500000.00 root data:TableFullScan_76 - │ └─TableFullScan_76 500000.00 cop[tikv] table:supplier keep order:false - └─TableReader_79(Probe) 300005811.00 root data:TableFullScan_78 - └─TableFullScan_78 300005811.00 cop[tikv] table:lineitem keep order:false + └─Projection_72 11822812.50 root mul(tpch.lineitem.l_extendedprice, minus(1, tpch.lineitem.l_discount))->Column#50, tpch.nation.n_name, tpch.nation.n_name + └─HashJoin_34 11822812.50 root inner join, equal:[eq(tpch.supplier.s_nationkey, tpch.customer.c_nationkey) eq(tpch.orders.o_custkey, tpch.customer.c_custkey)] + ├─TableReader_70(Build) 7500000.00 root data:TableFullScan_69 + │ └─TableFullScan_69 7500000.00 cop[tikv] table:customer keep order:false + └─HashJoin_43(Probe) 11822812.50 root inner join, equal:[eq(tpch.lineitem.l_orderkey, tpch.orders.o_orderkey)] + ├─TableReader_68(Build) 11822812.50 root data:Selection_67 + │ └─Selection_67 11822812.50 cop[tikv] ge(tpch.orders.o_orderdate, 1994-01-01 00:00:00.000000), lt(tpch.orders.o_orderdate, 1995-01-01) + │ └─TableFullScan_66 75000000.00 cop[tikv] table:orders keep order:false + └─HashJoin_46(Probe) 61163763.01 root inner join, equal:[eq(tpch.supplier.s_suppkey, tpch.lineitem.l_suppkey)] + ├─HashJoin_48(Build) 100000.00 root inner join, equal:[eq(tpch.nation.n_nationkey, tpch.supplier.s_nationkey)] + │ ├─HashJoin_56(Build) 5.00 root inner join, equal:[eq(tpch.region.r_regionkey, tpch.nation.n_regionkey)] + │ │ ├─TableReader_61(Build) 1.00 root data:Selection_60 + │ │ │ └─Selection_60 1.00 cop[tikv] eq(tpch.region.r_name, "MIDDLE EAST") + │ │ │ └─TableFullScan_59 5.00 cop[tikv] table:region keep order:false + │ │ └─TableReader_58(Probe) 25.00 root data:TableFullScan_57 + │ │ └─TableFullScan_57 25.00 cop[tikv] table:nation keep order:false + │ └─TableReader_63(Probe) 500000.00 root data:TableFullScan_62 + │ └─TableFullScan_62 500000.00 cop[tikv] table:supplier keep order:false + └─TableReader_65(Probe) 300005811.00 root data:TableFullScan_64 + └─TableFullScan_64 300005811.00 cop[tikv] table:lineitem keep order:false /* Q6 Forecasting Revenue Change Query This query quantifies the amount of revenue increase that would have resulted from eliminating certain companywide @@ -447,26 +447,26 @@ Sort_22 769.96 root tpch.nation.n_name:asc, tpch.nation.n_name:asc, Column#50:a └─Projection_24 769.96 root tpch.nation.n_name, tpch.nation.n_name, Column#50, Column#52 └─HashAgg_27 769.96 root group by:Column#50, tpch.nation.n_name, tpch.nation.n_name, funcs:sum(Column#51)->Column#52, funcs:firstrow(tpch.nation.n_name)->tpch.nation.n_name, funcs:firstrow(tpch.nation.n_name)->tpch.nation.n_name, funcs:firstrow(Column#50)->Column#50 └─Projection_28 1957240.42 root tpch.nation.n_name, tpch.nation.n_name, extract(YEAR, tpch.lineitem.l_shipdate)->Column#50, mul(tpch.lineitem.l_extendedprice, minus(1, tpch.lineitem.l_discount))->Column#51 - └─HashJoin_40 1957240.42 root inner join, equal:[eq(tpch.customer.c_nationkey, tpch.nation.n_nationkey)], other cond:or(and(eq(tpch.nation.n_name, "JAPAN"), eq(tpch.nation.n_name, "INDIA")), and(eq(tpch.nation.n_name, "INDIA"), eq(tpch.nation.n_name, "JAPAN"))) - ├─TableReader_94(Build) 2.00 root data:Selection_93 - │ └─Selection_93 2.00 cop[tikv] or(eq(tpch.nation.n_name, "INDIA"), eq(tpch.nation.n_name, "JAPAN")) - │ └─TableFullScan_92 25.00 cop[tikv] table:n2 keep order:false - └─HashJoin_51(Probe) 24465505.20 root inner join, equal:[eq(tpch.orders.o_custkey, tpch.customer.c_custkey)] - ├─TableReader_91(Build) 7500000.00 root data:TableFullScan_90 - │ └─TableFullScan_90 7500000.00 cop[tikv] table:customer keep order:false - └─IndexMergeJoin_60(Probe) 24465505.20 root inner join, inner:TableReader_58, outer key:tpch.lineitem.l_orderkey, inner key:tpch.orders.o_orderkey - ├─HashJoin_66(Build) 24465505.20 root inner join, equal:[eq(tpch.supplier.s_suppkey, tpch.lineitem.l_suppkey)] - │ ├─HashJoin_79(Build) 40000.00 root inner join, equal:[eq(tpch.nation.n_nationkey, tpch.supplier.s_nationkey)] - │ │ ├─TableReader_84(Build) 2.00 root data:Selection_83 - │ │ │ └─Selection_83 2.00 cop[tikv] or(eq(tpch.nation.n_name, "JAPAN"), eq(tpch.nation.n_name, "INDIA")) - │ │ │ └─TableFullScan_82 25.00 cop[tikv] table:n1 keep order:false - │ │ └─TableReader_81(Probe) 500000.00 root data:TableFullScan_80 - │ │ └─TableFullScan_80 500000.00 cop[tikv] table:supplier keep order:false - │ └─TableReader_87(Probe) 91446230.29 root data:Selection_86 - │ └─Selection_86 91446230.29 cop[tikv] ge(tpch.lineitem.l_shipdate, 1995-01-01 00:00:00.000000), le(tpch.lineitem.l_shipdate, 1996-12-31 00:00:00.000000) - │ └─TableFullScan_85 300005811.00 cop[tikv] table:lineitem keep order:false - └─TableReader_58(Probe) 1.00 root data:TableRangeScan_57 - └─TableRangeScan_57 1.00 cop[tikv] table:orders range: decided by [tpch.lineitem.l_orderkey], keep order:true + └─HashJoin_35 1957240.42 root inner join, equal:[eq(tpch.customer.c_nationkey, tpch.nation.n_nationkey)], other cond:or(and(eq(tpch.nation.n_name, "JAPAN"), eq(tpch.nation.n_name, "INDIA")), and(eq(tpch.nation.n_name, "INDIA"), eq(tpch.nation.n_name, "JAPAN"))) + ├─TableReader_76(Build) 2.00 root data:Selection_75 + │ └─Selection_75 2.00 cop[tikv] or(eq(tpch.nation.n_name, "INDIA"), eq(tpch.nation.n_name, "JAPAN")) + │ └─TableFullScan_74 25.00 cop[tikv] table:n2 keep order:false + └─HashJoin_42(Probe) 24465505.20 root inner join, equal:[eq(tpch.orders.o_custkey, tpch.customer.c_custkey)] + ├─TableReader_73(Build) 7500000.00 root data:TableFullScan_72 + │ └─TableFullScan_72 7500000.00 cop[tikv] table:customer keep order:false + └─IndexJoin_47(Probe) 24465505.20 root inner join, inner:TableReader_46, outer key:tpch.lineitem.l_orderkey, inner key:tpch.orders.o_orderkey + ├─HashJoin_53(Build) 24465505.20 root inner join, equal:[eq(tpch.supplier.s_suppkey, tpch.lineitem.l_suppkey)] + │ ├─HashJoin_61(Build) 40000.00 root inner join, equal:[eq(tpch.nation.n_nationkey, tpch.supplier.s_nationkey)] + │ │ ├─TableReader_66(Build) 2.00 root data:Selection_65 + │ │ │ └─Selection_65 2.00 cop[tikv] or(eq(tpch.nation.n_name, "JAPAN"), eq(tpch.nation.n_name, "INDIA")) + │ │ │ └─TableFullScan_64 25.00 cop[tikv] table:n1 keep order:false + │ │ └─TableReader_63(Probe) 500000.00 root data:TableFullScan_62 + │ │ └─TableFullScan_62 500000.00 cop[tikv] table:supplier keep order:false + │ └─TableReader_69(Probe) 91446230.29 root data:Selection_68 + │ └─Selection_68 91446230.29 cop[tikv] ge(tpch.lineitem.l_shipdate, 1995-01-01 00:00:00.000000), le(tpch.lineitem.l_shipdate, 1996-12-31 00:00:00.000000) + │ └─TableFullScan_67 300005811.00 cop[tikv] table:lineitem keep order:false + └─TableReader_46(Probe) 1.00 root data:TableRangeScan_45 + └─TableRangeScan_45 1.00 cop[tikv] table:orders range: decided by [tpch.lineitem.l_orderkey], keep order:false /* Q8 National Market Share Query This query determines how the market share of a given nation within a given region has changed over two years for @@ -517,36 +517,36 @@ o_year; id estRows task access object operator info Sort_29 719.02 root Column#62:asc └─Projection_31 719.02 root Column#62, div(Column#64, Column#65)->Column#66 - └─HashAgg_34 719.02 root group by:Column#78, funcs:sum(Column#75)->Column#64, funcs:sum(Column#76)->Column#65, funcs:firstrow(Column#77)->Column#62 - └─Projection_123 563136.02 root case(eq(tpch.nation.n_name, INDIA), Column#63, 0)->Column#75, Column#63, Column#62, Column#62 + └─HashAgg_34 719.02 root group by:Column#75, funcs:sum(Column#72)->Column#64, funcs:sum(Column#73)->Column#65, funcs:firstrow(Column#74)->Column#62 + └─Projection_99 563136.02 root case(eq(tpch.nation.n_name, INDIA), Column#63, 0)->Column#72, Column#63, Column#62, Column#62 └─Projection_35 563136.02 root extract(YEAR, tpch.orders.o_orderdate)->Column#62, mul(tpch.lineitem.l_extendedprice, minus(1, tpch.lineitem.l_discount))->Column#63, tpch.nation.n_name - └─HashJoin_45 563136.02 root inner join, equal:[eq(tpch.supplier.s_nationkey, tpch.nation.n_nationkey)] - ├─TableReader_121(Build) 25.00 root data:TableFullScan_120 - │ └─TableFullScan_120 25.00 cop[tikv] table:n2 keep order:false - └─HashJoin_56(Probe) 563136.02 root inner join, equal:[eq(tpch.lineitem.l_suppkey, tpch.supplier.s_suppkey)] - ├─TableReader_119(Build) 500000.00 root data:TableFullScan_118 - │ └─TableFullScan_118 500000.00 cop[tikv] table:supplier keep order:false - └─HashJoin_69(Probe) 563136.02 root inner join, equal:[eq(tpch.lineitem.l_partkey, tpch.part.p_partkey)] - ├─TableReader_117(Build) 61674.00 root data:Selection_116 - │ └─Selection_116 61674.00 cop[tikv] eq(tpch.part.p_type, "SMALL PLATED COPPER") - │ └─TableFullScan_115 10000000.00 cop[tikv] table:part keep order:false - └─IndexHashJoin_83(Probe) 90788402.51 root inner join, inner:IndexLookUp_74, outer key:tpch.orders.o_orderkey, inner key:tpch.lineitem.l_orderkey - ├─HashJoin_87(Build) 22413367.93 root inner join, equal:[eq(tpch.customer.c_custkey, tpch.orders.o_custkey)] - │ ├─HashJoin_89(Build) 1500000.00 root inner join, equal:[eq(tpch.nation.n_nationkey, tpch.customer.c_nationkey)] - │ │ ├─HashJoin_102(Build) 5.00 root inner join, equal:[eq(tpch.region.r_regionkey, tpch.nation.n_regionkey)] - │ │ │ ├─TableReader_107(Build) 1.00 root data:Selection_106 - │ │ │ │ └─Selection_106 1.00 cop[tikv] eq(tpch.region.r_name, "ASIA") - │ │ │ │ └─TableFullScan_105 5.00 cop[tikv] table:region keep order:false - │ │ │ └─TableReader_104(Probe) 25.00 root data:TableFullScan_103 - │ │ │ └─TableFullScan_103 25.00 cop[tikv] table:n1 keep order:false - │ │ └─TableReader_109(Probe) 7500000.00 root data:TableFullScan_108 - │ │ └─TableFullScan_108 7500000.00 cop[tikv] table:customer keep order:false - │ └─TableReader_112(Probe) 22413367.93 root data:Selection_111 - │ └─Selection_111 22413367.93 cop[tikv] ge(tpch.orders.o_orderdate, 1995-01-01 00:00:00.000000), le(tpch.orders.o_orderdate, 1996-12-31 00:00:00.000000) - │ └─TableFullScan_110 75000000.00 cop[tikv] table:orders keep order:false - └─IndexLookUp_74(Probe) 4.05 root - ├─IndexRangeScan_72(Build) 4.05 cop[tikv] table:lineitem, index:PRIMARY(L_ORDERKEY, L_LINENUMBER) range: decided by [eq(tpch.lineitem.l_orderkey, tpch.orders.o_orderkey)], keep order:false - └─TableRowIDScan_73(Probe) 4.05 cop[tikv] table:lineitem keep order:false + └─HashJoin_41 563136.02 root inner join, equal:[eq(tpch.supplier.s_nationkey, tpch.nation.n_nationkey)] + ├─TableReader_97(Build) 25.00 root data:TableFullScan_96 + │ └─TableFullScan_96 25.00 cop[tikv] table:n2 keep order:false + └─HashJoin_48(Probe) 563136.02 root inner join, equal:[eq(tpch.lineitem.l_suppkey, tpch.supplier.s_suppkey)] + ├─TableReader_95(Build) 500000.00 root data:TableFullScan_94 + │ └─TableFullScan_94 500000.00 cop[tikv] table:supplier keep order:false + └─HashJoin_56(Probe) 563136.02 root inner join, equal:[eq(tpch.lineitem.l_partkey, tpch.part.p_partkey)] + ├─TableReader_93(Build) 61674.00 root data:Selection_92 + │ └─Selection_92 61674.00 cop[tikv] eq(tpch.part.p_type, "SMALL PLATED COPPER") + │ └─TableFullScan_91 10000000.00 cop[tikv] table:part keep order:false + └─IndexHashJoin_64(Probe) 90788402.51 root inner join, inner:IndexLookUp_61, outer key:tpch.orders.o_orderkey, inner key:tpch.lineitem.l_orderkey + ├─HashJoin_68(Build) 22413367.93 root inner join, equal:[eq(tpch.customer.c_custkey, tpch.orders.o_custkey)] + │ ├─HashJoin_70(Build) 1500000.00 root inner join, equal:[eq(tpch.nation.n_nationkey, tpch.customer.c_nationkey)] + │ │ ├─HashJoin_78(Build) 5.00 root inner join, equal:[eq(tpch.region.r_regionkey, tpch.nation.n_regionkey)] + │ │ │ ├─TableReader_83(Build) 1.00 root data:Selection_82 + │ │ │ │ └─Selection_82 1.00 cop[tikv] eq(tpch.region.r_name, "ASIA") + │ │ │ │ └─TableFullScan_81 5.00 cop[tikv] table:region keep order:false + │ │ │ └─TableReader_80(Probe) 25.00 root data:TableFullScan_79 + │ │ │ └─TableFullScan_79 25.00 cop[tikv] table:n1 keep order:false + │ │ └─TableReader_85(Probe) 7500000.00 root data:TableFullScan_84 + │ │ └─TableFullScan_84 7500000.00 cop[tikv] table:customer keep order:false + │ └─TableReader_88(Probe) 22413367.93 root data:Selection_87 + │ └─Selection_87 22413367.93 cop[tikv] ge(tpch.orders.o_orderdate, 1995-01-01 00:00:00.000000), le(tpch.orders.o_orderdate, 1996-12-31 00:00:00.000000) + │ └─TableFullScan_86 75000000.00 cop[tikv] table:orders keep order:false + └─IndexLookUp_61(Probe) 4.05 root + ├─IndexRangeScan_59(Build) 4.05 cop[tikv] table:lineitem, index:PRIMARY(L_ORDERKEY, L_LINENUMBER) range: decided by [eq(tpch.lineitem.l_orderkey, tpch.orders.o_orderkey)], keep order:false + └─TableRowIDScan_60(Probe) 4.05 cop[tikv] table:lineitem keep order:false /* Q9 Product Type Profit Measure Query This query determines how much profit is made on a given line of parts, broken out by supplier nation and year. @@ -595,24 +595,24 @@ Sort_25 2406.00 root tpch.nation.n_name:asc, Column#53:desc └─Projection_27 2406.00 root tpch.nation.n_name, Column#53, Column#55 └─HashAgg_30 2406.00 root group by:Column#53, tpch.nation.n_name, funcs:sum(Column#54)->Column#55, funcs:firstrow(tpch.nation.n_name)->tpch.nation.n_name, funcs:firstrow(Column#53)->Column#53 └─Projection_31 971049283.51 root tpch.nation.n_name, extract(YEAR, tpch.orders.o_orderdate)->Column#53, minus(mul(tpch.lineitem.l_extendedprice, minus(1, tpch.lineitem.l_discount)), mul(tpch.partsupp.ps_supplycost, tpch.lineitem.l_quantity))->Column#54 - └─HashJoin_44 971049283.51 root inner join, equal:[eq(tpch.lineitem.l_suppkey, tpch.partsupp.ps_suppkey) eq(tpch.lineitem.l_partkey, tpch.partsupp.ps_partkey)] - ├─TableReader_106(Build) 40000000.00 root data:TableFullScan_105 - │ └─TableFullScan_105 40000000.00 cop[tikv] table:partsupp keep order:false - └─HashJoin_56(Probe) 241379546.70 root inner join, equal:[eq(tpch.lineitem.l_orderkey, tpch.orders.o_orderkey)] - ├─TableReader_104(Build) 75000000.00 root data:TableFullScan_103 - │ └─TableFullScan_103 75000000.00 cop[tikv] table:orders keep order:false - └─HashJoin_79(Probe) 241379546.70 root inner join, equal:[eq(tpch.lineitem.l_partkey, tpch.part.p_partkey)] - ├─TableReader_102(Build) 8000000.00 root data:Selection_101 - │ └─Selection_101 8000000.00 cop[tikv] like(tpch.part.p_name, "%dim%", 92) - │ └─TableFullScan_100 10000000.00 cop[tikv] table:part keep order:false - └─HashJoin_82(Probe) 300005811.00 root inner join, equal:[eq(tpch.supplier.s_suppkey, tpch.lineitem.l_suppkey)] - ├─HashJoin_93(Build) 500000.00 root inner join, equal:[eq(tpch.nation.n_nationkey, tpch.supplier.s_nationkey)] - │ ├─TableReader_97(Build) 25.00 root data:TableFullScan_96 - │ │ └─TableFullScan_96 25.00 cop[tikv] table:nation keep order:false - │ └─TableReader_95(Probe) 500000.00 root data:TableFullScan_94 - │ └─TableFullScan_94 500000.00 cop[tikv] table:supplier keep order:false - └─TableReader_99(Probe) 300005811.00 root data:TableFullScan_98 - └─TableFullScan_98 300005811.00 cop[tikv] table:lineitem keep order:false + └─HashJoin_38 971049283.51 root inner join, equal:[eq(tpch.lineitem.l_suppkey, tpch.partsupp.ps_suppkey) eq(tpch.lineitem.l_partkey, tpch.partsupp.ps_partkey)] + ├─TableReader_83(Build) 40000000.00 root data:TableFullScan_82 + │ └─TableFullScan_82 40000000.00 cop[tikv] table:partsupp keep order:false + └─HashJoin_46(Probe) 241379546.70 root inner join, equal:[eq(tpch.lineitem.l_orderkey, tpch.orders.o_orderkey)] + ├─TableReader_81(Build) 75000000.00 root data:TableFullScan_80 + │ └─TableFullScan_80 75000000.00 cop[tikv] table:orders keep order:false + └─HashJoin_60(Probe) 241379546.70 root inner join, equal:[eq(tpch.lineitem.l_partkey, tpch.part.p_partkey)] + ├─TableReader_79(Build) 8000000.00 root data:Selection_78 + │ └─Selection_78 8000000.00 cop[tikv] like(tpch.part.p_name, "%dim%", 92) + │ └─TableFullScan_77 10000000.00 cop[tikv] table:part keep order:false + └─HashJoin_63(Probe) 300005811.00 root inner join, equal:[eq(tpch.supplier.s_suppkey, tpch.lineitem.l_suppkey)] + ├─HashJoin_70(Build) 500000.00 root inner join, equal:[eq(tpch.nation.n_nationkey, tpch.supplier.s_nationkey)] + │ ├─TableReader_74(Build) 25.00 root data:TableFullScan_73 + │ │ └─TableFullScan_73 25.00 cop[tikv] table:nation keep order:false + │ └─TableReader_72(Probe) 500000.00 root data:TableFullScan_71 + │ └─TableFullScan_71 500000.00 cop[tikv] table:supplier keep order:false + └─TableReader_76(Probe) 300005811.00 root data:TableFullScan_75 + └─TableFullScan_75 300005811.00 cop[tikv] table:lineitem keep order:false /* Q10 Returned Item Reporting Query The query identifies customers who might be having problems with the parts that are shipped to them. @@ -659,18 +659,18 @@ limit 20; id estRows task access object operator info Projection_17 20.00 root tpch.customer.c_custkey, tpch.customer.c_name, Column#39, tpch.customer.c_acctbal, tpch.nation.n_name, tpch.customer.c_address, tpch.customer.c_phone, tpch.customer.c_comment └─TopN_20 20.00 root Column#39:desc, offset:0, count:20 - └─HashAgg_26 3017307.69 root group by:Column#53, Column#54, Column#55, Column#56, Column#57, Column#58, Column#59, funcs:sum(Column#45)->Column#39, funcs:firstrow(Column#46)->tpch.customer.c_custkey, funcs:firstrow(Column#47)->tpch.customer.c_name, funcs:firstrow(Column#48)->tpch.customer.c_address, funcs:firstrow(Column#49)->tpch.customer.c_phone, funcs:firstrow(Column#50)->tpch.customer.c_acctbal, funcs:firstrow(Column#51)->tpch.customer.c_comment, funcs:firstrow(Column#52)->tpch.nation.n_name - └─Projection_67 12222016.17 root mul(tpch.lineitem.l_extendedprice, minus(1, tpch.lineitem.l_discount))->Column#45, tpch.customer.c_custkey, tpch.customer.c_name, tpch.customer.c_address, tpch.customer.c_phone, tpch.customer.c_acctbal, tpch.customer.c_comment, tpch.nation.n_name, tpch.customer.c_custkey, tpch.customer.c_name, tpch.customer.c_acctbal, tpch.customer.c_phone, tpch.nation.n_name, tpch.customer.c_address, tpch.customer.c_comment - └─IndexHashJoin_41 12222016.17 root inner join, inner:IndexLookUp_31, outer key:tpch.orders.o_orderkey, inner key:tpch.lineitem.l_orderkey - ├─HashJoin_44(Build) 3017307.69 root inner join, equal:[eq(tpch.customer.c_custkey, tpch.orders.o_custkey)] - │ ├─TableReader_63(Build) 3017307.69 root data:Selection_62 - │ │ └─Selection_62 3017307.69 cop[tikv] ge(tpch.orders.o_orderdate, 1993-08-01 00:00:00.000000), lt(tpch.orders.o_orderdate, 1993-11-01) - │ │ └─TableFullScan_61 75000000.00 cop[tikv] table:orders keep order:false - │ └─HashJoin_56(Probe) 7500000.00 root inner join, equal:[eq(tpch.nation.n_nationkey, tpch.customer.c_nationkey)] - │ ├─TableReader_60(Build) 25.00 root data:TableFullScan_59 - │ │ └─TableFullScan_59 25.00 cop[tikv] table:nation keep order:false - │ └─TableReader_58(Probe) 7500000.00 root data:TableFullScan_57 - │ └─TableFullScan_57 7500000.00 cop[tikv] table:customer keep order:false + └─HashAgg_26 3017307.69 root group by:Column#50, Column#51, Column#52, Column#53, Column#54, Column#55, Column#56, funcs:sum(Column#42)->Column#39, funcs:firstrow(Column#43)->tpch.customer.c_custkey, funcs:firstrow(Column#44)->tpch.customer.c_name, funcs:firstrow(Column#45)->tpch.customer.c_address, funcs:firstrow(Column#46)->tpch.customer.c_phone, funcs:firstrow(Column#47)->tpch.customer.c_acctbal, funcs:firstrow(Column#48)->tpch.customer.c_comment, funcs:firstrow(Column#49)->tpch.nation.n_name + └─Projection_56 12222016.17 root mul(tpch.lineitem.l_extendedprice, minus(1, tpch.lineitem.l_discount))->Column#42, tpch.customer.c_custkey, tpch.customer.c_name, tpch.customer.c_address, tpch.customer.c_phone, tpch.customer.c_acctbal, tpch.customer.c_comment, tpch.nation.n_name, tpch.customer.c_custkey, tpch.customer.c_name, tpch.customer.c_acctbal, tpch.customer.c_phone, tpch.nation.n_name, tpch.customer.c_address, tpch.customer.c_comment + └─IndexHashJoin_34 12222016.17 root inner join, inner:IndexLookUp_31, outer key:tpch.orders.o_orderkey, inner key:tpch.lineitem.l_orderkey + ├─HashJoin_37(Build) 3017307.69 root inner join, equal:[eq(tpch.customer.c_custkey, tpch.orders.o_custkey)] + │ ├─TableReader_52(Build) 3017307.69 root data:Selection_51 + │ │ └─Selection_51 3017307.69 cop[tikv] ge(tpch.orders.o_orderdate, 1993-08-01 00:00:00.000000), lt(tpch.orders.o_orderdate, 1993-11-01) + │ │ └─TableFullScan_50 75000000.00 cop[tikv] table:orders keep order:false + │ └─HashJoin_45(Probe) 7500000.00 root inner join, equal:[eq(tpch.nation.n_nationkey, tpch.customer.c_nationkey)] + │ ├─TableReader_49(Build) 25.00 root data:TableFullScan_48 + │ │ └─TableFullScan_48 25.00 cop[tikv] table:nation keep order:false + │ └─TableReader_47(Probe) 7500000.00 root data:TableFullScan_46 + │ └─TableFullScan_46 7500000.00 cop[tikv] table:customer keep order:false └─IndexLookUp_31(Probe) 4.05 root ├─IndexRangeScan_28(Build) 16.44 cop[tikv] table:lineitem, index:PRIMARY(L_ORDERKEY, L_LINENUMBER) range: decided by [eq(tpch.lineitem.l_orderkey, tpch.orders.o_orderkey)], keep order:false └─Selection_30(Probe) 4.05 cop[tikv] eq(tpch.lineitem.l_returnflag, "R") @@ -711,20 +711,20 @@ and n_name = 'MOZAMBIQUE' order by value desc; id estRows task access object operator info -Projection_57 1304801.67 root tpch.partsupp.ps_partkey, Column#18 -└─Sort_58 1304801.67 root Column#18:desc - └─Selection_60 1304801.67 root gt(Column#18, NULL) - └─HashAgg_63 1631002.09 root group by:Column#44, funcs:sum(Column#42)->Column#18, funcs:firstrow(Column#43)->tpch.partsupp.ps_partkey - └─Projection_89 1631002.09 root mul(tpch.partsupp.ps_supplycost, cast(tpch.partsupp.ps_availqty, decimal(20,0) BINARY))->Column#42, tpch.partsupp.ps_partkey, tpch.partsupp.ps_partkey - └─HashJoin_67 1631002.09 root inner join, equal:[eq(tpch.supplier.s_suppkey, tpch.partsupp.ps_suppkey)] - ├─HashJoin_80(Build) 20000.00 root inner join, equal:[eq(tpch.nation.n_nationkey, tpch.supplier.s_nationkey)] - │ ├─TableReader_85(Build) 1.00 root data:Selection_84 - │ │ └─Selection_84 1.00 cop[tikv] eq(tpch.nation.n_name, "MOZAMBIQUE") - │ │ └─TableFullScan_83 25.00 cop[tikv] table:nation keep order:false - │ └─TableReader_82(Probe) 500000.00 root data:TableFullScan_81 - │ └─TableFullScan_81 500000.00 cop[tikv] table:supplier keep order:false - └─TableReader_87(Probe) 40000000.00 root data:TableFullScan_86 - └─TableFullScan_86 40000000.00 cop[tikv] table:partsupp keep order:false +Projection_52 1304801.67 root tpch.partsupp.ps_partkey, Column#18 +└─Sort_53 1304801.67 root Column#18:desc + └─Selection_55 1304801.67 root gt(Column#18, NULL) + └─HashAgg_58 1631002.09 root group by:Column#44, funcs:sum(Column#42)->Column#18, funcs:firstrow(Column#43)->tpch.partsupp.ps_partkey + └─Projection_79 1631002.09 root mul(tpch.partsupp.ps_supplycost, cast(tpch.partsupp.ps_availqty, decimal(20,0) BINARY))->Column#42, tpch.partsupp.ps_partkey, tpch.partsupp.ps_partkey + └─HashJoin_62 1631002.09 root inner join, equal:[eq(tpch.supplier.s_suppkey, tpch.partsupp.ps_suppkey)] + ├─HashJoin_70(Build) 20000.00 root inner join, equal:[eq(tpch.nation.n_nationkey, tpch.supplier.s_nationkey)] + │ ├─TableReader_75(Build) 1.00 root data:Selection_74 + │ │ └─Selection_74 1.00 cop[tikv] eq(tpch.nation.n_name, "MOZAMBIQUE") + │ │ └─TableFullScan_73 25.00 cop[tikv] table:nation keep order:false + │ └─TableReader_72(Probe) 500000.00 root data:TableFullScan_71 + │ └─TableFullScan_71 500000.00 cop[tikv] table:supplier keep order:false + └─TableReader_77(Probe) 40000000.00 root data:TableFullScan_76 + └─TableFullScan_76 40000000.00 cop[tikv] table:partsupp keep order:false /* Q12 Shipping Modes and Order Priority Query This query determines whether selecting less expensive modes of shipping is negatively affecting the critical-priority @@ -767,14 +767,14 @@ l_shipmode; id estRows task access object operator info Sort_9 1.00 root tpch.lineitem.l_shipmode:asc └─Projection_11 1.00 root tpch.lineitem.l_shipmode, Column#27, Column#28 - └─HashAgg_14 1.00 root group by:Column#40, funcs:sum(Column#37)->Column#27, funcs:sum(Column#38)->Column#28, funcs:firstrow(Column#39)->tpch.lineitem.l_shipmode - └─Projection_54 10023369.01 root cast(case(or(eq(tpch.orders.o_orderpriority, 1-URGENT), eq(tpch.orders.o_orderpriority, 2-HIGH)), 1, 0), decimal(65,0) BINARY)->Column#37, cast(case(and(ne(tpch.orders.o_orderpriority, 1-URGENT), ne(tpch.orders.o_orderpriority, 2-HIGH)), 1, 0), decimal(65,0) BINARY)->Column#38, tpch.lineitem.l_shipmode, tpch.lineitem.l_shipmode - └─IndexMergeJoin_22 10023369.01 root inner join, inner:TableReader_20, outer key:tpch.lineitem.l_orderkey, inner key:tpch.orders.o_orderkey - ├─TableReader_50(Build) 10023369.01 root data:Selection_49 - │ └─Selection_49 10023369.01 cop[tikv] ge(tpch.lineitem.l_receiptdate, 1997-01-01 00:00:00.000000), in(tpch.lineitem.l_shipmode, "RAIL", "FOB"), lt(tpch.lineitem.l_commitdate, tpch.lineitem.l_receiptdate), lt(tpch.lineitem.l_receiptdate, 1998-01-01), lt(tpch.lineitem.l_shipdate, tpch.lineitem.l_commitdate) - │ └─TableFullScan_48 300005811.00 cop[tikv] table:lineitem keep order:false - └─TableReader_20(Probe) 1.00 root data:TableRangeScan_19 - └─TableRangeScan_19 1.00 cop[tikv] table:orders range: decided by [tpch.lineitem.l_orderkey], keep order:true + └─HashAgg_14 1.00 root group by:Column#37, funcs:sum(Column#34)->Column#27, funcs:sum(Column#35)->Column#28, funcs:firstrow(Column#36)->tpch.lineitem.l_shipmode + └─Projection_43 10023369.01 root cast(case(or(eq(tpch.orders.o_orderpriority, 1-URGENT), eq(tpch.orders.o_orderpriority, 2-HIGH)), 1, 0), decimal(65,0) BINARY)->Column#34, cast(case(and(ne(tpch.orders.o_orderpriority, 1-URGENT), ne(tpch.orders.o_orderpriority, 2-HIGH)), 1, 0), decimal(65,0) BINARY)->Column#35, tpch.lineitem.l_shipmode, tpch.lineitem.l_shipmode + └─IndexJoin_18 10023369.01 root inner join, inner:TableReader_17, outer key:tpch.lineitem.l_orderkey, inner key:tpch.orders.o_orderkey + ├─TableReader_39(Build) 10023369.01 root data:Selection_38 + │ └─Selection_38 10023369.01 cop[tikv] ge(tpch.lineitem.l_receiptdate, 1997-01-01 00:00:00.000000), in(tpch.lineitem.l_shipmode, "RAIL", "FOB"), lt(tpch.lineitem.l_commitdate, tpch.lineitem.l_receiptdate), lt(tpch.lineitem.l_receiptdate, 1998-01-01), lt(tpch.lineitem.l_shipdate, tpch.lineitem.l_commitdate) + │ └─TableFullScan_37 300005811.00 cop[tikv] table:lineitem keep order:false + └─TableReader_17(Probe) 1.00 root data:TableRangeScan_16 + └─TableRangeScan_16 1.00 cop[tikv] table:orders range: decided by [tpch.lineitem.l_orderkey], keep order:false /* Q13 Customer Distribution Query This query seeks relationships between customers and the size of their orders. @@ -839,13 +839,13 @@ and l_shipdate < date_add('1996-12-01', interval '1' month); id estRows task access object operator info Projection_8 1.00 root div(mul(100.00, Column#27), Column#28)->Column#29 └─StreamAgg_13 1.00 root funcs:sum(Column#31)->Column#27, funcs:sum(Column#32)->Column#28 - └─Projection_41 4121984.49 root case(like(tpch.part.p_type, PROMO%, 92), mul(tpch.lineitem.l_extendedprice, minus(1, tpch.lineitem.l_discount)), 0)->Column#31, mul(tpch.lineitem.l_extendedprice, minus(1, tpch.lineitem.l_discount))->Column#32 - └─IndexMergeJoin_36 4121984.49 root inner join, inner:TableReader_34, outer key:tpch.lineitem.l_partkey, inner key:tpch.part.p_partkey - ├─TableReader_27(Build) 4121984.49 root data:Selection_26 - │ └─Selection_26 4121984.49 cop[tikv] ge(tpch.lineitem.l_shipdate, 1996-12-01 00:00:00.000000), lt(tpch.lineitem.l_shipdate, 1997-01-01) - │ └─TableFullScan_25 300005811.00 cop[tikv] table:lineitem keep order:false - └─TableReader_34(Probe) 1.00 root data:TableRangeScan_33 - └─TableRangeScan_33 1.00 cop[tikv] table:part range: decided by [tpch.lineitem.l_partkey], keep order:true + └─Projection_33 4121984.49 root case(like(tpch.part.p_type, PROMO%, 92), mul(tpch.lineitem.l_extendedprice, minus(1, tpch.lineitem.l_discount)), 0)->Column#31, mul(tpch.lineitem.l_extendedprice, minus(1, tpch.lineitem.l_discount))->Column#32 + └─IndexJoin_28 4121984.49 root inner join, inner:TableReader_27, outer key:tpch.lineitem.l_partkey, inner key:tpch.part.p_partkey + ├─TableReader_23(Build) 4121984.49 root data:Selection_22 + │ └─Selection_22 4121984.49 cop[tikv] ge(tpch.lineitem.l_shipdate, 1996-12-01 00:00:00.000000), lt(tpch.lineitem.l_shipdate, 1997-01-01) + │ └─TableFullScan_21 300005811.00 cop[tikv] table:lineitem keep order:false + └─TableReader_27(Probe) 1.00 root data:TableRangeScan_26 + └─TableRangeScan_26 1.00 cop[tikv] table:part range: decided by [tpch.lineitem.l_partkey], keep order:false /* Q15 Top Supplier Query This query determines the top supplier so it can be rewarded, given more business, or identified for special recognition. @@ -929,16 +929,16 @@ id estRows task access object operator info Sort_13 14.41 root Column#23:desc, tpch.part.p_brand:asc, tpch.part.p_type:asc, tpch.part.p_size:asc └─Projection_15 14.41 root tpch.part.p_brand, tpch.part.p_type, tpch.part.p_size, Column#23 └─HashAgg_16 14.41 root group by:tpch.part.p_brand, tpch.part.p_size, tpch.part.p_type, funcs:count(distinct tpch.partsupp.ps_suppkey)->Column#23, funcs:firstrow(tpch.part.p_brand)->tpch.part.p_brand, funcs:firstrow(tpch.part.p_type)->tpch.part.p_type, funcs:firstrow(tpch.part.p_size)->tpch.part.p_size - └─HashJoin_28 3863988.24 root anti semi join, equal:[eq(tpch.partsupp.ps_suppkey, tpch.supplier.s_suppkey)] - ├─TableReader_66(Build) 400000.00 root data:Selection_65 - │ └─Selection_65 400000.00 cop[tikv] like(tpch.supplier.s_comment, "%Customer%Complaints%", 92) - │ └─TableFullScan_64 500000.00 cop[tikv] table:supplier keep order:false - └─IndexMergeJoin_36(Probe) 4829985.30 root inner join, inner:IndexReader_34, outer key:tpch.part.p_partkey, inner key:tpch.partsupp.ps_partkey - ├─TableReader_59(Build) 1200618.43 root data:Selection_58 - │ └─Selection_58 1200618.43 cop[tikv] in(tpch.part.p_size, 48, 19, 12, 4, 41, 7, 21, 39), ne(tpch.part.p_brand, "Brand#34"), not(like(tpch.part.p_type, "LARGE BRUSHED%", 92)) - │ └─TableFullScan_57 10000000.00 cop[tikv] table:part keep order:false - └─IndexReader_34(Probe) 4.02 root index:IndexRangeScan_33 - └─IndexRangeScan_33 4.02 cop[tikv] table:partsupp, index:PRIMARY(PS_PARTKEY, PS_SUPPKEY) range: decided by [eq(tpch.partsupp.ps_partkey, tpch.part.p_partkey)], keep order:true + └─HashJoin_23 3863988.24 root anti semi join, equal:[eq(tpch.partsupp.ps_suppkey, tpch.supplier.s_suppkey)] + ├─TableReader_52(Build) 400000.00 root data:Selection_51 + │ └─Selection_51 400000.00 cop[tikv] like(tpch.supplier.s_comment, "%Customer%Complaints%", 92) + │ └─TableFullScan_50 500000.00 cop[tikv] table:supplier keep order:false + └─IndexHashJoin_29(Probe) 4829985.30 root inner join, inner:IndexReader_26, outer key:tpch.part.p_partkey, inner key:tpch.partsupp.ps_partkey + ├─TableReader_45(Build) 1200618.43 root data:Selection_44 + │ └─Selection_44 1200618.43 cop[tikv] in(tpch.part.p_size, 48, 19, 12, 4, 41, 7, 21, 39), ne(tpch.part.p_brand, "Brand#34"), not(like(tpch.part.p_type, "LARGE BRUSHED%", 92)) + │ └─TableFullScan_43 10000000.00 cop[tikv] table:part keep order:false + └─IndexReader_26(Probe) 4.02 root index:IndexRangeScan_25 + └─IndexRangeScan_25 4.02 cop[tikv] table:partsupp, index:PRIMARY(PS_PARTKEY, PS_SUPPKEY) range: decided by [eq(tpch.partsupp.ps_partkey, tpch.part.p_partkey)], keep order:false /* Q17 Small-Quantity-Order Revenue Query This query determines how much average yearly revenue would be lost if orders were no longer filled for small @@ -970,17 +970,17 @@ l_partkey = p_partkey id estRows task access object operator info Projection_16 1.00 root div(Column#46, 7.0)->Column#47 └─StreamAgg_21 1.00 root funcs:sum(tpch.lineitem.l_extendedprice)->Column#46 - └─HashJoin_53 293773.83 root inner join, equal:[eq(tpch.part.p_partkey, tpch.lineitem.l_partkey)], other cond:lt(tpch.lineitem.l_quantity, mul(0.2, Column#44)) - ├─HashJoin_37(Build) 293773.83 root inner join, equal:[eq(tpch.part.p_partkey, tpch.lineitem.l_partkey)] - │ ├─TableReader_42(Build) 9736.49 root data:Selection_41 - │ │ └─Selection_41 9736.49 cop[tikv] eq(tpch.part.p_brand, "Brand#44"), eq(tpch.part.p_container, "WRAP PKG") - │ │ └─TableFullScan_40 10000000.00 cop[tikv] table:part keep order:false - │ └─TableReader_39(Probe) 300005811.00 root data:TableFullScan_38 - │ └─TableFullScan_38 300005811.00 cop[tikv] table:lineitem keep order:false - └─HashAgg_47(Probe) 9943040.00 root group by:tpch.lineitem.l_partkey, funcs:avg(Column#50, Column#51)->Column#44, funcs:firstrow(tpch.lineitem.l_partkey)->tpch.lineitem.l_partkey - └─TableReader_48 9943040.00 root data:HashAgg_43 - └─HashAgg_43 9943040.00 cop[tikv] group by:tpch.lineitem.l_partkey, funcs:count(tpch.lineitem.l_quantity)->Column#50, funcs:sum(tpch.lineitem.l_quantity)->Column#51 - └─TableFullScan_46 300005811.00 cop[tikv] table:lineitem keep order:false + └─HashJoin_48 293773.83 root inner join, equal:[eq(tpch.part.p_partkey, tpch.lineitem.l_partkey)], other cond:lt(tpch.lineitem.l_quantity, mul(0.2, Column#44)) + ├─HashJoin_32(Build) 293773.83 root inner join, equal:[eq(tpch.part.p_partkey, tpch.lineitem.l_partkey)] + │ ├─TableReader_37(Build) 9736.49 root data:Selection_36 + │ │ └─Selection_36 9736.49 cop[tikv] eq(tpch.part.p_brand, "Brand#44"), eq(tpch.part.p_container, "WRAP PKG") + │ │ └─TableFullScan_35 10000000.00 cop[tikv] table:part keep order:false + │ └─TableReader_34(Probe) 300005811.00 root data:TableFullScan_33 + │ └─TableFullScan_33 300005811.00 cop[tikv] table:lineitem keep order:false + └─HashAgg_42(Probe) 9943040.00 root group by:tpch.lineitem.l_partkey, funcs:avg(Column#50, Column#51)->Column#44, funcs:firstrow(tpch.lineitem.l_partkey)->tpch.lineitem.l_partkey + └─TableReader_43 9943040.00 root data:HashAgg_38 + └─HashAgg_38 9943040.00 cop[tikv] group by:tpch.lineitem.l_partkey, funcs:count(tpch.lineitem.l_quantity)->Column#50, funcs:sum(tpch.lineitem.l_quantity)->Column#51 + └─TableFullScan_41 300005811.00 cop[tikv] table:lineitem keep order:false /* Q18 Large Volume Customer Query The Large Volume Customer Query ranks customers based on their having placed a large quantity order. Large @@ -1027,20 +1027,20 @@ id estRows task access object operator info Projection_24 100.00 root tpch.customer.c_name, tpch.customer.c_custkey, tpch.orders.o_orderkey, tpch.orders.o_orderdate, tpch.orders.o_totalprice, Column#54 └─TopN_27 100.00 root tpch.orders.o_totalprice:desc, tpch.orders.o_orderdate:asc, offset:0, count:100 └─HashAgg_33 59251097.60 root group by:tpch.customer.c_custkey, tpch.customer.c_name, tpch.orders.o_orderdate, tpch.orders.o_orderkey, tpch.orders.o_totalprice, funcs:sum(tpch.lineitem.l_quantity)->Column#54, funcs:firstrow(tpch.customer.c_custkey)->tpch.customer.c_custkey, funcs:firstrow(tpch.customer.c_name)->tpch.customer.c_name, funcs:firstrow(tpch.orders.o_orderkey)->tpch.orders.o_orderkey, funcs:firstrow(tpch.orders.o_totalprice)->tpch.orders.o_totalprice, funcs:firstrow(tpch.orders.o_orderdate)->tpch.orders.o_orderdate - └─HashJoin_48 240004648.80 root inner join, equal:[eq(tpch.orders.o_orderkey, tpch.lineitem.l_orderkey)] - ├─HashJoin_72(Build) 59251097.60 root inner join, equal:[eq(tpch.orders.o_orderkey, tpch.lineitem.l_orderkey)] - │ ├─Selection_89(Build) 59251097.60 root gt(Column#52, 314) - │ │ └─HashAgg_96 74063872.00 root group by:tpch.lineitem.l_orderkey, funcs:sum(Column#66)->Column#52, funcs:firstrow(tpch.lineitem.l_orderkey)->tpch.lineitem.l_orderkey - │ │ └─TableReader_97 74063872.00 root data:HashAgg_90 - │ │ └─HashAgg_90 74063872.00 cop[tikv] group by:tpch.lineitem.l_orderkey, funcs:sum(tpch.lineitem.l_quantity)->Column#66 - │ │ └─TableFullScan_95 300005811.00 cop[tikv] table:lineitem keep order:false - │ └─HashJoin_84(Probe) 75000000.00 root inner join, equal:[eq(tpch.customer.c_custkey, tpch.orders.o_custkey)] - │ ├─TableReader_88(Build) 7500000.00 root data:TableFullScan_87 - │ │ └─TableFullScan_87 7500000.00 cop[tikv] table:customer keep order:false - │ └─TableReader_86(Probe) 75000000.00 root data:TableFullScan_85 - │ └─TableFullScan_85 75000000.00 cop[tikv] table:orders keep order:false - └─TableReader_101(Probe) 300005811.00 root data:TableFullScan_100 - └─TableFullScan_100 300005811.00 cop[tikv] table:lineitem keep order:false + └─HashJoin_42 240004648.80 root inner join, equal:[eq(tpch.orders.o_orderkey, tpch.lineitem.l_orderkey)] + ├─HashJoin_63(Build) 59251097.60 root inner join, equal:[eq(tpch.orders.o_orderkey, tpch.lineitem.l_orderkey)] + │ ├─Selection_76(Build) 59251097.60 root gt(Column#52, 314) + │ │ └─HashAgg_83 74063872.00 root group by:tpch.lineitem.l_orderkey, funcs:sum(Column#63)->Column#52, funcs:firstrow(tpch.lineitem.l_orderkey)->tpch.lineitem.l_orderkey + │ │ └─TableReader_84 74063872.00 root data:HashAgg_77 + │ │ └─HashAgg_77 74063872.00 cop[tikv] group by:tpch.lineitem.l_orderkey, funcs:sum(tpch.lineitem.l_quantity)->Column#63 + │ │ └─TableFullScan_82 300005811.00 cop[tikv] table:lineitem keep order:false + │ └─HashJoin_71(Probe) 75000000.00 root inner join, equal:[eq(tpch.customer.c_custkey, tpch.orders.o_custkey)] + │ ├─TableReader_75(Build) 7500000.00 root data:TableFullScan_74 + │ │ └─TableFullScan_74 7500000.00 cop[tikv] table:customer keep order:false + │ └─TableReader_73(Probe) 75000000.00 root data:TableFullScan_72 + │ └─TableFullScan_72 75000000.00 cop[tikv] table:orders keep order:false + └─TableReader_88(Probe) 300005811.00 root data:TableFullScan_87 + └─TableFullScan_87 300005811.00 cop[tikv] table:lineitem keep order:false /* Q19 Discounted Revenue Query The Discounted Revenue Query reports the gross discounted revenue attributed to the sale of selected parts handled @@ -1088,14 +1088,14 @@ and l_shipinstruct = 'DELIVER IN PERSON' ); id estRows task access object operator info StreamAgg_13 1.00 root funcs:sum(Column#28)->Column#27 -└─Projection_46 6286493.79 root mul(tpch.lineitem.l_extendedprice, minus(1, tpch.lineitem.l_discount))->Column#28 - └─IndexMergeJoin_41 6286493.79 root inner join, inner:TableReader_39, outer key:tpch.lineitem.l_partkey, inner key:tpch.part.p_partkey, other cond:or(and(and(eq(tpch.part.p_brand, "Brand#52"), in(tpch.part.p_container, "SM CASE", "SM BOX", "SM PACK", "SM PKG")), and(ge(tpch.lineitem.l_quantity, 4), and(le(tpch.lineitem.l_quantity, 14), le(tpch.part.p_size, 5)))), or(and(and(eq(tpch.part.p_brand, "Brand#11"), in(tpch.part.p_container, "MED BAG", "MED BOX", "MED PKG", "MED PACK")), and(ge(tpch.lineitem.l_quantity, 18), and(le(tpch.lineitem.l_quantity, 28), le(tpch.part.p_size, 10)))), and(and(eq(tpch.part.p_brand, "Brand#51"), in(tpch.part.p_container, "LG CASE", "LG BOX", "LG PACK", "LG PKG")), and(ge(tpch.lineitem.l_quantity, 29), and(le(tpch.lineitem.l_quantity, 39), le(tpch.part.p_size, 15)))))) - ├─TableReader_29(Build) 6286493.79 root data:Selection_28 - │ └─Selection_28 6286493.79 cop[tikv] eq(tpch.lineitem.l_shipinstruct, "DELIVER IN PERSON"), in(tpch.lineitem.l_shipmode, "AIR", "AIR REG"), or(and(ge(tpch.lineitem.l_quantity, 4), le(tpch.lineitem.l_quantity, 14)), or(and(ge(tpch.lineitem.l_quantity, 18), le(tpch.lineitem.l_quantity, 28)), and(ge(tpch.lineitem.l_quantity, 29), le(tpch.lineitem.l_quantity, 39)))) - │ └─TableFullScan_27 300005811.00 cop[tikv] table:lineitem keep order:false - └─TableReader_39(Probe) 0.80 root data:Selection_38 - └─Selection_38 0.80 cop[tikv] ge(tpch.part.p_size, 1), or(and(eq(tpch.part.p_brand, "Brand#52"), and(in(tpch.part.p_container, "SM CASE", "SM BOX", "SM PACK", "SM PKG"), le(tpch.part.p_size, 5))), or(and(eq(tpch.part.p_brand, "Brand#11"), and(in(tpch.part.p_container, "MED BAG", "MED BOX", "MED PKG", "MED PACK"), le(tpch.part.p_size, 10))), and(eq(tpch.part.p_brand, "Brand#51"), and(in(tpch.part.p_container, "LG CASE", "LG BOX", "LG PACK", "LG PKG"), le(tpch.part.p_size, 15))))) - └─TableRangeScan_37 1.00 cop[tikv] table:part range: decided by [tpch.lineitem.l_partkey], keep order:true +└─Projection_36 6286493.79 root mul(tpch.lineitem.l_extendedprice, minus(1, tpch.lineitem.l_discount))->Column#28 + └─IndexJoin_31 6286493.79 root inner join, inner:TableReader_30, outer key:tpch.lineitem.l_partkey, inner key:tpch.part.p_partkey, other cond:or(and(and(eq(tpch.part.p_brand, "Brand#52"), in(tpch.part.p_container, "SM CASE", "SM BOX", "SM PACK", "SM PKG")), and(ge(tpch.lineitem.l_quantity, 4), and(le(tpch.lineitem.l_quantity, 14), le(tpch.part.p_size, 5)))), or(and(and(eq(tpch.part.p_brand, "Brand#11"), in(tpch.part.p_container, "MED BAG", "MED BOX", "MED PKG", "MED PACK")), and(ge(tpch.lineitem.l_quantity, 18), and(le(tpch.lineitem.l_quantity, 28), le(tpch.part.p_size, 10)))), and(and(eq(tpch.part.p_brand, "Brand#51"), in(tpch.part.p_container, "LG CASE", "LG BOX", "LG PACK", "LG PKG")), and(ge(tpch.lineitem.l_quantity, 29), and(le(tpch.lineitem.l_quantity, 39), le(tpch.part.p_size, 15)))))) + ├─TableReader_24(Build) 6286493.79 root data:Selection_23 + │ └─Selection_23 6286493.79 cop[tikv] eq(tpch.lineitem.l_shipinstruct, "DELIVER IN PERSON"), in(tpch.lineitem.l_shipmode, "AIR", "AIR REG"), or(and(ge(tpch.lineitem.l_quantity, 4), le(tpch.lineitem.l_quantity, 14)), or(and(ge(tpch.lineitem.l_quantity, 18), le(tpch.lineitem.l_quantity, 28)), and(ge(tpch.lineitem.l_quantity, 29), le(tpch.lineitem.l_quantity, 39)))) + │ └─TableFullScan_22 300005811.00 cop[tikv] table:lineitem keep order:false + └─TableReader_30(Probe) 0.80 root data:Selection_29 + └─Selection_29 0.80 cop[tikv] ge(tpch.part.p_size, 1), or(and(eq(tpch.part.p_brand, "Brand#52"), and(in(tpch.part.p_container, "SM CASE", "SM BOX", "SM PACK", "SM PKG"), le(tpch.part.p_size, 5))), or(and(eq(tpch.part.p_brand, "Brand#11"), and(in(tpch.part.p_container, "MED BAG", "MED BOX", "MED PKG", "MED PACK"), le(tpch.part.p_size, 10))), and(eq(tpch.part.p_brand, "Brand#51"), and(in(tpch.part.p_container, "LG CASE", "LG BOX", "LG PACK", "LG PKG"), le(tpch.part.p_size, 15))))) + └─TableRangeScan_28 1.00 cop[tikv] table:part range: decided by [tpch.lineitem.l_partkey], keep order:false /* Q20 Potential Part Promotion Query The Potential Part Promotion Query identifies suppliers in a particular nation having selected parts that may be candidates @@ -1145,27 +1145,27 @@ s_name; id estRows task access object operator info Sort_28 20000.00 root tpch.supplier.s_name:asc └─HashJoin_32 20000.00 root inner join, equal:[eq(tpch.supplier.s_suppkey, tpch.partsupp.ps_suppkey)] - ├─HashJoin_45(Build) 20000.00 root inner join, equal:[eq(tpch.nation.n_nationkey, tpch.supplier.s_nationkey)] - │ ├─TableReader_50(Build) 1.00 root data:Selection_49 - │ │ └─Selection_49 1.00 cop[tikv] eq(tpch.nation.n_name, "ALGERIA") - │ │ └─TableFullScan_48 25.00 cop[tikv] table:nation keep order:false - │ └─TableReader_47(Probe) 500000.00 root data:TableFullScan_46 - │ └─TableFullScan_46 500000.00 cop[tikv] table:supplier keep order:false - └─HashAgg_53(Probe) 257492.04 root group by:tpch.partsupp.ps_suppkey, funcs:firstrow(tpch.partsupp.ps_suppkey)->tpch.partsupp.ps_suppkey - └─Projection_54 257492.04 root tpch.partsupp.ps_suppkey - └─Selection_55 257492.04 root gt(cast(tpch.partsupp.ps_availqty), mul(0.5, Column#44)) - └─HashAgg_58 321865.05 root group by:tpch.partsupp.ps_partkey, tpch.partsupp.ps_suppkey, funcs:firstrow(tpch.partsupp.ps_suppkey)->tpch.partsupp.ps_suppkey, funcs:firstrow(tpch.partsupp.ps_availqty)->tpch.partsupp.ps_availqty, funcs:sum(tpch.lineitem.l_quantity)->Column#44 - └─HashJoin_62 9711455.06 root left outer join, equal:[eq(tpch.partsupp.ps_partkey, tpch.lineitem.l_partkey) eq(tpch.partsupp.ps_suppkey, tpch.lineitem.l_suppkey)] - ├─IndexHashJoin_75(Build) 321865.05 root inner join, inner:IndexLookUp_66, outer key:tpch.part.p_partkey, inner key:tpch.partsupp.ps_partkey - │ ├─TableReader_98(Build) 80007.93 root data:Selection_97 - │ │ └─Selection_97 80007.93 cop[tikv] like(tpch.part.p_name, "green%", 92) - │ │ └─TableFullScan_96 10000000.00 cop[tikv] table:part keep order:false - │ └─IndexLookUp_66(Probe) 4.02 root - │ ├─IndexRangeScan_64(Build) 4.02 cop[tikv] table:partsupp, index:PRIMARY(PS_PARTKEY, PS_SUPPKEY) range: decided by [eq(tpch.partsupp.ps_partkey, tpch.part.p_partkey)], keep order:false - │ └─TableRowIDScan_65(Probe) 4.02 cop[tikv] table:partsupp keep order:false - └─TableReader_103(Probe) 44189356.65 root data:Selection_102 - └─Selection_102 44189356.65 cop[tikv] ge(tpch.lineitem.l_shipdate, 1993-01-01 00:00:00.000000), lt(tpch.lineitem.l_shipdate, 1994-01-01) - └─TableFullScan_101 300005811.00 cop[tikv] table:lineitem keep order:false + ├─HashJoin_40(Build) 20000.00 root inner join, equal:[eq(tpch.nation.n_nationkey, tpch.supplier.s_nationkey)] + │ ├─TableReader_45(Build) 1.00 root data:Selection_44 + │ │ └─Selection_44 1.00 cop[tikv] eq(tpch.nation.n_name, "ALGERIA") + │ │ └─TableFullScan_43 25.00 cop[tikv] table:nation keep order:false + │ └─TableReader_42(Probe) 500000.00 root data:TableFullScan_41 + │ └─TableFullScan_41 500000.00 cop[tikv] table:supplier keep order:false + └─HashAgg_48(Probe) 257492.04 root group by:tpch.partsupp.ps_suppkey, funcs:firstrow(tpch.partsupp.ps_suppkey)->tpch.partsupp.ps_suppkey + └─Projection_49 257492.04 root tpch.partsupp.ps_suppkey + └─Selection_50 257492.04 root gt(cast(tpch.partsupp.ps_availqty), mul(0.5, Column#44)) + └─HashAgg_53 321865.05 root group by:tpch.partsupp.ps_partkey, tpch.partsupp.ps_suppkey, funcs:firstrow(tpch.partsupp.ps_suppkey)->tpch.partsupp.ps_suppkey, funcs:firstrow(tpch.partsupp.ps_availqty)->tpch.partsupp.ps_availqty, funcs:sum(tpch.lineitem.l_quantity)->Column#44 + └─HashJoin_57 9711455.06 root left outer join, equal:[eq(tpch.partsupp.ps_partkey, tpch.lineitem.l_partkey) eq(tpch.partsupp.ps_suppkey, tpch.lineitem.l_suppkey)] + ├─IndexHashJoin_64(Build) 321865.05 root inner join, inner:IndexLookUp_61, outer key:tpch.part.p_partkey, inner key:tpch.partsupp.ps_partkey + │ ├─TableReader_82(Build) 80007.93 root data:Selection_81 + │ │ └─Selection_81 80007.93 cop[tikv] like(tpch.part.p_name, "green%", 92) + │ │ └─TableFullScan_80 10000000.00 cop[tikv] table:part keep order:false + │ └─IndexLookUp_61(Probe) 4.02 root + │ ├─IndexRangeScan_59(Build) 4.02 cop[tikv] table:partsupp, index:PRIMARY(PS_PARTKEY, PS_SUPPKEY) range: decided by [eq(tpch.partsupp.ps_partkey, tpch.part.p_partkey)], keep order:false + │ └─TableRowIDScan_60(Probe) 4.02 cop[tikv] table:partsupp keep order:false + └─TableReader_87(Probe) 44189356.65 root data:Selection_86 + └─Selection_86 44189356.65 cop[tikv] ge(tpch.lineitem.l_shipdate, 1993-01-01 00:00:00.000000), lt(tpch.lineitem.l_shipdate, 1994-01-01) + └─TableFullScan_85 300005811.00 cop[tikv] table:lineitem keep order:false /* Q21 Suppliers Who Kept Orders Waiting Query This query identifies certain suppliers who were not able to ship required parts in a timely manner. @@ -1218,25 +1218,25 @@ id estRows task access object operator info Projection_25 100.00 root tpch.supplier.s_name, Column#72 └─TopN_28 100.00 root Column#72:desc, tpch.supplier.s_name:asc, offset:0, count:100 └─HashAgg_34 12800.00 root group by:tpch.supplier.s_name, funcs:count(1)->Column#72, funcs:firstrow(tpch.supplier.s_name)->tpch.supplier.s_name - └─IndexHashJoin_49 7828961.66 root anti semi join, inner:IndexLookUp_39, outer key:tpch.lineitem.l_orderkey, inner key:tpch.lineitem.l_orderkey, other cond:ne(tpch.lineitem.l_suppkey, tpch.lineitem.l_suppkey) - ├─IndexHashJoin_88(Build) 9786202.08 root semi join, inner:IndexLookUp_79, outer key:tpch.lineitem.l_orderkey, inner key:tpch.lineitem.l_orderkey, other cond:ne(tpch.lineitem.l_suppkey, tpch.lineitem.l_suppkey), ne(tpch.lineitem.l_suppkey, tpch.supplier.s_suppkey) - │ ├─IndexMergeJoin_99(Build) 12232752.60 root inner join, inner:TableReader_97, outer key:tpch.lineitem.l_orderkey, inner key:tpch.orders.o_orderkey - │ │ ├─HashJoin_105(Build) 12232752.60 root inner join, equal:[eq(tpch.supplier.s_suppkey, tpch.lineitem.l_suppkey)] - │ │ │ ├─HashJoin_118(Build) 20000.00 root inner join, equal:[eq(tpch.nation.n_nationkey, tpch.supplier.s_nationkey)] - │ │ │ │ ├─TableReader_123(Build) 1.00 root data:Selection_122 - │ │ │ │ │ └─Selection_122 1.00 cop[tikv] eq(tpch.nation.n_name, "EGYPT") - │ │ │ │ │ └─TableFullScan_121 25.00 cop[tikv] table:nation keep order:false - │ │ │ │ └─TableReader_120(Probe) 500000.00 root data:TableFullScan_119 - │ │ │ │ └─TableFullScan_119 500000.00 cop[tikv] table:supplier keep order:false - │ │ │ └─TableReader_126(Probe) 240004648.80 root data:Selection_125 - │ │ │ └─Selection_125 240004648.80 cop[tikv] gt(tpch.lineitem.l_receiptdate, tpch.lineitem.l_commitdate) - │ │ │ └─TableFullScan_124 300005811.00 cop[tikv] table:l1 keep order:false - │ │ └─TableReader_97(Probe) 0.49 root data:Selection_96 - │ │ └─Selection_96 0.49 cop[tikv] eq(tpch.orders.o_orderstatus, "F") - │ │ └─TableRangeScan_95 1.00 cop[tikv] table:orders range: decided by [tpch.lineitem.l_orderkey], keep order:true - │ └─IndexLookUp_79(Probe) 4.05 root - │ ├─IndexRangeScan_77(Build) 4.05 cop[tikv] table:l2, index:PRIMARY(L_ORDERKEY, L_LINENUMBER) range: decided by [eq(tpch.lineitem.l_orderkey, tpch.lineitem.l_orderkey)], keep order:false - │ └─TableRowIDScan_78(Probe) 4.05 cop[tikv] table:l2 keep order:false + └─IndexHashJoin_42 7828961.66 root anti semi join, inner:IndexLookUp_39, outer key:tpch.lineitem.l_orderkey, inner key:tpch.lineitem.l_orderkey, other cond:ne(tpch.lineitem.l_suppkey, tpch.lineitem.l_suppkey) + ├─IndexHashJoin_64(Build) 9786202.08 root semi join, inner:IndexLookUp_61, outer key:tpch.lineitem.l_orderkey, inner key:tpch.lineitem.l_orderkey, other cond:ne(tpch.lineitem.l_suppkey, tpch.lineitem.l_suppkey), ne(tpch.lineitem.l_suppkey, tpch.supplier.s_suppkey) + │ ├─IndexJoin_70(Build) 12232752.60 root inner join, inner:TableReader_69, outer key:tpch.lineitem.l_orderkey, inner key:tpch.orders.o_orderkey + │ │ ├─HashJoin_76(Build) 12232752.60 root inner join, equal:[eq(tpch.supplier.s_suppkey, tpch.lineitem.l_suppkey)] + │ │ │ ├─HashJoin_84(Build) 20000.00 root inner join, equal:[eq(tpch.nation.n_nationkey, tpch.supplier.s_nationkey)] + │ │ │ │ ├─TableReader_89(Build) 1.00 root data:Selection_88 + │ │ │ │ │ └─Selection_88 1.00 cop[tikv] eq(tpch.nation.n_name, "EGYPT") + │ │ │ │ │ └─TableFullScan_87 25.00 cop[tikv] table:nation keep order:false + │ │ │ │ └─TableReader_86(Probe) 500000.00 root data:TableFullScan_85 + │ │ │ │ └─TableFullScan_85 500000.00 cop[tikv] table:supplier keep order:false + │ │ │ └─TableReader_92(Probe) 240004648.80 root data:Selection_91 + │ │ │ └─Selection_91 240004648.80 cop[tikv] gt(tpch.lineitem.l_receiptdate, tpch.lineitem.l_commitdate) + │ │ │ └─TableFullScan_90 300005811.00 cop[tikv] table:l1 keep order:false + │ │ └─TableReader_69(Probe) 0.49 root data:Selection_68 + │ │ └─Selection_68 0.49 cop[tikv] eq(tpch.orders.o_orderstatus, "F") + │ │ └─TableRangeScan_67 1.00 cop[tikv] table:orders range: decided by [tpch.lineitem.l_orderkey], keep order:false + │ └─IndexLookUp_61(Probe) 4.05 root + │ ├─IndexRangeScan_59(Build) 4.05 cop[tikv] table:l2, index:PRIMARY(L_ORDERKEY, L_LINENUMBER) range: decided by [eq(tpch.lineitem.l_orderkey, tpch.lineitem.l_orderkey)], keep order:false + │ └─TableRowIDScan_60(Probe) 4.05 cop[tikv] table:l2 keep order:false └─IndexLookUp_39(Probe) 4.05 root ├─IndexRangeScan_36(Build) 5.06 cop[tikv] table:l3, index:PRIMARY(L_ORDERKEY, L_LINENUMBER) range: decided by [eq(tpch.lineitem.l_orderkey, tpch.lineitem.l_orderkey)], keep order:false └─Selection_38(Probe) 4.05 cop[tikv] gt(tpch.lineitem.l_receiptdate, tpch.lineitem.l_commitdate) diff --git a/executor/index_lookup_join_test.go b/executor/index_lookup_join_test.go index dffd3289f0ff1..0e3e11316848d 100644 --- a/executor/index_lookup_join_test.go +++ b/executor/index_lookup_join_test.go @@ -199,19 +199,20 @@ func (s *testSuite5) TestIndexJoinMultiCondition(c *C) { tk.MustQuery("select /*+ TIDB_INLJ(t1) */ count(*) from t1, t2 where t1.a = t2.a and t1.b < t2.b").Check(testkit.Rows("3")) } -func (s *testSuite5) TestIssue16887(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustExec("drop table if exists admin_roles, admin_role_has_permissions") - tk.MustExec("CREATE TABLE `admin_role_has_permissions` (`permission_id` bigint(20) unsigned NOT NULL, `role_id` bigint(20) unsigned NOT NULL, PRIMARY KEY (`permission_id`,`role_id`), KEY `admin_role_has_permissions_role_id_foreign` (`role_id`))") - tk.MustExec("CREATE TABLE `admin_roles` (`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL COMMENT '角色名称', `created_at` timestamp NULL DEFAULT NULL, `updated_at` timestamp NULL DEFAULT NULL, PRIMARY KEY (`id`))") - tk.MustExec("INSERT INTO `admin_roles` (`id`, `name`, `created_at`, `updated_at`) VALUES(1, 'admin','2020-04-27 02:40:03', '2020-04-27 02:40:03'),(2, 'developer','2020-04-27 02:40:03', '2020-04-27 02:40:03'),(3, 'analyst','2020-04-27 02:40:03', '2020-04-27 02:40:03'),(4, 'channel_admin','2020-04-27 02:40:03', '2020-04-27 02:40:03'),(5, 'test','2020-04-27 02:40:08', '2020-04-27 02:40:08')") - tk.MustExec("INSERT INTO `admin_role_has_permissions` (`permission_id`, `role_id`) VALUES(1, 1),(2, 1),(3, 1),(4, 1),(5, 1),(6, 1),(7, 1),(8, 1),(9, 1),(10, 1),(11, 1),(12, 1),(13, 1),(14, 1),(15, 1),(16, 1),(17, 1),(18, 1),(19, 1),(20, 1),(21, 1),(22, 1),(23, 1),(24, 1),(25, 1),(26, 1),(27, 1),(28, 1),(29, 1),(30, 1),(31, 1),(32, 1),(33, 1),(34, 1),(35, 1),(36, 1),(37, 1),(38, 1),(39, 1),(40, 1),(41, 1),(42, 1),(43, 1),(44, 1),(45, 1),(46, 1),(47, 1),(48, 1),(49, 1),(50, 1),(51, 1),(52, 1),(53, 1),(54, 1),(55, 1),(56, 1),(57, 1),(58, 1),(59, 1),(60, 1),(61, 1),(62, 1),(63, 1),(64, 1),(65, 1),(66, 1),(67, 1),(68, 1),(69, 1),(70, 1),(71, 1),(72, 1),(73, 1),(74, 1),(75, 1),(76, 1),(77, 1),(78, 1),(79, 1),(80, 1),(81, 1),(82, 1),(83, 1),(5, 4),(6, 4),(7, 4),(84, 5),(85, 5),(86, 5)") - rows := tk.MustQuery("SELECT /*+ inl_merge_join(admin_role_has_permissions) */ `admin_roles`.* FROM `admin_roles` INNER JOIN `admin_role_has_permissions` ON `admin_roles`.`id` = `admin_role_has_permissions`.`role_id` WHERE `admin_role_has_permissions`.`permission_id`\n IN (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67)").Rows() - c.Assert(len(rows), Equals, 70) - rows = tk.MustQuery("show warnings").Rows() - c.Assert(len(rows) > 0, Equals, true) -} +// TODO: reopen the index merge join in future. +//func (s *testSuite5) TestIssue16887(c *C) { +// tk := testkit.NewTestKit(c, s.store) +// tk.MustExec("use test") +// tk.MustExec("drop table if exists admin_roles, admin_role_has_permissions") +// tk.MustExec("CREATE TABLE `admin_role_has_permissions` (`permission_id` bigint(20) unsigned NOT NULL, `role_id` bigint(20) unsigned NOT NULL, PRIMARY KEY (`permission_id`,`role_id`), KEY `admin_role_has_permissions_role_id_foreign` (`role_id`))") +// tk.MustExec("CREATE TABLE `admin_roles` (`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL COMMENT '角色名称', `created_at` timestamp NULL DEFAULT NULL, `updated_at` timestamp NULL DEFAULT NULL, PRIMARY KEY (`id`))") +// tk.MustExec("INSERT INTO `admin_roles` (`id`, `name`, `created_at`, `updated_at`) VALUES(1, 'admin','2020-04-27 02:40:03', '2020-04-27 02:40:03'),(2, 'developer','2020-04-27 02:40:03', '2020-04-27 02:40:03'),(3, 'analyst','2020-04-27 02:40:03', '2020-04-27 02:40:03'),(4, 'channel_admin','2020-04-27 02:40:03', '2020-04-27 02:40:03'),(5, 'test','2020-04-27 02:40:08', '2020-04-27 02:40:08')") +// tk.MustExec("INSERT INTO `admin_role_has_permissions` (`permission_id`, `role_id`) VALUES(1, 1),(2, 1),(3, 1),(4, 1),(5, 1),(6, 1),(7, 1),(8, 1),(9, 1),(10, 1),(11, 1),(12, 1),(13, 1),(14, 1),(15, 1),(16, 1),(17, 1),(18, 1),(19, 1),(20, 1),(21, 1),(22, 1),(23, 1),(24, 1),(25, 1),(26, 1),(27, 1),(28, 1),(29, 1),(30, 1),(31, 1),(32, 1),(33, 1),(34, 1),(35, 1),(36, 1),(37, 1),(38, 1),(39, 1),(40, 1),(41, 1),(42, 1),(43, 1),(44, 1),(45, 1),(46, 1),(47, 1),(48, 1),(49, 1),(50, 1),(51, 1),(52, 1),(53, 1),(54, 1),(55, 1),(56, 1),(57, 1),(58, 1),(59, 1),(60, 1),(61, 1),(62, 1),(63, 1),(64, 1),(65, 1),(66, 1),(67, 1),(68, 1),(69, 1),(70, 1),(71, 1),(72, 1),(73, 1),(74, 1),(75, 1),(76, 1),(77, 1),(78, 1),(79, 1),(80, 1),(81, 1),(82, 1),(83, 1),(5, 4),(6, 4),(7, 4),(84, 5),(85, 5),(86, 5)") +// rows := tk.MustQuery("SELECT /*+ inl_merge_join(admin_role_has_permissions) */ `admin_roles`.* FROM `admin_roles` INNER JOIN `admin_role_has_permissions` ON `admin_roles`.`id` = `admin_role_has_permissions`.`role_id` WHERE `admin_role_has_permissions`.`permission_id`\n IN (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67)").Rows() +// c.Assert(len(rows), Equals, 70) +// rows = tk.MustQuery("show warnings").Rows() +// c.Assert(len(rows) > 0, Equals, true) +//} func (s *testSuite5) TestIndexJoinEnumSetIssue19233(c *C) { tk := testkit.NewTestKit(c, s.store) @@ -238,7 +239,8 @@ func (s *testSuite5) TestIndexJoinEnumSetIssue19233(c *C) { tk.MustExec(`insert into p1 values('HOST_PORT');`) tk.MustExec(`insert into p2 values('HOST_PORT');`) for _, table := range []string{"p1", "p2"} { - for _, hint := range []string{"INL_HASH_JOIN", "INL_MERGE_JOIN", "INL_JOIN"} { + // TODO: reopen index merge join in future. + for _, hint := range []string{"INL_HASH_JOIN" /* "INL_MERGE_JOIN", */, "INL_JOIN"} { sql := fmt.Sprintf(`select /*+ %s(%s) */ * from i, %s where i.objectType = %s.type;`, hint, table, table, table) rows := tk.MustQuery(sql).Rows() c.Assert(len(rows), Equals, 64) diff --git a/executor/index_lookup_merge_join_test.go b/executor/index_lookup_merge_join_test.go index 87bd305cfc066..93d1d9799d58b 100644 --- a/executor/index_lookup_merge_join_test.go +++ b/executor/index_lookup_merge_join_test.go @@ -5,27 +5,28 @@ import ( . "github.com/pingcap/check" "github.com/pingcap/failpoint" - "github.com/pingcap/tidb/util/plancodec" "github.com/pingcap/tidb/util/testkit" ) -func (s *testSuite9) TestIndexLookupMergeJoinHang(c *C) { - c.Assert(failpoint.Enable("github.com/pingcap/tidb/executor/IndexMergeJoinMockOOM", `return(true)`), IsNil) - defer func() { - c.Assert(failpoint.Disable("github.com/pingcap/tidb/executor/IndexMergeJoinMockOOM"), IsNil) - }() +// TODO: reopen the index merge join in future. - tk := testkit.NewTestKitWithInit(c, s.store) - tk.MustExec("drop table if exists t1, t2") - tk.MustExec("create table t1 (a int,b int,index idx(a))") - tk.MustExec("create table t2 (a int,b int,index idx(a))") - tk.MustExec("insert into t1 values (1,1),(2,2),(3,3),(2000,2000)") - tk.MustExec("insert into t2 values (1,1),(2,2),(3,3),(2000,2000)") - // Do not hang in index merge join when OOM occurs. - err := tk.QueryToErr("select /*+ INL_MERGE_JOIN(t1, t2) */ * from t1, t2 where t1.a = t2.a") - c.Assert(err, NotNil) - c.Assert(err.Error(), Equals, "OOM test index merge join doesn't hang here.") -} +//func (s *testSuite9) TestIndexLookupMergeJoinHang(c *C) { +// c.Assert(failpoint.Enable("github.com/pingcap/tidb/executor/IndexMergeJoinMockOOM", `return(true)`), IsNil) +// defer func() { +// c.Assert(failpoint.Disable("github.com/pingcap/tidb/executor/IndexMergeJoinMockOOM"), IsNil) +// }() +// +// tk := testkit.NewTestKitWithInit(c, s.store) +// tk.MustExec("drop table if exists t1, t2") +// tk.MustExec("create table t1 (a int,b int,index idx(a))") +// tk.MustExec("create table t2 (a int,b int,index idx(a))") +// tk.MustExec("insert into t1 values (1,1),(2,2),(3,3),(2000,2000)") +// tk.MustExec("insert into t2 values (1,1),(2,2),(3,3),(2000,2000)") +// // Do not hang in index merge join when OOM occurs. +// err := tk.QueryToErr("select /*+ INL_MERGE_JOIN(t1, t2) */ * from t1, t2 where t1.a = t2.a") +// c.Assert(err, NotNil) +// c.Assert(err.Error(), Equals, "OOM test index merge join doesn't hang here.") +//} func (s *testSuite9) TestIssue18068(c *C) { c.Assert(failpoint.Enable("github.com/pingcap/tidb/executor/testIssue18068", `return(true)`), IsNil) @@ -50,33 +51,35 @@ func (s *testSuite9) TestIssue18068(c *C) { tk.MustExec("select /*+ inl_merge_join(s)*/ 1 from t join s on t.a = s.a limit 1") } -func (s *testSuite9) TestIssue18631(c *C) { - tk := testkit.NewTestKitWithInit(c, s.store) - tk.MustExec("drop table if exists t1, t2") - tk.MustExec("create table t1(a int, b int, c int, d int, primary key(a,b,c))") - tk.MustExec("create table t2(a int, b int, c int, d int, primary key(a,b,c))") - tk.MustExec("insert into t1 values(1,1,1,1),(2,2,2,2),(3,3,3,3)") - tk.MustExec("insert into t2 values(1,1,1,1),(2,2,2,2)") - firstOperator := tk.MustQuery("explain select /*+ inl_merge_join(t1,t2) */ * from t1 left join t2 on t1.a = t2.a and t1.c = t2.c and t1.b = t2.b order by t1.a desc").Rows()[0][0].(string) - c.Assert(strings.Index(firstOperator, plancodec.TypeIndexMergeJoin), Equals, 0) - tk.MustQuery("select /*+ inl_merge_join(t1,t2) */ * from t1 left join t2 on t1.a = t2.a and t1.c = t2.c and t1.b = t2.b order by t1.a desc").Check(testkit.Rows( - "3 3 3 3 ", - "2 2 2 2 2 2 2 2", - "1 1 1 1 1 1 1 1")) -} +// TODO: reopen index merge join in future. -func (s *testSuite9) TestIssue20137(c *C) { - tk := testkit.NewTestKitWithInit(c, s.store) - tk.MustExec("drop table if exists t1, t2") - tk.MustExec("create table t1 (id bigint(20) unsigned, primary key(id))") - tk.MustExec("create table t2 (id bigint(20) unsigned)") - tk.MustExec("insert into t1 values (8738875760185212610)") - tk.MustExec("insert into t1 values (9814441339970117597)") - tk.MustExec("insert into t2 values (8738875760185212610)") - tk.MustExec("insert into t2 values (9814441339970117597)") - tk.MustQuery("select /*+ INL_MERGE_JOIN(t1, t2) */ * from t2 left join t1 on t1.id = t2.id order by t1.id").Check( - testkit.Rows("8738875760185212610 8738875760185212610", "9814441339970117597 9814441339970117597")) -} +//func (s *testSuite9) TestIssue18631(c *C) { +// tk := testkit.NewTestKitWithInit(c, s.store) +// tk.MustExec("drop table if exists t1, t2") +// tk.MustExec("create table t1(a int, b int, c int, d int, primary key(a,b,c))") +// tk.MustExec("create table t2(a int, b int, c int, d int, primary key(a,b,c))") +// tk.MustExec("insert into t1 values(1,1,1,1),(2,2,2,2),(3,3,3,3)") +// tk.MustExec("insert into t2 values(1,1,1,1),(2,2,2,2)") +// firstOperator := tk.MustQuery("explain select /*+ inl_merge_join(t1,t2) */ * from t1 left join t2 on t1.a = t2.a and t1.c = t2.c and t1.b = t2.b order by t1.a desc").Rows()[0][0].(string) +// c.Assert(strings.Index(firstOperator, plancodec.TypeIndexMergeJoin), Equals, 0) +// tk.MustQuery("select /*+ inl_merge_join(t1,t2) */ * from t1 left join t2 on t1.a = t2.a and t1.c = t2.c and t1.b = t2.b order by t1.a desc").Check(testkit.Rows( +// "3 3 3 3 ", +// "2 2 2 2 2 2 2 2", +// "1 1 1 1 1 1 1 1")) +//} +// +//func (s *testSuite9) TestIssue20137(c *C) { +// tk := testkit.NewTestKitWithInit(c, s.store) +// tk.MustExec("drop table if exists t1, t2") +// tk.MustExec("create table t1 (id bigint(20) unsigned, primary key(id))") +// tk.MustExec("create table t2 (id bigint(20) unsigned)") +// tk.MustExec("insert into t1 values (8738875760185212610)") +// tk.MustExec("insert into t1 values (9814441339970117597)") +// tk.MustExec("insert into t2 values (8738875760185212610)") +// tk.MustExec("insert into t2 values (9814441339970117597)") +// tk.MustQuery("select /*+ INL_MERGE_JOIN(t1, t2) */ * from t2 left join t1 on t1.id = t2.id order by t1.id").Check( +// testkit.Rows("8738875760185212610 8738875760185212610", "9814441339970117597 9814441339970117597")) +//} func (s *testSuiteAgg) TestIndexJoinOnSinglePartitionTable(c *C) { // For issue 19145 @@ -86,14 +89,17 @@ func (s *testSuiteAgg) TestIndexJoinOnSinglePartitionTable(c *C) { tk.MustExec("create table t2 (c_int int, c_str varchar(40), primary key (c_int) ) partition by range (c_int) ( partition p0 values less than (10), partition p1 values less than maxvalue )") tk.MustExec("insert into t1 values (1, 'Alice')") tk.MustExec("insert into t2 values (1, 'Bob')") - sql := "select /*+ INL_MERGE_JOIN(t1,t2) */ * from t1 join t2 partition(p0) on t1.c_int = t2.c_int and t1.c_str < t2.c_str" - tk.MustQuery(sql).Check(testkit.Rows("1 Alice 1 Bob")) - rows := s.testData.ConvertRowsToStrings(tk.MustQuery("explain " + sql).Rows()) - c.Assert(strings.Index(rows[0], "IndexMergeJoin"), Equals, 0) - sql = "select /*+ INL_HASH_JOIN(t1,t2) */ * from t1 join t2 partition(p0) on t1.c_int = t2.c_int and t1.c_str < t2.c_str" + // TODO: reopen index merge join in future. + + //sql := "select /*+ INL_MERGE_JOIN(t1,t2) */ * from t1 join t2 partition(p0) on t1.c_int = t2.c_int and t1.c_str < t2.c_str" + //tk.MustQuery(sql).Check(testkit.Rows("1 Alice 1 Bob")) + //rows := s.testData.ConvertRowsToStrings(tk.MustQuery("explain " + sql).Rows()) + //c.Assert(strings.Index(rows[0], "IndexMergeJoin"), Equals, 0) + + sql := "select /*+ INL_HASH_JOIN(t1,t2) */ * from t1 join t2 partition(p0) on t1.c_int = t2.c_int and t1.c_str < t2.c_str" tk.MustQuery(sql).Check(testkit.Rows("1 Alice 1 Bob")) - rows = s.testData.ConvertRowsToStrings(tk.MustQuery("explain " + sql).Rows()) + rows := s.testData.ConvertRowsToStrings(tk.MustQuery("explain " + sql).Rows()) c.Assert(strings.Index(rows[0], "IndexHashJoin"), Equals, 0) sql = "select /*+ INL_JOIN(t1,t2) */ * from t1 join t2 partition(p0) on t1.c_int = t2.c_int and t1.c_str < t2.c_str" @@ -113,3 +119,14 @@ func (s *testSuite9) TestIssue20400(c *C) { tk.MustQuery("select /*+ inl_merge_join(t,s)*/ * from t left join s on t.a=s.a and t.a>1").Check( testkit.Rows("1 ")) } + +func (s *testSuite9) TestIndexMergeJoinBinding(c *C) { + tk := testkit.NewTestKitWithInit(c, s.store) + tk.MustExec("drop table if exists t1, t2") + tk.MustExec("create table t1(a int, b int, key(b))") + tk.MustExec("create table t2(a int, b int, key(b))") + tk.MustExec("create session binding for select * from t1 join t2 on t1.b = t2.b using select /*+ inl_merge_join(t1, t2) */ * from t1 join t2 on t1.b = t2.b") + rows := tk.MustQuery("explain select * from t1 join t2 on t1.b = t2.b").Rows() + // TODO: reopen index merge join in future + c.Assert(strings.Index(rows[0][0].(string), "IndexJoin"), Equals, 0) +} diff --git a/executor/join_test.go b/executor/join_test.go index 7f6507b4fd17e..84a920a3ec3cb 100644 --- a/executor/join_test.go +++ b/executor/join_test.go @@ -1154,8 +1154,8 @@ func (s *testSuiteJoin1) TestIndexLookupJoin(c *C) { `2 `, )) tk.MustQuery("select /*+ INL_MERGE_JOIN(t3)*/ * from t1 left join t3 on t1.b = t3.a;").Check(testkit.Rows( - `2 `, `1 0 0`, + `2 `, )) tk.MustExec("drop table if exists t,s") @@ -1175,9 +1175,9 @@ func (s *testSuiteJoin1) TestIndexLookupJoin(c *C) { tk.MustQuery("desc select /*+ TIDB_INLJ(s) */ count(*) from t join s use index(idx) on s.a = t.a and s.b < t.b").Check(testkit.Rows( "HashAgg_9 1.00 root funcs:count(1)->Column#6", "└─IndexJoin_16 64.00 root inner join, inner:IndexReader_15, outer key:test.t.a, inner key:test.s.a, other cond:lt(test.s.b, test.t.b)", - " ├─TableReader_26(Build) 64.00 root data:Selection_25", - " │ └─Selection_25 64.00 cop[tikv] not(isnull(test.t.b))", - " │ └─TableFullScan_24 64.00 cop[tikv] table:t keep order:false", + " ├─TableReader_21(Build) 64.00 root data:Selection_20", + " │ └─Selection_20 64.00 cop[tikv] not(isnull(test.t.b))", + " │ └─TableFullScan_19 64.00 cop[tikv] table:t keep order:false", " └─IndexReader_15(Probe) 1.00 root index:Selection_14", " └─Selection_14 1.00 cop[tikv] not(isnull(test.s.a)), not(isnull(test.s.b))", " └─IndexRangeScan_13 1.00 cop[tikv] table:s, index:idx(a, b) range: decided by [eq(test.s.a, test.t.a) lt(test.s.b, test.t.b)], keep order:false")) @@ -1185,26 +1185,28 @@ func (s *testSuiteJoin1) TestIndexLookupJoin(c *C) { tk.MustExec("set @@tidb_index_lookup_join_concurrency=1;") tk.MustQuery("select /*+ TIDB_INLJ(s) */ count(*) from t join s use index(idx) on s.a = t.a and s.b < t.b").Check(testkit.Rows("64")) - tk.MustQuery("desc select /*+ INL_MERGE_JOIN(s) */ count(*) from t join s use index(idx) on s.a = t.a and s.b < t.b").Check(testkit.Rows( - "HashAgg_9 1.00 root funcs:count(1)->Column#6", - "└─IndexMergeJoin_21 64.00 root inner join, inner:IndexReader_19, outer key:test.t.a, inner key:test.s.a, other cond:lt(test.s.b, test.t.b)", - " ├─TableReader_26(Build) 64.00 root data:Selection_25", - " │ └─Selection_25 64.00 cop[tikv] not(isnull(test.t.b))", - " │ └─TableFullScan_24 64.00 cop[tikv] table:t keep order:false", - " └─IndexReader_19(Probe) 1.00 root index:Selection_18", - " └─Selection_18 1.00 cop[tikv] not(isnull(test.s.a)), not(isnull(test.s.b))", - " └─IndexRangeScan_17 1.00 cop[tikv] table:s, index:idx(a, b) range: decided by [eq(test.s.a, test.t.a) lt(test.s.b, test.t.b)], keep order:true", - )) - tk.MustQuery("select /*+ INL_MERGE_JOIN(s) */ count(*) from t join s use index(idx) on s.a = t.a and s.b < t.b").Check(testkit.Rows("64")) - tk.MustExec("set @@tidb_index_lookup_join_concurrency=1;") - tk.MustQuery("select /*+ INL_MERGE_JOIN(s) */ count(*) from t join s use index(idx) on s.a = t.a and s.b < t.b").Check(testkit.Rows("64")) + // TODO: reopen the index merge join in future. + + //tk.MustQuery("desc select /*+ INL_MERGE_JOIN(s) */ count(*) from t join s use index(idx) on s.a = t.a and s.b < t.b").Check(testkit.Rows( + // "HashAgg_9 1.00 root funcs:count(1)->Column#6", + // "└─IndexMergeJoin_21 64.00 root inner join, inner:IndexReader_19, outer key:test.t.a, inner key:test.s.a, other cond:lt(test.s.b, test.t.b)", + // " ├─TableReader_26(Build) 64.00 root data:Selection_25", + // " │ └─Selection_25 64.00 cop[tikv] not(isnull(test.t.b))", + // " │ └─TableFullScan_24 64.00 cop[tikv] table:t keep order:false", + // " └─IndexReader_19(Probe) 1.00 root index:Selection_18", + // " └─Selection_18 1.00 cop[tikv] not(isnull(test.s.a)), not(isnull(test.s.b))", + // " └─IndexRangeScan_17 1.00 cop[tikv] table:s, index:idx(a, b) range: decided by [eq(test.s.a, test.t.a) lt(test.s.b, test.t.b)], keep order:true", + //)) + //tk.MustQuery("select /*+ INL_MERGE_JOIN(s) */ count(*) from t join s use index(idx) on s.a = t.a and s.b < t.b").Check(testkit.Rows("64")) + //tk.MustExec("set @@tidb_index_lookup_join_concurrency=1;") + //tk.MustQuery("select /*+ INL_MERGE_JOIN(s) */ count(*) from t join s use index(idx) on s.a = t.a and s.b < t.b").Check(testkit.Rows("64")) tk.MustQuery("desc select /*+ INL_HASH_JOIN(s) */ count(*) from t join s use index(idx) on s.a = t.a and s.b < t.b").Check(testkit.Rows( "HashAgg_9 1.00 root funcs:count(1)->Column#6", - "└─IndexHashJoin_23 64.00 root inner join, inner:IndexReader_15, outer key:test.t.a, inner key:test.s.a, other cond:lt(test.s.b, test.t.b)", - " ├─TableReader_26(Build) 64.00 root data:Selection_25", - " │ └─Selection_25 64.00 cop[tikv] not(isnull(test.t.b))", - " │ └─TableFullScan_24 64.00 cop[tikv] table:t keep order:false", + "└─IndexHashJoin_18 64.00 root inner join, inner:IndexReader_15, outer key:test.t.a, inner key:test.s.a, other cond:lt(test.s.b, test.t.b)", + " ├─TableReader_21(Build) 64.00 root data:Selection_20", + " │ └─Selection_20 64.00 cop[tikv] not(isnull(test.t.b))", + " │ └─TableFullScan_19 64.00 cop[tikv] table:t keep order:false", " └─IndexReader_15(Probe) 1.00 root index:Selection_14", " └─Selection_14 1.00 cop[tikv] not(isnull(test.s.a)), not(isnull(test.s.b))", " └─IndexRangeScan_13 1.00 cop[tikv] table:s, index:idx(a, b) range: decided by [eq(test.s.a, test.t.a) lt(test.s.b, test.t.b)], keep order:false", @@ -1246,11 +1248,11 @@ func (s *testSuiteJoinSerial) TestIndexNestedLoopHashJoin(c *C) { tk.MustExec("analyze table s") // Test IndexNestedLoopHashJoin keepOrder. tk.MustQuery("explain select /*+ INL_HASH_JOIN(s) */ * from t left join s on t.a=s.a order by t.pk").Check(testkit.Rows( - "IndexHashJoin_28 100.00 root left outer join, inner:TableReader_22, outer key:test.t.a, inner key:test.s.a", - "├─TableReader_30(Build) 100.00 root data:TableFullScan_29", - "│ └─TableFullScan_29 100.00 cop[tikv] table:t keep order:true", - "└─TableReader_22(Probe) 1.00 root data:TableRangeScan_21", - " └─TableRangeScan_21 1.00 cop[tikv] table:s range: decided by [test.t.a], keep order:false", + "IndexHashJoin_21 100.00 root left outer join, inner:TableReader_18, outer key:test.t.a, inner key:test.s.a", + "├─TableReader_23(Build) 100.00 root data:TableFullScan_22", + "│ └─TableFullScan_22 100.00 cop[tikv] table:t keep order:true", + "└─TableReader_18(Probe) 1.00 root data:TableRangeScan_17", + " └─TableRangeScan_17 1.00 cop[tikv] table:s range: decided by [test.t.a], keep order:false", )) rs := tk.MustQuery("select /*+ INL_HASH_JOIN(s) */ * from t left join s on t.a=s.a order by t.pk") for i, row := range rs.Rows() { @@ -1389,12 +1391,12 @@ func (s *testSuiteJoin3) TestIssue13449(c *C) { tk.MustExec("set @@tidb_index_join_batch_size=32;") tk.MustQuery("desc select /*+ INL_HASH_JOIN(s) */ * from t join s on t.a=s.a order by t.a;").Check(testkit.Rows( - "IndexHashJoin_35 12487.50 root inner join, inner:IndexReader_27, outer key:test.t.a, inner key:test.s.a", - "├─IndexReader_37(Build) 9990.00 root index:IndexFullScan_36", - "│ └─IndexFullScan_36 9990.00 cop[tikv] table:t, index:a(a) keep order:true, stats:pseudo", - "└─IndexReader_27(Probe) 1.25 root index:Selection_26", - " └─Selection_26 1.25 cop[tikv] not(isnull(test.s.a))", - " └─IndexRangeScan_25 1.25 cop[tikv] table:s, index:a(a) range: decided by [eq(test.s.a, test.t.a)], keep order:false, stats:pseudo")) + "IndexHashJoin_25 12487.50 root inner join, inner:IndexReader_22, outer key:test.t.a, inner key:test.s.a", + "├─IndexReader_27(Build) 9990.00 root index:IndexFullScan_26", + "│ └─IndexFullScan_26 9990.00 cop[tikv] table:t, index:a(a) keep order:true, stats:pseudo", + "└─IndexReader_22(Probe) 1.25 root index:Selection_21", + " └─Selection_21 1.25 cop[tikv] not(isnull(test.s.a))", + " └─IndexRangeScan_20 1.25 cop[tikv] table:s, index:a(a) range: decided by [eq(test.s.a, test.t.a)], keep order:false, stats:pseudo")) tk.MustQuery("select /*+ INL_HASH_JOIN(s) */ * from t join s on t.a=s.a order by t.a;").Check(testkit.Rows("1 1", "128 128")) } @@ -1975,9 +1977,9 @@ func (s *testSuiteJoinSerial) TestOuterTableBuildHashTableIsuse13933(c *C) { tk.MustExec("Insert into t values (11,2),(1,2),(5,2)") tk.MustQuery("select /*+ INL_HASH_JOIN(s)*/ * from t left join s on s.b=t.b and s.a < t.a;").Sort().Check(testkit.Rows("1 2 ", "11 2 1 2", "5 2 1 2")) tk.MustQuery("explain select /*+ INL_HASH_JOIN(s)*/ * from t left join s on s.b=t.b and s.a < t.a;").Check(testkit.Rows( - "IndexHashJoin_22 12475.01 root left outer join, inner:IndexLookUp_11, outer key:test.t.b, inner key:test.s.b, other cond:lt(test.s.a, test.t.a)", - "├─TableReader_24(Build) 10000.00 root data:TableFullScan_23", - "│ └─TableFullScan_23 10000.00 cop[tikv] table:t keep order:false, stats:pseudo", + "IndexHashJoin_14 12475.01 root left outer join, inner:IndexLookUp_11, outer key:test.t.b, inner key:test.s.b, other cond:lt(test.s.a, test.t.a)", + "├─TableReader_16(Build) 10000.00 root data:TableFullScan_15", + "│ └─TableFullScan_15 10000.00 cop[tikv] table:t keep order:false, stats:pseudo", "└─IndexLookUp_11(Probe) 1.25 root ", " ├─Selection_9(Build) 1.25 cop[tikv] not(isnull(test.s.b))", " │ └─IndexRangeScan_7 1.25 cop[tikv] table:s, index:b(b) range: decided by [eq(test.s.b, test.t.b)], keep order:false, stats:pseudo", @@ -2109,13 +2111,15 @@ func (s *testSuiteJoinSerial) TestIssue18070(c *C) { err := tk.QueryToErr("select /*+ inl_hash_join(t1)*/ * from t1 join t2 on t1.a = t2.a;") c.Assert(strings.Contains(err.Error(), "Out Of Memory Quota!"), IsTrue) - fpName := "github.com/pingcap/tidb/executor/mockIndexMergeJoinOOMPanic" - c.Assert(failpoint.Enable(fpName, `panic("ERROR 1105 (HY000): Out Of Memory Quota![conn_id=1]")`), IsNil) - defer func() { - c.Assert(failpoint.Disable(fpName), IsNil) - }() - err = tk.QueryToErr("select /*+ inl_merge_join(t1)*/ * from t1 join t2 on t1.a = t2.a;") - c.Assert(strings.Contains(err.Error(), "Out Of Memory Quota!"), IsTrue) + // TODO: reopen the index merge join in future. + + //fpName := "github.com/pingcap/tidb/executor/mockIndexMergeJoinOOMPanic" + //c.Assert(failpoint.Enable(fpName, `panic("ERROR 1105 (HY000): Out Of Memory Quota![conn_id=1]")`), IsNil) + //defer func() { + // c.Assert(failpoint.Disable(fpName), IsNil) + //}() + //err = tk.QueryToErr("select /*+ inl_merge_join(t1)*/ * from t1 join t2 on t1.a = t2.a;") + //c.Assert(strings.Contains(err.Error(), "Out Of Memory Quota!"), IsTrue) } func (s *testSuiteJoin1) TestIssue18564(c *C) { diff --git a/expression/integration_test.go b/expression/integration_test.go index 17416b77da0b9..ebe04df4aa0ed 100755 --- a/expression/integration_test.go +++ b/expression/integration_test.go @@ -5109,29 +5109,32 @@ func (s *testIntegrationSuite) TestExprPushdown(c *C) { tk.MustQuery("select id from t use index(key2) where substr(col2, 1, 1) = '5' and substr(col1, 1, 1) = '4'").Check(testkit.Rows("3")) tk.MustQuery("select count(id) from t use index(key2) where substr(col2, 1, 1) = '5' and substr(col1, 1, 1) = '4'").Check(testkit.Rows("1")) } -func (s *testIntegrationSuite) TestIssue16973(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustExec("drop table if exists t1") - tk.MustExec("create table t1(id varchar(36) not null primary key, org_id varchar(36) not null, " + - "status tinyint default 1 not null, ns varchar(36) default '' not null);") - tk.MustExec("create table t2(id varchar(36) not null primary key, order_id varchar(36) not null, " + - "begin_time timestamp(3) default CURRENT_TIMESTAMP(3) not null);") - tk.MustExec("create index idx_oid on t2(order_id);") - tk.MustExec("insert into t1 value (1,1,1,'a');") - tk.MustExec("insert into t1 value (2,1,2,'a');") - tk.MustExec("insert into t1 value (3,1,3,'a');") - tk.MustExec("insert into t2 value (1,2,date'2020-05-08');") - - rows := tk.MustQuery("explain SELECT /*+ INL_MERGE_JOIN(t1,t2) */ COUNT(*) FROM t1 LEFT JOIN t2 ON t1.id = t2.order_id WHERE t1.ns = 'a' AND t1.org_id IN (1) " + - "AND t1.status IN (2,6,10) AND timestampdiff(month, t2.begin_time, date'2020-05-06') = 0;").Rows() - c.Assert(fmt.Sprintf("%v", rows[1][0]), Matches, ".*IndexMergeJoin.*") - c.Assert(fmt.Sprintf("%v", rows[4][3]), Equals, "table:t1") - c.Assert(fmt.Sprintf("%v", rows[5][0]), Matches, ".*Selection.*") - c.Assert(fmt.Sprintf("%v", rows[9][3]), Equals, "table:t2") - tk.MustQuery("SELECT /*+ INL_MERGE_JOIN(t1,t2) */ COUNT(*) FROM t1 LEFT JOIN t2 ON t1.id = t2.order_id WHERE t1.ns = 'a' AND t1.org_id IN (1) " + - "AND t1.status IN (2,6,10) AND timestampdiff(month, t2.begin_time, date'2020-05-06') = 0;").Check(testkit.Rows("1")) -} + +// TODO: reopen the index merge join in future. + +//func (s *testIntegrationSuite) TestIssue16973(c *C) { +// tk := testkit.NewTestKit(c, s.store) +// tk.MustExec("use test") +// tk.MustExec("drop table if exists t1") +// tk.MustExec("create table t1(id varchar(36) not null primary key, org_id varchar(36) not null, " + +// "status tinyint default 1 not null, ns varchar(36) default '' not null);") +// tk.MustExec("create table t2(id varchar(36) not null primary key, order_id varchar(36) not null, " + +// "begin_time timestamp(3) default CURRENT_TIMESTAMP(3) not null);") +// tk.MustExec("create index idx_oid on t2(order_id);") +// tk.MustExec("insert into t1 value (1,1,1,'a');") +// tk.MustExec("insert into t1 value (2,1,2,'a');") +// tk.MustExec("insert into t1 value (3,1,3,'a');") +// tk.MustExec("insert into t2 value (1,2,date'2020-05-08');") +// +// rows := tk.MustQuery("explain SELECT /*+ INL_MERGE_JOIN(t1,t2) */ COUNT(*) FROM t1 LEFT JOIN t2 ON t1.id = t2.order_id WHERE t1.ns = 'a' AND t1.org_id IN (1) " + +// "AND t1.status IN (2,6,10) AND timestampdiff(month, t2.begin_time, date'2020-05-06') = 0;").Rows() +// c.Assert(fmt.Sprintf("%v", rows[1][0]), Matches, ".*IndexMergeJoin.*") +// c.Assert(fmt.Sprintf("%v", rows[4][3]), Equals, "table:t1") +// c.Assert(fmt.Sprintf("%v", rows[5][0]), Matches, ".*Selection.*") +// c.Assert(fmt.Sprintf("%v", rows[9][3]), Equals, "table:t2") +// tk.MustQuery("SELECT /*+ INL_MERGE_JOIN(t1,t2) */ COUNT(*) FROM t1 LEFT JOIN t2 ON t1.id = t2.order_id WHERE t1.ns = 'a' AND t1.org_id IN (1) " + +// "AND t1.status IN (2,6,10) AND timestampdiff(month, t2.begin_time, date'2020-05-06') = 0;").Check(testkit.Rows("1")) +//} func (s *testIntegrationSuite) TestExprPushdownBlacklist(c *C) { tk := testkit.NewTestKit(c, s.store) diff --git a/planner/core/exhaust_physical_plans.go b/planner/core/exhaust_physical_plans.go index 31d3e56fd56e8..01f0b3e066452 100644 --- a/planner/core/exhaust_physical_plans.go +++ b/planner/core/exhaust_physical_plans.go @@ -625,10 +625,14 @@ func (p *LogicalJoin) buildIndexJoinInner2TableScan( // should construct another inner plan for it. // Because we can't keep order for union scan, if there is a union scan in inner task, // we can't construct index merge join. - if us == nil { - innerTask2 := p.constructInnerTableScanTask(ds, pkCol, outerJoinKeys, us, true, !prop.IsEmpty() && prop.Items[0].Desc, avgInnerRowCnt) - joins = append(joins, p.constructIndexMergeJoin(prop, outerIdx, innerTask2, nil, keyOff2IdxOff, nil, nil)...) - } + + // TODO: reopen the index merge join in future. + + //if us == nil { + // innerTask2 := p.constructInnerTableScanTask(ds, pkCol, outerJoinKeys, us, true, !prop.IsEmpty() && prop.Items[0].Desc, avgInnerRowCnt) + // joins = append(joins, p.constructIndexMergeJoin(prop, outerIdx, innerTask2, nil, keyOff2IdxOff, nil, nil)...) + //} + // We can reuse the `innerTask` here since index nested loop hash join // do not need the inner child to promise the order. joins = append(joins, p.constructIndexHashJoin(prop, outerIdx, innerTask, nil, keyOff2IdxOff, nil, nil)...) @@ -686,10 +690,14 @@ func (p *LogicalJoin) buildIndexJoinInner2IndexScan( // should construct another inner plan for it. // Because we can't keep order for union scan, if there is a union scan in inner task, // we can't construct index merge join. - if us == nil { - innerTask2 := p.constructInnerIndexScanTask(ds, helper.chosenPath, helper.chosenRemained, outerJoinKeys, us, rangeInfo, true, !prop.IsEmpty() && prop.Items[0].Desc, avgInnerRowCnt, maxOneRow) - joins = append(joins, p.constructIndexMergeJoin(prop, outerIdx, innerTask2, helper.chosenRanges, keyOff2IdxOff, helper.chosenPath, helper.lastColManager)...) - } + + // TODO: reopen the index merge join in future. + + //if us == nil { + // innerTask2 := p.constructInnerIndexScanTask(ds, helper.chosenPath, helper.chosenRemained, outerJoinKeys, us, rangeInfo, true, !prop.IsEmpty() && prop.Items[0].Desc, avgInnerRowCnt, maxOneRow) + // joins = append(joins, p.constructIndexMergeJoin(prop, outerIdx, innerTask2, helper.chosenRanges, keyOff2IdxOff, helper.chosenPath, helper.lastColManager)...) + //} + // We can reuse the `innerTask` here since index nested loop hash join // do not need the inner child to promise the order. joins = append(joins, p.constructIndexHashJoin(prop, outerIdx, innerTask, helper.chosenRanges, keyOff2IdxOff, helper.chosenPath, helper.lastColManager)...) diff --git a/planner/core/logical_plan_builder.go b/planner/core/logical_plan_builder.go index 7c869188fd674..0bef4438aedbe 100644 --- a/planner/core/logical_plan_builder.go +++ b/planner/core/logical_plan_builder.go @@ -513,10 +513,12 @@ func (p *LogicalJoin) setPreferredJoinType(hintInfo *tableHintInfo) { p.preferJoinType |= preferRightAsINLHJInner } if hintInfo.ifPreferINLMJ(lhsAlias) { - p.preferJoinType |= preferLeftAsINLMJInner + // TODO: reopen index merge join change to preferLeftAsINLMJInner in future + p.preferJoinType |= preferLeftAsINLJInner } if hintInfo.ifPreferINLMJ(rhsAlias) { - p.preferJoinType |= preferRightAsINLMJInner + // TODO: reopen index merge join change to preferRightAsINLMJInner in future + p.preferJoinType |= preferRightAsINLJInner } if containDifferentJoinTypes(p.preferJoinType) { errMsg := "Join hints are conflict, you can only specify one type of join" diff --git a/planner/core/testdata/analyze_suite_out.json b/planner/core/testdata/analyze_suite_out.json index 2457bedf1c779..548572962d7b9 100644 --- a/planner/core/testdata/analyze_suite_out.json +++ b/planner/core/testdata/analyze_suite_out.json @@ -47,13 +47,13 @@ ], "Plan": [ "Limit_17 1.00 root offset:0, count:1", - "└─IndexMergeJoin_70 1.00 root left outer semi join, inner:IndexReader_68, outer key:test.t.a, inner key:test.t.b", - " ├─TopN_29(Build) 1.00 root test.t.a:asc, offset:0, count:1", - " │ └─IndexReader_37 1.00 root index:TopN_36", - " │ └─TopN_36 1.00 cop[tikv] test.t.a:asc, offset:0, count:1", - " │ └─IndexRangeScan_35 6.00 cop[tikv] table:t1, index:idx_bc(b, c) range:[-inf,6], keep order:false", - " └─IndexReader_68(Probe) 1.04 root index:IndexRangeScan_67", - " └─IndexRangeScan_67 1.04 cop[tikv] table:t2, index:idx_bc(b, c) range: decided by [eq(test.t.b, test.t.a)], keep order:true" + "└─IndexJoin_62 1.00 root left outer semi join, inner:IndexReader_61, outer key:test.t.a, inner key:test.t.b", + " ├─TopN_25(Build) 1.00 root test.t.a:asc, offset:0, count:1", + " │ └─IndexReader_33 1.00 root index:TopN_32", + " │ └─TopN_32 1.00 cop[tikv] test.t.a:asc, offset:0, count:1", + " │ └─IndexRangeScan_31 6.00 cop[tikv] table:t1, index:idx_bc(b, c) range:[-inf,6], keep order:false", + " └─IndexReader_61(Probe) 1.04 root index:IndexRangeScan_60", + " └─IndexRangeScan_60 1.04 cop[tikv] table:t2, index:idx_bc(b, c) range: decided by [eq(test.t.b, test.t.a)], keep order:false" ] }, { @@ -143,9 +143,9 @@ ], "Plan": [ "IndexJoin_9 12475.01 root inner join, inner:IndexReader_8, outer key:test.t1.a, inner key:test.t2.a, other cond:eq(test.t1.c, test.t2.c), gt(test.t2.b, minus(test.t1.b, 1)), lt(test.t2.b, plus(test.t1.b, 1))", - "├─TableReader_19(Build) 9980.01 root data:Selection_18", - "│ └─Selection_18 9980.01 cop[tikv] not(isnull(test.t1.a)), not(isnull(test.t1.c))", - "│ └─TableFullScan_17 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo", + "├─TableReader_14(Build) 9980.01 root data:Selection_13", + "│ └─Selection_13 9980.01 cop[tikv] not(isnull(test.t1.a)), not(isnull(test.t1.c))", + "│ └─TableFullScan_12 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo", "└─IndexReader_8(Probe) 1.25 root index:Selection_7", " └─Selection_7 1.25 cop[tikv] not(isnull(test.t2.a)), not(isnull(test.t2.c))", " └─IndexRangeScan_6 1.25 cop[tikv] table:t2, index:idx(a, b, c) range: decided by [eq(test.t2.a, test.t1.a) gt(test.t2.b, minus(test.t1.b, 1)) lt(test.t2.b, plus(test.t1.b, 1))], keep order:false, stats:pseudo" diff --git a/planner/core/testdata/integration_serial_suite_out.json b/planner/core/testdata/integration_serial_suite_out.json index 650b6db4a0a80..5d089b01c6322 100644 --- a/planner/core/testdata/integration_serial_suite_out.json +++ b/planner/core/testdata/integration_serial_suite_out.json @@ -190,26 +190,26 @@ { "SQL": "desc select /*+ READ_FROM_STORAGE(TIKV[t1], TIKV[t2]) */ * from t t1, t t2 where t1.a = t2.a", "Plan": [ - "HashJoin_37 12487.50 root inner join, equal:[eq(test.t.a, test.t.a)]", - "├─TableReader_55(Build) 9990.00 root data:Selection_54", - "│ └─Selection_54 9990.00 cop[tikv] not(isnull(test.t.a))", - "│ └─TableFullScan_53 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo", - "└─TableReader_49(Probe) 9990.00 root data:Selection_48", - " └─Selection_48 9990.00 cop[tikv] not(isnull(test.t.a))", - " └─TableFullScan_47 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo" + "HashJoin_23 12487.50 root inner join, equal:[eq(test.t.a, test.t.a)]", + "├─TableReader_41(Build) 9990.00 root data:Selection_40", + "│ └─Selection_40 9990.00 cop[tikv] not(isnull(test.t.a))", + "│ └─TableFullScan_39 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo", + "└─TableReader_35(Probe) 9990.00 root data:Selection_34", + " └─Selection_34 9990.00 cop[tikv] not(isnull(test.t.a))", + " └─TableFullScan_33 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo" ], "Warn": null }, { "SQL": "desc select /*+ READ_FROM_STORAGE(TIKV[t1], TIFLASH[t2]) */ * from t t1, t t2 where t1.a = t2.a", "Plan": [ - "HashJoin_23 12487.50 root inner join, equal:[eq(test.t.a, test.t.a)]", - "├─TableReader_31(Build) 9990.00 root data:Selection_30", - "│ └─Selection_30 9990.00 cop[tiflash] not(isnull(test.t.a))", - "│ └─TableFullScan_29 10000.00 cop[tiflash] table:t2 keep order:false, stats:pseudo", - "└─TableReader_34(Probe) 9990.00 root data:Selection_33", - " └─Selection_33 9990.00 cop[tikv] not(isnull(test.t.a))", - " └─TableFullScan_32 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo" + "HashJoin_16 12487.50 root inner join, equal:[eq(test.t.a, test.t.a)]", + "├─TableReader_24(Build) 9990.00 root data:Selection_23", + "│ └─Selection_23 9990.00 cop[tiflash] not(isnull(test.t.a))", + "│ └─TableFullScan_22 10000.00 cop[tiflash] table:t2 keep order:false, stats:pseudo", + "└─TableReader_27(Probe) 9990.00 root data:Selection_26", + " └─Selection_26 9990.00 cop[tikv] not(isnull(test.t.a))", + " └─TableFullScan_25 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo" ], "Warn": null }, diff --git a/planner/core/testdata/integration_suite_out.json b/planner/core/testdata/integration_suite_out.json index bf0ddbda54995..2e4790079c943 100644 --- a/planner/core/testdata/integration_suite_out.json +++ b/planner/core/testdata/integration_suite_out.json @@ -107,8 +107,8 @@ "SQL": "explain select /*+ TIDB_INLJ(t2) */ * from t1 join t2 on t1.a = t2.a and t1.c = t2.c", "Plan": [ "IndexJoin_9 2.00 root inner join, inner:IndexLookUp_8, outer key:test.t1.a, inner key:test.t2.a, other cond:eq(test.t1.c, test.t2.c)", - "├─TableReader_19(Build) 1.00 root data:TableFullScan_18", - "│ └─TableFullScan_18 1.00 cop[tikv] table:t1 keep order:false", + "├─TableReader_13(Build) 1.00 root data:TableFullScan_12", + "│ └─TableFullScan_12 1.00 cop[tikv] table:t1 keep order:false", "└─IndexLookUp_8(Probe) 2.00 root ", " ├─IndexRangeScan_6(Build) 2.00 cop[tikv] table:t2, index:PRIMARY(a, b) range: decided by [eq(test.t2.a, test.t1.a)], keep order:false", " └─TableRowIDScan_7(Probe) 2.00 cop[tikv] table:t2 keep order:false" @@ -118,8 +118,8 @@ "SQL": "explain select /*+ TIDB_INLJ(t2) */ * from t1 join t2 on t1.a = t2.a and t1.c <= t2.b", "Plan": [ "IndexJoin_9 2.00 root inner join, inner:IndexLookUp_8, outer key:test.t1.a, inner key:test.t2.a, other cond:le(test.t1.c, test.t2.b)", - "├─TableReader_19(Build) 1.00 root data:TableFullScan_18", - "│ └─TableFullScan_18 1.00 cop[tikv] table:t1 keep order:false", + "├─TableReader_13(Build) 1.00 root data:TableFullScan_12", + "│ └─TableFullScan_12 1.00 cop[tikv] table:t1 keep order:false", "└─IndexLookUp_8(Probe) 2.00 root ", " ├─IndexRangeScan_6(Build) 2.00 cop[tikv] table:t2, index:PRIMARY(a, b) range: decided by [eq(test.t2.a, test.t1.a) le(test.t1.c, test.t2.b)], keep order:false", " └─TableRowIDScan_7(Probe) 2.00 cop[tikv] table:t2 keep order:false" @@ -129,8 +129,8 @@ "SQL": "explain select /*+ TIDB_INLJ(t2) */ * from t1 join t2 on t1.a = t2.a and t2.b = 1", "Plan": [ "IndexJoin_9 1.00 root inner join, inner:IndexLookUp_8, outer key:test.t1.a, inner key:test.t2.a", - "├─TableReader_19(Build) 1.00 root data:TableFullScan_18", - "│ └─TableFullScan_18 1.00 cop[tikv] table:t1 keep order:false", + "├─TableReader_13(Build) 1.00 root data:TableFullScan_12", + "│ └─TableFullScan_12 1.00 cop[tikv] table:t1 keep order:false", "└─IndexLookUp_8(Probe) 1.00 root ", " ├─IndexRangeScan_6(Build) 1.00 cop[tikv] table:t2, index:PRIMARY(a, b) range: decided by [eq(test.t2.a, test.t1.a) eq(test.t2.b, 1)], keep order:false", " └─TableRowIDScan_7(Probe) 1.00 cop[tikv] table:t2 keep order:false" @@ -252,8 +252,8 @@ "SQL": "desc select /*+ TIDB_INLJ(t2)*/ * from t1, t2 where t1.a = t2.a and t1.b = t2.b", "Plan": [ "IndexJoin_12 12487.50 root inner join, inner:TableReader_11, outer key:test.t1.a, inner key:test.t2.a, other cond:eq(test.t1.b, test.t2.b)", - "├─IndexReader_21(Build) 9990.00 root index:IndexFullScan_20", - "│ └─IndexFullScan_20 9990.00 cop[tikv] table:t1, index:idx_t1_b(b) keep order:false, stats:pseudo", + "├─IndexReader_16(Build) 9990.00 root index:IndexFullScan_15", + "│ └─IndexFullScan_15 9990.00 cop[tikv] table:t1, index:idx_t1_b(b) keep order:false, stats:pseudo", "└─TableReader_11(Probe) 1.00 root data:Selection_10", " └─Selection_10 1.00 cop[tikv] not(isnull(test.t2.b))", " └─TableRangeScan_9 1.00 cop[tikv] table:t2 range: decided by [test.t1.a], keep order:false, stats:pseudo" @@ -263,8 +263,8 @@ "SQL": "desc select /*+ TIDB_INLJ(t2)*/ * from t1, t2 where t1.a = t2.a and t1.b = t2.a and t1.b = t2.b", "Plan": [ "IndexJoin_12 12487.50 root inner join, inner:TableReader_11, outer key:test.t1.a, test.t1.b, inner key:test.t2.a, test.t2.a, other cond:eq(test.t1.b, test.t2.b)", - "├─IndexReader_20(Build) 9990.00 root index:IndexFullScan_19", - "│ └─IndexFullScan_19 9990.00 cop[tikv] table:t1, index:idx_t1_b(b) keep order:false, stats:pseudo", + "├─IndexReader_16(Build) 9990.00 root index:IndexFullScan_15", + "│ └─IndexFullScan_15 9990.00 cop[tikv] table:t1, index:idx_t1_b(b) keep order:false, stats:pseudo", "└─TableReader_11(Probe) 1.00 root data:Selection_10", " └─Selection_10 1.00 cop[tikv] not(isnull(test.t2.b))", " └─TableRangeScan_9 1.00 cop[tikv] table:t2 range: decided by [test.t1.a test.t1.b], keep order:false, stats:pseudo" @@ -280,8 +280,8 @@ "Plan": [ "Sort_7 12487.50 root test.t.a:asc", "└─IndexJoin_15 12487.50 root inner join, inner:IndexLookUp_14, outer key:test.t.a, inner key:test.t.b", - " ├─TableReader_25(Build) 10000.00 root data:TableFullScan_24", - " │ └─TableFullScan_24 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo", + " ├─TableReader_19(Build) 10000.00 root data:TableFullScan_18", + " │ └─TableFullScan_18 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo", " └─IndexLookUp_14(Probe) 1.25 root ", " ├─Selection_13(Build) 1.25 cop[tikv] not(isnull(test.t.b))", " │ └─IndexRangeScan_11 1.25 cop[tikv] table:t2, index:b(b) range: decided by [eq(test.t.b, test.t.a)], keep order:false, stats:pseudo", @@ -293,9 +293,9 @@ "SQL": "desc select /*+ INL_HASH_JOIN(t2) */ * from t t1, t t2 where t1.a = t2.b order by t2.a", "Plan": [ "Sort_7 12487.50 root test.t.a:asc", - "└─IndexHashJoin_23 12487.50 root inner join, inner:IndexLookUp_14, outer key:test.t.a, inner key:test.t.b", - " ├─TableReader_25(Build) 10000.00 root data:TableFullScan_24", - " │ └─TableFullScan_24 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo", + "└─IndexHashJoin_17 12487.50 root inner join, inner:IndexLookUp_14, outer key:test.t.a, inner key:test.t.b", + " ├─TableReader_19(Build) 10000.00 root data:TableFullScan_18", + " │ └─TableFullScan_18 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo", " └─IndexLookUp_14(Probe) 1.25 root ", " ├─Selection_13(Build) 1.25 cop[tikv] not(isnull(test.t.b))", " │ └─IndexRangeScan_11 1.25 cop[tikv] table:t2, index:b(b) range: decided by [eq(test.t.b, test.t.a)], keep order:false, stats:pseudo", @@ -306,14 +306,14 @@ { "SQL": "desc select /*+ INL_MERGE_JOIN(t2)*/ t1.a, t2.a from t t1, t t2 ,t t3 where t1.a = t2.a and t3.a=t2.a", "Plan": [ - "HashJoin_21 15625.00 root inner join, equal:[eq(test.t.a, test.t.a)]", - "├─TableReader_60(Build) 10000.00 root data:TableFullScan_59", - "│ └─TableFullScan_59 10000.00 cop[tikv] table:t3 keep order:false, stats:pseudo", - "└─IndexMergeJoin_56(Probe) 12500.00 root inner join, inner:TableReader_54, outer key:test.t.a, inner key:test.t.a", - " ├─TableReader_45(Build) 10000.00 root data:TableFullScan_44", - " │ └─TableFullScan_44 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo", - " └─TableReader_54(Probe) 1.00 root data:TableRangeScan_53", - " └─TableRangeScan_53 1.00 cop[tikv] table:t2 range: decided by [test.t.a], keep order:true, stats:pseudo" + "HashJoin_17 15625.00 root inner join, equal:[eq(test.t.a, test.t.a)]", + "├─TableReader_44(Build) 10000.00 root data:TableFullScan_43", + "│ └─TableFullScan_43 10000.00 cop[tikv] table:t3 keep order:false, stats:pseudo", + "└─IndexJoin_40(Probe) 12500.00 root inner join, inner:TableReader_39, outer key:test.t.a, inner key:test.t.a", + " ├─TableReader_33(Build) 10000.00 root data:TableFullScan_32", + " │ └─TableFullScan_32 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo", + " └─TableReader_39(Probe) 1.00 root data:TableRangeScan_38", + " └─TableRangeScan_38 1.00 cop[tikv] table:t2 range: decided by [test.t.a], keep order:false, stats:pseudo" ], "Warnings": [] }, @@ -322,23 +322,23 @@ "Plan": [ "Sort_10 9990.00 root test.t.b:asc", "└─Projection_12 9990.00 root test.t.a, test.t.b, test.t.c, test.t.b, Column#7", - " └─HashJoin_27 9990.00 root inner join, equal:[eq(test.t.b, test.t.b)]", - " ├─HashAgg_47(Build) 7992.00 root group by:test.t.b, funcs:max(Column#10)->Column#7, funcs:firstrow(test.t.b)->test.t.b", - " │ └─IndexReader_48 7992.00 root index:HashAgg_44", - " │ └─HashAgg_44 7992.00 cop[tikv] group by:test.t.b, funcs:max(test.t.a)->Column#10", - " │ └─IndexFullScan_37 9990.00 cop[tikv] table:t2, index:b(b) keep order:false, stats:pseudo", - " └─TableReader_51(Probe) 9990.00 root data:Selection_50", - " └─Selection_50 9990.00 cop[tikv] not(isnull(test.t.b))", - " └─TableFullScan_49 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo" + " └─HashJoin_21 9990.00 root inner join, equal:[eq(test.t.b, test.t.b)]", + " ├─HashAgg_41(Build) 7992.00 root group by:test.t.b, funcs:max(Column#10)->Column#7, funcs:firstrow(test.t.b)->test.t.b", + " │ └─IndexReader_42 7992.00 root index:HashAgg_38", + " │ └─HashAgg_38 7992.00 cop[tikv] group by:test.t.b, funcs:max(test.t.a)->Column#10", + " │ └─IndexFullScan_31 9990.00 cop[tikv] table:t2, index:b(b) keep order:false, stats:pseudo", + " └─TableReader_45(Probe) 9990.00 root data:Selection_44", + " └─Selection_44 9990.00 cop[tikv] not(isnull(test.t.b))", + " └─TableFullScan_43 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo" ], "Warnings": [] }, { "SQL": "desc select /*+ INL_HASH_JOIN(t2) */ distinct t2.a from t t1 join t t2 on t1.a = t2.a", "Plan": [ - "IndexHashJoin_17 12500.00 root inner join, inner:TableReader_10, outer key:test.t.a, inner key:test.t.a", - "├─TableReader_19(Build) 10000.00 root data:TableFullScan_18", - "│ └─TableFullScan_18 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo", + "IndexHashJoin_13 12500.00 root inner join, inner:TableReader_10, outer key:test.t.a, inner key:test.t.a", + "├─TableReader_15(Build) 10000.00 root data:TableFullScan_14", + "│ └─TableFullScan_14 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo", "└─TableReader_10(Probe) 1.00 root data:TableRangeScan_9", " └─TableRangeScan_9 1.00 cop[tikv] table:t2 range: decided by [test.t.a], keep order:false, stats:pseudo" ], @@ -348,12 +348,12 @@ "SQL": "desc select /*+ INL_JOIN(t2) */ * from t t1, t t2 where t1.a = t2.c order by t1.a", "Plan": [ "Sort_7 12487.50 root test.t.a:asc", - "└─HashJoin_19 12487.50 root inner join, equal:[eq(test.t.a, test.t.c)]", - " ├─TableReader_23(Build) 9990.00 root data:Selection_22", - " │ └─Selection_22 9990.00 cop[tikv] not(isnull(test.t.c))", - " │ └─TableFullScan_21 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo", - " └─TableReader_25(Probe) 10000.00 root data:TableFullScan_24", - " └─TableFullScan_24 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo" + "└─HashJoin_15 12487.50 root inner join, equal:[eq(test.t.a, test.t.c)]", + " ├─TableReader_19(Build) 9990.00 root data:Selection_18", + " │ └─Selection_18 9990.00 cop[tikv] not(isnull(test.t.c))", + " │ └─TableFullScan_17 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo", + " └─TableReader_21(Probe) 10000.00 root data:TableFullScan_20", + " └─TableFullScan_20 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo" ], "Warnings": [ "[planner:1815]Optimizer Hint /*+ INL_JOIN(t2) */ or /*+ TIDB_INLJ(t2) */ is inapplicable", diff --git a/planner/core/testdata/plan_suite_out.json b/planner/core/testdata/plan_suite_out.json index 0c11eb897a9fa..6e357cfe88fdf 100644 --- a/planner/core/testdata/plan_suite_out.json +++ b/planner/core/testdata/plan_suite_out.json @@ -357,7 +357,7 @@ }, { "SQL": "select * from (select * from t use index() order by b) t left join t t1 on t.a=t1.a limit 10", - "Best": "IndexMergeJoin{TableReader(Table(t)->TopN([test.t.b],0,10))->TopN([test.t.b],0,10)->TableReader(Table(t))}(test.t.a,test.t.a)->Limit" + "Best": "IndexJoin{TableReader(Table(t)->TopN([test.t.b],0,10))->TopN([test.t.b],0,10)->TableReader(Table(t))}(test.t.a,test.t.a)->Limit" }, { "SQL": "select * from ((SELECT 1 a,3 b) UNION (SELECT 2,1) ORDER BY (SELECT 2)) t order by a,b", @@ -414,11 +414,11 @@ }, { "SQL": "select * from t t1 left join t t2 on t1.b = t2.a where 1 = 1 limit 1", - "Best": "IndexMergeJoin{TableReader(Table(t)->Limit)->Limit->TableReader(Table(t))}(test.t.b,test.t.a)->Limit" + "Best": "IndexJoin{TableReader(Table(t)->Limit)->Limit->TableReader(Table(t))}(test.t.b,test.t.a)->Limit" }, { "SQL": "select * from t t1 join t t2 on t1.b = t2.a and t1.c = 1 and t1.d = 1 and t1.e = 1 order by t1.a limit 1", - "Best": "IndexMergeJoin{PointGet(Index(t.c_d_e)[KindInt64 1 KindInt64 1 KindInt64 1])->TableReader(Table(t))}(test.t.b,test.t.a)->TopN([test.t.a],0,1)" + "Best": "IndexJoin{PointGet(Index(t.c_d_e)[KindInt64 1 KindInt64 1 KindInt64 1])->TableReader(Table(t))}(test.t.b,test.t.a)->TopN([test.t.a],0,1)" }, { "SQL": "select * from t t1 join t t2 on t1.b = t2.b join t t3 on t1.b = t3.b", @@ -434,7 +434,7 @@ }, { "SQL": "select * from t t1 join t t2 on t1.a = t2.a join t t3 on t1.a = t3.a and t1.b = 1 and t3.c = 1", - "Best": "IndexMergeJoin{IndexMergeJoin{TableReader(Table(t)->Sel([eq(test.t.b, 1)]))->IndexLookUp(Index(t.c_d_e)[[1,1]], Table(t))}(test.t.a,test.t.a)->TableReader(Table(t))}(test.t.a,test.t.a)->Projection" + "Best": "IndexJoin{IndexJoin{TableReader(Table(t)->Sel([eq(test.t.b, 1)]))->IndexLookUp(Index(t.c_d_e)[[1,1]], Table(t))}(test.t.a,test.t.a)->TableReader(Table(t))}(test.t.a,test.t.a)->Projection" }, { "SQL": "select * from t where t.c in (select b from t s where s.a = t.a)", @@ -1390,7 +1390,7 @@ "Cases": [ { "SQL": "select t1.a, (select count(t2.a) from t t2 where t2.g in (select t3.d from t t3 where t3.c = t1.a)) as agg_col from t t1;", - "Best": "Apply{IndexReader(Index(t.f)[[NULL,+inf]])->IndexMergeJoin{IndexReader(Index(t.c_d_e)[[NULL,+inf]]->HashAgg)->HashAgg->IndexReader(Index(t.g)[[NULL,+inf]])}(test.t.d,test.t.g)}->HashAgg" + "Best": "Apply{IndexReader(Index(t.f)[[NULL,+inf]])->IndexJoin{IndexReader(Index(t.c_d_e)[[NULL,+inf]]->HashAgg)->HashAgg->IndexReader(Index(t.g)[[NULL,+inf]])}(test.t.d,test.t.g)}->HashAgg" } ] }, @@ -1407,15 +1407,15 @@ }, { "SQL": "select /*+ INL_MERGE_JOIN(t1) */ * from t1 join t2 on t1.a = t2.a;", - "Plan": "IndexMergeJoin{IndexLookUp(Index(t1.idx_a)[[NULL,+inf]]->Sel([not(isnull(test.t1.a))]), Table(t1))->Projection->TableReader(Table(t2)->Sel([not(isnull(test.t2.a))]))}(test.t2.a,test.t1.a)" + "Plan": "IndexJoin{IndexLookUp(Index(t1.idx_a)[[NULL,+inf]]->Sel([not(isnull(test.t1.a))]), Table(t1))->TableReader(Table(t2)->Sel([not(isnull(test.t2.a))]))}(test.t2.a,test.t1.a)" }, { "SQL": "select /*+ inl_merge_join(t2) */ t1.a, t2.a from t t1 left join t t2 use index(g_2) on t1.g=t2.g", - "Plan": "IndexMergeJoin{IndexReader(Index(t.g_3)[[NULL,+inf]])->IndexReader(Index(t.g_2)[[NULL,+inf]]->Sel([not(isnull(test.t.g))]))}(test.t.g,test.t.g)" + "Plan": "IndexJoin{IndexReader(Index(t.g_3)[[NULL,+inf]])->IndexReader(Index(t.g_2)[[NULL,+inf]]->Sel([not(isnull(test.t.g))]))}(test.t.g,test.t.g)" }, { "SQL": "select /*+inl_merge_join(t2)*/ t1.a, t2.a from t t1 left join t t2 use index(g_2) on t1.g=t2.g order by t1.a", - "Plan": "IndexMergeJoin{IndexReader(Index(t.g_3)[[NULL,+inf]])->IndexReader(Index(t.g_2)[[NULL,+inf]]->Sel([not(isnull(test.t.g))]))}(test.t.g,test.t.g)->Sort" + "Plan": "IndexJoin{TableReader(Table(t))->IndexReader(Index(t.g_2)[[NULL,+inf]]->Sel([not(isnull(test.t.g))]))}(test.t.g,test.t.g)" } ] }, @@ -1477,16 +1477,6 @@ " └─IndexFullScan_20 1.00 cop[tikv] table:tn, index:a(a, b, c, d) keep order:true, stats:pseudo" ], "Warning": "[planner:1815]Optimizer Hint LIMIT_TO_COP is inapplicable" - }, - { - "SQL": "select /*+ LIMIT_TO_COP() */ a from tn where a > 10 limit 1", - "Plan": [ - "Limit_8 1.00 root offset:0, count:1", - "└─IndexReader_12 1.00 root index:Limit_11", - " └─Limit_11 1.00 cop[tikv] offset:0, count:1", - " └─IndexRangeScan_10 1.00 cop[tikv] table:tn, index:a(a, b, c, d) range:(10,+inf], keep order:false, stats:pseudo" - ], - "Warning": "" } ] }, @@ -2113,8 +2103,8 @@ }, { "SQL": "select /*+ INL_MERGE_JOIN(t1) */ t1.b, t2.b from t1 inner join t2 on t1.a = t2.a;", - "Plan": "IndexMergeJoin{IndexLookUp(Index(t1.idx_a)[[NULL,+inf]]->Sel([not(isnull(test.t1.a))]), Table(t1))->Projection->TableReader(Table(t2)->Sel([not(isnull(test.t2.a))]))}(test.t2.a,test.t1.a)", - "Hints": "use_index(@`sel_1` `test`.`t1` `idx_a`), use_index(@`sel_1` `test`.`t2` )" + "Plan": "IndexJoin{IndexLookUp(Index(t1.idx_a)[[NULL,+inf]]->Sel([not(isnull(test.t1.a))]), Table(t1))->TableReader(Table(t2)->Sel([not(isnull(test.t2.a))]))}(test.t2.a,test.t1.a)", + "Hints": "use_index(@`sel_1` `test`.`t1` `idx_a`), use_index(@`sel_1` `test`.`t2` ), inl_join(@`sel_1` `test`.`t1`)" } ] }, @@ -2127,4 +2117,4 @@ } ] } -] \ No newline at end of file +] diff --git a/util/ranger/testdata/ranger_suite_out.json b/util/ranger/testdata/ranger_suite_out.json index c45605d68ce4e..bb9a9cc984af4 100644 --- a/util/ranger/testdata/ranger_suite_out.json +++ b/util/ranger/testdata/ranger_suite_out.json @@ -10,11 +10,11 @@ " ├─TableReader_15(Build) 2.00 root data:TableFullScan_14", " │ └─TableFullScan_14 2.00 cop[tikv] table:t keep order:false", " └─StreamAgg_20(Probe) 1.00 root funcs:count(1)->Column#16", - " └─IndexMergeJoin_44 2.00 root inner join, inner:TableReader_42, outer key:test.t.a, inner key:test.t.a", - " ├─IndexReader_33(Build) 2.00 root index:IndexRangeScan_32", - " │ └─IndexRangeScan_32 2.00 cop[tikv] table:s, index:idx(b, c, d) range: decided by [eq(test.t.b, 1) in(test.t.c, 1, 2) eq(test.t.d, test.t.a)], keep order:false", - " └─TableReader_42(Probe) 1.00 root data:TableRangeScan_41", - " └─TableRangeScan_41 1.00 cop[tikv] table:t1 range: decided by [test.t.a], keep order:true" + " └─IndexJoin_36 2.00 root inner join, inner:TableReader_35, outer key:test.t.a, inner key:test.t.a", + " ├─IndexReader_29(Build) 2.00 root index:IndexRangeScan_28", + " │ └─IndexRangeScan_28 2.00 cop[tikv] table:s, index:idx(b, c, d) range: decided by [eq(test.t.b, 1) in(test.t.c, 1, 2) eq(test.t.d, test.t.a)], keep order:false", + " └─TableReader_35(Probe) 1.00 root data:TableRangeScan_34", + " └─TableRangeScan_34 1.00 cop[tikv] table:t1 range: decided by [test.t.a], keep order:false" ] }, { From 5fd5527e48f28a010420ae4dddbecac046f4e425 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Thu, 29 Oct 2020 15:27:59 +0800 Subject: [PATCH 062/229] cherry pick #20270 to release-4.0 (#20702) --- executor/join.go | 20 ++++++++++++++++++++ executor/join_test.go | 24 ++++++++++++++++++++++++ 2 files changed, 44 insertions(+) diff --git a/executor/join.go b/executor/join.go index 03ea7fb5b9f46..ec3456a393a35 100644 --- a/executor/join.go +++ b/executor/join.go @@ -576,6 +576,16 @@ func (e *HashJoinExec) join2Chunk(workerID uint, probeSideChk *chunk.Chunk, hCtx } for i := range selected { + killed := atomic.LoadUint32(&e.ctx.GetSessionVars().Killed) == 1 + failpoint.Inject("killedInJoin2Chunk", func(val failpoint.Value) { + if val.(bool) { + killed = true + } + }) + if killed { + joinResult.err = ErrQueryInterrupted + return false, joinResult + } if !selected[i] || hCtx.hasNull[i] { // process unmatched probe side rows e.joiners[workerID].onMissMatch(false, probeSideChk.GetRow(i), joinResult.chk) } else { // process matched probe side rows @@ -607,6 +617,16 @@ func (e *HashJoinExec) join2ChunkForOuterHashJoin(workerID uint, probeSideChk *c } } for i := 0; i < probeSideChk.NumRows(); i++ { + killed := atomic.LoadUint32(&e.ctx.GetSessionVars().Killed) == 1 + failpoint.Inject("killedInJoin2ChunkForOuterHashJoin", func(val failpoint.Value) { + if val.(bool) { + killed = true + } + }) + if killed { + joinResult.err = ErrQueryInterrupted + return false, joinResult + } probeKey, probeRow := hCtx.hashVals[i].Sum64(), probeSideChk.GetRow(i) ok, joinResult = e.joinMatchedProbeSideRow2ChunkForOuterHashJoin(workerID, probeKey, probeRow, hCtx, joinResult) if !ok { diff --git a/executor/join_test.go b/executor/join_test.go index 84a920a3ec3cb..3dcb125a88a34 100644 --- a/executor/join_test.go +++ b/executor/join_test.go @@ -23,6 +23,7 @@ import ( . "github.com/pingcap/check" "github.com/pingcap/failpoint" "github.com/pingcap/tidb/config" + "github.com/pingcap/tidb/executor" plannercore "github.com/pingcap/tidb/planner/core" "github.com/pingcap/tidb/session" "github.com/pingcap/tidb/util" @@ -2309,3 +2310,26 @@ func (s *testSuiteJoinSerial) TestExplainAnalyzeJoin(c *C) { c.Assert(rows[0][0], Matches, "HashJoin.*") c.Assert(rows[0][5], Matches, "time:.*, loops:.*, build_hash_table:{total:.*, fetch:.*, build:.*}, probe:{concurrency:5, total:.*, max:.*, probe:.*, fetch:.*}") } + +func (s *testSuiteJoinSerial) TestIssue20270(c *C) { + tk := testkit.NewTestKitWithInit(c, s.store) + failpoint.Enable("github.com/pingcap/tidb/executor/killedInJoin2Chunk", "return(true)") + tk.MustExec("drop table if exists t;") + tk.MustExec("drop table if exists t1;") + tk.MustExec("create table t(c1 int, c2 int)") + tk.MustExec("create table t1(c1 int, c2 int)") + tk.MustExec("insert into t values(1,1),(2,2)") + tk.MustExec("insert into t1 values(2,3),(4,4)") + err := tk.QueryToErr("select /*+ TIDB_HJ(t, t1) */ * from t left join t1 on t.c1 = t1.c1 where t.c1 = 1 or t1.c2 > 20") + c.Assert(err, Equals, executor.ErrQueryInterrupted) + failpoint.Disable("github.com/pingcap/tidb/executor/killedInJoin2Chunk") + plannercore.ForceUseOuterBuild4Test = true + defer func() { + plannercore.ForceUseOuterBuild4Test = false + }() + failpoint.Enable("github.com/pingcap/tidb/executor/killedInJoin2ChunkForOuterHashJoin", "return(true)") + tk.MustExec("insert into t1 values(1,30),(2,40)") + err = tk.QueryToErr("select /*+ TIDB_HJ(t, t1) */ * from t left outer join t1 on t.c1 = t1.c1 where t.c1 = 1 or t1.c2 > 20") + c.Assert(err, Equals, executor.ErrQueryInterrupted) + failpoint.Disable("github.com/pingcap/tidb/executor/killedInJoin2ChunkForOuterHashJoin") +} From e691ed6ac8ba4e84e096f27acff14b8b3d610ee7 Mon Sep 17 00:00:00 2001 From: Zhou Kunqin <25057648+time-and-fate@users.noreply.github.com> Date: Thu, 29 Oct 2020 20:14:02 +0800 Subject: [PATCH 063/229] expression: utilize the flag of column arguments to simplify expressions (#20149) (#20570) --- cmd/explaintest/r/explain_easy.result | 21 ++-- cmd/explaintest/r/partition_pruning.result | 18 +-- expression/builtin_compare.go | 52 +++++++- expression/constant_fold.go | 25 ++++ expression/flag_simplify_test.go | 81 +++++++++++++ expression/testdata/flag_simplify_in.json | 28 +++++ expression/testdata/flag_simplify_out.json | 134 +++++++++++++++++++++ planner/core/point_get_plan_test.go | 2 +- planner/core/testdata/plan_suite_out.json | 8 +- 9 files changed, 343 insertions(+), 26 deletions(-) create mode 100644 expression/flag_simplify_test.go create mode 100644 expression/testdata/flag_simplify_in.json create mode 100644 expression/testdata/flag_simplify_out.json diff --git a/cmd/explaintest/r/explain_easy.result b/cmd/explaintest/r/explain_easy.result index 6640e5c6eabec..0352729eac8f1 100644 --- a/cmd/explaintest/r/explain_easy.result +++ b/cmd/explaintest/r/explain_easy.result @@ -556,28 +556,29 @@ Projection_4 10.00 root plus(1, test.t.nb)->Column#5 explain select * from t ta left outer join t tb on ta.nb = tb.nb and ta.a > 1 where ifnull(ta.nb, 1) or ta.nb is null; id estRows task access object operator info HashJoin_7 8320.83 root left outer join, equal:[eq(test.t.nb, test.t.nb)], left cond:[gt(test.t.a, 1)] -├─TableReader_13(Build) 10000.00 root data:TableFullScan_12 -│ └─TableFullScan_12 10000.00 cop[tikv] table:tb keep order:false, stats:pseudo +├─TableReader_14(Build) 6656.67 root data:Selection_13 +│ └─Selection_13 6656.67 cop[tikv] or(test.t.nb, 0) +│ └─TableFullScan_12 10000.00 cop[tikv] table:tb keep order:false, stats:pseudo └─TableReader_11(Probe) 6656.67 root data:Selection_10 - └─Selection_10 6656.67 cop[tikv] or(test.t.nb, isnull(test.t.nb)) + └─Selection_10 6656.67 cop[tikv] or(test.t.nb, 0) └─TableFullScan_9 10000.00 cop[tikv] table:ta keep order:false, stats:pseudo explain select * from t ta right outer join t tb on ta.nb = tb.nb and ta.a > 1 where ifnull(tb.nb, 1) or tb.nb is null; id estRows task access object operator info HashJoin_7 6656.67 root right outer join, equal:[eq(test.t.nb, test.t.nb)] -├─TableReader_11(Build) 3333.33 root data:Selection_10 -│ └─Selection_10 3333.33 cop[tikv] gt(test.t.a, 1) +├─TableReader_11(Build) 2218.89 root data:Selection_10 +│ └─Selection_10 2218.89 cop[tikv] gt(test.t.a, 1), or(test.t.nb, 0) │ └─TableFullScan_9 10000.00 cop[tikv] table:ta keep order:false, stats:pseudo └─TableReader_14(Probe) 6656.67 root data:Selection_13 - └─Selection_13 6656.67 cop[tikv] or(test.t.nb, isnull(test.t.nb)) + └─Selection_13 6656.67 cop[tikv] or(test.t.nb, 0) └─TableFullScan_12 10000.00 cop[tikv] table:tb keep order:false, stats:pseudo explain select * from t ta inner join t tb on ta.nb = tb.nb and ta.a > 1 where ifnull(tb.nb, 1) or tb.nb is null; id estRows task access object operator info -HashJoin_9 4166.67 root inner join, equal:[eq(test.t.nb, test.t.nb)] -├─TableReader_12(Build) 3333.33 root data:Selection_11 -│ └─Selection_11 3333.33 cop[tikv] gt(test.t.a, 1) +HashJoin_9 2773.61 root inner join, equal:[eq(test.t.nb, test.t.nb)] +├─TableReader_12(Build) 2218.89 root data:Selection_11 +│ └─Selection_11 2218.89 cop[tikv] gt(test.t.a, 1), or(test.t.nb, 0) │ └─TableFullScan_10 10000.00 cop[tikv] table:ta keep order:false, stats:pseudo └─TableReader_15(Probe) 6656.67 root data:Selection_14 - └─Selection_14 6656.67 cop[tikv] or(test.t.nb, isnull(test.t.nb)) + └─Selection_14 6656.67 cop[tikv] or(test.t.nb, 0) └─TableFullScan_13 10000.00 cop[tikv] table:tb keep order:false, stats:pseudo explain select ifnull(t.nc, 1) in (select count(*) from t s , t t1 where s.a = t.a and s.a = t1.a) from t; id estRows task access object operator info diff --git a/cmd/explaintest/r/partition_pruning.result b/cmd/explaintest/r/partition_pruning.result index c965f13deaadb..d8d024a551dd6 100644 --- a/cmd/explaintest/r/partition_pruning.result +++ b/cmd/explaintest/r/partition_pruning.result @@ -4000,18 +4000,18 @@ PartitionUnion_10 1000.00 root └─TableFullScan_20 10000.00 cop[tikv] table:t1, partition:p4 keep order:false, stats:pseudo explain select * from t1 where a>=0 and a <= 0xFFFFFFFFFFFFFFFF; id estRows task access object operator info -PartitionUnion_10 1000.00 root -├─TableReader_13 250.00 root data:Selection_12 -│ └─Selection_12 250.00 cop[tikv] ge(test.t1.a, 0), le(test.t1.a, 18446744073709551615) +PartitionUnion_10 13293.33 root +├─TableReader_13 3323.33 root data:Selection_12 +│ └─Selection_12 3323.33 cop[tikv] le(test.t1.a, 18446744073709551615) │ └─TableFullScan_11 10000.00 cop[tikv] table:t1, partition:p1 keep order:false, stats:pseudo -├─TableReader_16 250.00 root data:Selection_15 -│ └─Selection_15 250.00 cop[tikv] ge(test.t1.a, 0), le(test.t1.a, 18446744073709551615) +├─TableReader_16 3323.33 root data:Selection_15 +│ └─Selection_15 3323.33 cop[tikv] le(test.t1.a, 18446744073709551615) │ └─TableFullScan_14 10000.00 cop[tikv] table:t1, partition:p2 keep order:false, stats:pseudo -├─TableReader_19 250.00 root data:Selection_18 -│ └─Selection_18 250.00 cop[tikv] ge(test.t1.a, 0), le(test.t1.a, 18446744073709551615) +├─TableReader_19 3323.33 root data:Selection_18 +│ └─Selection_18 3323.33 cop[tikv] le(test.t1.a, 18446744073709551615) │ └─TableFullScan_17 10000.00 cop[tikv] table:t1, partition:p3 keep order:false, stats:pseudo -└─TableReader_22 250.00 root data:Selection_21 - └─Selection_21 250.00 cop[tikv] ge(test.t1.a, 0), le(test.t1.a, 18446744073709551615) +└─TableReader_22 3323.33 root data:Selection_21 + └─Selection_21 3323.33 cop[tikv] le(test.t1.a, 18446744073709551615) └─TableFullScan_20 10000.00 cop[tikv] table:t1, partition:p4 keep order:false, stats:pseudo drop table t1; create table t1 (a bigint) partition by range(a+0) ( diff --git a/expression/builtin_compare.go b/expression/builtin_compare.go index 642b2ae654dc8..874e7a8eacac6 100644 --- a/expression/builtin_compare.go +++ b/expression/builtin_compare.go @@ -1305,7 +1305,7 @@ func (c *compareFunctionClass) refineArgs(ctx sessionctx.Context, args []Express // -inf: 10000000 & 1 == 0 // For uint: // inf: 11111111 & 1 == 1 - // -inf: 00000000 & 0 == 0 + // -inf: 00000000 & 1 == 0 if arg1.Value.GetInt64()&1 == 1 { isPositiveInfinite = true } else { @@ -1344,7 +1344,55 @@ func (c *compareFunctionClass) refineArgs(ctx sessionctx.Context, args []Express return []Expression{NewOne(), NewZero()} } - return []Expression{finalArg0, finalArg1} + return c.refineArgsByUnsignedFlag(ctx, []Expression{finalArg0, finalArg1}) +} + +func (c *compareFunctionClass) refineArgsByUnsignedFlag(ctx sessionctx.Context, args []Expression) []Expression { + // Only handle int cases, cause MySQL declares that `UNSIGNED` is deprecated for FLOAT, DOUBLE and DECIMAL types, + // and support for it would be removed in a future version. + if args[0].GetType().EvalType() != types.ETInt || args[1].GetType().EvalType() != types.ETInt { + return args + } + colArgs := make([]*Column, 2) + constArgs := make([]*Constant, 2) + for i, arg := range args { + switch x := arg.(type) { + case *Constant: + constArgs[i] = x + case *Column: + colArgs[i] = x + case *CorrelatedColumn: + colArgs[i] = &x.Column + } + } + for i := 0; i < 2; i++ { + if con, col := constArgs[1-i], colArgs[i]; con != nil && col != nil { + v, isNull, err := con.EvalInt(ctx, chunk.Row{}) + if err != nil || isNull || v > 0 { + return args + } + if mysql.HasUnsignedFlag(col.RetType.Flag) && mysql.HasNotNullFlag(col.RetType.Flag) && !mysql.HasUnsignedFlag(con.RetType.Flag) { + op := c.op + if i == 1 { + op = symmetricOp[c.op] + } + if v == 0 && (op == opcode.LE || op == opcode.GT || op == opcode.NullEQ || op == opcode.EQ || op == opcode.NE) { + return args + } + // `unsigned_col < 0` equals to `1 < 0`, + // `unsigned_col > -1` equals to `1 > 0`, + // `unsigned_col <= -1` equals to `1 <= 0`, + // `unsigned_col >= 0` equals to `1 >= 0`, + // `unsigned_col == -1` equals to `1 == 0`, + // `unsigned_col != -1` equals to `1 != 0`, + // `unsigned_col <=> -1` equals to `1 <=> 0`, + // so we can replace the column argument with `1`, and the other constant argument with `0`. + args[i], args[1-i] = NewOne(), NewZero() + return args + } + } + } + return args } // getFunction sets compare built-in function signatures for various types. diff --git a/expression/constant_fold.go b/expression/constant_fold.go index 3f1913a0ce91e..c5810c8570387 100644 --- a/expression/constant_fold.go +++ b/expression/constant_fold.go @@ -15,6 +15,7 @@ package expression import ( "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/util/chunk" "github.com/pingcap/tidb/util/logutil" "go.uber.org/zap" @@ -28,6 +29,7 @@ func init() { ast.If: ifFoldHandler, ast.Ifnull: ifNullFoldHandler, ast.Case: caseWhenHandler, + ast.IsNull: isNullHandler, } } @@ -39,6 +41,29 @@ func FoldConstant(expr Expression) Expression { return e } +func isNullHandler(expr *ScalarFunction) (Expression, bool) { + arg0 := expr.GetArgs()[0] + if constArg, isConst := arg0.(*Constant); isConst { + isDeferredConst := constArg.DeferredExpr != nil || constArg.ParamMarker != nil + value, err := expr.Eval(chunk.Row{}) + if err != nil { + // Failed to fold this expr to a constant, print the DEBUG log and + // return the original expression to let the error to be evaluated + // again, in that time, the error is returned to the client. + logutil.BgLogger().Debug("fold expression to constant", zap.String("expression", expr.ExplainInfo()), zap.Error(err)) + return expr, isDeferredConst + } + if isDeferredConst { + return &Constant{Value: value, RetType: expr.RetType, DeferredExpr: expr}, true + } + return &Constant{Value: value, RetType: expr.RetType}, false + } + if mysql.HasNotNullFlag(arg0.GetType().Flag) { + return NewZero(), false + } + return expr, false +} + func ifFoldHandler(expr *ScalarFunction) (Expression, bool) { args := expr.GetArgs() foldedArg0, _ := foldConstant(args[0]) diff --git a/expression/flag_simplify_test.go b/expression/flag_simplify_test.go new file mode 100644 index 0000000000000..cb0ef080e00d6 --- /dev/null +++ b/expression/flag_simplify_test.go @@ -0,0 +1,81 @@ +// Copyright 2020 PingCAP, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// See the License for the specific language governing permissions and +// limitations under the License. + +package expression_test + +import ( + "fmt" + + . "github.com/pingcap/check" + "github.com/pingcap/tidb/domain" + "github.com/pingcap/tidb/kv" + "github.com/pingcap/tidb/sessionctx" + "github.com/pingcap/tidb/util/mock" + "github.com/pingcap/tidb/util/testkit" + "github.com/pingcap/tidb/util/testutil" +) + +var _ = Suite(&testFlagSimplifySuite{}) + +type testFlagSimplifySuite struct { + store kv.Storage + dom *domain.Domain + ctx sessionctx.Context + testData testutil.TestData +} + +func (s *testFlagSimplifySuite) cleanEnv(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + r := tk.MustQuery("show tables") + for _, tb := range r.Rows() { + tableName := tb[0] + tk.MustExec(fmt.Sprintf("drop table %v", tableName)) + } +} + +func (s *testFlagSimplifySuite) SetUpSuite(c *C) { + var err error + s.store, s.dom, err = newStoreWithBootstrap() + c.Assert(err, IsNil) + s.ctx = mock.NewContext() + s.testData, err = testutil.LoadTestSuiteData("testdata", "flag_simplify") + c.Assert(err, IsNil) +} + +func (s *testFlagSimplifySuite) TearDownSuite(c *C) { + c.Assert(s.testData.GenerateOutputIfNeeded(), IsNil) + s.dom.Close() + s.store.Close() +} + +func (s *testFlagSimplifySuite) TestSimplifyExpressionByFlag(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t") + tk.MustExec("create table t(id int primary key, a bigint unsigned not null, b bigint unsigned)") + + var input []string + var output []struct { + SQL string + Plan []string + } + s.testData.GetTestCases(c, &input, &output) + for i, tt := range input { + s.testData.OnRecord(func() { + output[i].SQL = tt + output[i].Plan = s.testData.ConvertRowsToStrings(tk.MustQuery(tt).Rows()) + }) + tk.MustQuery(tt).Check(testkit.Rows(output[i].Plan...)) + } +} diff --git a/expression/testdata/flag_simplify_in.json b/expression/testdata/flag_simplify_in.json new file mode 100644 index 0000000000000..807a2e59984aa --- /dev/null +++ b/expression/testdata/flag_simplify_in.json @@ -0,0 +1,28 @@ +[ + { + "name": "TestSimplifyExpressionByFlag", + "cases": [ + "explain select * from t where a is null", + "explain select * from t where a is not null", + "explain select * from t where a > -1", + "explain select * from t where a <= -1", + "explain select * from t where a < 0", + "explain select * from t where a >= 0", + "explain select * from t where a = -1", + "explain select * from t where a <=> -1", + "explain select * from t where a != -1", + "explain select * from t where 0 > a", + "explain select * from t where 0 <= a", + "explain select * from t where -1 < a", + "explain select * from t where -1 >= a", + "explain select * from t where -1 = a", + "explain select * from t where -1 <=> a", + "explain select * from t where -1 != a", + // Tuples with null b should be filered out. + "explain select * from t where b >= 0", + "explain select * from t where b != -1", + // Int64 overflow corner case. + "explain select * from t where a = 0xFFFFFFFFFFFFFFFF" + ] + } +] diff --git a/expression/testdata/flag_simplify_out.json b/expression/testdata/flag_simplify_out.json new file mode 100644 index 0000000000000..62090584486ba --- /dev/null +++ b/expression/testdata/flag_simplify_out.json @@ -0,0 +1,134 @@ +[ + { + "Name": "TestSimplifyExpressionByFlag", + "Cases": [ + { + "SQL": "explain select * from t where a is null", + "Plan": [ + "TableDual_6 0.00 root rows:0" + ] + }, + { + "SQL": "explain select * from t where a is not null", + "Plan": [ + "TableReader_6 10000.00 root data:TableFullScan_5", + "└─TableFullScan_5 10000.00 cop[tikv] table:t keep order:false, stats:pseudo" + ] + }, + { + "SQL": "explain select * from t where a > -1", + "Plan": [ + "TableReader_6 10000.00 root data:TableFullScan_5", + "└─TableFullScan_5 10000.00 cop[tikv] table:t keep order:false, stats:pseudo" + ] + }, + { + "SQL": "explain select * from t where a <= -1", + "Plan": [ + "TableDual_6 0.00 root rows:0" + ] + }, + { + "SQL": "explain select * from t where a < 0", + "Plan": [ + "TableDual_6 0.00 root rows:0" + ] + }, + { + "SQL": "explain select * from t where a >= 0", + "Plan": [ + "TableReader_6 10000.00 root data:TableFullScan_5", + "└─TableFullScan_5 10000.00 cop[tikv] table:t keep order:false, stats:pseudo" + ] + }, + { + "SQL": "explain select * from t where a = -1", + "Plan": [ + "TableDual_6 0.00 root rows:0" + ] + }, + { + "SQL": "explain select * from t where a <=> -1", + "Plan": [ + "TableDual_6 0.00 root rows:0" + ] + }, + { + "SQL": "explain select * from t where a != -1", + "Plan": [ + "TableReader_6 10000.00 root data:TableFullScan_5", + "└─TableFullScan_5 10000.00 cop[tikv] table:t keep order:false, stats:pseudo" + ] + }, + { + "SQL": "explain select * from t where 0 > a", + "Plan": [ + "TableDual_6 0.00 root rows:0" + ] + }, + { + "SQL": "explain select * from t where 0 <= a", + "Plan": [ + "TableReader_6 10000.00 root data:TableFullScan_5", + "└─TableFullScan_5 10000.00 cop[tikv] table:t keep order:false, stats:pseudo" + ] + }, + { + "SQL": "explain select * from t where -1 < a", + "Plan": [ + "TableReader_6 10000.00 root data:TableFullScan_5", + "└─TableFullScan_5 10000.00 cop[tikv] table:t keep order:false, stats:pseudo" + ] + }, + { + "SQL": "explain select * from t where -1 >= a", + "Plan": [ + "TableDual_6 0.00 root rows:0" + ] + }, + { + "SQL": "explain select * from t where -1 = a", + "Plan": [ + "TableDual_6 0.00 root rows:0" + ] + }, + { + "SQL": "explain select * from t where -1 <=> a", + "Plan": [ + "TableDual_6 0.00 root rows:0" + ] + }, + { + "SQL": "explain select * from t where -1 != a", + "Plan": [ + "TableReader_6 10000.00 root data:TableFullScan_5", + "└─TableFullScan_5 10000.00 cop[tikv] table:t keep order:false, stats:pseudo" + ] + }, + { + "SQL": "explain select * from t where b >= 0", + "Plan": [ + "TableReader_7 3333.33 root data:Selection_6", + "└─Selection_6 3333.33 cop[tikv] ge(test.t.b, 0)", + " └─TableFullScan_5 10000.00 cop[tikv] table:t keep order:false, stats:pseudo" + ] + }, + { + "SQL": "explain select * from t where b != -1", + "Plan": [ + "TableReader_7 3333.33 root data:Selection_6", + "└─Selection_6 3333.33 cop[tikv] ne(test.t.b, -1)", + " └─TableFullScan_5 10000.00 cop[tikv] table:t keep order:false, stats:pseudo" + ] + }, + { + "SQL": "explain select * from t where a = 0xFFFFFFFFFFFFFFFF", + "Plan": [ + "TableReader_7 10.00 root data:Selection_6", + "└─Selection_6 10.00 cop[tikv] eq(test.t.a, 18446744073709551615)", + " └─TableFullScan_5 10000.00 cop[tikv] table:t keep order:false, stats:pseudo" + ] + } + ] + } +] diff --git a/planner/core/point_get_plan_test.go b/planner/core/point_get_plan_test.go index b4ec16be51c57..4ac571e21569b 100644 --- a/planner/core/point_get_plan_test.go +++ b/planner/core/point_get_plan_test.go @@ -91,7 +91,7 @@ func (s *testPointGetSuite) TestPointGetPlanCache(c *C) { "└─Point_Get_1 1.00 root table:t handle:1", )) tk.MustQuery("explain select a from t where a = -1").Check(testkit.Rows( - "TableDual_5 0.00 root rows:0", + "TableDual_6 0.00 root rows:0", )) tk.MustExec(`prepare stmt0 from "select a from t where a = ?"`) tk.MustExec("set @p0 = -1") diff --git a/planner/core/testdata/plan_suite_out.json b/planner/core/testdata/plan_suite_out.json index 6e357cfe88fdf..4644c9c7fd6f4 100644 --- a/planner/core/testdata/plan_suite_out.json +++ b/planner/core/testdata/plan_suite_out.json @@ -879,7 +879,7 @@ "Cases": [ { "SQL": "select a from t where c is not null", - "Best": "IndexReader(Index(t.c_d_e)[[-inf,+inf]])->Projection" + "Best": "IndexReader(Index(t.f)[[NULL,+inf]])" }, { "SQL": "select a from t where c >= 4", @@ -1225,17 +1225,17 @@ }, { "SQL": "select /*+ HASH_AGG() */ t1.a from t t1 where t1.a < any(select t2.b from t t2)", - "Best": "LeftHashJoin{IndexReader(Index(t.f)[[NULL,+inf]]->Sel([if(isnull(test.t.a), , 1)]))->TableReader(Table(t)->HashAgg)->HashAgg->Sel([ne(Column#27, 0)])}", + "Best": "LeftHashJoin{IndexReader(Index(t.f)[[NULL,+inf]]->Sel([1]))->TableReader(Table(t)->Sel([1])->HashAgg)->HashAgg->Sel([ne(Column#27, 0) 1])}", "Warning": "" }, { "SQL": "select /*+ hash_agg() */ t1.a from t t1 where t1.a != any(select t2.b from t t2)", - "Best": "LeftHashJoin{IndexReader(Index(t.f)[[NULL,+inf]]->Sel([if(isnull(test.t.a), , 1)]))->TableReader(Table(t))->Projection->HashAgg->Sel([ne(Column#28, 0)])}", + "Best": "LeftHashJoin{IndexReader(Index(t.f)[[NULL,+inf]]->Sel([1]))->TableReader(Table(t)->Sel([1]))->HashAgg->Sel([ne(Column#28, 0) 1])}", "Warning": "" }, { "SQL": "select /*+ hash_agg() */ t1.a from t t1 where t1.a = all(select t2.b from t t2)", - "Best": "LeftHashJoin{IndexReader(Index(t.f)[[NULL,+inf]])->TableReader(Table(t))->Projection->HashAgg}", + "Best": "LeftHashJoin{IndexReader(Index(t.f)[[NULL,+inf]])->TableReader(Table(t))->HashAgg->Sel([or(and(le(Column#26, 1), if(ne(Column#27, 0), , 1)), or(eq(Column#28, 0), 0))])}", "Warning": "" }, { From e069732d40d92b54a81ceed7f481ba249aa1efaa Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Fri, 30 Oct 2020 11:48:19 +0800 Subject: [PATCH 064/229] *:add the indexlookup runtime stats infomation (#20145) (#20695) --- distsql/select_result_test.go | 2 +- executor/distsql.go | 117 ++++++++++++++++++++++++++- executor/distsql_test.go | 14 ++++ executor/executor_test.go | 17 ++++ planner/core/common_plans.go | 15 ++-- util/execdetails/execdetails.go | 6 +- util/execdetails/execdetails_test.go | 4 +- 7 files changed, 161 insertions(+), 14 deletions(-) diff --git a/distsql/select_result_test.go b/distsql/select_result_test.go index 469d687517752..1e6d86fba9248 100644 --- a/distsql/select_result_test.go +++ b/distsql/select_result_test.go @@ -47,5 +47,5 @@ func (s *testSuite) TestUpdateCopRuntimeStats(c *C) { c.Assert(ctx.GetSessionVars().StmtCtx.RuntimeStatsColl, NotNil) c.Assert(len(sr.selectResp.GetExecutionSummaries()), Equals, len(sr.copPlanIDs)) sr.updateCopRuntimeStats(context.Background(), &tikv.CopRuntimeStats{ExecDetails: execdetails.ExecDetails{CalleeAddress: "callee"}}, 0) - c.Assert(ctx.GetSessionVars().StmtCtx.RuntimeStatsColl.GetCopStats(1234).String(), Equals, "time:1ns, loops:1") + c.Assert(ctx.GetSessionVars().StmtCtx.RuntimeStatsColl.GetCopStats(1234).String(), Equals, "tikv_task:{time:1ns, loops:1}") } diff --git a/executor/distsql.go b/executor/distsql.go index 39b66724783e9..c06aa4757d47c 100644 --- a/executor/distsql.go +++ b/executor/distsql.go @@ -14,13 +14,16 @@ package executor import ( + "bytes" "context" + "fmt" "math" "runtime" "runtime/trace" "sort" "sync" "sync/atomic" + "time" "unsafe" "github.com/pingcap/errors" @@ -38,6 +41,7 @@ import ( "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util" "github.com/pingcap/tidb/util/chunk" + "github.com/pingcap/tidb/util/execdetails" "github.com/pingcap/tidb/util/logutil" "github.com/pingcap/tidb/util/memory" "github.com/pingcap/tidb/util/ranger" @@ -358,6 +362,8 @@ type IndexLookUpExecutor struct { colLens []int // PushedLimit is used to skip the preceding and tailing handles when Limit is sunk into IndexLookUpReader. PushedLimit *plannercore.PushedDownLimit + + stats *IndexLookUpRunTimeStats } type checkIndexValue struct { @@ -379,6 +385,7 @@ func (e *IndexLookUpExecutor) Open(ctx context.Context) error { e.feedback.Invalidate() return err } + e.initRuntimeStats() err = e.open(ctx) if err != nil { e.feedback.Invalidate() @@ -432,7 +439,6 @@ func (e *IndexLookUpExecutor) startIndexWorker(ctx context.Context, kvRanges []k collExec := true e.dagPB.CollectExecutionSummaries = &collExec } - tracker := memory.NewTracker(memory.LabelForIndexWorker, -1) tracker.AttachTo(e.memTracker) var builder distsql.RequestBuilder @@ -452,8 +458,9 @@ func (e *IndexLookUpExecutor) startIndexWorker(ctx context.Context, kvRanges []k if e.checkIndexValue != nil { tps = e.idxColTps } + idxID := e.getIndexPlanRootID() // Since the first read only need handle information. So its returned col is only 1. - result, err := distsql.SelectWithRuntimeStats(ctx, e.ctx, kvReq, tps, e.feedback, getPhysicalPlanIDs(e.idxPlans), e.id) + result, err := distsql.SelectWithRuntimeStats(ctx, e.ctx, kvReq, tps, e.feedback, getPhysicalPlanIDs(e.idxPlans), idxID) if err != nil { return err } @@ -513,7 +520,11 @@ func (e *IndexLookUpExecutor) startTableWorker(ctx context.Context, workCh <-cha ctx1, cancel := context.WithCancel(ctx) go func() { defer trace.StartRegion(ctx1, "IndexLookUpTableWorker").End() + startTime := time.Now() worker.pickAndExecTask(ctx1) + if e.stats != nil { + atomic.AddInt64(&e.stats.TableRowScan, int64(time.Since(startTime))) + } cancel() e.tblWorkerWg.Done() }() @@ -522,7 +533,7 @@ func (e *IndexLookUpExecutor) startTableWorker(ctx context.Context, workCh <-cha func (e *IndexLookUpExecutor) buildTableReader(ctx context.Context, handles []int64) (Executor, error) { tableReaderExec := &TableReaderExecutor{ - baseExecutor: newBaseExecutor(e.ctx, e.schema, 0), + baseExecutor: newBaseExecutor(e.ctx, e.schema, e.getTableRootPlanID()), table: e.table, dagPB: e.tableRequest, startTS: e.startTS, @@ -607,6 +618,34 @@ func (e *IndexLookUpExecutor) getResultTask() (*lookupTableTask, error) { return e.resultCurr, nil } +func (e *IndexLookUpExecutor) initRuntimeStats() { + if e.runtimeStats != nil { + if e.stats == nil { + e.stats = &IndexLookUpRunTimeStats{ + IndexScan: 0, + TableRowScan: 0, + TableTaskNum: 0, + Concurrency: e.ctx.GetSessionVars().IndexLookupConcurrency, + } + e.ctx.GetSessionVars().StmtCtx.RuntimeStatsColl.RegisterStats(e.id, e.stats) + } + } +} + +func (e *IndexLookUpExecutor) getIndexPlanRootID() int { + if len(e.idxPlans) > 0 { + return e.idxPlans[len(e.idxPlans)-1].ID() + } + return e.id +} + +func (e *IndexLookUpExecutor) getTableRootPlanID() int { + if len(e.tblPlans) > 0 { + return e.tblPlans[len(e.tblPlans)-1].ID() + } + return e.id +} + // indexWorker is used by IndexLookUpExecutor to maintain index lookup background goroutines. type indexWorker struct { idxLookup *IndexLookUpExecutor @@ -653,7 +692,16 @@ func (w *indexWorker) fetchHandles(ctx context.Context, result distsql.SelectRes } else { chk = chunk.NewChunkWithCapacity([]*types.FieldType{types.NewFieldType(mysql.TypeLonglong)}, w.idxLookup.maxChunkSize) } + idxID := w.idxLookup.getIndexPlanRootID() + var basicStats *execdetails.BasicRuntimeStats + if w.idxLookup.ctx.GetSessionVars().StmtCtx.RuntimeStatsColl != nil { + if idxID != w.idxLookup.id { + basicStats = &execdetails.BasicRuntimeStats{} + w.idxLookup.ctx.GetSessionVars().StmtCtx.RuntimeStatsColl.RegisterStats(idxID, basicStats) + } + } for { + startTime := time.Now() handles, retChunk, scannedKeys, err := w.extractTaskHandles(ctx, chk, result, count) if err != nil { doneCh := make(chan error, 1) @@ -668,6 +716,9 @@ func (w *indexWorker) fetchHandles(ctx context.Context, result distsql.SelectRes return count, nil } task := w.buildTableTask(handles, retChunk) + if w.idxLookup.stats != nil { + atomic.AddInt64(&w.idxLookup.stats.IndexScan, int64(time.Since(startTime))) + } select { case <-ctx.Done(): return count, nil @@ -676,6 +727,9 @@ func (w *indexWorker) fetchHandles(ctx context.Context, result distsql.SelectRes case w.workCh <- task: w.resultCh <- task } + if basicStats != nil { + basicStats.Record(time.Since(startTime), chk.NumRows()) + } } } @@ -810,10 +864,67 @@ func (w *tableWorker) pickAndExecTask(ctx context.Context) { return } err := w.executeTask(ctx, task) + if w.idxLookup.stats != nil { + atomic.AddInt64(&w.idxLookup.stats.TableTaskNum, 1) + } task.doneCh <- err } } +// IndexLookUpRunTimeStats record the indexlookup runtime stat +type IndexLookUpRunTimeStats struct { + IndexScan int64 + TableRowScan int64 + TableTaskNum int64 + Concurrency int +} + +func (e *IndexLookUpRunTimeStats) String() string { + var buf bytes.Buffer + indexScan := atomic.LoadInt64(&e.IndexScan) + tableScan := atomic.LoadInt64(&e.TableRowScan) + tableTaskNum := atomic.LoadInt64(&e.TableTaskNum) + concurrency := e.Concurrency + if indexScan != 0 { + buf.WriteString(fmt.Sprintf("index_task:%s", time.Duration(indexScan))) + } + if tableScan != 0 { + if buf.Len() > 0 { + buf.WriteByte(',') + } + buf.WriteString(fmt.Sprintf(" table_task:{num:%d, concurrency:%d, time:%s}", tableTaskNum, concurrency, time.Duration(tableScan))) + } + return buf.String() +} + +// Clone implements the RuntimeStats interface. +func (e *IndexLookUpRunTimeStats) Clone() execdetails.RuntimeStats { + newRs := &IndexLookUpRunTimeStats{ + IndexScan: e.IndexScan, + TableRowScan: e.TableRowScan, + TableTaskNum: e.TableTaskNum, + Concurrency: e.Concurrency, + } + return newRs +} + +// Merge implements the RuntimeStats interface. +func (e *IndexLookUpRunTimeStats) Merge(other execdetails.RuntimeStats) { + tmp, ok := other.(*IndexLookUpRunTimeStats) + if !ok { + return + } + e.IndexScan += tmp.IndexScan + e.TableRowScan += tmp.TableRowScan + e.TableTaskNum += tmp.TableTaskNum + e.Concurrency += tmp.Concurrency +} + +// Tp implements the RuntimeStats interface. +func (e *IndexLookUpRunTimeStats) Tp() int { + return execdetails.TpIndexLookUpRunTimeStats +} + func (w *tableWorker) compareData(ctx context.Context, task *lookupTableTask, tableReader Executor) error { chk := newFirstChunk(tableReader) tblInfo := w.idxLookup.table.Meta() diff --git a/executor/distsql_test.go b/executor/distsql_test.go index 156465ea7292d..9775f9980c3c1 100644 --- a/executor/distsql_test.go +++ b/executor/distsql_test.go @@ -19,6 +19,7 @@ import ( "fmt" "runtime/pprof" "strings" + "time" . "github.com/pingcap/check" "github.com/pingcap/parser/model" @@ -252,3 +253,16 @@ func (s *testSuite3) TestPushLimitDownIndexLookUpReader(c *C) { tk.MustQuery("select * from tbl use index(idx_b_c) where b > 1 order by b desc limit 2,1").Check(testkit.Rows("3 3 3")) tk.MustQuery("select * from tbl use index(idx_b_c) where b > 1 and c > 1 limit 2,1").Check(testkit.Rows("4 4 4")) } + +func (s *testSuite3) TestIndexLookUpStats(c *C) { + stats := &executor.IndexLookUpRunTimeStats{ + IndexScan: int64(2 * time.Second), + TableRowScan: int64(2 * time.Second), + TableTaskNum: 2, + Concurrency: 1, + } + c.Assert(stats.String(), Equals, "index_task:2s, table_task:{num:2, concurrency:1, time:2s}") + c.Assert(stats.String(), Equals, stats.Clone().String()) + stats.Merge(stats.Clone()) + c.Assert(stats.String(), Equals, "index_task:4s, table_task:{num:4, concurrency:2, time:4s}") +} diff --git a/executor/executor_test.go b/executor/executor_test.go index fbf96891cfd03..eaa525521c01f 100644 --- a/executor/executor_test.go +++ b/executor/executor_test.go @@ -6062,6 +6062,23 @@ func (s *testSerialSuite1) TestCollectCopRuntimeStats(c *C) { c.Assert(failpoint.Disable("github.com/pingcap/tidb/store/tikv/tikvStoreRespResult"), IsNil) } +func (s *testSerialSuite1) TestIndexlookupRuntimeStats(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test;") + tk.MustExec("drop table if exists t1") + tk.MustExec("create table t1 (a int, b int, index(a))") + tk.MustExec("insert into t1 values (1,2),(2,3),(3,4)") + sql := "explain analyze select * from t1 use index(a) where a > 1;" + rows := tk.MustQuery(sql).Rows() + c.Assert(len(rows), Equals, 3) + explain := fmt.Sprintf("%v", rows[0]) + c.Assert(explain, Matches, ".*time:.*loops:.*index_task:.*table_task:{num.*concurrency.*time.*}.*") + indexExplain := fmt.Sprintf("%v", rows[1]) + tableExplain := fmt.Sprintf("%v", rows[2]) + c.Assert(indexExplain, Matches, ".*time:.*loops:.*cop_task:.*") + c.Assert(tableExplain, Matches, ".*time:.*loops:.*cop_task:.*") +} + func (s *testSuite) TestCollectDMLRuntimeStats(c *C) { tk := testkit.NewTestKit(c, s.store) tk.MustExec("use test") diff --git a/planner/core/common_plans.go b/planner/core/common_plans.go index 83d2b29e1a1b7..902b54be127e9 100644 --- a/planner/core/common_plans.go +++ b/planner/core/common_plans.go @@ -1023,11 +1023,7 @@ func getRuntimeInfo(ctx sessionctx.Context, p Plan, runtimeStatsColl *execdetail // There maybe some mock information for cop task to let runtimeStatsColl.Exists(p.ExplainID()) is true. // So check copTaskEkxecDetail first and print the real cop task information if it's not empty. - if runtimeStatsColl.ExistsCopStats(explainID) { - copstats := runtimeStatsColl.GetCopStats(explainID) - analyzeInfo = copstats.String() - actRows = fmt.Sprint(copstats.GetActRows()) - } else if runtimeStatsColl.ExistsRootStats(explainID) { + if runtimeStatsColl.ExistsRootStats(explainID) { rootstats := runtimeStatsColl.GetRootStats(explainID) analyzeInfo = rootstats.String() actRows = fmt.Sprint(rootstats.GetActRows()) @@ -1035,7 +1031,14 @@ func getRuntimeInfo(ctx sessionctx.Context, p Plan, runtimeStatsColl *execdetail analyzeInfo = "time:0ns, loops:0" actRows = "0" } - + if runtimeStatsColl.ExistsCopStats(explainID) { + copstats := runtimeStatsColl.GetCopStats(explainID) + if len(analyzeInfo) > 0 { + analyzeInfo += ", " + } + analyzeInfo += copstats.String() + actRows = fmt.Sprint(copstats.GetActRows()) + } memoryInfo = "N/A" memTracker := ctx.GetSessionVars().StmtCtx.MemTracker.SearchTrackerWithoutLock(p.ID()) if memTracker != nil { diff --git a/util/execdetails/execdetails.go b/util/execdetails/execdetails.go index 49c66aed1f1f1..75267884048f5 100644 --- a/util/execdetails/execdetails.go +++ b/util/execdetails/execdetails.go @@ -402,12 +402,12 @@ func (crs *CopRuntimeStats) String() string { } if totalTasks == 1 { - return fmt.Sprintf("time:%v, loops:%d", procTimes[0], totalIters) + return fmt.Sprintf("tikv_task:{time:%v, loops:%d}", procTimes[0], totalIters) } n := len(procTimes) sort.Slice(procTimes, func(i, j int) bool { return procTimes[i] < procTimes[j] }) - return fmt.Sprintf("proc max:%v, min:%v, p80:%v, p95:%v, iters:%v, tasks:%v", + return fmt.Sprintf("tikv_task:{proc max:%v, min:%v, p80:%v, p95:%v, iters:%v, tasks:%v}", procTimes[n-1], procTimes[0], procTimes[n*4/5], procTimes[n*19/20], totalIters, totalTasks) } @@ -430,6 +430,8 @@ const ( TpJoinRuntimeStats // TpSelectResultRuntimeStats is the tp for SelectResultRuntimeStats. TpSelectResultRuntimeStats + // TpIndexLookUpRunTimeStats is the tp for TpIndexLookUpRunTimeStats + TpIndexLookUpRunTimeStats // TpSlowQueryRuntimeStat is the tp for TpSlowQueryRuntimeStat TpSlowQueryRuntimeStat // TpInsertRuntimeStat is the tp for InsertRuntimeStat diff --git a/util/execdetails/execdetails_test.go b/util/execdetails/execdetails_test.go index 78e4f3387185f..734bec3fad22c 100644 --- a/util/execdetails/execdetails_test.go +++ b/util/execdetails/execdetails_test.go @@ -95,7 +95,7 @@ func TestCopRuntimeStats(t *testing.T) { t.Fatal("exist") } cop := stats.GetCopStats(tableScanID) - if cop.String() != "proc max:2ns, min:1ns, p80:2ns, p95:2ns, iters:3, tasks:2" { + if cop.String() != "tikv_task:{proc max:2ns, min:1ns, p80:2ns, p95:2ns, iters:3, tasks:2}" { t.Fatal("table_scan") } copStats := cop.stats["8.8.8.8"] @@ -108,7 +108,7 @@ func TestCopRuntimeStats(t *testing.T) { t.Fatalf("cop stats string is not expect, got: %v", copStats[0].String()) } - if stats.GetCopStats(aggID).String() != "proc max:4ns, min:3ns, p80:4ns, p95:4ns, iters:7, tasks:2" { + if stats.GetCopStats(aggID).String() != "tikv_task:{proc max:4ns, min:3ns, p80:4ns, p95:4ns, iters:7, tasks:2}" { t.Fatal("agg") } rootStats := stats.GetRootStats(tableReaderID) From 14532253d21f02e0ef90353843c1fbfbdca9bdd0 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Tue, 3 Nov 2020 14:04:37 +0800 Subject: [PATCH 065/229] *: fix CI break on errors.toml (#20742) (#20746) --- errors.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/errors.toml b/errors.toml index 529f221fc0716..f1009965ddbd3 100644 --- a/errors.toml +++ b/errors.toml @@ -1,5 +1,5 @@ # AUTOGENERATED BY github.com/pingcap/tiup/components/errdoc/errdoc-gen -# DO NOT EDIT THIS FILE, PLEASE CHANGE ERROR DEFINITION IF CONTENT IMPROPER. +# YOU CAN CHANGE THE 'description'/'workaround' FIELDS IF THEM ARE IMPROPER. ["admin:8223"] error = ''' From 93c1c6724f26284fd37625df90eaf65488eef9d4 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Tue, 3 Nov 2020 16:03:05 +0800 Subject: [PATCH 066/229] ddl, ci: force domain to reload schema before execute SQL. (#19580) (#20788) Signed-off-by: ti-srebot --- ddl/db_change_test.go | 6 ++++++ ddl/db_test.go | 3 +++ 2 files changed, 9 insertions(+) diff --git a/ddl/db_change_test.go b/ddl/db_change_test.go index 400fa71780589..3d341b0583622 100644 --- a/ddl/db_change_test.go +++ b/ddl/db_change_test.go @@ -65,6 +65,11 @@ type testStateChangeSuiteBase struct { preSQL string } +func forceReloadDomain(sess session.Session) { + dom := domain.GetDomain(sess) + dom.Reload() +} + func (s *testStateChangeSuiteBase) SetUpSuite(c *C) { s.lease = 200 * time.Millisecond ddl.SetWaitTimeWhenErrorOccurred(1 * time.Microsecond) @@ -603,6 +608,7 @@ func (s *testStateChangeSuiteBase) runTestInSchemaState(c *C, state model.Schema if job.SchemaState != state { return } + forceReloadDomain(se) for _, sqlWithErr := range sqlWithErrs { _, err = se.Execute(context.Background(), sqlWithErr.sql) if !terror.ErrorEqual(err, sqlWithErr.expectErr) { diff --git a/ddl/db_test.go b/ddl/db_test.go index 0af29701a0853..baed13d410981 100644 --- a/ddl/db_test.go +++ b/ddl/db_test.go @@ -1693,6 +1693,7 @@ LOOP: case <-ticker.C: // delete some rows, and add some data for i := num; i < num+step; i++ { + forceReloadDomain(s.tk.Se) n := rand.Intn(num) s.tk.MustExec("begin") s.tk.MustExec("delete from t2 where c1 = ?", n) @@ -3864,6 +3865,7 @@ func (s *testDBSuite1) TestModifyColumnCharset(c *C) { s.tk.MustExec("create table t_mcc(a varchar(8) charset utf8, b varchar(8) charset utf8)") defer s.mustExec(c, "drop table t_mcc;") + forceReloadDomain(s.tk.Se) result := s.tk.MustQuery(`show create table t_mcc`) result.Check(testkit.Rows( "t_mcc CREATE TABLE `t_mcc` (\n" + @@ -4561,6 +4563,7 @@ func (s *testDBSuite4) testParallelExecSQL(c *C, sql1, sql2 string, se1, se2 ses func checkTableLock(c *C, se session.Session, dbName, tableName string, lockTp model.TableLockType) { tb := testGetTableByName(c, se, dbName, tableName) dom := domain.GetDomain(se) + dom.Reload() if lockTp != model.TableLockNone { c.Assert(tb.Meta().Lock, NotNil) c.Assert(tb.Meta().Lock.Tp, Equals, lockTp) From 8d9000860ca17104889459b645a785c167371a27 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Tue, 3 Nov 2020 16:31:59 +0800 Subject: [PATCH 067/229] session: increase cm_sketch column max length to 6291456(6MB) (#20152) (#20758) Signed-off-by: ti-srebot --- executor/analyze_test.go | 21 +++++++++++++++++++++ planner/core/planbuilder.go | 11 ++++++----- session/bootstrap.go | 12 +++++++++++- session/session.go | 2 +- 4 files changed, 39 insertions(+), 7 deletions(-) diff --git a/executor/analyze_test.go b/executor/analyze_test.go index 04bcb17776325..dea1d62373bc9 100644 --- a/executor/analyze_test.go +++ b/executor/analyze_test.go @@ -29,6 +29,7 @@ import ( "github.com/pingcap/tidb/executor" "github.com/pingcap/tidb/infoschema" "github.com/pingcap/tidb/kv" + plannercore "github.com/pingcap/tidb/planner/core" "github.com/pingcap/tidb/session" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/sessionctx/stmtctx" @@ -160,6 +161,26 @@ func (s *testSuite1) TestAnalyzeParameters(c *C) { width, depth = col.CMSketch.GetWidthAndDepth() c.Assert(depth, Equals, int32(4)) c.Assert(width, Equals, int32(4)) + + // Test very large cmsketch + tk.MustExec(fmt.Sprintf("analyze table t with %d cmsketch width, %d cmsketch depth", plannercore.CMSketchSizeLimit, 1)) + tbl = s.dom.StatsHandle().GetTableStats(tableInfo) + col = tbl.Columns[1] + c.Assert(col.Len(), Equals, 20) + c.Assert(len(col.CMSketch.TopN()), Equals, 1) + width, depth = col.CMSketch.GetWidthAndDepth() + c.Assert(depth, Equals, int32(1)) + c.Assert(width, Equals, int32(plannercore.CMSketchSizeLimit)) + + // Test very large cmsketch + tk.MustExec("analyze table t with 20480 cmsketch width, 50 cmsketch depth") + tbl = s.dom.StatsHandle().GetTableStats(tableInfo) + col = tbl.Columns[1] + c.Assert(col.Len(), Equals, 20) + c.Assert(len(col.CMSketch.TopN()), Equals, 1) + width, depth = col.CMSketch.GetWidthAndDepth() + c.Assert(depth, Equals, int32(50)) + c.Assert(width, Equals, int32(20480)) } func (s *testSuite1) TestAnalyzeTooLongColumns(c *C) { diff --git a/planner/core/planbuilder.go b/planner/core/planbuilder.go index 78b752eb39b89..dfa28a856c648 100644 --- a/planner/core/planbuilder.go +++ b/planner/core/planbuilder.go @@ -1502,13 +1502,14 @@ func (b *PlanBuilder) buildAnalyzeAllIndex(as *ast.AnalyzeTableStmt, opts map[as return p, nil } -var cmSketchSizeLimit = kv.TxnEntrySizeLimit / binary.MaxVarintLen32 +// CMSketchSizeLimit indicates the max size(width * depth) of a CMSketch. +var CMSketchSizeLimit = kv.TxnEntrySizeLimit / binary.MaxVarintLen32 var analyzeOptionLimit = map[ast.AnalyzeOptionType]uint64{ ast.AnalyzeOptNumBuckets: 1024, ast.AnalyzeOptNumTopN: 1024, - ast.AnalyzeOptCMSketchWidth: uint64(cmSketchSizeLimit), - ast.AnalyzeOptCMSketchDepth: uint64(cmSketchSizeLimit), + ast.AnalyzeOptCMSketchWidth: uint64(CMSketchSizeLimit), + ast.AnalyzeOptCMSketchDepth: uint64(CMSketchSizeLimit), ast.AnalyzeOptNumSamples: 100000, } @@ -1537,8 +1538,8 @@ func handleAnalyzeOptions(opts []ast.AnalyzeOpt) (map[ast.AnalyzeOptionType]uint } optMap[opt.Type] = opt.Value } - if optMap[ast.AnalyzeOptCMSketchWidth]*optMap[ast.AnalyzeOptCMSketchDepth] > uint64(cmSketchSizeLimit) { - return nil, errors.Errorf("cm sketch size(depth * width) should not larger than %d", cmSketchSizeLimit) + if optMap[ast.AnalyzeOptCMSketchWidth]*optMap[ast.AnalyzeOptCMSketchDepth] > uint64(CMSketchSizeLimit) { + return nil, errors.Errorf("cm sketch size(depth * width) should not larger than %d", CMSketchSizeLimit) } return optMap, nil } diff --git a/session/bootstrap.go b/session/bootstrap.go index d9d0d9faa5cc7..f7827d4527121 100644 --- a/session/bootstrap.go +++ b/session/bootstrap.go @@ -180,7 +180,7 @@ const ( tot_col_size bigint(64) NOT NULL DEFAULT 0, modify_count bigint(64) NOT NULL DEFAULT 0, version bigint(64) unsigned NOT NULL DEFAULT 0, - cm_sketch blob, + cm_sketch blob(6291456), stats_ver bigint(64) NOT NULL DEFAULT 0, flag bigint(64) NOT NULL DEFAULT 0, correlation double NOT NULL DEFAULT 0, @@ -389,6 +389,8 @@ const ( version46 = 46 // version47 add Source to bindings to indicate the way binding created. version47 = 47 + // version48 change mysql.stats_histograms cm_sketch column from blob to blob(6291456) + version48 = 48 ) var ( @@ -439,6 +441,7 @@ var ( upgradeToVer45, upgradeToVer46, upgradeToVer47, + upgradeToVer48, } ) @@ -1071,6 +1074,13 @@ func upgradeToVer47(s Session, ver int64) { doReentrantDDL(s, "ALTER TABLE mysql.bind_info ADD COLUMN `source` varchar(10) NOT NULL default 'unknown'", infoschema.ErrColumnExists) } +func upgradeToVer48(s Session, ver int64) { + if ver >= version48 { + return + } + doReentrantDDL(s, "ALTER TABLE mysql.stats_histograms MODIFY cm_sketch BLOB(6291456)") +} + // updateBootstrapVer updates bootstrap version variable in mysql.TiDB table. func updateBootstrapVer(s Session) { // Update bootstrap version. diff --git a/session/session.go b/session/session.go index 69d62660898f6..18efd85cb1800 100644 --- a/session/session.go +++ b/session/session.go @@ -1854,7 +1854,7 @@ func CreateSessionWithDomain(store kv.Storage, dom *domain.Domain) (*session, er const ( notBootstrapped = 0 - currentBootstrapVersion = version47 + currentBootstrapVersion = version48 ) func getStoreBootstrapVersion(store kv.Storage) int64 { From 21547718f916d406d46a465724b79b2f03f21874 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Tue, 3 Nov 2020 16:59:16 +0800 Subject: [PATCH 068/229] executor: avoid goroutine leak in index Lookup join (#19251) (#20792) Signed-off-by: ti-srebot --- cmd/benchdb/main.go | 9 +++++++++ executor/index_lookup_join.go | 5 ++++- executor/index_lookup_merge_join.go | 4 +++- session/session.go | 13 +++++++++---- 4 files changed, 25 insertions(+), 6 deletions(-) diff --git a/cmd/benchdb/main.go b/cmd/benchdb/main.go index 4d9e40daae6af..1eebcc3b62cea 100644 --- a/cmd/benchdb/main.go +++ b/cmd/benchdb/main.go @@ -108,8 +108,17 @@ func newBenchDB() *benchDB { func (ut *benchDB) mustExec(sql string) { rss, err := ut.session.Execute(context.Background(), sql) + defer func() { + for _, rs := range rss { + err = rs.Close() + if err != nil { + log.Fatal(err.Error()) + } + } + }() if err != nil { log.Fatal(err.Error()) + return } if len(rss) > 0 { ctx := context.Background() diff --git a/executor/index_lookup_join.go b/executor/index_lookup_join.go index ba8d42d70d8a1..c100fbfa47583 100644 --- a/executor/index_lookup_join.go +++ b/executor/index_lookup_join.go @@ -654,10 +654,13 @@ func (iw *innerWorker) fetchInnerResults(ctx context.Context, task *lookUpJoinTa }() } innerExec, err := iw.readerBuilder.buildExecutorForIndexJoin(ctx, lookUpContent, iw.indexRanges, iw.keyOff2IdxOff, iw.nextColCompareFilters, true) + if innerExec != nil { + defer terror.Call(innerExec.Close) + } if err != nil { return err } - defer terror.Call(innerExec.Close) + innerResult := chunk.NewList(retTypes(innerExec), iw.ctx.GetSessionVars().MaxChunkSize, iw.ctx.GetSessionVars().MaxChunkSize) innerResult.GetMemTracker().SetLabel(memory.LabelForBuildSideResult) innerResult.GetMemTracker().AttachTo(task.memTracker) diff --git a/executor/index_lookup_merge_join.go b/executor/index_lookup_merge_join.go index 2683b94d48dae..38fc9794378b7 100644 --- a/executor/index_lookup_merge_join.go +++ b/executor/index_lookup_merge_join.go @@ -496,10 +496,12 @@ func (imw *innerMergeWorker) handleTask(ctx context.Context, task *lookUpMergeJo } } imw.innerExec, err = imw.readerBuilder.buildExecutorForIndexJoin(ctx, dLookUpKeys, imw.indexRanges, imw.keyOff2IdxOff, imw.nextColCompareFilters, false) + if imw.innerExec != nil { + defer terror.Call(imw.innerExec.Close) + } if err != nil { return err } - defer terror.Call(imw.innerExec.Close) _, err = imw.fetchNextInnerResult(ctx, task) if err != nil { return err diff --git a/session/session.go b/session/session.go index 18efd85cb1800..874a6faf58ed6 100644 --- a/session/session.go +++ b/session/session.go @@ -830,6 +830,14 @@ func execRestrictedSQL(ctx context.Context, se *session, sql string) ([]chunk.Ro ctx = context.WithValue(ctx, execdetails.StmtExecDetailKey, &execdetails.StmtExecDetails{}) startTime := time.Now() recordSets, err := se.Execute(ctx, sql) + defer func() { + for _, rs := range recordSets { + closeErr := rs.Close() + if closeErr != nil && err == nil { + err = closeErr + } + } + }() if err != nil { return nil, nil, err } @@ -844,9 +852,6 @@ func execRestrictedSQL(ctx context.Context, se *session, sql string) ([]chunk.Ro if err != nil { return nil, nil, err } - if err = rs.Close(); err != nil { - return nil, nil, err - } if i == 0 { rows = tmp @@ -854,7 +859,7 @@ func execRestrictedSQL(ctx context.Context, se *session, sql string) ([]chunk.Ro } } metrics.QueryDurationHistogram.WithLabelValues(metrics.LblInternal).Observe(time.Since(startTime).Seconds()) - return rows, fields, nil + return rows, fields, err } func createSessionFunc(store kv.Storage) pools.Factory { From b77153df5be184fc571f9f48ceddcdbd5af8bf80 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Tue, 3 Nov 2020 18:08:21 +0800 Subject: [PATCH 069/229] transaction: lock unique key for delete operation (#19220) (#20705) Signed-off-by: ti-srebot Signed-off-by: you06 --- ddl/index.go | 2 +- executor/delete_test.go | 103 +++++++++++++++++++++++++++++++++++++ go.mod | 1 + go.sum | 3 ++ kv/kv.go | 7 ++- kv/memdb/arena.go | 2 +- kv/memdb/memdb.go | 42 +++++++++++++-- kv/memdb_buffer.go | 14 +++++ kv/mock.go | 10 ++++ session/txn.go | 16 ++++-- store/tikv/txn.go | 10 ++++ table/index.go | 2 +- table/tables/index.go | 12 +++-- table/tables/index_test.go | 2 +- table/tables/tables.go | 10 ++-- 15 files changed, 212 insertions(+), 24 deletions(-) create mode 100644 executor/delete_test.go diff --git a/ddl/index.go b/ddl/index.go index 0a8521a639c4c..190e7ca319ec5 100644 --- a/ddl/index.go +++ b/ddl/index.go @@ -44,7 +44,7 @@ import ( "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util" "github.com/pingcap/tidb/util/logutil" - "github.com/pingcap/tidb/util/rowDecoder" + decoder "github.com/pingcap/tidb/util/rowDecoder" "github.com/pingcap/tidb/util/timeutil" "go.uber.org/zap" ) diff --git a/executor/delete_test.go b/executor/delete_test.go new file mode 100644 index 0000000000000..437377d1bd94b --- /dev/null +++ b/executor/delete_test.go @@ -0,0 +1,103 @@ +// Copyright 2020 PingCAP, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// See the License for the specific language governing permissions and +// limitations under the License. + +package executor_test + +import ( + "sync" + "time" + + . "github.com/pingcap/check" + "github.com/pingcap/tidb/util/testkit" +) + +func (s *testSuite8) TestDeleteLockKey(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + + tk.MustExec(`drop table if exists t1, t2, t3, t4, t5, t6;`) + + cases := []struct { + ddl string + pre string + tk1Stmt string + tk2Stmt string + }{ + { + "create table t1(k int, kk int, val int, primary key(k, kk), unique key(val))", + "insert into t1 values(1, 2, 3)", + "delete from t1 where val = 3", + "insert into t1 values(1, 3, 3)", + }, + { + "create table t2(k int, kk int, val int, primary key(k, kk))", + "insert into t2 values(1, 1, 1)", + "delete from t2 where k = 1", + "insert into t2 values(1, 1, 2)", + }, + { + "create table t3(k int, kk int, val int, vv int, primary key(k, kk), unique key(val))", + "insert into t3 values(1, 2, 3, 4)", + "delete from t3 where vv = 4", + "insert into t3 values(1, 2, 3, 5)", + }, + { + "create table t4(k int, kk int, val int, vv int, primary key(k, kk), unique key(val))", + "insert into t4 values(1, 2, 3, 4)", + "delete from t4 where 1", + "insert into t4 values(1, 2, 3, 5)", + }, + { + "create table t5(k int, kk int, val int, vv int, primary key(k, kk), unique key(val))", + "insert into t5 values(1, 2, 3, 4), (2, 3, 4, 5)", + "delete from t5 where k in (1, 2, 3, 4)", + "insert into t5 values(1, 2, 3, 5)", + }, + { + "create table t6(k int, kk int, val int, vv int, primary key(k, kk), unique key(val))", + "insert into t6 values(1, 2, 3, 4), (2, 3, 4, 5)", + "delete from t6 where kk between 0 and 10", + "insert into t6 values(1, 2, 3, 5), (2, 3, 4, 6)", + }, + } + var wg sync.WaitGroup + for _, t := range cases { + wg.Add(1) + go func(t struct { + ddl string + pre string + tk1Stmt string + tk2Stmt string + }) { + tk1, tk2 := testkit.NewTestKit(c, s.store), testkit.NewTestKit(c, s.store) + tk1.MustExec("use test") + tk2.MustExec("use test") + tk1.MustExec(t.ddl) + tk1.MustExec(t.pre) + tk1.MustExec("begin pessimistic") + tk2.MustExec("begin pessimistic") + tk1.MustExec(t.tk1Stmt) + doneCh := make(chan struct{}, 1) + go func() { + tk2.MustExec(t.tk2Stmt) + doneCh <- struct{}{} + }() + time.Sleep(50 * time.Millisecond) + tk1.MustExec("commit") + <-doneCh + tk2.MustExec("commit") + wg.Done() + }(t) + } + wg.Wait() +} diff --git a/go.mod b/go.mod index b4fcc84b217e2..40bb65268da1c 100644 --- a/go.mod +++ b/go.mod @@ -63,6 +63,7 @@ require ( google.golang.org/genproto v0.0.0-20200108215221-bd8f9a0ef82f // indirect google.golang.org/grpc v1.26.0 gopkg.in/natefinch/lumberjack.v2 v2.0.0 + honnef.co/go/tools v0.0.1-2020.1.6 // indirect sigs.k8s.io/yaml v1.2.0 // indirect sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0 sourcegraph.com/sourcegraph/appdash-data v0.0.0-20151005221446-73f23eafcf67 diff --git a/go.sum b/go.sum index b5eb6d10adf32..008d016b1e84f 100644 --- a/go.sum +++ b/go.sum @@ -829,6 +829,7 @@ golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapK golang.org/x/tools v0.0.0-20200225230052-807dcd883420/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200325010219-a49f79bcc224/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= golang.org/x/tools v0.0.0-20200325203130-f53864d0dba1/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= +golang.org/x/tools v0.0.0-20200410194907-79a7a3126eef/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200521211927-2b542361a4fc/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200527183253-8e7acdbce89d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200820010801-b793a1359eac h1:DugppSxw0LSF8lcjaODPJZoDzq0ElTGskTst3ZaBkHI= @@ -920,6 +921,8 @@ honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9 honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.5 h1:nI5egYTGJakVyOryqLs1cQO5dO0ksin5XXs2pspk75k= honnef.co/go/tools v0.0.1-2020.1.5/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +honnef.co/go/tools v0.0.1-2020.1.6 h1:W18jzjh8mfPez+AwGLxmOImucz/IFjpNlrKVnaj2YVc= +honnef.co/go/tools v0.0.1-2020.1.6/go.mod h1:pyyisuGw24ruLjrr1ddx39WE0y9OooInRzEYLhQB2YY= k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= sigs.k8s.io/yaml v1.1.0 h1:4A07+ZFc2wgJwo8YNlQpr1rVlgUDlxXHhPJciaPY5gs= diff --git a/kv/kv.go b/kv/kv.go index 74ea94184bf90..abf56d03e922b 100644 --- a/kv/kv.go +++ b/kv/kv.go @@ -19,6 +19,7 @@ import ( "time" "github.com/pingcap/tidb/config" + "github.com/pingcap/tidb/kv/memdb" "github.com/pingcap/tidb/store/tikv/oracle" "github.com/pingcap/tidb/util/execdetails" "github.com/pingcap/tidb/util/memory" @@ -176,8 +177,12 @@ type MemBuffer interface { NewStagingBuffer() MemBuffer // Flush flushes all kvs in this buffer to parrent buffer. Flush() (int, error) - // Discard discads all kvs in this buffer. + // Discard discards all kvs in this buffer. Discard() + // GetFlag get KeyFlags by an exist key + GetFlags(ctx context.Context, k Key) memdb.KeyFlags + // DeleteWithNeedLock deletes key with a need lock mark + DeleteWithNeedLock(Key) error } // Transaction defines the interface for operations inside a Transaction. diff --git a/kv/memdb/arena.go b/kv/memdb/arena.go index edfd8bef73e99..cfe919e14d97f 100644 --- a/kv/memdb/arena.go +++ b/kv/memdb/arena.go @@ -90,7 +90,7 @@ func (a *arena) newNode(key []byte, v []byte, height int) (*node, arenaAddr) { addr, data := a.alloc(nodeSize) node := (*node)(unsafe.Pointer(&data[0])) node.keyLen = uint16(len(key)) - node.height = uint16(height) + node.height = uint8(height) node.valLen = uint32(len(v)) copy(data[node.nodeLen():], key) copy(data[node.nodeLen()+int(node.keyLen):], v) diff --git a/kv/memdb/memdb.go b/kv/memdb/memdb.go index e5984a2d06c9b..217389644e480 100644 --- a/kv/memdb/memdb.go +++ b/kv/memdb/memdb.go @@ -21,12 +21,22 @@ import ( "github.com/pingcap/tidb/util/fastrand" ) +// KeyFlags are metadata associated with key +type KeyFlags uint8 + const ( + flagNeedLocked KeyFlags = 1 << iota + maxHeight = 16 nodeHeaderSize = int(unsafe.Sizeof(nodeHeader{})) initBlockSize = 4 * 1024 ) +// HasNeedLocked returns whether the associated key required lock. +func (m KeyFlags) HasNeedLocked() bool { + return m&flagNeedLocked != 0 +} + // Sandbox is a space to keep pending kvs. type Sandbox struct { frozen bool @@ -60,10 +70,19 @@ func (sb *Sandbox) Get(key []byte) []byte { return node.getValue(data) } -// Put inserts kv into this sandbox. -func (sb *Sandbox) Put(key, value []byte) { +// GetFlags returns flag for key in this sandbox's space. +func (sb *Sandbox) GetFlags(key []byte) KeyFlags { + node, _, match := sb.findGreaterEqual(key) + if !match { + return 0 + } + return node.flags +} + +// PutWithFlags inserts kv into this sandbox with flags. +func (sb *Sandbox) PutWithFlags(key []byte, flags KeyFlags, value []byte) { if sb.frozen { - panic("cannot write to a sandbox when it has forked a new sanbox") + panic("cannot write to a sandbox when it has forked a new sandbox") } head := sb.getHead() @@ -90,6 +109,7 @@ func (sb *Sandbox) Put(key, value []byte) { if height > lsHeight { sb.height = height } + x.flags |= flags // We always insert from the base level and up. After you add a node in base level, we cannot // create a node in the level above because it would have discovered the node in the base level. @@ -110,6 +130,16 @@ func (sb *Sandbox) Put(key, value []byte) { sb.size += len(key) + len(value) } +// Put inserts kv into this sandbox. +func (sb *Sandbox) Put(key, value []byte) { + sb.PutWithFlags(key, 0, value) +} + +// PutWithNeedLock inserts kv into this sandbox and mark it with flagNeedLocked. +func (sb *Sandbox) PutWithNeedLock(key, value []byte) { + sb.PutWithFlags(key, flagNeedLocked, value) +} + // Derive derive a new sandbox to buffer a batch of modifactions. func (sb *Sandbox) Derive() *Sandbox { if sb.frozen { @@ -382,12 +412,15 @@ func (sb *Sandbox) merge(new *Sandbox) int { height := int(newNode.height) if exists { + newNode.flags = newNode.flags | ms.next[0].flags height = sb.prepareOverwrite(ms.next[:]) if height > int(newNode.height) { // The space is not enough, we have to create a new node. k := newNode.getKey(newNodeData) v := newNode.getValue(newNodeData) + flags := newNode.flags newNode, newNodeAddr = arena.newNode(k, v, height) + newNode.flags = flags } } @@ -475,7 +508,8 @@ func (ms *mergeState) calculateRecomputeHeight(key []byte, sb *Sandbox) int { } type nodeHeader struct { - height uint16 + flags KeyFlags + height uint8 keyLen uint16 valLen uint32 } diff --git a/kv/memdb_buffer.go b/kv/memdb_buffer.go index 2d7affcbd4a36..f1b03ad579ddb 100644 --- a/kv/memdb_buffer.go +++ b/kv/memdb_buffer.go @@ -88,6 +88,11 @@ func (m *memDbBuffer) Get(ctx context.Context, k Key) ([]byte, error) { return v, nil } +// GetFlags returns the flags associated with key. +func (m *memDbBuffer) GetFlags(ctx context.Context, k Key) memdb.KeyFlags { + return m.sandbox.GetFlags(k) +} + // Set associates key with value. func (m *memDbBuffer) Set(k Key, v []byte) error { if len(v) == 0 { @@ -113,6 +118,15 @@ func (m *memDbBuffer) Delete(k Key) error { return nil } +// DeleteWithNeedLock delete key with a need lock mark +func (m *memDbBuffer) DeleteWithNeedLock(k Key) error { + m.sandbox.PutWithNeedLock(k, nil) + if m.Size() > int(m.bufferSizeLimit) { + return ErrTxnTooLarge.GenWithStackByArgs(atomic.LoadUint64(&TxnTotalSizeLimit)) + } + return nil +} + // Size returns sum of keys and values length. func (m *memDbBuffer) Size() int { return m.sandbox.Size() diff --git a/kv/mock.go b/kv/mock.go index e7faea5c5765d..28fcfd221bc30 100644 --- a/kv/mock.go +++ b/kv/mock.go @@ -16,6 +16,7 @@ package kv import ( "context" + "github.com/pingcap/tidb/kv/memdb" "github.com/pingcap/tidb/store/tikv/oracle" ) @@ -81,6 +82,7 @@ func (t *mockTxn) IterReverse(k Key) (Iterator, error) { func (t *mockTxn) Set(k Key, v []byte) error { return nil } + func (t *mockTxn) Delete(k Key) error { return nil } @@ -141,6 +143,14 @@ func (t *mockTxn) MergeStmtKeyExistErrs() { } +func (t *mockTxn) DeleteWithNeedLock(k Key) error { + return t.Delete(k) +} + +func (t *mockTxn) GetFlags(ctx context.Context, k Key) memdb.KeyFlags { + return 0 +} + // NewMockTxn new a mockTxn. func NewMockTxn() Transaction { return &mockTxn{ diff --git a/session/txn.go b/session/txn.go index 242d13bdccd25..b9ce2741f6d57 100644 --- a/session/txn.go +++ b/session/txn.go @@ -364,6 +364,12 @@ func (st *TxnState) Delete(k kv.Key) error { return st.stmtBuf.Delete(k) } +// DeleteWithNeedLock overrides the Transaction interface. +func (st *TxnState) DeleteWithNeedLock(k kv.Key) error { + st.initStmtBuf() + return st.stmtBuf.DeleteWithNeedLock(k) +} + // Iter overrides the Transaction interface. func (st *TxnState) Iter(k kv.Key, upperBound kv.Key) (kv.Iterator, error) { retrieverIt, err := st.Transaction.Iter(k, upperBound) @@ -428,7 +434,7 @@ func (st *TxnState) KeysNeedToLock() ([]kv.Key, error) { } keys := make([]kv.Key, 0, st.stmtBufLen()) if err := kv.WalkMemBuffer(st.stmtBuf, func(k kv.Key, v []byte) error { - if !keyNeedToLock(k, v) { + if !st.stmtBuf.GetFlags(context.Background(), k).HasNeedLocked() && !keyNeedToLock(k, v) { return nil } // If the key is already locked, it will be deduplicated in LockKeys method later. @@ -447,11 +453,13 @@ func keyNeedToLock(k, v []byte) bool { // meta key always need to lock. return true } - isDelete := len(v) == 0 - if isDelete { - // only need to delete row key. + + // only need to delete row key here, + // primary key and unique indexes are handled outside. + if len(v) == 0 { return k[10] == 'r' } + if tablecodec.IsUntouchedIndexKValue(k, v) { return false } diff --git a/store/tikv/txn.go b/store/tikv/txn.go index 4ff782b35e3f5..9f094ba36775a 100644 --- a/store/tikv/txn.go +++ b/store/tikv/txn.go @@ -29,6 +29,7 @@ import ( "github.com/pingcap/failpoint" "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/kv" + "github.com/pingcap/tidb/kv/memdb" "github.com/pingcap/tidb/metrics" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/util/execdetails" @@ -214,6 +215,15 @@ func (txn *tikvTxn) Delete(k kv.Key) error { return txn.us.Delete(k) } +func (txn *tikvTxn) DeleteWithNeedLock(k kv.Key) error { + txn.dirty = true + return txn.us.DeleteWithNeedLock(k) +} + +func (txn *tikvTxn) GetFlags(ctx context.Context, k kv.Key) memdb.KeyFlags { + return txn.us.GetFlags(ctx, k) +} + func (txn *tikvTxn) SetOption(opt kv.Option, val interface{}) { txn.us.SetOption(opt, val) switch opt { diff --git a/table/index.go b/table/index.go index a4e8f45661ee5..4c6735fe53fa8 100644 --- a/table/index.go +++ b/table/index.go @@ -72,7 +72,7 @@ type Index interface { // Create supports insert into statement. Create(ctx sessionctx.Context, rm kv.RetrieverMutator, indexedValues []types.Datum, h int64, opts ...CreateIdxOptFunc) (int64, error) // Delete supports delete from statement. - Delete(sc *stmtctx.StatementContext, m kv.Mutator, indexedValues []types.Datum, h int64) error + Delete(sc *stmtctx.StatementContext, m kv.MemBuffer, indexedValues []types.Datum, h int64) error // Drop supports drop table, drop index statements. Drop(rm kv.RetrieverMutator) error // Exist supports check index exists or not. diff --git a/table/tables/index.go b/table/tables/index.go index 32faaead14bfc..fe914dc7dbd06 100644 --- a/table/tables/index.go +++ b/table/tables/index.go @@ -258,13 +258,17 @@ func (c *index) Create(sctx sessionctx.Context, rm kv.RetrieverMutator, indexedV return handle, kv.ErrKeyExists } -// Delete removes the entry for handle h and indexdValues from KV index. -func (c *index) Delete(sc *stmtctx.StatementContext, m kv.Mutator, indexedValues []types.Datum, h int64) error { - key, _, err := c.GenIndexKey(sc, indexedValues, h, nil) +// Delete removes the entry for handle h and indexedValues from KV index. +func (c *index) Delete(sc *stmtctx.StatementContext, m kv.MemBuffer, indexedValues []types.Datum, h int64) error { + key, distinct, err := c.GenIndexKey(sc, indexedValues, h, nil) if err != nil { return err } - err = m.Delete(key) + if distinct { + err = m.DeleteWithNeedLock(key) + } else { + err = m.Delete(key) + } return err } diff --git a/table/tables/index_test.go b/table/tables/index_test.go index 1ec6cc8e850d1..4e00cd95d76da 100644 --- a/table/tables/index_test.go +++ b/table/tables/index_test.go @@ -15,12 +15,12 @@ package tables_test import ( "context" - "github.com/pingcap/parser/mysql" "io" "time" . "github.com/pingcap/check" "github.com/pingcap/parser/model" + "github.com/pingcap/parser/mysql" "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/domain" "github.com/pingcap/tidb/kv" diff --git a/table/tables/tables.go b/table/tables/tables.go index 2fce193d438ff..019a9e781ef61 100644 --- a/table/tables/tables.go +++ b/table/tables/tables.go @@ -413,7 +413,7 @@ func (t *TableCommon) UpdateRecord(ctx context.Context, sctx sessionctx.Context, return nil } -func (t *TableCommon) rebuildIndices(ctx sessionctx.Context, rm kv.RetrieverMutator, h int64, touched []bool, oldData []types.Datum, newData []types.Datum, opts ...table.CreateIdxOptFunc) error { +func (t *TableCommon) rebuildIndices(ctx sessionctx.Context, rm kv.MemBuffer, h int64, touched []bool, oldData []types.Datum, newData []types.Datum, opts ...table.CreateIdxOptFunc) error { txn, err := ctx.Txn(true) if err != nil { return err @@ -870,11 +870,7 @@ func (t *TableCommon) removeRowData(ctx sessionctx.Context, h int64) error { } key := t.RecordKey(h) - err = txn.Delete([]byte(key)) - if err != nil { - return err - } - return nil + return txn.Delete(key) } // removeRowIndices removes all the indices of a row. @@ -903,7 +899,7 @@ func (t *TableCommon) removeRowIndices(ctx sessionctx.Context, h int64, rec []ty } // removeRowIndex implements table.Table RemoveRowIndex interface. -func (t *TableCommon) removeRowIndex(sc *stmtctx.StatementContext, rm kv.RetrieverMutator, h int64, vals []types.Datum, idx table.Index, txn kv.Transaction) error { +func (t *TableCommon) removeRowIndex(sc *stmtctx.StatementContext, rm kv.MemBuffer, h int64, vals []types.Datum, idx table.Index, txn kv.Transaction) error { return idx.Delete(sc, rm, vals, h) } From 75ef7075a7638a929b84556a48da55cb18586ef6 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Tue, 3 Nov 2020 18:20:22 +0800 Subject: [PATCH 070/229] executor: fix float data result (#20525) (#20657) Signed-off-by: ti-srebot --- server/util.go | 31 ++++++++++++++++++++--- server/util_test.go | 60 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 88 insertions(+), 3 deletions(-) diff --git a/server/util.go b/server/util.go index c7a2ac069e467..7150229ebc0fc 100644 --- a/server/util.go +++ b/server/util.go @@ -356,14 +356,25 @@ func lengthEncodedIntSize(n uint64) int { } const ( - expFormatBig = 1e15 - expFormatSmall = 1e-15 + expFormatBig = 1e15 + expFormatSmall = 1e-15 + defaultMySQLPrec = 5 ) func appendFormatFloat(in []byte, fVal float64, prec, bitSize int) []byte { absVal := math.Abs(fVal) + isEFormat := false + if bitSize == 32 { + isEFormat = (prec == types.UnspecifiedLength && (float32(absVal) >= expFormatBig || (float32(absVal) != 0 && float32(absVal) < expFormatSmall))) + } else { + isEFormat = (prec == types.UnspecifiedLength && (absVal >= expFormatBig || (absVal != 0 && absVal < expFormatSmall))) + } var out []byte - if prec == types.UnspecifiedLength && (absVal >= expFormatBig || (absVal != 0 && absVal < expFormatSmall)) { + + if isEFormat { + if bitSize == 32 { + prec = defaultMySQLPrec + } out = strconv.AppendFloat(in, fVal, 'e', prec, bitSize) valStr := out[len(in):] // remove the '+' from the string for compatibility. @@ -372,6 +383,20 @@ func appendFormatFloat(in []byte, fVal float64, prec, bitSize int) []byte { plusPosInOut := len(in) + plusPos out = append(out[:plusPosInOut], out[plusPosInOut+1:]...) } + // remove extra '0' + ePos := bytes.IndexByte(valStr, 'e') + pointPos := bytes.IndexByte(valStr, '.') + ePosInOut := len(in) + ePos + pointPosInOut := len(in) + pointPos + validPos := ePosInOut + for i := ePosInOut - 1; i >= pointPosInOut; i-- { + if out[i] == '0' || out[i] == '.' { + validPos = i + } else { + break + } + } + out = append(out[:validPos], out[ePosInOut:]...) } else { out = strconv.AppendFloat(in, fVal, 'f', prec, bitSize) } diff --git a/server/util_test.go b/server/util_test.go index e0d6393350503..d3148fc187693 100644 --- a/server/util_test.go +++ b/server/util_test.go @@ -340,6 +340,66 @@ func (s *testUtilSuite) TestAppendFormatFloat(c *C) { -1, 64, }, + { + -340282346638528860000000000000000000000, + "-3.40282e38", + -1, + 32, + }, + { + -34028236, + "-34028236.00", + 2, + 32, + }, + { + -17976921.34, + "-17976921.34", + 2, + 64, + }, + { + -3.402823466e+38, + "-3.40282e38", + -1, + 32, + }, + { + -1.7976931348623157e308, + "-1.7976931348623157e308", + -1, + 64, + }, + { + 10.0e20, + "1e21", + -1, + 32, + }, + { + 1e20, + "1e20", + -1, + 32, + }, + { + 10.0, + "10", + -1, + 32, + }, + { + 999999986991104, + "1e15", + -1, + 32, + }, + { + 1e15, + "1e15", + -1, + 32, + }, } for _, t := range tests { c.Assert(string(appendFormatFloat(nil, t.fVal, t.prec, t.bitSize)), Equals, t.out) From aea8571b4795de94dcc38de3edb5efb3f86e7cf1 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Wed, 4 Nov 2020 11:29:54 +0800 Subject: [PATCH 071/229] ddl: standardize change the job state after all other checks (#20212) (#20797) --- ddl/column.go | 33 ++++++++++++++++++++++++++------- ddl/ddl_worker.go | 5 +++++ ddl/index.go | 22 +++++++++++++++++----- ddl/partition.go | 7 +++++-- ddl/schema.go | 12 ++++++++++-- ddl/table.go | 10 ++++++++-- 6 files changed, 71 insertions(+), 18 deletions(-) diff --git a/ddl/column.go b/ddl/column.go index 568812d9bfc13..a35d2740a0f96 100644 --- a/ddl/column.go +++ b/ddl/column.go @@ -196,19 +196,30 @@ func onAddColumn(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, err error) switch columnInfo.State { case model.StateNone: // none -> delete only - job.SchemaState = model.StateDeleteOnly columnInfo.State = model.StateDeleteOnly ver, err = updateVersionAndTableInfoWithCheck(t, job, tblInfo, originalState != columnInfo.State) + if err != nil { + return ver, errors.Trace(err) + } + job.SchemaState = model.StateDeleteOnly case model.StateDeleteOnly: // delete only -> write only - job.SchemaState = model.StateWriteOnly columnInfo.State = model.StateWriteOnly ver, err = updateVersionAndTableInfo(t, job, tblInfo, originalState != columnInfo.State) + if err != nil { + return ver, errors.Trace(err) + } + // Update the job state when all affairs done. + job.SchemaState = model.StateWriteOnly case model.StateWriteOnly: // write only -> reorganization - job.SchemaState = model.StateWriteReorganization columnInfo.State = model.StateWriteReorganization ver, err = updateVersionAndTableInfo(t, job, tblInfo, originalState != columnInfo.State) + if err != nil { + return ver, errors.Trace(err) + } + // Update the job state when all affairs done. + job.SchemaState = model.StateWriteReorganization case model.StateWriteReorganization: // reorganization -> public // Adjust table column offset. @@ -239,7 +250,6 @@ func onDropColumn(t *meta.Meta, job *model.Job) (ver int64, _ error) { switch colInfo.State { case model.StatePublic: // public -> write only - job.SchemaState = model.StateWriteOnly colInfo.State = model.StateWriteOnly // Set this column's offset to the last and reset all following columns' offsets. adjustColumnInfoInDropColumn(tblInfo, colInfo.Offset) @@ -263,16 +273,26 @@ func onDropColumn(t *meta.Meta, job *model.Job) (ver int64, _ error) { } } ver, err = updateVersionAndTableInfoWithCheck(t, job, tblInfo, originalState != colInfo.State) + if err != nil { + return ver, errors.Trace(err) + } + job.SchemaState = model.StateWriteOnly case model.StateWriteOnly: // write only -> delete only - job.SchemaState = model.StateDeleteOnly colInfo.State = model.StateDeleteOnly ver, err = updateVersionAndTableInfo(t, job, tblInfo, originalState != colInfo.State) + if err != nil { + return ver, errors.Trace(err) + } + job.SchemaState = model.StateDeleteOnly case model.StateDeleteOnly: // delete only -> reorganization - job.SchemaState = model.StateDeleteReorganization colInfo.State = model.StateDeleteReorganization ver, err = updateVersionAndTableInfo(t, job, tblInfo, originalState != colInfo.State) + if err != nil { + return ver, errors.Trace(err) + } + job.SchemaState = model.StateDeleteReorganization case model.StateDeleteReorganization: // reorganization -> absent // All reorganization jobs are done, drop this column. @@ -397,7 +417,6 @@ func (w *worker) doModifyColumn( return ver, errors.Trace(err) } } - // Column from null to not null. if !mysql.HasNotNullFlag(oldCol.Flag) && mysql.HasNotNullFlag(newCol.Flag) { noPreventNullFlag := !mysql.HasPreventNullInsertFlag(oldCol.Flag) diff --git a/ddl/ddl_worker.go b/ddl/ddl_worker.go index 3866e0614e98f..972d50a4ac9b7 100644 --- a/ddl/ddl_worker.go +++ b/ddl/ddl_worker.go @@ -602,6 +602,11 @@ func (w *worker) runDDLJob(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, job.State = model.JobStateRunning } + // For every type, `schema/table` modification and `job` modification are conducted + // in the one kv transaction. The `schema/table` modification can be always discarded + // by kv reset when meets a unhandled error, but the `job` modification can't. + // So make sure job state and args change is after all other checks or make sure these + // change has no effect when retrying it. switch job.Type { case model.ActionCreateSchema: ver, err = onCreateSchema(d, t, job) diff --git a/ddl/index.go b/ddl/index.go index 190e7ca319ec5..47437aae4ae68 100644 --- a/ddl/index.go +++ b/ddl/index.go @@ -482,16 +482,19 @@ func (w *worker) onCreateIndex(d *ddlCtx, t *meta.Meta, job *model.Job, isPK boo ver, err = updateVersionAndTableInfo(t, job, tblInfo, originalState != indexInfo.State) case model.StateWriteOnly: // write only -> reorganization - job.SchemaState = model.StateWriteReorganization indexInfo.State = model.StateWriteReorganization updateHiddenColumns(tblInfo, indexInfo, model.StateWriteReorganization) _, err = checkPrimaryKeyNotNull(w, sqlMode, t, job, tblInfo, indexInfo) if err != nil { break } + ver, err = updateVersionAndTableInfo(t, job, tblInfo, originalState != indexInfo.State) + if err != nil { + return ver, err + } // Initialize SnapshotVer to 0 for later reorganization check. job.SnapshotVer = 0 - ver, err = updateVersionAndTableInfo(t, job, tblInfo, originalState != indexInfo.State) + job.SchemaState = model.StateWriteReorganization case model.StateWriteReorganization: // reorganization -> public updateHiddenColumns(tblInfo, indexInfo, model.StatePublic) @@ -568,7 +571,6 @@ func onDropIndex(t *meta.Meta, job *model.Job) (ver int64, _ error) { switch indexInfo.State { case model.StatePublic: // public -> write only - job.SchemaState = model.StateWriteOnly indexInfo.State = model.StateWriteOnly if len(dependentHiddenCols) > 0 { firstHiddenOffset := dependentHiddenCols[0].Offset @@ -579,18 +581,28 @@ func onDropIndex(t *meta.Meta, job *model.Job) (ver int64, _ error) { } } ver, err = updateVersionAndTableInfo(t, job, tblInfo, originalState != indexInfo.State) + if err != nil { + return ver, errors.Trace(err) + } + job.SchemaState = model.StateWriteOnly case model.StateWriteOnly: // write only -> delete only - job.SchemaState = model.StateDeleteOnly indexInfo.State = model.StateDeleteOnly updateHiddenColumns(tblInfo, indexInfo, model.StateDeleteOnly) ver, err = updateVersionAndTableInfo(t, job, tblInfo, originalState != indexInfo.State) + if err != nil { + return ver, errors.Trace(err) + } + job.SchemaState = model.StateDeleteOnly case model.StateDeleteOnly: // delete only -> reorganization - job.SchemaState = model.StateDeleteReorganization indexInfo.State = model.StateDeleteReorganization updateHiddenColumns(tblInfo, indexInfo, model.StateDeleteReorganization) ver, err = updateVersionAndTableInfo(t, job, tblInfo, originalState != indexInfo.State) + if err != nil { + return ver, errors.Trace(err) + } + job.SchemaState = model.StateDeleteReorganization case model.StateDeleteReorganization: // reorganization -> absent newIndices := make([]*model.IndexInfo, 0, len(tblInfo.Indices)) diff --git a/ddl/partition.go b/ddl/partition.go index 58a48733fe1fc..ca706e25a588a 100644 --- a/ddl/partition.go +++ b/ddl/partition.go @@ -103,11 +103,14 @@ func onAddTablePartition(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, _ job.State = model.JobStateCancelled return ver, errors.Trace(err) } - // none -> replica only - job.SchemaState = model.StateReplicaOnly // move the adding definition into tableInfo. updateAddingPartitionInfo(partInfo, tblInfo) ver, err = updateVersionAndTableInfoWithCheck(t, job, tblInfo, true) + if err != nil { + return ver, errors.Trace(err) + } + // none -> replica only + job.SchemaState = model.StateReplicaOnly case model.StateReplicaOnly: // replica only -> public // Here need do some tiflash replica complement check. diff --git a/ddl/schema.go b/ddl/schema.go index 88d91a7ceb01c..077e03b8527aa 100644 --- a/ddl/schema.go +++ b/ddl/schema.go @@ -152,14 +152,22 @@ func onDropSchema(t *meta.Meta, job *model.Job) (ver int64, _ error) { switch dbInfo.State { case model.StatePublic: // public -> write only - job.SchemaState = model.StateWriteOnly dbInfo.State = model.StateWriteOnly err = t.UpdateDatabase(dbInfo) + if err != nil { + return ver, errors.Trace(err) + } + // Update the job state when all affairs done. + job.SchemaState = model.StateWriteOnly case model.StateWriteOnly: // write only -> delete only - job.SchemaState = model.StateDeleteOnly dbInfo.State = model.StateDeleteOnly err = t.UpdateDatabase(dbInfo) + if err != nil { + return ver, errors.Trace(err) + } + // Update the job state when all affairs done. + job.SchemaState = model.StateDeleteOnly case model.StateDeleteOnly: dbInfo.State = model.StateNone var tables []*model.TableInfo diff --git a/ddl/table.go b/ddl/table.go index 550da191c52a2..96569e59833ee 100644 --- a/ddl/table.go +++ b/ddl/table.go @@ -172,14 +172,20 @@ func onDropTableOrView(t *meta.Meta, job *model.Job) (ver int64, _ error) { switch tblInfo.State { case model.StatePublic: // public -> write only - job.SchemaState = model.StateWriteOnly tblInfo.State = model.StateWriteOnly ver, err = updateVersionAndTableInfo(t, job, tblInfo, originalState != tblInfo.State) + if err != nil { + return ver, errors.Trace(err) + } + job.SchemaState = model.StateWriteOnly case model.StateWriteOnly: // write only -> delete only - job.SchemaState = model.StateDeleteOnly tblInfo.State = model.StateDeleteOnly ver, err = updateVersionAndTableInfo(t, job, tblInfo, originalState != tblInfo.State) + if err != nil { + return ver, errors.Trace(err) + } + job.SchemaState = model.StateDeleteOnly case model.StateDeleteOnly: tblInfo.State = model.StateNone ver, err = updateVersionAndTableInfo(t, job, tblInfo, originalState != tblInfo.State) From 904738c1d3b06708db5455f29f48307d00213643 Mon Sep 17 00:00:00 2001 From: baishen Date: Tue, 3 Nov 2020 22:08:31 -0600 Subject: [PATCH 072/229] executor: cherry-pick #20462 fix show create table int default value (#20699) --- cmd/explaintest/r/select.result | 2 +- cmd/explaintest/t/select.test | 2 +- executor/seqtest/seq_executor_test.go | 4 ++-- executor/show.go | 2 +- executor/show_test.go | 13 ++++++++++++- infoschema/tables_test.go | 4 ++-- 6 files changed, 19 insertions(+), 8 deletions(-) diff --git a/cmd/explaintest/r/select.result b/cmd/explaintest/r/select.result index 9cc9268571db6..33be1c12bb62d 100644 --- a/cmd/explaintest/r/select.result +++ b/cmd/explaintest/r/select.result @@ -470,7 +470,7 @@ HashJoin_10 7984.01 root semi join, equal:[eq(test.t1.a, test.t2.a)], other con drop table t; CREATE TABLE t (id int(10) unsigned NOT NULL AUTO_INCREMENT, i int(10) unsigned DEFAULT NULL, -x int(10) unsigned DEFAULT 0, +x int(10) unsigned DEFAULT '0', PRIMARY KEY (`id`) ); explain select row_number() over( partition by i ) - x as rnk from t; diff --git a/cmd/explaintest/t/select.test b/cmd/explaintest/t/select.test index 552e511f79e49..79284b70dcc77 100644 --- a/cmd/explaintest/t/select.test +++ b/cmd/explaintest/t/select.test @@ -225,7 +225,7 @@ explain select * from t1 where t1.a in (select t2.a as a from t2 where t2.b > t1 drop table t; CREATE TABLE t (id int(10) unsigned NOT NULL AUTO_INCREMENT, i int(10) unsigned DEFAULT NULL, - x int(10) unsigned DEFAULT 0, + x int(10) unsigned DEFAULT '0', PRIMARY KEY (`id`) ); explain select row_number() over( partition by i ) - x as rnk from t; diff --git a/executor/seqtest/seq_executor_test.go b/executor/seqtest/seq_executor_test.go index 0d36daf7d95bd..32b4798369aa2 100644 --- a/executor/seqtest/seq_executor_test.go +++ b/executor/seqtest/seq_executor_test.go @@ -196,7 +196,7 @@ func (s *seqTestSuite) TestShow(c *C) { row := result.Rows()[0] // For issue https://github.com/pingcap/tidb/issues/1061 expectedRow := []interface{}{ - "SHOW_test", "CREATE TABLE `SHOW_test` (\n `id` int(11) NOT NULL AUTO_INCREMENT,\n `c1` int(11) DEFAULT NULL COMMENT 'c1_comment',\n `c2` int(11) DEFAULT NULL,\n `c3` int(11) DEFAULT 1,\n `c4` text DEFAULT NULL,\n `c5` tinyint(1) DEFAULT NULL,\n PRIMARY KEY (`id`),\n KEY `idx_wide_c4` (`c3`,`c4`(10))\n) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=28934 COMMENT='table_comment'"} + "SHOW_test", "CREATE TABLE `SHOW_test` (\n `id` int(11) NOT NULL AUTO_INCREMENT,\n `c1` int(11) DEFAULT NULL COMMENT 'c1_comment',\n `c2` int(11) DEFAULT NULL,\n `c3` int(11) DEFAULT '1',\n `c4` text DEFAULT NULL,\n `c5` tinyint(1) DEFAULT NULL,\n PRIMARY KEY (`id`),\n KEY `idx_wide_c4` (`c3`,`c4`(10))\n) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=28934 COMMENT='table_comment'"} for i, r := range row { c.Check(r, Equals, expectedRow[i]) } @@ -216,7 +216,7 @@ func (s *seqTestSuite) TestShow(c *C) { c.Check(result.Rows(), HasLen, 1) row = result.Rows()[0] expectedRow = []interface{}{ - "ptest", "CREATE TABLE `ptest` (\n `a` int(11) NOT NULL,\n `b` double NOT NULL DEFAULT 2.0,\n `c` varchar(10) NOT NULL,\n `d` time DEFAULT NULL,\n `e` timestamp NULL DEFAULT NULL,\n `f` timestamp NULL DEFAULT NULL,\n PRIMARY KEY (`a`),\n UNIQUE KEY `d` (`d`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin"} + "ptest", "CREATE TABLE `ptest` (\n `a` int(11) NOT NULL,\n `b` double NOT NULL DEFAULT '2.0',\n `c` varchar(10) NOT NULL,\n `d` time DEFAULT NULL,\n `e` timestamp NULL DEFAULT NULL,\n `f` timestamp NULL DEFAULT NULL,\n PRIMARY KEY (`a`),\n UNIQUE KEY `d` (`d`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin"} for i, r := range row { c.Check(r, Equals, expectedRow[i]) } diff --git a/executor/show.go b/executor/show.go index 305f3172a4ec5..12684d9e5e35b 100644 --- a/executor/show.go +++ b/executor/show.go @@ -811,7 +811,7 @@ func ConstructResultOfShowCreateTable(ctx sessionctx.Context, tableInfo *model.T if col.Tp == mysql.TypeBit { defaultValBinaryLiteral := types.BinaryLiteral(defaultValStr) fmt.Fprintf(buf, " DEFAULT %s", defaultValBinaryLiteral.ToBitLiteralString(true)) - } else if types.IsTypeNumeric(col.Tp) || col.DefaultIsExpr { + } else if col.DefaultIsExpr { fmt.Fprintf(buf, " DEFAULT %s", format.OutputFormat(defaultValStr)) } else { fmt.Fprintf(buf, " DEFAULT '%s'", format.OutputFormat(defaultValStr)) diff --git a/executor/show_test.go b/executor/show_test.go index 27b8f48dd63fb..23b4ccfa8f2b3 100644 --- a/executor/show_test.go +++ b/executor/show_test.go @@ -627,6 +627,17 @@ func (s *testSuite5) TestShowCreateTable(c *C) { )) tk.MustExec("drop table t") + // for issue #20446 + tk.MustExec("drop table if exists t1;") + tk.MustExec("create table t1(c int unsigned default 0);") + tk.MustQuery("show create table `t1`").Check(testutil.RowsWithSep("|", + ""+ + "t1 CREATE TABLE `t1` (\n"+ + " `c` int(10) unsigned DEFAULT '0'\n"+ + ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin", + )) + tk.MustExec("drop table t1") + tk.MustExec("CREATE TABLE `log` (" + "`LOG_ID` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT," + "`ROUND_ID` bigint(20) UNSIGNED NOT NULL," + @@ -722,7 +733,7 @@ func (s *testSuite5) TestShowCreateTable(c *C) { tk.MustQuery("show create table default_num").Check(testutil.RowsWithSep("|", ""+ "default_num CREATE TABLE `default_num` (\n"+ - " `a` int(11) DEFAULT 11\n"+ + " `a` int(11) DEFAULT '11'\n"+ ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin", )) tk.MustExec(`drop table if exists default_varchar`) diff --git a/infoschema/tables_test.go b/infoschema/tables_test.go index 409b8ef6863f6..1743334051b83 100644 --- a/infoschema/tables_test.go +++ b/infoschema/tables_test.go @@ -294,12 +294,12 @@ func (s *testTableSuite) TestInfoschemaFieldValue(c *C) { tk.MustQuery("show create table information_schema.PROCESSLIST").Check( testkit.Rows("" + "PROCESSLIST CREATE TABLE `PROCESSLIST` (\n" + - " `ID` bigint(21) unsigned NOT NULL DEFAULT 0,\n" + + " `ID` bigint(21) unsigned NOT NULL DEFAULT '0',\n" + " `USER` varchar(16) NOT NULL DEFAULT '',\n" + " `HOST` varchar(64) NOT NULL DEFAULT '',\n" + " `DB` varchar(64) DEFAULT NULL,\n" + " `COMMAND` varchar(16) NOT NULL DEFAULT '',\n" + - " `TIME` int(7) NOT NULL DEFAULT 0,\n" + + " `TIME` int(7) NOT NULL DEFAULT '0',\n" + " `STATE` varchar(7) DEFAULT NULL,\n" + " `INFO` longtext DEFAULT NULL,\n" + " `DIGEST` varchar(64) DEFAULT '',\n" + From 3a401096403a8b3aa827bbbdd4f97ba6e589284b Mon Sep 17 00:00:00 2001 From: Rain Li Date: Wed, 4 Nov 2020 12:23:34 +0800 Subject: [PATCH 073/229] ddl: add missing flags when execute alter table change column statement (#20754) --- ddl/db_test.go | 22 ++++++++++++++++++++++ ddl/ddl_api.go | 46 ++++++++++++++++++++++++---------------------- 2 files changed, 46 insertions(+), 22 deletions(-) diff --git a/ddl/db_test.go b/ddl/db_test.go index baed13d410981..267144200b658 100644 --- a/ddl/db_test.go +++ b/ddl/db_test.go @@ -4905,6 +4905,28 @@ func (s *testSerialDBSuite) TestCommitTxnWithIndexChange(c *C) { tk.MustExec("admin check table t1") } +func (s *testDBSuite5) TestChangeColumnShouldKeepFlagWhenTypeIsTimestamp(c *C) { + s.tk = testkit.NewTestKit(c, s.store) + s.tk.MustExec("use " + s.schemaName) + s.mustExec(c, "drop table if exists tt") + s.mustExec(c, "create table tt(id int auto_increment primary key, c timestamp)") + ctx := s.tk.Se.(sessionctx.Context) + is := domain.GetDomain(ctx).InfoSchema() + tbl, err := is.TableByName(model.NewCIStr(s.schemaName), model.NewCIStr("tt")) + c.Assert(err, IsNil) + colC := tbl.Meta().Columns[1] + originFlag := colC.Flag + c.Assert(originFlag > 0, IsTrue) + c.Assert(colC.Name.L, Equals, "c") + s.mustExec(c, "alter table tt change column c cc timestamp") + is = domain.GetDomain(ctx).InfoSchema() + tbl, err = is.TableByName(model.NewCIStr(s.schemaName), model.NewCIStr("tt")) + c.Assert(err, IsNil) + colCC := tbl.Meta().Columns[1] + c.Assert(colCC.Name.L, Equals, "cc") + c.Assert(originFlag, Equals, colCC.Flag) +} + func init() { // Make sure it will only be executed once. domain.SchemaOutOfDateRetryInterval = int64(50 * time.Millisecond) diff --git a/ddl/ddl_api.go b/ddl/ddl_api.go index d60241d186029..34eec4319335a 100644 --- a/ddl/ddl_api.go +++ b/ddl/ddl_api.go @@ -589,26 +589,9 @@ func columnDefToCol(ctx sessionctx.Context, offset int, colDef *ast.ColumnDef, o // Set `NoDefaultValueFlag` if this field doesn't have a default value and // it is `not null` and not an `AUTO_INCREMENT` field or `TIMESTAMP` field. setNoDefaultValueFlag(col, hasDefaultValue) - if col.FieldType.EvalType().IsStringKind() && col.Charset == charset.CharsetBin { - col.Flag |= mysql.BinaryFlag - } - if col.Tp == mysql.TypeBit { - // For BIT field, it's charset is binary but does not have binary flag. - col.Flag &= ^mysql.BinaryFlag - col.Flag |= mysql.UnsignedFlag - } - if col.Tp == mysql.TypeYear { - // For Year field, it's charset is binary but does not have binary flag. - col.Flag &= ^mysql.BinaryFlag - col.Flag |= mysql.ZerofillFlag - } - // If you specify ZEROFILL for a numeric column, MySQL automatically adds the UNSIGNED attribute to the column. - // See https://dev.mysql.com/doc/refman/5.7/en/numeric-type-overview.html for more details. - // But some types like bit and year, won't show its unsigned flag in `show create table`. - if mysql.HasZerofillFlag(col.Flag) { - col.Flag |= mysql.UnsignedFlag - } + processColumnFlags(col) + err = checkPriKeyConstraint(col, hasDefaultValue, hasNullFlag, outPriKeyConstraint) if err != nil { return nil, nil, errors.Trace(err) @@ -2913,9 +2896,7 @@ func processColumnOptions(ctx sessionctx.Context, col *table.Column, options []* // it is `not null` and not an `AUTO_INCREMENT` field or `TIMESTAMP` field. setNoDefaultValueFlag(col, hasDefaultValue) - if col.Tp == mysql.TypeBit { - col.Flag |= mysql.UnsignedFlag - } + processColumnFlags(col) if hasDefaultValue { return errors.Trace(checkDefaultValue(ctx, col, true)) @@ -4691,3 +4672,24 @@ func (d *ddl) DropSequence(ctx sessionctx.Context, ti ast.Ident, ifExists bool) err = d.callHookOnChanged(err) return errors.Trace(err) } + +func processColumnFlags(col *table.Column) { + if col.FieldType.EvalType().IsStringKind() && col.Charset == charset.CharsetBin { + col.Flag |= mysql.BinaryFlag + } + if col.Tp == mysql.TypeBit { + col.Flag &= ^mysql.BinaryFlag + col.Flag |= mysql.UnsignedFlag + } + if col.Tp == mysql.TypeYear { + // For Year field, it's charset is binary but does not have binary flag. + col.Flag &= ^mysql.BinaryFlag + col.Flag |= mysql.ZerofillFlag + } + // If you specify ZEROFILL for a numeric column, MySQL automatically adds the UNSIGNED attribute to the column. + // See https://dev.mysql.com/doc/refman/5.7/en/numeric-type-overview.html for more details. + // But some types like bit and year, won't show its unsigned flag in `show create table`. + if mysql.HasZerofillFlag(col.Flag) { + col.Flag |= mysql.UnsignedFlag + } +} From 821b753c289e7d0cecf3c468293d87b51d373d68 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Wed, 4 Nov 2020 18:28:06 +0800 Subject: [PATCH 074/229] executor: force print slow log when trace is enabled (#20569) (#20578) Signed-off-by: ti-srebot --- executor/adapter.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/executor/adapter.go b/executor/adapter.go index dc1c2f7109ccf..1964b4a7a66d6 100644 --- a/executor/adapter.go +++ b/executor/adapter.go @@ -839,8 +839,9 @@ func (a *ExecStmt) LogSlowQuery(txnTS uint64, succ bool, hasMoreResults bool) { costTime := time.Since(sessVars.StartTime) + sessVars.DurationParse threshold := time.Duration(atomic.LoadUint64(&cfg.Log.SlowThreshold)) * time.Millisecond enable := cfg.Log.EnableSlowLog - // if the level is Debug, print slow logs anyway - if (!enable || costTime < threshold) && level > zapcore.DebugLevel { + // if the level is Debug, or trace is enabled, print slow logs anyway + force := level <= zapcore.DebugLevel || trace.IsEnabled() + if (!enable || costTime < threshold) && !force { return } var sql stringutil.StringerFunc From 766e7b9eea079febbb8bedbfc1a2cd2431d44bba Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Thu, 5 Nov 2020 10:37:01 +0800 Subject: [PATCH 075/229] executor: fix IndexHashJoin hang in finishJoinWorkers (#20780) (#20794) Signed-off-by: ti-srebot --- executor/index_lookup_hash_join.go | 14 ++++++++++++-- executor/join_test.go | 18 ++++++++++++++++++ 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/executor/index_lookup_hash_join.go b/executor/index_lookup_hash_join.go index 03a1c468ac6cd..e09bd49b65977 100644 --- a/executor/index_lookup_hash_join.go +++ b/executor/index_lookup_hash_join.go @@ -200,8 +200,12 @@ func (e *IndexNestedLoopHashJoin) startWorkers(ctx context.Context) { func (e *IndexNestedLoopHashJoin) finishJoinWorkers(r interface{}) { if r != nil { - e.resultCh <- &indexHashJoinResult{ - err: errors.New(fmt.Sprintf("%v", r)), + err := errors.New(fmt.Sprintf("%v", r)) + if !e.keepOuterOrder { + e.resultCh <- &indexHashJoinResult{err: err} + } else { + task := &indexHashJoinTask{err: err} + e.taskCh <- task } if e.cancelFunc != nil { e.cancelFunc() @@ -256,6 +260,9 @@ func (e *IndexNestedLoopHashJoin) runInOrder(ctx context.Context, req *chunk.Chu if e.isDryUpTasks(ctx) { return nil } + if e.curTask.err != nil { + return e.curTask.err + } select { case result, ok = <-e.curTask.resultCh: if !ok { @@ -338,6 +345,9 @@ func (ow *indexHashJoinOuterWorker) run(ctx context.Context) { return } if ow.keepOuterOrder { + failpoint.Inject("testIssue20779", func() { + panic("testIssue20779") + }) if finished := ow.pushToChan(ctx, task, ow.taskCh); finished { return } diff --git a/executor/join_test.go b/executor/join_test.go index 3dcb125a88a34..949b908b8d718 100644 --- a/executor/join_test.go +++ b/executor/join_test.go @@ -2333,3 +2333,21 @@ func (s *testSuiteJoinSerial) TestIssue20270(c *C) { c.Assert(err, Equals, executor.ErrQueryInterrupted) failpoint.Disable("github.com/pingcap/tidb/executor/killedInJoin2ChunkForOuterHashJoin") } + +func (s *testSuiteJoinSerial) TestIssue20779(c *C) { + tk := testkit.NewTestKitWithInit(c, s.store) + tk.MustExec("drop table if exists t1") + tk.MustExec("create table t1(a int, b int, index idx(b));") + tk.MustExec("insert into t1 values(1, 1);") + tk.MustExec("insert into t1 select * from t1;") + + c.Assert(failpoint.Enable("github.com/pingcap/tidb/executor/testIssue20779", "return"), IsNil) + defer func() { + c.Assert(failpoint.Disable("github.com/pingcap/tidb/executor/testIssue20779"), IsNil) + }() + + rs, err := tk.Exec("select /*+ inl_hash_join(t2) */ t1.b from t1 left join t1 t2 on t1.b=t2.b order by t1.b;") + c.Assert(err, IsNil) + _, err = session.GetRows4Test(context.Background(), nil, rs) + c.Assert(err.Error(), Matches, "testIssue20779") +} From 3bb6be036f99c6b348c4c0610d1a1c473db09376 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Thu, 5 Nov 2020 11:27:33 +0800 Subject: [PATCH 076/229] executor: fix skipped update when the value is treated as the same in CI collations (#20786) (#20835) Signed-off-by: ti-srebot --- executor/write.go | 5 +++++ executor/write_test.go | 15 +++++++++++++++ types/datum.go | 5 +++++ 3 files changed, 25 insertions(+) diff --git a/executor/write.go b/executor/write.go index 1d6fb6075f7f4..9f84cb214f35c 100644 --- a/executor/write.go +++ b/executor/write.go @@ -19,6 +19,7 @@ import ( "github.com/opentracing/opentracing-go" "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/charset" "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/expression" "github.com/pingcap/tidb/meta/autoid" @@ -94,7 +95,11 @@ func updateRecord(ctx context.Context, sctx sessionctx.Context, h int64, oldData // 3. Compare datum, then handle some flags. for i, col := range t.Cols() { + collation := newData[i].Collation() + // We should use binary collation to compare datum, otherwise the result will be incorrect. + newData[i].SetCollation(charset.CollationBin) cmp, err := newData[i].CompareDatum(sc, &oldData[i]) + newData[i].SetCollation(collation) if err != nil { return false, false, 0, err } diff --git a/executor/write_test.go b/executor/write_test.go index e00b5543bb1b5..d8f45dcfa5c64 100644 --- a/executor/write_test.go +++ b/executor/write_test.go @@ -30,6 +30,7 @@ import ( "github.com/pingcap/tidb/store/mockstore" "github.com/pingcap/tidb/table/tables" "github.com/pingcap/tidb/types" + "github.com/pingcap/tidb/util/collate" "github.com/pingcap/tidb/util/mock" "github.com/pingcap/tidb/util/testkit" ) @@ -2857,3 +2858,17 @@ from t order by c_str;`).Check(testkit.Rows("10")) tk.MustQuery(`select sum((select t1.c_str from t t1 where t1.c_int in (11, 10086) and t1.c_str > t.c_str order by t1.c_decimal limit 1) is null) nulls from t order by c_str;`).Check(testkit.Rows("10")) } + +func (s *testSerialSuite1) TestIssue20724(c *C) { + collate.SetNewCollationEnabledForTest(true) + defer collate.SetNewCollationEnabledForTest(false) + + tk := testkit.NewTestKitWithInit(c, s.store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t1") + tk.MustExec("create table t1(a varchar(10) collate utf8mb4_general_ci)") + tk.MustExec("insert into t1 values ('a')") + tk.MustExec("update t1 set a = 'A'") + tk.MustQuery("select * from t1").Check(testkit.Rows("A")) + tk.MustExec("drop table t1") +} diff --git a/types/datum.go b/types/datum.go index 2a45e28fe7ecf..5683058fbd21e 100644 --- a/types/datum.go +++ b/types/datum.go @@ -101,6 +101,11 @@ func (d *Datum) Collation() string { return d.collation } +// SetCollation sets the collation of the datum. +func (d *Datum) SetCollation(collation string) { + d.collation = collation +} + // Frac gets the frac of the datum. func (d *Datum) Frac() int { return int(d.decimal) From d32969f5889ca1cbffc8f44257d2cbf7aae4816b Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Thu, 5 Nov 2020 15:07:33 +0800 Subject: [PATCH 077/229] metrics: some improvements for batch client (#20506) (#20519) Signed-off-by: ti-srebot --- metrics/grafana/tidb.json | 246 ++----------- metrics/grafana/tidb_runtime.json | 556 ++++++++++++++++++++++++------ metrics/metrics.go | 5 +- metrics/tikvclient.go | 41 ++- store/tikv/client.go | 3 +- store/tikv/client_batch.go | 36 +- 6 files changed, 539 insertions(+), 348 deletions(-) diff --git a/metrics/grafana/tidb.json b/metrics/grafana/tidb.json index 9da8590c56178..94ea5f94a97a0 100644 --- a/metrics/grafana/tidb.json +++ b/metrics/grafana/tidb.json @@ -11264,68 +11264,55 @@ "panels": [ { "aliasColors": {}, - "bars": false, + "bars": true, "dashLength": 10, "dashes": false, "datasource": "${DS_TEST-CLUSTER}", - "description": "kv storage batch requests in queue", - "editable": true, - "error": false, + "description": "Metrics for 'no available connection'.\nThere should be no data here if the connection between TiDB and TiKV is healthy.", "fill": 1, - "grid": {}, "gridPos": { "h": 7, "w": 8, "x": 0, "y": 16 }, - "id": 176, + "id": 203, "legend": { - "alignAsTable": true, "avg": false, - "current": true, + "current": false, "max": false, "min": false, - "rightSide": true, "show": true, "total": false, - "values": true + "values": false }, - "lines": true, + "lines": false, "linewidth": 1, "links": [], "nullPointMode": "null as zero", "percentage": false, - "pointradius": 5, + "pointradius": 2, "points": false, "renderer": "flot", - "seriesOverrides": [ - { - "alias": "total", - "fill": 0, - "lines": false - } - ], + "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { - "expr": "sum(tidb_tikvclient_pending_batch_requests) by (store)", + "expr": "delta(tidb_tikvclient_batch_client_no_available_connection_total[30s])", "format": "time_series", - "intervalFactor": 2, - "legendFormat": "{{store}}", - "refId": "A", - "step": 40 + "intervalFactor": 1, + "legendFormat": "{{instance}}", + "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, - "title": "Pending Request Count by TiKV", + "title": "No Available Connection Counter", "tooltip": { - "msResolution": false, "shared": true, "sort": 0, "value_type": "individual" @@ -11353,7 +11340,7 @@ "logBase": 1, "max": null, "min": null, - "show": true + "show": false } ], "yaxis": { @@ -11367,7 +11354,7 @@ "dashLength": 10, "dashes": false, "datasource": "${DS_TEST-CLUSTER}", - "description": "kv storage batch processing durations", + "description": "kv storage batch processing unvailable durations", "editable": true, "error": false, "fill": 1, @@ -11378,14 +11365,14 @@ "x": 8, "y": 16 }, - "id": 179, + "id": 180, "legend": { - "alignAsTable": true, + "alignAsTable": false, "avg": false, "current": false, "max": false, "min": false, - "rightSide": true, + "rightSide": false, "show": true, "total": false, "values": false @@ -11404,9 +11391,10 @@ "steppedLine": false, "targets": [ { - "expr": "histogram_quantile(0.95, sum(rate(tidb_tikvclient_batch_wait_duration_bucket[1m])) by (le, instance))", + "expr": "histogram_quantile(0.95, sum(rate(tidb_tikvclient_batch_client_unavailable_seconds_bucket[30s])) by (le, instance))", "format": "time_series", - "intervalFactor": 2, + "hide": false, + "intervalFactor": 1, "legendFormat": "{{instance}}", "refId": "A", "step": 10 @@ -11416,7 +11404,7 @@ "timeFrom": null, "timeRegions": [], "timeShift": null, - "title": "Wait Duration 95", + "title": "Batch Client Unavailable Duration 95", "tooltip": { "msResolution": false, "shared": true, @@ -11433,7 +11421,7 @@ }, "yaxes": [ { - "format": "ns", + "format": "s", "label": null, "logBase": 1, "max": null, @@ -11473,12 +11461,12 @@ }, "id": 204, "legend": { - "alignAsTable": true, + "alignAsTable": false, "avg": false, "current": false, "max": false, "min": false, - "rightSide": true, + "rightSide": false, "show": true, "total": false, "values": false @@ -11497,190 +11485,10 @@ "steppedLine": false, "targets": [ { - "expr": "histogram_quantile(0.9999, sum(rate(tidb_tikvclient_batch_client_wait_connection_establish_bucket[1m])) by (le, instance))", - "format": "time_series", - "intervalFactor": 2, - "legendFormat": "{{instance}}", - "refId": "A", - "step": 10 - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Wait Connection Establish Duration", - "tooltip": { - "msResolution": false, - "shared": true, - "sort": 0, - "value_type": "cumulative" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "s", - "label": null, - "logBase": 1, - "max": null, - "min": "0", - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "${DS_TEST-CLUSTER}", - "description": "Metrics for 'no available connection'.\nThere should be no data here if the connection between TiDB and TiKV is healthy.", - "fill": 1, - "gridPos": { - "h": 7, - "w": 16, - "x": 0, - "y": 23 - }, - "id": 203, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "percentage": false, - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "tidb_tikvclient_batch_client_no_available_connection_total", + "expr": "histogram_quantile(0.9999, sum(rate(tidb_tikvclient_batch_client_wait_connection_establish_bucket[30s])) by (le, instance))", "format": "time_series", "intervalFactor": 1, "legendFormat": "{{instance}}", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "No Available Connection Counter", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "${DS_TEST-CLUSTER}", - "description": "kv storage batch processing unvailable durations", - "editable": true, - "error": false, - "fill": 1, - "grid": {}, - "gridPos": { - "h": 7, - "w": 8, - "x": 16, - "y": 23 - }, - "id": 180, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "links": [], - "nullPointMode": "null as zero", - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "histogram_quantile(0.95, sum(rate(tidb_tikvclient_batch_client_unavailable_seconds_bucket[1m])) by (le, instance))", - "format": "time_series", - "hide": false, - "intervalFactor": 2, - "legendFormat": "{{instance}}", "refId": "A", "step": 10 } @@ -11689,7 +11497,7 @@ "timeFrom": null, "timeRegions": [], "timeShift": null, - "title": "Batch Client Unavailable Duration 95", + "title": "Wait Connection Establish Duration", "tooltip": { "msResolution": false, "shared": true, diff --git a/metrics/grafana/tidb_runtime.json b/metrics/grafana/tidb_runtime.json index 364a4f55ef898..b5f7b1344f23e 100644 --- a/metrics/grafana/tidb_runtime.json +++ b/metrics/grafana/tidb_runtime.json @@ -233,14 +233,6 @@ } }, { - "type": "graph", - "title": "Estimated Live Objects", - "gridPos": { - "x": 12, - "y": 1, - "w": 12, - "h": 7 - }, "aliasColors": {}, "bars": false, "cacheTimeout": null, @@ -252,6 +244,12 @@ "error": false, "fill": 0, "grid": {}, + "gridPos": { + "h": 7, + "w": 12, + "x": 12, + "y": 1 + }, "id": 21, "legend": { "alignAsTable": false, @@ -297,12 +295,14 @@ "timeFrom": null, "timeRegions": [], "timeShift": null, + "title": "Estimated Live Objects", "tooltip": { "msResolution": true, "shared": true, "sort": 0, "value_type": "individual" }, + "type": "graph", "xaxis": { "buckets": null, "mode": "time", @@ -333,6 +333,121 @@ "alignLevel": null } }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "${DS_TEST-CLUSTER}", + "description": "TiDB cpu usage calculated with process cpu running seconds", + "editable": true, + "error": false, + "fill": 1, + "grid": {}, + "gridPos": { + "h": 7, + "w": 12, + "x": 0, + "y": 8 + }, + "id": 6, + "legend": { + "alignAsTable": false, + "avg": false, + "current": true, + "max": false, + "min": false, + "rightSide": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null as zero", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "total", + "fill": 0, + "lines": false + }, + { + "alias": "/limit/", + "color": "#C4162A", + "fill": 0, + "nullPointMode": "null" + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(process_cpu_seconds_total{instance=~\"$instance\"}[30s])", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "cpu-usage", + "refId": "A", + "step": 40 + }, + { + "expr": "tidb_server_maxprocs{instance=~\"$instance\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "limit", + "refId": "B" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "CPU Usage", + "tooltip": { + "msResolution": false, + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "percentunit", + "label": null, + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, { "aliasColors": {}, "bars": false, @@ -349,7 +464,7 @@ "h": 7, "w": 12, "x": 12, - "y": 1 + "y": 8 }, "id": 8, "legend": { @@ -454,23 +569,20 @@ "dashLength": 10, "dashes": false, "datasource": "${DS_TEST-CLUSTER}", - "description": "TiDB cpu usage calculated with process cpu running seconds", - "editable": true, - "error": false, + "description": "TiDB process current goroutines count", "fill": 1, - "grid": {}, "gridPos": { "h": 7, "w": 12, "x": 0, - "y": 8 + "y": 15 }, - "id": 6, + "id": 12, "legend": { "alignAsTable": false, "avg": false, "current": true, - "max": false, + "max": true, "min": false, "rightSide": false, "show": true, @@ -480,22 +592,16 @@ "lines": true, "linewidth": 1, "links": [], - "nullPointMode": "null as zero", + "nullPointMode": "null", "percentage": false, "pointradius": 5, "points": false, "renderer": "flot", "seriesOverrides": [ { - "alias": "total", - "fill": 0, - "lines": false - }, - { - "alias": "/limit/", - "color": "#C4162A", + "alias": "threads", "fill": 0, - "nullPointMode": "null" + "yaxis": 2 } ], "spaceLength": 10, @@ -503,21 +609,17 @@ "steppedLine": false, "targets": [ { - "expr": "irate(process_cpu_seconds_total{instance=~\"$instance\"}[30s])", + "expr": " go_goroutines{instance=~\"$instance\"}", "format": "time_series", - "hide": false, - "interval": "", "intervalFactor": 1, - "legendFormat": "cpu-usage", - "refId": "A", - "step": 40 + "legendFormat": "goroutines", + "refId": "A" }, { - "expr": "tidb_server_maxprocs{instance=~\"$instance\"}", + "expr": "go_threads{instance=~\"$instance\"}", "format": "time_series", - "interval": "", "intervalFactor": 1, - "legendFormat": "limit", + "legendFormat": "threads", "refId": "B" } ], @@ -525,9 +627,8 @@ "timeFrom": null, "timeRegions": [], "timeShift": null, - "title": "CPU Usage", + "title": "Goroutine Count", "tooltip": { - "msResolution": false, "shared": true, "sort": 0, "value_type": "individual" @@ -542,11 +643,11 @@ }, "yaxes": [ { - "format": "percentunit", + "format": "short", "label": null, "logBase": 1, "max": null, - "min": "0", + "min": null, "show": true }, { @@ -578,7 +679,7 @@ "h": 7, "w": 12, "x": 12, - "y": 8 + "y": 15 }, "id": 14, "legend": { @@ -658,19 +759,19 @@ }, { "aliasColors": {}, - "bars": false, + "bars": true, "dashLength": 10, "dashes": false, "datasource": "${DS_TEST-CLUSTER}", - "description": "TiDB process current goroutines count", + "description": "The Go garbage collection counts in the last 15s", "fill": 1, "gridPos": { "h": 7, "w": 12, "x": 0, - "y": 15 + "y": 22 }, - "id": 12, + "id": 10, "legend": { "alignAsTable": false, "avg": false, @@ -682,7 +783,7 @@ "total": false, "values": true }, - "lines": true, + "lines": false, "linewidth": 1, "links": [], "nullPointMode": "null", @@ -690,37 +791,24 @@ "pointradius": 5, "points": false, "renderer": "flot", - "seriesOverrides": [ - { - "alias": "threads", - "fill": 0, - "yaxis": 2 - } - ], + "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { - "expr": " go_goroutines{instance=~\"$instance\"}", + "expr": "idelta(go_gc_duration_seconds_count{instance=~\"$instance\"}[30s]) > 0", "format": "time_series", "intervalFactor": 1, - "legendFormat": "goroutines", + "legendFormat": "count", "refId": "A" - }, - { - "expr": "go_threads{instance=~\"$instance\"}", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "threads", - "refId": "B" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, - "title": "Goroutine Count", + "title": "GC Count (in the last 15s)", "tooltip": { "shared": true, "sort": 0, @@ -736,7 +824,7 @@ }, "yaxes": [ { - "format": "short", + "format": "none", "label": null, "logBase": 1, "max": null, @@ -769,7 +857,7 @@ "h": 7, "w": 12, "x": 12, - "y": 15 + "y": 22 }, "id": 16, "legend": { @@ -886,18 +974,19 @@ "dashLength": 10, "dashes": false, "datasource": "${DS_TEST-CLUSTER}", - "description": "TiDB side and PD side TSO RPC duration.", + "description": "TiDB side and TiKV side RPC duration.", "fill": 1, "gridPos": { "h": 7, "w": 12, "x": 0, - "y": 22 + "y": 29 }, - "id": 18, + "id": 19, "legend": { "avg": false, "current": false, + "hideEmpty": true, "max": true, "min": false, "show": true, @@ -912,22 +1001,23 @@ "pointradius": 2, "points": false, "renderer": "flot", + "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { - "expr": "histogram_quantile(0.99, sum(rate(pd_client_request_handle_requests_duration_seconds_bucket{type=\"tso\"}[30s])) by (le))", + "expr": "histogram_quantile(0.99, sum(rate(tidb_tikvclient_request_seconds_bucket{store!=\"0\",instance=~\"$instance\"}[30s])) by (le, store))", "format": "time_series", "intervalFactor": 1, - "legendFormat": "tidb-side", + "legendFormat": "tidb-to-store{{store}}", "refId": "A" }, { - "expr": "histogram_quantile(0.99, sum(rate(pd_server_handle_tso_duration_seconds_bucket[30s])) by (le))", + "expr": "histogram_quantile(0.99, sum(rate(tikv_grpc_msg_duration_seconds_bucket{type!=\"kv_gc\"}[30s])) by (le, instance))", "format": "time_series", "intervalFactor": 1, - "legendFormat": "pd-side", + "legendFormat": "tikv-{{instance}}-side", "refId": "B" } ], @@ -935,7 +1025,7 @@ "timeFrom": null, "timeRegions": [], "timeShift": null, - "title": "TSO RPC Latency", + "title": "KV RPC Latency", "tooltip": { "shared": true, "sort": 0, @@ -974,36 +1064,34 @@ }, { "aliasColors": {}, - "bars": true, + "bars": false, "dashLength": 10, "dashes": false, "datasource": "${DS_TEST-CLUSTER}", - "description": "The Go garbage collection counts in the last 15s", + "description": "TiDB side and PD side TSO RPC duration.", "fill": 1, "gridPos": { "h": 7, "w": 12, "x": 12, - "y": 22 + "y": 29 }, - "id": 10, + "id": 18, "legend": { - "alignAsTable": false, "avg": false, - "current": true, + "current": false, "max": true, "min": false, - "rightSide": false, "show": true, "total": false, "values": true }, - "lines": false, + "lines": true, "linewidth": 1, "links": [], "nullPointMode": "null", "percentage": false, - "pointradius": 5, + "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], @@ -1012,18 +1100,25 @@ "steppedLine": false, "targets": [ { - "expr": "idelta(go_gc_duration_seconds_count{instance=~\"$instance\"}[30s]) > 0", + "expr": "histogram_quantile(0.99, sum(rate(pd_client_request_handle_requests_duration_seconds_bucket{type=\"tso\"}[30s])) by (le))", "format": "time_series", "intervalFactor": 1, - "legendFormat": "count", + "legendFormat": "tidb-side", "refId": "A" + }, + { + "expr": "histogram_quantile(0.99, sum(rate(pd_server_handle_tso_duration_seconds_bucket[30s])) by (le))", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "pd-side", + "refId": "B" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, - "title": "GC Count (in the last 15s)", + "title": "TSO RPC Latency", "tooltip": { "shared": true, "sort": 0, @@ -1039,7 +1134,7 @@ }, "yaxes": [ { - "format": "none", + "format": "s", "label": null, "logBase": 1, "max": null, @@ -1060,67 +1155,215 @@ "alignLevel": null } }, + { + "cards": { + "cardPadding": null, + "cardRound": null + }, + "color": { + "cardColor": "#b4ff00", + "colorScale": "sqrt", + "colorScheme": "interpolateSpectral", + "exponent": 0.5, + "mode": "spectrum" + }, + "dataFormat": "tsbuckets", + "datasource": "${DS_TEST-CLUSTER}", + "description": "Number of requests in each batch", + "gridPos": { + "h": 7, + "w": 12, + "x": 0, + "y": 36 + }, + "heatmap": {}, + "hideZeroBuckets": true, + "highlightCards": true, + "id": 23, + "legend": { + "show": false + }, + "links": [], + "reverseYBuckets": false, + "targets": [ + { + "expr": "sum(increase(tidb_tikvclient_batch_requests_bucket{instance=~\"$instance\"}[30s])) by (le)", + "format": "heatmap", + "intervalFactor": 1, + "legendFormat": "{{le}}", + "refId": "A", + "step": 40 + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Requests Batch Size", + "tooltip": { + "show": true, + "showHistogram": false + }, + "type": "heatmap", + "xAxis": { + "show": true + }, + "xBucketNumber": null, + "xBucketSize": null, + "yAxis": { + "decimals": null, + "format": "none", + "logBase": 1, + "max": null, + "min": null, + "show": true, + "splitFactor": null + }, + "yBucketBound": "auto", + "yBucketNumber": null, + "yBucketSize": null + }, + { + "cards": { + "cardPadding": null, + "cardRound": null + }, + "color": { + "cardColor": "#b4ff00", + "colorScale": "sqrt", + "colorScheme": "interpolateSpectral", + "exponent": 0.5, + "mode": "spectrum" + }, + "dataFormat": "tsbuckets", + "datasource": "${DS_TEST-CLUSTER}", + "description": "Number of requests in queue", + "gridPos": { + "h": 7, + "w": 12, + "x": 12, + "y": 36 + }, + "heatmap": {}, + "hideZeroBuckets": true, + "highlightCards": true, + "id": 24, + "legend": { + "show": false + }, + "links": [], + "reverseYBuckets": false, + "targets": [ + { + "expr": "sum(increase(tidb_tikvclient_batch_pending_requests_bucket{instance=~\"$instance\"}[30s])) by (le)", + "format": "heatmap", + "intervalFactor": 1, + "legendFormat": "{{le}}", + "refId": "A", + "step": 40 + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Pending Requests", + "tooltip": { + "show": true, + "showHistogram": false + }, + "type": "heatmap", + "xAxis": { + "show": true + }, + "xBucketNumber": null, + "xBucketSize": null, + "yAxis": { + "decimals": null, + "format": "none", + "logBase": 1, + "max": null, + "min": null, + "show": true, + "splitFactor": null + }, + "yBucketBound": "auto", + "yBucketNumber": null, + "yBucketSize": null + }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": "${DS_TEST-CLUSTER}", - "description": "TiDB side and TiKV side RPC duration.", + "description": "The time spend on enqueue request", + "editable": true, + "error": false, "fill": 1, + "grid": {}, "gridPos": { "h": 7, "w": 12, "x": 0, - "y": 29 + "y": 43 }, - "id": 19, + "id": 26, "legend": { + "alignAsTable": false, "avg": false, "current": false, - "hideEmpty": true, - "max": true, + "max": false, "min": false, + "rightSide": false, "show": true, "total": false, - "values": true + "values": false }, "lines": true, - "linewidth": 1, + "linewidth": 2, "links": [], - "nullPointMode": "null", + "nullPointMode": "null as zero", "percentage": false, - "pointradius": 2, + "pointradius": 5, "points": false, "renderer": "flot", + "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { - "expr": "histogram_quantile(0.99, sum(rate(tidb_tikvclient_request_seconds_bucket{store!=\"0\",instance=~\"$instance\"}[30s])) by (le, store))", + "expr": "histogram_quantile(0.999, sum(rate(tidb_tikvclient_batch_wait_duration_bucket{instance=~\"$instance\"}[30s])) by (le, instance))", "format": "time_series", "intervalFactor": 1, - "legendFormat": "tidb-to-store{{store}}", - "refId": "A" + "legendFormat": "999", + "refId": "A", + "step": 10 }, { - "expr": "histogram_quantile(0.99, sum(rate(tikv_grpc_msg_duration_seconds_bucket{type!=\"kv_gc\"}[30s])) by (le, instance))", + "expr": "histogram_quantile(0.99, sum(rate(tidb_tikvclient_batch_wait_duration_bucket{instance=~\"$instance\"}[30s])) by (le, instance))", "format": "time_series", "intervalFactor": 1, - "legendFormat": "tikv-{{instance}}-side", - "refId": "B" + "legendFormat": "99", + "refId": "B", + "step": 10 + }, + { + "expr": "histogram_quantile(0.95, sum(rate(tidb_tikvclient_batch_wait_duration_bucket{instance=~\"$instance\"}[30s])) by (le, instance))", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "95", + "refId": "C", + "step": 10 } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, - "title": "KV RPC Latency", + "title": "Request Enqueue Duration", "tooltip": { + "msResolution": false, "shared": true, "sort": 0, - "value_type": "individual" + "value_type": "cumulative" }, "type": "graph", "xaxis": { @@ -1132,12 +1375,121 @@ }, "yaxes": [ { - "format": "s", + "format": "ns", + "label": null, + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "${DS_TEST-CLUSTER}", + "description": "Time spend on enqueue batch into gRPC", + "editable": true, + "error": false, + "fill": 1, + "grid": {}, + "gridPos": { + "h": 7, + "w": 12, + "x": 12, + "y": 43 + }, + "id": 28, + "legend": { + "alignAsTable": false, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "links": [], + "nullPointMode": "null as zero", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "histogram_quantile(0.9999, sum(rate(tidb_tikvclient_batch_send_latency_bucket{instance=~\"$instance\"}[30s])) by (le, instance))", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "9999", + "refId": "A", + "step": 10 + }, + { + "expr": "histogram_quantile(0.999, sum(rate(tidb_tikvclient_batch_send_latency_bucket{instance=~\"$instance\"}[30s])) by (le, instance))", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "999", + "refId": "B", + "step": 10 + }, + { + "expr": "histogram_quantile(0.99, sum(rate(tidb_tikvclient_batch_send_latency_bucket{instance=~\"$instance\"}[30s])) by (le, instance))", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "99", + "refId": "C", + "step": 10 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Batch Enqueue Duration", + "tooltip": { + "msResolution": false, + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "ns", + "label": null, + "logBase": 1, + "max": null, + "min": "0", + "show": true }, { "format": "short", diff --git a/metrics/metrics.go b/metrics/metrics.go index 65cc4d3491fdb..8ed739a345461 100644 --- a/metrics/metrics.go +++ b/metrics/metrics.go @@ -149,10 +149,13 @@ func RegisterMetrics() { prometheus.MustRegister(TotalQueryProcHistogram) prometheus.MustRegister(TotalCopProcHistogram) prometheus.MustRegister(TotalCopWaitHistogram) - prometheus.MustRegister(TiKVPendingBatchRequests) prometheus.MustRegister(TiKVStatusDuration) prometheus.MustRegister(TiKVStatusCounter) + prometheus.MustRegister(TiKVBatchPendingRequests) + prometheus.MustRegister(TiKVBatchRequests) prometheus.MustRegister(TiKVBatchWaitDuration) + prometheus.MustRegister(TiKVBatchSendLatency) + prometheus.MustRegister(TiKvBatchWaitOverLoad) prometheus.MustRegister(TiKVBatchClientUnavailable) prometheus.MustRegister(TiKVBatchClientWaitEstablish) prometheus.MustRegister(TiKVRangeTaskStats) diff --git a/metrics/tikvclient.go b/metrics/tikvclient.go index 8a311af3eee44..f45d37301e1e8 100644 --- a/metrics/tikvclient.go +++ b/metrics/tikvclient.go @@ -147,15 +147,6 @@ var ( Buckets: prometheus.ExponentialBuckets(0.0005, 2, 20), // 0.5ms ~ 262s }) - // TiKVPendingBatchRequests indicates the number of requests pending in the batch channel. - TiKVPendingBatchRequests = prometheus.NewGaugeVec( - prometheus.GaugeOpts{ - Namespace: "tidb", - Subsystem: "tikvclient", - Name: "pending_batch_requests", - Help: "Pending batch requests", - }, []string{"store"}) - TiKVStatusDuration = prometheus.NewHistogramVec( prometheus.HistogramOpts{ Namespace: "tidb", @@ -181,7 +172,37 @@ var ( Buckets: prometheus.ExponentialBuckets(1, 2, 34), // 1ns ~ 8s Help: "batch wait duration", }) - + TiKVBatchSendLatency = prometheus.NewHistogram( + prometheus.HistogramOpts{ + Namespace: "tidb", + Subsystem: "tikvclient", + Name: "batch_send_latency", + Buckets: prometheus.ExponentialBuckets(1, 2, 34), // 1ns ~ 8s + Help: "batch send latency", + }) + TiKvBatchWaitOverLoad = prometheus.NewCounter( + prometheus.CounterOpts{ + Namespace: "tidb", + Subsystem: "tikvclient", + Name: "batch_wait_overload", + Help: "event of tikv transport layer overload", + }) + TiKVBatchPendingRequests = prometheus.NewHistogramVec( + prometheus.HistogramOpts{ + Namespace: "tidb", + Subsystem: "tikvclient", + Name: "batch_pending_requests", + Buckets: prometheus.ExponentialBuckets(1, 2, 8), + Help: "number of requests pending in the batch channel", + }, []string{"store"}) + TiKVBatchRequests = prometheus.NewHistogramVec( + prometheus.HistogramOpts{ + Namespace: "tidb", + Subsystem: "tikvclient", + Name: "batch_requests", + Buckets: prometheus.ExponentialBuckets(1, 2, 8), + Help: "number of requests in one batch", + }, []string{"store"}) TiKVBatchClientUnavailable = prometheus.NewHistogram( prometheus.HistogramOpts{ Namespace: "tidb", diff --git a/store/tikv/client.go b/store/tikv/client.go index cc69766f18a83..dbc196250561f 100644 --- a/store/tikv/client.go +++ b/store/tikv/client.go @@ -128,7 +128,8 @@ func (a *connArray) Init(addr string, security config.Security, idleNotify *uint allowBatch := (cfg.TiKVClient.MaxBatchSize > 0) && enableBatch if allowBatch { a.batchConn = newBatchConn(uint(len(a.v)), cfg.TiKVClient.MaxBatchSize, idleNotify) - a.pendingRequests = metrics.TiKVPendingBatchRequests.WithLabelValues(a.target) + a.pendingRequests = metrics.TiKVBatchPendingRequests.WithLabelValues(a.target) + a.batchSize = metrics.TiKVBatchRequests.WithLabelValues(a.target) } keepAlive := cfg.TiKVClient.GrpcKeepAliveTime keepAliveTimeout := cfg.TiKVClient.GrpcKeepAliveTimeout diff --git a/store/tikv/client_batch.go b/store/tikv/client_batch.go index 9ea06738d6057..b1d1303b72cd8 100644 --- a/store/tikv/client_batch.go +++ b/store/tikv/client_batch.go @@ -51,7 +51,8 @@ type batchConn struct { idleNotify *uint32 idleDetect *time.Timer - pendingRequests prometheus.Gauge + pendingRequests prometheus.Observer + batchSize prometheus.Observer index uint32 } @@ -77,7 +78,7 @@ func (a *batchConn) fetchAllPendingRequests( maxBatchSize int, entries *[]*batchCommandsEntry, requests *[]*tikvpb.BatchCommandsRequest_Request, -) { +) time.Time { // Block on the first element. var headEntry *batchCommandsEntry select { @@ -91,13 +92,14 @@ func (a *batchConn) fetchAllPendingRequests( atomic.AddUint32(&a.idle, 1) atomic.CompareAndSwapUint32(a.idleNotify, 0, 1) // This batchConn to be recycled - return + return time.Now() case <-a.closed: - return + return time.Now() } if headEntry == nil { - return + return time.Now() } + ts := time.Now() *entries = append(*entries, headEntry) *requests = append(*requests, headEntry.req) @@ -106,14 +108,15 @@ func (a *batchConn) fetchAllPendingRequests( select { case entry := <-a.batchCommandsCh: if entry == nil { - return + return ts } *entries = append(*entries, entry) *requests = append(*requests, entry.req) default: - return + return ts } } + return ts } // fetchMorePendingRequests fetches more pending requests from the channel. @@ -125,8 +128,6 @@ func fetchMorePendingRequests( entries *[]*batchCommandsEntry, requests *[]*tikvpb.BatchCommandsRequest_Request, ) { - waitStart := time.Now() - // Try to collect `batchWaitSize` requests, or wait `maxWaitTime`. after := time.NewTimer(maxWaitTime) for len(*entries) < batchWaitSize { @@ -137,8 +138,7 @@ func fetchMorePendingRequests( } *entries = append(*entries, entry) *requests = append(*requests, entry.req) - case waitEnd := <-after.C: - metrics.TiKVBatchWaitDuration.Observe(float64(waitEnd.Sub(waitStart))) + case <-after.C: return } } @@ -156,7 +156,6 @@ func fetchMorePendingRequests( *entries = append(*entries, entry) *requests = append(*requests, entry.req) default: - metrics.TiKVBatchWaitDuration.Observe(float64(time.Since(waitStart))) return } } @@ -224,7 +223,8 @@ func (c *batchCommandsClient) send(request *tikvpb.BatchCommandsRequest, entries } } - if err := c.initBatchClient(); err != nil { + err := c.initBatchClient() + if err != nil { logutil.BgLogger().Warn( "init create streaming fail", zap.String("target", c.target), @@ -233,6 +233,7 @@ func (c *batchCommandsClient) send(request *tikvpb.BatchCommandsRequest, entries c.failPendingRequests(err) return } + if err := c.client.Send(request); err != nil { logutil.BgLogger().Info( "sending batch commands meets error", @@ -468,8 +469,9 @@ func (a *batchConn) batchSendLoop(cfg config.TiKVClient) { requests = resetRequests(requests) requestIDs = requestIDs[:0] - a.pendingRequests.Set(float64(len(a.batchCommandsCh))) - a.fetchAllPendingRequests(int(cfg.MaxBatchSize), &entries, &requests) + start := a.fetchAllPendingRequests(int(cfg.MaxBatchSize), &entries, &requests) + a.pendingRequests.Observe(float64(len(a.batchCommandsCh))) + a.batchSize.Observe(float64(len(requests))) // curl -XPUT -d 'return(true)' http://0.0.0.0:10080/fail/github.com/pingcap/tidb/store/tikv/mockBlockOnBatchClient failpoint.Inject("mockBlockOnBatchClient", func(val failpoint.Value) { @@ -481,6 +483,7 @@ func (a *batchConn) batchSendLoop(cfg config.TiKVClient) { if len(entries) < int(cfg.MaxBatchSize) && cfg.MaxBatchWaitTime > 0 { // If the target TiKV is overload, wait a while to collect more requests. if atomic.LoadUint64(&a.tikvTransportLayerLoad) >= uint64(cfg.OverloadThreshold) { + metrics.TiKvBatchWaitOverLoad.Add(1) fetchMorePendingRequests( a.batchCommandsCh, int(cfg.MaxBatchSize), int(bestBatchWaitSize), cfg.MaxBatchWaitTime, &entries, &requests, @@ -504,6 +507,7 @@ func (a *batchConn) batchSendLoop(cfg config.TiKVClient) { } a.getClientAndSend(entries, requests, requestIDs) + metrics.TiKVBatchSendLatency.Observe(float64(time.Since(start))) } } @@ -611,6 +615,7 @@ func sendBatchRequest( timer := time.NewTimer(timeout) defer timer.Stop() + start := time.Now() select { case batchConn.batchCommandsCh <- entry: case <-ctx.Done(): @@ -620,6 +625,7 @@ func sendBatchRequest( case <-timer.C: return nil, errors.SuspendStack(errors.Annotate(context.DeadlineExceeded, "wait sendLoop")) } + metrics.TiKVBatchWaitDuration.Observe(float64(time.Since(start))) select { case res, ok := <-entry.res: From 31afec3fbfb15999f299d8c41eb731215fff5182 Mon Sep 17 00:00:00 2001 From: Feng Liyuan Date: Thu, 5 Nov 2020 17:14:03 +0800 Subject: [PATCH 078/229] sessionctx/variable: allow -1 value of executor's variables if rollback from master branch (#20127) --- executor/set_test.go | 33 +++++++++++++++++++++++++++++++++ sessionctx/variable/varsutil.go | 28 ++++++++++++++++++++++++++-- 2 files changed, 59 insertions(+), 2 deletions(-) diff --git a/executor/set_test.go b/executor/set_test.go index 49515b90951fc..59d337e51a2fc 100644 --- a/executor/set_test.go +++ b/executor/set_test.go @@ -1066,3 +1066,36 @@ func (s *testSuite5) TestSetClusterConfigJSONData(c *C) { } } } + +func (s *testSerialSuite1) TestVariableRollbackIssue20124(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + + cases := []struct { + name string + defaultValue int + }{ + {variable.TiDBIndexLookupConcurrency, variable.DefIndexLookupConcurrency}, + {variable.TiDBIndexLookupJoinConcurrency, variable.DefIndexLookupJoinConcurrency}, + {variable.TiDBHashJoinConcurrency, variable.DefTiDBHashJoinConcurrency}, + {variable.TiDBHashAggPartialConcurrency, variable.DefTiDBHashAggPartialConcurrency}, + {variable.TiDBHashAggFinalConcurrency, variable.DefTiDBHashAggFinalConcurrency}, + {variable.TiDBProjectionConcurrency, variable.DefTiDBProjectionConcurrency}, + {variable.TiDBWindowConcurrency, variable.DefTiDBWindowConcurrency}, + } + + for _, cs := range cases { + tk.MustExec(fmt.Sprintf("set @@global.%v=-1", cs.name)) + } + + tk2 := testkit.NewTestKit(c, s.store) + tk2.MustExec("use test") + for _, cs := range cases { + tk2.MustQuery(fmt.Sprintf("select @@%v", cs.name)).Check(testkit.Rows(fmt.Sprint(cs.defaultValue))) + tk2.MustExec(fmt.Sprintf("set @@%v=1", cs.name)) + tk2.MustQuery(fmt.Sprintf("select @@%v", cs.name)).Check(testkit.Rows("1")) + tk2.MustExec(fmt.Sprintf("set @@%v=-1", cs.name)) + tk2.MustQuery(fmt.Sprintf("select @@%v", cs.name)).Check(testkit.Rows(fmt.Sprint(cs.defaultValue))) + } + +} diff --git a/sessionctx/variable/varsutil.go b/sessionctx/variable/varsutil.go index d7cf6b8e49c40..b4dd91044ffa1 100644 --- a/sessionctx/variable/varsutil.go +++ b/sessionctx/variable/varsutil.go @@ -526,7 +526,26 @@ func ValidateSetSystemVar(vars *SessionVars, name string, value string, scope Sc if err != nil { return value, ErrWrongTypeForVar.GenWithStackByArgs(name) } - if v <= 0 { + if v == -1 { + // These code are for compatibility of future v5.0.0 version. + // When rollback from master(future v5.0.0) version, the default value of these variables are -1 + switch name { + case TiDBIndexLookupConcurrency: + value = strconv.FormatInt(DefIndexLookupConcurrency, 10) + case TiDBIndexLookupJoinConcurrency: + value = strconv.FormatInt(DefIndexLookupJoinConcurrency, 10) + case TiDBHashJoinConcurrency: + value = strconv.FormatInt(DefTiDBHashJoinConcurrency, 10) + case TiDBHashAggPartialConcurrency: + value = strconv.FormatInt(DefTiDBHashAggPartialConcurrency, 10) + case TiDBHashAggFinalConcurrency: + value = strconv.FormatInt(DefTiDBHashAggFinalConcurrency, 10) + case TiDBWindowConcurrency: + value = strconv.FormatInt(DefTiDBWindowConcurrency, 10) + default: + return value, ErrWrongValueForVar.GenWithStackByArgs(name, value) + } + } else if v <= 0 { return value, ErrWrongValueForVar.GenWithStackByArgs(name, value) } return value, nil @@ -591,10 +610,15 @@ func ValidateSetSystemVar(vars *SessionVars, name string, value string, scope Sc TiDBSlowLogThreshold, TiDBQueryLogMaxLen, TiDBEvolvePlanTaskMaxTime: - _, err := strconv.ParseInt(value, 10, 64) + v, err := strconv.ParseInt(value, 10, 64) if err != nil { return value, ErrWrongValueForVar.GenWithStackByArgs(name) } + // These code are for compatibility of future v5.0.0 version. + // When rollback from master(future v5.0.0) version, the default value of these variables are -1 + if v == -1 && name == TiDBProjectionConcurrency { + value = strconv.FormatInt(DefTiDBProjectionConcurrency, 10) + } return value, nil case TiDBAutoAnalyzeStartTime, TiDBAutoAnalyzeEndTime, TiDBEvolvePlanTaskStartTime, TiDBEvolvePlanTaskEndTime: v, err := setDayTime(vars, value) From 19d8e3711c11ea0035304310063f840a0d4b21cb Mon Sep 17 00:00:00 2001 From: cfzjywxk Date: Fri, 6 Nov 2020 10:29:01 +0800 Subject: [PATCH 079/229] txn: support amend transaction with add unique index (#20693) --- ddl/db_test.go | 2 -- session/pessimistic_test.go | 44 +++++++++++++++++++++++++++++++ session/schema_amender.go | 24 +++++++++++------ session/schema_amender_test.go | 48 +++++++++++++++++++++++++++++----- store/tikv/2pc.go | 22 ++++++++++++++++ 5 files changed, 123 insertions(+), 17 deletions(-) diff --git a/ddl/db_test.go b/ddl/db_test.go index 267144200b658..b401bd7d9a346 100644 --- a/ddl/db_test.go +++ b/ddl/db_test.go @@ -4787,7 +4787,6 @@ func (s *testSerialDBSuite) TestCommitTxnWithIndexChange(c *C) { false, model.StateNone}, // Test unique index - /* TODO unique index is not supported now. {[]string{"insert into t1 values(3, 30, 300)", "insert into t1 values(4, 40, 400)", "insert into t2 values(11, 11, 11)", @@ -4831,7 +4830,6 @@ func (s *testSerialDBSuite) TestCommitTxnWithIndexChange(c *C) { {"1 10 100", "2 20 200"}}, true, model.StateWriteOnly}, - */ } tk.MustQuery("select * from t1;").Check(testkit.Rows("1 10 100", "2 20 200")) diff --git a/session/pessimistic_test.go b/session/pessimistic_test.go index 4a4ed5419c55a..1954b316e1b39 100644 --- a/session/pessimistic_test.go +++ b/session/pessimistic_test.go @@ -1719,3 +1719,47 @@ func (s *testPessimisticSuite) TestAmendTxnVariable(c *C) { tk4.MustExec("commit") tk2.MustQuery("select * from t1").Check(testkit.Rows("1 1 1 ", "2 2 2 ", "4 4 4 ", "5 5 5 ")) } + +func (s *testPessimisticSuite) TestAmendForUniqueIndex(c *C) { + tk := testkit.NewTestKitWithInit(c, s.store) + tk2 := testkit.NewTestKitWithInit(c, s.store) + tk.MustExec("set global tidb_enable_amend_pessimistic_txn = 1;") + tk.MustExec("set tidb_enable_amend_pessimistic_txn = 1;") + defer tk.MustExec("set global tidb_enable_amend_pessimistic_txn = 0;") + tk.MustExec("drop database if exists test_db") + tk.MustExec("create database test_db") + tk.MustExec("use test_db") + tk2.MustExec("use test_db") + tk2.MustExec("drop table if exists t1") + tk2.MustExec("create table t1(c1 int primary key, c2 int, c3 int, unique key uk(c2));") + tk2.MustExec("insert into t1 values(1, 1, 1);") + tk2.MustExec("insert into t1 values(2, 2, 2);") + + // New value has duplicates. + tk.MustExec("begin pessimistic") + tk.MustExec("insert into t1 values(3, 3, 3)") + tk.MustExec("insert into t1 values(4, 4, 3)") + tk2.MustExec("alter table t1 add unique index uk1(c3)") + err := tk.ExecToErr("commit") + c.Assert(err, NotNil) + tk2.MustExec("alter table t1 drop index uk1") + tk2.MustExec("admin check table t1") + + // New values has duplicates with old values. + tk.MustExec("begin pessimistic") + tk.MustExec("insert into t1 values(3, 3, 3)") + tk.MustExec("insert into t1 values(4, 4, 1)") + tk2.MustExec("alter table t1 add unique index uk1(c3)") + err = tk.ExecToErr("commit") + c.Assert(err, NotNil) + tk2.MustExec("admin check table t1") + + // Put new values. + tk2.MustQuery("select * from t1 for update").Check(testkit.Rows("1 1 1", "2 2 2")) + tk2.MustExec("alter table t1 drop index uk1") + tk.MustExec("begin pessimistic") + tk2.MustExec("alter table t1 add unique index uk1(c3)") + tk.MustExec("insert into t1 values(5, 5, 5)") + tk.MustExec("commit") + tk2.MustExec("admin check table t1") +} diff --git a/session/schema_amender.go b/session/schema_amender.go index 05ff8b721d2ac..b85fcc97d2c9f 100644 --- a/session/schema_amender.go +++ b/session/schema_amender.go @@ -218,11 +218,6 @@ func (a *amendCollector) collectIndexAmendOps(sctx sessionctx.Context, tblAtStar amendOpType = ConstOpAddIndex[idxInfoAtStart.Meta().State][idxInfoAtCommit.Meta().State] } if amendOpType != AmendNone { - // TODO unique index amend is not supported by now. - if idxInfoAtCommit.Meta().Unique { - return nil, errors.Trace(errors.Errorf("amend unique index=%v for table=%v is not supported now", - idxInfoAtCommit.Meta().Name, tblAtCommit.Meta().Name)) - } opInfo := &amendOperationAddIndexInfo{} opInfo.AmendOpType = amendOpType opInfo.tblInfoAtStart = tblAtStart @@ -253,7 +248,8 @@ func (a *amendCollector) collectIndexAmendOps(sctx sessionctx.Context, tblAtStar } if addIndexNeedAddOp(amendOpType) { addNewIndexOp := &amendOperationAddNewIndex{ - info: opInfo, + info: opInfo, + processedNewIndexKeys: make(map[string]struct{}), } res = append(res, addNewIndexOp) } @@ -319,7 +315,8 @@ type amendOperationDeleteOldIndex struct { // amendOperationAddNewIndex represents the add operation will be performed on new key values for add index amend. type amendOperationAddNewIndex struct { - info *amendOperationAddIndexInfo + info *amendOperationAddIndexInfo + processedNewIndexKeys map[string]struct{} } func (a *amendOperationAddIndexInfo) String() string { @@ -426,7 +423,18 @@ func (a *amendOperationAddNewIndex) processRowKey(ctx context.Context, sctx sess if err != nil { return errors.Trace(err) } - resAddMutations.Push(pb.Op_Put, newIdxKey, newIdxValue, false) + newIndexOp := pb.Op_Put + isPessimisticLock := false + if a.info.indexInfoAtCommit.Meta().Unique { + if _, ok := a.processedNewIndexKeys[string(newIdxKey)]; ok { + return errors.Trace(errors.Errorf("amend process key same key=%v found for unique index=%v in table=%v", + newIdxKey, a.info.indexInfoAtCommit.Meta().Name, a.info.tblInfoAtCommit.Meta().Name)) + } + newIndexOp = pb.Op_Insert + isPessimisticLock = true + } + a.processedNewIndexKeys[string(newIdxKey)] = struct{}{} + resAddMutations.Push(newIndexOp, newIdxKey, newIdxValue, isPessimisticLock) return nil } diff --git a/session/schema_amender_test.go b/session/schema_amender_test.go index 71f66db43bead..69dc5caf36985 100644 --- a/session/schema_amender_test.go +++ b/session/schema_amender_test.go @@ -51,8 +51,11 @@ func initTblColIdxID(metaInfo *model.TableInfo) { } for i, idx := range metaInfo.Indices { idx.ID = int64(i + 1) - // TODO unique index is not supported now. - idx.Unique = false + if idx.Name.L == "f_g" { + idx.Unique = true + } else { + idx.Unique = false + } } metaInfo.ID = 1 metaInfo.State = model.StatePublic @@ -83,8 +86,10 @@ type data struct { rowValue [][]types.Datum } +// Generate exist old data and new data in transaction to be amended. Also generate the expected amend mutations +// according to the old and new data and the full generated expected mutations. func prepareTestData(se *session, mutations *tikv.CommitterMutations, oldTblInfo table.Table, newTblInfo table.Table, - expecetedAmendOps []amendOp, c *C) (*data, *data, tikv.CommitterMutations) { + expectedAmendOps []amendOp, c *C) (*data, *data, tikv.CommitterMutations) { var err error // Generated test data. colIds := make([]int64, len(oldTblInfo.Meta().Columns)) @@ -143,6 +148,8 @@ func prepareTestData(se *session, mutations *tikv.CommitterMutations, oldTblInfo thisRowValue[0] = types.NewIntDatum(int64(i + 1)) // New column e value should be different from old row values. thisRowValue[4] = types.NewIntDatum(int64(i+1+4) * 20) + // New column f value should be different since it has a related unique index. + thisRowValue[8] = types.NewIntDatum(int64(i+1+4) * 20) var rowValue []byte // Save new data. @@ -165,7 +172,7 @@ func prepareTestData(se *session, mutations *tikv.CommitterMutations, oldTblInfo } // Prepare expected results. - for _, op := range expecetedAmendOps { + for _, op := range expectedAmendOps { var oldOp *amendOperationDeleteOldIndex var newOp *amendOperationAddNewIndex var info *amendOperationAddIndexInfo @@ -212,10 +219,12 @@ func prepareTestData(se *session, mutations *tikv.CommitterMutations, oldTblInfo idxKey, idxVal := genIndexKV(thisRowValue) c.Assert(err, IsNil) mutOp := kvrpcpb.Op_Put + isPessimisticLock := false if info.indexInfoAtCommit.Meta().Unique { mutOp = kvrpcpb.Op_Insert + isPessimisticLock = true } - expecteMutations.Push(mutOp, idxKey, idxVal, false) + expecteMutations.Push(mutOp, idxKey, idxVal, isPessimisticLock) } } } @@ -252,6 +261,7 @@ func (s *testSchemaAmenderSuite) TestAmendCollectAndGenMutations(c *C) { c.Assert(err, IsNil) oldTblMeta.Indices[0].State = startState oldTblMeta.Indices[2].State = endState + oldTblMeta.Indices[3].State = startState newTblMeta := core.MockSignedTable() initTblColIdxID(newTblMeta) @@ -274,6 +284,8 @@ func (s *testSchemaAmenderSuite) TestAmendCollectAndGenMutations(c *C) { newTblMeta.Indices[1].State = endState // Indices[3] is dropped newTblMeta.Indices[3].State = startState + // Indices[4] is newly created unique index. + newTblMeta.Indices[4].State = endState // Only the add index amend operations is collected in the results. collector := newAmendCollector() @@ -322,6 +334,28 @@ func (s *testSchemaAmenderSuite) TestAmendCollectAndGenMutations(c *C) { info: addIndexOpInfo1, }) } + + // For index 3. + addIndexOpInfo2 := &amendOperationAddIndexInfo{ + AmendOpType: ConstOpAddIndex[startState][endState], + tblInfoAtStart: oldTbInfo, + tblInfoAtCommit: newTblInfo, + indexInfoAtStart: oldTbInfo.Indices()[3], + indexInfoAtCommit: newTblInfo.Indices()[4], + relatedOldIdxCols: []*table.Column{oldTbInfo.Cols()[8], oldTbInfo.Cols()[9]}, + } + if addIndexNeedRemoveOp(addIndexOpInfo1.AmendOpType) { + expectedAmendOps = append(expectedAmendOps, &amendOperationDeleteOldIndex{ + info: addIndexOpInfo2, + }) + } + if addIndexNeedAddOp(addIndexOpInfo1.AmendOpType) { + expectedAmendOps = append(expectedAmendOps, &amendOperationAddNewIndex{ + info: addIndexOpInfo2, + processedNewIndexKeys: make(map[string]struct{}), + }) + } + // Check collect results. for i, amendOp := range collector.tblAmendOpMap[tblID] { oldOp, ok := amendOp.(*amendOperationDeleteOldIndex) @@ -346,7 +380,7 @@ func (s *testSchemaAmenderSuite) TestAmendCollectAndGenMutations(c *C) { c.Assert(info.indexInfoAtStart, Equals, expectedInfo.indexInfoAtStart) c.Assert(info.indexInfoAtCommit, Equals, expectedInfo.indexInfoAtCommit) for j, col := range expectedInfo.relatedOldIdxCols { - c.Assert(col, Equals, expectedInfo.relatedOldIdxCols[j]) + c.Assert(col, Equals, info.relatedOldIdxCols[j]) } } // Generated test data. @@ -400,7 +434,7 @@ func (s *testSchemaAmenderSuite) TestAmendCollectAndGenMutations(c *C) { // Some noisy index key values. for i := 0; i < 4; i++ { idxValue := []byte("idxValue") - idxKey := tablecodec.EncodeIndexSeekKey(oldTbInfo.Meta().ID, oldTbInfo.Indices()[2].Meta().ID, idxValue) + idxKey := tablecodec.EncodeIndexSeekKey(oldTbInfo.Meta().ID, oldTbInfo.Indices()[i].Meta().ID, idxValue) err = txn.Set(idxKey, idxValue) c.Assert(err, IsNil) mutations.Push(kvrpcpb.Op_Put, idxKey, idxValue, false) diff --git a/store/tikv/2pc.go b/store/tikv/2pc.go index 9e7e2467ca755..c69f9f3da95d1 100644 --- a/store/tikv/2pc.go +++ b/store/tikv/2pc.go @@ -1488,12 +1488,34 @@ func (c *twoPhaseCommitter) tryAmendTxn(ctx context.Context, startInfoSchema Sch } // Prewrite new mutations. if addMutations != nil && len(addMutations.keys) > 0 { + var keysNeedToLock CommitterMutations + for i := 0; i < addMutations.len(); i++ { + if addMutations.isPessimisticLock[i] { + keysNeedToLock.Push(addMutations.ops[i], addMutations.keys[i], addMutations.values[i], addMutations.isPessimisticLock[i]) + } + } + // For unique index amend, we need to pessimistic lock the generated new index keys first. + if keysNeedToLock.len() > 0 { + pessimisticLockBo := NewBackofferWithVars(ctx, pessimisticLockMaxBackoff, c.txn.vars) + lCtx := &kv.LockCtx{ + ForUpdateTS: c.forUpdateTS, + LockWaitTime: kv.LockNoWait, + } + err = c.pessimisticLockMutations(pessimisticLockBo, lCtx, keysNeedToLock) + if err != nil { + logutil.Logger(ctx).Warn("amend pessimistic lock has failed", zap.Error(err), zap.Uint64("txnStartTS", c.startTS)) + return false, err + } + logutil.Logger(ctx).Info("amend pessimistic lock", zap.Uint64("startTS", c.startTS), zap.Uint64("forUpdateTS", c.forUpdateTS)) + } prewriteBo := NewBackofferWithVars(ctx, PrewriteMaxBackoff, c.txn.vars) err = c.prewriteMutations(prewriteBo, *addMutations) if err != nil { logutil.Logger(ctx).Warn("amend prewrite has failed", zap.Error(err), zap.Uint64("txnStartTS", c.startTS)) return false, err } + // Commit the amended secondary keys in the commit phase. + c.mutations.MergeMutations(*addMutations) logutil.Logger(ctx).Info("amend prewrite finished", zap.Uint64("txnStartTS", c.startTS)) return true, nil } From 0b0c41b43aedccce9b39488b9a849e592c9c14e5 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Fri, 6 Nov 2020 11:44:44 +0800 Subject: [PATCH 080/229] server: support for client multi-statement option (#19459) (#20408) Signed-off-by: ti-srebot --- server/conn.go | 10 ++++++++++ server/server.go | 1 + server/server_test.go | 16 +++++++++++++++- server/tidb_test.go | 1 + 4 files changed, 27 insertions(+), 1 deletion(-) diff --git a/server/conn.go b/server/conn.go index 2f3f2bb8320e2..84cc960fc7f68 100644 --- a/server/conn.go +++ b/server/conn.go @@ -1367,6 +1367,16 @@ func (cc *clientConn) handleQuery(ctx context.Context, sql string) (err error) { if len(rss) == 1 { err = cc.writeResultset(ctx, rss[0], false, 0, 0) } else { + // The client gets to choose if it allows multi-statements, and + // probably defaults OFF. This helps prevent against SQL injection attacks + // by early terminating the first statement, and then running an entirely + // new statement. + + capabilities := cc.ctx.GetSessionVars().ClientCapability + if capabilities&mysql.ClientMultiStatements < 1 { + return errMultiStatementDisabled + } + err = cc.writeMultiResultset(ctx, rss, false) } } else { diff --git a/server/server.go b/server/server.go index 77c1f67f47cd0..299174b279d2b 100644 --- a/server/server.go +++ b/server/server.go @@ -97,6 +97,7 @@ var ( errAccessDenied = terror.ClassServer.New(errno.ErrAccessDenied, errno.MySQLErrName[errno.ErrAccessDenied]) errConCount = terror.ClassServer.New(errno.ErrConCount, errno.MySQLErrName[errno.ErrConCount]) errSecureTransportRequired = terror.ClassServer.New(errno.ErrSecureTransportRequired, errno.MySQLErrName[errno.ErrSecureTransportRequired]) + errMultiStatementDisabled = terror.ClassServer.New(errno.ErrUnknown, "client has multi-statement capability disabled") // MySQL returns a parse error ) // DefaultCapability is the capability of the server when it is created using the default configuration. diff --git a/server/server_test.go b/server/server_test.go index 37fc9ba44decf..802a521da2b4e 100644 --- a/server/server_test.go +++ b/server/server_test.go @@ -1082,8 +1082,22 @@ func (cli *testServerClient) runTestStatusAPI(c *C) { c.Assert(data.GitHash, Equals, versioninfo.TiDBGitHash) } +// The golang sql driver (and most drivers) should have multi-statement +// disabled by default for security reasons. Lets ensure that the behavior +// is correct. + +func (cli *testServerClient) runFailedTestMultiStatements(c *C) { + cli.runTestsOnNewDB(c, nil, "FailedMultiStatements", func(dbt *DBTest) { + _, err := dbt.db.Exec("SELECT 1; SELECT 1; SELECT 2; SELECT 3;") + c.Assert(err.Error(), Equals, "Error 1105: client has multi-statement capability disabled") + }) +} + func (cli *testServerClient) runTestMultiStatements(c *C) { - cli.runTestsOnNewDB(c, nil, "MultiStatements", func(dbt *DBTest) { + + cli.runTestsOnNewDB(c, func(config *mysql.Config) { + config.Params = map[string]string{"multiStatements": "true"} + }, "MultiStatements", func(dbt *DBTest) { // Create Table dbt.mustExec("CREATE TABLE `test` (`id` int(11) NOT NULL, `value` int(11) NOT NULL) ") diff --git a/server/tidb_test.go b/server/tidb_test.go index 94109f92e3767..5b6ad75369f14 100644 --- a/server/tidb_test.go +++ b/server/tidb_test.go @@ -314,6 +314,7 @@ func newTLSHttpClient(c *C, caFile, certFile, keyFile string) *http.Client { func (ts *tidbTestSuite) TestMultiStatements(c *C) { c.Parallel() + ts.runFailedTestMultiStatements(c) ts.runTestMultiStatements(c) } From 45571c5e9bcc63195bc06b0aab19ddaac5fd4d2a Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Fri, 6 Nov 2020 14:33:43 +0800 Subject: [PATCH 081/229] expression: fix ADD_DATE daylight saving time change (#20871) (#20888) --- executor/executor_test.go | 9 +++++++++ expression/builtin_time.go | 2 +- types/core_time.go | 2 +- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/executor/executor_test.go b/executor/executor_test.go index eaa525521c01f..af136b6ba8050 100644 --- a/executor/executor_test.go +++ b/executor/executor_test.go @@ -6166,3 +6166,12 @@ func (s *testSuite) TestIssue20237(c *C) { tk.MustExec(`insert into s values(-37),(105),(-22),(-56),(124),(105),(111),(-5);`) tk.MustQuery(`select count(distinct t.a, t.b) from t join s on t.b= s.b;`).Check(testkit.Rows("4")) } + +func (s *testSuite) TestIssue19667(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t") + tk.MustExec("CREATE TABLE t (a DATETIME)") + tk.MustExec("INSERT INTO t VALUES('1988-04-17 01:59:59')") + tk.MustQuery(`SELECT DATE_ADD(a, INTERVAL 1 SECOND) FROM t`).Check(testkit.Rows("1988-04-17 02:00:00")) +} diff --git a/expression/builtin_time.go b/expression/builtin_time.go index 7f953ce1cda91..877ccde91d4dd 100644 --- a/expression/builtin_time.go +++ b/expression/builtin_time.go @@ -2852,7 +2852,7 @@ func (du *baseDateArithmitical) add(ctx sessionctx.Context, date types.Time, int return types.ZeroTime, true, err } - goTime, err := date.GoTime(time.Local) + goTime, err := date.GoTime(time.UTC) if err := handleInvalidTimeError(ctx, err); err != nil { return types.ZeroTime, true, err } diff --git a/types/core_time.go b/types/core_time.go index ebb4baafc306c..f8cf9a0b0db9d 100644 --- a/types/core_time.go +++ b/types/core_time.go @@ -251,7 +251,7 @@ func compareTime(a, b CoreTime) int { // When we execute select date_add('2018-01-31',interval 1 month) in mysql we got 2018-02-28 // but in tidb we got 2018-03-03. // Dig it and we found it's caused by golang api time.Date(year int, month Month, day, hour, min, sec, nsec int, loc *Location) Time , -// it says October 32 converts to November 1 ,it conflits with mysql. +// it says October 32 converts to November 1 ,it conflicts with mysql. // See https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_date-add func AddDate(year, month, day int64, ot gotime.Time) (nt gotime.Time) { df := getFixDays(int(year), int(month), int(day), ot) From 362c483fbac5cc1f4fb55009769c7424bff2cb0d Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Mon, 9 Nov 2020 12:22:01 +0800 Subject: [PATCH 082/229] grafana: show CPU usage of Go GC (#20663) (#20683) --- metrics/grafana/tidb_runtime.json | 404 +++++++++--------------------- 1 file changed, 115 insertions(+), 289 deletions(-) diff --git a/metrics/grafana/tidb_runtime.json b/metrics/grafana/tidb_runtime.json index b5f7b1344f23e..1b5c560c24456 100644 --- a/metrics/grafana/tidb_runtime.json +++ b/metrics/grafana/tidb_runtime.json @@ -235,69 +235,90 @@ { "aliasColors": {}, "bars": false, - "cacheTimeout": null, "dashLength": 10, "dashes": false, "datasource": "${DS_TEST-CLUSTER}", - "description": "Count of live objects.", + "description": "TiDB cpu usage calculated with process cpu running seconds", "editable": true, "error": false, - "fill": 0, + "fill": 1, "grid": {}, "gridPos": { "h": 7, "w": 12, - "x": 12, - "y": 1 + "x": 0, + "y": 8 }, - "id": 21, + "id": 6, "legend": { "alignAsTable": false, "avg": false, - "current": false, - "hideEmpty": true, - "hideZero": true, + "current": true, "max": false, "min": false, "rightSide": false, "show": true, - "sideWidth": null, "total": false, - "values": false + "values": true }, "lines": true, "linewidth": 1, "links": [], - "maxPerRow": 3, - "nullPointMode": "null", + "nullPointMode": "null as zero", "percentage": false, - "pluginVersion": "6.1.6", "pointradius": 5, "points": false, "renderer": "flot", - "repeat": null, - "repeatDirection": "h", - "seriesOverrides": [], + "seriesOverrides": [ + { + "alias": "total", + "fill": 0, + "lines": false + }, + { + "alias": "/limit/", + "color": "#C4162A", + "fill": 0, + "nullPointMode": "null" + } + ], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { - "expr": "go_memstats_heap_objects{instance=~\"$instance\"}", + "expr": "irate(process_cpu_seconds_total{instance=~\"$instance\"}[30s])", "format": "time_series", "hide": false, + "interval": "", "intervalFactor": 1, - "legendFormat": "objects", - "refId": "A" + "legendFormat": "cpu-usage", + "refId": "A", + "step": 40 + }, + { + "expr": "(idelta((go_memstats_gc_cpu_fraction{instance=~\"$instance\"} * (go_memstats_last_gc_time_seconds{instance=~\"$instance\"} - process_start_time_seconds{instance=~\"$instance\"}) * tidb_server_maxprocs{instance=~\"$instance\"})[30s:]) > 0) / 15", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "gc-cpu", + "refId": "C" + }, + { + "expr": "tidb_server_maxprocs{instance=~\"$instance\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "limit", + "refId": "B" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, - "title": "Estimated Live Objects", + "title": "CPU Usage", "tooltip": { - "msResolution": true, + "msResolution": false, "shared": true, "sort": 0, "value_type": "individual" @@ -312,8 +333,8 @@ }, "yaxes": [ { - "format": "short", - "label": "", + "format": "percentunit", + "label": null, "logBase": 1, "max": null, "min": "0", @@ -321,11 +342,11 @@ }, { "format": "short", - "label": "", + "label": null, "logBase": 1, "max": null, "min": null, - "show": false + "show": true } ], "yaxis": { @@ -336,83 +357,69 @@ { "aliasColors": {}, "bars": false, + "cacheTimeout": null, "dashLength": 10, "dashes": false, "datasource": "${DS_TEST-CLUSTER}", - "description": "TiDB cpu usage calculated with process cpu running seconds", + "description": "Count of live objects.", "editable": true, "error": false, - "fill": 1, + "fill": 0, "grid": {}, "gridPos": { "h": 7, "w": 12, - "x": 0, - "y": 8 + "x": 12, + "y": 1 }, - "id": 6, + "id": 21, "legend": { "alignAsTable": false, "avg": false, - "current": true, + "current": false, + "hideEmpty": true, + "hideZero": true, "max": false, "min": false, "rightSide": false, "show": true, + "sideWidth": null, "total": false, - "values": true + "values": false }, "lines": true, "linewidth": 1, "links": [], - "nullPointMode": "null as zero", + "maxPerRow": 3, + "nullPointMode": "null", "percentage": false, + "pluginVersion": "6.1.6", "pointradius": 5, "points": false, "renderer": "flot", - "seriesOverrides": [ - { - "alias": "total", - "fill": 0, - "lines": false - }, - { - "alias": "/limit/", - "color": "#C4162A", - "fill": 0, - "nullPointMode": "null" - } - ], + "repeat": null, + "repeatDirection": "h", + "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { - "expr": "irate(process_cpu_seconds_total{instance=~\"$instance\"}[30s])", + "expr": "go_memstats_heap_objects{instance=~\"$instance\"}", "format": "time_series", "hide": false, - "interval": "", - "intervalFactor": 1, - "legendFormat": "cpu-usage", - "refId": "A", - "step": 40 - }, - { - "expr": "tidb_server_maxprocs{instance=~\"$instance\"}", - "format": "time_series", - "interval": "", "intervalFactor": 1, - "legendFormat": "limit", - "refId": "B" + "legendFormat": "objects", + "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, - "title": "CPU Usage", + "title": "Estimated Live Objects", "tooltip": { - "msResolution": false, + "msResolution": true, "shared": true, "sort": 0, "value_type": "individual" @@ -427,8 +434,8 @@ }, "yaxes": [ { - "format": "percentunit", - "label": null, + "format": "short", + "label": "", "logBase": 1, "max": null, "min": "0", @@ -436,11 +443,11 @@ }, { "format": "short", - "label": null, + "label": "", "logBase": 1, "max": null, "min": null, - "show": true + "show": false } ], "yaxis": { @@ -569,15 +576,15 @@ "dashLength": 10, "dashes": false, "datasource": "${DS_TEST-CLUSTER}", - "description": "TiDB process current goroutines count", + "description": "The throughput of Go's memory allocator.", "fill": 1, "gridPos": { "h": 7, "w": 12, - "x": 0, - "y": 15 + "x": 12, + "y": 22 }, - "id": 12, + "id": 16, "legend": { "alignAsTable": false, "avg": false, @@ -599,8 +606,16 @@ "renderer": "flot", "seriesOverrides": [ { - "alias": "threads", - "fill": 0, + "alias": "sweep", + "transform": "negative-Y" + }, + { + "alias": "alloc-ops", + "yaxis": 2 + }, + { + "alias": "swepp-ops", + "transform": "negative-Y", "yaxis": 2 } ], @@ -609,206 +624,39 @@ "steppedLine": false, "targets": [ { - "expr": " go_goroutines{instance=~\"$instance\"}", + "expr": "irate(go_memstats_alloc_bytes_total{instance=~\"$instance\"}[30s])", "format": "time_series", "intervalFactor": 1, - "legendFormat": "goroutines", + "legendFormat": "alloc", "refId": "A" }, { - "expr": "go_threads{instance=~\"$instance\"}", + "expr": "irate((go_memstats_alloc_bytes_total{instance=~\"$instance\"} - go_memstats_heap_alloc_bytes{instance=~\"$instance\"})[30s:])", "format": "time_series", "intervalFactor": 1, - "legendFormat": "threads", + "legendFormat": "sweep", "refId": "B" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Goroutine Count", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true }, { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "${DS_TEST-CLUSTER}", - "description": "The CPU time (aggregated) used by grabage collector.", - "editable": true, - "error": false, - "fill": 1, - "grid": {}, - "gridPos": { - "h": 7, - "w": 12, - "x": 12, - "y": 15 - }, - "id": 14, - "legend": { - "alignAsTable": false, - "avg": false, - "current": true, - "max": true, - "min": false, - "rightSide": false, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null as zero", - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "(idelta((go_memstats_gc_cpu_fraction{instance=~\"$instance\"} * (go_memstats_last_gc_time_seconds{instance=~\"$instance\"} - process_start_time_seconds{instance=~\"$instance\"}) * tidb_server_maxprocs{instance=~\"$instance\"})[30s:]) / idelta(go_gc_duration_seconds_count{instance=~\"$instance\"}[30s])) > 0", + "expr": "irate(go_memstats_mallocs_total{instance=~\"$instance\"}[30s])", "format": "time_series", - "hide": false, "intervalFactor": 1, - "legendFormat": "cpu-time", - "refId": "B" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "GC CPU Time", - "tooltip": { - "msResolution": false, - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "s", - "label": null, - "logBase": 1, - "max": null, - "min": "0", - "show": true + "legendFormat": "alloc-ops", + "refId": "C" }, { - "format": "none", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": true, - "dashLength": 10, - "dashes": false, - "datasource": "${DS_TEST-CLUSTER}", - "description": "The Go garbage collection counts in the last 15s", - "fill": 1, - "gridPos": { - "h": 7, - "w": 12, - "x": 0, - "y": 22 - }, - "id": 10, - "legend": { - "alignAsTable": false, - "avg": false, - "current": true, - "max": true, - "min": false, - "rightSide": false, - "show": true, - "total": false, - "values": true - }, - "lines": false, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "idelta(go_gc_duration_seconds_count{instance=~\"$instance\"}[30s]) > 0", + "expr": "irate(go_memstats_frees_total{instance=~\"$instance\"}[30s])", "format": "time_series", "intervalFactor": 1, - "legendFormat": "count", - "refId": "A" + "legendFormat": "swepp-ops", + "refId": "D" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, - "title": "GC Count (in the last 15s)", + "title": "Allocator Throughput", "tooltip": { "shared": true, "sort": 0, @@ -824,7 +672,7 @@ }, "yaxes": [ { - "format": "none", + "format": "Bps", "label": null, "logBase": 1, "max": null, @@ -832,7 +680,7 @@ "show": true }, { - "format": "short", + "format": "ops", "label": null, "logBase": 1, "max": null, @@ -841,7 +689,7 @@ } ], "yaxis": { - "align": false, + "align": true, "alignLevel": null } }, @@ -851,15 +699,15 @@ "dashLength": 10, "dashes": false, "datasource": "${DS_TEST-CLUSTER}", - "description": "The throughput of Go's memory allocator.", + "description": "TiDB process current goroutines count", "fill": 1, "gridPos": { "h": 7, "w": 12, - "x": 12, - "y": 22 + "x": 0, + "y": 15 }, - "id": 16, + "id": 12, "legend": { "alignAsTable": false, "avg": false, @@ -881,16 +729,8 @@ "renderer": "flot", "seriesOverrides": [ { - "alias": "sweep", - "transform": "negative-Y" - }, - { - "alias": "alloc-ops", - "yaxis": 2 - }, - { - "alias": "swepp-ops", - "transform": "negative-Y", + "alias": "threads", + "fill": 0, "yaxis": 2 } ], @@ -899,39 +739,25 @@ "steppedLine": false, "targets": [ { - "expr": "irate(go_memstats_alloc_bytes_total{instance=~\"$instance\"}[30s])", + "expr": " go_goroutines{instance=~\"$instance\"}", "format": "time_series", "intervalFactor": 1, - "legendFormat": "alloc", + "legendFormat": "goroutines", "refId": "A" }, { - "expr": "irate((go_memstats_alloc_bytes_total{instance=~\"$instance\"} - go_memstats_heap_alloc_bytes{instance=~\"$instance\"})[30s:])", + "expr": "go_threads{instance=~\"$instance\"}", "format": "time_series", "intervalFactor": 1, - "legendFormat": "sweep", + "legendFormat": "threads", "refId": "B" - }, - { - "expr": "irate(go_memstats_mallocs_total{instance=~\"$instance\"}[30s])", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "alloc-ops", - "refId": "C" - }, - { - "expr": "irate(go_memstats_frees_total{instance=~\"$instance\"}[30s])", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "swepp-ops", - "refId": "D" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, - "title": "Allocator Throughput", + "title": "Goroutine Count", "tooltip": { "shared": true, "sort": 0, @@ -947,7 +773,7 @@ }, "yaxes": [ { - "format": "Bps", + "format": "short", "label": null, "logBase": 1, "max": null, @@ -955,7 +781,7 @@ "show": true }, { - "format": "ops", + "format": "short", "label": null, "logBase": 1, "max": null, @@ -964,7 +790,7 @@ } ], "yaxis": { - "align": true, + "align": false, "alignLevel": null } }, From f4f035d5fe8395639d2bdc10c30444230ef69643 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Tue, 10 Nov 2020 13:26:30 +0800 Subject: [PATCH 083/229] =?UTF-8?q?*:=20Support=20query=20backoff=20detail?= =?UTF-8?q?=20in=20SLOW=5FQUERY=20and=20add=20runtime=20stats=20columns=20?= =?UTF-8?q?to=20STATEMENTS=5FSUMMARY=E3=80=81SLOW=5FQUERY=20(#20300)=20(#2?= =?UTF-8?q?0766)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: ti-srebot Signed-off-by: jyz0309 <45495947@qq.com> --- executor/adapter.go | 53 ++++++++++++---------- executor/slow_query.go | 40 ++++++++++++++++ executor/slow_query_test.go | 13 +++++- infoschema/tables.go | 11 +++++ infoschema/tables_test.go | 4 +- sessionctx/variable/session.go | 2 + util/stmtsummary/statement_summary.go | 27 +++++++++-- util/stmtsummary/statement_summary_test.go | 3 +- 8 files changed, 120 insertions(+), 33 deletions(-) diff --git a/executor/adapter.go b/executor/adapter.go index 1964b4a7a66d6..8ba62ed47a9f4 100644 --- a/executor/adapter.go +++ b/executor/adapter.go @@ -1015,30 +1015,37 @@ func (a *ExecStmt) SummaryStmt(succ bool) { memMax := stmtCtx.MemTracker.MaxConsumed() diskMax := stmtCtx.DiskTracker.MaxConsumed() sql := a.GetTextToLog() + var stmtDetail execdetails.StmtExecDetails + stmtDetailRaw := a.GoCtx.Value(execdetails.StmtExecDetailKey) + if stmtDetailRaw != nil { + stmtDetail = *(stmtDetailRaw.(*execdetails.StmtExecDetails)) + } stmtExecInfo := &stmtsummary.StmtExecInfo{ - SchemaName: strings.ToLower(sessVars.CurrentDB), - OriginalSQL: sql, - NormalizedSQL: normalizedSQL, - Digest: digest, - PrevSQL: prevSQL, - PrevSQLDigest: prevSQLDigest, - PlanGenerator: planGenerator, - PlanDigest: planDigest, - PlanDigestGen: planDigestGen, - User: userString, - TotalLatency: costTime, - ParseLatency: sessVars.DurationParse, - CompileLatency: sessVars.DurationCompile, - StmtCtx: stmtCtx, - CopTasks: copTaskInfo, - ExecDetail: &execDetail, - MemMax: memMax, - DiskMax: diskMax, - StartTime: sessVars.StartTime, - IsInternal: sessVars.InRestrictedSQL, - Succeed: succ, - PlanInCache: sessVars.FoundInPlanCache, - ExecRetryCount: a.retryCount, + SchemaName: strings.ToLower(sessVars.CurrentDB), + OriginalSQL: sql, + NormalizedSQL: normalizedSQL, + Digest: digest, + PrevSQL: prevSQL, + PrevSQLDigest: prevSQLDigest, + PlanGenerator: planGenerator, + PlanDigest: planDigest, + PlanDigestGen: planDigestGen, + User: userString, + TotalLatency: costTime, + ParseLatency: sessVars.DurationParse, + CompileLatency: sessVars.DurationCompile, + StmtCtx: stmtCtx, + CopTasks: copTaskInfo, + ExecDetail: &execDetail, + MemMax: memMax, + DiskMax: diskMax, + StartTime: sessVars.StartTime, + IsInternal: sessVars.InRestrictedSQL, + Succeed: succ, + PlanInCache: sessVars.FoundInPlanCache, + ExecRetryCount: a.retryCount, + StmtExecDetails: stmtDetail, + Prepared: a.isPreparedStmt, } if a.retryCount > 0 { stmtExecInfo.ExecRetryTime = costTime - sessVars.DurationParse - sessVars.DurationCompile - time.Since(a.retryStartTime) diff --git a/executor/slow_query.go b/executor/slow_query.go index bd2aae5eeff22..066120c12f80a 100755 --- a/executor/slow_query.go +++ b/executor/slow_query.go @@ -378,6 +378,15 @@ func (e *slowQueryRetriever) parseLog(ctx sessionctx.Context, log []string, offs if !valid { startFlag = false } + } else if strings.HasPrefix(line, variable.SlowLogCopBackoffPrefix) { + valid, err := st.setFieldValue(tz, variable.SlowLogBackoffDetail, line, fileLine, e.checker) + if err != nil { + ctx.GetSessionVars().StmtCtx.AppendWarning(err) + continue + } + if !valid { + startFlag = false + } } else { fieldValues := strings.Split(line, " ") for i := 0; i < len(fieldValues)-1; i += 2 { @@ -473,8 +482,14 @@ type slowQueryTuple struct { isInternal bool succ bool planFromCache bool + prepared bool + kvTotal float64 + pdTotal float64 + backoffTotal float64 + writeSQLRespTotal float64 plan string planDigest string + backoffDetail string } func (st *slowQueryTuple) setFieldValue(tz *time.Location, field, value string, lineNum int, checker *slowLogChecker) (valid bool, err error) { @@ -614,12 +629,27 @@ func (st *slowQueryTuple) setFieldValue(tz *time.Location, field, value string, st.sql = value case variable.SlowLogDiskMax: st.diskMax, err = strconv.ParseInt(value, 10, 64) + case variable.SlowLogKVTotal: + st.kvTotal, err = strconv.ParseFloat(value, 64) + case variable.SlowLogPDTotal: + st.pdTotal, err = strconv.ParseFloat(value, 64) + case variable.SlowLogBackoffTotal: + st.backoffTotal, err = strconv.ParseFloat(value, 64) + case variable.SlowLogWriteSQLRespTotal: + st.writeSQLRespTotal, err = strconv.ParseFloat(value, 64) + case variable.SlowLogPrepared: + st.prepared, err = strconv.ParseBool(value) case variable.SlowLogRewriteTimeStr: st.rewriteTime, err = strconv.ParseFloat(value, 64) case variable.SlowLogPreprocSubQueriesStr: st.preprocSubqueries, err = strconv.ParseUint(value, 10, 64) case variable.SlowLogPreProcSubQueryTimeStr: st.preprocSubQueryTime, err = strconv.ParseFloat(value, 64) + case variable.SlowLogBackoffDetail: + if len(st.backoffDetail) > 0 { + st.backoffDetail += " " + } + st.backoffDetail += value } if err != nil { return valid, fmt.Errorf("Parse slow log at line " + strconv.FormatInt(int64(lineNum), 10) + " failed. Field: `" + field + "`, error: " + err.Error()) @@ -678,6 +708,16 @@ func (st *slowQueryTuple) convertToDatumRow() []types.Datum { record = append(record, types.NewStringDatum(st.maxWaitAddress)) record = append(record, types.NewIntDatum(st.memMax)) record = append(record, types.NewIntDatum(st.diskMax)) + record = append(record, types.NewFloat64Datum(st.kvTotal)) + record = append(record, types.NewFloat64Datum(st.pdTotal)) + record = append(record, types.NewFloat64Datum(st.backoffTotal)) + record = append(record, types.NewFloat64Datum(st.writeSQLRespTotal)) + record = append(record, types.NewStringDatum(st.backoffDetail)) + if st.prepared { + record = append(record, types.NewIntDatum(1)) + } else { + record = append(record, types.NewIntDatum(0)) + } if st.succ { record = append(record, types.NewIntDatum(1)) } else { diff --git a/executor/slow_query_test.go b/executor/slow_query_test.go index d8791562a7cb0..061e01309d06e 100644 --- a/executor/slow_query_test.go +++ b/executor/slow_query_test.go @@ -100,6 +100,9 @@ func (s *testExecSuite) TestParseSlowLogFile(c *C) { # Stats: t1:1,t2:2 # Cop_proc_avg: 0.1 Cop_proc_p90: 0.2 Cop_proc_max: 0.03 Cop_proc_addr: 127.0.0.1:20160 # Cop_wait_avg: 0.05 Cop_wait_p90: 0.6 Cop_wait_max: 0.8 Cop_wait_addr: 0.0.0.0:20160 +# Cop_backoff_regionMiss_total_times: 200 Cop_backoff_regionMiss_total_time: 0.2 Cop_backoff_regionMiss_max_time: 0.2 Cop_backoff_regionMiss_max_addr: 127.0.0.1 Cop_backoff_regionMiss_avg_time: 0.2 Cop_backoff_regionMiss_p90_time: 0.2 +# Cop_backoff_rpcPD_total_times: 200 Cop_backoff_rpcPD_total_time: 0.2 Cop_backoff_rpcPD_max_time: 0.2 Cop_backoff_rpcPD_max_addr: 127.0.0.1 Cop_backoff_rpcPD_avg_time: 0.2 Cop_backoff_rpcPD_p90_time: 0.2 +# Cop_backoff_rpcTiKV_total_times: 200 Cop_backoff_rpcTiKV_total_time: 0.2 Cop_backoff_rpcTiKV_max_time: 0.2 Cop_backoff_rpcTiKV_max_addr: 127.0.0.1 Cop_backoff_rpcTiKV_avg_time: 0.2 Cop_backoff_rpcTiKV_p90_time: 0.2 # Mem_max: 70724 # Disk_max: 65536 # Plan_from_cache: true @@ -125,8 +128,14 @@ select * from t;` } recordString += str } - expectRecordString := "2019-04-28 15:24:04.309074,405888132465033227,root,localhost,0,57,0.12,0.216905,0,0,0,0,0,0,0,0,0,0,,0,0,0,0,0,0,0.38,0.021,0,0,0,1,637,0,,,1,42a1c8aae6f133e934d4bf0147491709a8812ea05ff8819ec522780fe657b772,t1:1,t2:2,0.1,0.2,0.03,127.0.0.1:20160,0.05,0.6,0.8,0.0.0.0:20160,70724,65536,0,1,,60e9378c746d9a2be1c791047e008967cf252eb6de9167ad3aa6098fa2d523f4,update t set i = 1;,select * from t;" - c.Assert(expectRecordString, Equals, recordString) + expectRecordString := `2019-04-28 15:24:04.309074,` + + `405888132465033227,root,localhost,0,57,0.12,0.216905,` + + `0,0,0,0,0,0,0,0,0,0,,0,0,0,0,0,0,0.38,0.021,0,0,0,1,637,0,,,1,42a1c8aae6f133e934d4bf0147491709a8812ea05ff8819ec522780fe657b772,t1:1,t2:2,` + + `0.1,0.2,0.03,127.0.0.1:20160,0.05,0.6,0.8,0.0.0.0:20160,70724,65536,0,0,0,0,` + + `Cop_backoff_regionMiss_total_times: 200 Cop_backoff_regionMiss_total_time: 0.2 Cop_backoff_regionMiss_max_time: 0.2 Cop_backoff_regionMiss_max_addr: 127.0.0.1 Cop_backoff_regionMiss_avg_time: 0.2 Cop_backoff_regionMiss_p90_time: 0.2 Cop_backoff_rpcPD_total_times: 200 Cop_backoff_rpcPD_total_time: 0.2 Cop_backoff_rpcPD_max_time: 0.2 Cop_backoff_rpcPD_max_addr: 127.0.0.1 Cop_backoff_rpcPD_avg_time: 0.2 Cop_backoff_rpcPD_p90_time: 0.2 Cop_backoff_rpcTiKV_total_times: 200 Cop_backoff_rpcTiKV_total_time: 0.2 Cop_backoff_rpcTiKV_max_time: 0.2 Cop_backoff_rpcTiKV_max_addr: 127.0.0.1 Cop_backoff_rpcTiKV_avg_time: 0.2 Cop_backoff_rpcTiKV_p90_time: 0.2,` + + `0,0,1,,60e9378c746d9a2be1c791047e008967cf252eb6de9167ad3aa6098fa2d523f4,` + + `update t set i = 1;,select * from t;` + c.Assert(recordString, Equals, expectRecordString) // fix sql contain '# ' bug slowLog := bytes.NewBufferString( diff --git a/infoschema/tables.go b/infoschema/tables.go index 98e1f7a7b336e..55ba91eba630a 100644 --- a/infoschema/tables.go +++ b/infoschema/tables.go @@ -761,6 +761,12 @@ var slowQueryCols = []columnInfo{ {name: variable.SlowLogCopWaitAddr, tp: mysql.TypeVarchar, size: 64}, {name: variable.SlowLogMemMax, tp: mysql.TypeLonglong, size: 20}, {name: variable.SlowLogDiskMax, tp: mysql.TypeLonglong, size: 20}, + {name: variable.SlowLogKVTotal, tp: mysql.TypeDouble, size: 22}, + {name: variable.SlowLogPDTotal, tp: mysql.TypeDouble, size: 22}, + {name: variable.SlowLogBackoffTotal, tp: mysql.TypeDouble, size: 22}, + {name: variable.SlowLogWriteSQLRespTotal, tp: mysql.TypeDouble, size: 22}, + {name: variable.SlowLogBackoffDetail, tp: mysql.TypeVarchar, size: 4096}, + {name: variable.SlowLogPrepared, tp: mysql.TypeTiny, size: 1}, {name: variable.SlowLogSucc, tp: mysql.TypeTiny, size: 1}, {name: variable.SlowLogPlanFromCache, tp: mysql.TypeTiny, size: 1}, {name: variable.SlowLogPlan, tp: mysql.TypeLongBlob, size: types.UnspecifiedLength}, @@ -1214,6 +1220,11 @@ var tableStatementsSummaryCols = []columnInfo{ {name: "MAX_MEM", tp: mysql.TypeLonglong, size: 20, flag: mysql.NotNullFlag | mysql.UnsignedFlag, comment: "Max memory(byte) used"}, {name: "AVG_DISK", tp: mysql.TypeLonglong, size: 20, flag: mysql.NotNullFlag | mysql.UnsignedFlag, comment: "Average disk space(byte) used"}, {name: "MAX_DISK", tp: mysql.TypeLonglong, size: 20, flag: mysql.NotNullFlag | mysql.UnsignedFlag, comment: "Max disk space(byte) used"}, + {name: "AVG_KV_TIME", tp: mysql.TypeLonglong, size: 22, flag: mysql.NotNullFlag | mysql.UnsignedFlag, comment: "Average time of TiKV used"}, + {name: "AVG_PD_TIME", tp: mysql.TypeLonglong, size: 22, flag: mysql.NotNullFlag | mysql.UnsignedFlag, comment: "Average time of PD used"}, + {name: "AVG_BACKOFF_TOTAL_TIME", tp: mysql.TypeLonglong, size: 22, flag: mysql.NotNullFlag | mysql.UnsignedFlag, comment: "Average time of Backoff used"}, + {name: "AVG_WRITE_SQL_RESP_TIME", tp: mysql.TypeLonglong, size: 22, flag: mysql.NotNullFlag | mysql.UnsignedFlag, comment: "Average time of write sql resp used"}, + {name: "PREPARED", tp: mysql.TypeTiny, size: 1, flag: mysql.NotNullFlag, comment: "Whether prepared"}, {name: "AVG_AFFECTED_ROWS", tp: mysql.TypeDouble, size: 22, flag: mysql.NotNullFlag | mysql.UnsignedFlag, comment: "Average number of rows affected"}, {name: "FIRST_SEEN", tp: mysql.TypeTimestamp, size: 26, flag: mysql.NotNullFlag, comment: "The time these statements are seen for the first time"}, {name: "LAST_SEEN", tp: mysql.TypeTimestamp, size: 26, flag: mysql.NotNullFlag, comment: "The time these statements are seen for the last time"}, diff --git a/infoschema/tables_test.go b/infoschema/tables_test.go index 1743334051b83..ba66e6857f618 100644 --- a/infoschema/tables_test.go +++ b/infoschema/tables_test.go @@ -636,10 +636,10 @@ func (s *testTableSuite) TestSlowQuery(c *C) { tk.MustExec("set time_zone = '+08:00';") re := tk.MustQuery("select * from information_schema.slow_query") re.Check(testutil.RowsWithSep("|", - "2019-02-12 19:33:56.571953|406315658548871171|root|localhost|6|57|0.12|4.895492|0.4|0.2|0.000000003|2|0.000000002|0.19|0.21|0.01|0|0.18|[txnLock]|0.03|0|15|480|1|8|0.3824278|0.161|0.101|0.092|1.71|1|100001|100000|test||0|42a1c8aae6f133e934d4bf0147491709a8812ea05ff8819ec522780fe657b772|t1:1,t2:2|0.1|0.2|0.03|127.0.0.1:20160|0.05|0.6|0.8|0.0.0.0:20160|70724|65536|1|1|abcd|60e9378c746d9a2be1c791047e008967cf252eb6de9167ad3aa6098fa2d523f4|update t set i = 2;|select * from t_slim;")) + "2019-02-12 19:33:56.571953|406315658548871171|root|localhost|6|57|0.12|4.895492|0.4|0.2|0.000000003|2|0.000000002|0.19|0.21|0.01|0|0.18|[txnLock]|0.03|0|15|480|1|8|0.3824278|0.161|0.101|0.092|1.71|1|100001|100000|test||0|42a1c8aae6f133e934d4bf0147491709a8812ea05ff8819ec522780fe657b772|t1:1,t2:2|0.1|0.2|0.03|127.0.0.1:20160|0.05|0.6|0.8|0.0.0.0:20160|70724|65536|0|0|0|0||0|1|1|abcd|60e9378c746d9a2be1c791047e008967cf252eb6de9167ad3aa6098fa2d523f4|update t set i = 2;|select * from t_slim;")) tk.MustExec("set time_zone = '+00:00';") re = tk.MustQuery("select * from information_schema.slow_query") - re.Check(testutil.RowsWithSep("|", "2019-02-12 11:33:56.571953|406315658548871171|root|localhost|6|57|0.12|4.895492|0.4|0.2|0.000000003|2|0.000000002|0.19|0.21|0.01|0|0.18|[txnLock]|0.03|0|15|480|1|8|0.3824278|0.161|0.101|0.092|1.71|1|100001|100000|test||0|42a1c8aae6f133e934d4bf0147491709a8812ea05ff8819ec522780fe657b772|t1:1,t2:2|0.1|0.2|0.03|127.0.0.1:20160|0.05|0.6|0.8|0.0.0.0:20160|70724|65536|1|1|abcd|60e9378c746d9a2be1c791047e008967cf252eb6de9167ad3aa6098fa2d523f4|update t set i = 2;|select * from t_slim;")) + re.Check(testutil.RowsWithSep("|", "2019-02-12 11:33:56.571953|406315658548871171|root|localhost|6|57|0.12|4.895492|0.4|0.2|0.000000003|2|0.000000002|0.19|0.21|0.01|0|0.18|[txnLock]|0.03|0|15|480|1|8|0.3824278|0.161|0.101|0.092|1.71|1|100001|100000|test||0|42a1c8aae6f133e934d4bf0147491709a8812ea05ff8819ec522780fe657b772|t1:1,t2:2|0.1|0.2|0.03|127.0.0.1:20160|0.05|0.6|0.8|0.0.0.0:20160|70724|65536|0|0|0|0||0|1|1|abcd|60e9378c746d9a2be1c791047e008967cf252eb6de9167ad3aa6098fa2d523f4|update t set i = 2;|select * from t_slim;")) // Test for long query. f, err := os.OpenFile(slowLogFileName, os.O_CREATE|os.O_WRONLY, 0644) diff --git a/sessionctx/variable/session.go b/sessionctx/variable/session.go index e7b923d9253bc..f36b21288071f 100644 --- a/sessionctx/variable/session.go +++ b/sessionctx/variable/session.go @@ -1614,6 +1614,8 @@ const ( SlowLogExecRetryCount = "Exec_retry_count" // SlowLogExecRetryTime is the execution retry time. SlowLogExecRetryTime = "Exec_retry_time" + // SlowLogBackoffDetail is the detail of backoff. + SlowLogBackoffDetail = "Backoff_Detail" ) // SlowQueryLogItems is a collection of items that should be included in the diff --git a/util/stmtsummary/statement_summary.go b/util/stmtsummary/statement_summary.go index 35109f9f892a2..eefab1456156e 100644 --- a/util/stmtsummary/statement_summary.go +++ b/util/stmtsummary/statement_summary.go @@ -163,11 +163,16 @@ type stmtSummaryByDigestElement struct { backoffTypes map[fmt.Stringer]int authUsers map[string]struct{} // other - sumMem int64 - maxMem int64 - sumDisk int64 - maxDisk int64 - sumAffectedRows uint64 + sumMem int64 + maxMem int64 + sumDisk int64 + maxDisk int64 + sumAffectedRows uint64 + sumKVTotal time.Duration + sumPDTotal time.Duration + sumBackoffTotal time.Duration + sumWriteSQLRespTotal time.Duration + prepared bool // The first time this type of SQL executes. firstSeen time.Time // The last time this type of SQL executes. @@ -206,6 +211,8 @@ type StmtExecInfo struct { PlanInCache bool ExecRetryCount uint ExecRetryTime time.Duration + execdetails.StmtExecDetails + Prepared bool } // newStmtSummaryByDigestMap creates an empty stmtSummaryByDigestMap. @@ -591,6 +598,7 @@ func newStmtSummaryByDigestElement(sei *StmtExecInfo, beginTime int64, intervalS authUsers: make(map[string]struct{}), planInCache: false, planCacheHits: 0, + prepared: sei.Prepared, } ssElement.add(sei, intervalSeconds) return ssElement @@ -765,6 +773,10 @@ func (ssElement *stmtSummaryByDigestElement) add(sei *StmtExecInfo, intervalSeco ssElement.execRetryCount += sei.ExecRetryCount ssElement.execRetryTime += sei.ExecRetryTime } + ssElement.sumKVTotal += time.Duration(atomic.LoadInt64(&sei.StmtExecDetails.WaitKVRespDuration)) + ssElement.sumPDTotal += time.Duration(atomic.LoadInt64(&sei.StmtExecDetails.WaitPDRespDuration)) + ssElement.sumBackoffTotal += time.Duration(atomic.LoadInt64(&sei.StmtExecDetails.BackoffDuration)) + ssElement.sumWriteSQLRespTotal += sei.StmtExecDetails.WriteSQLRespDuration } func (ssElement *stmtSummaryByDigestElement) toDatum(ssbd *stmtSummaryByDigest) []types.Datum { @@ -848,6 +860,11 @@ func (ssElement *stmtSummaryByDigestElement) toDatum(ssbd *stmtSummaryByDigest) ssElement.maxMem, avgInt(ssElement.sumDisk, ssElement.execCount), ssElement.maxDisk, + avgInt(int64(ssElement.sumKVTotal), ssElement.commitCount), + avgInt(int64(ssElement.sumPDTotal), ssElement.commitCount), + avgInt(int64(ssElement.sumBackoffTotal), ssElement.commitCount), + avgInt(int64(ssElement.sumWriteSQLRespTotal), ssElement.commitCount), + ssElement.prepared, avgFloat(int64(ssElement.sumAffectedRows), ssElement.execCount), types.NewTime(types.FromGoTime(ssElement.firstSeen), mysql.TypeTimestamp, 0), types.NewTime(types.FromGoTime(ssElement.lastSeen), mysql.TypeTimestamp, 0), diff --git a/util/stmtsummary/statement_summary_test.go b/util/stmtsummary/statement_summary_test.go index 7517a923b9816..a1b3eb5ac6186 100644 --- a/util/stmtsummary/statement_summary_test.go +++ b/util/stmtsummary/statement_summary_test.go @@ -613,7 +613,8 @@ func (s *testStmtSummarySuite) TestToDatum(c *C) { stmtExecInfo1.ExecDetail.CommitDetail.WriteSize, stmtExecInfo1.ExecDetail.CommitDetail.WriteSize, stmtExecInfo1.ExecDetail.CommitDetail.PrewriteRegionNum, stmtExecInfo1.ExecDetail.CommitDetail.PrewriteRegionNum, stmtExecInfo1.ExecDetail.CommitDetail.TxnRetry, stmtExecInfo1.ExecDetail.CommitDetail.TxnRetry, 0, 0, 1, - "txnLock:1", stmtExecInfo1.MemMax, stmtExecInfo1.MemMax, stmtExecInfo1.DiskMax, stmtExecInfo1.DiskMax, stmtExecInfo1.StmtCtx.AffectedRows(), + "txnLock:1", stmtExecInfo1.MemMax, stmtExecInfo1.MemMax, stmtExecInfo1.DiskMax, stmtExecInfo1.DiskMax, + 0, 0, 0, 0, 0, stmtExecInfo1.StmtCtx.AffectedRows(), t, t, 0, 0, stmtExecInfo1.OriginalSQL, stmtExecInfo1.PrevSQL, "plan_digest", ""} match(c, datums[0], expectedDatum...) datums = s.ssMap.ToHistoryDatum(nil, true) From 331d67ac079a4643b547d01812ad32609e5979fc Mon Sep 17 00:00:00 2001 From: wjHuang Date: Tue, 10 Nov 2020 18:19:21 +0800 Subject: [PATCH 084/229] *: fix not precedence in generated column (20612) (#20826) --- expression/integration_test.go | 15 +++++++++++++++ expression/simple_rewriter.go | 2 +- go.mod | 4 ++-- go.sum | 6 ++++-- planner/core/expression_rewriter.go | 2 +- 5 files changed, 23 insertions(+), 6 deletions(-) diff --git a/expression/integration_test.go b/expression/integration_test.go index ebe04df4aa0ed..5a65e5b3e0b69 100755 --- a/expression/integration_test.go +++ b/expression/integration_test.go @@ -6469,6 +6469,21 @@ func (s *testIntegrationSuite) TestIssue15986(c *C) { "00000000000000000000000000000000000000000000000000000000000000000000000000000000000009';").Check(testkit.Rows("0")) } +func (s *testIntegrationSuite2) TestIssue17791(c *C) { + tk := testkit.NewTestKit(c, s.store) + + tk.MustExec("use test;") + tk.MustExec("drop table if exists t;") + tk.MustExec("SET sql_mode=DEFAULT;") + tk.MustExec("CREATE TABLE t1 (" + + " id INT NOT NULL PRIMARY KEY auto_increment," + + " pad VARCHAR(10) NOT NULL," + + " expr varchar(100) AS (NOT 1 BETWEEN -5 AND 5)" + + ");") + tk.MustExec("INSERT INTO t1 (pad) VALUES ('a'), ('b');") + tk.MustQuery("SELECT id, pad, expr, NOT 1 BETWEEN -5 AND 5 as expr_in_select FROM t1;").Check(testkit.Rows("1 a 0 0", "2 b 0 0")) +} + func (s *testIntegrationSuite) TestNegativeZeroForHashJoin(c *C) { tk := testkit.NewTestKit(c, s.store) tk.MustExec("use test;") diff --git a/expression/simple_rewriter.go b/expression/simple_rewriter.go index 57cd5160ee0ca..dd2be59e7e4e9 100644 --- a/expression/simple_rewriter.go +++ b/expression/simple_rewriter.go @@ -453,7 +453,7 @@ func (sr *simpleRewriter) unaryOpToExpression(v *ast.UnaryOperationExpr) { op = ast.UnaryMinus case opcode.BitNeg: op = ast.BitNeg - case opcode.Not: + case opcode.Not, opcode.Not2: op = ast.UnaryNot default: sr.err = errors.Errorf("Unknown Unary Op %T", v.Op) diff --git a/go.mod b/go.mod index 40bb65268da1c..0a6c3ff043108 100644 --- a/go.mod +++ b/go.mod @@ -34,7 +34,7 @@ require ( github.com/pingcap/goleveldb v0.0.0-20191226122134-f82aafb29989 github.com/pingcap/kvproto v0.0.0-20200907074027-32a3a0accf7d github.com/pingcap/log v0.0.0-20200828042413-fce0951f1463 - github.com/pingcap/parser v0.0.0-20201022083903-fbe80b0c40bb + github.com/pingcap/parser v0.0.0-20201104074312-b05b93d3a011 github.com/pingcap/sysutil v0.0.0-20200715082929-4c47bcac246a github.com/pingcap/tidb-tools v4.0.6-0.20200828085514-03575b185007+incompatible github.com/pingcap/tipb v0.0.0-20200618092958-4fad48b4c8c3 @@ -57,7 +57,7 @@ require ( golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d // indirect golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208 golang.org/x/sys v0.0.0-20200819171115-d785dc25833f - golang.org/x/text v0.3.3 + golang.org/x/text v0.3.4 golang.org/x/time v0.0.0-20191024005414-555d28b269f0 // indirect golang.org/x/tools v0.0.0-20200820010801-b793a1359eac google.golang.org/genproto v0.0.0-20200108215221-bd8f9a0ef82f // indirect diff --git a/go.sum b/go.sum index 008d016b1e84f..e62c1ef8b906e 100644 --- a/go.sum +++ b/go.sum @@ -457,8 +457,8 @@ github.com/pingcap/parser v0.0.0-20200803072748-fdf66528323d/go.mod h1:vQdbJqobJ github.com/pingcap/parser v0.0.0-20200901062802-475ea5e2e0a7/go.mod h1:vQdbJqobJAgFyiRNNtXahpMoGWwPEuWciVEK5A20NS0= github.com/pingcap/parser v0.0.0-20200921063432-e220cfcfd026 h1:i+r4P7hb4KpW74nPn+P/hqtsW3fu4U9A4JGAYKWMvtw= github.com/pingcap/parser v0.0.0-20200921063432-e220cfcfd026/go.mod h1:dMMvhqeowLnAsDWspyalgxXoRUnP09cZ7wAnpt2e/S8= -github.com/pingcap/parser v0.0.0-20201022083903-fbe80b0c40bb h1:yT+Y2yiuLOXdVlERMA7vPQ8Shwk920S9LpuS/cFj6uo= -github.com/pingcap/parser v0.0.0-20201022083903-fbe80b0c40bb/go.mod h1:dMMvhqeowLnAsDWspyalgxXoRUnP09cZ7wAnpt2e/S8= +github.com/pingcap/parser v0.0.0-20201104074312-b05b93d3a011 h1:OK7jx9L6bgzfreJDSfmn5DE5xfPT+T7WClGunIvg4Qo= +github.com/pingcap/parser v0.0.0-20201104074312-b05b93d3a011/go.mod h1:dMMvhqeowLnAsDWspyalgxXoRUnP09cZ7wAnpt2e/S8= github.com/pingcap/pd/v4 v4.0.0-rc.1.0.20200422143320-428acd53eba2/go.mod h1:s+utZtXDznOiL24VK0qGmtoHjjXNsscJx3m1n8cC56s= github.com/pingcap/pd/v4 v4.0.0-rc.2.0.20200520083007-2c251bd8f181/go.mod h1:q4HTx/bA8aKBa4S7L+SQKHvjRPXCRV0tA0yRw0qkZSA= github.com/pingcap/pd/v4 v4.0.5-0.20200817114353-e465cafe8a91/go.mod h1:m9OEkKoPMQWjrbJ9pqjjeCqzqxraZrPEuWa1OI6Wcek= @@ -788,6 +788,8 @@ golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3 golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.4 h1:0YWbFKbhXG/wIiuHDSKpS0Iy7FSA+u45VtBMfQcFTTc= +golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= diff --git a/planner/core/expression_rewriter.go b/planner/core/expression_rewriter.go index 3eb6dd0c6bdb2..834e4c01c2c97 100644 --- a/planner/core/expression_rewriter.go +++ b/planner/core/expression_rewriter.go @@ -1158,7 +1158,7 @@ func (er *expressionRewriter) unaryOpToExpression(v *ast.UnaryOperationExpr) { op = ast.UnaryMinus case opcode.BitNeg: op = ast.BitNeg - case opcode.Not: + case opcode.Not, opcode.Not2: op = ast.UnaryNot default: er.err = errors.Errorf("Unknown Unary Op %T", v.Op) From a29c5bc2aa692ad3e28ccdcc129d387503bbf1c2 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Wed, 11 Nov 2020 10:17:48 +0800 Subject: [PATCH 085/229] *:Fix the bug of consistent plan but inconsistent plan digest (#20660) (#20772) Signed-off-by: ti-srebot Signed-off-by: jyz0309 <45495947@qq.com> --- planner/core/common_plans.go | 2 +- planner/core/explain.go | 26 ++++++++------ planner/core/plan_test.go | 18 ++++++++-- planner/core/point_get_plan.go | 18 ++++++---- .../testdata/plan_normalized_suite_in.json | 7 +++- .../testdata/plan_normalized_suite_out.json | 34 +++++++++++++++++++ 6 files changed, 83 insertions(+), 22 deletions(-) diff --git a/planner/core/common_plans.go b/planner/core/common_plans.go index 902b54be127e9..452fa9f03afec 100644 --- a/planner/core/common_plans.go +++ b/planner/core/common_plans.go @@ -1092,7 +1092,7 @@ func (e *Explain) getOperatorInfo(p Plan, id string) (string, string, string) { } var accessObject, operatorInfo string if plan, ok := p.(dataAccesser); ok { - accessObject = plan.AccessObject() + accessObject = plan.AccessObject(false) operatorInfo = plan.OperatorInfo(false) } else { operatorInfo = p.ExplainInfo() diff --git a/planner/core/explain.go b/planner/core/explain.go index cf7cee5de5be0..64ed86c7242c0 100644 --- a/planner/core/explain.go +++ b/planner/core/explain.go @@ -33,7 +33,7 @@ import ( type dataAccesser interface { // AccessObject return plan's `table`, `partition` and `index`. - AccessObject() string + AccessObject(normalized bool) string // OperatorInfo return other operator information to be explained. OperatorInfo(normalized bool) string @@ -56,16 +56,16 @@ func (p *PhysicalIndexScan) ExplainID() fmt.Stringer { // ExplainInfo implements Plan interface. func (p *PhysicalIndexScan) ExplainInfo() string { - return p.AccessObject() + ", " + p.OperatorInfo(false) + return p.AccessObject(false) + ", " + p.OperatorInfo(false) } // ExplainNormalizedInfo implements Plan interface. func (p *PhysicalIndexScan) ExplainNormalizedInfo() string { - return p.AccessObject() + ", " + p.OperatorInfo(true) + return p.AccessObject(true) + ", " + p.OperatorInfo(true) } // AccessObject implements dataAccesser interface. -func (p *PhysicalIndexScan) AccessObject() string { +func (p *PhysicalIndexScan) AccessObject(normalized bool) string { buffer := bytes.NewBufferString("") tblName := p.Table.Name.O if p.TableAsName != nil && p.TableAsName.O != "" { @@ -73,7 +73,9 @@ func (p *PhysicalIndexScan) AccessObject() string { } fmt.Fprintf(buffer, "table:%s", tblName) if p.isPartition { - if pi := p.Table.GetPartitionInfo(); pi != nil { + if normalized { + fmt.Fprintf(buffer, ", partition:?") + } else if pi := p.Table.GetPartitionInfo(); pi != nil { partitionName := pi.GetNameByID(p.physicalTableID) fmt.Fprintf(buffer, ", partition:%s", partitionName) } @@ -160,16 +162,16 @@ func (p *PhysicalTableScan) ExplainID() fmt.Stringer { // ExplainInfo implements Plan interface. func (p *PhysicalTableScan) ExplainInfo() string { - return p.AccessObject() + ", " + p.OperatorInfo(false) + return p.AccessObject(false) + ", " + p.OperatorInfo(false) } // ExplainNormalizedInfo implements Plan interface. func (p *PhysicalTableScan) ExplainNormalizedInfo() string { - return p.AccessObject() + ", " + p.OperatorInfo(true) + return p.AccessObject(true) + ", " + p.OperatorInfo(true) } // AccessObject implements dataAccesser interface. -func (p *PhysicalTableScan) AccessObject() string { +func (p *PhysicalTableScan) AccessObject(normalized bool) string { buffer := bytes.NewBufferString("") tblName := p.Table.Name.O if p.TableAsName != nil && p.TableAsName.O != "" { @@ -177,7 +179,9 @@ func (p *PhysicalTableScan) AccessObject() string { } fmt.Fprintf(buffer, "table:%s", tblName) if p.isPartition { - if pi := p.Table.GetPartitionInfo(); pi != nil { + if normalized { + fmt.Fprintf(buffer, ", partition:?") + } else if pi := p.Table.GetPartitionInfo(); pi != nil { partitionName := pi.GetNameByID(p.physicalTableID) fmt.Fprintf(buffer, ", partition:%s", partitionName) } @@ -808,7 +812,7 @@ const MetricTableTimeFormat = "2006-01-02 15:04:05.999" // ExplainInfo implements Plan interface. func (p *PhysicalMemTable) ExplainInfo() string { - accessObject, operatorInfo := p.AccessObject(), p.OperatorInfo(false) + accessObject, operatorInfo := p.AccessObject(false), p.OperatorInfo(false) if len(operatorInfo) == 0 { return accessObject } @@ -816,7 +820,7 @@ func (p *PhysicalMemTable) ExplainInfo() string { } // AccessObject implements dataAccesser interface. -func (p *PhysicalMemTable) AccessObject() string { +func (p *PhysicalMemTable) AccessObject(_ bool) string { return "table:" + p.Table.Name.O } diff --git a/planner/core/plan_test.go b/planner/core/plan_test.go index 6db515a74af49..8b24001a97fd8 100644 --- a/planner/core/plan_test.go +++ b/planner/core/plan_test.go @@ -61,9 +61,11 @@ func (s *testPlanNormalize) TearDownSuite(c *C) { func (s *testPlanNormalize) TestNormalizedPlan(c *C) { tk := testkit.NewTestKit(c, s.store) tk.MustExec("use test") - tk.MustExec("drop table if exists t1,t2") + tk.MustExec("drop table if exists t1,t2,t3,t4") tk.MustExec("create table t1 (a int key,b int,c int, index (b));") tk.MustExec("create table t2 (a int key,b int,c int, index (b));") + tk.MustExec("create table t3 (a int key,b int) partition by hash(a) partitions 2;") + tk.MustExec("create table t4 (a int, b int, index(a)) partition by range(a) (partition p0 values less than (10),partition p1 values less than MAXVALUE);") var input []string var output []struct { SQL string @@ -165,9 +167,11 @@ func (s *testPlanNormalize) TestEncodeDecodePlan(c *C) { func (s *testPlanNormalize) TestNormalizedDigest(c *C) { tk := testkit.NewTestKit(c, s.store) tk.MustExec("use test") - tk.MustExec("drop table if exists t1,t2, bmsql_order_line, bmsql_district,bmsql_stock") + tk.MustExec("drop table if exists t1,t2,t3,t4, bmsql_order_line, bmsql_district,bmsql_stock") tk.MustExec("create table t1 (a int key,b int,c int, index (b));") tk.MustExec("create table t2 (a int key,b int,c int, index (b));") + tk.MustExec("create table t3 (a int, b int, index(a)) partition by range(a) (partition p0 values less than (10),partition p1 values less than MAXVALUE);") + tk.MustExec("create table t4 (a int key,b int) partition by hash(a) partitions 2;") tk.MustExec(`CREATE TABLE bmsql_order_line ( ol_w_id int(11) NOT NULL, ol_d_id int(11) NOT NULL, @@ -295,6 +299,16 @@ func (s *testPlanNormalize) TestNormalizedDigest(c *C) { sql2: "select count(1) as num,a from t1 where a=2 group by a union select count(1) as num,a from t1 where a=4 group by a;", isSame: true, }, + { // test for tablescan partition + sql1: "select * from t3 where a=5", + sql2: "select * from t3 where a=15", + isSame: true, + }, + { // test for point get partition + sql1: "select * from t4 where a=4", + sql2: "select * from t4 where a=30", + isSame: true, + }, { sql1: `SELECT COUNT(*) AS low_stock FROM diff --git a/planner/core/point_get_plan.go b/planner/core/point_get_plan.go index 8fbc415e2cc8f..090e1d13a8fb1 100644 --- a/planner/core/point_get_plan.go +++ b/planner/core/point_get_plan.go @@ -91,7 +91,7 @@ func (p *PointGetPlan) ToPB(ctx sessionctx.Context, _ kv.StoreType) (*tipb.Execu // ExplainInfo implements Plan interface. func (p *PointGetPlan) ExplainInfo() string { - accessObject, operatorInfo := p.AccessObject(), p.OperatorInfo(false) + accessObject, operatorInfo := p.AccessObject(false), p.OperatorInfo(false) if len(operatorInfo) == 0 { return accessObject } @@ -100,7 +100,7 @@ func (p *PointGetPlan) ExplainInfo() string { // ExplainNormalizedInfo implements Plan interface. func (p *PointGetPlan) ExplainNormalizedInfo() string { - accessObject, operatorInfo := p.AccessObject(), p.OperatorInfo(true) + accessObject, operatorInfo := p.AccessObject(true), p.OperatorInfo(true) if len(operatorInfo) == 0 { return accessObject } @@ -108,12 +108,16 @@ func (p *PointGetPlan) ExplainNormalizedInfo() string { } // AccessObject implements dataAccesser interface. -func (p *PointGetPlan) AccessObject() string { +func (p *PointGetPlan) AccessObject(normalized bool) string { buffer := bytes.NewBufferString("") tblName := p.TblInfo.Name.O fmt.Fprintf(buffer, "table:%s", tblName) if p.PartitionInfo != nil { - fmt.Fprintf(buffer, ", partition:%s", p.PartitionInfo.Name.L) + if normalized { + fmt.Fprintf(buffer, ", partition:?") + } else { + fmt.Fprintf(buffer, ", partition:%s", p.PartitionInfo.Name.L) + } } if p.IndexInfo != nil { buffer.WriteString(", index:" + p.IndexInfo.Name.O + "(") @@ -248,16 +252,16 @@ func (p *BatchPointGetPlan) ToPB(ctx sessionctx.Context, _ kv.StoreType) (*tipb. // ExplainInfo implements Plan interface. func (p *BatchPointGetPlan) ExplainInfo() string { - return p.AccessObject() + ", " + p.OperatorInfo(false) + return p.AccessObject(false) + ", " + p.OperatorInfo(false) } // ExplainNormalizedInfo implements Plan interface. func (p *BatchPointGetPlan) ExplainNormalizedInfo() string { - return p.AccessObject() + ", " + p.OperatorInfo(true) + return p.AccessObject(true) + ", " + p.OperatorInfo(true) } // AccessObject implements physicalScan interface. -func (p *BatchPointGetPlan) AccessObject() string { +func (p *BatchPointGetPlan) AccessObject(_ bool) string { buffer := bytes.NewBufferString("") tblName := p.TblInfo.Name.O fmt.Fprintf(buffer, "table:%s", tblName) diff --git a/planner/core/testdata/plan_normalized_suite_in.json b/planner/core/testdata/plan_normalized_suite_in.json index 35be2bd8b28bb..c468178f2f71d 100644 --- a/planner/core/testdata/plan_normalized_suite_in.json +++ b/planner/core/testdata/plan_normalized_suite_in.json @@ -24,7 +24,12 @@ "delete from t1", "delete from t1 where a>0 and b=1 and c!=2", "create table t1_tmp (a int)", - "alter table t1_tmp add column c int" + "alter table t1_tmp add column c int", + "insert into t3 values (4,20),(30,30)", + "select * from t3 where a=4", + "select * from t3 where a=30", + "select * from t4 where a=10", + "select * from t4 where a=20" ] }, { diff --git a/planner/core/testdata/plan_normalized_suite_out.json b/planner/core/testdata/plan_normalized_suite_out.json index c4c00541842cd..065aa548b0aeb 100644 --- a/planner/core/testdata/plan_normalized_suite_out.json +++ b/planner/core/testdata/plan_normalized_suite_out.json @@ -197,6 +197,40 @@ "Plan": [ "" ] + }, + { + "SQL": "insert into t3 values (4,20),(30,30)", + "Plan": [ + "" + ] + }, + { + "SQL": "select * from t3 where a=4", + "Plan": [ + " Point_Get root table:t3, partition:?, handle:?" + ] + }, + { + "SQL": "select * from t3 where a=30", + "Plan": [ + " Point_Get root table:t3, partition:?, handle:?" + ] + }, + { + "SQL": "select * from t4 where a=10", + "Plan": [ + " IndexLookUp root ", + " ├─IndexScan cop table:t4, partition:?, index:a(a), range:[?,?], keep order:false", + " └─TableScan cop table:t4, partition:?, keep order:false" + ] + }, + { + "SQL": "select * from t4 where a=20", + "Plan": [ + " IndexLookUp root ", + " ├─IndexScan cop table:t4, partition:?, index:a(a), range:[?,?], keep order:false", + " └─TableScan cop table:t4, partition:?, keep order:false" + ] } ] }, From 1aeb928a1830a3913cdd73f31db8cd7fae2d3925 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Wed, 11 Nov 2020 10:29:48 +0800 Subject: [PATCH 086/229] executor,server: fix pessimistic "insert select for update" return malformed packet (#20584) (#20682) Signed-off-by: ti-srebot Signed-off-by: lysu --- executor/adapter.go | 2 +- server/tidb_test.go | 21 +++++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/executor/adapter.go b/executor/adapter.go index 8ba62ed47a9f4..297fdec04e06c 100644 --- a/executor/adapter.go +++ b/executor/adapter.go @@ -743,7 +743,7 @@ func (a *ExecStmt) buildExecutor() (Executor, error) { } e = executorExec.stmtExec } - a.isSelectForUpdate = b.hasLock && (!stmtCtx.InDeleteStmt && !stmtCtx.InUpdateStmt) + a.isSelectForUpdate = b.hasLock && (!stmtCtx.InDeleteStmt && !stmtCtx.InUpdateStmt && !stmtCtx.InInsertStmt) return e, nil } diff --git a/server/tidb_test.go b/server/tidb_test.go index 5b6ad75369f14..f79164132dd87 100644 --- a/server/tidb_test.go +++ b/server/tidb_test.go @@ -922,3 +922,24 @@ func (ts *tidbTestSuite) TestNullFlag(c *C) { expectFlag := uint16(tmysql.NotNullFlag | tmysql.BinaryFlag) c.Assert(dumpFlag(cols[0].Type, cols[0].Flag), Equals, expectFlag) } + +func (ts *tidbTestSuite) TestPessimisticInsertSelectForUpdate(c *C) { + qctx, err := ts.tidbdrv.OpenCtx(uint64(0), 0, uint8(tmysql.DefaultCollationID), "test", nil) + c.Assert(err, IsNil) + ctx := context.Background() + _, err = qctx.Execute(ctx, "use test;") + c.Assert(err, IsNil) + _, err = qctx.Execute(ctx, "drop table if exists t1, t2") + c.Assert(err, IsNil) + _, err = qctx.Execute(ctx, "create table t1 (id int)") + c.Assert(err, IsNil) + _, err = qctx.Execute(ctx, "create table t2 (id int)") + c.Assert(err, IsNil) + _, err = qctx.Execute(ctx, "insert into t1 select 1") + c.Assert(err, IsNil) + _, err = qctx.Execute(ctx, "begin pessimistic") + c.Assert(err, IsNil) + rs, err := qctx.Execute(ctx, "INSERT INTO t2 (id) select id from t1 where id = 1 for update") + c.Assert(err, IsNil) + c.Assert(rs, IsNil) // should be no delay +} From e05ab1b2813787c3a063108aeb253baafa3bdda3 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Wed, 11 Nov 2020 10:41:49 +0800 Subject: [PATCH 087/229] planner: add explain information for slow_query extractor (#17110) (#20753) Signed-off-by: ti-srebot Signed-off-by: crazycs520 --- executor/explainfor_test.go | 13 ++++++++++--- planner/core/memtable_predicate_extractor.go | 12 +++++++++++- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/executor/explainfor_test.go b/executor/explainfor_test.go index 337aafe459cc3..c72fbf11129a2 100644 --- a/executor/explainfor_test.go +++ b/executor/explainfor_test.go @@ -139,11 +139,11 @@ func (s *testSuite9) TestIssue11124(c *C) { } } -func (s *testSuite) TestExplainMetricTable(c *C) { +func (s *testSuite) TestExplainMemTablePredicate(c *C) { tk := testkit.NewTestKitWithInit(c, s.store) - tk.MustQuery(fmt.Sprintf("desc select * from METRICS_SCHEMA.tidb_query_duration where time >= '2019-12-23 16:10:13' and time <= '2019-12-23 16:30:13' ")).Check(testkit.Rows( + tk.MustQuery("desc select * from METRICS_SCHEMA.tidb_query_duration where time >= '2019-12-23 16:10:13' and time <= '2019-12-23 16:30:13' ").Check(testkit.Rows( "MemTableScan_5 10000.00 root table:tidb_query_duration PromQL:histogram_quantile(0.9, sum(rate(tidb_server_handle_query_duration_seconds_bucket{}[60s])) by (le,sql_type,instance)), start_time:2019-12-23 16:10:13, end_time:2019-12-23 16:30:13, step:1m0s")) - tk.MustQuery(fmt.Sprintf("desc select * from METRICS_SCHEMA.up where time >= '2019-12-23 16:10:13' and time <= '2019-12-23 16:30:13' ")).Check(testkit.Rows( + tk.MustQuery("desc select * from METRICS_SCHEMA.up where time >= '2019-12-23 16:10:13' and time <= '2019-12-23 16:30:13' ").Check(testkit.Rows( "MemTableScan_5 10000.00 root table:up PromQL:up{}, start_time:2019-12-23 16:10:13, end_time:2019-12-23 16:30:13, step:1m0s")) tk.MustQuery("desc select * from information_schema.cluster_log where time >= '2019-12-23 16:10:13' and time <= '2019-12-23 16:30:13'").Check(testkit.Rows( "MemTableScan_5 10000.00 root table:CLUSTER_LOG start_time:2019-12-23 16:10:13, end_time:2019-12-23 16:30:13")) @@ -151,6 +151,13 @@ func (s *testSuite) TestExplainMetricTable(c *C) { `MemTableScan_5 10000.00 root table:CLUSTER_LOG start_time:2019-12-23 16:10:13, end_time:2019-12-23 16:30:13, log_levels:["error","warn"]`)) tk.MustQuery("desc select * from information_schema.cluster_log where type in ('high_cpu_1','high_memory_1') and time >= '2019-12-23 16:10:13' and time <= '2019-12-23 16:30:13'").Check(testkit.Rows( `MemTableScan_5 10000.00 root table:CLUSTER_LOG start_time:2019-12-23 16:10:13, end_time:2019-12-23 16:30:13, node_types:["high_cpu_1","high_memory_1"]`)) + tk.MustQuery("desc select * from information_schema.slow_query").Check(testkit.Rows( + "MemTableScan_4 10000.00 root table:SLOW_QUERY only search in the current 'tidb-slow.log' file")) + tk.MustQuery("desc select * from information_schema.slow_query where time >= '2019-12-23 16:10:13' and time <= '2019-12-23 16:30:13'").Check(testkit.Rows( + "MemTableScan_5 10000.00 root table:SLOW_QUERY start_time:2019-12-23 16:10:13.000000, end_time:2019-12-23 16:30:13.000000")) + tk.MustExec("set @@time_zone = '+00:00';") + tk.MustQuery("desc select * from information_schema.slow_query where time >= '2019-12-23 16:10:13' and time <= '2019-12-23 16:30:13'").Check(testkit.Rows( + "MemTableScan_5 10000.00 root table:SLOW_QUERY start_time:2019-12-23 16:10:13.000000, end_time:2019-12-23 16:30:13.000000")) } type testPrepareSerialSuite struct { diff --git a/planner/core/memtable_predicate_extractor.go b/planner/core/memtable_predicate_extractor.go index 4fc28d6da6c25..c356312c44d2e 100644 --- a/planner/core/memtable_predicate_extractor.go +++ b/planner/core/memtable_predicate_extractor.go @@ -978,7 +978,17 @@ func (e *TableStorageStatsExtractor) explainInfo(p *PhysicalMemTable) string { } func (e *SlowQueryExtractor) explainInfo(p *PhysicalMemTable) string { - return "" + if e.SkipRequest { + return "skip_request: true" + } + if !e.Enable { + return fmt.Sprintf("only search in the current '%v' file", p.ctx.GetSessionVars().SlowQueryFile) + } + startTime := e.StartTime.In(p.ctx.GetSessionVars().StmtCtx.TimeZone) + endTime := e.EndTime.In(p.ctx.GetSessionVars().StmtCtx.TimeZone) + return fmt.Sprintf("start_time:%v, end_time:%v", + types.NewTime(types.FromGoTime(startTime), mysql.TypeDatetime, types.MaxFsp).String(), + types.NewTime(types.FromGoTime(endTime), mysql.TypeDatetime, types.MaxFsp).String()) } // TiFlashSystemTableExtractor is used to extract some predicates of tiflash system table. From 60bd3d718dc059aacc11dfff4c231c27012e2476 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Wed, 11 Nov 2020 10:54:18 +0800 Subject: [PATCH 088/229] util: record sqls and heap profile when memory usage is higher than 80% system memory. (#18858) (#20473) Signed-off-by: ti-srebot --- config/config.go | 70 ++++--- config/config.toml.example | 11 + util/disk/tempDir.go | 20 +- util/expensivequery/expensivequery.go | 4 + util/expensivequery/memory_usage_alarm.go | 240 ++++++++++++++++++++++ 5 files changed, 311 insertions(+), 34 deletions(-) create mode 100644 util/expensivequery/memory_usage_alarm.go diff --git a/config/config.go b/config/config.go index bb1d3daf94309..7b7c47319be30 100644 --- a/config/config.go +++ b/config/config.go @@ -371,22 +371,24 @@ type Status struct { // Performance is the performance section of the config. type Performance struct { - MaxProcs uint `toml:"max-procs" json:"max-procs"` - MaxMemory uint64 `toml:"max-memory" json:"max-memory"` - StatsLease string `toml:"stats-lease" json:"stats-lease"` - StmtCountLimit uint `toml:"stmt-count-limit" json:"stmt-count-limit"` - FeedbackProbability float64 `toml:"feedback-probability" json:"feedback-probability"` - QueryFeedbackLimit uint `toml:"query-feedback-limit" json:"query-feedback-limit"` - PseudoEstimateRatio float64 `toml:"pseudo-estimate-ratio" json:"pseudo-estimate-ratio"` - ForcePriority string `toml:"force-priority" json:"force-priority"` - BindInfoLease string `toml:"bind-info-lease" json:"bind-info-lease"` - TxnTotalSizeLimit uint64 `toml:"txn-total-size-limit" json:"txn-total-size-limit"` - TCPKeepAlive bool `toml:"tcp-keep-alive" json:"tcp-keep-alive"` - CrossJoin bool `toml:"cross-join" json:"cross-join"` - RunAutoAnalyze bool `toml:"run-auto-analyze" json:"run-auto-analyze"` - DistinctAggPushDown bool `toml:"distinct-agg-push-down" json:"agg-push-down-join"` - CommitterConcurrency int `toml:"committer-concurrency" json:"committer-concurrency"` - MaxTxnTTL uint64 `toml:"max-txn-ttl" json:"max-txn-ttl"` + MaxProcs uint `toml:"max-procs" json:"max-procs"` + MaxMemory uint64 `toml:"max-memory" json:"max-memory"` + ServerMemoryQuota uint64 `toml:"server-memory-quota" json:"server-memory-quota"` + MemoryUsageAlarmRatio float64 `toml:"memory-usage-alarm-ratio" json:"memory-usage-alarm-ratio"` + StatsLease string `toml:"stats-lease" json:"stats-lease"` + StmtCountLimit uint `toml:"stmt-count-limit" json:"stmt-count-limit"` + FeedbackProbability float64 `toml:"feedback-probability" json:"feedback-probability"` + QueryFeedbackLimit uint `toml:"query-feedback-limit" json:"query-feedback-limit"` + PseudoEstimateRatio float64 `toml:"pseudo-estimate-ratio" json:"pseudo-estimate-ratio"` + ForcePriority string `toml:"force-priority" json:"force-priority"` + BindInfoLease string `toml:"bind-info-lease" json:"bind-info-lease"` + TxnTotalSizeLimit uint64 `toml:"txn-total-size-limit" json:"txn-total-size-limit"` + TCPKeepAlive bool `toml:"tcp-keep-alive" json:"tcp-keep-alive"` + CrossJoin bool `toml:"cross-join" json:"cross-join"` + RunAutoAnalyze bool `toml:"run-auto-analyze" json:"run-auto-analyze"` + DistinctAggPushDown bool `toml:"distinct-agg-push-down" json:"agg-push-down-join"` + CommitterConcurrency int `toml:"committer-concurrency" json:"committer-concurrency"` + MaxTxnTTL uint64 `toml:"max-txn-ttl" json:"max-txn-ttl"` } // PlanCache is the PlanCache section of the config. @@ -608,21 +610,23 @@ var defaultConf = Config{ RecordQPSbyDB: false, }, Performance: Performance{ - MaxMemory: 0, - TCPKeepAlive: true, - CrossJoin: true, - StatsLease: "3s", - RunAutoAnalyze: true, - StmtCountLimit: 5000, - FeedbackProbability: 0.0, - QueryFeedbackLimit: 512, - PseudoEstimateRatio: 0.8, - ForcePriority: "NO_PRIORITY", - BindInfoLease: "3s", - TxnTotalSizeLimit: DefTxnTotalSizeLimit, - DistinctAggPushDown: false, - CommitterConcurrency: 16, - MaxTxnTTL: 10 * 60 * 1000, // 10min + MaxMemory: 0, + ServerMemoryQuota: 0, + MemoryUsageAlarmRatio: 0.8, + TCPKeepAlive: true, + CrossJoin: true, + StatsLease: "3s", + RunAutoAnalyze: true, + StmtCountLimit: 5000, + FeedbackProbability: 0.0, + QueryFeedbackLimit: 512, + PseudoEstimateRatio: 0.8, + ForcePriority: "NO_PRIORITY", + BindInfoLease: "3s", + TxnTotalSizeLimit: DefTxnTotalSizeLimit, + DistinctAggPushDown: false, + CommitterConcurrency: 16, + MaxTxnTTL: 10 * 60 * 1000, // 10min }, ProxyProtocol: ProxyProtocol{ Networks: "", @@ -862,6 +866,10 @@ func (c *Config) Valid() error { return fmt.Errorf("txn-total-size-limit should be less than %d", 10<<30) } + if c.Performance.MemoryUsageAlarmRatio > 1 || c.Performance.MemoryUsageAlarmRatio < 0 { + return fmt.Errorf("memory-usage-alarm-ratio in [Performance] must be greater than or equal to 0 and less than or equal to 1") + } + if c.StmtSummary.MaxStmtCount <= 0 { return fmt.Errorf("max-stmt-count in [stmt-summary] should be greater than 0") } diff --git a/config/config.toml.example b/config/config.toml.example index 9c527909c6dde..6556eee05ef1f 100644 --- a/config/config.toml.example +++ b/config/config.toml.example @@ -210,6 +210,17 @@ max-procs = 0 # Max memory size to use, 0 use the total usable memory in the machine. max-memory = 0 +# Memory size quota for tidb server, 0 means unlimited +server-memory-quota = 0 + +# The alarm threshold when memory usage of the tidb-server exceeds. The valid value range is greater than or equal to 0 +# and less than or equal to 1. The default value is 0.8. +# If this configuration is set to 0 or 1, it'll disable the alarm. +# Otherwise, related information will be recorded in the directory `tmp-storage-path/record`. +# Note: If the configuration `server-memory-quota` is set and larger than 0, the alarm threshold will be +# `memory-usage-alarm-ratio * server-memory-quota`; otherwise, it'll be `memory-usage-alarm-ratio * system memory size`. +memory-usage-alarm-ratio = 0.8 + # StmtCountLimit limits the max count of statement inside a transaction. stmt-count-limit = 5000 diff --git a/util/disk/tempDir.go b/util/disk/tempDir.go index 3c182c0311f67..1b05d4c47bf1a 100644 --- a/util/disk/tempDir.go +++ b/util/disk/tempDir.go @@ -32,6 +32,11 @@ var ( sf singleflight.Group ) +const ( + lockFile = "_dir.lock" + recordDir = "record" +) + // CheckAndInitTempDir check whether the temp directory is existed. // If not, initializes the temp directory. func CheckAndInitTempDir() (err error) { @@ -64,7 +69,6 @@ func InitializeTempDir() error { return err } } - lockFile := "_dir.lock" tempDirLock, err = fslock.Lock(filepath.Join(tempDir, lockFile)) if err != nil { switch err { @@ -77,17 +81,27 @@ func InitializeTempDir() error { return err } + // Create dir for MemoryUsageAlarmRecord. + _, err = os.Stat(filepath.Join(tempDir, "record")) + if err != nil && !os.IsExist(err) { + err = os.MkdirAll(filepath.Join(tempDir, "record"), 0755) + if err != nil { + return err + } + } + subDirs, err := ioutil.ReadDir(tempDir) if err != nil { return err } // If it exists others files except lock file, creates another goroutine to clean them. - if len(subDirs) > 1 { + if len(subDirs) > 2 { go func() { for _, subDir := range subDirs { // Do not remove the lock file. - if subDir.Name() == lockFile { + switch subDir.Name() { + case lockFile, recordDir: continue } err := os.RemoveAll(filepath.Join(tempDir, subDir.Name())) diff --git a/util/expensivequery/expensivequery.go b/util/expensivequery/expensivequery.go index 8ab115e900ce6..c77a3f99ddc86 100644 --- a/util/expensivequery/expensivequery.go +++ b/util/expensivequery/expensivequery.go @@ -54,6 +54,7 @@ func (eqh *Handle) Run() { ticker := time.NewTicker(tickInterval) defer ticker.Stop() sm := eqh.sm.Load().(util.SessionManager) + record := initMemoryUsageAlarmRecord() for { select { case <-ticker.C: @@ -73,6 +74,9 @@ func (eqh *Handle) Run() { } } threshold = atomic.LoadUint64(&variable.ExpensiveQueryTimeThreshold) + if record.err == nil { + record.alarm4ExcessiveMemUsage(sm) + } case <-eqh.exitCh: return } diff --git a/util/expensivequery/memory_usage_alarm.go b/util/expensivequery/memory_usage_alarm.go new file mode 100644 index 0000000000000..6824bc4a230b3 --- /dev/null +++ b/util/expensivequery/memory_usage_alarm.go @@ -0,0 +1,240 @@ +// Copyright 2020 PingCAP, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// See the License for the specific language governing permissions and +// limitations under the License. + +package expensivequery + +import ( + "fmt" + "io/ioutil" + "os" + "path/filepath" + "runtime" + rpprof "runtime/pprof" + "sort" + "strings" + "time" + + "github.com/pingcap/errors" + "github.com/pingcap/tidb/config" + "github.com/pingcap/tidb/util" + "github.com/pingcap/tidb/util/disk" + "github.com/pingcap/tidb/util/logutil" + "github.com/pingcap/tidb/util/memory" + "go.uber.org/zap" + "go.uber.org/zap/zapcore" +) + +type memoryUsageAlarm struct { + err error + isServerMemoryQuotaSet bool + serverMemoryQuota uint64 + lastCheckTime time.Time + + tmpDir string + lastLogFileName []string + lastProfileFileName [][]string // heap, goroutine +} + +func initMemoryUsageAlarmRecord() (record *memoryUsageAlarm) { + record = &memoryUsageAlarm{} + if alert := config.GetGlobalConfig().Performance.MemoryUsageAlarmRatio; alert == 0 || alert == 1 { + record.err = errors.New("close memory usage alarm recorder") + return + } + if quota := config.GetGlobalConfig().Performance.ServerMemoryQuota; quota != 0 { + record.serverMemoryQuota = quota + record.isServerMemoryQuotaSet = true + } else { + // TODO: Get the memory info in container directly. + record.serverMemoryQuota, record.err = memory.MemTotal() + if record.err != nil { + logutil.BgLogger().Error("get system total memory fail", zap.Error(record.err)) + return + } + record.isServerMemoryQuotaSet = false + } + record.lastCheckTime = time.Time{} + record.tmpDir = filepath.Join(config.GetGlobalConfig().TempStoragePath, "record") + record.lastProfileFileName = make([][]string, 2) + // Read last records + files, err := ioutil.ReadDir(record.tmpDir) + if err != nil { + return record + } + for _, f := range files { + name := filepath.Join(record.tmpDir, f.Name()) + if strings.Contains(f.Name(), "running_sql") { + record.lastLogFileName = append(record.lastLogFileName, name) + } + if strings.Contains(f.Name(), "heap") { + record.lastProfileFileName[0] = append(record.lastProfileFileName[0], name) + } + if strings.Contains(f.Name(), "goroutine") { + record.lastProfileFileName[1] = append(record.lastProfileFileName[1], name) + } + } + + return record +} + +// If Performance.ServerMemoryQuota is set, use `ServerMemoryQuota * MemoryUsageAlarmRatio` to check oom risk. +// If Performance.ServerMemoryQuota is not set, use `system total memory size * MemoryUsageAlarmRatio` to check oom risk. +func (record *memoryUsageAlarm) alarm4ExcessiveMemUsage(sm util.SessionManager) { + var memoryUsage uint64 + instanceStats := &runtime.MemStats{} + if record.isServerMemoryQuotaSet { + runtime.ReadMemStats(instanceStats) + memoryUsage = instanceStats.HeapAlloc + } else { + memoryUsage, record.err = memory.MemUsed() + if record.err != nil { + logutil.BgLogger().Error("get system memory usage fail", zap.Error(record.err)) + return + } + } + + // TODO: Consider NextGC to record SQLs. + if float64(memoryUsage) > float64(record.serverMemoryQuota)*config.GetGlobalConfig().Performance.MemoryUsageAlarmRatio { + // At least ten seconds between two recordings that memory usage is less than threshold (default 80% system memory). + // If the memory is still exceeded, only records once. + interval := time.Since(record.lastCheckTime) + record.lastCheckTime = time.Now() + if interval > 10*time.Second { + record.doRecord(memoryUsage, sm) + } + } +} + +func (record *memoryUsageAlarm) doRecord(memUsage uint64, sm util.SessionManager) { + logutil.BgLogger().Warn("the TiDB instance now takes a lot of memory, has the risk of OOM", + zap.Bool("is server-momory-quota set", record.isServerMemoryQuotaSet), + zap.Any("memory size", record.serverMemoryQuota), + zap.Any("memory usage", memUsage), + zap.Any("memory-usage-alarm-ratio", config.GetGlobalConfig().Performance.MemoryUsageAlarmRatio), + ) + + if record.err = disk.CheckAndInitTempDir(); record.err != nil { + return + } + record.recordSQLAndSummaryTable(sm) + record.recordProfile() + + tryRemove := func(filename *[]string) { + // Keep the last 5 files + for len(*filename) > 5 { + err := os.Remove((*filename)[0]) + if err != nil { + logutil.BgLogger().Error("remove temp files failed", zap.Error(err)) + return + } + *filename = (*filename)[1:] + } + } + tryRemove(&record.lastLogFileName) + for i := range record.lastProfileFileName { + tryRemove(&record.lastProfileFileName[i]) + } +} + +func (record *memoryUsageAlarm) recordSQLAndSummaryTable(sm util.SessionManager) { + processInfo := sm.ShowProcessList() + pinfo := make([]*util.ProcessInfo, 0, len(processInfo)) + for _, info := range processInfo { + if len(info.Info) != 0 { + pinfo = append(pinfo, info) + } + } + + fileName := filepath.Join(record.tmpDir, "running_sql"+record.lastCheckTime.Format(time.RFC3339)) + record.lastLogFileName = append(record.lastLogFileName, fileName) + f, err := os.Create(fileName) + if err != nil { + logutil.BgLogger().Error("create oom record file fail", zap.Error(err)) + return + } + defer func() { + err := f.Close() + if err != nil { + logutil.BgLogger().Error("close oom record file fail", zap.Error(err)) + } + }() + printTop10 := func(cmp func(i, j int) bool) { + sort.Slice(pinfo, cmp) + list := pinfo + if len(list) > 10 { + list = list[:10] + } + var buf strings.Builder + for i, info := range list { + buf.WriteString(fmt.Sprintf("SQL %v: \n", i)) + fields := genLogFields(record.lastCheckTime.Sub(info.Time), info) + for _, field := range fields { + switch field.Type { + case zapcore.StringType: + buf.WriteString(fmt.Sprintf("%v: %v", field.Key, field.String)) + case zapcore.Uint8Type, zapcore.Uint16Type, zapcore.Uint32Type, zapcore.Uint64Type: + buf.WriteString(fmt.Sprintf("%v: %v", field.Key, uint64(field.Integer))) + case zapcore.Int8Type, zapcore.Int16Type, zapcore.Int32Type, zapcore.Int64Type: + buf.WriteString(fmt.Sprintf("%v: %v", field.Key, field.Integer)) + } + buf.WriteString("\n") + } + } + buf.WriteString("\n") + _, err = f.WriteString(buf.String()) + } + + _, err = f.WriteString("The 10 SQLs with the most memory usage for OOM analysis\n") + printTop10(func(i, j int) bool { + return pinfo[i].StmtCtx.MemTracker.MaxConsumed() > pinfo[j].StmtCtx.MemTracker.MaxConsumed() + }) + + _, err = f.WriteString("The 10 SQLs with the most time usage for OOM analysis\n") + printTop10(func(i, j int) bool { + return pinfo[i].Time.Before(pinfo[j].Time) + }) + + logutil.BgLogger().Info("record SQLs with the most memory usage or time usage", zap.Any("SQLs file path", fileName)) +} + +func (record *memoryUsageAlarm) recordProfile() { + items := []struct { + name string + debug int + }{ + {name: "heap"}, + {name: "goroutine", debug: 2}, + } + for i, item := range items { + fileName := filepath.Join(record.tmpDir, item.name+record.lastCheckTime.Format(time.RFC3339)) + record.lastProfileFileName[i] = append(record.lastProfileFileName[i], fileName) + f, err := os.Create(fileName) + if err != nil { + logutil.BgLogger().Error(fmt.Sprintf("create %v profile file fail", item.name), zap.Error(err)) + return + } + defer func() { + err := f.Close() + if err != nil { + logutil.BgLogger().Error(fmt.Sprintf("close %v profile file fail", item.name), zap.Error(err)) + } + }() + p := rpprof.Lookup(item.name) + err = p.WriteTo(f, item.debug) + if err != nil { + logutil.BgLogger().Error(fmt.Sprintf("write %v profile file fail", item.name), zap.Error(err)) + return + } + logutil.BgLogger().Info(fmt.Sprintf("record %v profile successfully", item.name), zap.Any("Profile file path", fileName)) + } +} From d4112c6acee4e41a8d0ef4748cf03dd8d6fe06cd Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Wed, 11 Nov 2020 11:08:18 +0800 Subject: [PATCH 089/229] ddl, executor: add error for functional index cannot refer to an auto-increment column (#20336) (#20356) Signed-off-by: ti-srebot Signed-off-by: wjhuang2016 --- ddl/ddl_api.go | 2 +- ddl/error.go | 2 ++ ddl/generated_column.go | 11 +++++++++++ errors.toml | 5 +++++ executor/ddl_test.go | 13 +++++++++++++ 5 files changed, 32 insertions(+), 1 deletion(-) diff --git a/ddl/ddl_api.go b/ddl/ddl_api.go index 34eec4319335a..94a5d34b71105 100644 --- a/ddl/ddl_api.go +++ b/ddl/ddl_api.go @@ -3915,7 +3915,7 @@ func buildHiddenColumnInfo(ctx sessionctx.Context, t table.Table, indexPartSpeci if err = checkDependedColExist(checkDependencies, t.Cols()); err != nil { return nil, errors.Trace(err) } - if err = checkAutoIncrementRef("", colInfo.Dependences, tblInfo); err != nil { + if err = checkExpressionIndexAutoIncrement(indexName.O, colInfo.Dependences, tblInfo); err != nil { return nil, errors.Trace(err) } idxPart.Expr = nil diff --git a/ddl/error.go b/ddl/error.go index 6a63087791ada..1e3e7d5d09890 100644 --- a/ddl/error.go +++ b/ddl/error.go @@ -79,6 +79,8 @@ var ( ErrInvalidDefaultValue = terror.ClassDDL.New(mysql.ErrInvalidDefault, mysql.MySQLErrName[mysql.ErrInvalidDefault]) // ErrGeneratedColumnRefAutoInc forbids to refer generated columns to auto-increment columns . ErrGeneratedColumnRefAutoInc = terror.ClassDDL.New(mysql.ErrGeneratedColumnRefAutoInc, mysql.MySQLErrName[mysql.ErrGeneratedColumnRefAutoInc]) + // ErrExpressionIndexCanNotRefer forbids to refer expression index to auto-increment column. + ErrExpressionIndexCanNotRefer = terror.ClassDDL.New(mysql.ErrFunctionalIndexRefAutoIncrement, mysql.MySQLErrName[mysql.ErrFunctionalIndexRefAutoIncrement]) // ErrUnsupportedAddPartition returns for does not support add partitions. ErrUnsupportedAddPartition = terror.ClassDDL.New(mysql.ErrUnsupportedDDLOperation, fmt.Sprintf(mysql.MySQLErrName[mysql.ErrUnsupportedDDLOperation], "add partitions")) // ErrUnsupportedCoalescePartition returns for does not support coalesce partitions. diff --git a/ddl/generated_column.go b/ddl/generated_column.go index 0ea41d8691c2e..a7badbea426b4 100644 --- a/ddl/generated_column.go +++ b/ddl/generated_column.go @@ -309,3 +309,14 @@ func checkAutoIncrementRef(name string, dependencies map[string]struct{}, tbInfo } return nil } + +// checkExpressionIndexAutoIncrement checks if an generated column depends on an auto-increment column and raises an error if so. +func checkExpressionIndexAutoIncrement(name string, dependencies map[string]struct{}, tbInfo *model.TableInfo) error { + exists, autoIncrementColumn := infoschema.HasAutoIncrementColumn(tbInfo) + if exists { + if _, found := dependencies[autoIncrementColumn]; found { + return ErrExpressionIndexCanNotRefer.GenWithStackByArgs(name) + } + } + return nil +} diff --git a/errors.toml b/errors.toml index f1009965ddbd3..7a0611015e6ca 100644 --- a/errors.toml +++ b/errors.toml @@ -251,6 +251,11 @@ error = ''' Generated column '%s' cannot refer to auto-increment column. ''' +["ddl:3754"] +error = ''' +Functional index '%s' cannot refer to an auto-increment column +''' + ["ddl:3756"] error = ''' The primary key cannot be a functional index diff --git a/executor/ddl_test.go b/executor/ddl_test.go index bf8cbce09163d..113d88b114a8f 100644 --- a/executor/ddl_test.go +++ b/executor/ddl_test.go @@ -1404,3 +1404,16 @@ func (s *testRecoverTable) TestRenameTable(c *C) { tk.MustExec("drop database rename1") tk.MustExec("drop database rename2") } + +func (s *testSuite6) TestAutoIncrementColumnErrorMessage(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + // Test create an exist database + _, err := tk.Exec("CREATE database test") + c.Assert(err, NotNil) + + tk.MustExec("CREATE TABLE t1 (t1_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY);") + + _, err = tk.Exec("CREATE INDEX idx1 ON t1 ((t1_id + t1_id));") + c.Assert(err.Error(), Equals, ddl.ErrExpressionIndexCanNotRefer.GenWithStackByArgs("idx1").Error()) +} From 5866391c4f6b90e9e64aa1b1ea057fa02f6e0c81 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Wed, 11 Nov 2020 11:35:27 +0800 Subject: [PATCH 090/229] store/tikv: Fix the issue that context canceled error during commit RPC is not treated as undetermined error (#20857) (#20925) Signed-off-by: MyonKeminta --- store/tikv/2pc_test.go | 21 +++++++++++++++++++++ store/tikv/region_request.go | 18 +++++++++++++++++- 2 files changed, 38 insertions(+), 1 deletion(-) diff --git a/store/tikv/2pc_test.go b/store/tikv/2pc_test.go index 7b76aae28cbda..da87a42551ef4 100644 --- a/store/tikv/2pc_test.go +++ b/store/tikv/2pc_test.go @@ -239,6 +239,27 @@ func (s *testCommitterSuite) TestContextCancelRetryable(c *C) { c.Assert(kv.ErrWriteConflictInTiDB.Equal(err), IsTrue, Commentf("err: %s", err)) } +func (s *testCommitterSuite) TestContextCancelCausingUndetermined(c *C) { + // For a normal transaction, if RPC returns context.Canceled error while sending commit + // requests, the transaction should go to the undetermined state. + txn := s.begin(c) + err := txn.Set([]byte("a"), []byte("va")) + c.Assert(err, IsNil) + committer, err := newTwoPhaseCommitterWithInit(txn, 0) + c.Assert(err, IsNil) + committer.prewriteMutations(NewBackofferWithVars(context.Background(), PrewriteMaxBackoff, nil), committer.mutations) + c.Assert(err, IsNil) + + c.Assert(failpoint.Enable("github.com/pingcap/tidb/store/tikv/rpcContextCancelErr", `return(true)`), IsNil) + defer func() { + c.Assert(failpoint.Disable("github.com/pingcap/tidb/store/tikv/rpcContextCancelErr"), IsNil) + }() + + err = committer.commitMutations(NewBackofferWithVars(context.Background(), PrewriteMaxBackoff, nil), committer.mutations) + c.Assert(committer.mu.undeterminedErr, NotNil) + c.Assert(errors.Cause(err), Equals, context.Canceled) +} + func (s *testCommitterSuite) mustGetRegionID(c *C, key []byte) uint64 { loc, err := s.store.regionCache.LocateKey(NewBackofferWithVars(context.Background(), getMaxBackoff, nil), key) c.Assert(err, IsNil) diff --git a/store/tikv/region_request.go b/store/tikv/region_request.go index f8037794de009..e06264a58071b 100644 --- a/store/tikv/region_request.go +++ b/store/tikv/region_request.go @@ -407,7 +407,24 @@ func (s *RegionRequestSender) sendReqToRegion(bo *Backoffer, rpcCtx *RPCContext, } }) } + + failpoint.Inject("rpcContextCancelErr", func(val failpoint.Value) { + if val.(bool) { + ctx1, cancel := context.WithCancel(context.Background()) + cancel() + select { + case <-ctx1.Done(): + } + + ctx = ctx1 + err = ctx.Err() + resp = nil + } + }) + if err != nil { + s.rpcError = err + // Because in rpc logic, context.Cancel() will be transferred to rpcContext.Cancel error. For rpcContext cancel, // we need to retry the request. But for context cancel active, for example, limitExec gets the required rows, // we shouldn't retry the request, it will go to backoff and hang in retry logic. @@ -415,7 +432,6 @@ func (s *RegionRequestSender) sendReqToRegion(bo *Backoffer, rpcCtx *RPCContext, return nil, false, errors.Trace(ctx.Err()) } - s.rpcError = err if e := s.onSendFail(bo, rpcCtx, err); e != nil { return nil, false, errors.Trace(e) } From 2fe15a366c66bbbf6cf05a62e10d4dc6e40e817c Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Wed, 11 Nov 2020 11:47:48 +0800 Subject: [PATCH 091/229] store/tikv: Fix goroutine leak in tikv client (#20808) (#20870) Signed-off-by: MyonKeminta --- store/tikv/kv.go | 4 ++++ store/tikv/safepoint.go | 11 +++++++++++ 2 files changed, 15 insertions(+) diff --git a/store/tikv/kv.go b/store/tikv/kv.go index 3be7398c545dc..9095e0d449bdb 100644 --- a/store/tikv/kv.go +++ b/store/tikv/kv.go @@ -351,6 +351,10 @@ func (s *tikvStore) Close() error { s.txnLatches.Close() } s.regionCache.Close() + + if err := s.kv.Close(); err != nil { + return errors.Trace(err) + } return nil } diff --git a/store/tikv/safepoint.go b/store/tikv/safepoint.go index c6b119fd2af56..0e3d8de44495b 100644 --- a/store/tikv/safepoint.go +++ b/store/tikv/safepoint.go @@ -46,6 +46,7 @@ type SafePointKV interface { Put(k string, v string) error Get(k string) (string, error) GetWithPrefix(k string) ([]*mvccpb.KeyValue, error) + Close() error } // MockSafePointKV implements SafePointKV at mock test @@ -90,6 +91,11 @@ func (w *MockSafePointKV) GetWithPrefix(prefix string) ([]*mvccpb.KeyValue, erro return kvs, nil } +// Close implements the Close method for SafePointKV +func (w *MockSafePointKV) Close() error { + return nil +} + // EtcdSafePointKV implements SafePointKV at runtime type EtcdSafePointKV struct { cli *clientv3.Client @@ -140,6 +146,11 @@ func (w *EtcdSafePointKV) GetWithPrefix(k string) ([]*mvccpb.KeyValue, error) { return resp.Kvs, nil } +// Close implements the Close for SafePointKV +func (w *EtcdSafePointKV) Close() error { + return errors.Trace(w.cli.Close()) +} + func saveSafePoint(kv SafePointKV, t uint64) error { s := strconv.FormatUint(t, 10) err := kv.Put(GcSavedSafePoint, s) From 580ed02703618d4fbca41a87698b46f302c105a1 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Wed, 11 Nov 2020 12:01:13 +0800 Subject: [PATCH 092/229] expression: Support some cast functions push down to TiFlash (#20787) (#20823) Signed-off-by: ti-srebot --- expression/expr_to_pb_test.go | 94 +++++++++++++++++++ expression/expression.go | 6 +- expression/integration_test.go | 5 +- .../integration_serial_suite_out.json | 11 ++- session/bootstrap.go | 3 +- 5 files changed, 108 insertions(+), 11 deletions(-) diff --git a/expression/expr_to_pb_test.go b/expression/expr_to_pb_test.go index b208ae78a44fd..2517f0856f72a 100644 --- a/expression/expr_to_pb_test.go +++ b/expression/expr_to_pb_test.go @@ -609,6 +609,10 @@ func (s *testEvaluatorSuite) TestExprPushDownToFlash(c *C) { jsonColumn := dg.genColumn(mysql.TypeJSON, 1) intColumn := dg.genColumn(mysql.TypeLonglong, 2) + realColumn := dg.genColumn(mysql.TypeDouble, 3) + decimalColumn := dg.genColumn(mysql.TypeNewDecimal, 4) + stringColumn := dg.genColumn(mysql.TypeString, 5) + datetimeColumn := dg.genColumn(mysql.TypeDatetime, 6) function, err := NewFunction(mock.NewContext(), ast.JSONLength, types.NewFieldType(mysql.TypeLonglong), jsonColumn) c.Assert(err, IsNil) exprs = append(exprs, function) @@ -625,6 +629,96 @@ func (s *testEvaluatorSuite) TestExprPushDownToFlash(c *C) { c.Assert(err, IsNil) exprs = append(exprs, function) + // CastIntAsInt + function, err = NewFunction(mock.NewContext(), ast.Cast, types.NewFieldType(mysql.TypeLonglong), intColumn) + c.Assert(err, IsNil) + exprs = append(exprs, function) + + // CastRealAsInt + function, err = NewFunction(mock.NewContext(), ast.Cast, types.NewFieldType(mysql.TypeLonglong), realColumn) + c.Assert(err, IsNil) + exprs = append(exprs, function) + + // CastDecimalAsInt + function, err = NewFunction(mock.NewContext(), ast.Cast, types.NewFieldType(mysql.TypeLonglong), decimalColumn) + c.Assert(err, IsNil) + exprs = append(exprs, function) + + // CastStringAsInt + function, err = NewFunction(mock.NewContext(), ast.Cast, types.NewFieldType(mysql.TypeLonglong), stringColumn) + c.Assert(err, IsNil) + exprs = append(exprs, function) + + // CastTimeAsInt + function, err = NewFunction(mock.NewContext(), ast.Cast, types.NewFieldType(mysql.TypeLonglong), datetimeColumn) + c.Assert(err, IsNil) + exprs = append(exprs, function) + + // CastIntAsDecimal + function, err = NewFunction(mock.NewContext(), ast.Cast, types.NewFieldType(mysql.TypeNewDecimal), intColumn) + c.Assert(err, IsNil) + exprs = append(exprs, function) + + // CastRealAsDecimal + function, err = NewFunction(mock.NewContext(), ast.Cast, types.NewFieldType(mysql.TypeNewDecimal), realColumn) + c.Assert(err, IsNil) + exprs = append(exprs, function) + + // CastDecimalAsDecimal + function, err = NewFunction(mock.NewContext(), ast.Cast, types.NewFieldType(mysql.TypeNewDecimal), decimalColumn) + c.Assert(err, IsNil) + exprs = append(exprs, function) + + // CastStringAsDecimal + function, err = NewFunction(mock.NewContext(), ast.Cast, types.NewFieldType(mysql.TypeNewDecimal), stringColumn) + c.Assert(err, IsNil) + exprs = append(exprs, function) + + // CastTimeAsDecimal + function, err = NewFunction(mock.NewContext(), ast.Cast, types.NewFieldType(mysql.TypeNewDecimal), datetimeColumn) + c.Assert(err, IsNil) + exprs = append(exprs, function) + + // CastIntAsString + function, err = NewFunction(mock.NewContext(), ast.Cast, types.NewFieldType(mysql.TypeString), intColumn) + c.Assert(err, IsNil) + exprs = append(exprs, function) + + // CastRealAsString + function, err = NewFunction(mock.NewContext(), ast.Cast, types.NewFieldType(mysql.TypeString), realColumn) + c.Assert(err, IsNil) + exprs = append(exprs, function) + + // CastDecimalAsString + function, err = NewFunction(mock.NewContext(), ast.Cast, types.NewFieldType(mysql.TypeString), decimalColumn) + c.Assert(err, IsNil) + exprs = append(exprs, function) + + // CastStringAsString + function, err = NewFunction(mock.NewContext(), ast.Cast, types.NewFieldType(mysql.TypeString), stringColumn) + c.Assert(err, IsNil) + exprs = append(exprs, function) + + // CastIntAsTime + function, err = NewFunction(mock.NewContext(), ast.Cast, types.NewFieldType(mysql.TypeDatetime), intColumn) + c.Assert(err, IsNil) + exprs = append(exprs, function) + + // CastRealAsTime + function, err = NewFunction(mock.NewContext(), ast.Cast, types.NewFieldType(mysql.TypeDatetime), realColumn) + c.Assert(err, IsNil) + exprs = append(exprs, function) + + // CastDecimalAsTime + function, err = NewFunction(mock.NewContext(), ast.Cast, types.NewFieldType(mysql.TypeDatetime), decimalColumn) + c.Assert(err, IsNil) + exprs = append(exprs, function) + + // CastTimeAsTime + function, err = NewFunction(mock.NewContext(), ast.Cast, types.NewFieldType(mysql.TypeDatetime), datetimeColumn) + c.Assert(err, IsNil) + exprs = append(exprs, function) + canPush := CanExprsPushDown(sc, exprs, client, kv.TiFlash) c.Assert(canPush, Equals, true) diff --git a/expression/expression.go b/expression/expression.go index 7062e6fedf5d3..dd2b55b9b32c5 100644 --- a/expression/expression.go +++ b/expression/expression.go @@ -1167,7 +1167,11 @@ func scalarExprSupportedByFlash(function *ScalarFunction) bool { return true case ast.Cast: switch function.Function.PbCode() { - case tipb.ScalarFuncSig_CastIntAsDecimal: + case tipb.ScalarFuncSig_CastIntAsInt, tipb.ScalarFuncSig_CastIntAsDecimal, tipb.ScalarFuncSig_CastIntAsString, tipb.ScalarFuncSig_CastIntAsTime, + tipb.ScalarFuncSig_CastRealAsInt, tipb.ScalarFuncSig_CastRealAsDecimal, tipb.ScalarFuncSig_CastRealAsString, tipb.ScalarFuncSig_CastRealAsTime, + tipb.ScalarFuncSig_CastStringAsInt, tipb.ScalarFuncSig_CastStringAsDecimal, tipb.ScalarFuncSig_CastStringAsString, tipb.ScalarFuncSig_CastStringAsTime, + tipb.ScalarFuncSig_CastDecimalAsInt, tipb.ScalarFuncSig_CastDecimalAsDecimal, tipb.ScalarFuncSig_CastDecimalAsString, tipb.ScalarFuncSig_CastDecimalAsTime, + tipb.ScalarFuncSig_CastTimeAsInt, tipb.ScalarFuncSig_CastTimeAsDecimal, tipb.ScalarFuncSig_CastTimeAsTime: return true default: return false diff --git a/expression/integration_test.go b/expression/integration_test.go index 5a65e5b3e0b69..26db7b751eeb3 100755 --- a/expression/integration_test.go +++ b/expression/integration_test.go @@ -5139,8 +5139,7 @@ func (s *testIntegrationSuite) TestExprPushdown(c *C) { func (s *testIntegrationSuite) TestExprPushdownBlacklist(c *C) { tk := testkit.NewTestKit(c, s.store) tk.MustQuery(`select * from mysql.expr_pushdown_blacklist`).Check(testkit.Rows( - "date_add tiflash DST(daylight saving time) does not take effect in TiFlash date_add", - "cast tiflash Behavior of some corner cases(overflow, truncate etc) is different in TiFlash and TiDB")) + "date_add tiflash DST(daylight saving time) does not take effect in TiFlash date_add")) tk.MustExec("use test") tk.MustExec("drop table if exists t") @@ -5161,7 +5160,7 @@ func (s *testIntegrationSuite) TestExprPushdownBlacklist(c *C) { } tk.MustExec("insert into mysql.expr_pushdown_blacklist " + - "values('<', 'tikv,tiflash,tidb', 'for test'),('date_format', 'tikv', 'for test')") + "values('<', 'tikv,tiflash,tidb', 'for test'),('cast', 'tiflash', 'for test'),('date_format', 'tikv', 'for test')") tk.MustExec("admin reload expr_pushdown_blacklist") tk.MustExec("set @@session.tidb_isolation_read_engines = 'tiflash'") diff --git a/planner/core/testdata/integration_serial_suite_out.json b/planner/core/testdata/integration_serial_suite_out.json index 5d089b01c6322..921d3679a2525 100644 --- a/planner/core/testdata/integration_serial_suite_out.json +++ b/planner/core/testdata/integration_serial_suite_out.json @@ -21,12 +21,13 @@ { "SQL": "explain select * from t where b > 'a' order by convert(b, unsigned) limit 2", "Result": [ - "Projection_17 2.00 root test.t.a, test.t.b", + "Projection_18 2.00 root test.t.a, test.t.b", "└─TopN_8 2.00 root Column#3:asc, offset:0, count:2", - " └─Projection_18 3333.33 root test.t.a, test.t.b, cast(test.t.b, bigint(22) UNSIGNED BINARY)->Column#3", - " └─TableReader_13 3333.33 root data:Selection_12", - " └─Selection_12 3333.33 cop[tiflash] gt(test.t.b, \"a\")", - " └─TableFullScan_11 10000.00 cop[tiflash] table:t keep order:false, stats:pseudo" + " └─Projection_19 2.00 root test.t.a, test.t.b, cast(test.t.b, bigint(22) UNSIGNED BINARY)->Column#3", + " └─TableReader_14 2.00 root data:TopN_13", + " └─TopN_13 2.00 cop[tiflash] cast(test.t.b):asc, offset:0, count:2", + " └─Selection_12 3333.33 cop[tiflash] gt(test.t.b, \"a\")", + " └─TableFullScan_11 10000.00 cop[tiflash] table:t keep order:false, stats:pseudo" ] }, { diff --git a/session/bootstrap.go b/session/bootstrap.go index f7827d4527121..149a8a7355e72 100644 --- a/session/bootstrap.go +++ b/session/bootstrap.go @@ -1008,8 +1008,7 @@ func upgradeToVer41(s Session, ver int64) { // writeDefaultExprPushDownBlacklist writes default expr pushdown blacklist into mysql.expr_pushdown_blacklist func writeDefaultExprPushDownBlacklist(s Session) { mustExecute(s, "INSERT HIGH_PRIORITY INTO mysql.expr_pushdown_blacklist VALUES"+ - "('date_add','tiflash', 'DST(daylight saving time) does not take effect in TiFlash date_add'),"+ - "('cast','tiflash', 'Behavior of some corner cases(overflow, truncate etc) is different in TiFlash and TiDB')") + "('date_add','tiflash', 'DST(daylight saving time) does not take effect in TiFlash date_add')") } func upgradeToVer42(s Session, ver int64) { From 0030ba3c08d85ba1c2d72b2f67e148d4bd235948 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Wed, 11 Nov 2020 12:13:04 +0800 Subject: [PATCH 093/229] test: skip TestDefaultValForAnalyze (#20815) (#20817) Signed-off-by: ti-srebot --- executor/analyze_test.go | 1 + 1 file changed, 1 insertion(+) diff --git a/executor/analyze_test.go b/executor/analyze_test.go index dea1d62373bc9..b12646a4cb279 100644 --- a/executor/analyze_test.go +++ b/executor/analyze_test.go @@ -615,6 +615,7 @@ func (s *testSuite1) TestHashInTopN(c *C) { } func (s *testSuite1) TestDefaultValForAnalyze(c *C) { + c.Skip("skip race test") tk := testkit.NewTestKit(c, s.store) tk.MustExec("drop database if exists test_default_val_for_analyze;") tk.MustExec("create database test_default_val_for_analyze;") From 38512cd364dcb920b18c25dcde964425985d0aef Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Wed, 11 Nov 2020 12:25:03 +0800 Subject: [PATCH 094/229] Dockerfile:Add curl in the image (#20694) (#20802) Signed-off-by: ti-srebot --- Dockerfile | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Dockerfile b/Dockerfile index 8ca9f24570bbb..46d7d05db347e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -40,6 +40,9 @@ RUN make # Executable image FROM alpine +RUN apk add --no-cache \ + curl + COPY --from=builder /go/src/github.com/pingcap/tidb/bin/tidb-server /tidb-server COPY --from=builder /usr/local/bin/dumb-init /usr/local/bin/dumb-init From a905ac5c0d11ed9b261e5682c9d94b45f3f58934 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Wed, 11 Nov 2020 12:37:03 +0800 Subject: [PATCH 095/229] executor: fix index merge join hangs with outer join and limit (#20602) (#20643) Signed-off-by: ti-srebot --- executor/index_lookup_merge_join.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/executor/index_lookup_merge_join.go b/executor/index_lookup_merge_join.go index 38fc9794378b7..c0283deafada5 100644 --- a/executor/index_lookup_merge_join.go +++ b/executor/index_lookup_merge_join.go @@ -533,7 +533,12 @@ func (imw *innerMergeWorker) fetchNewChunkWhenFull(ctx context.Context, task *lo } func (imw *innerMergeWorker) doMergeJoin(ctx context.Context, task *lookUpMergeJoinTask) (err error) { - chk := <-imw.joinChkResourceCh + var chk *chunk.Chunk + select { + case chk = <-imw.joinChkResourceCh: + case <-ctx.Done(): + return + } defer func() { if chk == nil { return From e0f9dc53e80f110e18ced62a449c863d32f790bd Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Wed, 11 Nov 2020 12:55:33 +0800 Subject: [PATCH 096/229] timeutil: fix unknown time zone 'posixrules' (#20560) (#20606) Signed-off-by: ti-srebot --- util/timeutil/time.go | 24 ++++++++++++++++++++++++ util/timeutil/time_test.go | 23 +++++++++++++++++++++++ 2 files changed, 47 insertions(+) diff --git a/util/timeutil/time.go b/util/timeutil/time.go index 80e859b56db32..50fc915974c01 100644 --- a/util/timeutil/time.go +++ b/util/timeutil/time.go @@ -15,6 +15,7 @@ package timeutil import ( "fmt" + "os" "path/filepath" "strings" "sync" @@ -52,6 +53,22 @@ type locCache struct { locMap map[string]*time.Location } +// inferOneStepLinkForPath only read one step link for the path, not like filepath.EvalSymlinks, which gets the +// recursive final linked file of the path. +func inferOneStepLinkForPath(path string) (string, error) { + fileInfo, err := os.Lstat(path) + if err != nil { + return path, err + } + if fileInfo.Mode()&os.ModeSymlink != 0 { + path, err = os.Readlink(path) + if err != nil { + return path, err + } + } + return path, nil +} + // InferSystemTZ reads system timezone from `TZ`, the path of the soft link of `/etc/localtime`. If both of them are failed, system timezone will be set to `UTC`. // It is exported because we need to use it during bootstrap stage. And it should be only used at that stage. func InferSystemTZ() string { @@ -64,6 +81,13 @@ func InferSystemTZ() string { case !ok: path, err1 := filepath.EvalSymlinks("/etc/localtime") if err1 == nil { + if strings.Index(path, "posixrules") != -1 { + path, err1 = inferOneStepLinkForPath("/etc/localtime") + if err1 != nil { + logutil.BgLogger().Error("locate timezone files failed", zap.Error(err1)) + return "" + } + } name, err2 := inferTZNameFromFileName(path) if err2 == nil { return name diff --git a/util/timeutil/time_test.go b/util/timeutil/time_test.go index 3aa4860c1f39a..b97bfa6fc5b2c 100644 --- a/util/timeutil/time_test.go +++ b/util/timeutil/time_test.go @@ -19,6 +19,8 @@ package timeutil import ( "os" + "path/filepath" + "strings" "testing" . "github.com/pingcap/check" @@ -64,3 +66,24 @@ func (s *testTimeSuite) TestLocal(c *C) { c.Assert(loc.String(), Equals, "UTC") os.Unsetenv("TZ") } + +func (s *testTimeSuite) TestInferOneStepLinkForPath(c *C) { + os.Remove("/tmp/testlink1") + os.Remove("/tmp/testlink2") + os.Remove("/tmp/testlink3") + var link2, link3 string + var err error + var link1 *os.File + link1, err = os.Create("/tmp/testlink1") + c.Assert(err, IsNil) + err = os.Symlink(link1.Name(), "/tmp/testlink2") + c.Assert(err, IsNil) + err = os.Symlink("/tmp/testlink2", "/tmp/testlink3") + c.Assert(err, IsNil) + link2, err = inferOneStepLinkForPath("/tmp/testlink3") + c.Assert(err, IsNil) + c.Assert(link2, Equals, "/tmp/testlink2") + link3, err = filepath.EvalSymlinks("/tmp/testlink3") + c.Assert(err, IsNil) + c.Assert(strings.Index(link3, link1.Name()), Not(Equals), -1) +} From 2d3c9cc70016cf9312114ab6310b3950165794eb Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Wed, 11 Nov 2020 13:19:33 +0800 Subject: [PATCH 097/229] config: add GOGC under performance section (#20872) (#20922) --- config/config.go | 2 ++ config/config.toml.example | 5 +++++ tidb-server/main.go | 2 ++ util/gogc.go | 3 +++ 4 files changed, 12 insertions(+) diff --git a/config/config.go b/config/config.go index 7b7c47319be30..a7e2c4fb85c63 100644 --- a/config/config.go +++ b/config/config.go @@ -389,6 +389,7 @@ type Performance struct { DistinctAggPushDown bool `toml:"distinct-agg-push-down" json:"agg-push-down-join"` CommitterConcurrency int `toml:"committer-concurrency" json:"committer-concurrency"` MaxTxnTTL uint64 `toml:"max-txn-ttl" json:"max-txn-ttl"` + GOGC int `toml:"gogc" json:"gogc"` } // PlanCache is the PlanCache section of the config. @@ -627,6 +628,7 @@ var defaultConf = Config{ DistinctAggPushDown: false, CommitterConcurrency: 16, MaxTxnTTL: 10 * 60 * 1000, // 10min + GOGC: 100, }, ProxyProtocol: ProxyProtocol{ Networks: "", diff --git a/config/config.toml.example b/config/config.toml.example index 6556eee05ef1f..27de8e54831ca 100644 --- a/config/config.toml.example +++ b/config/config.toml.example @@ -269,6 +269,11 @@ committer-concurrency = 16 # max lifetime of transaction ttl manager. max-txn-ttl = 600000 +# The Go GC trigger factor, you can get more information about it at https://golang.org/pkg/runtime. +# If you encounter OOM when executing large query, you can decrease this value to trigger GC earlier. +# If you find the CPU used by GC is too high or GC is too frequent and impact your business you can increase this value. +gogc = 100 + [proxy-protocol] # PROXY protocol acceptable client networks. # Empty string means disable PROXY protocol, * means all networks. diff --git a/tidb-server/main.go b/tidb-server/main.go index f309173ff2c1d..2b5b5241ca495 100644 --- a/tidb-server/main.go +++ b/tidb-server/main.go @@ -512,6 +512,8 @@ func setGlobalVars() { runtime.GOMAXPROCS(int(cfg.Performance.MaxProcs)) metrics.MaxProcs.Set(float64(runtime.GOMAXPROCS(0))) + util.SetGOGC(cfg.Performance.GOGC) + ddlLeaseDuration := parseDuration(cfg.Lease) session.SetSchemaLease(ddlLeaseDuration) statsLeaseDuration := parseDuration(cfg.Performance.StatsLease) diff --git a/util/gogc.go b/util/gogc.go index 3d49112825901..67d69a476848b 100644 --- a/util/gogc.go +++ b/util/gogc.go @@ -34,6 +34,9 @@ func init() { // SetGOGC update GOGC and related metrics. func SetGOGC(val int) { + if val <= 0 { + val = 100 + } debug.SetGCPercent(val) metrics.GOGC.Set(float64(val)) atomic.StoreInt64(&gogcValue, int64(val)) From 61b5a1afed5baebcae52db6451e5fff90214163c Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Wed, 11 Nov 2020 13:32:00 +0800 Subject: [PATCH 098/229] types: fix incompatible result of `DATE_ADD()` (#19880) (#20628) --- expression/integration_test.go | 32 ++++++++++++++++++++------------ types/time.go | 8 +++++--- types/time_test.go | 5 +++++ 3 files changed, 30 insertions(+), 15 deletions(-) diff --git a/expression/integration_test.go b/expression/integration_test.go index 26db7b751eeb3..8244763ccface 100755 --- a/expression/integration_test.go +++ b/expression/integration_test.go @@ -5348,8 +5348,8 @@ func (s *testIntegrationSuite) TestDatetimeMicrosecond(c *C) { testkit.Rows("2007-03-28 22:06:26")) tk.MustQuery(`select DATE_ADD('2007-03-28 22:08:28',INTERVAL "-2.2" HOUR_SECOND);`).Check( testkit.Rows("2007-03-28 22:06:26")) - // tk.MustQuery(`select DATE_ADD('2007-03-28 22:08:28',INTERVAL "-2.2" SECOND);`).Check( - // testkit.Rows("2007-03-28 22:08:25.800000")) + tk.MustQuery(`select DATE_ADD('2007-03-28 22:08:28',INTERVAL "-2.2" SECOND);`).Check( + testkit.Rows("2007-03-28 22:08:25.800000")) tk.MustQuery(`select DATE_ADD('2007-03-28 22:08:28',INTERVAL "-2.2" YEAR);`).Check( testkit.Rows("2005-03-28 22:08:28")) tk.MustQuery(`select DATE_ADD('2007-03-28 22:08:28',INTERVAL "-2.2" QUARTER);`).Check( @@ -5358,10 +5358,10 @@ func (s *testIntegrationSuite) TestDatetimeMicrosecond(c *C) { testkit.Rows("2007-01-28 22:08:28")) tk.MustQuery(`select DATE_ADD('2007-03-28 22:08:28',INTERVAL "-2.2" WEEK);`).Check( testkit.Rows("2007-03-14 22:08:28")) - // tk.MustQuery(`select DATE_ADD('2007-03-28 22:08:28',INTERVAL "-2.2" DAY);`).Check( - // testkit.Rows("2007-03-26 22:08:28")) - // tk.MustQuery(`select DATE_ADD('2007-03-28 22:08:28',INTERVAL "-2.2" HOUR);`).Check( - // testkit.Rows("2007-03-28 20:08:28")) + tk.MustQuery(`select DATE_ADD('2007-03-28 22:08:28',INTERVAL "-2.2" DAY);`).Check( + testkit.Rows("2007-03-26 22:08:28")) + tk.MustQuery(`select DATE_ADD('2007-03-28 22:08:28',INTERVAL "-2.2" HOUR);`).Check( + testkit.Rows("2007-03-28 20:08:28")) tk.MustQuery(`select DATE_ADD('2007-03-28 22:08:28',INTERVAL "-2.2" MINUTE);`).Check( testkit.Rows("2007-03-28 22:06:28")) tk.MustQuery(`select DATE_ADD('2007-03-28 22:08:28',INTERVAL "-2.2" MICROSECOND);`).Check( @@ -5380,8 +5380,16 @@ func (s *testIntegrationSuite) TestDatetimeMicrosecond(c *C) { testkit.Rows("2007-03-28 22:06:26")) tk.MustQuery(`select DATE_ADD('2007-03-28 22:08:28',INTERVAL "-2.-2" HOUR_SECOND);`).Check( testkit.Rows("2007-03-28 22:06:26")) - // tk.MustQuery(`select DATE_ADD('2007-03-28 22:08:28',INTERVAL "-2.-2" SECOND);`).Check( - // testkit.Rows("2007-03-28 22:08:26")) + tk.MustQuery(`select DATE_ADD('2007-03-28 22:08:28',INTERVAL "-2.-2" SECOND);`).Check( + testkit.Rows("2007-03-28 22:08:26")) + tk.MustQuery(`select DATE_ADD('2007-03-28 22:08:28',INTERVAL "-2.+2" SECOND);`).Check( + testkit.Rows("2007-03-28 22:08:26")) + tk.MustQuery(`select DATE_ADD('2007-03-28 22:08:28',INTERVAL "-2.*2" SECOND);`).Check( + testkit.Rows("2007-03-28 22:08:26")) + tk.MustQuery(`select DATE_ADD('2007-03-28 22:08:28',INTERVAL "-2./2" SECOND);`).Check( + testkit.Rows("2007-03-28 22:08:26")) + tk.MustQuery(`select DATE_ADD('2007-03-28 22:08:28',INTERVAL "-2.a2" SECOND);`).Check( + testkit.Rows("2007-03-28 22:08:26")) tk.MustQuery(`select DATE_ADD('2007-03-28 22:08:28',INTERVAL "-2.-2" YEAR);`).Check( testkit.Rows("2005-03-28 22:08:28")) tk.MustQuery(`select DATE_ADD('2007-03-28 22:08:28',INTERVAL "-2.-2" QUARTER);`).Check( @@ -5390,10 +5398,10 @@ func (s *testIntegrationSuite) TestDatetimeMicrosecond(c *C) { testkit.Rows("2007-01-28 22:08:28")) tk.MustQuery(`select DATE_ADD('2007-03-28 22:08:28',INTERVAL "-2.-2" WEEK);`).Check( testkit.Rows("2007-03-14 22:08:28")) - // tk.MustQuery(`select DATE_ADD('2007-03-28 22:08:28',INTERVAL "-2.-2" DAY);`).Check( - // testkit.Rows("2007-03-26 22:08:28")) - // tk.MustQuery(`select DATE_ADD('2007-03-28 22:08:28',INTERVAL "-2.-2" HOUR);`).Check( - // testkit.Rows("2007-03-28 20:08:28")) + tk.MustQuery(`select DATE_ADD('2007-03-28 22:08:28',INTERVAL "-2.-2" DAY);`).Check( + testkit.Rows("2007-03-26 22:08:28")) + tk.MustQuery(`select DATE_ADD('2007-03-28 22:08:28',INTERVAL "-2.-2" HOUR);`).Check( + testkit.Rows("2007-03-28 20:08:28")) tk.MustQuery(`select DATE_ADD('2007-03-28 22:08:28',INTERVAL "-2.-2" MINUTE);`).Check( testkit.Rows("2007-03-28 22:06:28")) tk.MustQuery(`select DATE_ADD('2007-03-28 22:08:28',INTERVAL "-2.-2" MICROSECOND);`).Check( diff --git a/types/time.go b/types/time.go index ac9f4f17c2457..de19618b75120 100644 --- a/types/time.go +++ b/types/time.go @@ -2168,13 +2168,15 @@ func parseSingleTimeValue(unit string, format string, strictCheck bool) (int64, lf := len(format) - 1 // Has fraction part if decimalPointPos < lf { - if lf-decimalPointPos >= 6 { + dvPre := oneToSixDigitRegex.FindString(format[decimalPointPos+1:]) // the numberical prefix of the fraction part + dvPreLen := len(dvPre) + if dvPreLen >= 6 { // MySQL rounds down to 1e-6. - if dv, err = strconv.ParseInt(format[decimalPointPos+1:decimalPointPos+7], 10, 64); err != nil { + if dv, err = strconv.ParseInt(dvPre[0:6], 10, 64); err != nil { return 0, 0, 0, 0, ErrWrongValue.GenWithStackByArgs(DateTimeStr, format) } } else { - if dv, err = strconv.ParseInt(format[decimalPointPos+1:]+"000000"[:6-(lf-decimalPointPos)], 10, 64); err != nil { + if dv, err = strconv.ParseInt(dvPre[:]+"000000"[:6-dvPreLen], 10, 64); err != nil { return 0, 0, 0, 0, ErrWrongValue.GenWithStackByArgs(DateTimeStr, format) } } diff --git a/types/time_test.go b/types/time_test.go index 03249d454ae95..992b975ad5e99 100644 --- a/types/time_test.go +++ b/types/time_test.go @@ -1377,6 +1377,11 @@ func (s *testTimeSuite) TestExtractDurationValue(c *C) { format: "-3020400", failed: true, }, + { + unit: "SECOND", + format: "50.-2", + ans: "00:00:50", + }, { unit: "MONTH", format: "1", From 737fe82eba6a16e0359df7d0ac9dd1c838e796c0 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Wed, 11 Nov 2020 14:39:03 +0800 Subject: [PATCH 099/229] table: should not skip when default value is not null (#20491) (#20533) --- ddl/db_integration_test.go | 13 +++++++++++++ table/tables/tables.go | 4 ++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/ddl/db_integration_test.go b/ddl/db_integration_test.go index 6f8d7f9056ea7..6c9f270434fb4 100644 --- a/ddl/db_integration_test.go +++ b/ddl/db_integration_test.go @@ -2242,3 +2242,16 @@ func (s *testIntegrationSuite7) TestAutoIncrementTableOption(c *C) { tk.MustExec("insert into t values ();") tk.MustQuery("select * from t;").Check(testkit.Rows("12345678901234567890")) } + +func (s *testIntegrationSuite3) TestIssue20490(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test;") + tk.MustExec("create table issue20490 (a int);") + tk.MustExec("insert into issue20490(a) values(1);") + tk.MustExec("alter table issue20490 add b int not null default 1;") + tk.MustExec("insert into issue20490(a) values(2);") + tk.MustExec("alter table issue20490 modify b int null;") + tk.MustExec("insert into issue20490(a) values(3);") + + tk.MustQuery("select b from issue20490 order by a;").Check(testkit.Rows("1", "1", "")) +} diff --git a/table/tables/tables.go b/table/tables/tables.go index 019a9e781ef61..51230c2446875 100644 --- a/table/tables/tables.go +++ b/table/tables/tables.go @@ -1164,13 +1164,13 @@ func (t *TableCommon) canSkip(col *table.Column, value types.Datum) bool { // CanSkip is for these cases, we can skip the columns in encoded row: // 1. the column is included in primary key; -// 2. the column's default value is null, and the value equals to that; +// 2. the column's default value is null, and the value equals to that but has no origin default; // 3. the column is virtual generated. func CanSkip(info *model.TableInfo, col *table.Column, value types.Datum) bool { if col.IsPKHandleColumn(info) { return true } - if col.GetDefaultValue() == nil && value.IsNull() { + if col.GetDefaultValue() == nil && value.IsNull() && col.GetOriginDefaultValue() == nil { return true } if col.IsGenerated() && !col.GeneratedStored { From ffa7adf0a86541d7d1d7f707886f80b794fbf5ce Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Wed, 11 Nov 2020 17:23:00 +0800 Subject: [PATCH 100/229] types: fix datetime lower part overflow check (#19822) (#20155) --- expression/builtin_time.go | 41 +++++++++------------------------- expression/integration_test.go | 18 ++++++++++++--- types/time.go | 4 ++-- types/time_test.go | 5 +++++ 4 files changed, 33 insertions(+), 35 deletions(-) diff --git a/expression/builtin_time.go b/expression/builtin_time.go index 877ccde91d4dd..9f0efbfc592b3 100644 --- a/expression/builtin_time.go +++ b/expression/builtin_time.go @@ -2851,7 +2851,10 @@ func (du *baseDateArithmitical) add(ctx sessionctx.Context, date types.Time, int if err := handleInvalidTimeError(ctx, err); err != nil { return types.ZeroTime, true, err } + return du.addDate(ctx, date, year, month, day, nano) +} +func (du *baseDateArithmitical) addDate(ctx sessionctx.Context, date types.Time, year, month, day, nano int64) (types.Time, bool, error) { goTime, err := date.GoTime(time.UTC) if err := handleInvalidTimeError(ctx, err); err != nil { return types.ZeroTime, true, err @@ -2866,6 +2869,13 @@ func (du *baseDateArithmitical) add(ctx sessionctx.Context, date types.Time, int date.SetFsp(6) } + // fix https://github.com/pingcap/tidb/issues/11329 + if goTime.Year() == 0 { + hour, minute, second := goTime.Clock() + date.SetCoreTime(types.FromDate(0, 0, 0, hour, minute, second, goTime.Nanosecond()/1000)) + return date, false, nil + } + if goTime.Year() < 0 || goTime.Year() > 9999 { return types.ZeroTime, true, handleInvalidTimeError(ctx, types.ErrDatetimeFunctionOverflow.GenWithStackByArgs("datetime")) } @@ -2910,36 +2920,7 @@ func (du *baseDateArithmitical) sub(ctx sessionctx.Context, date types.Time, int if err := handleInvalidTimeError(ctx, err); err != nil { return types.ZeroTime, true, err } - year, month, day, nano = -year, -month, -day, -nano - - goTime, err := date.GoTime(time.Local) - if err := handleInvalidTimeError(ctx, err); err != nil { - return types.ZeroTime, true, err - } - - duration := time.Duration(nano) - goTime = goTime.Add(duration) - goTime = types.AddDate(year, month, day, goTime) - - if goTime.Nanosecond() == 0 { - date.SetFsp(0) - } else { - date.SetFsp(6) - } - - if goTime.Year() < 0 || goTime.Year() > 9999 { - return types.ZeroTime, true, handleInvalidTimeError(ctx, types.ErrDatetimeFunctionOverflow.GenWithStackByArgs("datetime")) - } - - date.SetCoreTime(types.FromGoTime(goTime)) - overflow, err := types.DateTimeIsOverflow(ctx.GetSessionVars().StmtCtx, date) - if err := handleInvalidTimeError(ctx, err); err != nil { - return types.ZeroTime, true, err - } - if overflow { - return types.ZeroTime, true, handleInvalidTimeError(ctx, types.ErrDatetimeFunctionOverflow.GenWithStackByArgs("datetime")) - } - return date, false, nil + return du.addDate(ctx, date, -year, -month, -day, -nano) } func (du *baseDateArithmitical) vecGetDateFromInt(b *baseBuiltinFunc, input *chunk.Chunk, unit string, result *chunk.Column) error { diff --git a/expression/integration_test.go b/expression/integration_test.go index 8244763ccface..86b92118dc8be 100755 --- a/expression/integration_test.go +++ b/expression/integration_test.go @@ -2229,10 +2229,7 @@ func (s *testIntegrationSuite) TestDatetimeOverflow(c *C) { "insert into t1 (d) select date_add('2000-01-01',interval 8000 year)", "insert into t1 (d) select date_sub('2000-01-01', INTERVAL 2001 YEAR)", "insert into t1 (d) select date_add('9999-12-31',interval 1 year)", - "insert into t1 (d) select date_sub('1000-01-01', INTERVAL 1 YEAR)", "insert into t1 (d) select date_add('9999-12-31',interval 1 day)", - "insert into t1 (d) select date_sub('1000-01-01', INTERVAL 1 day)", - "insert into t1 (d) select date_sub('1000-01-01', INTERVAL 1 second)", } for _, sql := range overflowSQLs { @@ -7194,3 +7191,18 @@ func (s *testIntegrationSuite) TestIssue20180(c *C) { tk.MustExec("insert into t values('b');") tk.MustQuery("select * from t where a > 1 and a = \"b\";").Check(testkit.Rows("b")) } + +func (s *testIntegrationSuite) TestIssue11645(c *C) { + defer s.cleanEnv(c) + tk := testkit.NewTestKit(c, s.store) + tk.MustQuery(`SELECT DATE_ADD('1000-01-01 00:00:00', INTERVAL -2 HOUR);`).Check(testkit.Rows("0999-12-31 22:00:00")) + tk.MustQuery(`SELECT DATE_ADD('1000-01-01 00:00:00', INTERVAL -200 HOUR);`).Check(testkit.Rows("0999-12-23 16:00:00")) + tk.MustQuery(`SELECT DATE_ADD('0001-01-01 00:00:00', INTERVAL -2 HOUR);`).Check(testkit.Rows("0000-00-00 22:00:00")) + tk.MustQuery(`SELECT DATE_ADD('0001-01-01 00:00:00', INTERVAL -25 HOUR);`).Check(testkit.Rows("0000-00-00 23:00:00")) + tk.MustQuery(`SELECT DATE_ADD('0001-01-01 00:00:00', INTERVAL -8784 HOUR);`).Check(testkit.Rows("0000-00-00 00:00:00")) + tk.MustQuery(`SELECT DATE_ADD('0001-01-01 00:00:00', INTERVAL -8785 HOUR);`).Check(testkit.Rows("")) + tk.MustQuery(`SELECT DATE_ADD('0001-01-02 00:00:00', INTERVAL -2 HOUR);`).Check(testkit.Rows("0001-01-01 22:00:00")) + tk.MustQuery(`SELECT DATE_ADD('0001-01-02 00:00:00', INTERVAL -24 HOUR);`).Check(testkit.Rows("0001-01-01 00:00:00")) + tk.MustQuery(`SELECT DATE_ADD('0001-01-02 00:00:00', INTERVAL -25 HOUR);`).Check(testkit.Rows("0000-00-00 23:00:00")) + tk.MustQuery(`SELECT DATE_ADD('0001-01-02 00:00:00', INTERVAL -8785 HOUR);`).Check(testkit.Rows("0000-00-00 23:00:00")) +} diff --git a/types/time.go b/types/time.go index de19618b75120..06f0e78ba4f0a 100644 --- a/types/time.go +++ b/types/time.go @@ -131,8 +131,8 @@ var ( ) var ( - // MinDatetime is the minimum for mysql datetime type. - MinDatetime = FromDate(1000, 1, 1, 0, 0, 0, 0) + // MinDatetime is the minimum for Golang Time type. + MinDatetime = FromDate(1, 1, 1, 0, 0, 0, 0) // MaxDatetime is the maximum for mysql datetime type. MaxDatetime = FromDate(9999, 12, 31, 23, 59, 59, 999999) diff --git a/types/time_test.go b/types/time_test.go index 992b975ad5e99..fa341370566e2 100644 --- a/types/time_test.go +++ b/types/time_test.go @@ -1708,6 +1708,11 @@ func (s *testTimeSuite) TestTimeOverflow(c *C) { {"2018.01.01", false}, {"2018.01.01 00:00:00", false}, {"2018/01/01-00:00:00", false}, + {"0999-12-31 22:00:00", false}, + {"9999-12-31 23:59:59", false}, + {"0001-01-01 00:00:00", false}, + {"0001-01-01 23:59:59", false}, + {"0000-01-01 00:00:00", true}, } for _, test := range table { From 2411352d26fb15725490391ebbcfc69ee26ad9b7 Mon Sep 17 00:00:00 2001 From: Xiaoguang Sun Date: Thu, 12 Nov 2020 12:07:54 +0800 Subject: [PATCH 101/229] server: Add table range api to http status server (#20456) (#20620) Signed-off-by: Xiaoguang Sun --- server/http_handler.go | 82 +++++++++++++++++++++++++++++++++---- server/http_handler_test.go | 40 ++++++++++++++++++ server/http_status.go | 1 + 3 files changed, 116 insertions(+), 7 deletions(-) diff --git a/server/http_handler.go b/server/http_handler.go index c99a8afd4ce94..fb7875a481665 100644 --- a/server/http_handler.go +++ b/server/http_handler.go @@ -417,6 +417,7 @@ type valueHandler struct { const ( opTableRegions = "regions" + opTableRanges = "ranges" opTableDiskUsage = "disk-usage" opTableScatter = "scatter-table" opStopTableScatter = "stop-scatter-table" @@ -521,6 +522,34 @@ type TableRegions struct { Indices []IndexRegions `json:"indices"` } +// RangeDetail contains detail information about a particular range +type RangeDetail struct { + StartKey []byte `json:"start_key"` + EndKey []byte `json:"end_key"` + StartKeyHex string `json:"start_key_hex"` + EndKeyHex string `json:"end_key_hex"` +} + +func createRangeDetail(start, end []byte) RangeDetail { + return RangeDetail{ + StartKey: start, + EndKey: end, + StartKeyHex: hex.EncodeToString(start), + EndKeyHex: hex.EncodeToString(end), + } +} + +// TableRanges is the response data for list table's ranges. +// It contains ranges list for record and indices as well as the whole table. +type TableRanges struct { + TableName string `json:"name"` + TableID int64 `json:"id"` + Range RangeDetail `json:"table"` + Record RangeDetail `json:"record"` + Index RangeDetail `json:"index"` + Indices map[string]RangeDetail `json:"indices,omitempty"` +} + // RegionMeta contains a region's peer detail type RegionMeta struct { ID uint64 `json:"region_id"` @@ -539,10 +568,9 @@ type IndexRegions struct { // RegionDetail is the response data for get region by ID // it includes indices and records detail in current region. type RegionDetail struct { - RegionID uint64 `json:"region_id"` - StartKey []byte `json:"start_key"` - EndKey []byte `json:"end_key"` - Frames []*helper.FrameItem `json:"frames"` + RangeDetail `json:",inline"` + RegionID uint64 `json:"region_id"` + Frames []*helper.FrameItem `json:"frames"` } // addTableInRange insert a table into RegionDetail @@ -964,6 +992,8 @@ func (h tableHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) { switch h.op { case opTableRegions: h.handleRegionRequest(schema, tableVal, w, req) + case opTableRanges: + h.handleRangeRequest(schema, tableVal, w, req) case opTableDiskUsage: h.handleDiskUsageRequest(tableVal, w) case opTableScatter: @@ -1219,6 +1249,45 @@ func (h tableHandler) handleRegionRequest(schema infoschema.InfoSchema, tbl tabl writeData(w, tableRegions) } +func createTableRanges(tblID int64, tblName string, indices []*model.IndexInfo) *TableRanges { + indexPrefix := tablecodec.GenTableIndexPrefix(tblID) + recordPrefix := tablecodec.GenTableRecordPrefix(tblID) + tableEnd := tablecodec.EncodeTablePrefix(tblID + 1) + ranges := &TableRanges{ + TableName: tblName, + TableID: tblID, + Range: createRangeDetail(tablecodec.EncodeTablePrefix(tblID), tableEnd), + Record: createRangeDetail(recordPrefix, tableEnd), + Index: createRangeDetail(indexPrefix, recordPrefix), + } + if len(indices) != 0 { + indexRanges := make(map[string]RangeDetail) + for _, index := range indices { + start := tablecodec.EncodeTableIndexPrefix(tblID, index.ID) + end := tablecodec.EncodeTableIndexPrefix(tblID, index.ID+1) + indexRanges[index.Name.String()] = createRangeDetail(start, end) + } + ranges.Indices = indexRanges + } + return ranges +} + +func (h tableHandler) handleRangeRequest(schema infoschema.InfoSchema, tbl table.Table, w http.ResponseWriter, req *http.Request) { + meta := tbl.Meta() + pi := meta.GetPartitionInfo() + if pi != nil { + // Partitioned table. + var data []*TableRanges + for _, def := range pi.Definitions { + data = append(data, createTableRanges(def.ID, def.Name.String(), meta.Indices)) + } + writeData(w, data) + return + } + + writeData(w, createTableRanges(meta.ID, meta.Name.String(), meta.Indices)) +} + func (h tableHandler) getRegionsByID(tbl table.Table, id int64, name string) (*TableRegions, error) { // for record startKey, endKey := tablecodec.GetTableHandleKeyRange(id) @@ -1374,9 +1443,8 @@ func (h regionHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) { // create RegionDetail from RegionFrameRange regionDetail := &RegionDetail{ - RegionID: regionID, - StartKey: region.StartKey, - EndKey: region.EndKey, + RegionID: regionID, + RangeDetail: createRangeDetail(region.StartKey, region.EndKey), } schema, err := h.schema() if err != nil { diff --git a/server/http_handler_test.go b/server/http_handler_test.go index c356da2de5dd5..3a02cfe4074a0 100644 --- a/server/http_handler_test.go +++ b/server/http_handler_test.go @@ -209,6 +209,22 @@ func (ts *HTTPHandlerTestSuite) TestRegionsAPI(c *C) { } } +func (ts *HTTPHandlerTestSuite) TestRangesAPI(c *C) { + ts.startServer(c) + defer ts.stopServer(c) + ts.prepareData(c) + resp, err := ts.fetchStatus("/tables/information_schema/SCHEMATA/ranges") + c.Assert(err, IsNil) + c.Assert(resp.StatusCode, Equals, http.StatusOK) + defer resp.Body.Close() + decoder := json.NewDecoder(resp.Body) + + var data TableRanges + err = decoder.Decode(&data) + c.Assert(err, IsNil) + c.Assert(data.TableName, Equals, "SCHEMATA") +} + func (ts *HTTPHandlerTestSuite) regionContainsTable(c *C, regionID uint64, tableID int64) bool { resp, err := ts.fetchStatus(fmt.Sprintf("/regions/%d", regionID)) c.Assert(err, IsNil) @@ -250,6 +266,30 @@ func (ts *HTTPHandlerTestSuite) TestListTableRegions(c *C) { c.Assert(err, IsNil) } +func (ts *HTTPHandlerTestSuite) TestListTableRanges(c *C) { + ts.startServer(c) + defer ts.stopServer(c) + ts.prepareData(c) + // Test list table regions with error + resp, err := ts.fetchStatus("/tables/fdsfds/aaa/ranges") + c.Assert(err, IsNil) + defer resp.Body.Close() + c.Assert(resp.StatusCode, Equals, http.StatusBadRequest) + + resp, err = ts.fetchStatus("/tables/tidb/pt/ranges") + c.Assert(err, IsNil) + defer resp.Body.Close() + + var data []*TableRanges + dec := json.NewDecoder(resp.Body) + err = dec.Decode(&data) + c.Assert(err, IsNil) + c.Assert(len(data), Equals, 3) + for i, partition := range data { + c.Assert(partition.TableName, Equals, fmt.Sprintf("p%d", i)) + } +} + func (ts *HTTPHandlerTestSuite) TestGetRegionByIDWithError(c *C) { ts.startServer(c) defer ts.stopServer(c) diff --git a/server/http_status.go b/server/http_status.go index 8e626f04d6178..3216dee53ae5c 100644 --- a/server/http_status.go +++ b/server/http_status.go @@ -139,6 +139,7 @@ func (s *Server) startHTTPServer() { if s.cfg.Store == "tikv" { // HTTP path for tikv. router.Handle("/tables/{db}/{table}/regions", tableHandler{tikvHandlerTool, opTableRegions}) + router.Handle("/tables/{db}/{table}/ranges", tableHandler{tikvHandlerTool, opTableRanges}) router.Handle("/tables/{db}/{table}/scatter", tableHandler{tikvHandlerTool, opTableScatter}) router.Handle("/tables/{db}/{table}/stop-scatter", tableHandler{tikvHandlerTool, opStopTableScatter}) router.Handle("/tables/{db}/{table}/disk-usage", tableHandler{tikvHandlerTool, opTableDiskUsage}) From e1c49878bd96e7f570e2ede14f16e655adedc325 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Thu, 12 Nov 2020 14:49:22 +0800 Subject: [PATCH 102/229] executor: stablize `TestDropStatsFromKV` (#21004) (#21012) --- executor/simple_test.go | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/executor/simple_test.go b/executor/simple_test.go index 9d15b33d7e69a..2fba543b49309 100644 --- a/executor/simple_test.go +++ b/executor/simple_test.go @@ -607,17 +607,10 @@ func (s *testSuite3) TestDropStatsFromKV(c *C) { testkit.Rows("0 16")) tk.MustQuery("select hist_id from mysql.stats_histograms where table_id = " + tblID).Check( testkit.Rows("1", "2")) - tk.MustQuery("select hist_id, bucket_id from mysql.stats_buckets where table_id = " + tblID).Check( - testkit.Rows("1 0", - "1 1", - "1 2", - "1 3", - "2 0", - "2 1", - "2 2", - "2 3")) - tk.MustQuery("select hist_id from mysql.stats_top_n where table_id = " + tblID).Check( - testkit.Rows("1", "1", "1", "1", "2", "2", "2", "2")) + ret := tk.MustQuery("select hist_id, bucket_id from mysql.stats_buckets where table_id = " + tblID) + c.Assert(len(ret.Rows()) > 0, IsTrue) + ret = tk.MustQuery("select hist_id from mysql.stats_top_n where table_id = " + tblID) + c.Assert(len(ret.Rows()) > 0, IsTrue) tk.MustExec("drop stats t") tk.MustQuery("select modify_count, count from mysql.stats_meta where table_id = " + tblID).Check( From 75e5ec668efc29f87adde3fffe4dfcacb113accf Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Thu, 12 Nov 2020 16:51:31 +0800 Subject: [PATCH 103/229] test: ignore lumberjack.v2.(*Logger).millRun in leaktest (#20935) (#20955) Signed-off-by: ti-srebot --- util/testleak/leaktest.go | 1 + 1 file changed, 1 insertion(+) diff --git a/util/testleak/leaktest.go b/util/testleak/leaktest.go index 644c2911b9854..7ca64d04e967a 100644 --- a/util/testleak/leaktest.go +++ b/util/testleak/leaktest.go @@ -56,6 +56,7 @@ func interestingGoroutines() (gs []string) { strings.Contains(stack, "created by runtime.gc") || strings.Contains(stack, "interestingGoroutines") || strings.Contains(stack, "runtime.MHeap_Scavenger") || + strings.Contains(stack, "gopkg.in/natefinch/lumberjack%2ev2.(*Logger).millRun") || // these go routines are async terminated, so they may still alive after test end, thus cause // false positive leak failures strings.Contains(stack, "google.golang.org/grpc.(*addrConn).resetTransport") || From 5abdbf4e1134e3e638404e7878b3b8a88e32ae0f Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Thu, 12 Nov 2020 17:11:54 +0800 Subject: [PATCH 104/229] planner: fix wrong argument for split aggregation (#20474) (#20712) Signed-off-by: ti-srebot --- planner/core/integration_test.go | 11 +++++++++++ planner/core/task.go | 2 +- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/planner/core/integration_test.go b/planner/core/integration_test.go index 499a628b0353c..901f9f3b6027c 100644 --- a/planner/core/integration_test.go +++ b/planner/core/integration_test.go @@ -1332,6 +1332,17 @@ func (s *testIntegrationSuite) TestIssue16935(c *C) { tk.MustQuery("SELECT * FROM t0 LEFT JOIN v0 ON TRUE WHERE v0.c0 IS NULL;") } +func (s *testIntegrationSuite) TestDistinctScalarFunctionPushDown(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t") + tk.MustExec("create table t (a int not null, b int not null, c int not null, primary key (a,c)) partition by range (c) (partition p0 values less than (5), partition p1 values less than (10))") + tk.MustExec("insert into t values(1,1,1),(2,2,2),(3,1,3),(7,1,7),(8,2,8),(9,2,9)") + tk.MustQuery("select count(distinct b+1) as col from t").Check(testkit.Rows( + "2", + )) +} + func (s *testIntegrationSerialSuite) TestExplainAnalyzePointGet(c *C) { tk := testkit.NewTestKit(c, s.store) tk.MustExec("use test") diff --git a/planner/core/task.go b/planner/core/task.go index 74c3f7b36317d..10aa66b6d8f13 100644 --- a/planner/core/task.go +++ b/planner/core/task.go @@ -1141,7 +1141,7 @@ func BuildFinalModeAggregation( // if partial agg is not cop, we must append firstrow function & schema, to output the group by // items. // maybe we can unify them sometime. - firstRow, err := aggregation.NewAggFuncDesc(sctx, ast.AggFuncFirstRow, []expression.Expression{gbyCol}, false) + firstRow, err := aggregation.NewAggFuncDesc(sctx, ast.AggFuncFirstRow, []expression.Expression{distinctArg}, false) if err != nil { panic("NewAggFuncDesc FirstRow meets error: " + err.Error()) } From 92a602bbc8177540f976a502881291348ef5bf75 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Thu, 12 Nov 2020 17:40:23 +0800 Subject: [PATCH 105/229] planner: don't push down topN above outer join when topN refer scalar subquery expression (#20099) (#20921) Signed-off-by: ti-srebot Signed-off-by: lysu --- planner/core/rule_topn_push_down.go | 2 +- .../core/testdata/integration_suite_in.json | 4 ++- .../core/testdata/integration_suite_out.json | 29 +++++++++++++++++++ .../testdata/plan_suite_unexported_in.json | 2 ++ .../testdata/plan_suite_unexported_out.json | 1 + 5 files changed, 36 insertions(+), 2 deletions(-) diff --git a/planner/core/rule_topn_push_down.go b/planner/core/rule_topn_push_down.go index d96c124ddc3eb..755c7712e5b40 100644 --- a/planner/core/rule_topn_push_down.go +++ b/planner/core/rule_topn_push_down.go @@ -147,7 +147,7 @@ func (p *LogicalJoin) pushDownTopNToChild(topN *LogicalTopN, idx int) LogicalPla for _, by := range topN.ByItems { cols := expression.ExtractColumns(by.Expr) for _, col := range cols { - if p.children[1-idx].Schema().Contains(col) { + if !p.children[idx].Schema().Contains(col) { return p.children[idx].pushDownTopN(nil) } } diff --git a/planner/core/testdata/integration_suite_in.json b/planner/core/testdata/integration_suite_in.json index b9a0be1ad4cb8..351da83bf8a83 100644 --- a/planner/core/testdata/integration_suite_in.json +++ b/planner/core/testdata/integration_suite_in.json @@ -63,7 +63,9 @@ { "name": "TestSubqueryWithTopN", "cases": [ - "desc select t1.b from t t1 where t1.b in (select t2.a from t t2 order by t1.a+t2.a limit 1)" + "desc select t1.b from t t1 where t1.b in (select t2.a from t t2 order by t1.a+t2.a limit 1)", + "desc select t1.a from t t1 order by (t1.b = 1 and exists (select 1 from t t2 where t1.b = t2.b)) limit 1", + "desc select * from (select b+b as x from t) t1, t t2 where t1.x=t2.b order by t1.x limit 1" ] }, { diff --git a/planner/core/testdata/integration_suite_out.json b/planner/core/testdata/integration_suite_out.json index 2e4790079c943..820c357327867 100644 --- a/planner/core/testdata/integration_suite_out.json +++ b/planner/core/testdata/integration_suite_out.json @@ -242,6 +242,35 @@ " └─TopN_22 1.00 cop[tikv] plus(test.t.a, test.t.a):asc, offset:0, count:1", " └─TableFullScan_21 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo" ] + }, + { + "SQL": "desc select t1.a from t t1 order by (t1.b = 1 and exists (select 1 from t t2 where t1.b = t2.b)) limit 1", + "Plan": [ + "Projection_11 1.00 root test.t.a", + "└─Projection_20 1.00 root test.t.a, test.t.b, Column#8", + " └─TopN_14 1.00 root Column#10:asc, offset:0, count:1", + " └─Projection_21 10000.00 root test.t.a, test.t.b, Column#8, and(eq(test.t.b, 1), Column#8)->Column#10", + " └─HashJoin_15 10000.00 root left outer semi join, equal:[eq(test.t.b, test.t.b)]", + " ├─TableReader_19(Build) 10000.00 root data:TableFullScan_18", + " │ └─TableFullScan_18 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo", + " └─TableReader_17(Probe) 10000.00 root data:TableFullScan_16", + " └─TableFullScan_16 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo" + ] + }, + { + "SQL": "desc select * from (select b+b as x from t) t1, t t2 where t1.x=t2.b order by t1.x limit 1", + "Plan": [ + "Projection_11 1.00 root Column#4, test.t.a, test.t.b", + "└─TopN_14 1.00 root Column#4:asc, offset:0, count:1", + " └─HashJoin_18 10000.00 root inner join, equal:[eq(test.t.b, Column#4)]", + " ├─Projection_23(Build) 8000.00 root plus(test.t.b, test.t.b)->Column#4", + " │ └─TableReader_26 8000.00 root data:Selection_25", + " │ └─Selection_25 8000.00 cop[tikv] not(isnull(plus(test.t.b, test.t.b)))", + " │ └─TableFullScan_24 10000.00 cop[tikv] table:t keep order:false, stats:pseudo", + " └─TableReader_22(Probe) 9990.00 root data:Selection_21", + " └─Selection_21 9990.00 cop[tikv] not(isnull(test.t.b))", + " └─TableFullScan_20 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo" + ] } ] }, diff --git a/planner/core/testdata/plan_suite_unexported_in.json b/planner/core/testdata/plan_suite_unexported_in.json index 41aef7bec4ccc..c9cce58b23ffe 100644 --- a/planner/core/testdata/plan_suite_unexported_in.json +++ b/planner/core/testdata/plan_suite_unexported_in.json @@ -163,6 +163,8 @@ "select (select s.a from t s where t.a = s.a) from t order by t.a limit 5", // Test TopN + Left Semi Join Apply + Proj. "select exists (select s.a from t s where t.a = s.a) from t order by t.a limit 5", + // Test TopN + Left Semi Outer Join + Proj. + "select (exists (select s.a from t s where t.a = s.a)) as x from t order by x limit 5", // Test TopN + Semi Join Apply + Proj. "select * from t where exists (select s.a from t s where t.a = s.a) order by t.a limit 5", // Test TopN + Right Join + Proj. diff --git a/planner/core/testdata/plan_suite_unexported_out.json b/planner/core/testdata/plan_suite_unexported_out.json index ed4096754cd58..90047adc595a5 100644 --- a/planner/core/testdata/plan_suite_unexported_out.json +++ b/planner/core/testdata/plan_suite_unexported_out.json @@ -136,6 +136,7 @@ "Join{DataScan(t)->Limit->DataScan(s)}(test.t.a,test.t.a)->Limit->Projection", "Join{DataScan(t)->TopN([test.t.a],0,5)->DataScan(s)}(test.t.a,test.t.a)->TopN([test.t.a],0,5)->Projection", "Join{DataScan(t)->TopN([test.t.a],0,5)->DataScan(s)}(test.t.a,test.t.a)->TopN([test.t.a],0,5)->Projection", + "Join{DataScan(t)->DataScan(s)}(test.t.a,test.t.a)->TopN([Column#25],0,5)->Projection", "Join{DataScan(t)->DataScan(s)}(test.t.a,test.t.a)->TopN([test.t.a],0,5)->Projection", "Join{DataScan(t)->DataScan(s)->TopN([test.t.a],0,5)}(test.t.a,test.t.a)->TopN([test.t.a],0,5)->Projection", "Join{DataScan(t)->DataScan(s)}(test.t.a,test.t.a)->TopN([test.t.a test.t.b],0,5)->Projection", From ee324efb5eed29f101d3ff8fc601a9a028108e5d Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Thu, 12 Nov 2020 18:44:24 +0800 Subject: [PATCH 106/229] sessionctx,store,kv: add a session variable to export last txn info (#19949) (#20696) Signed-off-by: ti-srebot Signed-off-by: zyguan --- executor/executor_test.go | 54 ++++++++++++++++++++++++++++++++ kv/kv.go | 2 ++ kv/txn.go | 7 +++++ session/session.go | 1 + sessionctx/variable/session.go | 5 ++- sessionctx/variable/sysvar.go | 1 + sessionctx/variable/tidb_vars.go | 3 ++ sessionctx/variable/varsutil.go | 6 ++++ store/tikv/txn.go | 20 ++++++++++++ 9 files changed, 98 insertions(+), 1 deletion(-) diff --git a/executor/executor_test.go b/executor/executor_test.go index af136b6ba8050..87ad96db85c8f 100644 --- a/executor/executor_test.go +++ b/executor/executor_test.go @@ -2719,6 +2719,60 @@ func (s *testSuite) TestTiDBCurrentTS(c *C) { c.Assert(terror.ErrorEqual(err, variable.ErrReadOnly), IsTrue, Commentf("err %v", err)) } +func (s *testSuite) TestTiDBLastTxnInfo(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t") + tk.MustExec("create table t (a int primary key)") + tk.MustQuery("select json_extract(@@tidb_last_txn_info, '$.start_ts'), json_extract(@@tidb_last_txn_info, '$.commit_ts')").Check(testkit.Rows("0 0")) + + tk.MustExec("insert into t values (1)") + rows1 := tk.MustQuery("select json_extract(@@tidb_last_txn_info, '$.start_ts'), json_extract(@@tidb_last_txn_info, '$.commit_ts')").Rows() + c.Assert(rows1[0][0].(string), Greater, "0") + c.Assert(rows1[0][0].(string), Less, rows1[0][1].(string)) + + tk.MustExec("begin") + tk.MustQuery("select a from t where a = 1").Check(testkit.Rows("1")) + rows2 := tk.MustQuery("select json_extract(@@tidb_last_txn_info, '$.start_ts'), json_extract(@@tidb_last_txn_info, '$.commit_ts'), @@tidb_current_ts").Rows() + tk.MustExec("commit") + rows3 := tk.MustQuery("select json_extract(@@tidb_last_txn_info, '$.start_ts'), json_extract(@@tidb_last_txn_info, '$.commit_ts')").Rows() + c.Assert(rows2[0][0], Equals, rows1[0][0]) + c.Assert(rows2[0][1], Equals, rows1[0][1]) + c.Assert(rows3[0][0], Equals, rows1[0][0]) + c.Assert(rows3[0][1], Equals, rows1[0][1]) + c.Assert(rows2[0][1], Less, rows2[0][2]) + + tk.MustExec("begin") + tk.MustExec("update t set a = a + 1 where a = 1") + rows4 := tk.MustQuery("select json_extract(@@tidb_last_txn_info, '$.start_ts'), json_extract(@@tidb_last_txn_info, '$.commit_ts'), @@tidb_current_ts").Rows() + tk.MustExec("commit") + rows5 := tk.MustQuery("select json_extract(@@tidb_last_txn_info, '$.start_ts'), json_extract(@@tidb_last_txn_info, '$.commit_ts')").Rows() + c.Assert(rows4[0][0], Equals, rows1[0][0]) + c.Assert(rows4[0][1], Equals, rows1[0][1]) + c.Assert(rows4[0][2], Equals, rows5[0][0]) + c.Assert(rows4[0][1], Less, rows4[0][2]) + c.Assert(rows4[0][2], Less, rows5[0][1]) + + tk.MustExec("begin") + tk.MustExec("update t set a = a + 1 where a = 2") + tk.MustExec("rollback") + rows6 := tk.MustQuery("select json_extract(@@tidb_last_txn_info, '$.start_ts'), json_extract(@@tidb_last_txn_info, '$.commit_ts')").Rows() + c.Assert(rows6[0][0], Equals, rows5[0][0]) + c.Assert(rows6[0][1], Equals, rows5[0][1]) + + tk.MustExec("begin optimistic") + tk.MustExec("insert into t values (2)") + _, err := tk.Exec("commit") + c.Assert(err, NotNil) + rows7 := tk.MustQuery("select json_extract(@@tidb_last_txn_info, '$.start_ts'), json_extract(@@tidb_last_txn_info, '$.commit_ts'), json_extract(@@tidb_last_txn_info, '$.error')").Rows() + c.Assert(rows7[0][0], Greater, rows5[0][0]) + c.Assert(rows7[0][1], Equals, "0") + c.Assert(strings.Contains(err.Error(), rows7[0][1].(string)), IsTrue) + + _, err = tk.Exec("set @@tidb_last_txn_info = '{}'") + c.Assert(terror.ErrorEqual(err, variable.ErrReadOnly), IsTrue, Commentf("err %v", err)) +} + func (s *testSuite) TestSelectForUpdate(c *C) { tk := testkit.NewTestKit(c, s.store) tk.MustExec("use test") diff --git a/kv/kv.go b/kv/kv.go index abf56d03e922b..04d45ac7b745f 100644 --- a/kv/kv.go +++ b/kv/kv.go @@ -65,6 +65,8 @@ const ( InfoSchema // SchemaAmender is used to amend mutations for pessimistic transactions SchemaAmender + // CommitHook is a callback function called right after the transaction gets committed + CommitHook ) // Priority value for transaction priority. diff --git a/kv/txn.go b/kv/txn.go index f62fa4d5a54bd..4592282f96f90 100644 --- a/kv/txn.go +++ b/kv/txn.go @@ -111,3 +111,10 @@ func MockCommitErrorDisable() { func IsMockCommitErrorEnable() bool { return atomic.LoadInt64(&mockCommitErrorEnable) == 1 } + +// TxnInfo is used to keep track the info of a committed transaction (mainly for diagnosis and testing) +type TxnInfo struct { + StartTS uint64 `json:"start_ts"` + CommitTS uint64 `json:"commit_ts"` + ErrMsg string `json:"error,omitempty"` +} diff --git a/session/session.go b/session/session.go index 874a6faf58ed6..e9e482253949c 100644 --- a/session/session.go +++ b/session/session.go @@ -425,6 +425,7 @@ func (s *session) doCommit(ctx context.Context) error { // Set this option for 2 phase commit to validate schema lease. s.txn.SetOption(kv.SchemaChecker, domain.NewSchemaChecker(domain.GetDomain(s), s.sessionVars.TxnCtx.SchemaVersion, physicalTableIDs)) s.txn.SetOption(kv.InfoSchema, s.sessionVars.TxnCtx.InfoSchema) + s.txn.SetOption(kv.CommitHook, func(info kv.TxnInfo, _ error) { s.sessionVars.LastTxnInfo = info }) if s.GetSessionVars().EnableAmendPessimisticTxn { s.txn.SetOption(kv.SchemaAmender, NewSchemaAmenderForTikvTxn(s)) } diff --git a/sessionctx/variable/session.go b/sessionctx/variable/session.go index f36b21288071f..a5ff5929acaf6 100644 --- a/sessionctx/variable/session.go +++ b/sessionctx/variable/session.go @@ -639,6 +639,9 @@ type SessionVars struct { // EnableAmendPessimisticTxn indicates if schema change amend is enabled for pessimistic transactions. EnableAmendPessimisticTxn bool + + // LastTxnInfo keeps track the info of last committed transaction + LastTxnInfo kv.TxnInfo } // PreparedParams contains the parameters of the current prepared statement when executing it. @@ -1181,7 +1184,7 @@ func (s *SessionVars) SetSystemVar(name string, val string) error { s.BatchCommit = TiDBOptOn(val) case TiDBDMLBatchSize: s.DMLBatchSize = tidbOptPositiveInt32(val, DefDMLBatchSize) - case TiDBCurrentTS, TiDBConfig: + case TiDBCurrentTS, TiDBLastTxnInfo, TiDBConfig: return ErrReadOnly case TiDBMaxChunkSize: s.MaxChunkSize = tidbOptPositiveInt32(val, DefMaxChunkSize) diff --git a/sessionctx/variable/sysvar.go b/sessionctx/variable/sysvar.go index 91ee906a2c110..b3a85c90f6a14 100644 --- a/sessionctx/variable/sysvar.go +++ b/sessionctx/variable/sysvar.go @@ -644,6 +644,7 @@ var defaultSysVars = []*SysVar{ {ScopeSession, TiDBBatchCommit, BoolToIntStr(DefBatchCommit)}, {ScopeSession, TiDBDMLBatchSize, strconv.Itoa(DefDMLBatchSize)}, {ScopeSession, TiDBCurrentTS, strconv.Itoa(DefCurretTS)}, + {ScopeSession, TiDBLastTxnInfo, strconv.Itoa(DefCurretTS)}, {ScopeGlobal | ScopeSession, TiDBMaxChunkSize, strconv.Itoa(DefMaxChunkSize)}, {ScopeGlobal | ScopeSession, TiDBAllowBatchCop, strconv.Itoa(DefTiDBAllowBatchCop)}, {ScopeGlobal | ScopeSession, TiDBInitChunkSize, strconv.Itoa(DefInitChunkSize)}, diff --git a/sessionctx/variable/tidb_vars.go b/sessionctx/variable/tidb_vars.go index f3254fa774abb..86d356d880932 100644 --- a/sessionctx/variable/tidb_vars.go +++ b/sessionctx/variable/tidb_vars.go @@ -68,6 +68,9 @@ const ( // It is read-only. TiDBCurrentTS = "tidb_current_ts" + // TiDBLastTxnInfo is used to get the last transaction info within the current session. + TiDBLastTxnInfo = "tidb_last_txn_info" + // tidb_config is a read-only variable that shows the config of the current server. TiDBConfig = "tidb_config" diff --git a/sessionctx/variable/varsutil.go b/sessionctx/variable/varsutil.go index b4dd91044ffa1..9856b51e0a423 100644 --- a/sessionctx/variable/varsutil.go +++ b/sessionctx/variable/varsutil.go @@ -116,6 +116,12 @@ func GetSessionOnlySysVars(s *SessionVars, key string) (string, bool, error) { switch sysVar.Name { case TiDBCurrentTS: return fmt.Sprintf("%d", s.TxnCtx.StartTS), true, nil + case TiDBLastTxnInfo: + info, err := json.Marshal(s.LastTxnInfo) + if err != nil { + return "", true, err + } + return string(info), true, nil case TiDBGeneralLog: return fmt.Sprintf("%d", atomic.LoadUint32(&ProcessGeneralLog)), true, nil case TiDBPProfSQLCPU: diff --git a/store/tikv/txn.go b/store/tikv/txn.go index 9f094ba36775a..ce737fbb54b11 100644 --- a/store/tikv/txn.go +++ b/store/tikv/txn.go @@ -85,6 +85,8 @@ type tikvTxn struct { txnInfoSchema SchemaVer // SchemaAmender is used amend pessimistic txn commit mutations for schema change schemaAmender SchemaAmender + // commitCallback is called after current transaction gets committed + commitCallback func(info kv.TxnInfo, err error) } func newTiKVTxn(store *tikvStore) (*tikvTxn, error) { @@ -243,6 +245,8 @@ func (txn *tikvTxn) SetOption(opt kv.Option, val interface{}) { txn.txnInfoSchema = val.(SchemaVer) case kv.SchemaAmender: txn.schemaAmender = val.(SchemaAmender) + case kv.CommitHook: + txn.commitCallback = val.(func(info kv.TxnInfo, err error)) } } @@ -316,6 +320,9 @@ func (txn *tikvTxn) Commit(ctx context.Context) error { // pessimistic transaction should also bypass latch. if txn.store.txnLatches == nil || txn.IsPessimistic() { err = committer.execute(ctx) + if val == nil || connID > 0 { + txn.onCommitted(err) + } logutil.Logger(ctx).Debug("[kv] txnLatches disabled, 2pc directly", zap.Error(err)) return errors.Trace(err) } @@ -334,6 +341,9 @@ func (txn *tikvTxn) Commit(ctx context.Context) error { return kv.ErrWriteConflictInTiDB.FastGenByArgs(txn.startTS) } err = committer.execute(ctx) + if val == nil || connID > 0 { + txn.onCommitted(err) + } if err == nil { lock.SetCommitTS(committer.commitTS) } @@ -371,6 +381,16 @@ func (txn *tikvTxn) rollbackPessimisticLocks() error { return txn.committer.pessimisticRollbackMutations(NewBackofferWithVars(context.Background(), cleanupMaxBackoff, txn.vars), CommitterMutations{keys: txn.lockKeys}) } +func (txn *tikvTxn) onCommitted(err error) { + if txn.commitCallback != nil { + info := kv.TxnInfo{StartTS: txn.startTS, CommitTS: txn.commitTS} + if err != nil { + info.ErrMsg = err.Error() + } + txn.commitCallback(info, err) + } +} + // lockWaitTime in ms, except that kv.LockAlwaysWait(0) means always wait lock, kv.LockNowait(-1) means nowait lock func (txn *tikvTxn) LockKeys(ctx context.Context, lockCtx *kv.LockCtx, keysInput ...kv.Key) error { txn.mu.Lock() From 5304eff26056d62da8f90c56f37d9cb502569298 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Thu, 12 Nov 2020 19:31:54 +0800 Subject: [PATCH 107/229] parser: disallow subquery without table alias (#19102) (#20367) Signed-off-by: ti-srebot --- ddl/error.go | 2 ++ errors.toml | 5 +++++ executor/executor_test.go | 28 +++++++++++++++++++++++++++- planner/core/preprocess.go | 22 +++++++++++++++------- 4 files changed, 49 insertions(+), 8 deletions(-) diff --git a/ddl/error.go b/ddl/error.go index 1e3e7d5d09890..ca78800c33e4c 100644 --- a/ddl/error.go +++ b/ddl/error.go @@ -191,6 +191,8 @@ var ( ErrFunctionalIndexOnField = terror.ClassDDL.New(mysql.ErrFunctionalIndexOnField, mysql.MySQLErrName[mysql.ErrFunctionalIndexOnField]) // ErrInvalidAutoRandom returns when auto_random is used incorrectly. ErrInvalidAutoRandom = terror.ClassDDL.New(mysql.ErrInvalidAutoRandom, mysql.MySQLErrName[mysql.ErrInvalidAutoRandom]) + // ErrDerivedMustHaveAlias returns when a sub select statement does not have a table alias. + ErrDerivedMustHaveAlias = terror.ClassDDL.New(mysql.ErrDerivedMustHaveAlias, mysql.MySQLErrName[mysql.ErrDerivedMustHaveAlias]) // ErrSequenceRunOut returns when the sequence has been run out. ErrSequenceRunOut = terror.ClassDDL.New(mysql.ErrSequenceRunOut, mysql.MySQLErrName[mysql.ErrSequenceRunOut]) diff --git a/errors.toml b/errors.toml index 7a0611015e6ca..ae7aec9aa9cd5 100644 --- a/errors.toml +++ b/errors.toml @@ -121,6 +121,11 @@ error = ''' The used table type doesn't support FULLTEXT indexes ''' +["ddl:1248"] +error = ''' +Every derived table must have its own alias +''' + ["ddl:1253"] error = ''' COLLATION '%s' is not valid for CHARACTER SET '%s' diff --git a/executor/executor_test.go b/executor/executor_test.go index 87ad96db85c8f..ff1266c2fcf7b 100644 --- a/executor/executor_test.go +++ b/executor/executor_test.go @@ -3916,7 +3916,33 @@ func (s *testSuite3) TestDoSubquery(c *C) { c.Assert(r, IsNil, Commentf("result of Do not empty")) } -func (s *testSuite3) TestTSOFail(c *C) { +func (s *testSuite3) TestSubqueryTableAlias(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec(`use test`) + tk.MustExec(`drop table if exists t`) + + tk.MustExec("set sql_mode = ''") + tk.MustGetErrCode("select a, b from (select 1 a) ``, (select 2 b) ``;", mysql.ErrDerivedMustHaveAlias) + tk.MustGetErrCode("select a, b from (select 1 a) `x`, (select 2 b) `x`;", mysql.ErrNonuniqTable) + tk.MustGetErrCode("select a, b from (select 1 a), (select 2 b);", mysql.ErrDerivedMustHaveAlias) + // ambiguous column name + tk.MustGetErrCode("select a from (select 1 a) ``, (select 2 a) ``;", mysql.ErrDerivedMustHaveAlias) + tk.MustGetErrCode("select a from (select 1 a) `x`, (select 2 a) `x`;", mysql.ErrNonuniqTable) + tk.MustGetErrCode("select x.a from (select 1 a) `x`, (select 2 a) `x`;", mysql.ErrNonuniqTable) + tk.MustGetErrCode("select a from (select 1 a), (select 2 a);", mysql.ErrDerivedMustHaveAlias) + + tk.MustExec("set sql_mode = 'oracle';") + tk.MustQuery("select a, b from (select 1 a) ``, (select 2 b) ``;").Check(testkit.Rows("1 2")) + tk.MustQuery("select a, b from (select 1 a) `x`, (select 2 b) `x`;").Check(testkit.Rows("1 2")) + tk.MustQuery("select a, b from (select 1 a), (select 2 b);").Check(testkit.Rows("1 2")) + // ambiguous column name + tk.MustGetErrCode("select a from (select 1 a) ``, (select 2 a) ``;", mysql.ErrNonUniq) + tk.MustGetErrCode("select a from (select 1 a) `x`, (select 2 a) `x`;", mysql.ErrNonUniq) + tk.MustGetErrCode("select x.a from (select 1 a) `x`, (select 2 a) `x`;", mysql.ErrNonUniq) + tk.MustGetErrCode("select a from (select 1 a), (select 2 a);", mysql.ErrNonUniq) +} + +func (s *testSerialSuite1) TestTSOFail(c *C) { tk := testkit.NewTestKit(c, s.store) tk.MustExec(`use test`) tk.MustExec(`drop table if exists t`) diff --git a/planner/core/preprocess.go b/planner/core/preprocess.go index 6cb9905aa64f0..3f4bc1a3b8796 100644 --- a/planner/core/preprocess.go +++ b/planner/core/preprocess.go @@ -188,6 +188,11 @@ func (p *preprocessor) Enter(in ast.Node) (out ast.Node, skipChildren bool) { if node.Kind == ast.BRIEKindRestore { p.flag |= inCreateOrDropTable } + case *ast.TableSource: + isModeOracle := p.ctx.GetSessionVars().SQLMode&mysql.ModeOracle != 0 + if _, ok := node.Source.(*ast.SelectStmt); ok && !isModeOracle && len(node.AsName.L) == 0 { + p.err = ddl.ErrDerivedMustHaveAlias.GenWithStackByArgs() + } default: p.flag &= ^parentIsJoin } @@ -556,13 +561,16 @@ func (p *preprocessor) checkNonUniqTableAlias(stmt *ast.Join) { p.tableAliasInJoin = append(p.tableAliasInJoin, make(map[string]interface{})) } tableAliases := p.tableAliasInJoin[len(p.tableAliasInJoin)-1] - if err := isTableAliasDuplicate(stmt.Left, tableAliases); err != nil { - p.err = err - return - } - if err := isTableAliasDuplicate(stmt.Right, tableAliases); err != nil { - p.err = err - return + isOracleMode := p.ctx.GetSessionVars().SQLMode&mysql.ModeOracle != 0 + if !isOracleMode { + if err := isTableAliasDuplicate(stmt.Left, tableAliases); err != nil { + p.err = err + return + } + if err := isTableAliasDuplicate(stmt.Right, tableAliases); err != nil { + p.err = err + return + } } p.flag |= parentIsJoin } From d4a07579cc9d791893c34591915abe360ef0ab08 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Fri, 13 Nov 2020 14:24:34 +0800 Subject: [PATCH 108/229] session: make tidb_replica_read work correctly (#20386) (#20540) Signed-off-by: qupeng --- distsql/request_builder_test.go | 56 +++++++++++++++------------- store/tikv/coprocessor.go | 2 +- store/tikv/region_cache_test.go | 6 ++- store/tikv/region_request.go | 51 ++++++++++++++++---------- store/tikv/region_request_test.go | 61 +++++++++++++++++++++++-------- store/tikv/scan.go | 2 +- store/tikv/snapshot.go | 4 +- store/tikv/tikvrpc/tikvrpc.go | 6 ++- 8 files changed, 120 insertions(+), 68 deletions(-) diff --git a/distsql/request_builder_test.go b/distsql/request_builder_test.go index dae8f3d5b61d0..03e4ab863e81e 100644 --- a/distsql/request_builder_test.go +++ b/distsql/request_builder_test.go @@ -571,32 +571,38 @@ func (s *testSuite) TestRequestBuilder6(c *C) { } func (s *testSuite) TestRequestBuilder7(c *C) { - vars := variable.NewSessionVars() - vars.SetReplicaRead(kv.ReplicaReadFollower) - - concurrency := 10 - - actual, err := (&RequestBuilder{}). - SetFromSessionVars(vars). - SetConcurrency(concurrency). - Build() - c.Assert(err, IsNil) - - expect := &kv.Request{ - Tp: 0, - StartTs: 0x0, - KeepOrder: false, - Desc: false, - Concurrency: concurrency, - IsolationLevel: 0, - Priority: 0, - NotFillCache: false, - SyncLog: false, - Streaming: false, - ReplicaRead: kv.ReplicaReadFollower, + for _, replicaRead := range []kv.ReplicaReadType{ + kv.ReplicaReadLeader, + kv.ReplicaReadFollower, + kv.ReplicaReadMixed, + } { + vars := variable.NewSessionVars() + vars.SetReplicaRead(replicaRead) + + concurrency := 10 + + actual, err := (&RequestBuilder{}). + SetFromSessionVars(vars). + SetConcurrency(concurrency). + Build() + c.Assert(err, IsNil) + + expect := &kv.Request{ + Tp: 0, + StartTs: 0x0, + KeepOrder: false, + Desc: false, + Concurrency: concurrency, + IsolationLevel: 0, + Priority: 0, + NotFillCache: false, + SyncLog: false, + Streaming: false, + ReplicaRead: replicaRead, + } + + c.Assert(actual, DeepEquals, expect) } - - c.Assert(actual, DeepEquals, expect) } func (s *testSuite) TestRequestBuilder8(c *C) { diff --git a/store/tikv/coprocessor.go b/store/tikv/coprocessor.go index 2b1b445009fd8..b0aa592c72593 100644 --- a/store/tikv/coprocessor.go +++ b/store/tikv/coprocessor.go @@ -768,7 +768,7 @@ func (worker *copIteratorWorker) handleTaskOnce(bo *Backoffer, task *copTask, ch } } - req := tikvrpc.NewReplicaReadRequest(task.cmdType, &copReq, worker.req.ReplicaRead, worker.replicaReadSeed, kvrpcpb.Context{ + req := tikvrpc.NewReplicaReadRequest(task.cmdType, &copReq, worker.req.ReplicaRead, &worker.replicaReadSeed, kvrpcpb.Context{ IsolationLevel: pbIsolationLevel(worker.req.IsolationLevel), Priority: kvPriorityToCommandPri(worker.req.Priority), NotFillCache: worker.req.NotFillCache, diff --git a/store/tikv/region_cache_test.go b/store/tikv/region_cache_test.go index 6d65ba48761ab..2f6832eaa9312 100644 --- a/store/tikv/region_cache_test.go +++ b/store/tikv/region_cache_test.go @@ -1047,6 +1047,10 @@ func (s *testRegionCacheSuite) TestFollowerMeetEpochNotMatch(c *C) { regionErr := &errorpb.Error{EpochNotMatch: &errorpb.EpochNotMatch{}} reqSend.onRegionError(s.bo, ctxFollower1, &followReqSeed, regionErr) c.Assert(followReqSeed, Equals, uint32(1)) + + regionErr = &errorpb.Error{RegionNotFound: &errorpb.RegionNotFound{}} + reqSend.onRegionError(s.bo, ctxFollower1, &followReqSeed, regionErr) + c.Assert(followReqSeed, Equals, uint32(2)) } func (s *testRegionCacheSuite) TestMixedMeetEpochNotMatch(c *C) { @@ -1112,7 +1116,7 @@ func (s *testRegionCacheSuite) TestPeersLenChange(c *C) { s.cache.OnSendFail(NewNoopBackoff(context.Background()), ctx, false, errors.New("send fail")) } -func (s *testRegionRequestSuite) TestGetRegionByIDFromCache(c *C) { +func (s *testRegionRequestToSingleStoreSuite) TestGetRegionByIDFromCache(c *C) { region, err := s.cache.LocateRegionByID(s.bo, s.region) c.Assert(err, IsNil) c.Assert(region, NotNil) diff --git a/store/tikv/region_request.go b/store/tikv/region_request.go index e06264a58071b..fbd7f1d5f75fe 100644 --- a/store/tikv/region_request.go +++ b/store/tikv/region_request.go @@ -203,6 +203,28 @@ func (s *RegionRequestSender) SendReq(bo *Backoffer, req *tikvrpc.Request, regio return resp, err } +func (s *RegionRequestSender) getRPCContext( + bo *Backoffer, + req *tikvrpc.Request, + regionID RegionVerID, + sType kv.StoreType, +) (*RPCContext, error) { + switch sType { + case kv.TiKV: + var seed uint32 + if req.ReplicaReadSeed != nil { + seed = *req.ReplicaReadSeed + } + return s.regionCache.GetTiKVRPCContext(bo, regionID, req.ReplicaReadType, seed) + case kv.TiFlash: + return s.regionCache.GetTiFlashRPCContext(bo, regionID) + case kv.TiDB: + return &RPCContext{Addr: s.storeAddr}, nil + default: + return nil, errors.Errorf("unsupported storage type: %v", sType) + } +} + // SendReqCtx sends a request to tikv server and return response and RPCCtx of this RPC. func (s *RegionRequestSender) SendReqCtx( bo *Backoffer, @@ -242,33 +264,17 @@ func (s *RegionRequestSender) SendReqCtx( } }) - var replicaRead kv.ReplicaReadType - if req.ReplicaRead { - replicaRead = kv.ReplicaReadFollower - } else { - replicaRead = kv.ReplicaReadLeader - } - seed := req.ReplicaReadSeed tryTimes := 0 for { if (tryTimes > 0) && (tryTimes%100000 == 0) { logutil.Logger(bo.ctx).Warn("retry get ", zap.Uint64("region = ", regionID.GetID()), zap.Int("times = ", tryTimes)) } - switch sType { - case kv.TiKV: - rpcCtx, err = s.regionCache.GetTiKVRPCContext(bo, regionID, replicaRead, seed) - case kv.TiFlash: - rpcCtx, err = s.regionCache.GetTiFlashRPCContext(bo, regionID) - case kv.TiDB: - rpcCtx = &RPCContext{ - Addr: s.storeAddr, - } - default: - err = errors.Errorf("unsupported storage type: %v", sType) - } + + rpcCtx, err = s.getRPCContext(bo, req, regionID, sType) if err != nil { return nil, nil, err } + failpoint.Inject("invalidCacheAndRetry", func() { // cooperate with github.com/pingcap/tidb/store/tikv/gcworker/setGcResolveMaxBackoff if c := bo.ctx.Value("injectedBackoff"); c != nil { @@ -315,7 +321,7 @@ func (s *RegionRequestSender) SendReqCtx( return nil, nil, errors.Trace(err) } if regionErr != nil { - retry, err = s.onRegionError(bo, rpcCtx, &seed, regionErr) + retry, err = s.onRegionError(bo, rpcCtx, req.ReplicaReadSeed, regionErr) if err != nil { return nil, nil, errors.Trace(err) } @@ -592,6 +598,11 @@ func (s *RegionRequestSender) onRegionError(bo *Backoffer, ctx *RPCContext, seed logutil.BgLogger().Warn("tikv reports `RaftEntryTooLarge`", zap.Stringer("ctx", ctx)) return false, errors.New(regionErr.String()) } + if regionErr.GetRegionNotFound() != nil && seed != nil { + logutil.BgLogger().Debug("tikv reports `RegionNotFound` in follow-reader", + zap.Stringer("ctx", ctx), zap.Uint32("seed", *seed)) + *seed = *seed + 1 + } // For other errors, we only drop cache here. // Because caller may need to re-split the request. logutil.BgLogger().Debug("tikv reports region failed", diff --git a/store/tikv/region_request_test.go b/store/tikv/region_request_test.go index e75b4e5c7fbab..68fcb8ec37a8a 100644 --- a/store/tikv/region_request_test.go +++ b/store/tikv/region_request_test.go @@ -34,7 +34,7 @@ import ( "google.golang.org/grpc" ) -type testRegionRequestSuite struct { +type testRegionRequestToSingleStoreSuite struct { cluster *mocktikv.Cluster store uint64 peer uint64 @@ -45,7 +45,7 @@ type testRegionRequestSuite struct { mvccStore mocktikv.MVCCStore } -type testStoreLimitSuite struct { +type testRegionRequestToThreeStoresSuite struct { cluster *mocktikv.Cluster storeIDs []uint64 peerIDs []uint64 @@ -57,10 +57,10 @@ type testStoreLimitSuite struct { mvccStore mocktikv.MVCCStore } -var _ = Suite(&testRegionRequestSuite{}) -var _ = Suite(&testStoreLimitSuite{}) +var _ = Suite(&testRegionRequestToSingleStoreSuite{}) +var _ = Suite(&testRegionRequestToThreeStoresSuite{}) -func (s *testRegionRequestSuite) SetUpTest(c *C) { +func (s *testRegionRequestToSingleStoreSuite) SetUpTest(c *C) { s.cluster = mocktikv.NewCluster() s.store, s.peer, s.region = mocktikv.BootstrapWithSingleStore(s.cluster) pdCli := &codecPDClient{mocktikv.NewPDClient(s.cluster)} @@ -71,7 +71,7 @@ func (s *testRegionRequestSuite) SetUpTest(c *C) { s.regionRequestSender = NewRegionRequestSender(s.cache, client) } -func (s *testStoreLimitSuite) SetUpTest(c *C) { +func (s *testRegionRequestToThreeStoresSuite) SetUpTest(c *C) { s.cluster = mocktikv.NewCluster() s.storeIDs, s.peerIDs, s.regionID, s.leaderPeer = mocktikv.BootstrapWithMultiStores(s.cluster, 3) pdCli := &codecPDClient{mocktikv.NewPDClient(s.cluster)} @@ -82,11 +82,11 @@ func (s *testStoreLimitSuite) SetUpTest(c *C) { s.regionRequestSender = NewRegionRequestSender(s.cache, client) } -func (s *testRegionRequestSuite) TearDownTest(c *C) { +func (s *testRegionRequestToSingleStoreSuite) TearDownTest(c *C) { s.cache.Close() } -func (s *testStoreLimitSuite) TearDownTest(c *C) { +func (s *testRegionRequestToThreeStoresSuite) TearDownTest(c *C) { s.cache.Close() } @@ -102,7 +102,36 @@ func (f *fnClient) SendRequest(ctx context.Context, addr string, req *tikvrpc.Re return f.fn(ctx, addr, req, timeout) } -func (s *testRegionRequestSuite) TestOnRegionError(c *C) { +func (s *testRegionRequestToThreeStoresSuite) TestGetRPCContext(c *C) { + // Load the bootstrapped region into the cache. + _, err := s.cache.BatchLoadRegionsFromKey(s.bo, []byte{}, 1) + c.Assert(err, IsNil) + + var seed uint32 = 0 + var regionID = RegionVerID{s.regionID, 0, 0} + + req := tikvrpc.NewReplicaReadRequest(tikvrpc.CmdGet, &kvrpcpb.GetRequest{}, kv.ReplicaReadLeader, &seed) + rpcCtx, err := s.regionRequestSender.getRPCContext(s.bo, req, regionID, kv.TiKV) + c.Assert(err, IsNil) + c.Assert(rpcCtx.Peer.Id, Equals, s.leaderPeer) + + req.ReplicaReadType = kv.ReplicaReadFollower + rpcCtx, err = s.regionRequestSender.getRPCContext(s.bo, req, regionID, kv.TiKV) + c.Assert(err, IsNil) + c.Assert(rpcCtx.Peer.Id, Not(Equals), s.leaderPeer) + + req.ReplicaReadType = kv.ReplicaReadMixed + rpcCtx, err = s.regionRequestSender.getRPCContext(s.bo, req, regionID, kv.TiKV) + c.Assert(err, IsNil) + c.Assert(rpcCtx.Peer.Id, Equals, s.leaderPeer) + + seed = 1 + rpcCtx, err = s.regionRequestSender.getRPCContext(s.bo, req, regionID, kv.TiKV) + c.Assert(err, IsNil) + c.Assert(rpcCtx.Peer.Id, Not(Equals), s.leaderPeer) +} + +func (s *testRegionRequestToSingleStoreSuite) TestOnRegionError(c *C) { req := tikvrpc.NewRequest(tikvrpc.CmdRawPut, &kvrpcpb.RawPutRequest{ Key: []byte("key"), Value: []byte("value"), @@ -131,7 +160,7 @@ func (s *testRegionRequestSuite) TestOnRegionError(c *C) { } -func (s *testStoreLimitSuite) TestStoreTokenLimit(c *C) { +func (s *testRegionRequestToThreeStoresSuite) TestStoreTokenLimit(c *C) { req := tikvrpc.NewRequest(tikvrpc.CmdPrewrite, &kvrpcpb.PrewriteRequest{}, kvrpcpb.Context{}) region, err := s.cache.LocateRegionByID(s.bo, s.regionID) c.Assert(err, IsNil) @@ -147,7 +176,7 @@ func (s *testStoreLimitSuite) TestStoreTokenLimit(c *C) { storeutil.StoreLimit.Store(oldStoreLimit) } -func (s *testRegionRequestSuite) TestOnSendFailedWithStoreRestart(c *C) { +func (s *testRegionRequestToSingleStoreSuite) TestOnSendFailedWithStoreRestart(c *C) { req := tikvrpc.NewRequest(tikvrpc.CmdRawPut, &kvrpcpb.RawPutRequest{ Key: []byte("key"), Value: []byte("value"), @@ -177,7 +206,7 @@ func (s *testRegionRequestSuite) TestOnSendFailedWithStoreRestart(c *C) { c.Assert(resp.Resp, NotNil) } -func (s *testRegionRequestSuite) TestOnSendFailedWithCloseKnownStoreThenUseNewOne(c *C) { +func (s *testRegionRequestToSingleStoreSuite) TestOnSendFailedWithCloseKnownStoreThenUseNewOne(c *C) { req := tikvrpc.NewRequest(tikvrpc.CmdRawPut, &kvrpcpb.RawPutRequest{ Key: []byte("key"), Value: []byte("value"), @@ -211,7 +240,7 @@ func (s *testRegionRequestSuite) TestOnSendFailedWithCloseKnownStoreThenUseNewOn c.Assert(resp.Resp, NotNil) } -func (s *testRegionRequestSuite) TestSendReqCtx(c *C) { +func (s *testRegionRequestToSingleStoreSuite) TestSendReqCtx(c *C) { req := tikvrpc.NewRequest(tikvrpc.CmdRawPut, &kvrpcpb.RawPutRequest{ Key: []byte("key"), Value: []byte("value"), @@ -230,7 +259,7 @@ func (s *testRegionRequestSuite) TestSendReqCtx(c *C) { c.Assert(ctx, NotNil) } -func (s *testRegionRequestSuite) TestOnSendFailedWithCancelled(c *C) { +func (s *testRegionRequestToSingleStoreSuite) TestOnSendFailedWithCancelled(c *C) { req := tikvrpc.NewRequest(tikvrpc.CmdRawPut, &kvrpcpb.RawPutRequest{ Key: []byte("key"), Value: []byte("value"), @@ -260,7 +289,7 @@ func (s *testRegionRequestSuite) TestOnSendFailedWithCancelled(c *C) { c.Assert(resp.Resp, NotNil) } -func (s *testRegionRequestSuite) TestNoReloadRegionWhenCtxCanceled(c *C) { +func (s *testRegionRequestToSingleStoreSuite) TestNoReloadRegionWhenCtxCanceled(c *C) { req := tikvrpc.NewRequest(tikvrpc.CmdRawPut, &kvrpcpb.RawPutRequest{ Key: []byte("key"), Value: []byte("value"), @@ -422,7 +451,7 @@ func (s *mockTikvGrpcServer) ReadIndex(context.Context, *kvrpcpb.ReadIndexReques return nil, errors.New("unreachable") } -func (s *testRegionRequestSuite) TestNoReloadRegionForGrpcWhenCtxCanceled(c *C) { +func (s *testRegionRequestToSingleStoreSuite) TestNoReloadRegionForGrpcWhenCtxCanceled(c *C) { // prepare a mock tikv grpc server addr := "localhost:56341" lis, err := net.Listen("tcp", addr) diff --git a/store/tikv/scan.go b/store/tikv/scan.go index b4272ac6857c0..e6afc8c081031 100644 --- a/store/tikv/scan.go +++ b/store/tikv/scan.go @@ -199,7 +199,7 @@ func (s *Scanner) getData(bo *Backoffer) error { sreq.EndKey = reqStartKey sreq.Reverse = true } - req := tikvrpc.NewReplicaReadRequest(tikvrpc.CmdScan, sreq, s.snapshot.replicaRead, s.snapshot.replicaReadSeed, pb.Context{ + req := tikvrpc.NewReplicaReadRequest(tikvrpc.CmdScan, sreq, s.snapshot.replicaRead, &s.snapshot.replicaReadSeed, pb.Context{ Priority: s.snapshot.priority, NotFillCache: s.snapshot.notFillCache, TaskId: s.snapshot.taskID, diff --git a/store/tikv/snapshot.go b/store/tikv/snapshot.go index 6e7a88ac238f4..3b0eeaf2380e7 100644 --- a/store/tikv/snapshot.go +++ b/store/tikv/snapshot.go @@ -259,7 +259,7 @@ func (s *tikvSnapshot) batchGetSingleRegion(bo *Backoffer, batch batchKeys, coll req := tikvrpc.NewReplicaReadRequest(tikvrpc.CmdBatchGet, &pb.BatchGetRequest{ Keys: pending, Version: s.version.Ver, - }, s.replicaRead, s.replicaReadSeed, pb.Context{ + }, s.replicaRead, &s.replicaReadSeed, pb.Context{ Priority: s.priority, NotFillCache: s.notFillCache, TaskId: s.taskID, @@ -385,7 +385,7 @@ func (s *tikvSnapshot) get(ctx context.Context, bo *Backoffer, k kv.Key) ([]byte &pb.GetRequest{ Key: k, Version: s.version.Ver, - }, s.replicaRead, s.replicaReadSeed, pb.Context{ + }, s.replicaRead, &s.replicaReadSeed, pb.Context{ Priority: s.priority, NotFillCache: s.notFillCache, TaskId: s.taskID, diff --git a/store/tikv/tikvrpc/tikvrpc.go b/store/tikv/tikvrpc/tikvrpc.go index 0e54aee45c495..2eac113dd5c3a 100644 --- a/store/tikv/tikvrpc/tikvrpc.go +++ b/store/tikv/tikvrpc/tikvrpc.go @@ -160,7 +160,8 @@ type Request struct { Type CmdType req interface{} kvrpcpb.Context - ReplicaReadSeed uint32 + ReplicaReadType kv.ReplicaReadType // dirrerent from `kvrpcpb.Context.ReplicaRead` + ReplicaReadSeed *uint32 // pointer to follower read seed in snapshot/coprocessor StoreTp kv.StoreType } @@ -180,9 +181,10 @@ func NewRequest(typ CmdType, pointer interface{}, ctxs ...kvrpcpb.Context) *Requ } // NewReplicaReadRequest returns new kv rpc request with replica read. -func NewReplicaReadRequest(typ CmdType, pointer interface{}, replicaReadType kv.ReplicaReadType, replicaReadSeed uint32, ctxs ...kvrpcpb.Context) *Request { +func NewReplicaReadRequest(typ CmdType, pointer interface{}, replicaReadType kv.ReplicaReadType, replicaReadSeed *uint32, ctxs ...kvrpcpb.Context) *Request { req := NewRequest(typ, pointer, ctxs...) req.ReplicaRead = replicaReadType.IsFollowerRead() + req.ReplicaReadType = replicaReadType req.ReplicaReadSeed = replicaReadSeed return req } From 2147a25b69a032d3d18dd2060208fd5b170f67c4 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Fri, 13 Nov 2020 16:15:04 +0800 Subject: [PATCH 109/229] expression: avoid unnecessary warnings/errors when folding constants in shortcut-able expressions (#19797) (#21040) Signed-off-by: ti-srebot --- expression/function_traits.go | 10 +++++++--- expression/integration_test.go | 9 +++++++++ planner/core/expression_rewriter.go | 10 ++++++++++ 3 files changed, 26 insertions(+), 3 deletions(-) diff --git a/expression/function_traits.go b/expression/function_traits.go index 0da50400e9647..27f677e90b968 100644 --- a/expression/function_traits.go +++ b/expression/function_traits.go @@ -60,9 +60,13 @@ var DisableFoldFunctions = map[string]struct{}{ // otherwise, the child functions do not fold constant. // Note: the function itself should fold constant. var TryFoldFunctions = map[string]struct{}{ - ast.If: {}, - ast.Ifnull: {}, - ast.Case: {}, + ast.If: {}, + ast.Ifnull: {}, + ast.Case: {}, + ast.LogicAnd: {}, + ast.LogicOr: {}, + ast.Coalesce: {}, + ast.Interval: {}, } // IllegalFunctions4GeneratedColumns stores functions that is illegal for generated columns. diff --git a/expression/integration_test.go b/expression/integration_test.go index 86b92118dc8be..4e1d1d3466717 100755 --- a/expression/integration_test.go +++ b/expression/integration_test.go @@ -2838,6 +2838,15 @@ func (s *testIntegrationSuite2) TestBuiltin(c *C) { tk.MustQuery("select 1 or b/0 from t") tk.MustQuery("show warnings").Check(testkit.Rows()) + tk.MustQuery("select 1 or 1/0") + tk.MustQuery("show warnings").Check(testkit.Rows()) + tk.MustQuery("select 0 and 1/0") + tk.MustQuery("show warnings").Check(testkit.Rows()) + tk.MustQuery("select COALESCE(1, 1/0)") + tk.MustQuery("show warnings").Check(testkit.Rows()) + tk.MustQuery("select interval(1,0,1,2,1/0)") + tk.MustQuery("show warnings").Check(testkit.Rows()) + tk.MustQuery("select case 2.0 when 2.0 then 3.0 when 3.0 then 2.0 end").Check(testkit.Rows("3.0")) tk.MustQuery("select case 2.0 when 3.0 then 2.0 when 4.0 then 3.0 else 5.0 end").Check(testkit.Rows("5.0")) tk.MustQuery("select case cast('2011-01-01' as date) when cast('2011-01-01' as date) then cast('2011-02-02' as date) end").Check(testkit.Rows("2011-02-02")) diff --git a/planner/core/expression_rewriter.go b/planner/core/expression_rewriter.go index 834e4c01c2c97..90cd0646cf9be 100644 --- a/planner/core/expression_rewriter.go +++ b/planner/core/expression_rewriter.go @@ -400,6 +400,7 @@ func (er *expressionRewriter) Enter(inNode ast.Node) (ast.Node, bool) { er.ctxStackAppend(er.schema.Columns[index], er.names[index]) return inNode, true case *ast.FuncCallExpr: + er.asScalar = true if _, ok := expression.DisableFoldFunctions[v.FnName.L]; ok { er.disableFoldCounter++ } @@ -407,12 +408,18 @@ func (er *expressionRewriter) Enter(inNode ast.Node) (ast.Node, bool) { er.tryFoldCounter++ } case *ast.CaseExpr: + er.asScalar = true if _, ok := expression.DisableFoldFunctions["case"]; ok { er.disableFoldCounter++ } if _, ok := expression.TryFoldFunctions["case"]; ok { er.tryFoldCounter++ } + case *ast.BinaryOperationExpr: + er.asScalar = true + if v.Op == opcode.LogicAnd || v.Op == opcode.LogicOr { + er.tryFoldCounter++ + } case *ast.SetCollationExpr: // Do nothing default: @@ -972,6 +979,9 @@ func (er *expressionRewriter) Leave(originInNode ast.Node) (retNode ast.Node, ok case *ast.UnaryOperationExpr: er.unaryOpToExpression(v) case *ast.BinaryOperationExpr: + if v.Op == opcode.LogicAnd || v.Op == opcode.LogicOr { + er.tryFoldCounter-- + } er.binaryOpToExpression(v) case *ast.BetweenExpr: er.betweenToExpression(v) From 12dd2738722f205309936c50f787fe07ea16ff1c Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Fri, 13 Nov 2020 16:42:34 +0800 Subject: [PATCH 110/229] planner: validate row expression value size for point get plan (#19924) (#20632) Signed-off-by: ti-srebot --- planner/core/point_get_plan.go | 3 +++ planner/core/point_get_plan_test.go | 20 ++++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/planner/core/point_get_plan.go b/planner/core/point_get_plan.go index 090e1d13a8fb1..3211a887230da 100644 --- a/planner/core/point_get_plan.go +++ b/planner/core/point_get_plan.go @@ -521,6 +521,9 @@ func newBatchPointGetPlan( switch x := item.(type) { case *ast.RowExpr: // The `len(values) == len(valuesParams)` should be satisfied in this mode + if len(x.Values) != len(whereColNames) { + return nil + } values = make([]types.Datum, len(x.Values)) valuesParams = make([]*driver.ParamMarkerExpr, len(x.Values)) for index, inner := range x.Values { diff --git a/planner/core/point_get_plan_test.go b/planner/core/point_get_plan_test.go index 4ac571e21569b..215f0b80037cc 100644 --- a/planner/core/point_get_plan_test.go +++ b/planner/core/point_get_plan_test.go @@ -448,3 +448,23 @@ func (s *testPointGetSuite) TestIssue19141(c *C) { tk.MustExec("delete from t19141 partition (p0) where c_int in (2,3)") // No data changed tk.MustQuery("select * from t19141 order by c_int").Check(testkit.Rows("1", "2", "3", "4")) } + +func (s *testPointGetSuite) TestSelectInMultiColumns(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk.MustExec("create table t2(a int, b int, c int, primary key(a, b, c));") + tk.MustExec("insert into t2 values (1, 1, 1), (2, 2, 2), (3, 3, 3), (4, 4, 4)") + tk.MustQuery("select * from t2 where (a, b, c) in ((1, 1, 1));").Check(testkit.Rows("1 1 1")) + + _, err := tk.Exec("select * from t2 where (a, b, c) in ((1, 1, 1, 1));") + c.Assert(err, NotNil) + c.Assert(err.Error(), Equals, "[expression:1241]Operand should contain 3 column(s)") + + _, err = tk.Exec("select * from t2 where (a, b, c) in ((1, 1, 1), (2, 2, 2, 2));") + c.Assert(err, NotNil) + c.Assert(err.Error(), Equals, "[expression:1241]Operand should contain 3 column(s)") + + _, err = tk.Exec("select * from t2 where (a, b, c) in ((1, 1), (2, 2, 2));") + c.Assert(err, NotNil) + c.Assert(err.Error(), Equals, "[expression:1241]Operand should contain 3 column(s)") +} From acb948c5d7f238a4eb84b4115e26506188987011 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Fri, 13 Nov 2020 16:55:34 +0800 Subject: [PATCH 111/229] executor: fix issue of load data statement doesn't record into slow query and statements_summary (#20713) (#20830) Signed-off-by: ti-srebot Signed-off-by: crazycs520 --- executor/insert_common.go | 4 ++- executor/load_data.go | 21 ++++++------- planner/core/initialize.go | 6 ++++ planner/core/planbuilder.go | 4 +-- server/conn.go | 55 +++++++++++++++++++++------------ server/server_test.go | 58 +++++++++++++++++++++++++++++++++++ server/tidb_test.go | 4 +++ session/session.go | 8 ++++- session/tidb.go | 45 +++++++++++++++++++++++++-- sessionctx/stmtctx/stmtctx.go | 8 ++++- util/plancodec/id.go | 7 +++++ 11 files changed, 181 insertions(+), 39 deletions(-) diff --git a/executor/insert_common.go b/executor/insert_common.go index 58d2fbc7d998f..a10c461b75c72 100644 --- a/executor/insert_common.go +++ b/executor/insert_common.go @@ -1083,7 +1083,9 @@ func (e *InsertRuntimeStat) String() string { if e.Prefetch > 0 { buf.WriteString(fmt.Sprintf("check_insert:{total_time:%v, mem_insert_time:%v, prefetch:%v", e.CheckInsertTime, e.CheckInsertTime-e.Prefetch, e.Prefetch)) if e.SnapshotRuntimeStats != nil { - buf.WriteString(fmt.Sprintf(", rpc:{%s}", e.SnapshotRuntimeStats.String())) + if rpc := e.SnapshotRuntimeStats.String(); len(rpc) > 0 { + buf.WriteString(fmt.Sprintf(", rpc:{%s}", rpc)) + } } buf.WriteString("}") } else { diff --git a/executor/load_data.go b/executor/load_data.go index 4f835f6fce1cc..8f9feec944eb0 100644 --- a/executor/load_data.go +++ b/executor/load_data.go @@ -48,17 +48,6 @@ type LoadDataExec struct { loadDataInfo *LoadDataInfo } -// NewLoadDataInfo returns a LoadDataInfo structure, and it's only used for tests now. -func NewLoadDataInfo(ctx sessionctx.Context, row []types.Datum, tbl table.Table, cols []*table.Column) *LoadDataInfo { - insertVal := &InsertValues{baseExecutor: newBaseExecutor(ctx, nil, 0), Table: tbl} - return &LoadDataInfo{ - row: row, - InsertValues: insertVal, - Table: tbl, - Ctx: ctx, - } -} - // Next implements the Executor Next interface. func (e *LoadDataExec) Next(ctx context.Context, req *chunk.Chunk) error { req.GrowAndReset(e.maxChunkSize) @@ -99,6 +88,8 @@ func (e *LoadDataExec) Open(ctx context.Context) error { if e.loadDataInfo.insertColumns != nil { e.loadDataInfo.initEvalBuffer() } + // Init for runtime stats. + e.loadDataInfo.collectRuntimeStatsEnabled() return nil } @@ -433,6 +424,14 @@ func (e *LoadDataInfo) InsertData(ctx context.Context, prevData, curData []byte) // CheckAndInsertOneBatch is used to commit one transaction batch full filled data func (e *LoadDataInfo) CheckAndInsertOneBatch(ctx context.Context, rows [][]types.Datum, cnt uint64) error { + if e.stats != nil && e.stats.BasicRuntimeStats != nil { + // Since this method will not call by executor Next, + // so we need record the basic executor runtime stats by ourself. + start := time.Now() + defer func() { + e.stats.BasicRuntimeStats.Record(time.Since(start), 0) + }() + } var err error if cnt == 0 { return err diff --git a/planner/core/initialize.go b/planner/core/initialize.go index ff923cae70178..acea1c78de2d0 100644 --- a/planner/core/initialize.go +++ b/planner/core/initialize.go @@ -242,6 +242,12 @@ func (p Insert) Init(ctx sessionctx.Context) *Insert { return &p } +// Init initializes LoadData. +func (p LoadData) Init(ctx sessionctx.Context) *LoadData { + p.basePlan = newBasePlan(ctx, plancodec.TypeLoadData, 0) + return &p +} + // Init initializes LogicalShow. func (p LogicalShow) Init(ctx sessionctx.Context) *LogicalShow { p.baseLogicalPlan = newBaseLogicalPlan(ctx, plancodec.TypeShow, &p, 0) diff --git a/planner/core/planbuilder.go b/planner/core/planbuilder.go index dfa28a856c648..7bd43d6351205 100644 --- a/planner/core/planbuilder.go +++ b/planner/core/planbuilder.go @@ -2457,7 +2457,7 @@ func (b *PlanBuilder) buildSelectPlanOfInsert(ctx context.Context, insert *ast.I } func (b *PlanBuilder) buildLoadData(ctx context.Context, ld *ast.LoadDataStmt) (Plan, error) { - p := &LoadData{ + p := LoadData{ IsLocal: ld.IsLocal, OnDuplicate: ld.OnDuplicate, Path: ld.Path, @@ -2466,7 +2466,7 @@ func (b *PlanBuilder) buildLoadData(ctx context.Context, ld *ast.LoadDataStmt) ( FieldsInfo: ld.FieldsInfo, LinesInfo: ld.LinesInfo, IgnoreLines: ld.IgnoreLines, - } + }.Init(b.ctx) user := b.ctx.GetSessionVars().User var insertErr error if user != nil { diff --git a/server/conn.go b/server/conn.go index 84cc960fc7f68..ce9e94ab671f6 100644 --- a/server/conn.go +++ b/server/conn.go @@ -64,6 +64,7 @@ import ( "github.com/pingcap/tidb/kv" "github.com/pingcap/tidb/metrics" "github.com/pingcap/tidb/plugin" + "github.com/pingcap/tidb/session" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/sessionctx/variable" "github.com/pingcap/tidb/util/arena" @@ -1380,34 +1381,48 @@ func (cc *clientConn) handleQuery(ctx context.Context, sql string) (err error) { err = cc.writeMultiResultset(ctx, rss, false) } } else { - loadDataInfo := cc.ctx.Value(executor.LoadDataVarKey) - if loadDataInfo != nil { - defer cc.ctx.SetValue(executor.LoadDataVarKey, nil) - if err = cc.handleLoadData(ctx, loadDataInfo.(*executor.LoadDataInfo)); err != nil { - return err + var handled bool + handled, err = cc.handleQuerySpecial(ctx) + if handled { + execStmt := cc.ctx.Value(session.ExecStmtVarKey) + if execStmt != nil { + execStmt.(*executor.ExecStmt).FinishExecuteStmt(0, err == nil, false) } } + } + return err +} - loadStats := cc.ctx.Value(executor.LoadStatsVarKey) - if loadStats != nil { - defer cc.ctx.SetValue(executor.LoadStatsVarKey, nil) - if err = cc.handleLoadStats(ctx, loadStats.(*executor.LoadStatsInfo)); err != nil { - return err - } +func (cc *clientConn) handleQuerySpecial(ctx context.Context) (handled bool, err error) { + loadDataInfo := cc.ctx.Value(executor.LoadDataVarKey) + if loadDataInfo != nil { + handled = true + defer cc.ctx.SetValue(executor.LoadDataVarKey, nil) + if err = cc.handleLoadData(ctx, loadDataInfo.(*executor.LoadDataInfo)); err != nil { + return handled, err } + } - indexAdvise := cc.ctx.Value(executor.IndexAdviseVarKey) - if indexAdvise != nil { - defer cc.ctx.SetValue(executor.IndexAdviseVarKey, nil) - err = cc.handleIndexAdvise(ctx, indexAdvise.(*executor.IndexAdviseInfo)) - if err != nil { - return err - } + loadStats := cc.ctx.Value(executor.LoadStatsVarKey) + if loadStats != nil { + handled = true + defer cc.ctx.SetValue(executor.LoadStatsVarKey, nil) + if err = cc.handleLoadStats(ctx, loadStats.(*executor.LoadStatsInfo)); err != nil { + return handled, err } + } - err = cc.writeOK(ctx) + indexAdvise := cc.ctx.Value(executor.IndexAdviseVarKey) + if indexAdvise != nil { + handled = true + defer cc.ctx.SetValue(executor.IndexAdviseVarKey, nil) + err = cc.handleIndexAdvise(ctx, indexAdvise.(*executor.IndexAdviseInfo)) + if err != nil { + return handled, err + } } - return err + + return handled, cc.writeOK(ctx) } // handleFieldList returns the field list for a table. diff --git a/server/server_test.go b/server/server_test.go index 802a521da2b4e..98b301c9fdf22 100644 --- a/server/server_test.go +++ b/server/server_test.go @@ -27,6 +27,7 @@ import ( "path/filepath" "regexp" "strconv" + "strings" "testing" "time" @@ -442,6 +443,63 @@ func (cli *testServerClient) runTestLoadDataWithSelectIntoOutfile(c *C, server * } }) } +func (cli *testServerClient) runTestLoadDataForSlowLog(c *C, server *Server) { + path := "/tmp/load_data_test.csv" + fp, err := os.OpenFile(path, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0600) + c.Assert(err, IsNil) + c.Assert(fp, NotNil) + defer func() { + err = fp.Close() + c.Assert(err, IsNil) + err = os.Remove(path) + c.Assert(err, IsNil) + }() + _, err = fp.WriteString( + "1 1\n" + + "2 2\n" + + "3 3\n" + + "4 4\n" + + "5 5\n") + c.Assert(err, IsNil) + + cli.runTestsOnNewDB(c, func(config *mysql.Config) { + config.AllowAllFiles = true + config.Params = map[string]string{"sql_mode": "''"} + }, "load_data_slow_query", func(dbt *DBTest) { + dbt.mustExec("create table t_slow (a int key, b int)") + defer func() { + dbt.mustExec("set tidb_slow_log_threshold=300;") + dbt.mustExec("set @@global.tidb_enable_stmt_summary=0") + }() + dbt.mustExec("set tidb_slow_log_threshold=0;") + dbt.mustExec("set @@global.tidb_enable_stmt_summary=1") + query := fmt.Sprintf("load data local infile %q into table t_slow", path) + dbt.mustExec(query) + dbt.mustExec("insert ignore into t_slow values (1,1);") + + checkPlan := func(rows *sql.Rows, expectPlan string) { + dbt.Check(rows.Next(), IsTrue, Commentf("unexpected data")) + var plan sql.NullString + err = rows.Scan(&plan) + dbt.Check(err, IsNil) + planStr := strings.ReplaceAll(plan.String, "\t", " ") + planStr = strings.ReplaceAll(planStr, "\n", " ") + c.Assert(planStr, Matches, expectPlan) + } + + // Test for record slow log for load data statement. + rows := dbt.mustQuery(fmt.Sprintf("select plan from information_schema.slow_query where query like 'load data local infile %% into table t_slow;' order by time desc limit 1")) + expectedPlan := ".*LoadData.* time.* loops.* prepare.* check_insert.* mem_insert_time:.* prefetch.* rpc.* commit_txn.*" + checkPlan(rows, expectedPlan) + // Test for record statements_summary for load data statement. + rows = dbt.mustQuery(fmt.Sprintf("select plan from information_schema.STATEMENTS_SUMMARY where QUERY_SAMPLE_TEXT like 'load data local infile %%' limit 1")) + checkPlan(rows, expectedPlan) + // Test log normal statement after executing load date. + rows = dbt.mustQuery(fmt.Sprintf("select plan from information_schema.slow_query where query = 'insert ignore into t_slow values (1,1);' order by time desc limit 1")) + expectedPlan = ".*Insert.* time.* loops.* prepare.* check_insert.* mem_insert_time:.* prefetch.* rpc.*" + checkPlan(rows, expectedPlan) + }) +} func (cli *testServerClient) runTestLoadData(c *C, server *Server) { // create a file and write data. diff --git a/server/tidb_test.go b/server/tidb_test.go index f79164132dd87..787b56aca89d3 100644 --- a/server/tidb_test.go +++ b/server/tidb_test.go @@ -41,6 +41,7 @@ import ( "github.com/pingcap/tidb/session" "github.com/pingcap/tidb/store/mockstore" "github.com/pingcap/tidb/util" + "github.com/pingcap/tidb/util/logutil" "github.com/pingcap/tidb/util/testkit" ) @@ -87,6 +88,8 @@ func (ts *tidbTestSuiteBase) SetUpSuite(c *C) { cfg.Status.ReportStatus = true cfg.Status.StatusPort = ts.statusPort cfg.Performance.TCPKeepAlive = true + err = logutil.InitLogger(cfg.Log.ToLogConfig()) + c.Assert(err, IsNil) server, err := NewServer(cfg, ts.tidbdrv) c.Assert(err, IsNil) @@ -140,6 +143,7 @@ func (ts *tidbTestSuite) TestPreparedTimestamp(c *C) { func (ts *tidbTestSerialSuite) TestLoadData(c *C) { ts.runTestLoadData(c, ts.server) ts.runTestLoadDataWithSelectIntoOutfile(c, ts.server) + ts.runTestLoadDataForSlowLog(c, ts.server) } func (ts *tidbTestSerialSuite) TestStmtCount(c *C) { diff --git a/session/session.go b/session/session.go index e9e482253949c..dfd4afcf4f05e 100644 --- a/session/session.go +++ b/session/session.go @@ -2107,7 +2107,13 @@ func (s *session) PrepareTSFuture(ctx context.Context) { // RefreshTxnCtx implements context.RefreshTxnCtx interface. func (s *session) RefreshTxnCtx(ctx context.Context) error { - if err := s.doCommit(ctx); err != nil { + var commitDetail *execdetails.CommitDetails + ctx = context.WithValue(ctx, execdetails.CommitDetailCtxKey, &commitDetail) + err := s.doCommit(ctx) + if commitDetail != nil { + s.GetSessionVars().StmtCtx.MergeExecDetails(nil, commitDetail) + } + if err != nil { return err } diff --git a/session/tidb.go b/session/tidb.go index ea91b2c5bddc8..5e50359956417 100644 --- a/session/tidb.go +++ b/session/tidb.go @@ -19,6 +19,7 @@ package session import ( "context" + "fmt" "sync" "sync/atomic" "time" @@ -260,6 +261,27 @@ func checkStmtLimit(ctx context.Context, se *session) error { return err } +// querySpecialKeys contains the keys of special query, the special query will handled by handleQuerySpecial method. +var querySpecialKeys = []fmt.Stringer{ + executor.LoadDataVarKey, + executor.LoadStatsVarKey, + executor.IndexAdviseVarKey, +} + +func (s *session) hasQuerySpecial() bool { + found := false + s.mu.RLock() + for _, k := range querySpecialKeys { + v := s.mu.values[k] + if v != nil { + found = true + break + } + } + s.mu.RUnlock() + return found +} + // runStmt executes the sqlexec.Statement and commit or rollback the current transaction. func runStmt(ctx context.Context, sctx sessionctx.Context, s sqlexec.Statement) (rs sqlexec.RecordSet, err error) { if span := opentracing.SpanFromContext(ctx); span != nil && span.Tracer() != nil { @@ -315,9 +337,15 @@ func runStmt(ctx context.Context, sctx sessionctx.Context, s sqlexec.Statement) err = finishStmt(ctx, se, err, s) - // If it is not a select statement, we record its slow log here, - // then it could include the transaction commit time. - s.(*executor.ExecStmt).FinishExecuteStmt(origTxnCtx.StartTS, err == nil, false) + if se.hasQuerySpecial() { + // The special query will be handled later in handleQuerySpecial, + // then should call the ExecStmt.FinishExecuteStmt to finish this statement. + se.SetValue(ExecStmtVarKey, s.(*executor.ExecStmt)) + } else { + // If it is not a select statement, we record its slow log here, + // then it could include the transaction commit time. + s.(*executor.ExecStmt).FinishExecuteStmt(origTxnCtx.StartTS, err == nil, false) + } return rs, err } @@ -391,3 +419,14 @@ func ResultSetToStringSlice(ctx context.Context, s Session, rs sqlexec.RecordSet var ( ErrForUpdateCantRetry = terror.ClassSession.New(errno.ErrForUpdateCantRetry, errno.MySQLErrName[errno.ErrForUpdateCantRetry]) ) + +// ExecStmtVarKeyType is a dummy type to avoid naming collision in context. +type ExecStmtVarKeyType int + +// String defines a Stringer function for debugging and pretty printing. +func (k ExecStmtVarKeyType) String() string { + return "exec_stmt_var_key" +} + +// ExecStmtVarKey is a variable key for ExecStmt. +const ExecStmtVarKey ExecStmtVarKeyType = 0 diff --git a/sessionctx/stmtctx/stmtctx.go b/sessionctx/stmtctx/stmtctx.go index a51e57ad2b1b4..6705b65286f0b 100644 --- a/sessionctx/stmtctx/stmtctx.go +++ b/sessionctx/stmtctx/stmtctx.go @@ -493,7 +493,13 @@ func (sc *StatementContext) MergeExecDetails(details *execdetails.ExecDetails, c sc.mu.execDetails.ProcessedKeys += details.ProcessedKeys sc.mu.allExecDetails = append(sc.mu.allExecDetails, details) } - sc.mu.execDetails.CommitDetail = commitDetails + if commitDetails != nil { + if sc.mu.execDetails.CommitDetail == nil { + sc.mu.execDetails.CommitDetail = commitDetails + } else { + sc.mu.execDetails.CommitDetail.Merge(commitDetails) + } + } sc.mu.Unlock() } diff --git a/util/plancodec/id.go b/util/plancodec/id.go index 25cc7b0e35a24..c95959c340a05 100644 --- a/util/plancodec/id.go +++ b/util/plancodec/id.go @@ -104,6 +104,8 @@ const ( TypeClusterMemTableReader = "ClusterMemTableReader" // TypeDataSource is the type of DataSource. TypeDataSource = "DataSource" + // TypeLoadData is the type of LoadData. + TypeLoadData = "LoadData" ) // plan id. @@ -148,6 +150,7 @@ const ( typeBatchPointGet typeClusterMemTableReader typeDataSourceID + typeLoadDataID ) // TypeStringToPhysicalID converts the plan type string to plan id. @@ -233,6 +236,8 @@ func TypeStringToPhysicalID(tp string) int { return typeClusterMemTableReader case TypeDataSource: return typeDataSourceID + case TypeLoadData: + return typeLoadDataID } // Should never reach here. return 0 @@ -319,6 +324,8 @@ func PhysicalIDToTypeString(id int) string { return TypeBatchPointGet case typeClusterMemTableReader: return TypeClusterMemTableReader + case typeLoadDataID: + return TypeLoadData } // Should never reach here. From fdf825bc98daca5b2940e3129c6fcf8a47f22726 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Fri, 13 Nov 2020 17:08:05 +0800 Subject: [PATCH 112/229] expression: fix wrong warning when comparing binary column (#19983) (#20406) Signed-off-by: ti-srebot --- types/convert.go | 3 +++ types/convert_test.go | 1 + 2 files changed, 4 insertions(+) diff --git a/types/convert.go b/types/convert.go index 3765d7ea940d0..d9cf915ebdf0e 100644 --- a/types/convert.go +++ b/types/convert.go @@ -654,6 +654,9 @@ func getValidFloatPrefix(sc *stmtctx.StatementContext, s string, isFuncCast bool break } eIdx = i + } else if c == '\u0000' { + s = s[:validLen] + break } else if c < '0' || c > '9' { break } else { diff --git a/types/convert_test.go b/types/convert_test.go index 3d28731a7211e..eae1f55b72cac 100644 --- a/types/convert_test.go +++ b/types/convert_test.go @@ -867,6 +867,7 @@ func (s *testTypeConvertSuite) TestGetValidFloat(c *C) { {"123.e", "123."}, {"0-123", "0"}, {"9-3", "9"}, + {"1001001\\u0000\\u0000\\u0000", "1001001"}, } sc := new(stmtctx.StatementContext) for _, tt := range tests { From 28a3cabbe5b8ba0a07a689aff740ba7e567c8d21 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Fri, 13 Nov 2020 17:20:34 +0800 Subject: [PATCH 113/229] statistics: fix an unsafe lock operation and adjust some logging levels (#20381) (#20426) Signed-off-by: ti-srebot --- statistics/handle/handle.go | 21 +++++++++++++++------ statistics/handle/handle_test.go | 7 +++++++ 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/statistics/handle/handle.go b/statistics/handle/handle.go index 9eaeb72e3fbc3..3c681aafb3804 100644 --- a/statistics/handle/handle.go +++ b/statistics/handle/handle.go @@ -184,7 +184,7 @@ func (h *Handle) Update(is infoschema.InfoSchema) error { tbl, err := h.tableStatsFromStorage(tableInfo, physicalID, false, nil) // Error is not nil may mean that there are some ddl changes on this table, we will not update it. if err != nil { - logutil.BgLogger().Debug("error occurred when read table stats", zap.String("table", tableInfo.Name.O), zap.Error(err)) + logutil.BgLogger().Error("[stats] error occurred when read table stats", zap.String("table", tableInfo.Name.O), zap.Error(err)) continue } if tbl == nil { @@ -343,14 +343,14 @@ func (h *Handle) FlushStats() { for len(h.ddlEventCh) > 0 { e := <-h.ddlEventCh if err := h.HandleDDLEvent(e); err != nil { - logutil.BgLogger().Debug("[stats] handle ddl event fail", zap.Error(err)) + logutil.BgLogger().Error("[stats] handle ddl event fail", zap.Error(err)) } } if err := h.DumpStatsDeltaToKV(DumpAll); err != nil { - logutil.BgLogger().Debug("[stats] dump stats delta fail", zap.Error(err)) + logutil.BgLogger().Error("[stats] dump stats delta fail", zap.Error(err)) } if err := h.DumpStatsFeedbackToKV(); err != nil { - logutil.BgLogger().Debug("[stats] dump stats feedback fail", zap.Error(err)) + logutil.BgLogger().Error("[stats] dump stats feedback fail", zap.Error(err)) } } @@ -743,7 +743,7 @@ func (sr *statsReader) isHistory() bool { return sr.history != nil } -func (h *Handle) getStatsReader(history sqlexec.RestrictedSQLExecutor) (*statsReader, error) { +func (h *Handle) getStatsReader(history sqlexec.RestrictedSQLExecutor) (reader *statsReader, err error) { failpoint.Inject("mockGetStatsReaderFail", func(val failpoint.Value) { if val.(bool) { failpoint.Return(nil, errors.New("gofail genStatsReader error")) @@ -753,7 +753,16 @@ func (h *Handle) getStatsReader(history sqlexec.RestrictedSQLExecutor) (*statsRe return &statsReader{history: history}, nil } h.mu.Lock() - _, err := h.mu.ctx.(sqlexec.SQLExecutor).Execute(context.TODO(), "begin") + defer func() { + if r := recover(); r != nil { + err = fmt.Errorf("getStatsReader panic %v", r) + } + if err != nil { + h.mu.Unlock() + } + }() + failpoint.Inject("mockGetStatsReaderPanic", nil) + _, err = h.mu.ctx.(sqlexec.SQLExecutor).Execute(context.TODO(), "begin") if err != nil { return nil, err } diff --git a/statistics/handle/handle_test.go b/statistics/handle/handle_test.go index cd71900e67ac3..eefcc08dee748 100644 --- a/statistics/handle/handle_test.go +++ b/statistics/handle/handle_test.go @@ -461,6 +461,13 @@ func (s *testStatsSuite) TestLoadStats(c *C) { err = h.LoadNeededHistograms() c.Assert(err, NotNil) c.Assert(failpoint.Disable("github.com/pingcap/tidb/statistics/handle/mockGetStatsReaderFail"), IsNil) + + c.Assert(failpoint.Enable("github.com/pingcap/tidb/statistics/handle/mockGetStatsReaderPanic", "panic"), IsNil) + err = h.LoadNeededHistograms() + c.Assert(err, ErrorMatches, ".*getStatsReader panic.*") + c.Assert(failpoint.Disable("github.com/pingcap/tidb/statistics/handle/mockGetStatsReaderPanic"), IsNil) + err = h.LoadNeededHistograms() + c.Assert(err, IsNil) } func newStoreWithBootstrap() (kv.Storage, *domain.Domain, error) { From 0f127aed9bfc51265544f9e227bb9e48a95f1f67 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Fri, 13 Nov 2020 20:19:04 +0800 Subject: [PATCH 114/229] executor: show varchar instead of var_string (#19921) (#20343) Signed-off-by: ti-srebot --- cmd/explaintest/r/explain.result | 5 +++++ cmd/explaintest/t/explain.test | 4 ++++ executor/show.go | 3 +++ 3 files changed, 12 insertions(+) diff --git a/cmd/explaintest/r/explain.result b/cmd/explaintest/r/explain.result index 34ba40144e66e..cd87312a0d2dd 100644 --- a/cmd/explaintest/r/explain.result +++ b/cmd/explaintest/r/explain.result @@ -39,3 +39,8 @@ StreamAgg_8 8000.00 root group by:Column#7, funcs:group_concat(Column#5, Column └─TableReader_15 10000.00 root data:TableFullScan_14 └─TableFullScan_14 10000.00 cop[tikv] table:t keep order:true, stats:pseudo drop table t; +drop view if exists v; +create view v as select cast(replace(substring_index(substring_index("",',',1),':',-1),'"','') as CHAR(32)) as event_id; +desc v; +Field Type Null Key Default Extra +event_id varchar(32) YES NULL diff --git a/cmd/explaintest/t/explain.test b/cmd/explaintest/t/explain.test index 3bde3f5d7d5ca..33fd0e7165d61 100644 --- a/cmd/explaintest/t/explain.test +++ b/cmd/explaintest/t/explain.test @@ -14,3 +14,7 @@ set session tidb_hashagg_final_concurrency = 1; explain select group_concat(a) from t group by id; explain select group_concat(a, b) from t group by id; drop table t; + +drop view if exists v; +create view v as select cast(replace(substring_index(substring_index("",',',1),':',-1),'"','') as CHAR(32)) as event_id; +desc v; diff --git a/executor/show.go b/executor/show.go index 12684d9e5e35b..667d44b62cd32 100644 --- a/executor/show.go +++ b/executor/show.go @@ -470,6 +470,9 @@ func (e *ShowExec) fetchShowColumns(ctx context.Context) error { if idx >= 0 { col.FieldType = *viewSchema.Columns[idx].GetType() } + if col.Tp == mysql.TypeVarString { + col.Tp = mysql.TypeVarchar + } } } for _, col := range cols { From 0d095c6e90cd861893b9c2c7637679295186d8bd Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Fri, 13 Nov 2020 20:31:33 +0800 Subject: [PATCH 115/229] config, server: Add graceful shutdown option (#20649) (#20814) Signed-off-by: ti-srebot --- config/config.go | 38 ++++++++++++++++++++------------------ config/config.toml.example | 4 ++++ server/http_status.go | 14 ++++++++++---- server/server.go | 18 +++++++++++++++++- server/tidb_test.go | 38 ++++++++++++++++++++++++++++++++++++++ 5 files changed, 89 insertions(+), 23 deletions(-) diff --git a/config/config.go b/config/config.go index a7e2c4fb85c63..3f563e06842ba 100644 --- a/config/config.go +++ b/config/config.go @@ -101,22 +101,23 @@ type Config struct { TxnLocalLatches TxnLocalLatches `toml:"-" json:"-"` // Set sys variable lower-case-table-names, ref: https://dev.mysql.com/doc/refman/5.7/en/identifier-case-sensitivity.html. // TODO: We actually only support mode 2, which keeps the original case, but the comparison is case-insensitive. - LowerCaseTableNames int `toml:"lower-case-table-names" json:"lower-case-table-names"` - ServerVersion string `toml:"server-version" json:"server-version"` - Log Log `toml:"log" json:"log"` - Security Security `toml:"security" json:"security"` - Status Status `toml:"status" json:"status"` - Performance Performance `toml:"performance" json:"performance"` - PreparedPlanCache PreparedPlanCache `toml:"prepared-plan-cache" json:"prepared-plan-cache"` - OpenTracing OpenTracing `toml:"opentracing" json:"opentracing"` - ProxyProtocol ProxyProtocol `toml:"proxy-protocol" json:"proxy-protocol"` - TiKVClient TiKVClient `toml:"tikv-client" json:"tikv-client"` - Binlog Binlog `toml:"binlog" json:"binlog"` - CompatibleKillQuery bool `toml:"compatible-kill-query" json:"compatible-kill-query"` - Plugin Plugin `toml:"plugin" json:"plugin"` - PessimisticTxn PessimisticTxn `toml:"pessimistic-txn" json:"pessimistic-txn"` - CheckMb4ValueInUTF8 bool `toml:"check-mb4-value-in-utf8" json:"check-mb4-value-in-utf8"` - MaxIndexLength int `toml:"max-index-length" json:"max-index-length"` + LowerCaseTableNames int `toml:"lower-case-table-names" json:"lower-case-table-names"` + ServerVersion string `toml:"server-version" json:"server-version"` + Log Log `toml:"log" json:"log"` + Security Security `toml:"security" json:"security"` + Status Status `toml:"status" json:"status"` + Performance Performance `toml:"performance" json:"performance"` + PreparedPlanCache PreparedPlanCache `toml:"prepared-plan-cache" json:"prepared-plan-cache"` + OpenTracing OpenTracing `toml:"opentracing" json:"opentracing"` + ProxyProtocol ProxyProtocol `toml:"proxy-protocol" json:"proxy-protocol"` + TiKVClient TiKVClient `toml:"tikv-client" json:"tikv-client"` + Binlog Binlog `toml:"binlog" json:"binlog"` + CompatibleKillQuery bool `toml:"compatible-kill-query" json:"compatible-kill-query"` + Plugin Plugin `toml:"plugin" json:"plugin"` + PessimisticTxn PessimisticTxn `toml:"pessimistic-txn" json:"pessimistic-txn"` + CheckMb4ValueInUTF8 bool `toml:"check-mb4-value-in-utf8" json:"check-mb4-value-in-utf8"` + MaxIndexLength int `toml:"max-index-length" json:"max-index-length"` + GracefulWaitBeforeShutdown int `toml:"graceful-wait-before-shutdown" json:"graceful-wait-before-shutdown"` // AlterPrimaryKey is used to control alter primary key feature. AlterPrimaryKey bool `toml:"alter-primary-key" json:"alter-primary-key"` // TreatOldVersionUTF8AsUTF8MB4 is use to treat old version table/column UTF8 charset as UTF8MB4. This is for compatibility. @@ -586,8 +587,9 @@ var defaultConf = Config{ Enabled: false, Capacity: 0, }, - LowerCaseTableNames: 2, - ServerVersion: "", + LowerCaseTableNames: 2, + GracefulWaitBeforeShutdown: 0, + ServerVersion: "", Log: Log{ Level: "info", Format: "text", diff --git a/config/config.toml.example b/config/config.toml.example index 27de8e54831ca..99b07a4ee91b8 100644 --- a/config/config.toml.example +++ b/config/config.toml.example @@ -64,6 +64,10 @@ lower-case-table-names = 2 # turn on this option when TiDB server is behind a proxy. compatible-kill-query = false +# Make SIGTERM wait N seconds before starting the shutdown procedure. This is designed for when TiDB is behind a proxy/load balancer. +# The health check will fail immediately but the server will not start shutting down until the time has elapsed. +graceful-wait-before-shutdown = 0 + # check mb4 value in utf8 is used to control whether to check the mb4 characters when the charset is utf8. check-mb4-value-in-utf8 = true diff --git a/server/http_status.go b/server/http_status.go index 3216dee53ae5c..188026290f6e4 100644 --- a/server/http_status.go +++ b/server/http_status.go @@ -387,7 +387,13 @@ type status struct { func (s *Server) handleStatus(w http.ResponseWriter, req *http.Request) { w.Header().Set("Content-Type", "application/json") - + // If the server is in the process of shutting down, return a non-200 status. + // It is important not to return status{} as acquiring the s.ConnectionCount() + // acquires a lock that may already be held by the shutdown process. + if s.inShutdownMode { + w.WriteHeader(http.StatusInternalServerError) + return + } st := status{ Connections: s.ConnectionCount(), Version: mysql.ServerVersion, @@ -397,8 +403,8 @@ func (s *Server) handleStatus(w http.ResponseWriter, req *http.Request) { if err != nil { w.WriteHeader(http.StatusInternalServerError) logutil.BgLogger().Error("encode json failed", zap.Error(err)) - } else { - _, err = w.Write(js) - terror.Log(errors.Trace(err)) + return } + _, err = w.Write(js) + terror.Log(errors.Trace(err)) } diff --git a/server/server.go b/server/server.go index 299174b279d2b..e71f808091f9f 100644 --- a/server/server.go +++ b/server/server.go @@ -125,6 +125,7 @@ type Server struct { statusListener net.Listener statusServer *http.Server grpcServer *grpc.Server + inShutdownMode bool } // ConnectionCount gets current connection count. @@ -341,9 +342,24 @@ func (s *Server) Run() error { } } +func (s *Server) startShutdown() { + s.rwlock.RLock() + logutil.BgLogger().Info("setting tidb-server to report unhealthy (shutting-down)") + s.inShutdownMode = true + s.rwlock.RUnlock() + // give the load balancer a chance to receive a few unhealthy health reports + // before acquiring the s.rwlock and blocking connections. + waitTime := time.Duration(s.cfg.GracefulWaitBeforeShutdown) * time.Second + if waitTime > 0 { + logutil.BgLogger().Info("waiting for stray connections before starting shutdown process", zap.Duration("waitTime", waitTime)) + time.Sleep(waitTime) + } +} + // Close closes the server. func (s *Server) Close() { - s.rwlock.Lock() + s.startShutdown() + s.rwlock.Lock() // prevent new connections defer s.rwlock.Unlock() if s.listener != nil { diff --git a/server/tidb_test.go b/server/tidb_test.go index 787b56aca89d3..6277e3c2bd4c2 100644 --- a/server/tidb_test.go +++ b/server/tidb_test.go @@ -927,6 +927,44 @@ func (ts *tidbTestSuite) TestNullFlag(c *C) { c.Assert(dumpFlag(cols[0].Type, cols[0].Flag), Equals, expectFlag) } +func (ts *tidbTestSuite) TestGracefulShutdown(c *C) { + var err error + ts.store, err = mockstore.NewMockTikvStore() + session.DisableStats4Test() + c.Assert(err, IsNil) + ts.domain, err = session.BootstrapSession(ts.store) + c.Assert(err, IsNil) + ts.tidbdrv = NewTiDBDriver(ts.store) + cli := newTestServerClient() + cfg := config.NewConfig() + cfg.GracefulWaitBeforeShutdown = 2 // wait before shutdown + cfg.Port = 0 + cfg.Status.StatusPort = 0 + cfg.Status.ReportStatus = true + cfg.Performance.TCPKeepAlive = true + server, err := NewServer(cfg, ts.tidbdrv) + c.Assert(err, IsNil) + c.Assert(server, NotNil) + cli.port = getPortFromTCPAddr(server.listener.Addr()) + cli.statusPort = getPortFromTCPAddr(server.statusListener.Addr()) + go server.Run() + time.Sleep(time.Millisecond * 100) + + _, err = cli.fetchStatus("/status") // server is up + c.Assert(err, IsNil) + + go server.Close() + time.Sleep(time.Millisecond * 500) + + resp, _ := cli.fetchStatus("/status") // should return 5xx code + c.Assert(resp.StatusCode, Equals, 500) + + time.Sleep(time.Second * 2) + + _, err = cli.fetchStatus("/status") // status is gone + c.Assert(err, ErrorMatches, ".*connect: connection refused") +} + func (ts *tidbTestSuite) TestPessimisticInsertSelectForUpdate(c *C) { qctx, err := ts.tidbdrv.OpenCtx(uint64(0), 0, uint8(tmysql.DefaultCollationID), "test", nil) c.Assert(err, IsNil) From 94d340c854852442e04db3b8017ecd9e272c2e29 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Fri, 13 Nov 2020 20:43:34 +0800 Subject: [PATCH 116/229] executor: fix wrong default zero value for year type (#20824) (#20829) Signed-off-by: ti-srebot --- executor/insert_test.go | 16 ++++++++++++++++ table/column.go | 4 +++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/executor/insert_test.go b/executor/insert_test.go index dcc986727b772..561def8a7c00e 100644 --- a/executor/insert_test.go +++ b/executor/insert_test.go @@ -1252,3 +1252,19 @@ func (s *testSuite9) TestInsertRuntimeStat(c *C) { stats.Merge(stats.Clone()) c.Assert(stats.String(), Equals, "prepare:6s, check_insert:{total_time:4s, mem_insert_time:2s, prefetch:2s}") } + +func (s *testSuite9) TestIssue20768(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t1, t2") + tk.MustExec("create table t1(a year, primary key(a))") + tk.MustExec("insert ignore into t1 values(null)") + tk.MustExec("create table t2(a int, key(a))") + tk.MustExec("insert into t2 values(0)") + tk.MustQuery("select /*+ hash_join(t1) */ * from t1 join t2 on t1.a = t2.a").Check(testkit.Rows("0 0")) + tk.MustQuery("select /*+ inl_join(t1) */ * from t1 join t2 on t1.a = t2.a").Check(testkit.Rows("0 0")) + tk.MustQuery("select /*+ inl_join(t2) */ * from t1 join t2 on t1.a = t2.a").Check(testkit.Rows("0 0")) + tk.MustQuery("select /*+ inl_hash_join(t1) */ * from t1 join t2 on t1.a = t2.a").Check(testkit.Rows("0 0")) + tk.MustQuery("select /*+ inl_merge_join(t1) */ * from t1 join t2 on t1.a = t2.a").Check(testkit.Rows("0 0")) + tk.MustQuery("select /*+ merge_join(t1) */ * from t1 join t2 on t1.a = t2.a").Check(testkit.Rows("0 0")) +} diff --git a/table/column.go b/table/column.go index dd90400885877..68f0b62b16e2f 100644 --- a/table/column.go +++ b/table/column.go @@ -501,12 +501,14 @@ func getColDefaultValueFromNil(ctx sessionctx.Context, col *model.ColumnInfo) (t func GetZeroValue(col *model.ColumnInfo) types.Datum { var d types.Datum switch col.Tp { - case mysql.TypeTiny, mysql.TypeInt24, mysql.TypeShort, mysql.TypeLong, mysql.TypeLonglong, mysql.TypeYear: + case mysql.TypeTiny, mysql.TypeInt24, mysql.TypeShort, mysql.TypeLong, mysql.TypeLonglong: if mysql.HasUnsignedFlag(col.Flag) { d.SetUint64(0) } else { d.SetInt64(0) } + case mysql.TypeYear: + d.SetInt64(0) case mysql.TypeFloat: d.SetFloat32(0) case mysql.TypeDouble: From 6c4ec852f8d730d43489f2125ee034e52eb405b2 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Fri, 13 Nov 2020 20:56:06 +0800 Subject: [PATCH 117/229] util, types: fix overflow & adjustment for the year type in index ranger (#20338) (#20907) Signed-off-by: ti-srebot --- executor/write_test.go | 2 +- types/convert_test.go | 14 ++-- types/datum.go | 44 +++++++++++ types/time.go | 20 ++++- util/ranger/points.go | 27 ++++++- util/ranger/ranger.go | 6 +- util/ranger/ranger_test.go | 151 +++++++++++++++++++++++++++++++++++++ 7 files changed, 250 insertions(+), 14 deletions(-) diff --git a/executor/write_test.go b/executor/write_test.go index d8f45dcfa5c64..eb4234ba4dd97 100644 --- a/executor/write_test.go +++ b/executor/write_test.go @@ -1470,7 +1470,7 @@ func (s *testSuite8) TestUpdate(c *C) { tk.MustExec("drop table t") tk.MustExec("CREATE TABLE `t` ( `c1` year DEFAULT NULL, `c2` year DEFAULT NULL, `c3` date DEFAULT NULL, `c4` datetime DEFAULT NULL, KEY `idx` (`c1`,`c2`))") _, err = tk.Exec("UPDATE t SET c2=16777215 WHERE c1>= -8388608 AND c1 < -9 ORDER BY c1 LIMIT 2") - c.Assert(err.Error(), Equals, "[types:1690]DECIMAL value is out of range in '(4, 0)'") + c.Assert(err, IsNil) tk.MustExec("update (select * from t) t set c1 = 1111111") diff --git a/types/convert_test.go b/types/convert_test.go index eae1f55b72cac..a2c1978dc4ffd 100644 --- a/types/convert_test.go +++ b/types/convert_test.go @@ -673,20 +673,20 @@ func (s *testTypeConvertSuite) TestConvert(c *C) { signedAccept(c, mysql.TypeDouble, "1e+1", "10") // year - signedDeny(c, mysql.TypeYear, 123, "0") - signedDeny(c, mysql.TypeYear, 3000, "0") + signedDeny(c, mysql.TypeYear, 123, "1901") + signedDeny(c, mysql.TypeYear, 3000, "2155") signedAccept(c, mysql.TypeYear, "2000", "2000") signedAccept(c, mysql.TypeYear, "abc", "0") signedAccept(c, mysql.TypeYear, "00abc", "2000") signedAccept(c, mysql.TypeYear, "0019", "2019") signedAccept(c, mysql.TypeYear, 2155, "2155") signedAccept(c, mysql.TypeYear, 2155.123, "2155") - signedDeny(c, mysql.TypeYear, 2156, "0") - signedDeny(c, mysql.TypeYear, 123.123, "0") - signedDeny(c, mysql.TypeYear, 1900, "0") + signedDeny(c, mysql.TypeYear, 2156, "2155") + signedDeny(c, mysql.TypeYear, 123.123, "1901") + signedDeny(c, mysql.TypeYear, 1900, "1901") signedAccept(c, mysql.TypeYear, 1901, "1901") signedAccept(c, mysql.TypeYear, 1900.567, "1901") - signedDeny(c, mysql.TypeYear, 1900.456, "0") + signedDeny(c, mysql.TypeYear, 1900.456, "1901") signedAccept(c, mysql.TypeYear, 0, "0") signedAccept(c, mysql.TypeYear, "0", "2000") signedAccept(c, mysql.TypeYear, "00", "2000") @@ -707,7 +707,7 @@ func (s *testTypeConvertSuite) TestConvert(c *C) { signedAccept(c, mysql.TypeYear, "70", "1970") signedAccept(c, mysql.TypeYear, 99, "1999") signedAccept(c, mysql.TypeYear, "99", "1999") - signedDeny(c, mysql.TypeYear, 100, "0") + signedDeny(c, mysql.TypeYear, 100, "1901") signedDeny(c, mysql.TypeYear, "99999999999999999999999999999999999", "0") // time from string diff --git a/types/datum.go b/types/datum.go index 5683058fbd21e..dd7ffd96de3ed 100644 --- a/types/datum.go +++ b/types/datum.go @@ -1370,6 +1370,50 @@ func (d *Datum) convertToMysqlYear(sc *stmtctx.StatementContext, target *FieldTy return ret, err } +// ConvertDatumToFloatYear converts datum into MySQL year with float type +func ConvertDatumToFloatYear(sc *stmtctx.StatementContext, d Datum) (Datum, error) { + return d.convertToMysqlFloatYear(sc, types.NewFieldType(mysql.TypeYear)) +} + +func (d *Datum) convertToMysqlFloatYear(sc *stmtctx.StatementContext, target *FieldType) (Datum, error) { + var ( + ret Datum + y float64 + err error + adjust bool + ) + switch d.k { + case KindString, KindBytes: + s := d.GetString() + trimS := strings.TrimSpace(s) + y, err = StrToFloat(sc, trimS, false) + if err != nil { + ret.SetFloat64(0) + return ret, errors.Trace(err) + } + // condition: + // parsed to 0, not a string of length 4, the first valid char is a 0 digit + if len(s) != 4 && y == 0 && strings.HasPrefix(trimS, "0") { + adjust = true + } + case KindMysqlTime: + y = float64(d.GetMysqlTime().Year()) + case KindMysqlDuration: + y = float64(time.Now().Year()) + default: + ret, err = d.convertToFloat(sc, NewFieldType(mysql.TypeDouble)) + if err != nil { + _, err = invalidConv(d, target.Tp) + ret.SetFloat64(0) + return ret, err + } + y = ret.GetFloat64() + } + y = adjustYearForFloat(y, adjust) + ret.SetFloat64(y) + return ret, err +} + func (d *Datum) convertToMysqlBit(sc *stmtctx.StatementContext, target *FieldType) (Datum, error) { var ret Datum var uintValue uint64 diff --git a/types/time.go b/types/time.go index 06f0e78ba4f0a..f8b679090f15b 100644 --- a/types/time.go +++ b/types/time.go @@ -1207,13 +1207,31 @@ func AdjustYear(y int64, shouldAdjust bool) (int64, error) { return y, nil } y = int64(adjustYear(int(y))) - if y < int64(MinYear) || y > int64(MaxYear) { + if y < 0 { return 0, errors.Trace(ErrInvalidYear) } + if y < int64(MinYear) { + return int64(MinYear), errors.Trace(ErrInvalidYear) + } + if y > int64(MaxYear) { + return int64(MaxYear), errors.Trace(ErrInvalidYear) + } return y, nil } +func adjustYearForFloat(y float64, shouldAdjust bool) float64 { + if y == 0 && !shouldAdjust { + return y + } + if y >= 0 && y <= 69 { + y = 2000 + y + } else if y >= 70 && y <= 99 { + y = 1900 + y + } + return y +} + // NewDuration construct duration with time. func NewDuration(hour, minute, second, microsecond int, fsp int8) Duration { return Duration{ diff --git a/util/ranger/points.go b/util/ranger/points.go index 539f74be24ec6..0e6b1406ffd9b 100644 --- a/util/ranger/points.go +++ b/util/ranger/points.go @@ -210,11 +210,17 @@ func (r *builder) buildFormBinOp(expr *expression.ScalarFunction) []point { ft *types.FieldType ) - // refineValue refines the constant datum for string type since we may eval the constant to another collation instead of its own collation. - refineValue := func(col *expression.Column, value *types.Datum) { + // refineValue refines the constant datum: + // 1. for string type since we may eval the constant to another collation instead of its own collation. + // 2. for year type since 2-digit year value need adjustment, see https://dev.mysql.com/doc/refman/5.6/en/year.html + refineValue := func(col *expression.Column, value *types.Datum) (err error) { if col.RetType.EvalType() == types.ETString && value.Kind() == types.KindString { value.SetString(value.GetString(), col.RetType.Collate) } + if col.GetType().Tp == mysql.TypeYear { + *value, err = types.ConvertDatumToFloatYear(r.sc, *value) + } + return } if col, ok := expr.GetArgs()[0].(*expression.Column); ok { ft = col.RetType @@ -222,7 +228,10 @@ func (r *builder) buildFormBinOp(expr *expression.ScalarFunction) []point { if err != nil { return nil } - refineValue(col, &value) + err = refineValue(col, &value) + if err != nil { + return nil + } op = expr.FuncName.L } else { col, ok := expr.GetArgs()[1].(*expression.Column) @@ -234,7 +243,10 @@ func (r *builder) buildFormBinOp(expr *expression.ScalarFunction) []point { if err != nil { return nil } - refineValue(col, &value) + err = refineValue(col, &value) + if err != nil { + return nil + } switch expr.FuncName.L { case ast.GE: @@ -383,6 +395,13 @@ func (r *builder) buildFromIn(expr *expression.ScalarFunction) ([]point, bool) { if dt.Kind() == types.KindString { dt.SetString(dt.GetString(), colCollate) } + if expr.GetArgs()[0].GetType().Tp == mysql.TypeYear { + dt, err = types.ConvertDatumToFloatYear(r.sc, dt) + if err != nil { + r.err = ErrUnsupportedType.GenWithStack("expr:%v is not converted to year", e) + return fullRange, hasNull + } + } var startValue, endValue types.Datum dt.Copy(&startValue) dt.Copy(&endValue) diff --git a/util/ranger/ranger.go b/util/ranger/ranger.go index fbe9963abfe87..96d0eb042ce9e 100644 --- a/util/ranger/ranger.go +++ b/util/ranger/ranger.go @@ -23,6 +23,7 @@ import ( "github.com/pingcap/parser/ast" "github.com/pingcap/parser/charset" "github.com/pingcap/parser/mysql" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/expression" "github.com/pingcap/tidb/kv" "github.com/pingcap/tidb/sessionctx" @@ -92,7 +93,10 @@ func convertPoint(sc *stmtctx.StatementContext, point point, tp *types.FieldType } casted, err := point.value.ConvertTo(sc, tp) if err != nil { - return point, errors.Trace(err) + // see issue #20101: overflow when converting integer to year + if tp.Tp != mysql.TypeYear || !terror.ErrorEqual(err, types.ErrOverflow) { + return point, errors.Trace(err) + } } valCmpCasted, err := point.value.CompareDatum(sc, &casted) if err != nil { diff --git a/util/ranger/ranger_test.go b/util/ranger/ranger_test.go index d29853c5b83f9..2aaf271cae238 100644 --- a/util/ranger/ranger_test.go +++ b/util/ranger/ranger_test.go @@ -1199,3 +1199,154 @@ func (s *testRangerSuite) TestIndexStringIsTrueRange(c *C) { testKit.MustQuery(tt).Check(testkit.Rows(output[i].Result...)) } } + +func (s *testRangerSuite) TestIndexRangeForYear(c *C) { + defer testleak.AfterTest(c)() + dom, store, err := newDomainStoreWithBootstrap(c) + defer func() { + dom.Close() + store.Close() + }() + c.Assert(err, IsNil) + testKit := testkit.NewTestKit(c, store) + + // for issue #20101: overflow when converting integer to year + testKit.MustExec("use test") + testKit.MustExec("DROP TABLE IF EXISTS `table_30_utf8_undef`") + testKit.MustExec("CREATE TABLE `table_30_utf8_undef` (\n `pk` int(11) NOT NULL\n) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin") + testKit.MustExec("INSERT INTO `table_30_utf8_undef` VALUES (29)") + + testKit.MustExec("DROP TABLE IF EXISTS `table_40_utf8_4`") + testKit.MustExec("CREATE TABLE `table_40_utf8_4`(\n `pk` int(11) NOT NULL,\n `col_int_key_unsigned` int(10) unsigned DEFAULT NULL,\n `col_year_key_signed` year(4) DEFAULT NULL,\n" + + "PRIMARY KEY (`pk`),\n KEY `col_int_key_unsigned` (`col_int_key_unsigned`),\n KEY `col_year_key_signed` (`col_year_key_signed`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin") + + testKit.MustExec("INSERT INTO `table_40_utf8_4` VALUES (36, 10 ,1)") + + testKit.MustQuery("SELECT sum(tmp.val) AS val FROM (" + + "SELECT count(1) AS val FROM table_40_utf8_4 JOIN table_30_utf8_undef\n" + + "WHERE table_40_utf8_4.col_year_key_signed!=table_40_utf8_4.col_int_key_unsigned\n" + + "AND table_40_utf8_4.col_int_key_unsigned=\"15698\") AS tmp"). + Check(testkit.Rows("0")) + + // test index range + testKit.MustExec("DROP TABLE IF EXISTS t") + testKit.MustExec("CREATE TABLE t (a year(4), key(a))") + testKit.MustExec("INSERT INTO t VALUES (1), (70), (99), (0), ('0')") + testKit.MustQuery("SELECT * FROM t WHERE a < 15698").Check(testkit.Rows("0", "1970", "1999", "2000", "2001")) + testKit.MustQuery("SELECT * FROM t WHERE a <= 0").Check(testkit.Rows("0")) + testKit.MustQuery("SELECT * FROM t WHERE a < 2000").Check(testkit.Rows("0", "1970", "1999")) + testKit.MustQuery("SELECT * FROM t WHERE a > -1").Check(testkit.Rows("0", "1970", "1999", "2000", "2001")) + + tests := []struct { + indexPos int + exprStr string + accessConds string + filterConds string + resultStr string + }{ + { + indexPos: 0, + exprStr: `a not in (0, 1, 2)`, + accessConds: "[not(in(test.t.a, 0, 1, 2))]", + filterConds: "[]", + resultStr: `[(NULL,0) (0,2001) (2002,+inf]]`, + }, + { + indexPos: 0, + exprStr: `a not in (-1, 1, 2)`, + accessConds: "[not(in(test.t.a, -1, 1, 2))]", + filterConds: "[]", + resultStr: `[(NULL,0) [0,2001) (2002,+inf]]`, + }, + { + indexPos: 0, + exprStr: `a not in (1, 2, 70)`, + accessConds: "[not(in(test.t.a, 1, 2, 70))]", + filterConds: "[]", + resultStr: `[(NULL,1970) (1970,2001) (2002,+inf]]`, + }, + { + indexPos: 0, + exprStr: `a not in (99)`, + accessConds: "[ne(test.t.a, 99)]", + filterConds: "[]", + resultStr: `[[-inf,1999) (1999,+inf]]`, + }, + { + indexPos: 0, + exprStr: `a not in (1, 2, 15698)`, + accessConds: "[not(in(test.t.a, 1, 2, 15698))]", + filterConds: "[]", + resultStr: `[(NULL,2001) (2002,2155] (2155,+inf]]`, + }, + { + indexPos: 0, + exprStr: `a >= -1000`, + accessConds: "[ge(test.t.a, -1000)]", + filterConds: "[]", + resultStr: `[[0,+inf]]`, + }, + { + indexPos: 0, + exprStr: `a > -1000`, + accessConds: "[gt(test.t.a, -1000)]", + filterConds: "[]", + resultStr: `[[0,+inf]]`, + }, + { + indexPos: 0, + exprStr: `a != 1`, + accessConds: "[ne(test.t.a, 1)]", + filterConds: "[]", + resultStr: `[[-inf,2001) (2001,+inf]]`, + }, + { + indexPos: 0, + exprStr: `a != 2156`, + accessConds: "[ne(test.t.a, 2156)]", + filterConds: "[]", + resultStr: `[[-inf,2155] (2155,+inf]]`, + }, + { + exprStr: "a < 99 or a > 01", + accessConds: "[or(lt(test.t.a, 99), gt(test.t.a, 1))]", + filterConds: "[]", + resultStr: "[[-inf,1999) (2001,+inf]]", + }, + { + exprStr: "a >= 70 and a <= 69", + accessConds: "[ge(test.t.a, 70) le(test.t.a, 69)]", + filterConds: "[]", + resultStr: "[[1970,2069]]", + }, + } + + ctx := context.Background() + for _, tt := range tests { + sql := "select * from t where " + tt.exprStr + sctx := testKit.Se.(sessionctx.Context) + stmts, err := session.Parse(sctx, sql) + c.Assert(err, IsNil, Commentf("error %v, for expr %s", err, tt.exprStr)) + c.Assert(stmts, HasLen, 1) + is := domain.GetDomain(sctx).InfoSchema() + err = plannercore.Preprocess(sctx, stmts[0], is) + c.Assert(err, IsNil, Commentf("error %v, for resolve name, expr %s", err, tt.exprStr)) + p, _, err := plannercore.BuildLogicalPlan(ctx, sctx, stmts[0], is) + c.Assert(err, IsNil, Commentf("error %v, for build plan, expr %s", err, tt.exprStr)) + selection := p.(plannercore.LogicalPlan).Children()[0].(*plannercore.LogicalSelection) + tbl := selection.Children()[0].(*plannercore.DataSource).TableInfo() + c.Assert(selection, NotNil, Commentf("expr:%v", tt.exprStr)) + conds := make([]expression.Expression, len(selection.Conditions)) + for i, cond := range selection.Conditions { + conds[i] = expression.PushDownNot(sctx, cond) + } + cols, lengths := expression.IndexInfo2PrefixCols(tbl.Columns, selection.Schema().Columns, tbl.Indices[tt.indexPos]) + c.Assert(cols, NotNil) + res, err := ranger.DetachCondAndBuildRangeForIndex(sctx, conds, cols, lengths) + c.Assert(err, IsNil) + c.Assert(fmt.Sprintf("%s", res.AccessConds), Equals, tt.accessConds, Commentf("wrong access conditions for expr: %s", tt.exprStr)) + c.Assert(fmt.Sprintf("%s", res.RemainedConds), Equals, tt.filterConds, Commentf("wrong filter conditions for expr: %s", tt.exprStr)) + got := fmt.Sprintf("%v", res.Ranges) + c.Assert(got, Equals, tt.resultStr, Commentf("different for expr %s", tt.exprStr)) + } +} From c05d221cb3e072a7e359066a0d004ea4fc110ae4 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Sat, 14 Nov 2020 01:20:26 +0800 Subject: [PATCH 118/229] executor: fix unexpected results when do index merge join on outer join (#20581) (#20954) Signed-off-by: ti-srebot --- executor/index_lookup_merge_join.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/executor/index_lookup_merge_join.go b/executor/index_lookup_merge_join.go index c0283deafada5..c3b10df60b85b 100644 --- a/executor/index_lookup_merge_join.go +++ b/executor/index_lookup_merge_join.go @@ -563,6 +563,9 @@ func (imw *innerMergeWorker) doMergeJoin(ctx context.Context, task *lookUpMergeJ for _, outerIdx := range task.outerOrderIdx { outerRow := task.outerResult.GetRow(outerIdx) hasMatch, hasNull, cmpResult := false, false, initCmpResult + if task.outerMatch != nil && !task.outerMatch[outerIdx.ChkIdx][outerIdx.RowIdx] { + goto missMatch + } // If it has iterated out all inner rows and the inner rows with same key is empty, // that means the outer row needn't match any inner rows. if noneInnerRowsRemain && len(task.sameKeyInnerRows) == 0 { From 1337d34bb097f70cff5fae892955a90b589fb644 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Mon, 16 Nov 2020 16:29:19 +0800 Subject: [PATCH 119/229] executor: add runtime information for DML statement in explain analyze (#19106) (#21066) Signed-off-by: ti-srebot Signed-off-by: crazycs520 --- executor/adapter.go | 13 ++++++++----- executor/explain.go | 17 ++++++++++++++++- planner/core/integration_test.go | 22 ++++++++++++++++++++++ session/tidb.go | 3 +-- 4 files changed, 47 insertions(+), 8 deletions(-) diff --git a/executor/adapter.go b/executor/adapter.go index 297fdec04e06c..afa955c8b7ed5 100644 --- a/executor/adapter.go +++ b/executor/adapter.go @@ -384,19 +384,22 @@ func (a *ExecStmt) handleNoDelay(ctx context.Context, e Executor, isPessimistic }() toCheck := e + isExplainAnalyze := false if explain, ok := e.(*ExplainExec); ok { - if explain.analyzeExec != nil { - toCheck = explain.analyzeExec + if analyze := explain.getAnalyzeExecToExecutedNoDelay(); analyze != nil { + toCheck = analyze + isExplainAnalyze = true } } // If the executor doesn't return any result to the client, we execute it without delay. if toCheck.Schema().Len() == 0 { + handled = !isExplainAnalyze if isPessimistic { - return true, nil, a.handlePessimisticDML(ctx, e) + return handled, nil, a.handlePessimisticDML(ctx, toCheck) } - r, err := a.handleNoDelayExecutor(ctx, e) - return true, r, err + r, err := a.handleNoDelayExecutor(ctx, toCheck) + return handled, r, err } else if proj, ok := toCheck.(*ProjectionExec); ok && proj.calculateNoDelay { // Currently this is only for the "DO" statement. Take "DO 1, @a=2;" as an example: // the Projection has two expressions and two columns in the schema, but we should diff --git a/executor/explain.go b/executor/explain.go index 2e12fd9d417b2..ac4c30e699f34 100644 --- a/executor/explain.go +++ b/executor/explain.go @@ -28,6 +28,7 @@ type ExplainExec struct { explain *core.Explain analyzeExec Executor + executed bool rows [][]string cursor int } @@ -79,7 +80,8 @@ func (e *ExplainExec) generateExplainInfo(ctx context.Context) (rows [][]string, closed = true } }() - if e.analyzeExec != nil { + if e.analyzeExec != nil && !e.executed { + e.executed = true chk := newFirstChunk(e.analyzeExec) var nextErr, closeErr error for { @@ -111,3 +113,16 @@ func (e *ExplainExec) generateExplainInfo(ctx context.Context) (rows [][]string, } return e.explain.Rows, nil } + +// getAnalyzeExecToExecutedNoDelay gets the analyze DML executor to execute in handleNoDelay function. +// For explain analyze insert/update/delete statement, the analyze executor should be executed in handleNoDelay +// function and then commit transaction if needed. +// Otherwise, in autocommit transaction, the table record change of analyze executor(insert/update/delete...) +// will not be committed. +func (e *ExplainExec) getAnalyzeExecToExecutedNoDelay() Executor { + if e.analyzeExec != nil && !e.executed && e.analyzeExec.Schema().Len() == 0 { + e.executed = true + return e.analyzeExec + } + return nil +} diff --git a/planner/core/integration_test.go b/planner/core/integration_test.go index 901f9f3b6027c..2a57b0e8c0346 100644 --- a/planner/core/integration_test.go +++ b/planner/core/integration_test.go @@ -1365,6 +1365,28 @@ func (s *testIntegrationSerialSuite) TestExplainAnalyzePointGet(c *C) { checkExplain("BatchGet") } +func (s *testIntegrationSerialSuite) TestExplainAnalyzeDML(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t") + tk.MustExec(" create table t (a int, b int, unique index (a));") + tk.MustExec("insert into t values (1,1)") + + res := tk.MustQuery("explain analyze select * from t where a=1;") + checkExplain := func(rpc string) { + resBuff := bytes.NewBufferString("") + for _, row := range res.Rows() { + fmt.Fprintf(resBuff, "%s\n", row) + } + explain := resBuff.String() + c.Assert(strings.Contains(explain, rpc+":{num_rpc:"), IsTrue, Commentf("%s", explain)) + c.Assert(strings.Contains(explain, "total_time:"), IsTrue, Commentf("%s", explain)) + } + checkExplain("Get") + res = tk.MustQuery("explain analyze insert ignore into t values (1,1),(2,2),(3,3),(4,4);") + checkExplain("BatchGet") +} + func (s *testIntegrationSuite) TestPartialBatchPointGet(c *C) { tk := testkit.NewTestKit(c, s.store) tk.MustExec("use test") diff --git a/session/tidb.go b/session/tidb.go index 5e50359956417..9d914407a8eff 100644 --- a/session/tidb.go +++ b/session/tidb.go @@ -325,6 +325,7 @@ func runStmt(ctx context.Context, sctx sessionctx.Context, s sqlexec.Statement) } else { logutil.BgLogger().Error("get txn failed", zap.Error(err1)) } + err = finishStmt(ctx, se, err, s) } if rs != nil { @@ -335,8 +336,6 @@ func runStmt(ctx context.Context, sctx sessionctx.Context, s sqlexec.Statement) }, err } - err = finishStmt(ctx, se, err, s) - if se.hasQuerySpecial() { // The special query will be handled later in handleQuerySpecial, // then should call the ExecStmt.FinishExecuteStmt to finish this statement. From c1a0077950c072219024d6b584e993e969d05d67 Mon Sep 17 00:00:00 2001 From: cfzjywxk Date: Mon, 16 Nov 2020 17:20:56 +0800 Subject: [PATCH 120/229] txn: fix the inconsistency index keys caused by transaction amend for add index (#20904) --- session/pessimistic_test.go | 39 ++++++ session/schema_amender.go | 187 ++++++++++++++++++--------- session/schema_amender_test.go | 229 ++++++++++++++++++--------------- store/tikv/2pc.go | 24 +++- 4 files changed, 313 insertions(+), 166 deletions(-) diff --git a/session/pessimistic_test.go b/session/pessimistic_test.go index 1954b316e1b39..db8d3e11b7132 100644 --- a/session/pessimistic_test.go +++ b/session/pessimistic_test.go @@ -1762,4 +1762,43 @@ func (s *testPessimisticSuite) TestAmendForUniqueIndex(c *C) { tk.MustExec("insert into t1 values(5, 5, 5)") tk.MustExec("commit") tk2.MustExec("admin check table t1") + + // Update the old value with same unique key value, should abort. + tk2.MustExec("drop table if exists t;") + tk2.MustExec("create table t (id int auto_increment primary key, c int);") + tk2.MustExec("insert into t (id, c) values (1, 2), (3, 4);") + tk.MustExec("begin pessimistic") + tk2.MustExec("alter table t add unique index uk(c);") + tk.MustExec("update t set c = 2 where id = 3;") + err = tk.ExecToErr("commit") + c.Assert(err, NotNil) + tk2.MustExec("admin check table t") + + // Update the old value with same unique key, but the row key has changed. + tk2.MustExec("drop table if exists t;") + tk2.MustExec("create table t (id int auto_increment primary key, c int);") + tk2.MustExec("insert into t (id, c) values (1, 2), (3, 4);") + tk.MustExec("begin pessimistic") + tk.MustExec("insert into t values (3, 2) on duplicate key update id = values(id) and c = values(c)") + finishCh := make(chan error) + go func() { + err := tk2.ExecToErr("alter table t add unique index uk(c);") + finishCh <- err + }() + time.Sleep(100 * time.Millisecond) + tk.MustExec("commit") + err = <-finishCh + c.Assert(err, IsNil) + tk2.MustExec("admin check table t") + + // Update the old value with same unique key, but the row key has changed. + tk2.MustExec("drop table if exists t;") + tk2.MustExec("create table t (id int auto_increment primary key, c int);") + tk2.MustExec("insert into t (id, c) values (1, 2), (3, 4);") + tk.MustExec("begin pessimistic") + err = tk2.ExecToErr("alter table t add unique index uk(c);") + c.Assert(err, IsNil) + tk.MustExec("insert into t values (3, 2) on duplicate key update id = values(id) and c = values(c)") + tk.MustExec("commit") + tk2.MustExec("admin check table t") } diff --git a/session/schema_amender.go b/session/schema_amender.go index b85fcc97d2c9f..4e61670149f75 100644 --- a/session/schema_amender.go +++ b/session/schema_amender.go @@ -240,19 +240,12 @@ func (a *amendCollector) collectIndexAmendOps(sctx sessionctx.Context, tblAtStar fieldTypes = append(fieldTypes, &col.FieldType) } opInfo.chk = chunk.NewChunkWithCapacity(fieldTypes, 4) - if addIndexNeedRemoveOp(amendOpType) { - removeIndexOp := &amendOperationDeleteOldIndex{ - info: opInfo, - } - res = append(res, removeIndexOp) - } - if addIndexNeedAddOp(amendOpType) { - addNewIndexOp := &amendOperationAddNewIndex{ - info: opInfo, - processedNewIndexKeys: make(map[string]struct{}), - } - res = append(res, addNewIndexOp) + addNewIndexOp := &amendOperationAddIndex{ + info: opInfo, + insertedNewIndexKeys: make(map[string]struct{}), + deletedOldIndexKeys: make(map[string]struct{}), } + res = append(res, addNewIndexOp) } } return res, nil @@ -281,11 +274,13 @@ func (a *amendCollector) collectTblAmendOps(sctx sessionctx.Context, phyTblID in return nil } -func isDeleteOp(keyOp pb.Op) bool { +// mayGenDelIndexRowKeyOp returns if the row key op could generate Op_Del index key mutations. +func mayGenDelIndexRowKeyOp(keyOp pb.Op) bool { return keyOp == pb.Op_Del || keyOp == pb.Op_Put } -func isInsertOp(keyOp pb.Op) bool { +// mayGenPutIndexRowKeyOp returns if the row key op could generate Op_Put/Op_Insert index key mutations. +func mayGenPutIndexRowKeyOp(keyOp pb.Op) bool { return keyOp == pb.Op_Put || keyOp == pb.Op_Insert } @@ -308,15 +303,14 @@ type amendOperationAddIndexInfo struct { chk *chunk.Chunk } -// amendOperationDeleteOldIndex represents the remove operation will be performed on old key values for add index amend. -type amendOperationDeleteOldIndex struct { +// amendOperationAddIndex represents the add operation will be performed on new key values for add index amend. +type amendOperationAddIndex struct { info *amendOperationAddIndexInfo -} -// amendOperationAddNewIndex represents the add operation will be performed on new key values for add index amend. -type amendOperationAddNewIndex struct { - info *amendOperationAddIndexInfo - processedNewIndexKeys map[string]struct{} + // insertedNewIndexKeys is used to check duplicates for new index generated by unique key. + insertedNewIndexKeys map[string]struct{} + // deletedOldIndexKeys is used to check duplicates for deleted old index keys. + deletedOldIndexKeys map[string]struct{} } func (a *amendOperationAddIndexInfo) String() string { @@ -331,38 +325,76 @@ func (a *amendOperationAddIndexInfo) String() string { return res } -func (a *amendOperationDeleteOldIndex) genMutations(ctx context.Context, sctx sessionctx.Context, - commitMutations tikv.CommitterMutations, kvMap *rowKvMap, resAddMutations *tikv.CommitterMutations) error { +func (a *amendOperationAddIndex) genMutations(ctx context.Context, sctx sessionctx.Context, commitMutations tikv.CommitterMutations, + kvMap *rowKvMap, resAddMutations *tikv.CommitterMutations) error { + // There should be no duplicate keys in deletedOldIndexKeys and insertedNewIndexKeys. + deletedMutations := tikv.NewCommiterMutations(32) + insertedMutations := tikv.NewCommiterMutations(32) for i, key := range commitMutations.GetKeys() { - keyOp := commitMutations.GetOps()[i] if tablecodec.IsIndexKey(key) || tablecodec.DecodeTableID(key) != a.info.tblInfoAtCommit.Meta().ID { continue } - if !isDeleteOp(keyOp) { - continue + var newIdxMutation *tikv.Mutation + var oldIdxMutation *tikv.Mutation + var err error + keyOp := commitMutations.GetOps()[i] + if addIndexNeedRemoveOp(a.info.AmendOpType) { + if mayGenDelIndexRowKeyOp(keyOp) { + oldIdxMutation, err = a.genOldIdxKey(ctx, sctx, key, kvMap.oldRowKvMap) + if err != nil { + return err + } + } } - err := a.processRowKey(ctx, sctx, key, kvMap.oldRowKvMap, resAddMutations) - if err != nil { - return err + if addIndexNeedAddOp(a.info.AmendOpType) { + if mayGenPutIndexRowKeyOp(keyOp) { + newIdxMutation, err = a.genNewIdxKey(ctx, sctx, key, kvMap.newRowKvMap) + if err != nil { + return err + } + } } - } - return nil -} - -func (a *amendOperationAddNewIndex) genMutations(ctx context.Context, sctx sessionctx.Context, commitMutations tikv.CommitterMutations, - kvMap *rowKvMap, resAddMutations *tikv.CommitterMutations) error { - for i, key := range commitMutations.GetKeys() { - keyOp := commitMutations.GetOps()[i] - if tablecodec.IsIndexKey(key) || tablecodec.DecodeTableID(key) != a.info.tblInfoAtCommit.Meta().ID { - continue + skipMerge := false + if a.info.AmendOpType == AmendNeedAddDeleteAndInsert { + // If the old index key is the same with new index key, then the index related row value + // is not changed in this row, we don't need to add or remove index keys for this row. + if oldIdxMutation != nil && newIdxMutation != nil { + if bytes.Equal(oldIdxMutation.Key, newIdxMutation.Key) { + skipMerge = true + } + } } - if !isInsertOp(keyOp) { - continue + if !skipMerge { + if oldIdxMutation != nil { + deletedMutations.AppendMutation(*oldIdxMutation) + } + if newIdxMutation != nil { + insertedMutations.AppendMutation(*newIdxMutation) + } } - err := a.processRowKey(ctx, sctx, key, kvMap.newRowKvMap, resAddMutations) - if err != nil { - return err + } + // For unique index, there may be conflicts on the same unique index key from different rows.Consider a update statement, + // "Op_Del" on row_key = 3, row_val = 4, the "Op_Del" unique_key_4 -> nil will be generated. + // "Op_Put" on row_key = 0, row_val = 4, the "Op_Insert" unique_key_4 -> 0 will be generated. + // The "Op_Insert" should cover the "Op_Del" otherwise the new put row value will not have a correspond index value. + if a.info.indexInfoAtCommit.Meta().Unique { + for i := 0; i < len(deletedMutations.GetKeys()); i++ { + key := deletedMutations.GetKeys()[i] + if _, ok := a.insertedNewIndexKeys[string(key)]; !ok { + resAddMutations.Push(deletedMutations.GetOps()[i], key, deletedMutations.GetValues()[i], deletedMutations.GetPessimisticFlags()[i]) + } + } + for i := 0; i < len(insertedMutations.GetKeys()); i++ { + key := insertedMutations.GetKeys()[i] + destKeyOp := pb.Op_Insert + if _, ok := a.deletedOldIndexKeys[string(key)]; ok { + destKeyOp = pb.Op_Put + } + resAddMutations.Push(destKeyOp, key, insertedMutations.GetValues()[i], insertedMutations.GetPessimisticFlags()[i]) } + } else { + resAddMutations.MergeMutations(deletedMutations) + resAddMutations.MergeMutations(insertedMutations) } return nil } @@ -411,50 +443,59 @@ func (a *amendOperationAddIndexInfo) genIndexKeyValue(ctx context.Context, sctx return newIdxKey, newIdxVal, nil } -func (a *amendOperationAddNewIndex) processRowKey(ctx context.Context, sctx sessionctx.Context, key []byte, - kvMap map[string][]byte, resAddMutations *tikv.CommitterMutations) error { +func (a *amendOperationAddIndex) genNewIdxKey(ctx context.Context, sctx sessionctx.Context, key []byte, + kvMap map[string][]byte) (*tikv.Mutation, error) { kvHandle, err := tablecodec.DecodeRowKey(key) if err != nil { logutil.Logger(ctx).Error("decode key error", zap.String("key", hex.EncodeToString(key)), zap.Error(err)) - return errors.Trace(err) + return nil, errors.Trace(err) } newIdxKey, newIdxValue, err := a.info.genIndexKeyValue(ctx, sctx, kvMap, key, kvHandle, false) if err != nil { - return errors.Trace(err) + return nil, errors.Trace(err) } newIndexOp := pb.Op_Put isPessimisticLock := false + if _, ok := a.insertedNewIndexKeys[string(newIdxKey)]; ok { + return nil, errors.Trace(errors.Errorf("amend process key same key=%v found for index=%v in table=%v", + newIdxKey, a.info.indexInfoAtCommit.Meta().Name, a.info.tblInfoAtCommit.Meta().Name)) + } if a.info.indexInfoAtCommit.Meta().Unique { - if _, ok := a.processedNewIndexKeys[string(newIdxKey)]; ok { - return errors.Trace(errors.Errorf("amend process key same key=%v found for unique index=%v in table=%v", - newIdxKey, a.info.indexInfoAtCommit.Meta().Name, a.info.tblInfoAtCommit.Meta().Name)) - } newIndexOp = pb.Op_Insert isPessimisticLock = true } - a.processedNewIndexKeys[string(newIdxKey)] = struct{}{} - resAddMutations.Push(newIndexOp, newIdxKey, newIdxValue, isPessimisticLock) - return nil + a.insertedNewIndexKeys[string(newIdxKey)] = struct{}{} + newMutation := &tikv.Mutation{KeyOp: newIndexOp, Key: newIdxKey, Value: newIdxValue, IsPessimisticLock: isPessimisticLock} + return newMutation, nil } -func (a *amendOperationDeleteOldIndex) processRowKey(ctx context.Context, sctx sessionctx.Context, key []byte, - oldValKvMap map[string][]byte, resAddMutations *tikv.CommitterMutations) error { +func (a *amendOperationAddIndex) genOldIdxKey(ctx context.Context, sctx sessionctx.Context, key []byte, + oldValKvMap map[string][]byte) (*tikv.Mutation, error) { kvHandle, err := tablecodec.DecodeRowKey(key) if err != nil { logutil.Logger(ctx).Error("decode key error", zap.String("key", hex.EncodeToString(key)), zap.Error(err)) - return errors.Trace(err) + return nil, errors.Trace(err) } // Generated delete index key value. newIdxKey, emptyVal, err := a.info.genIndexKeyValue(ctx, sctx, oldValKvMap, key, kvHandle, true) if err != nil { - return errors.Trace(err) + return nil, errors.Trace(err) } // For Op_Put the key may not exist in old key value map. if len(newIdxKey) > 0 { - resAddMutations.Push(pb.Op_Del, newIdxKey, emptyVal, false) + isPessimisticLock := false + if _, ok := a.deletedOldIndexKeys[string(newIdxKey)]; ok { + return nil, errors.Trace(errors.Errorf("amend process key same key=%v found for index=%v in table=%v", + newIdxKey, a.info.indexInfoAtCommit.Meta().Name, a.info.tblInfoAtCommit.Meta().Name)) + } + if a.info.indexInfoAtCommit.Meta().Unique { + isPessimisticLock = true + } + a.deletedOldIndexKeys[string(newIdxKey)] = struct{}{} + return &tikv.Mutation{KeyOp: pb.Op_Del, Key: newIdxKey, Value: emptyVal, IsPessimisticLock: isPessimisticLock}, nil } - return nil + return nil, nil } // SchemaAmender is used to amend pessimistic transactions for schema change. @@ -534,6 +575,26 @@ func (s *SchemaAmender) prepareKvMap(ctx context.Context, commitMutations tikv.C return res, nil } +func (s *SchemaAmender) checkDupKeys(ctx context.Context, mutations *tikv.CommitterMutations) error { + // Check if there are duplicate key entries. + checkMap := make(map[string]pb.Op) + for i := 0; i < len(mutations.GetKeys()); i++ { + key := mutations.GetKeys()[i] + keyOp := mutations.GetOps()[i] + keyVal := mutations.GetValues()[i] + if foundOp, ok := checkMap[string(key)]; ok { + logutil.Logger(ctx).Error("duplicate key found in amend result mutations", + zap.Stringer("key", kv.Key(key)), + zap.Stringer("foundKeyOp", foundOp), + zap.Stringer("thisKeyOp", keyOp), + zap.Stringer("thisKeyValue", kv.Key(keyVal))) + return errors.Trace(errors.Errorf("duplicate key=%s is found in mutations", kv.Key(key).String())) + } + checkMap[string(key)] = keyOp + } + return nil +} + // genAllAmendMutations generates CommitterMutations for all tables and related amend operations. func (s *SchemaAmender) genAllAmendMutations(ctx context.Context, commitMutations tikv.CommitterMutations, info *amendCollector) (*tikv.CommitterMutations, error) { @@ -551,6 +612,10 @@ func (s *SchemaAmender) genAllAmendMutations(ctx context.Context, commitMutation } } } + err = s.checkDupKeys(ctx, &resultNewMutations) + if err != nil { + return nil, err + } return &resultNewMutations, nil } diff --git a/session/schema_amender_test.go b/session/schema_amender_test.go index 69dc5caf36985..905148b4360cc 100644 --- a/session/schema_amender_test.go +++ b/session/schema_amender_test.go @@ -31,7 +31,9 @@ import ( "github.com/pingcap/tidb/table" "github.com/pingcap/tidb/tablecodec" "github.com/pingcap/tidb/types" + "github.com/pingcap/tidb/util/logutil" "github.com/pingcap/tidb/util/rowcodec" + "go.uber.org/zap" ) var _ = SerialSuites(&testSchemaAmenderSuite{}) @@ -89,7 +91,7 @@ type data struct { // Generate exist old data and new data in transaction to be amended. Also generate the expected amend mutations // according to the old and new data and the full generated expected mutations. func prepareTestData(se *session, mutations *tikv.CommitterMutations, oldTblInfo table.Table, newTblInfo table.Table, - expectedAmendOps []amendOp, c *C) (*data, *data, tikv.CommitterMutations) { + expectedAmendOps []amendOp, c *C) (*data, tikv.CommitterMutations) { var err error // Generated test data. colIds := make([]int64, len(oldTblInfo.Meta().Columns)) @@ -104,29 +106,36 @@ func prepareTestData(se *session, mutations *tikv.CommitterMutations, oldTblInfo } KeyOps := []kvrpcpb.Op{kvrpcpb.Op_Put, kvrpcpb.Op_Del, kvrpcpb.Op_Lock, kvrpcpb.Op_Insert, kvrpcpb.Op_Put, kvrpcpb.Op_Del, kvrpcpb.Op_Insert, kvrpcpb.Op_Lock} - oldRowValues := make([][]types.Datum, len(KeyOps)) - newRowValues := make([][]types.Datum, len(KeyOps)) + numberOfRows := len(KeyOps) + oldRowValues := make([][]types.Datum, numberOfRows) + newRowValues := make([][]types.Datum, numberOfRows) rd := rowcodec.Encoder{Enable: true} - newData := &data{} oldData := &data{} expecteMutations := tikv.NewCommiterMutations(8) + oldRowKvMap := make(map[string][]types.Datum) + newRowKvMap := make(map[string][]types.Datum) + // colIdx: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. + // column: a, b, c, d, e, c_str, d_str, e_str, f, g. // Generate old data. - for i := 0; i < len(KeyOps); i++ { + for i := 0; i < numberOfRows; i++ { keyOp := KeyOps[i] thisRowValue := make([]types.Datum, len(basicRowValue)) copy(thisRowValue, basicRowValue) thisRowValue[0] = types.NewIntDatum(int64(i + 1)) thisRowValue[4] = types.NewIntDatum(int64(i + 1 + 4)) + // f_g has a unique index. + thisRowValue[8] = types.NewIntDatum(int64(i + 1 + 8)) - // Save old data. + // Save old data, they will be put into db first. rowKey := tablecodec.EncodeRowKeyWithHandle(oldTblInfo.Meta().ID, int64(i+1)) var rowValue []byte rowValue, err = rd.Encode(se.sessionVars.StmtCtx, colIds, thisRowValue, nil) c.Assert(err, IsNil) - if keyOp == kvrpcpb.Op_Del || keyOp == kvrpcpb.Op_Put { + if keyOp == kvrpcpb.Op_Del || keyOp == kvrpcpb.Op_Put || keyOp == kvrpcpb.Op_Lock { // Skip the last Op_put, it has no old row value. if i == 4 { + oldRowValues[i] = nil continue } oldData.keys = append(oldData.keys, rowKey) @@ -134,14 +143,15 @@ func prepareTestData(se *session, mutations *tikv.CommitterMutations, oldTblInfo oldData.ops = append(oldData.ops, keyOp) oldData.rowValue = append(oldData.rowValue, thisRowValue) if keyOp == kvrpcpb.Op_Del { - mutations.Push(keyOp, rowKey, nil, true) + mutations.Push(keyOp, rowKey, []byte{}, true) } } oldRowValues[i] = thisRowValue + oldRowKvMap[string(rowKey)] = thisRowValue } // Generate new data. - for i := 0; i < len(KeyOps); i++ { + for i := 0; i < numberOfRows; i++ { keyOp := KeyOps[i] thisRowValue := make([]types.Datum, len(basicRowValue)) copy(thisRowValue, basicRowValue) @@ -159,38 +169,29 @@ func prepareTestData(se *session, mutations *tikv.CommitterMutations, oldTblInfo } else { rowValue, err = rd.Encode(se.sessionVars.StmtCtx, colIds, thisRowValue, nil) } + c.Assert(err, IsNil) if keyOp == kvrpcpb.Op_Put || keyOp == kvrpcpb.Op_Insert { - newData.keys = append(newData.keys, rowKey) - newData.values = append(newData.values, rowValue) - newData.ops = append(newData.ops, keyOp) - newData.rowValue = append(newData.rowValue, thisRowValue) mutations.Push(keyOp, rowKey, rowValue, true) } else if keyOp == kvrpcpb.Op_Lock { mutations.Push(keyOp, rowKey, []byte{}, true) } newRowValues[i] = thisRowValue + newRowKvMap[string(rowKey)] = thisRowValue } - // Prepare expected results. + // Prepare expected result mutations. for _, op := range expectedAmendOps { - var oldOp *amendOperationDeleteOldIndex - var newOp *amendOperationAddNewIndex var info *amendOperationAddIndexInfo - var ok bool - oldOp, ok = op.(*amendOperationDeleteOldIndex) - if ok { - info = oldOp.info - } else { - newOp = op.(*amendOperationAddNewIndex) - info = newOp.info - } + expectedOp, ok := op.(*amendOperationAddIndex) + c.Assert(ok, IsTrue) + info = expectedOp.info var idxVal []byte genIndexKV := func(inputRow []types.Datum) ([]byte, []byte) { indexDatums := make([]types.Datum, len(info.relatedOldIdxCols)) for colIdx, col := range info.relatedOldIdxCols { indexDatums[colIdx] = inputRow[col.Offset] } - kvHandle := int64(inputRow[0].GetInt64()) + kvHandle := inputRow[0].GetInt64() idxKey, _, err := tablecodec.GenIndexKey(se.sessionVars.StmtCtx, newTblInfo.Meta(), info.indexInfoAtCommit.Meta(), newTblInfo.Meta().ID, indexDatums, kvHandle, nil) c.Assert(err, IsNil) @@ -199,37 +200,53 @@ func prepareTestData(se *session, mutations *tikv.CommitterMutations, oldTblInfo c.Assert(err, IsNil) return idxKey, idxVal } - _, ok = op.(*amendOperationDeleteOldIndex) - if ok { - c.Assert(addIndexNeedRemoveOp(info.AmendOpType), IsTrue) - for i := range oldData.keys { - if addIndexNeedRemoveOp(info.AmendOpType) && isDeleteOp(oldData.ops[i]) { - thisRowValue := oldData.rowValue[i] + for i := 0; i < len(mutations.GetKeys()); i++ { + oldIdxKeyMutation := tikv.CommitterMutations{} + newIdxKeyMutation := tikv.CommitterMutations{} + key := mutations.GetKeys()[i] + keyOp := mutations.GetOps()[i] + if addIndexNeedRemoveOp(info.AmendOpType) && mayGenDelIndexRowKeyOp(keyOp) { + thisRowValue := oldRowKvMap[string(key)] + if len(thisRowValue) > 0 { idxKey, _ := genIndexKV(thisRowValue) - expecteMutations.Push(kvrpcpb.Op_Del, idxKey, []byte{}, false) - } - } - } - _, ok = op.(*amendOperationAddNewIndex) - if ok { - c.Assert(addIndexNeedAddOp(info.AmendOpType), IsTrue) - for i := range newData.keys { - if addIndexNeedAddOp(info.AmendOpType) && isInsertOp(newData.ops[i]) { - thisRowValue := newData.rowValue[i] - idxKey, idxVal := genIndexKV(thisRowValue) - c.Assert(err, IsNil) - mutOp := kvrpcpb.Op_Put isPessimisticLock := false if info.indexInfoAtCommit.Meta().Unique { - mutOp = kvrpcpb.Op_Insert isPessimisticLock = true } - expecteMutations.Push(mutOp, idxKey, idxVal, isPessimisticLock) + oldIdxKeyMutation.Push(kvrpcpb.Op_Del, idxKey, []byte{}, isPessimisticLock) + } + } + if addIndexNeedAddOp(info.AmendOpType) && mayGenPutIndexRowKeyOp(keyOp) { + thisRowValue := newRowKvMap[string(key)] + idxKey, idxVal := genIndexKV(thisRowValue) + mutOp := kvrpcpb.Op_Put + isPessimisticLock := false + if info.indexInfoAtCommit.Meta().Unique { + mutOp = kvrpcpb.Op_Insert + isPessimisticLock = true + } + newIdxKeyMutation.Push(mutOp, idxKey, idxVal, isPessimisticLock) + } + skipMerge := false + if info.AmendOpType == AmendNeedAddDeleteAndInsert { + if len(oldIdxKeyMutation.GetKeys()) > 0 && len(newIdxKeyMutation.GetKeys()) > 0 { + if bytes.Equal(oldIdxKeyMutation.GetKeys()[0], newIdxKeyMutation.GetKeys()[0]) { + skipMerge = true + } + } + } + if !skipMerge { + if len(oldIdxKeyMutation.GetKeys()) > 0 { + expecteMutations.MergeMutations(oldIdxKeyMutation) + } + if len(newIdxKeyMutation.GetKeys()) > 0 { + expecteMutations.MergeMutations(newIdxKeyMutation) } } } } - return newData, oldData, expecteMutations + + return oldData, expecteMutations } func (s *testSchemaAmenderSuite) TestAmendCollectAndGenMutations(c *C) { @@ -241,7 +258,7 @@ func (s *testSchemaAmenderSuite) TestAmendCollectAndGenMutations(c *C) { parser: parser.New(), sessionVars: variable.NewSessionVars(), } - startStates := []model.SchemaState{model.StateNone, model.StateDeleteOnly} + startStates := []model.SchemaState{model.StateNone, model.StateDeleteOnly, model.StateWriteOnly, model.StateWriteReorganization} for _, startState := range startStates { endStatMap := ConstOpAddIndex[startState] var endStates []model.SchemaState @@ -250,6 +267,7 @@ func (s *testSchemaAmenderSuite) TestAmendCollectAndGenMutations(c *C) { } sort.Slice(endStates, func(i, j int) bool { return endStates[i] < endStates[j] }) for _, endState := range endStates { + logutil.BgLogger().Info("[TEST]>>>>>>new round test", zap.Stringer("start", startState), zap.Stringer("end", endState)) // column: a, b, c, d, e, c_str, d_str, e_str, f, g. // PK: a. // indices: c_d_e, e, f, g, f_g, c_d_e_str, c_d_e_str_prefix. @@ -292,7 +310,7 @@ func (s *testSchemaAmenderSuite) TestAmendCollectAndGenMutations(c *C) { tblID := int64(1) err = collector.collectTblAmendOps(se, tblID, oldTbInfo, newTblInfo, 1< 0 { pessimisticLockBo := NewBackofferWithVars(ctx, pessimisticLockMaxBackoff, c.txn.vars) lCtx := &kv.LockCtx{ From 8d6161c647aa755ac4758656a3c7ab348d4f4bf6 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Tue, 17 Nov 2020 11:15:27 +0800 Subject: [PATCH 121/229] planner: disable LOCK IN SHARE MODE by default (#19506) (#21005) Signed-off-by: ti-srebot --- expression/integration_test.go | 13 +++++++++++++ planner/core/logical_plan_builder.go | 6 +++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/expression/integration_test.go b/expression/integration_test.go index 4e1d1d3466717..81777a965d8ca 100755 --- a/expression/integration_test.go +++ b/expression/integration_test.go @@ -6980,6 +6980,19 @@ func (s *testIntegrationSerialSuite) TestIssue19045(c *C) { tk.MustQuery(`select ( SELECT t1.a FROM t1, t2 WHERE t1.b = t2.a AND t2.b = '03' AND t1.c = a.a) invode from t a ;`).Check(testkit.Rows("a011", "a011")) } +func (s *testIntegrationSerialSuite) TestIssue19383(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk.MustExec("DROP TABLE IF EXISTS t1") + tk.MustExec("CREATE TABLE t1 (a INT NOT NULL PRIMARY KEY)") + tk.MustExec("INSERT INTO t1 VALUES (1),(2),(3)") + _, err := tk.Exec("SELECT * FROM t1 LOCK IN SHARE MODE") + message := `function LOCK IN SHARE MODE has only noop implementation in tidb now, use tidb_enable_noop_functions to enable these functions` + c.Assert(strings.Contains(err.Error(), message), IsTrue) + tk.MustExec("SET tidb_enable_noop_functions=1") + tk.MustExec("SELECT * FROM t1 LOCK IN SHARE MODE") +} + func (s *testIntegrationSerialSuite) TestIssue19315(c *C) { tk := testkit.NewTestKit(c, s.store) tk.MustExec("use test") diff --git a/planner/core/logical_plan_builder.go b/planner/core/logical_plan_builder.go index 0bef4438aedbe..5c3a3bc7fbbeb 100644 --- a/planner/core/logical_plan_builder.go +++ b/planner/core/logical_plan_builder.go @@ -2503,7 +2503,7 @@ func (b *PlanBuilder) buildSelect(ctx context.Context, sel *ast.SelectStmt) (p L // table hints are only visible in the current SELECT statement. b.popTableHints() }() - + enableNoopFuncs := b.ctx.GetSessionVars().EnableNoopFuncs if sel.SelectStmtOpts != nil { origin := b.inStraightJoin b.inStraightJoin = sel.SelectStmtOpts.StraightJoin @@ -2572,6 +2572,10 @@ func (b *PlanBuilder) buildSelect(ctx context.Context, sel *ast.SelectStmt) (p L } if sel.LockTp != ast.SelectLockNone { + if sel.LockTp == ast.SelectLockInShareMode && !enableNoopFuncs { + err = expression.ErrFunctionsNoopImpl.GenWithStackByArgs("LOCK IN SHARE MODE") + return nil, err + } p = b.buildSelectLock(p, sel.LockTp) } b.handleHelper.popMap() From d9ecb94f9a6f79641c36c6dcc2b386333c0301a3 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Tue, 17 Nov 2020 11:30:56 +0800 Subject: [PATCH 122/229] executor, planner: fix some cases for natural_using_join (#20977) (#21021) Signed-off-by: ti-srebot --- executor/join_test.go | 46 ++++++++++ planner/core/expression_rewriter.go | 37 +++++--- planner/core/logical_plan_builder.go | 124 +++++++++++++++++++-------- planner/core/logical_plans.go | 2 +- 4 files changed, 163 insertions(+), 46 deletions(-) diff --git a/executor/join_test.go b/executor/join_test.go index 949b908b8d718..50311f4adc840 100644 --- a/executor/join_test.go +++ b/executor/join_test.go @@ -584,6 +584,52 @@ func (s *testSuiteJoin1) TestUsing(c *C) { tk.MustExec("create table tt(b bigint, a int)") // Check whether this sql can execute successfully. tk.MustExec("select * from t join tt using(a)") + + tk.MustExec("drop table if exists t, s") + tk.MustExec("create table t(a int, b int)") + tk.MustExec("create table s(b int, a int)") + tk.MustExec("insert into t values(1,1), (2,2), (3,3), (null,null)") + tk.MustExec("insert into s values(1,1), (3,3), (null,null)") + + // For issue 20477 + tk.MustQuery("select t.*, s.* from t join s using(a)").Check(testkit.Rows("1 1 1 1", "3 3 3 3")) + tk.MustQuery("select s.a from t join s using(a)").Check(testkit.Rows("1", "3")) + tk.MustQuery("select s.a from t join s using(a) where s.a > 1").Check(testkit.Rows("3")) + tk.MustQuery("select s.a from t join s using(a) order by s.a").Check(testkit.Rows("1", "3")) + tk.MustQuery("select s.a from t join s using(a) where s.a > 1 order by s.a").Check(testkit.Rows("3")) + tk.MustQuery("select s.a from t join s using(a) where s.a > 1 order by s.a limit 2").Check(testkit.Rows("3")) + + // For issue 20441 + tk.MustExec(`DROP TABLE if exists t1, t2, t3`) + tk.MustExec(`create table t1 (i int)`) + tk.MustExec(`create table t2 (i int)`) + tk.MustExec(`create table t3 (i int)`) + tk.MustExec(`select * from t1,t2 natural left join t3 order by t1.i,t2.i,t3.i`) + tk.MustExec(`select t1.i,t2.i,t3.i from t2 natural left join t3,t1 order by t1.i,t2.i,t3.i`) + tk.MustExec(`select * from t1,t2 natural right join t3 order by t1.i,t2.i,t3.i`) + tk.MustExec(`select t1.i,t2.i,t3.i from t2 natural right join t3,t1 order by t1.i,t2.i,t3.i`) + + // For issue 15844 + tk.MustExec(`DROP TABLE if exists t0, t1`) + tk.MustExec(`CREATE TABLE t0(c0 INT)`) + tk.MustExec(`CREATE TABLE t1(c0 INT)`) + tk.MustExec(`SELECT t0.c0 FROM t0 NATURAL RIGHT JOIN t1 WHERE t1.c0`) + + // For issue 20958 + tk.MustExec(`DROP TABLE if exists t1, t2`) + tk.MustExec(`create table t1(id int, name varchar(20));`) + tk.MustExec(`create table t2(id int, address varchar(30));`) + tk.MustExec(`insert into t1 values(1,'gangshen');`) + tk.MustExec(`insert into t2 values(1,'HangZhou');`) + tk.MustQuery(`select t2.* from t1 inner join t2 using (id) limit 1;`).Check(testkit.Rows("1 HangZhou")) + tk.MustQuery(`select t2.* from t1 inner join t2 on t1.id = t2.id limit 1;`).Check(testkit.Rows("1 HangZhou")) + + // For issue 20476 + tk.MustExec("drop table if exists t1") + tk.MustExec("create table t1(a int)") + tk.MustExec("insert into t1 (a) values(1)") + tk.MustQuery("select t1.*, t2.* from t1 join t1 t2 using(a)").Check(testkit.Rows("1 1")) + tk.MustQuery("select * from t1 join t1 t2 using(a)").Check(testkit.Rows("1")) } func (s *testSuiteJoin1) TestNaturalJoin(c *C) { diff --git a/planner/core/expression_rewriter.go b/planner/core/expression_rewriter.go index 90cd0646cf9be..e730329951e91 100644 --- a/planner/core/expression_rewriter.go +++ b/planner/core/expression_rewriter.go @@ -1634,27 +1634,42 @@ func (er *expressionRewriter) toColumn(v *ast.ColumnName) { return } } - if join, ok := er.p.(*LogicalJoin); ok && join.redundantSchema != nil { - idx, err := expression.FindFieldName(join.redundantNames, v) - if err != nil { - er.err = err - return - } - if idx >= 0 { - er.ctxStackAppend(join.redundantSchema.Columns[idx], join.redundantNames[idx]) - return - } - } if _, ok := er.p.(*LogicalUnionAll); ok && v.Table.O != "" { er.err = ErrTablenameNotAllowedHere.GenWithStackByArgs(v.Table.O, "SELECT", clauseMsg[er.b.curClause]) return } + col, name, err := findFieldNameFromNaturalUsingJoin(er.p, v) + if err != nil { + er.err = err + return + } else if col != nil { + er.ctxStackAppend(col, name) + return + } if er.b.curClause == globalOrderByClause { er.b.curClause = orderByClause } er.err = ErrUnknownColumn.GenWithStackByArgs(v.String(), clauseMsg[er.b.curClause]) } +func findFieldNameFromNaturalUsingJoin(p LogicalPlan, v *ast.ColumnName) (col *expression.Column, name *types.FieldName, err error) { + switch x := p.(type) { + case *LogicalLimit, *LogicalSelection, *LogicalTopN, *LogicalSort, *LogicalMaxOneRow: + return findFieldNameFromNaturalUsingJoin(p.Children()[0], v) + case *LogicalJoin: + if x.redundantSchema != nil { + idx, err := expression.FindFieldName(x.redundantNames, v) + if err != nil { + return nil, nil, err + } + if idx >= 0 { + return x.redundantSchema.Columns[idx], x.redundantNames[idx], nil + } + } + } + return nil, nil, nil +} + func (er *expressionRewriter) evalDefaultExpr(v *ast.DefaultExpr) { stkLen := len(er.ctxStack) name := er.ctxNameStk[stkLen-1] diff --git a/planner/core/logical_plan_builder.go b/planner/core/logical_plan_builder.go index 5c3a3bc7fbbeb..be87c8d1be803 100644 --- a/planner/core/logical_plan_builder.go +++ b/planner/core/logical_plan_builder.go @@ -812,8 +812,19 @@ func (b *PlanBuilder) coalesceCommonColumns(p *LogicalJoin, leftPlan, rightPlan p.SetSchema(expression.NewSchema(schemaCols...)) p.names = names - p.redundantSchema = expression.MergeSchema(p.redundantSchema, expression.NewSchema(rColumns[:commonLen]...)) - p.redundantNames = append(p.redundantNames.Shallow(), rNames[:commonLen]...) + if joinTp == ast.RightJoin { + leftPlan, rightPlan = rightPlan, leftPlan + } + // We record the full `rightPlan.Schema` as `redundantSchema` in order to + // record the redundant column in `rightPlan` and the output columns order + // of the `rightPlan`. + // For SQL like `select t1.*, t2.* from t1 left join t2 using(a)`, we can + // retrieve the column order of `t2.*` from the `redundantSchema`. + p.redundantSchema = expression.MergeSchema(p.redundantSchema, expression.NewSchema(rightPlan.Schema().Clone().Columns...)) + p.redundantNames = append(p.redundantNames.Shallow(), rightPlan.OutputNames().Shallow()...) + if joinTp == ast.RightJoin || joinTp == ast.LeftJoin { + resetNotNullFlag(p.redundantSchema, 0, p.redundantSchema.Len()) + } p.OtherConditions = append(conds, p.OtherConditions...) return nil @@ -954,12 +965,8 @@ func (b *PlanBuilder) buildProjectionField(ctx context.Context, p LogicalPlan, f idx := p.Schema().ColumnIndex(col) var name *types.FieldName // The column maybe the one from join's redundant part. - // TODO: Fully support USING/NATURAL JOIN, refactor here. if idx == -1 { - if join, ok := p.(*LogicalJoin); ok { - idx = join.redundantSchema.ColumnIndex(col) - name = join.redundantNames[idx] - } + name = findColFromNaturalUsingJoin(p, col) } else { name = p.OutputNames()[idx] } @@ -991,6 +998,25 @@ func (b *PlanBuilder) buildProjectionField(ctx context.Context, p LogicalPlan, f return newCol, name, nil } +// findColFromNaturalUsingJoin is used to recursively find the column from the +// underlying natural-using-join. +// e.g. For SQL like `select t2.a from t1 join t2 using(a) where t2.a > 0`, the +// plan will be `join->selection->projection`. The schema of the `selection` +// will be `[t1.a]`, thus we need to recursively retrieve the `t2.a` from the +// underlying join. +func findColFromNaturalUsingJoin(p LogicalPlan, col *expression.Column) (name *types.FieldName) { + switch x := p.(type) { + case *LogicalLimit, *LogicalSelection, *LogicalTopN, *LogicalSort, *LogicalMaxOneRow: + return findColFromNaturalUsingJoin(p.Children()[0], col) + case *LogicalJoin: + if x.redundantSchema != nil { + idx := x.redundantSchema.ColumnIndex(col) + return x.redundantNames[idx] + } + } + return nil +} + // buildProjection returns a Projection plan and non-aux columns length. func (b *PlanBuilder) buildProjection(ctx context.Context, p LogicalPlan, fields []*ast.SelectField, mapper map[*ast.AggregateFuncExpr]int, windowMapper map[*ast.WindowFuncExpr]int, considerWindow bool, expandGenerateColumn bool) (LogicalPlan, int, error) { b.optFlag |= flagEliminateProjection @@ -1504,14 +1530,30 @@ func (a *havingWindowAndOrderbyExprResolver) resolveFromPlan(v *ast.ColumnNameEx if err != nil { return -1, err } + schemaCols, outputNames := p.Schema().Columns, p.OutputNames() if idx < 0 { - return -1, nil + // For SQL like `select t2.a from t1 join t2 using(a) where t2.a > 0 + // order by t2.a`, the query plan will be `join->selection->sort`. The + // schema of selection will be `[t1.a]`, thus we need to recursively + // retrieve the `t2.a` from the underlying join. + switch x := p.(type) { + case *LogicalLimit, *LogicalSelection, *LogicalTopN, *LogicalSort, *LogicalMaxOneRow: + return a.resolveFromPlan(v, p.Children()[0]) + case *LogicalJoin: + if len(x.redundantNames) != 0 { + idx, err = expression.FindFieldName(x.redundantNames, v.Name) + schemaCols, outputNames = x.redundantSchema.Columns, x.redundantNames + } + } + if err != nil || idx < 0 { + return -1, err + } } - col := p.Schema().Columns[idx] + col := schemaCols[idx] if col.IsHidden { return -1, ErrUnknownColumn.GenWithStackByArgs(v.Name, clauseMsg[a.curClause]) } - name := p.OutputNames()[idx] + name := outputNames[idx] newColName := &ast.ColumnName{ Schema: name.DBName, Table: name.TblName, @@ -2259,6 +2301,7 @@ func (b *PlanBuilder) resolveGbyExprs(ctx context.Context, p LogicalPlan, gby *a } func (b *PlanBuilder) unfoldWildStar(p LogicalPlan, selectFields []*ast.SelectField) (resultList []*ast.SelectField, err error) { + join, isJoin := p.(*LogicalJoin) for i, field := range selectFields { if field.WildCard == nil { resultList = append(resultList, field) @@ -2267,37 +2310,50 @@ func (b *PlanBuilder) unfoldWildStar(p LogicalPlan, selectFields []*ast.SelectFi if field.WildCard.Table.L == "" && i > 0 { return nil, ErrInvalidWildCard } - dbName := field.WildCard.Schema - tblName := field.WildCard.Table - findTblNameInSchema := false - for i, name := range p.OutputNames() { - col := p.Schema().Columns[i] - if col.IsHidden { - continue - } - if (dbName.L == "" || dbName.L == name.DBName.L) && - (tblName.L == "" || tblName.L == name.TblName.L) && - col.ID != model.ExtraHandleID { - findTblNameInSchema = true - colName := &ast.ColumnNameExpr{ - Name: &ast.ColumnName{ - Schema: name.DBName, - Table: name.TblName, - Name: name.ColName, - }} - colName.SetType(col.GetType()) - field := &ast.SelectField{Expr: colName} - field.SetText(name.ColName.O) - resultList = append(resultList, field) + list := unfoldWildStar(field, p.OutputNames(), p.Schema().Columns) + // For sql like `select t1.*, t2.* from t1 join t2 using(a)`, we should + // not coalesce the `t2.a` in the output result. Thus we need to unfold + // the wildstar from the underlying join.redundantSchema. + if isJoin && join.redundantSchema != nil && field.WildCard.Table.L != "" { + redundantList := unfoldWildStar(field, join.redundantNames, join.redundantSchema.Columns) + if len(redundantList) > len(list) { + list = redundantList } } - if !findTblNameInSchema { - return nil, ErrBadTable.GenWithStackByArgs(tblName) + if len(list) == 0 { + return nil, ErrBadTable.GenWithStackByArgs(field.WildCard.Table) } + resultList = append(resultList, list...) } return resultList, nil } +func unfoldWildStar(field *ast.SelectField, outputName types.NameSlice, column []*expression.Column) (resultList []*ast.SelectField) { + dbName := field.WildCard.Schema + tblName := field.WildCard.Table + for i, name := range outputName { + col := column[i] + if col.IsHidden { + continue + } + if (dbName.L == "" || dbName.L == name.DBName.L) && + (tblName.L == "" || tblName.L == name.TblName.L) && + col.ID != model.ExtraHandleID { + colName := &ast.ColumnNameExpr{ + Name: &ast.ColumnName{ + Schema: name.DBName, + Table: name.TblName, + Name: name.ColName, + }} + colName.SetType(col.GetType()) + field := &ast.SelectField{Expr: colName} + field.SetText(name.ColName.O) + resultList = append(resultList, field) + } + } + return resultList +} + func (b *PlanBuilder) pushHintWithoutTableWarning(hint *ast.TableOptimizerHint) { var sb strings.Builder ctx := format.NewRestoreCtx(0, &sb) diff --git a/planner/core/logical_plans.go b/planner/core/logical_plans.go index bf1a946b699a9..4cad55402ce8c 100644 --- a/planner/core/logical_plans.go +++ b/planner/core/logical_plans.go @@ -144,7 +144,7 @@ type LogicalJoin struct { DefaultValues []types.Datum // redundantSchema contains columns which are eliminated in join. - // For select * from a join b using (c); a.c will in output schema, and b.c will in redundantSchema. + // For select * from a join b using (c); a.c will in output schema, and b.c will only in redundantSchema. redundantSchema *expression.Schema redundantNames types.NameSlice From 86082264599b67bee8d08d2fb25d6688a1c3b521 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Tue, 17 Nov 2020 15:14:52 +0800 Subject: [PATCH 123/229] util, executor: parse set value correctly in HashChunkRow (#21048) (#21081) --- executor/join_test.go | 13 +++++++++++++ util/codec/codec.go | 16 ++++++++++------ util/codec/codec_test.go | 1 + 3 files changed, 24 insertions(+), 6 deletions(-) diff --git a/executor/join_test.go b/executor/join_test.go index 50311f4adc840..a2ed4297d1242 100644 --- a/executor/join_test.go +++ b/executor/join_test.go @@ -2397,3 +2397,16 @@ func (s *testSuiteJoinSerial) TestIssue20779(c *C) { _, err = session.GetRows4Test(context.Background(), nil, rs) c.Assert(err.Error(), Matches, "testIssue20779") } + +func (s *testSuiteJoinSerial) TestIssue20219(c *C) { + tk := testkit.NewTestKitWithInit(c, s.store) + tk.MustExec("drop table if exists t,s ") + tk.MustExec("CREATE TABLE `t` ( `a` set('a','b','c','d','e','f','g','h','i','j') DEFAULT NULL );") + tk.MustExec("insert into t values('i'), ('j');") + tk.MustExec("CREATE TABLE `s` ( `a` char(1) DEFAULT NULL, KEY `a` (`a`) )") + tk.MustExec("insert into s values('i'), ('j');") + tk.MustQuery("select /*+ inl_hash_join(s)*/ t.a from t left join s on t.a = s.a;").Check(testkit.Rows("i", "j")) + tk.MustQuery("show warnings").Check(testkit.Rows()) + tk.MustQuery("select /*+ inl_join(s)*/ t.a from t left join s on t.a = s.a;").Check(testkit.Rows("i", "j")) + tk.MustQuery("show warnings").Check(testkit.Rows()) +} diff --git a/util/codec/codec.go b/util/codec/codec.go index 79d3d07ddde90..d0458a55f3b28 100644 --- a/util/codec/codec.go +++ b/util/codec/codec.go @@ -363,9 +363,11 @@ func encodeHashChunkRowIdx(sc *stmtctx.StatementContext, row chunk.Row, tp *type b = ConvertByCollation(hack.Slice(str), tp) case mysql.TypeSet: flag = compactBytesFlag - v := uint64(row.GetSet(idx).ToNumber()) - str := tp.Elems[v-1] - b = ConvertByCollation(hack.Slice(str), tp) + s, err := types.ParseSetValue(tp.Elems, row.GetSet(idx).Value) + if err != nil { + return 0, nil, err + } + b = ConvertByCollation(hack.Slice(s.Name), tp) case mysql.TypeBit: // We don't need to handle errors here since the literal is ensured to be able to store in uint64 in convertToMysqlBit. flag = uvarintFlag @@ -588,9 +590,11 @@ func HashChunkSelected(sc *stmtctx.StatementContext, h []hash.Hash64, chk *chunk isNull[i] = true } else { buf[0] = compactBytesFlag - v := uint64(column.GetSet(i).ToNumber()) - str := tp.Elems[v-1] - b = ConvertByCollation(hack.Slice(str), tp) + s, err := types.ParseSetValue(tp.Elems, column.GetSet(i).Value) + if err != nil { + return err + } + b = ConvertByCollation(hack.Slice(s.Name), tp) } // As the golang doc described, `Hash.Write` never returns an error. diff --git a/util/codec/codec_test.go b/util/codec/codec_test.go index 9d6ed77263e84..c5cd89842babd 100644 --- a/util/codec/codec_test.go +++ b/util/codec/codec_test.go @@ -984,6 +984,7 @@ func datumsForTest(sc *stmtctx.StatementContext) ([]types.Datum, []*types.FieldT {types.Duration{Duration: time.Second, Fsp: 1}, types.NewFieldType(mysql.TypeDuration)}, {types.Enum{Name: "a", Value: 1}, &types.FieldType{Tp: mysql.TypeEnum, Elems: []string{"a"}}}, {types.Set{Name: "a", Value: 1}, &types.FieldType{Tp: mysql.TypeSet, Elems: []string{"a"}}}, + {types.Set{Name: "f", Value: 32}, &types.FieldType{Tp: mysql.TypeSet, Elems: []string{"a", "b", "c", "d", "e", "f"}}}, {types.BinaryLiteral{100}, &types.FieldType{Tp: mysql.TypeBit, Flen: 8}}, {json.CreateBinary("abc"), types.NewFieldType(mysql.TypeJSON)}, {int64(1), types.NewFieldType(mysql.TypeYear)}, From 4166dd367230e1c93e27a08fd6ff6bb444fade3e Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Tue, 17 Nov 2020 15:41:27 +0800 Subject: [PATCH 124/229] plannr: build empty range for overflow predicate (#21042) (#21073) --- expression/builtin_compare.go | 12 ++++++++++++ planner/core/integration_test.go | 10 ++++++++++ 2 files changed, 22 insertions(+) diff --git a/expression/builtin_compare.go b/expression/builtin_compare.go index 874e7a8eacac6..c5b5d060787bf 100644 --- a/expression/builtin_compare.go +++ b/expression/builtin_compare.go @@ -1371,6 +1371,18 @@ func (c *compareFunctionClass) refineArgsByUnsignedFlag(ctx sessionctx.Context, if err != nil || isNull || v > 0 { return args } + if mysql.HasUnsignedFlag(con.RetType.Flag) && !mysql.HasUnsignedFlag(col.RetType.Flag) { + op := c.op + if i == 1 { + op = symmetricOp[c.op] + } + if op == opcode.EQ || op == opcode.NullEQ { + if _, err := types.ConvertUintToInt(uint64(v), types.IntergerSignedUpperBound(col.RetType.Tp), col.RetType.Tp); err != nil { + args[i], args[1-i] = NewOne(), NewZero() + return args + } + } + } if mysql.HasUnsignedFlag(col.RetType.Flag) && mysql.HasNotNullFlag(col.RetType.Flag) && !mysql.HasUnsignedFlag(con.RetType.Flag) { op := c.op if i == 1 { diff --git a/planner/core/integration_test.go b/planner/core/integration_test.go index 2a57b0e8c0346..cebbe75095252 100644 --- a/planner/core/integration_test.go +++ b/planner/core/integration_test.go @@ -1474,3 +1474,13 @@ func (s *testIntegrationSuite) TestPartitionUnionWithPPruningColumn(c *C) { "3290 LE1327_r5")) } + +func (s *testIntegrationSuite) TestIssue10448(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t;") + + tk.MustExec("create table t(pk int(11) primary key)") + tk.MustExec("insert into t values(1),(2),(3)") + tk.MustQuery("select a from (select pk as a from t) t1 where a = 18446744073709551615").Check(testkit.Rows()) +} From 68211c1292e462c75e37397abe02f7287345ebac Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Tue, 17 Nov 2020 15:59:57 +0800 Subject: [PATCH 125/229] config: hide & deprecate enable-streaming (#20760) (#21055) Signed-off-by: ti-srebot --- config/config.toml.example | 3 --- 1 file changed, 3 deletions(-) diff --git a/config/config.toml.example b/config/config.toml.example index 99b07a4ee91b8..359dc4a5abab6 100644 --- a/config/config.toml.example +++ b/config/config.toml.example @@ -51,9 +51,6 @@ tmp-storage-quota = -1 # Valid options: ["log", "cancel"] oom-action = "log" -# Enable coprocessor streaming. -enable-streaming = false - # Enable batch commit for the DMLs. enable-batch-dml = false From a1bdbef0856fece30c73a7e6dc1ace82c2aa9a96 Mon Sep 17 00:00:00 2001 From: erwadba Date: Tue, 17 Nov 2020 16:46:26 +0800 Subject: [PATCH 126/229] executor: fix show global variables return session variables also (#19341) (#21045) Signed-off-by: ti-srebot --- executor/show.go | 56 ++++++++++++++++++------------------------- executor/show_test.go | 24 +++++++++++++++++++ 2 files changed, 47 insertions(+), 33 deletions(-) diff --git a/executor/show.go b/executor/show.go index 667d44b62cd32..0c040503b187a 100644 --- a/executor/show.go +++ b/executor/show.go @@ -646,45 +646,35 @@ func (e *ShowExec) fetchShowMasterStatus() error { func (e *ShowExec) fetchShowVariables() (err error) { var ( - value string - ok bool - sessionVars = e.ctx.GetSessionVars() - unreachedVars = make([]string, 0, len(variable.SysVars)) + value string + sessionVars = e.ctx.GetSessionVars() ) - for _, v := range variable.SysVars { - if !e.GlobalScope { - // For a session scope variable, - // 1. try to fetch value from SessionVars.Systems; - // 2. if this variable is session-only, fetch value from SysVars - // otherwise, fetch the value from table `mysql.Global_Variables`. - value, ok, err = variable.GetSessionOnlySysVars(sessionVars, v.Name) - } else { - // If the scope of a system variable is ScopeNone, - // it's a read-only variable, so we return the default value of it. - // Otherwise, we have to fetch the values from table `mysql.Global_Variables` for global variable names. - value, ok, err = variable.GetScopeNoneSystemVar(v.Name) - } - if err != nil { - return errors.Trace(err) - } - if !ok { - unreachedVars = append(unreachedVars, v.Name) - continue + if e.GlobalScope { + // Collect global scope variables, + // 1. Exclude the variables of ScopeSession in variable.SysVars; + // 2. If the variable is ScopeNone, it's a read-only variable, return the default value of it, + // otherwise, fetch the value from table `mysql.Global_Variables`. + for _, v := range variable.SysVars { + if v.Scope != variable.ScopeSession { + value, err = variable.GetGlobalSystemVar(sessionVars, v.Name) + if err != nil { + return errors.Trace(err) + } + e.appendRow([]interface{}{v.Name, value}) + } } - e.appendRow([]interface{}{v.Name, value}) + return nil } - if len(unreachedVars) != 0 { - systemVars, err := sessionVars.GlobalVarsAccessor.GetAllSysVars() + + // Collect session scope variables, + // If it is a session only variable, use the default value defined in code, + // otherwise, fetch the value from table `mysql.Global_Variables`. + for _, v := range variable.SysVars { + value, err = variable.GetSessionSystemVar(sessionVars, v.Name) if err != nil { return errors.Trace(err) } - for _, varName := range unreachedVars { - varValue, ok := systemVars[varName] - if !ok { - varValue = variable.SysVars[varName].Value - } - e.appendRow([]interface{}{varName, varValue}) - } + e.appendRow([]interface{}{v.Name, value}) } return nil } diff --git a/executor/show_test.go b/executor/show_test.go index 23b4ccfa8f2b3..f11ab9c6231f0 100644 --- a/executor/show_test.go +++ b/executor/show_test.go @@ -29,6 +29,7 @@ import ( "github.com/pingcap/tidb/privilege/privileges" "github.com/pingcap/tidb/session" "github.com/pingcap/tidb/sessionctx" + "github.com/pingcap/tidb/sessionctx/variable" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/testkit" "github.com/pingcap/tidb/util/testutil" @@ -962,3 +963,26 @@ func (s *testSuite5) TestShowClusterConfig(c *C) { confErr = fmt.Errorf("something unknown error") c.Assert(tk.QueryToErr("show config"), ErrorMatches, confErr.Error()) } + +func (s *testSuite5) TestShowVar(c *C) { + tk := testkit.NewTestKit(c, s.store) + var showSQL string + for _, v := range variable.SysVars { + // When ScopeSession only. `show global variables` must return empty. + if v.Scope == variable.ScopeSession { + showSQL = "show variables like '" + v.Name + "'" + res := tk.MustQuery(showSQL) + c.Check(res.Rows(), HasLen, 1) + showSQL = "show global variables like '" + v.Name + "'" + res = tk.MustQuery(showSQL) + c.Check(res.Rows(), HasLen, 0) + } else { + showSQL = "show global variables like '" + v.Name + "'" + res := tk.MustQuery(showSQL) + c.Check(res.Rows(), HasLen, 1) + showSQL = "show variables like '" + v.Name + "'" + res = tk.MustQuery(showSQL) + c.Check(res.Rows(), HasLen, 1) + } + } +} From 1e4def5d863fe7f7208b1ec2dfa91f79f9cd904e Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Tue, 17 Nov 2020 17:01:26 +0800 Subject: [PATCH 127/229] planner, expression: fix a bug causes schema change after DML (#21027) (#21050) Signed-off-by: ti-srebot --- expression/expression.go | 2 +- expression/integration_test.go | 14 ++++++++++++++ planner/core/logical_plan_builder.go | 2 +- planner/core/point_get_plan.go | 2 +- 4 files changed, 17 insertions(+), 3 deletions(-) diff --git a/expression/expression.go b/expression/expression.go index dd2b55b9b32c5..144ddab2834e0 100644 --- a/expression/expression.go +++ b/expression/expression.go @@ -779,7 +779,7 @@ func ColumnInfos2ColumnsAndNames(ctx sessionctx.Context, dbName, tblName model.C ColName: col.Name, }) newCol := &Column{ - RetType: &col.FieldType, + RetType: col.FieldType.Clone(), ID: col.ID, UniqueID: ctx.GetSessionVars().AllocPlanColumnID(), Index: col.Offset, diff --git a/expression/integration_test.go b/expression/integration_test.go index 81777a965d8ca..66172d4f20195 100755 --- a/expression/integration_test.go +++ b/expression/integration_test.go @@ -6777,6 +6777,20 @@ func (s *testIntegrationSerialSuite) TestIssue17989(c *C) { tk.MustExec("admin check table t") } +func (s *testIntegrationSuite2) TestSchemaDMLNotChange(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk2 := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk2.MustExec("use test") + tk.MustExec("drop table if exists t") + tk.MustExec("create table t (id int primary key, c_json json);") + tk.MustExec("insert into t values (1, '{\"k\": 1}');") + tk.MustExec("begin") + tk.MustExec("update t set c_json = '{\"k\": 2}' where id = 1;") + tk2.MustExec("alter table t rename column c_json to cc_json;") + tk.MustExec("commit") +} + func (s *testIntegrationSerialSuite) TestIssue18702(c *C) { collate.SetNewCollationEnabledForTest(true) defer collate.SetNewCollationEnabledForTest(false) diff --git a/planner/core/logical_plan_builder.go b/planner/core/logical_plan_builder.go index be87c8d1be803..9091cfca2e49f 100644 --- a/planner/core/logical_plan_builder.go +++ b/planner/core/logical_plan_builder.go @@ -2948,7 +2948,7 @@ func (b *PlanBuilder) buildDataSource(ctx context.Context, tn *ast.TableName, as newCol := &expression.Column{ UniqueID: sessionVars.AllocPlanColumnID(), ID: col.ID, - RetType: &col.FieldType, + RetType: col.FieldType.Clone(), OrigName: names[i].String(), IsHidden: col.Hidden, } diff --git a/planner/core/point_get_plan.go b/planner/core/point_get_plan.go index 3211a887230da..4ce476fa36725 100644 --- a/planner/core/point_get_plan.go +++ b/planner/core/point_get_plan.go @@ -1172,7 +1172,7 @@ func findCol(tbl *model.TableInfo, colName *ast.ColumnName) *model.ColumnInfo { func colInfoToColumn(col *model.ColumnInfo, idx int) *expression.Column { return &expression.Column{ - RetType: &col.FieldType, + RetType: col.FieldType.Clone(), ID: col.ID, UniqueID: int64(col.Offset), Index: idx, From 93ccfca9ead35156c0c01a6183eec93ee06bb042 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Tue, 17 Nov 2020 17:15:29 +0800 Subject: [PATCH 128/229] planner: add missing table lock check for fast plan (#20948) (#21002) Signed-off-by: ti-srebot --- planner/core/logical_plan_test.go | 1 + planner/core/point_get_plan.go | 19 ++++++++++++++----- planner/core/point_get_plan_test.go | 18 ++++++++++++++++++ 3 files changed, 33 insertions(+), 5 deletions(-) diff --git a/planner/core/logical_plan_test.go b/planner/core/logical_plan_test.go index e194f21e4e273..6d5891c658c16 100644 --- a/planner/core/logical_plan_test.go +++ b/planner/core/logical_plan_test.go @@ -1581,6 +1581,7 @@ func (s *testPlanSuite) TestFastPlanContextTables(c *C) { false, }, } + s.ctx.GetSessionVars().SnapshotInfoschema = s.is for _, tt := range tests { stmt, err := s.ParseOneStmt(tt.sql, "", "") c.Assert(err, IsNil) diff --git a/planner/core/point_get_plan.go b/planner/core/point_get_plan.go index 4ce476fa36725..4932198fe2d4d 100644 --- a/planner/core/point_get_plan.go +++ b/planner/core/point_get_plan.go @@ -790,15 +790,24 @@ func newPointGetPlan(ctx sessionctx.Context, dbName string, schema *expression.S func checkFastPlanPrivilege(ctx sessionctx.Context, dbName, tableName string, checkTypes ...mysql.PrivilegeType) error { pm := privilege.GetPrivilegeManager(ctx) - if pm == nil { - return nil - } + visitInfos := []visitInfo{} for _, checkType := range checkTypes { - if !pm.RequestVerification(ctx.GetSessionVars().ActiveRoles, dbName, tableName, "", checkType) { + if pm != nil && !pm.RequestVerification(ctx.GetSessionVars().ActiveRoles, dbName, tableName, "", checkType) { return errors.New("privilege check fail") } + // This visitInfo is only for table lock check, so we do not need column field, + // just fill it empty string. + visitInfos = append(visitInfos, visitInfo{ + privilege: checkType, + db: dbName, + table: tableName, + column: "", + err: nil, + }) } - return nil + + infoSchema := infoschema.GetInfoSchema(ctx) + return CheckTableLock(ctx, infoSchema, visitInfos) } func buildSchemaFromFields( diff --git a/planner/core/point_get_plan_test.go b/planner/core/point_get_plan_test.go index 215f0b80037cc..a92c9b43a5a7d 100644 --- a/planner/core/point_get_plan_test.go +++ b/planner/core/point_get_plan_test.go @@ -21,6 +21,7 @@ import ( "strings" . "github.com/pingcap/check" + "github.com/pingcap/tidb/config" "github.com/pingcap/tidb/domain" "github.com/pingcap/tidb/kv" "github.com/pingcap/tidb/metrics" @@ -449,6 +450,23 @@ func (s *testPointGetSuite) TestIssue19141(c *C) { tk.MustQuery("select * from t19141 order by c_int").Check(testkit.Rows("1", "2", "3", "4")) } +func (s *testPointGetSuite) TestUpdateWithTableReadLockWillFail(c *C) { + gcfg := config.GetGlobalConfig() + etl := gcfg.EnableTableLock + gcfg.EnableTableLock = true + defer func() { + gcfg.EnableTableLock = etl + }() + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk.MustExec("create table tbllock(id int, c int);") + tk.MustExec("insert into tbllock values(1, 2), (2, 2);") + tk.MustExec("lock table tbllock read;") + _, err := tk.Exec("update tbllock set c = 3 where id = 2;") + c.Assert(err, NotNil) + c.Assert(err.Error(), Equals, "[schema:1099]Table 'tbllock' was locked with a READ lock and can't be updated") +} + func (s *testPointGetSuite) TestSelectInMultiColumns(c *C) { tk := testkit.NewTestKit(c, s.store) tk.MustExec("use test") From 431e8c5f2b2ec099e1bf0a763b3a6f4e96138e04 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Tue, 17 Nov 2020 17:34:58 +0800 Subject: [PATCH 129/229] planner: check view recursion when building source from view (#20398) (#21001) Signed-off-by: ti-srebot --- errors.toml | 5 ++++ executor/ddl_test.go | 13 +++++++++++ planner/core/errors.go | 1 + planner/core/logical_plan_builder.go | 35 ++++++++++++++++++++++++---- planner/core/planbuilder.go | 22 ++++++++--------- 5 files changed, 60 insertions(+), 16 deletions(-) diff --git a/errors.toml b/errors.toml index ae7aec9aa9cd5..0dcbf9d6c550d 100644 --- a/errors.toml +++ b/errors.toml @@ -761,6 +761,11 @@ error = ''' View '%-.192s.%-.192s' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them ''' +["planner:1462"] +error = ''' +`%-.192s`.`%-.192s` contains view recursion +''' + ["planner:1747"] error = ''' PARTITION () clause on non partitioned table diff --git a/executor/ddl_test.go b/executor/ddl_test.go index 113d88b114a8f..b643c1039a262 100644 --- a/executor/ddl_test.go +++ b/executor/ddl_test.go @@ -278,6 +278,19 @@ func (s *testSuite6) TestCreateView(c *C) { tk.MustExec("drop view v_nested, v_nested2") } +func (s *testSuite6) TestViewRecursion(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk.MustExec("create table if not exists t(a int)") + tk.MustExec("create definer='root'@'localhost' view recursive_view1 as select * from t") + tk.MustExec("create definer='root'@'localhost' view recursive_view2 as select * from recursive_view1") + tk.MustExec("drop table t") + tk.MustExec("rename table recursive_view2 to t") + _, err := tk.Exec("select * from recursive_view1") + c.Assert(terror.ErrorEqual(err, plannercore.ErrViewRecursive), IsTrue) + tk.MustExec("drop view recursive_view1, t") +} + func (s *testSuite6) TestIssue16250(c *C) { tk := testkit.NewTestKit(c, s.store) tk.MustExec("use test") diff --git a/planner/core/errors.go b/planner/core/errors.go index 7e659ff646142..87e97039e0b97 100644 --- a/planner/core/errors.go +++ b/planner/core/errors.go @@ -30,6 +30,7 @@ var ( ErrUnknown = terror.ClassOptimizer.New(mysql.ErrUnknown, mysql.MySQLErrName[mysql.ErrUnknown]) ErrUnknownTable = terror.ClassOptimizer.New(mysql.ErrUnknownTable, mysql.MySQLErrName[mysql.ErrUnknownTable]) ErrNoSuchTable = terror.ClassOptimizer.New(mysql.ErrNoSuchTable, mysql.MySQLErrName[mysql.ErrNoSuchTable]) + ErrViewRecursive = terror.ClassOptimizer.New(mysql.ErrViewRecursive, mysql.MySQLErrName[mysql.ErrViewRecursive]) ErrWrongArguments = terror.ClassOptimizer.New(mysql.ErrWrongArguments, mysql.MySQLErrName[mysql.ErrWrongArguments]) ErrWrongNumberOfColumnsInSelect = terror.ClassOptimizer.New(mysql.ErrWrongNumberOfColumnsInSelect, mysql.MySQLErrName[mysql.ErrWrongNumberOfColumnsInSelect]) ErrBadGeneratedColumn = terror.ClassOptimizer.New(mysql.ErrBadGeneratedColumn, mysql.MySQLErrName[mysql.ErrBadGeneratedColumn]) diff --git a/planner/core/logical_plan_builder.go b/planner/core/logical_plan_builder.go index 9091cfca2e49f..2302bc0877deb 100644 --- a/planner/core/logical_plan_builder.go +++ b/planner/core/logical_plan_builder.go @@ -33,6 +33,7 @@ import ( "github.com/pingcap/parser/model" "github.com/pingcap/parser/mysql" "github.com/pingcap/parser/opcode" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/domain" "github.com/pingcap/tidb/expression" "github.com/pingcap/tidb/expression/aggregation" @@ -52,6 +53,7 @@ import ( "github.com/pingcap/tidb/util/chunk" utilhint "github.com/pingcap/tidb/util/hint" "github.com/pingcap/tidb/util/plancodec" + "github.com/pingcap/tidb/util/set" ) const ( @@ -2804,9 +2806,6 @@ func (b *PlanBuilder) buildDataSource(ctx context.Context, tn *ast.TableName, as } if tableInfo.IsView() { - if b.capFlag&collectUnderlyingViewName != 0 { - b.underlyingViewNames.Insert(dbName.L + "." + tn.Name.L) - } return b.BuildDataSourceFromView(ctx, dbName, tableInfo) } @@ -3128,8 +3127,33 @@ func (b *PlanBuilder) buildMemTable(_ context.Context, dbName model.CIStr, table return p, nil } +// checkRecursiveView checks whether this view is recursively defined. +func (b *PlanBuilder) checkRecursiveView(dbName model.CIStr, tableName model.CIStr) (func(), error) { + viewFullName := dbName.L + "." + tableName.L + if b.buildingViewStack == nil { + b.buildingViewStack = set.NewStringSet() + } + // If this view has already been on the building stack, it means + // this view contains a recursive definition. + if b.buildingViewStack.Exist(viewFullName) { + return nil, ErrViewRecursive.GenWithStackByArgs(dbName.O, tableName.O) + } + // If the view is being renamed, we return the mysql compatible error message. + if b.capFlag&renameView != 0 && viewFullName == b.renamingViewName { + return nil, ErrNoSuchTable.GenWithStackByArgs(dbName.O, tableName.O) + } + b.buildingViewStack.Insert(viewFullName) + return func() { delete(b.buildingViewStack, viewFullName) }, nil +} + // BuildDataSourceFromView is used to build LogicalPlan from view func (b *PlanBuilder) BuildDataSourceFromView(ctx context.Context, dbName model.CIStr, tableInfo *model.TableInfo) (LogicalPlan, error) { + deferFunc, err := b.checkRecursiveView(dbName, tableInfo.Name) + if err != nil { + return nil, err + } + defer deferFunc() + charset, collation := b.ctx.GetSessionVars().GetCharsetInfo() viewParser := parser.New() viewParser.EnableWindowFunc(b.ctx.GetSessionVars().EnableWindowFunction) @@ -3141,7 +3165,10 @@ func (b *PlanBuilder) BuildDataSourceFromView(ctx context.Context, dbName model. b.visitInfo = make([]visitInfo, 0) selectLogicalPlan, err := b.Build(ctx, selectNode) if err != nil { - err = ErrViewInvalid.GenWithStackByArgs(dbName.O, tableInfo.Name.O) + if terror.ErrorNotEqual(err, ErrViewRecursive) && + terror.ErrorNotEqual(err, ErrNoSuchTable) { + err = ErrViewInvalid.GenWithStackByArgs(dbName.O, tableInfo.Name.O) + } return nil, err } diff --git a/planner/core/planbuilder.go b/planner/core/planbuilder.go index 7bd43d6351205..d484ca01aae41 100644 --- a/planner/core/planbuilder.go +++ b/planner/core/planbuilder.go @@ -392,9 +392,9 @@ const ( // canExpandAST indicates whether the origin AST can be expanded during plan // building. ONLY used for `CreateViewStmt` now. canExpandAST - // collectUnderlyingViewName indicates whether to collect the underlying - // view names of a CreateViewStmt during plan building. - collectUnderlyingViewName + // renameView indicates a view is being renamed, so we cannot use the origin + // definition of that view. + renameView ) // PlanBuilder builds Plan from an ast.Node. @@ -444,8 +444,10 @@ type PlanBuilder struct { // SelectLock need this information to locate the lock on partitions. partitionedTable []table.PartitionedTable - // CreateView needs this information to check whether exists nested view. - underlyingViewNames set.StringSet + // buildingViewStack is used to check whether there is a recursive view. + buildingViewStack set.StringSet + // renamingViewName is the name of the view which is being renamed. + renamingViewName string } type handleColHelper struct { @@ -2777,20 +2779,16 @@ func (b *PlanBuilder) buildDDL(ctx context.Context, node ast.DDLNode) (Plan, err v.ReferTable.Name.L, "", authErr) } case *ast.CreateViewStmt: - b.capFlag |= canExpandAST - b.capFlag |= collectUnderlyingViewName + b.capFlag |= canExpandAST | renameView + b.renamingViewName = v.ViewName.Schema.L + "." + v.ViewName.Name.L defer func() { b.capFlag &= ^canExpandAST - b.capFlag &= ^collectUnderlyingViewName + b.capFlag &= ^renameView }() - b.underlyingViewNames = set.NewStringSet() plan, err := b.Build(ctx, v.Select) if err != nil { return nil, err } - if b.underlyingViewNames.Exist(v.ViewName.Schema.L + "." + v.ViewName.Name.L) { - return nil, ErrNoSuchTable.GenWithStackByArgs(v.ViewName.Schema.O, v.ViewName.Name.O) - } schema := plan.Schema() names := plan.OutputNames() if v.Cols == nil { From 2b1b26044fa6eb965ca8ad689b667b43c571178a Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Wed, 18 Nov 2020 20:01:07 +0800 Subject: [PATCH 130/229] ddl: ignore integer zerofill size attribute when changing the column types (#20862) (#20986) --- ddl/column_test.go | 2 +- ddl/db_test.go | 19 +++++++++++++++++++ ddl/ddl_api.go | 13 ++++++++++--- ddl/ddl_worker_test.go | 2 +- 4 files changed, 31 insertions(+), 5 deletions(-) diff --git a/ddl/column_test.go b/ddl/column_test.go index af373407c0f82..7dabc57219b1d 100644 --- a/ddl/column_test.go +++ b/ddl/column_test.go @@ -938,7 +938,7 @@ func (s *testColumnSuite) TestModifyColumn(c *C) { err error }{ {"int", "bigint", nil}, - {"int", "int unsigned", errUnsupportedModifyColumn.GenWithStackByArgs("length 10 is less than origin 11")}, + {"int", "int unsigned", errUnsupportedModifyColumn.GenWithStackByArgs("can't change unsigned integer to signed or vice versa")}, {"varchar(10)", "text", nil}, {"varbinary(10)", "blob", nil}, {"text", "blob", errUnsupportedModifyCharset.GenWithStackByArgs("charset from utf8mb4 to binary")}, diff --git a/ddl/db_test.go b/ddl/db_test.go index b401bd7d9a346..879692f8696d7 100644 --- a/ddl/db_test.go +++ b/ddl/db_test.go @@ -4930,3 +4930,22 @@ func init() { domain.SchemaOutOfDateRetryInterval = int64(50 * time.Millisecond) domain.SchemaOutOfDateRetryTimes = int32(50) } + +// Test issue #20529. +func (s *testSerialDBSuite) TestColumnTypeChangeIgnoreDisplayLength(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + + // Change int to int(3). + // Although display length is increased, the default flen is decreased, reorg is needed. + tk.MustExec("drop table if exists t") + tk.MustExec("create table t(a int)") + tk.MustExec("alter table t modify column a int(3)") + + // Change int to bigint(1) + // Although display length is decreased, default flen is the same, reorg is not needed. + tk.MustExec("drop table if exists t") + tk.MustExec("create table t(a int)") + tk.MustExec("alter table t modify column a bigint(1)") + tk.MustExec("drop table if exists t") +} diff --git a/ddl/ddl_api.go b/ddl/ddl_api.go index 94a5d34b71105..cb2e509831d5a 100644 --- a/ddl/ddl_api.go +++ b/ddl/ddl_api.go @@ -2706,6 +2706,10 @@ func checkModifyCharsetAndCollation(toCharset, toCollate, origCharset, origColla // field length and precision. func CheckModifyTypeCompatible(origin *types.FieldType, to *types.FieldType) error { unsupportedMsg := fmt.Sprintf("type %v not match origin %v", to.CompactStr(), origin.CompactStr()) + var ( + toFlen = to.Flen + originFlen = origin.Flen + ) switch origin.Tp { case mysql.TypeVarchar, mysql.TypeString, mysql.TypeVarString, mysql.TypeBlob, mysql.TypeTinyBlob, mysql.TypeMediumBlob, mysql.TypeLongBlob: @@ -2718,6 +2722,10 @@ func CheckModifyTypeCompatible(origin *types.FieldType, to *types.FieldType) err case mysql.TypeTiny, mysql.TypeShort, mysql.TypeInt24, mysql.TypeLong, mysql.TypeLonglong: switch to.Tp { case mysql.TypeTiny, mysql.TypeShort, mysql.TypeInt24, mysql.TypeLong, mysql.TypeLonglong: + // For integers, we should ignore the potential display length represented by flen, using + // the default flen of the type. + originFlen, _ = mysql.GetDefaultFieldLengthAndDecimal(origin.Tp) + toFlen, _ = mysql.GetDefaultFieldLengthAndDecimal(to.Tp) default: return errUnsupportedModifyColumn.GenWithStackByArgs(unsupportedMsg) } @@ -2756,9 +2764,8 @@ func CheckModifyTypeCompatible(origin *types.FieldType, to *types.FieldType) err return errUnsupportedModifyColumn.GenWithStackByArgs(unsupportedMsg) } } - - if to.Flen > 0 && to.Flen < origin.Flen { - msg := fmt.Sprintf("length %d is less than origin %d", to.Flen, origin.Flen) + if toFlen > 0 && toFlen < originFlen { + msg := fmt.Sprintf("length %d is less than origin %d", toFlen, originFlen) return errUnsupportedModifyColumn.GenWithStackByArgs(msg) } if to.Decimal > 0 && to.Decimal < origin.Decimal { diff --git a/ddl/ddl_worker_test.go b/ddl/ddl_worker_test.go index 8c1c5f591c518..8a96101ab3010 100644 --- a/ddl/ddl_worker_test.go +++ b/ddl/ddl_worker_test.go @@ -723,7 +723,7 @@ func (s *testDDLSuite) TestCancelJob(c *C) { // modify column col.DefaultValue = "1" updateTest(&tests[15]) - modifyColumnArgs := []interface{}{col, col.Name, &ast.ColumnPosition{}, byte(0)} + modifyColumnArgs := []interface{}{col, col.Name, &ast.ColumnPosition{}, byte(0), uint64(0)} doDDLJobErrWithSchemaState(ctx, d, c, dbInfo.ID, tblInfo.ID, test.act, modifyColumnArgs, &test.cancelState) c.Check(checkErr, IsNil) changedTable = testGetTable(c, d, dbInfo.ID, tblInfo.ID) From 28319a04211f4cbd863c21b5c11eabeae5ca8260 Mon Sep 17 00:00:00 2001 From: cfzjywxk Date: Thu, 19 Nov 2020 11:19:02 +0800 Subject: [PATCH 131/229] plan: fix lock in share mode compile error (#21126) --- planner/core/rule_column_pruning.go | 2 +- session/session_test.go | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/planner/core/rule_column_pruning.go b/planner/core/rule_column_pruning.go index 4441910619f6b..80ea3c5775009 100644 --- a/planner/core/rule_column_pruning.go +++ b/planner/core/rule_column_pruning.go @@ -362,7 +362,7 @@ func (la *LogicalApply) PruneColumns(parentUsedCols []*expression.Column) error // PruneColumns implements LogicalPlan interface. func (p *LogicalLock) PruneColumns(parentUsedCols []*expression.Column) error { - if p.Lock != ast.SelectLockForUpdate && p.Lock != ast.SelectLockForUpdateNoWait { + if p.Lock != ast.SelectLockForUpdate && p.Lock != ast.SelectLockForUpdateNoWait && p.Lock != ast.SelectLockInShareMode { return p.baseLogicalPlan.PruneColumns(parentUsedCols) } diff --git a/session/session_test.go b/session/session_test.go index 7584d5c8b935c..544b5f3488cc4 100644 --- a/session/session_test.go +++ b/session/session_test.go @@ -3265,3 +3265,15 @@ func (s *testBackupRestoreSuite) TestBackupAndRestore(c *C) { tk.MustExec("drop database br02") } } + +func (s *testSessionSuite2) TestSelectLockInShare(c *C) { + tk1 := testkit.NewTestKitWithInit(c, s.store) + tk1.MustExec("DROP TABLE IF EXISTS t_sel_in_share") + tk1.MustExec("CREATE TABLE t_sel_in_share (id int DEFAULT NULL)") + tk1.MustExec("insert into t_sel_in_share values (11)") + err := tk1.ExecToErr("select * from t_sel_in_share lock in share mode") + c.Assert(err, NotNil) + tk1.MustExec("set @@tidb_enable_noop_functions = 1") + tk1.MustQuery("select * from t_sel_in_share lock in share mode").Check(testkit.Rows("11")) + tk1.MustExec("DROP TABLE t_sel_in_share") +} From 6c5539fc92361fdcd894a6add2167619edcfbf94 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Thu, 19 Nov 2020 12:30:53 +0800 Subject: [PATCH 132/229] *: optimize for encoding huge plan (#20811) (#20886) Signed-off-by: ti-srebot Signed-off-by: crazycs520 --- executor/explain.go | 3 -- planner/core/encode.go | 7 ++- planner/core/plan_test.go | 23 ++++++++++ util/memory/tracker.go | 88 +++++++++++++++++++++---------------- util/memory/tracker_test.go | 10 ++--- 5 files changed, 84 insertions(+), 47 deletions(-) diff --git a/executor/explain.go b/executor/explain.go index ac4c30e699f34..69886026a8d2c 100644 --- a/executor/explain.go +++ b/executor/explain.go @@ -108,9 +108,6 @@ func (e *ExplainExec) generateExplainInfo(ctx context.Context) (rows [][]string, if err = e.explain.RenderResult(); err != nil { return nil, err } - if e.analyzeExec != nil { - e.ctx.GetSessionVars().StmtCtx.RuntimeStatsColl = nil - } return e.explain.Rows, nil } diff --git a/planner/core/encode.go b/planner/core/encode.go index 390857fdecd58..10368afe3a6fd 100644 --- a/planner/core/encode.go +++ b/planner/core/encode.go @@ -38,11 +38,14 @@ type planEncoder struct { // EncodePlan is used to encodePlan the plan to the plan tree with compressing. func EncodePlan(p Plan) string { - pn := encoderPool.Get().(*planEncoder) - defer encoderPool.Put(pn) + if explain, ok := p.(*Explain); ok { + p = explain.TargetPlan + } if p == nil || p.SCtx() == nil { return "" } + pn := encoderPool.Get().(*planEncoder) + defer encoderPool.Put(pn) selectPlan := getSelectPlan(p) if selectPlan != nil { failpoint.Inject("mockPlanRowCount", func(val failpoint.Value) { diff --git a/planner/core/plan_test.go b/planner/core/plan_test.go index 8b24001a97fd8..d6655de7f32fe 100644 --- a/planner/core/plan_test.go +++ b/planner/core/plan_test.go @@ -404,3 +404,26 @@ func (s *testPlanNormalize) TestDecodePlanPerformance(c *C) { c.Assert(err, IsNil) c.Assert(time.Since(start).Seconds(), Less, 3.0) } + +func (s *testPlanNormalize) TestEncodePlanPerformance(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk.MustExec("drop table if exists th") + tk.MustExec("set @@session.tidb_enable_table_partition = 1") + tk.MustExec("create table th (i int, a int,b int, c int, index (a)) partition by hash (a) partitions 1024;") + tk.MustExec("set @@tidb_slow_log_threshold=200000") + + query := "select count(*) from th t1 join th t2 join th t3 join th t4 join th t5 join th t6 where t1.i=t2.a and t1.i=t3.i and t3.i=t4.i and t4.i=t5.i and t5.i=t6.i" + tk.Se.GetSessionVars().PlanID = 0 + tk.MustExec(query) + info := tk.Se.ShowProcess() + c.Assert(info, NotNil) + p, ok := info.Plan.(core.PhysicalPlan) + c.Assert(ok, IsTrue) + tk.Se.GetSessionVars().StmtCtx.RuntimeStatsColl = nil + start := time.Now() + encodedPlanStr := core.EncodePlan(p) + c.Assert(time.Since(start).Seconds(), Less, 10.0) + _, err := plancodec.DecodePlan(encodedPlanStr) + c.Assert(err, IsNil) +} diff --git a/util/memory/tracker.go b/util/memory/tracker.go index cf639da4f5f8c..9b08a6b2e173e 100644 --- a/util/memory/tracker.go +++ b/util/memory/tracker.go @@ -16,6 +16,7 @@ package memory import ( "bytes" "fmt" + "sort" "sync" "sync/atomic" ) @@ -42,7 +43,7 @@ type Tracker struct { sync.Mutex // The children memory trackers. If the Tracker is the Global Tracker, like executor.GlobalDiskUsageTracker, // we wouldn't maintain its children in order to avoiding mutex contention. - children []*Tracker + children map[int][]*Tracker } actionMu struct { sync.Mutex @@ -139,7 +140,10 @@ func (t *Tracker) AttachTo(parent *Tracker) { t.parent.remove(t) } parent.mu.Lock() - parent.mu.children = append(parent.mu.children, t) + if parent.mu.children == nil { + parent.mu.children = make(map[int][]*Tracker) + } + parent.mu.children[t.label] = append(parent.mu.children[t.label], t) parent.mu.Unlock() t.parent = parent @@ -159,12 +163,21 @@ func (t *Tracker) Detach() { func (t *Tracker) remove(oldChild *Tracker) { found := false + label := oldChild.label t.mu.Lock() - for i, child := range t.mu.children { - if child == oldChild { - t.mu.children = append(t.mu.children[:i], t.mu.children[i+1:]...) - found = true - break + if t.mu.children != nil { + children := t.mu.children[label] + for i, child := range children { + if child == oldChild { + children = append(children[:i], children[i+1:]...) + if len(children) > 0 { + t.mu.children[label] = children + } else { + delete(t.mu.children, label) + } + found = true + break + } } } t.mu.Unlock() @@ -183,19 +196,30 @@ func (t *Tracker) ReplaceChild(oldChild, newChild *Tracker) { return } + if oldChild.label != newChild.label { + t.remove(oldChild) + newChild.AttachTo(t) + return + } + newConsumed := newChild.BytesConsumed() newChild.parent = t + label := oldChild.label t.mu.Lock() - for i, child := range t.mu.children { - if child != oldChild { - continue - } + if t.mu.children != nil { + children := t.mu.children[label] + for i, child := range children { + if child != oldChild { + continue + } - newConsumed -= oldChild.BytesConsumed() - oldChild.parent = nil - t.mu.children[i] = newChild - break + newConsumed -= oldChild.BytesConsumed() + oldChild.parent = nil + children[i] = newChild + t.mu.children[label] = children + break + } } t.mu.Unlock() @@ -243,30 +267,14 @@ func (t *Tracker) MaxConsumed() int64 { return atomic.LoadInt64(&t.maxConsumed) } -// SearchTracker searches the specific tracker under this tracker. -func (t *Tracker) SearchTracker(label int) *Tracker { - if t.label == label { - return t - } - t.mu.Lock() - defer t.mu.Unlock() - for _, child := range t.mu.children { - if result := child.SearchTracker(label); result != nil { - return result - } - } - return nil -} - // SearchTrackerWithoutLock searches the specific tracker under this tracker without lock. func (t *Tracker) SearchTrackerWithoutLock(label int) *Tracker { if t.label == label { return t } - for _, child := range t.mu.children { - if result := child.SearchTrackerWithoutLock(label); result != nil { - return result - } + children := t.mu.children[label] + if len(children) > 0 { + return children[0] } return nil } @@ -286,9 +294,15 @@ func (t *Tracker) toString(indent string, buffer *bytes.Buffer) { fmt.Fprintf(buffer, "%s \"consumed\": %s\n", indent, t.BytesToString(t.BytesConsumed())) t.mu.Lock() - for i := range t.mu.children { - if t.mu.children[i] != nil { - t.mu.children[i].toString(indent+" ", buffer) + labels := make([]int, 0, len(t.mu.children)) + for label := range t.mu.children { + labels = append(labels, label) + } + sort.Ints(labels) + for _, label := range labels { + children := t.mu.children[label] + for _, child := range children { + child.toString(indent+" ", buffer) } } t.mu.Unlock() diff --git a/util/memory/tracker_test.go b/util/memory/tracker_test.go index f9f498cfee1ee..6e595c4c9f8ea 100644 --- a/util/memory/tracker_test.go +++ b/util/memory/tracker_test.go @@ -143,7 +143,7 @@ func (s *testSuite) TestAttachTo(c *C) { c.Assert(oldParent.BytesConsumed(), Equals, int64(100)) c.Assert(child.parent, DeepEquals, oldParent) c.Assert(len(oldParent.mu.children), Equals, 1) - c.Assert(oldParent.mu.children[0], DeepEquals, child) + c.Assert(oldParent.mu.children[child.label][0], DeepEquals, child) child.AttachTo(newParent) c.Assert(child.BytesConsumed(), Equals, int64(100)) @@ -151,7 +151,7 @@ func (s *testSuite) TestAttachTo(c *C) { c.Assert(newParent.BytesConsumed(), Equals, int64(100)) c.Assert(child.parent, DeepEquals, newParent) c.Assert(len(newParent.mu.children), Equals, 1) - c.Assert(newParent.mu.children[0], DeepEquals, child) + c.Assert(newParent.mu.children[child.label][0], DeepEquals, child) c.Assert(len(oldParent.mu.children), Equals, 0) } @@ -163,7 +163,7 @@ func (s *testSuite) TestDetach(c *C) { c.Assert(child.BytesConsumed(), Equals, int64(100)) c.Assert(parent.BytesConsumed(), Equals, int64(100)) c.Assert(len(parent.mu.children), Equals, 1) - c.Assert(parent.mu.children[0], DeepEquals, child) + c.Assert(parent.mu.children[child.label][0], DeepEquals, child) child.Detach() c.Assert(child.BytesConsumed(), Equals, int64(100)) @@ -185,14 +185,14 @@ func (s *testSuite) TestReplaceChild(c *C) { parent.ReplaceChild(oldChild, newChild) c.Assert(parent.BytesConsumed(), Equals, int64(500)) c.Assert(len(parent.mu.children), Equals, 1) - c.Assert(parent.mu.children[0], DeepEquals, newChild) + c.Assert(parent.mu.children[newChild.label][0], DeepEquals, newChild) c.Assert(newChild.parent, DeepEquals, parent) c.Assert(oldChild.parent, IsNil) parent.ReplaceChild(oldChild, nil) c.Assert(parent.BytesConsumed(), Equals, int64(500)) c.Assert(len(parent.mu.children), Equals, 1) - c.Assert(parent.mu.children[0], DeepEquals, newChild) + c.Assert(parent.mu.children[newChild.label][0], DeepEquals, newChild) c.Assert(newChild.parent, DeepEquals, parent) c.Assert(oldChild.parent, IsNil) From 9a4d550379d797e5480169b96f0eb3663dd49fe9 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Thu, 19 Nov 2020 14:24:53 +0800 Subject: [PATCH 133/229] executor: fix analyze update panic cause by duplicate call analyze executor Close method (#20390) (#21067) Signed-off-by: ti-srebot --- executor/explain.go | 45 ++++++++++++++++------------------- executor/explain_test.go | 11 +++++---- executor/explain_unit_test.go | 4 ++++ 3 files changed, 30 insertions(+), 30 deletions(-) diff --git a/executor/explain.go b/executor/explain.go index 69886026a8d2c..a584028b686ee 100644 --- a/executor/explain.go +++ b/executor/explain.go @@ -72,38 +72,33 @@ func (e *ExplainExec) Next(ctx context.Context, req *chunk.Chunk) error { return nil } -func (e *ExplainExec) generateExplainInfo(ctx context.Context) (rows [][]string, err error) { - closed := false - defer func() { - if !closed && e.analyzeExec != nil { - err = e.analyzeExec.Close() - closed = true - } - }() +func (e *ExplainExec) executeAnalyzeExec(ctx context.Context) (err error) { if e.analyzeExec != nil && !e.executed { + defer func() { + err1 := e.analyzeExec.Close() + if err1 != nil { + if err != nil { + err = errors.New(err.Error() + ", " + err1.Error()) + } else { + err = err1 + } + } + }() e.executed = true chk := newFirstChunk(e.analyzeExec) - var nextErr, closeErr error for { - nextErr = Next(ctx, e.analyzeExec, chk) - if nextErr != nil || chk.NumRows() == 0 { + err = Next(ctx, e.analyzeExec, chk) + if err != nil || chk.NumRows() == 0 { break } } - closeErr = e.analyzeExec.Close() - closed = true - if nextErr != nil { - if closeErr != nil { - err = errors.New(nextErr.Error() + ", " + closeErr.Error()) - } else { - err = nextErr - } - } else if closeErr != nil { - err = closeErr - } - if err != nil { - return nil, err - } + } + return err +} + +func (e *ExplainExec) generateExplainInfo(ctx context.Context) (rows [][]string, err error) { + if err = e.executeAnalyzeExec(ctx); err != nil { + return nil, err } if err = e.explain.RenderResult(); err != nil { return nil, err diff --git a/executor/explain_test.go b/executor/explain_test.go index 57a3c5ed5d265..0965a0a9f9ee0 100644 --- a/executor/explain_test.go +++ b/executor/explain_test.go @@ -97,14 +97,15 @@ func (s *testSuite1) TestExplainWrite(c *C) { tk := testkit.NewTestKitWithInit(c, s.store) tk.MustExec("drop table if exists t") tk.MustExec("create table t (a int)") - tk.MustExec("explain analyze insert into t select 1") + tk.MustQuery("explain analyze insert into t select 1") tk.MustQuery("select * from t").Check(testkit.Rows("1")) - tk.MustExec("explain analyze update t set a=2 where a=1") + tk.MustQuery("explain analyze update t set a=2 where a=1") tk.MustQuery("select * from t").Check(testkit.Rows("2")) - tk.MustExec("explain insert into t select 1") + tk.MustQuery("explain insert into t select 1") tk.MustQuery("select * from t").Check(testkit.Rows("2")) - tk.MustExec("explain analyze insert into t select 1") - tk.MustQuery("select * from t order by a").Check(testkit.Rows("1", "2")) + tk.MustQuery("explain analyze insert into t select 1") + tk.MustQuery("explain analyze replace into t values (3)") + tk.MustQuery("select * from t order by a").Check(testkit.Rows("1", "2", "3")) } func (s *testSuite1) TestExplainAnalyzeMemory(c *C) { diff --git a/executor/explain_unit_test.go b/executor/explain_unit_test.go index fa9b13bc66e48..1276575f47c28 100644 --- a/executor/explain_unit_test.go +++ b/executor/explain_unit_test.go @@ -81,6 +81,10 @@ func TestExplainAnalyzeInvokeNextAndClose(t *testing.T) { t.Errorf(err.Error()) } // mockErrorOperator panic + explainExec = &ExplainExec{ + baseExecutor: baseExec, + explain: nil, + } mockOpr = mockErrorOperator{baseExec, true, false} explainExec.analyzeExec = &mockOpr defer func() { From 1ff5fc8a23f9438e1575fad217ff0389f45bebcd Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Thu, 19 Nov 2020 15:25:27 +0800 Subject: [PATCH 134/229] cherry pick #21127 to release-4.0 (#21135) --- server/util.go | 14 +++++++++++++- server/util_test.go | 2 +- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/server/util.go b/server/util.go index 7150229ebc0fc..88bcdc35086e2 100644 --- a/server/util.go +++ b/server/util.go @@ -208,12 +208,24 @@ func dumpBinaryDateTime(data []byte, t types.Time) []byte { switch t.Type() { case mysql.TypeTimestamp, mysql.TypeDatetime: if t.IsZero() { + // All zero. data = append(data, 0) - } else { + } else if t.Microsecond() != 0 { + // Has micro seconds. data = append(data, 11) data = dumpUint16(data, uint16(year)) data = append(data, byte(mon), byte(day), byte(t.Hour()), byte(t.Minute()), byte(t.Second())) data = dumpUint32(data, uint32(t.Microsecond())) + } else if t.Hour() != 0 || t.Minute() != 0 || t.Second() != 0 { + // Has HH:MM:SS + data = append(data, 7) + data = dumpUint16(data, uint16(year)) + data = append(data, byte(mon), byte(day), byte(t.Hour()), byte(t.Minute()), byte(t.Second())) + } else { + // Only YY:MM:DD + data = append(data, 4) + data = dumpUint16(data, uint16(year)) + data = append(data, byte(mon), byte(day)) } case mysql.TypeDate: if t.IsZero() { diff --git a/server/util_test.go b/server/util_test.go index d3148fc187693..a11641c33ffae 100644 --- a/server/util_test.go +++ b/server/util_test.go @@ -84,7 +84,7 @@ func (s *testUtilSuite) TestDumpBinaryTime(c *C) { c.Assert(err, IsNil) d = dumpBinaryDateTime(nil, t) // 201 & 7 composed to uint16 1993 (litter-endian) - c.Assert(d, DeepEquals, []byte{11, 201, 7, 7, 13, 1, 1, 1, 0, 0, 0, 0}) + c.Assert(d, DeepEquals, []byte{7, 201, 7, 7, 13, 1, 1, 1}) t, err = types.ParseDate(nil, "0000-00-00") c.Assert(err, IsNil) From f26cd6201661edba502012be28c64e8e51cb857d Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Thu, 19 Nov 2020 15:33:53 +0800 Subject: [PATCH 135/229] executor: fix issue of runtime stats of index merge join is wrong (#20892) (#20944) Signed-off-by: ti-srebot Signed-off-by: crazycs520 --- executor/index_lookup_merge_join.go | 12 ++++++------ executor/join_test.go | 6 ++++++ 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/executor/index_lookup_merge_join.go b/executor/index_lookup_merge_join.go index c3b10df60b85b..05d1b6f1f9755 100644 --- a/executor/index_lookup_merge_join.go +++ b/executor/index_lookup_merge_join.go @@ -189,6 +189,12 @@ func (e *IndexLookUpMergeJoin) startWorkers(ctx context.Context) { // TODO: consider another session currency variable for index merge join. // Because its parallelization is not complete. concurrency := e.ctx.GetSessionVars().IndexLookupJoinConcurrency + if e.runtimeStats != nil { + runtimeStats := &execdetails.RuntimeStatsWithConcurrencyInfo{} + runtimeStats.SetConcurrencyInfo(execdetails.NewConcurrencyInfo("Concurrency", concurrency)) + e.ctx.GetSessionVars().StmtCtx.RuntimeStatsColl.RegisterStats(e.id, runtimeStats) + } + resultCh := make(chan *lookUpMergeJoinTask, concurrency) e.resultCh = resultCh e.joinChkResourceCh = make([]chan *chunk.Chunk, concurrency) @@ -744,11 +750,5 @@ func (e *IndexLookUpMergeJoin) Close() error { // cancelFunc control the outer worker and outer worker close the task channel. e.workerWg.Wait() e.memTracker = nil - if e.runtimeStats != nil { - concurrency := cap(e.resultCh) - runtimeStats := &execdetails.RuntimeStatsWithConcurrencyInfo{} - runtimeStats.SetConcurrencyInfo(execdetails.NewConcurrencyInfo("Concurrency", concurrency)) - e.ctx.GetSessionVars().StmtCtx.RuntimeStatsColl.RegisterStats(e.id, runtimeStats) - } return e.baseExecutor.Close() } diff --git a/executor/join_test.go b/executor/join_test.go index a2ed4297d1242..bbd84306e9212 100644 --- a/executor/join_test.go +++ b/executor/join_test.go @@ -2355,6 +2355,12 @@ func (s *testSuiteJoinSerial) TestExplainAnalyzeJoin(c *C) { c.Assert(len(rows), Equals, 7) c.Assert(rows[0][0], Matches, "HashJoin.*") c.Assert(rows[0][5], Matches, "time:.*, loops:.*, build_hash_table:{total:.*, fetch:.*, build:.*}, probe:{concurrency:5, total:.*, max:.*, probe:.*, fetch:.*}") + // TODO: Enable below test after reopen the index merge join in future. + // Test for index merge join. + //rows = tk.MustQuery("explain analyze select /*+ INL_MERGE_JOIN(t1, t2) */ * from t1,t2 where t1.a=t2.a;").Rows() + //c.Assert(len(rows), Equals, 9) + //c.Assert(rows[0][0], Matches, "IndexMergeJoin_.*") + //c.Assert(rows[0][5], Matches, fmt.Sprintf(".*Concurrency:%v.*", tk.Se.GetSessionVars().IndexLookupJoinConcurrency)) } func (s *testSuiteJoinSerial) TestIssue20270(c *C) { From 7bbbcd4a93ff752765e3e98a4111c239ae0bba12 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Fri, 20 Nov 2020 11:55:24 +0800 Subject: [PATCH 136/229] *: inject projection for the plan pushed to TiDB (#21090) (#21130) --- executor/coprocessor.go | 1 + infoschema/tables_test.go | 1 + planner/core/optimizer.go | 2 +- planner/core/pb_to_plan.go | 17 ++++++++++------- planner/core/rule_inject_extra_projection.go | 8 ++++++-- 5 files changed, 19 insertions(+), 10 deletions(-) diff --git a/executor/coprocessor.go b/executor/coprocessor.go index 9b37dad035b2d..e114eafd85afb 100644 --- a/executor/coprocessor.go +++ b/executor/coprocessor.go @@ -163,6 +163,7 @@ func (h *CoprocessorDAGHandler) buildDAGExecutor(req *coprocessor.Request) (Exec if err != nil { return nil, errors.Trace(err) } + plan = core.InjectExtraProjection(plan) // Build executor. b := newExecutorBuilder(h.sctx, is) return b.build(plan), nil diff --git a/infoschema/tables_test.go b/infoschema/tables_test.go index ba66e6857f618..4e823b6055f9f 100644 --- a/infoschema/tables_test.go +++ b/infoschema/tables_test.go @@ -799,6 +799,7 @@ func (s *testClusterTableSuite) TestSelectClusterTable(c *C) { tk.MustQuery("select query_time, conn_id from `CLUSTER_SLOW_QUERY` order by time limit 1").Check(testkit.Rows("4.895492 6")) tk.MustQuery("select count(*) from `CLUSTER_SLOW_QUERY` group by digest").Check(testkit.Rows("1")) tk.MustQuery("select digest, count(*) from `CLUSTER_SLOW_QUERY` group by digest").Check(testkit.Rows("42a1c8aae6f133e934d4bf0147491709a8812ea05ff8819ec522780fe657b772 1")) + tk.MustQuery(`select length(query) as l,time from information_schema.cluster_slow_query where time > "2019-02-12 19:33:56" order by abs(l) desc limit 10;`).Check(testkit.Rows("21 2019-02-12 19:33:56.571953")) tk.MustQuery("select count(*) from `CLUSTER_SLOW_QUERY` where time > now() group by digest").Check(testkit.Rows()) re := tk.MustQuery("select * from `CLUSTER_statements_summary`") c.Assert(re, NotNil) diff --git a/planner/core/optimizer.go b/planner/core/optimizer.go index cf03829701df5..c8f5da5503111 100644 --- a/planner/core/optimizer.go +++ b/planner/core/optimizer.go @@ -142,7 +142,7 @@ func DoOptimize(ctx context.Context, sctx sessionctx.Context, flag uint64, logic func postOptimize(sctx sessionctx.Context, plan PhysicalPlan) PhysicalPlan { plan = eliminatePhysicalProjection(plan) - plan = injectExtraProjection(plan) + plan = InjectExtraProjection(plan) plan = eliminateUnionScanAndLock(sctx, plan) return plan } diff --git a/planner/core/pb_to_plan.go b/planner/core/pb_to_plan.go index 5ab1e76062b6f..7080934657ad8 100644 --- a/planner/core/pb_to_plan.go +++ b/planner/core/pb_to_plan.go @@ -21,6 +21,7 @@ import ( "github.com/pingcap/tidb/expression" "github.com/pingcap/tidb/expression/aggregation" "github.com/pingcap/tidb/infoschema" + "github.com/pingcap/tidb/planner/property" "github.com/pingcap/tidb/planner/util" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/types" @@ -47,7 +48,9 @@ func (b *PBPlanBuilder) Build(executors []*tipb.Executor) (p PhysicalPlan, err e if err != nil { return nil, errors.Trace(err) } - curr.SetChildren(src) + if src != nil { + curr.SetChildren(src) + } src = curr } _, src = b.predicatePushDown(src, nil) @@ -98,7 +101,7 @@ func (b *PBPlanBuilder) pbToTableScan(e *tipb.Executor) (PhysicalPlan, error) { DBName: dbInfo.Name, Table: tbl.Meta(), Columns: columns, - }.Init(b.sctx, nil, 0) + }.Init(b.sctx, &property.StatsInfo{}, 0) p.SetSchema(schema) if strings.ToUpper(p.Table.Name.O) == infoschema.ClusterTableSlowLog { p.Extractor = &SlowQueryExtractor{} @@ -131,7 +134,7 @@ func (b *PBPlanBuilder) pbToSelection(e *tipb.Executor) (PhysicalPlan, error) { } p := PhysicalSelection{ Conditions: conds, - }.Init(b.sctx, nil, 0) + }.Init(b.sctx, &property.StatsInfo{}, 0, &property.PhysicalProperty{}) return p, nil } @@ -149,14 +152,14 @@ func (b *PBPlanBuilder) pbToTopN(e *tipb.Executor) (PhysicalPlan, error) { p := PhysicalTopN{ ByItems: byItems, Count: topN.Limit, - }.Init(b.sctx, nil, 0) + }.Init(b.sctx, &property.StatsInfo{}, 0, &property.PhysicalProperty{}) return p, nil } func (b *PBPlanBuilder) pbToLimit(e *tipb.Executor) (PhysicalPlan, error) { p := PhysicalLimit{ Count: e.Limit.Limit, - }.Init(b.sctx, nil, 0) + }.Init(b.sctx, &property.StatsInfo{}, 0, &property.PhysicalProperty{}) return p, nil } @@ -173,9 +176,9 @@ func (b *PBPlanBuilder) pbToAgg(e *tipb.Executor, isStreamAgg bool) (PhysicalPla baseAgg.schema = schema var partialAgg PhysicalPlan if isStreamAgg { - partialAgg = baseAgg.initForStream(b.sctx, nil, 0) + partialAgg = baseAgg.initForStream(b.sctx, &property.StatsInfo{}, 0, &property.PhysicalProperty{}) } else { - partialAgg = baseAgg.initForHash(b.sctx, nil, 0) + partialAgg = baseAgg.initForHash(b.sctx, &property.StatsInfo{}, 0, &property.PhysicalProperty{}) } return partialAgg, nil } diff --git a/planner/core/rule_inject_extra_projection.go b/planner/core/rule_inject_extra_projection.go index bee2e77b63e15..2716c4fffa328 100644 --- a/planner/core/rule_inject_extra_projection.go +++ b/planner/core/rule_inject_extra_projection.go @@ -20,11 +20,15 @@ import ( "github.com/pingcap/tidb/sessionctx" ) -// injectExtraProjection is used to extract the expressions of specific +// InjectExtraProjection is used to extract the expressions of specific // operators into a physical Projection operator and inject the Projection below // the operators. Thus we can accelerate the expression evaluation by eager // evaluation. -func injectExtraProjection(plan PhysicalPlan) PhysicalPlan { +// This function will be called in two situations: +// 1. In postOptimize. +// 2. TiDB can be used as a coprocessor, when a plan tree been pushed down to +// TiDB, we need to inject extra projections for the plan tree as well. +func InjectExtraProjection(plan PhysicalPlan) PhysicalPlan { return NewProjInjector().inject(plan) } From 5f07350b39589e974405bf7a1fa961fb0cd97241 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Fri, 20 Nov 2020 14:43:32 +0800 Subject: [PATCH 137/229] ddl: Fix partition value type check (#21016) (#21136) --- ddl/db_partition_test.go | 91 ++++++++++++++++++++++++++++++++++++++++ ddl/ddl_api.go | 24 ++++++++++- 2 files changed, 114 insertions(+), 1 deletion(-) diff --git a/ddl/db_partition_test.go b/ddl/db_partition_test.go index 481cbe05fd01e..42a6e80522c3c 100644 --- a/ddl/db_partition_test.go +++ b/ddl/db_partition_test.go @@ -1883,3 +1883,94 @@ func (s *testIntegrationSuite3) TestCommitWhenSchemaChange(c *C) { tk.MustExec("admin check table schema_change") tk.MustQuery("select * from schema_change").Check(testkit.Rows()) } + +func (s *testIntegrationSuite7) TestCreatePartitionTableWithWrongType(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t") + var err error + _, err = tk.Exec(`create table t( + b int(10) + ) partition by range columns (b) ( + partition p0 values less than (0x10), + partition p3 values less than (0x20) + )`) + c.Assert(err, NotNil) + c.Assert(ddl.ErrWrongTypeColumnValue.Equal(err), IsTrue) + + _, err = tk.Exec(`create table t( + b int(10) + ) partition by range columns (b) ( + partition p0 values less than ('g'), + partition p3 values less than ('k') + )`) + c.Assert(err, NotNil) + c.Assert(ddl.ErrWrongTypeColumnValue.Equal(err), IsTrue) + + _, err = tk.Exec(`create table t( + b char(10) + ) partition by range columns (b) ( + partition p0 values less than (30), + partition p3 values less than (60) + )`) + c.Assert(err, NotNil) + c.Assert(ddl.ErrWrongTypeColumnValue.Equal(err), IsTrue) + + _, err = tk.Exec(`create table t( + b datetime + ) partition by range columns (b) ( + partition p0 values less than ('g'), + partition p3 values less than ('m') + )`) + c.Assert(err, NotNil) +} + +func (s *testIntegrationSuite7) TestAddPartitionForTableWithWrongType(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk.MustExec("drop tables if exists t_int, t_char, t_date") + tk.MustExec(`create table t_int(b int(10)) + partition by range columns (b) ( + partition p0 values less than (10) + )`) + + tk.MustExec(`create table t_char(b char(10)) + partition by range columns (b) ( + partition p0 values less than ('a') + )`) + + tk.MustExec(`create table t_date(b datetime) + partition by range columns (b) ( + partition p0 values less than ('2020-09-01') + )`) + + var err error + + _, err = tk.Exec("alter table t_int add partition (partition p1 values less than ('g'))") + c.Assert(err, NotNil) + c.Assert(ddl.ErrWrongTypeColumnValue.Equal(err), IsTrue) + + _, err = tk.Exec("alter table t_int add partition (partition p1 values less than (0x20))") + c.Assert(err, NotNil) + c.Assert(ddl.ErrWrongTypeColumnValue.Equal(err), IsTrue) + + _, err = tk.Exec("alter table t_char add partition (partition p1 values less than (0x20))") + c.Assert(err, NotNil) + c.Assert(ddl.ErrWrongTypeColumnValue.Equal(err), IsTrue) + + _, err = tk.Exec("alter table t_char add partition (partition p1 values less than (10))") + c.Assert(err, NotNil) + c.Assert(ddl.ErrWrongTypeColumnValue.Equal(err), IsTrue) + + _, err = tk.Exec("alter table t_date add partition (partition p1 values less than ('m'))") + c.Assert(err, NotNil) + c.Assert(ddl.ErrWrongTypeColumnValue.Equal(err), IsTrue) + + _, err = tk.Exec("alter table t_date add partition (partition p1 values less than (0x20))") + c.Assert(err, NotNil) + c.Assert(ddl.ErrWrongTypeColumnValue.Equal(err), IsTrue) + + _, err = tk.Exec("alter table t_date add partition (partition p1 values less than (20))") + c.Assert(err, NotNil) + c.Assert(ddl.ErrWrongTypeColumnValue.Equal(err), IsTrue) +} diff --git a/ddl/ddl_api.go b/ddl/ddl_api.go index cb2e509831d5a..7d14a38382bcc 100644 --- a/ddl/ddl_api.go +++ b/ddl/ddl_api.go @@ -4346,10 +4346,32 @@ func checkRangeColumnsTypeAndValuesMatch(ctx sessionctx.Context, meta *model.Tab } // Check val.ConvertTo(colType) doesn't work, so we need this case by case check. + vkind := val.Kind() switch colType.Tp { case mysql.TypeDate, mysql.TypeDatetime: - switch val.Kind() { + switch vkind { case types.KindString, types.KindBytes: + if _, err := val.ConvertTo(ctx.GetSessionVars().StmtCtx, colType); err != nil { + return ErrWrongTypeColumnValue.GenWithStackByArgs() + } + default: + return ErrWrongTypeColumnValue.GenWithStackByArgs() + } + case mysql.TypeTiny, mysql.TypeShort, mysql.TypeInt24, mysql.TypeLong, mysql.TypeLonglong: + switch vkind { + case types.KindInt64, types.KindUint64, types.KindNull: + default: + return ErrWrongTypeColumnValue.GenWithStackByArgs() + } + case mysql.TypeFloat, mysql.TypeDouble: + switch vkind { + case types.KindFloat32, types.KindFloat64, types.KindNull: + default: + return ErrWrongTypeColumnValue.GenWithStackByArgs() + } + case mysql.TypeString, mysql.TypeVarString: + switch vkind { + case types.KindString, types.KindBytes, types.KindNull: default: return ErrWrongTypeColumnValue.GenWithStackByArgs() } From cc61a9ff0dede098744c20174c1bcc9fa67242da Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Fri, 20 Nov 2020 16:57:19 +0800 Subject: [PATCH 138/229] cherry pick #19620 to release-4.0 (#21019) Signed-off-by: ti-srebot Co-authored-by: Kenan Yao --- cmd/explaintest/r/explain_easy.result | 24 ++++----- cmd/explaintest/r/explain_easy_stats.result | 15 +++--- executor/executor_test.go | 26 +++++++++ executor/join_test.go | 59 +++++++++++++++++++++ expression/aggregation/base_func_test.go | 11 ---- expression/aggregation/descriptor.go | 41 ++++++++++++++ expression/expression.go | 10 ++++ planner/core/expression_rewriter.go | 51 ++++++++++++++---- planner/core/logical_plan_builder.go | 28 +++++++--- 9 files changed, 217 insertions(+), 48 deletions(-) diff --git a/cmd/explaintest/r/explain_easy.result b/cmd/explaintest/r/explain_easy.result index 0352729eac8f1..8edcb4ec78ae8 100644 --- a/cmd/explaintest/r/explain_easy.result +++ b/cmd/explaintest/r/explain_easy.result @@ -231,20 +231,18 @@ StreamAgg_12 1.00 root funcs:sum(Column#10)->Column#8 └─TableFullScan_14 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo explain select 1 in (select c2 from t2) from t1; id estRows task access object operator info -HashJoin_7 10000.00 root CARTESIAN left outer semi join -├─TableReader_14(Build) 10.00 root data:Selection_13 -│ └─Selection_13 10.00 cop[tikv] eq(1, test.t2.c2) -│ └─TableFullScan_12 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo +HashJoin_7 10000.00 root CARTESIAN left outer semi join, other cond:eq(1, test.t2.c2) +├─TableReader_13(Build) 10000.00 root data:TableFullScan_12 +│ └─TableFullScan_12 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo └─TableReader_9(Probe) 10000.00 root data:TableFullScan_8 └─TableFullScan_8 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo explain select sum(6 in (select c2 from t2)) from t1; id estRows task access object operator info StreamAgg_12 1.00 root funcs:sum(Column#10)->Column#8 -└─Projection_22 10000.00 root cast(Column#7, decimal(65,0) BINARY)->Column#10 - └─HashJoin_21 10000.00 root CARTESIAN left outer semi join - ├─TableReader_20(Build) 10.00 root data:Selection_19 - │ └─Selection_19 10.00 cop[tikv] eq(6, test.t2.c2) - │ └─TableFullScan_18 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo +└─Projection_21 10000.00 root cast(Column#7, decimal(65,0) BINARY)->Column#10 + └─HashJoin_20 10000.00 root CARTESIAN left outer semi join, other cond:eq(6, test.t2.c2) + ├─TableReader_19(Build) 10000.00 root data:TableFullScan_18 + │ └─TableFullScan_18 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo └─TableReader_15(Probe) 10000.00 root data:TableFullScan_14 └─TableFullScan_14 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo explain format="dot" select sum(t1.c1 in (select c1 from t2)) from t1; @@ -285,7 +283,7 @@ node [style=filled, color=lightgrey] color=black label = "root" "HashJoin_7" -> "TableReader_9" -"HashJoin_7" -> "TableReader_14" +"HashJoin_7" -> "TableReader_13" } subgraph cluster8{ node [style=filled, color=lightgrey] @@ -293,14 +291,14 @@ color=black label = "cop" "TableFullScan_8" } -subgraph cluster13{ +subgraph cluster12{ node [style=filled, color=lightgrey] color=black label = "cop" -"Selection_13" -> "TableFullScan_12" +"TableFullScan_12" } "TableReader_9" -> "TableFullScan_8" -"TableReader_14" -> "Selection_13" +"TableReader_13" -> "TableFullScan_12" } drop table if exists t1, t2, t3, t4; diff --git a/cmd/explaintest/r/explain_easy_stats.result b/cmd/explaintest/r/explain_easy_stats.result index d1f24db588973..f401a70299640 100644 --- a/cmd/explaintest/r/explain_easy_stats.result +++ b/cmd/explaintest/r/explain_easy_stats.result @@ -120,10 +120,9 @@ Limit_10 1.00 root offset:0, count:1 set @@session.tidb_opt_insubq_to_join_and_agg=0; explain select 1 in (select c2 from t2) from t1; id estRows task access object operator info -HashJoin_7 1999.00 root CARTESIAN left outer semi join -├─TableReader_14(Build) 0.00 root data:Selection_13 -│ └─Selection_13 0.00 cop[tikv] eq(1, test.t2.c2) -│ └─TableFullScan_12 1985.00 cop[tikv] table:t2 keep order:false +HashJoin_7 1999.00 root CARTESIAN left outer semi join, other cond:eq(1, test.t2.c2) +├─TableReader_13(Build) 1985.00 root data:TableFullScan_12 +│ └─TableFullScan_12 1985.00 cop[tikv] table:t2 keep order:false └─TableReader_9(Probe) 1999.00 root data:TableFullScan_8 └─TableFullScan_8 1999.00 cop[tikv] table:t1 keep order:false explain format="dot" select 1 in (select c2 from t2) from t1; @@ -135,7 +134,7 @@ node [style=filled, color=lightgrey] color=black label = "root" "HashJoin_7" -> "TableReader_9" -"HashJoin_7" -> "TableReader_14" +"HashJoin_7" -> "TableReader_13" } subgraph cluster8{ node [style=filled, color=lightgrey] @@ -143,14 +142,14 @@ color=black label = "cop" "TableFullScan_8" } -subgraph cluster13{ +subgraph cluster12{ node [style=filled, color=lightgrey] color=black label = "cop" -"Selection_13" -> "TableFullScan_12" +"TableFullScan_12" } "TableReader_9" -> "TableFullScan_8" -"TableReader_14" -> "Selection_13" +"TableReader_13" -> "TableFullScan_12" } explain select * from index_prune WHERE a = 1010010404050976781 AND b = 26467085526790 LIMIT 1; diff --git a/executor/executor_test.go b/executor/executor_test.go index ff1266c2fcf7b..aa3427c739c36 100644 --- a/executor/executor_test.go +++ b/executor/executor_test.go @@ -2311,6 +2311,32 @@ func (s *testSuiteP2) TestRow(c *C) { result.Check(testkit.Rows("0")) result = tk.MustQuery("select (select 1)") result.Check(testkit.Rows("1")) + + tk.MustExec("drop table if exists t1") + tk.MustExec("create table t1 (a int, b int)") + tk.MustExec("insert t1 values (1,2),(1,null)") + tk.MustExec("drop table if exists t2") + tk.MustExec("create table t2 (c int, d int)") + tk.MustExec("insert t2 values (0,0)") + + tk.MustQuery("select * from t2 where (1,2) in (select * from t1)").Check(testkit.Rows("0 0")) + tk.MustQuery("select * from t2 where (1,2) not in (select * from t1)").Check(testkit.Rows()) + tk.MustQuery("select * from t2 where (1,1) not in (select * from t1)").Check(testkit.Rows()) + tk.MustQuery("select * from t2 where (1,null) in (select * from t1)").Check(testkit.Rows()) + tk.MustQuery("select * from t2 where (null,null) in (select * from t1)").Check(testkit.Rows()) + + tk.MustExec("delete from t1 where a=1 and b=2") + tk.MustQuery("select (1,1) in (select * from t2) from t1").Check(testkit.Rows("0")) + tk.MustQuery("select (1,1) not in (select * from t2) from t1").Check(testkit.Rows("1")) + tk.MustQuery("select (1,1) in (select 1,1 from t2) from t1").Check(testkit.Rows("1")) + tk.MustQuery("select (1,1) not in (select 1,1 from t2) from t1").Check(testkit.Rows("0")) + + // MySQL 5.7 returns 1 for these 2 queries, which is wrong. + tk.MustQuery("select (1,null) not in (select 1,1 from t2) from t1").Check(testkit.Rows("")) + tk.MustQuery("select (t1.a,null) not in (select 1,1 from t2) from t1").Check(testkit.Rows("")) + + tk.MustQuery("select (1,null) in (select * from t1)").Check(testkit.Rows("")) + tk.MustQuery("select (1,null) not in (select * from t1)").Check(testkit.Rows("")) } func (s *testSuiteP2) TestColumnName(c *C) { diff --git a/executor/join_test.go b/executor/join_test.go index bbd84306e9212..ecada9ae8d098 100644 --- a/executor/join_test.go +++ b/executor/join_test.go @@ -928,6 +928,65 @@ func (s *testSuiteJoin3) TestSubquery(c *C) { tk.MustExec("insert into t2 values(1)") tk.MustQuery("select * from t1 where a in (select a from t2)").Check(testkit.Rows("1")) + tk.MustExec("insert into t2 value(null)") + tk.MustQuery("select * from t1 where 1 in (select b from t2)").Check(testkit.Rows("1")) + tk.MustQuery("select * from t1 where 1 not in (select b from t2)").Check(testkit.Rows()) + tk.MustQuery("select * from t1 where 2 not in (select b from t2)").Check(testkit.Rows()) + tk.MustQuery("select * from t1 where 2 in (select b from t2)").Check(testkit.Rows()) + tk.MustQuery("select 1 in (select b from t2) from t1").Check(testkit.Rows("1")) + tk.MustQuery("select 1 in (select 1 from t2) from t1").Check(testkit.Rows("1")) + tk.MustQuery("select 1 not in (select b from t2) from t1").Check(testkit.Rows("0")) + tk.MustQuery("select 1 not in (select 1 from t2) from t1").Check(testkit.Rows("0")) + + tk.MustExec("delete from t2 where b=1") + tk.MustQuery("select 1 in (select b from t2) from t1").Check(testkit.Rows("")) + tk.MustQuery("select 1 not in (select b from t2) from t1").Check(testkit.Rows("")) + tk.MustQuery("select 1 not in (select 1 from t2) from t1").Check(testkit.Rows("0")) + tk.MustQuery("select 1 in (select 1 from t2) from t1").Check(testkit.Rows("1")) + tk.MustQuery("select 1 not in (select null from t1) from t2").Check(testkit.Rows("")) + tk.MustQuery("select 1 in (select null from t1) from t2").Check(testkit.Rows("")) + + tk.MustExec("drop table if exists s") + tk.MustExec("create table s(a int not null, b int)") + tk.MustExec("set sql_mode = ''") + tk.MustQuery("select (2,0) in (select s.a, min(s.b) from s) as f").Check(testkit.Rows("")) + tk.MustQuery("select (2,0) not in (select s.a, min(s.b) from s) as f").Check(testkit.Rows("")) + tk.MustQuery("select (2,0) = any (select s.a, min(s.b) from s) as f").Check(testkit.Rows("")) + tk.MustQuery("select (2,0) != all (select s.a, min(s.b) from s) as f").Check(testkit.Rows("")) + tk.MustQuery("select (2,0) in (select s.b, min(s.b) from s) as f").Check(testkit.Rows("")) + tk.MustQuery("select (2,0) not in (select s.b, min(s.b) from s) as f").Check(testkit.Rows("")) + tk.MustQuery("select (2,0) = any (select s.b, min(s.b) from s) as f").Check(testkit.Rows("")) + tk.MustQuery("select (2,0) != all (select s.b, min(s.b) from s) as f").Check(testkit.Rows("")) + tk.MustExec("insert into s values(1,null)") + tk.MustQuery("select 1 in (select b from s)").Check(testkit.Rows("")) + + tk.MustExec("drop table if exists t") + tk.MustExec("create table t(a int)") + tk.MustExec("insert into t values(1),(null)") + tk.MustQuery("select a not in (select 1) from t").Sort().Check(testkit.Rows( + "0", + "", + )) + tk.MustQuery("select 1 not in (select null from t t1) from t").Check(testkit.Rows( + "", + "", + )) + tk.MustQuery("select 1 in (select null from t t1) from t").Check(testkit.Rows( + "", + "", + )) + tk.MustQuery("select a in (select 0) xx from (select null as a) x").Check(testkit.Rows("")) + + tk.MustExec("drop table t") + tk.MustExec("create table t(a int, b int)") + tk.MustExec("insert into t values(1,null),(null, null),(null, 2)") + tk.MustQuery("select * from t t1 where (2 in (select a from t t2 where (t2.b=t1.b) is null))").Check(testkit.Rows()) + tk.MustQuery("select (t2.a in (select t1.a from t t1)) is true from t t2").Sort().Check(testkit.Rows( + "0", + "0", + "1", + )) + tk.MustExec("set @@tidb_hash_join_concurrency=5") } diff --git a/expression/aggregation/base_func_test.go b/expression/aggregation/base_func_test.go index bf6e96364fe39..ba7fd757fdbaa 100644 --- a/expression/aggregation/base_func_test.go +++ b/expression/aggregation/base_func_test.go @@ -39,14 +39,3 @@ func (s *testBaseFuncSuite) TestClone(c *check.C) { c.Assert(desc.Args[0], check.Equals, col) c.Assert(desc.equal(s.ctx, cloned), check.IsFalse) } - -func (s *testBaseFuncSuite) TestMaxMin(c *check.C) { - col := &expression.Column{ - UniqueID: 0, - RetType: types.NewFieldType(mysql.TypeLonglong), - } - col.RetType.Flag |= mysql.NotNullFlag - desc, err := newBaseFuncDesc(s.ctx, ast.AggFuncMax, []expression.Expression{col}) - c.Assert(err, check.IsNil) - c.Assert(mysql.HasNotNullFlag(desc.RetTp.Flag), check.IsFalse) -} diff --git a/expression/aggregation/descriptor.go b/expression/aggregation/descriptor.go index 0c08c48f03961..af16d26b1f81a 100644 --- a/expression/aggregation/descriptor.go +++ b/expression/aggregation/descriptor.go @@ -19,6 +19,7 @@ import ( "math" "strconv" + "github.com/pingcap/errors" "github.com/pingcap/parser/ast" "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/expression" @@ -272,3 +273,43 @@ func (a *AggFuncDesc) evalNullValueInOuterJoin4BitOr(ctx sessionctx.Context, sch } return con.Value, true } + +// UpdateNotNullFlag4RetType checks if we should remove the NotNull flag for the return type of the agg. +func (a *AggFuncDesc) UpdateNotNullFlag4RetType(hasGroupBy, allAggsFirstRow bool) error { + var removeNotNull bool + switch a.Name { + case ast.AggFuncCount, ast.AggFuncApproxCountDistinct, ast.AggFuncApproxPercentile, + ast.AggFuncBitAnd, ast.AggFuncBitOr, ast.AggFuncBitXor, + ast.WindowFuncFirstValue, ast.WindowFuncLastValue, ast.WindowFuncNthValue, ast.WindowFuncRowNumber, + ast.WindowFuncRank, ast.WindowFuncDenseRank, ast.WindowFuncCumeDist, ast.WindowFuncNtile, ast.WindowFuncPercentRank, + ast.WindowFuncLead, ast.WindowFuncLag, ast.AggFuncJsonObjectAgg, + ast.AggFuncVarSamp, ast.AggFuncVarPop, ast.AggFuncStddevPop, ast.AggFuncStddevSamp: + removeNotNull = false + case ast.AggFuncSum, ast.AggFuncAvg, ast.AggFuncGroupConcat: + if !hasGroupBy { + removeNotNull = true + } + // `select max(a) from empty_tbl` returns `null`, while `select max(a) from empty_tbl group by b` returns empty. + case ast.AggFuncMax, ast.AggFuncMin: + if !hasGroupBy && a.RetTp.Tp != mysql.TypeBit { + removeNotNull = true + } + // `select distinct a from empty_tbl` returns empty + // `select a from empty_tbl group by b` returns empty + // `select a, max(a) from empty_tbl` returns `(null, null)` + // `select a, max(a) from empty_tbl group by b` returns empty + // `select a, count(a) from empty_tbl` returns `(null, 0)` + // `select a, count(a) from empty_tbl group by b` returns empty + case ast.AggFuncFirstRow: + if !allAggsFirstRow && !hasGroupBy { + removeNotNull = true + } + default: + return errors.Errorf("unsupported agg function: %s", a.Name) + } + if removeNotNull { + a.RetTp = a.RetTp.Clone() + a.RetTp.Flag &^= mysql.NotNullFlag + } + return nil +} diff --git a/expression/expression.go b/expression/expression.go index 144ddab2834e0..35d4c6568a5fc 100644 --- a/expression/expression.go +++ b/expression/expression.go @@ -200,6 +200,16 @@ func IsEQCondFromIn(expr Expression) bool { return len(cols) > 0 } +// ExprNotNull checks if an expression is possible to be null. +func ExprNotNull(expr Expression) bool { + if c, ok := expr.(*Constant); ok { + return !c.Value.IsNull() + } + // For ScalarFunction, the result would not be correct until we support maintaining + // NotNull flag for it. + return mysql.HasNotNullFlag(expr.GetType().Flag) +} + // HandleOverflowOnSelection handles Overflow errors when evaluating selection filters. // We should ignore overflow errors when evaluating selection conditions: // INSERT INTO t VALUES ("999999999999999999"); diff --git a/planner/core/expression_rewriter.go b/planner/core/expression_rewriter.go index e730329951e91..01fd4acc9c698 100644 --- a/planner/core/expression_rewriter.go +++ b/planner/core/expression_rewriter.go @@ -429,16 +429,41 @@ func (er *expressionRewriter) Enter(inNode ast.Node) (ast.Node, bool) { } func (er *expressionRewriter) buildSemiApplyFromEqualSubq(np LogicalPlan, l, r expression.Expression, not bool) { - var condition expression.Expression - if rCol, ok := r.(*expression.Column); ok && (er.asScalar || not) { - // If both input columns of `!= all / = any` expression are not null, we can treat the expression - // as normal column equal condition. - if lCol, ok := l.(*expression.Column); !ok || !mysql.HasNotNullFlag(lCol.GetType().Flag) || !mysql.HasNotNullFlag(rCol.GetType().Flag) { - rColCopy := *rCol - rColCopy.InOperand = true - r = &rColCopy + if er.asScalar || not { + if expression.GetRowLen(r) == 1 { + rCol := r.(*expression.Column) + // If both input columns of `!= all / = any` expression are not null, we can treat the expression + // as normal column equal condition. + if !expression.ExprNotNull(l) || !expression.ExprNotNull(rCol) { + rColCopy := *rCol + rColCopy.InOperand = true + r = &rColCopy + } + } else { + rowFunc := r.(*expression.ScalarFunction) + rargs := rowFunc.GetArgs() + args := make([]expression.Expression, 0, len(rargs)) + modified := false + for i, rarg := range rargs { + larg := expression.GetFuncArg(l, i) + if !expression.ExprNotNull(larg) || !expression.ExprNotNull(rarg) { + rCol := rarg.(*expression.Column) + rColCopy := *rCol + rColCopy.InOperand = true + rarg = &rColCopy + modified = true + } + args = append(args, rarg) + } + if modified { + r, er.err = er.newFunction(ast.RowFunc, args[0].GetType(), args...) + if er.err != nil { + return + } + } } } + var condition expression.Expression condition, er.err = er.constructBinaryOpFunction(l, r, ast.EQ) if er.err != nil { return @@ -811,7 +836,7 @@ func (er *expressionRewriter) handleInSubquery(ctx context.Context, v *ast.Patte if v.Not || asScalar { // If both input columns of `in` expression are not null, we can treat the expression // as normal column equal condition instead. - if !mysql.HasNotNullFlag(lexpr.GetType().Flag) || !mysql.HasNotNullFlag(rCol.GetType().Flag) { + if !expression.ExprNotNull(lexpr) || !expression.ExprNotNull(rCol) { rColCopy := *rCol rColCopy.InOperand = true rexpr = &rColCopy @@ -819,7 +844,13 @@ func (er *expressionRewriter) handleInSubquery(ctx context.Context, v *ast.Patte } } else { args := make([]expression.Expression, 0, np.Schema().Len()) - for _, col := range np.Schema().Columns { + for i, col := range np.Schema().Columns { + larg := expression.GetFuncArg(lexpr, i) + if !expression.ExprNotNull(larg) || !expression.ExprNotNull(col) { + rarg := *col + rarg.InOperand = true + col = &rarg + } args = append(args, col) } rexpr, er.err = er.newFunction(ast.RowFunc, args[0].GetType(), args...) diff --git a/planner/core/logical_plan_builder.go b/planner/core/logical_plan_builder.go index 2302bc0877deb..5a4dc360a4dbc 100644 --- a/planner/core/logical_plan_builder.go +++ b/planner/core/logical_plan_builder.go @@ -193,6 +193,7 @@ func (b *PlanBuilder) buildAggregation(ctx context.Context, p LogicalPlan, aggFu // aggIdxMap maps the old index to new index after applying common aggregation functions elimination. aggIndexMap := make(map[int]int) + allAggsFirstRow := true for i, aggFunc := range aggFuncList { newArgList := make([]expression.Expression, 0, len(aggFunc.Args)) for _, arg := range aggFunc.Args { @@ -207,6 +208,9 @@ func (b *PlanBuilder) buildAggregation(ctx context.Context, p LogicalPlan, aggFu if err != nil { return nil, nil, err } + if newFunc.Name != ast.AggFuncFirstRow { + allAggsFirstRow = false + } if aggFunc.Order != nil { trueArgs := aggFunc.Args[:len(aggFunc.Args)-1] // the last argument is SEPARATOR, remote it. resolver := &aggOrderByResolver{ @@ -258,6 +262,14 @@ func (b *PlanBuilder) buildAggregation(ctx context.Context, p LogicalPlan, aggFu schema4Agg.Append(newCol) names = append(names, p.OutputNames()[i]) } + hasGroupBy := len(gbyItems) > 0 + for i, aggFunc := range plan4Agg.AggFuncs { + err := aggFunc.UpdateNotNullFlag4RetType(hasGroupBy, allAggsFirstRow) + if err != nil { + return nil, nil, err + } + schema4Agg.Columns[i].RetType = aggFunc.RetTp + } plan4Agg.names = names plan4Agg.SetChildren(p) plan4Agg.GroupByItems = gbyItems @@ -370,6 +382,15 @@ func (p *LogicalJoin) ExtractOnCondition( deriveRight bool) (eqCond []*expression.ScalarFunction, leftCond []expression.Expression, rightCond []expression.Expression, otherCond []expression.Expression) { for _, expr := range conditions { + // For queries like `select a in (select a from s where s.b = t.b) from t`, + // if subquery is empty caused by `s.b = t.b`, the result should always be + // false even if t.a is null or s.a is null. To make this join "empty aware", + // we should differentiate `t.a = s.a` from other column equal conditions, so + // we put it into OtherConditions instead of EqualConditions of join. + if expression.IsEQCondFromIn(expr) { + otherCond = append(otherCond, expr) + continue + } binop, ok := expr.(*expression.ScalarFunction) if ok && len(binop.GetArgs()) == 2 { ctx := binop.GetCtx() @@ -396,12 +417,7 @@ func (p *LogicalJoin) ExtractOnCondition( rightCond = append(rightCond, notNullExpr) } } - // For queries like `select a in (select a from s where s.b = t.b) from t`, - // if subquery is empty caused by `s.b = t.b`, the result should always be - // false even if t.a is null or s.a is null. To make this join "empty aware", - // we should differentiate `t.a = s.a` from other column equal conditions, so - // we put it into OtherConditions instead of EqualConditions of join. - if binop.FuncName.L == ast.EQ && !arg0.InOperand && !arg1.InOperand { + if binop.FuncName.L == ast.EQ { cond := expression.NewFunctionInternal(ctx, ast.EQ, types.NewFieldType(mysql.TypeTiny), arg0, arg1) eqCond = append(eqCond, cond.(*expression.ScalarFunction)) continue From bf4ba973c2f36358f1ad59458b6f3ad297ceb0b4 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Mon, 23 Nov 2020 12:31:23 +0800 Subject: [PATCH 139/229] tikv: add size limit to batch get cache (#21015) (#21129) Signed-off-by: ti-srebot --- store/tikv/snapshot.go | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/store/tikv/snapshot.go b/store/tikv/snapshot.go index 3b0eeaf2380e7..553981e4b6e7a 100644 --- a/store/tikv/snapshot.go +++ b/store/tikv/snapshot.go @@ -73,8 +73,9 @@ type tikvSnapshot struct { // It's OK as long as there are no zero-byte values in the protocol. mu struct { sync.RWMutex - cached map[string][]byte - stats *SnapshotRuntimeStats + cached map[string][]byte + cachedSize int + stats *SnapshotRuntimeStats } } @@ -169,7 +170,23 @@ func (s *tikvSnapshot) BatchGet(ctx context.Context, keys []kv.Key) (map[string] s.mu.cached = make(map[string][]byte, len(m)) } for _, key := range keys { - s.mu.cached[string(key)] = m[string(key)] + val := m[string(key)] + s.mu.cachedSize += len(key) + len(val) + s.mu.cached[string(key)] = val + } + + const cachedSizeLimit = 10 << 30 + if s.mu.cachedSize >= cachedSizeLimit { + for k, v := range s.mu.cached { + if _, needed := m[k]; needed { + continue + } + delete(s.mu.cached, k) + s.mu.cachedSize -= len(k) + len(v) + if s.mu.cachedSize < cachedSizeLimit { + break + } + } } s.mu.Unlock() From 3cfa1d49e4d1c855e36b8dfdcfd09a1be525390d Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Mon, 23 Nov 2020 13:33:53 +0800 Subject: [PATCH 140/229] distsql: fix issue of table reader runtime stats display wrong result. (#21072) (#21133) Signed-off-by: ti-srebot --- distsql/distsql_test.go | 12 ++++++++++++ distsql/select_result.go | 8 +++++--- store/tikv/region_request.go | 12 ++++++++++++ 3 files changed, 29 insertions(+), 3 deletions(-) diff --git a/distsql/distsql_test.go b/distsql/distsql_test.go index 5a5cfa8230db1..2d47892f4fc12 100644 --- a/distsql/distsql_test.go +++ b/distsql/distsql_test.go @@ -28,6 +28,7 @@ import ( "github.com/pingcap/tidb/sessionctx/variable" "github.com/pingcap/tidb/statistics" "github.com/pingcap/tidb/store/tikv" + "github.com/pingcap/tidb/store/tikv/tikvrpc" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/chunk" "github.com/pingcap/tidb/util/codec" @@ -179,6 +180,17 @@ func (s *testSuite) TestSelectResultRuntimeStats(c *C) { c.Assert(stats.String(), Equals, expect) // Test for idempotence. c.Assert(stats.String(), Equals, expect) + + s1.rpcStat.Stats[tikvrpc.CmdCop] = &tikv.RPCRuntimeStats{ + Count: 1, + Consume: int64(time.Second), + } + stmtStats.RegisterStats(2, s1) + stats = stmtStats.GetRootStats(2) + expect = "cop_task: {num: 2, max: 1s, min: 1ms, avg: 500.5ms, p95: 1s, max_proc_keys: 200, p95_proc_keys: 200, tot_proc: 1s, tot_wait: 1s, rpc_num: 1, rpc_time: 1s, copr_cache_hit_ratio: 0.00}, backoff{RegionMiss: 1ms}" + c.Assert(stats.String(), Equals, expect) + // Test for idempotence. + c.Assert(stats.String(), Equals, expect) } func (s *testSuite) createSelectStreaming(batch, totalRows int, c *C) (*streamResult, []*types.FieldType) { diff --git a/distsql/select_result.go b/distsql/select_result.go index 61853c7e2687f..e819b2e890550 100644 --- a/distsql/select_result.go +++ b/distsql/select_result.go @@ -387,6 +387,7 @@ func (s *selectResultRuntimeStats) Merge(rs execdetails.RuntimeStats) { func (s *selectResultRuntimeStats) String() string { buf := bytes.NewBuffer(nil) + rpcStat := s.rpcStat if len(s.copRespTime) > 0 { size := len(s.copRespTime) if size == 1 { @@ -424,9 +425,10 @@ func (s *selectResultRuntimeStats) String() string { } } } - copRPC := s.rpcStat.Stats[tikvrpc.CmdCop] + copRPC := rpcStat.Stats[tikvrpc.CmdCop] if copRPC != nil && copRPC.Count > 0 { - delete(s.rpcStat.Stats, tikvrpc.CmdCop) + rpcStat = rpcStat.Clone() + delete(rpcStat.Stats, tikvrpc.CmdCop) buf.WriteString(", rpc_num: ") buf.WriteString(strconv.FormatInt(copRPC.Count, 10)) buf.WriteString(", rpc_time: ") @@ -437,7 +439,7 @@ func (s *selectResultRuntimeStats) String() string { buf.WriteString("}") } - rpcStatsStr := s.rpcStat.String() + rpcStatsStr := rpcStat.String() if len(rpcStatsStr) > 0 { buf.WriteString(", ") buf.WriteString(rpcStatsStr) diff --git a/store/tikv/region_request.go b/store/tikv/region_request.go index fbd7f1d5f75fe..8d563870f1e18 100644 --- a/store/tikv/region_request.go +++ b/store/tikv/region_request.go @@ -98,6 +98,18 @@ func (r *RegionRequestRuntimeStats) String() string { return buf.String() } +// Clone returns a copy of itself. +func (r *RegionRequestRuntimeStats) Clone() RegionRequestRuntimeStats { + newRs := NewRegionRequestRuntimeStats() + for cmd, v := range r.Stats { + newRs.Stats[cmd] = &RPCRuntimeStats{ + Count: v.Count, + Consume: v.Consume, + } + } + return newRs +} + // Merge merges other RegionRequestRuntimeStats. func (r *RegionRequestRuntimeStats) Merge(rs RegionRequestRuntimeStats) { for cmd, v := range rs.Stats { From 98d60e5fd3777332f7409595e56fb077e5b67187 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Mon, 23 Nov 2020 15:17:55 +0800 Subject: [PATCH 141/229] planner: `DELETE` cannot delete data in some cases when the database name is capitalized (#21202) (#21206) Co-authored-by: Yiding Cui --- executor/delete_test.go | 20 ++++++++++++++++++++ planner/core/logical_plan_builder.go | 10 +++++----- 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/executor/delete_test.go b/executor/delete_test.go index 437377d1bd94b..658fc39150dc7 100644 --- a/executor/delete_test.go +++ b/executor/delete_test.go @@ -101,3 +101,23 @@ func (s *testSuite8) TestDeleteLockKey(c *C) { } wg.Wait() } + +func (s *testSuite8) TestIssue21200(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("drop database if exists TEST1") + tk.MustExec("create database TEST1") + tk.MustExec("use TEST1") + tk.MustExec("create table t(a int)") + tk.MustExec("create table t1(a int)") + tk.MustExec("insert into t values(1)") + tk.MustExec("insert into t1 values(1)") + tk.MustExec("delete a from t a where exists (select 1 from t1 where t1.a=a.a)") + tk.MustQuery("select * from t").Check(testkit.Rows()) + + tk.MustExec("insert into t values(1), (2)") + tk.MustExec("insert into t1 values(2)") + tk.MustExec("prepare stmt from 'delete a from t a where exists (select 1 from t1 where a.a=t1.a and t1.a=?)'") + tk.MustExec("set @a=1") + tk.MustExec("execute stmt using @a") + tk.MustQuery("select * from t").Check(testkit.Rows("2")) +} diff --git a/planner/core/logical_plan_builder.go b/planner/core/logical_plan_builder.go index 5a4dc360a4dbc..10f659a032399 100644 --- a/planner/core/logical_plan_builder.go +++ b/planner/core/logical_plan_builder.go @@ -3809,12 +3809,12 @@ func (b *PlanBuilder) buildDelete(ctx context.Context, delete *ast.DeleteStmt) ( for _, tn := range delete.Tables.Tables { foundMatch := false for _, v := range tableList { - dbName := v.Schema.L - if dbName == "" { - dbName = b.ctx.GetSessionVars().CurrentDB + dbName := v.Schema + if dbName.L == "" { + dbName = model.NewCIStr(b.ctx.GetSessionVars().CurrentDB) } - if (tn.Schema.L == "" || tn.Schema.L == dbName) && tn.Name.L == v.Name.L { - tn.Schema.L = dbName + if (tn.Schema.L == "" || tn.Schema.L == dbName.L) && tn.Name.L == v.Name.L { + tn.Schema = dbName tn.DBInfo = v.DBInfo tn.TableInfo = v.TableInfo foundMatch = true From 5c1aa3cb7d5dee066978b2a3e97b4144e5e433d7 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Mon, 23 Nov 2020 17:28:53 +0800 Subject: [PATCH 142/229] ddl, planner: make partition table consider collation in create table and select sentence (#20937) (#21181) Signed-off-by: ti-srebot --- ddl/db_partition_test.go | 24 +++++++++++- ddl/ddl_api.go | 16 ++++++-- ddl/partition.go | 5 --- planner/core/partition_pruning_test.go | 49 +++++++++++++++++++++++- planner/core/rule_partition_processor.go | 7 ++-- 5 files changed, 88 insertions(+), 13 deletions(-) diff --git a/ddl/db_partition_test.go b/ddl/db_partition_test.go index 42a6e80522c3c..32eb70cb91b46 100644 --- a/ddl/db_partition_test.go +++ b/ddl/db_partition_test.go @@ -41,6 +41,7 @@ import ( "github.com/pingcap/tidb/tablecodec" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/admin" + "github.com/pingcap/tidb/util/collate" "github.com/pingcap/tidb/util/mock" "github.com/pingcap/tidb/util/testkit" ) @@ -335,7 +336,9 @@ func (s *testIntegrationSuite2) TestCreateTableWithHashPartition(c *C) { tk.MustGetErrCode("select * from t_sub partition (p0)", tmysql.ErrPartitionClauseOnNonpartitioned) } -func (s *testIntegrationSuite1) TestCreateTableWithRangeColumnPartition(c *C) { +func (s *testIntegrationSuite7) TestCreateTableWithRangeColumnPartition(c *C) { + collate.SetNewCollationEnabledForTest(true) + defer collate.SetNewCollationEnabledForTest(false) tk := testkit.NewTestKit(c, s.store) tk.MustExec("use test;") tk.MustExec("drop table if exists log_message_1;") @@ -456,6 +459,13 @@ create table log_message_1 ( "PARTITION p1 VALUES LESS THAN (20190906));", ddl.ErrWrongTypeColumnValue, }, + { + "create table t(a char(10) collate utf8mb4_bin) " + + "partition by range columns (a) (" + + "partition p0 values less than ('a'), " + + "partition p1 values less than ('G'));", + ddl.ErrRangeNotIncreasing, + }, } for i, t := range cases { _, err := tk.Exec(t.sql) @@ -465,13 +475,25 @@ create table log_message_1 ( )) } + tk.MustExec("drop table if exists t1;") tk.MustExec("create table t1 (a int, b char(3)) partition by range columns (a, b) (" + "partition p0 values less than (1, 'a')," + "partition p1 values less than (2, maxvalue))") + tk.MustExec("drop table if exists t2;") tk.MustExec("create table t2 (a int, b char(3)) partition by range columns (b) (" + "partition p0 values less than ( 'a')," + "partition p1 values less than (maxvalue))") + + tk.MustExec("drop table if exists t;") + tk.MustExec(`create table t(a char(10) collate utf8mb4_general_ci) partition by range columns (a) ( + partition p0 values less than ('a'), + partition p1 values less than ('G'));`) + + tk.MustExec("drop table if exists t;") + tk.MustExec(`create table t(a int) partition by range columns (a) ( + partition p0 values less than (10), + partition p1 values less than (20));`) } func (s *testIntegrationSuite3) TestCreateTableWithKeyPartition(c *C) { diff --git a/ddl/ddl_api.go b/ddl/ddl_api.go index 7d14a38382bcc..6073b0ba1bf7d 100644 --- a/ddl/ddl_api.go +++ b/ddl/ddl_api.go @@ -1831,7 +1831,8 @@ func checkTwoRangeColumns(ctx sessionctx.Context, curr, prev *model.PartitionDef // PARTITION p0 VALUES LESS THAN (5,10,'ggg') // PARTITION p1 VALUES LESS THAN (10,20,'mmm') // PARTITION p2 VALUES LESS THAN (15,30,'sss') - succ, err := parseAndEvalBoolExpr(ctx, fmt.Sprintf("(%s) > (%s)", curr.LessThan[i], prev.LessThan[i]), tbInfo) + colInfo := findColumnByName(pi.Columns[i].L, tbInfo) + succ, err := parseAndEvalBoolExpr(ctx, curr.LessThan[i], prev.LessThan[i], colInfo, tbInfo) if err != nil { return false, err } @@ -1843,11 +1844,20 @@ func checkTwoRangeColumns(ctx sessionctx.Context, curr, prev *model.PartitionDef return false, nil } -func parseAndEvalBoolExpr(ctx sessionctx.Context, expr string, tbInfo *model.TableInfo) (bool, error) { - e, err := expression.ParseSimpleExprWithTableInfo(ctx, expr, tbInfo) +func parseAndEvalBoolExpr(ctx sessionctx.Context, l, r string, colInfo *model.ColumnInfo, tbInfo *model.TableInfo) (bool, error) { + lexpr, err := expression.ParseSimpleExprWithTableInfo(ctx, l, tbInfo) if err != nil { return false, err } + rexpr, err := expression.ParseSimpleExprWithTableInfo(ctx, r, tbInfo) + if err != nil { + return false, err + } + e, err := expression.NewFunctionBase(ctx, ast.GT, types.NewFieldType(mysql.TypeLonglong), lexpr, rexpr) + if err != nil { + return false, err + } + e.SetCharsetAndCollation(colInfo.Charset, colInfo.Collate) res, _, err1 := e.EvalInt(ctx, chunk.Row{}) if err1 != nil { return false, err1 diff --git a/ddl/partition.go b/ddl/partition.go index ca706e25a588a..7ea5815036b18 100644 --- a/ddl/partition.go +++ b/ddl/partition.go @@ -317,11 +317,6 @@ func buildTablePartitionInfo(ctx sessionctx.Context, s *ast.CreateTableStmt) (*m } pi.Expr = buf.String() } else if s.Partition.ColumnNames != nil { - // TODO: Support multiple columns for 'PARTITION BY RANGE COLUMNS'. - if len(s.Partition.ColumnNames) != 1 { - pi.Enable = false - ctx.GetSessionVars().StmtCtx.AppendWarning(ErrUnsupportedPartitionByRangeColumns) - } pi.Columns = make([]model.CIStr, 0, len(s.Partition.ColumnNames)) for _, cn := range s.Partition.ColumnNames { pi.Columns = append(pi.Columns, cn.Name) diff --git a/planner/core/partition_pruning_test.go b/planner/core/partition_pruning_test.go index bf4066dc0b6ec..3c4f431f2132f 100644 --- a/planner/core/partition_pruning_test.go +++ b/planner/core/partition_pruning_test.go @@ -21,10 +21,11 @@ import ( "github.com/pingcap/tidb/expression" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/types" + "github.com/pingcap/tidb/util/collate" "github.com/pingcap/tidb/util/mock" ) -var _ = Suite(&testPartitionPruningSuite{}) +var _ = SerialSuites(&testPartitionPruningSuite{}) type testPartitionPruningSuite struct { partitionProcessor @@ -314,6 +315,52 @@ func (s *testPartitionPruningSuite) TestPartitionRangePrunner2VarChar(c *C) { } } +func (s *testPartitionPruningSuite) TestPartitionRangePrunner2CharWithCollation(c *C) { + collate.SetNewCollationEnabledForTest(true) + defer collate.SetNewCollationEnabledForTest(false) + tc := prepareTestCtx(c, + "create table t (a char(32) collate utf8mb4_general_ci)", + "a", + ) + lessThanDataInt := []string{"'c'", "'F'", "'h'", "'L'", "'t'"} + lessThan := make([]expression.Expression, len(lessThanDataInt)+1) // +1 for maxvalue + for i, str := range lessThanDataInt { + tmp, err := expression.ParseSimpleExprsWithNames(tc.sctx, str, tc.schema, tc.names) + c.Assert(err, IsNil) + lessThan[i] = tmp[0] + } + + prunner := &rangeColumnsPruner{lessThan, tc.columns[0], true} + cases := []struct { + input string + result partitionRangeOR + }{ + {"a > 'G'", partitionRangeOR{{2, 6}}}, + {"a > 'g'", partitionRangeOR{{2, 6}}}, + {"a < 'h'", partitionRangeOR{{0, 3}}}, + {"a >= 'M'", partitionRangeOR{{4, 6}}}, + {"a > 'm'", partitionRangeOR{{4, 6}}}, + {"a < 'F'", partitionRangeOR{{0, 2}}}, + {"a = 'C'", partitionRangeOR{{1, 2}}}, + {"a > 't'", partitionRangeOR{{5, 6}}}, + {"a > 'C' and a < 'q'", partitionRangeOR{{1, 5}}}, + {"a > 'c' and a < 'Q'", partitionRangeOR{{1, 5}}}, + {"a < 'l' or a >= 'W'", partitionRangeOR{{0, 4}, {5, 6}}}, + {"a is null", partitionRangeOR{{0, 1}}}, + {"'Mm' > a", partitionRangeOR{{0, 5}}}, + {"'f' <= a", partitionRangeOR{{2, 6}}}, + {"'f' >= a", partitionRangeOR{{0, 3}}}, + } + + for _, ca := range cases { + expr, err := expression.ParseSimpleExprsWithNames(tc.sctx, ca.input, tc.schema, tc.names) + c.Assert(err, IsNil) + result := fullRange(len(lessThan)) + result = partitionRangeForExpr(tc.sctx, expr[0], prunner, result) + c.Assert(equalPartitionRangeOR(ca.result, result), IsTrue, Commentf("unexpected:", ca.input)) + } +} + func (s *testPartitionPruningSuite) TestPartitionRangePrunner2Date(c *C) { tc := prepareTestCtx(c, "create table t (a date)", diff --git a/planner/core/rule_partition_processor.go b/planner/core/rule_partition_processor.go index 69d0c75a7effd..865bb92f0695c 100644 --- a/planner/core/rule_partition_processor.go +++ b/planner/core/rule_partition_processor.go @@ -939,11 +939,11 @@ func (p *rangeColumnsPruner) partitionRangeForExpr(sctx sessionctx.Context, expr return 0, len(p.data), false } - start, end := p.pruneUseBinarySearch(sctx, opName, con) + start, end := p.pruneUseBinarySearch(sctx, opName, con, op) return start, end, true } -func (p *rangeColumnsPruner) pruneUseBinarySearch(sctx sessionctx.Context, op string, data *expression.Constant) (start int, end int) { +func (p *rangeColumnsPruner) pruneUseBinarySearch(sctx sessionctx.Context, op string, data *expression.Constant, f *expression.ScalarFunction) (start int, end int) { var err error var isNull bool compare := func(ith int, op string, v *expression.Constant) bool { @@ -953,7 +953,8 @@ func (p *rangeColumnsPruner) pruneUseBinarySearch(sctx sessionctx.Context, op st } } var expr expression.Expression - expr, err = expression.NewFunction(sctx, op, types.NewFieldType(mysql.TypeLonglong), p.data[ith], v) + expr, err = expression.NewFunctionBase(sctx, op, types.NewFieldType(mysql.TypeLonglong), p.data[ith], v) + expr.SetCharsetAndCollation(f.CharsetAndCollation(sctx)) var val int64 val, isNull, err = expr.EvalInt(sctx, chunk.Row{}) return val > 0 From 3326edc6865917f9597623d9bdaace9695b85685 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Tue, 24 Nov 2020 16:03:54 +0800 Subject: [PATCH 143/229] executor: load data statement shoule not be prepared (#21188) (#21199) Signed-off-by: ti-srebot --- errors.toml | 5 +++++ executor/errors.go | 1 + executor/executor_test.go | 5 +++++ executor/prepared.go | 4 ++++ 4 files changed, 15 insertions(+) diff --git a/errors.toml b/errors.toml index 0dcbf9d6c550d..d170522ec4e6a 100644 --- a/errors.toml +++ b/errors.toml @@ -371,6 +371,11 @@ error = ''' Deadlock found when trying to get lock; try restarting transaction ''' +["executor:1295"] +error = ''' +This command is not supported in the prepared statement protocol yet +''' + ["executor:1317"] error = ''' Query execution was interrupted diff --git a/executor/errors.go b/executor/errors.go index df9dbed68e2e4..31967c8a319e8 100644 --- a/executor/errors.go +++ b/executor/errors.go @@ -27,6 +27,7 @@ var ( ErrResultIsEmpty = terror.ClassExecutor.New(mysql.ErrResultIsEmpty, mysql.MySQLErrName[mysql.ErrResultIsEmpty]) ErrBuildExecutor = terror.ClassExecutor.New(mysql.ErrBuildExecutor, mysql.MySQLErrName[mysql.ErrBuildExecutor]) ErrBatchInsertFail = terror.ClassExecutor.New(mysql.ErrBatchInsertFail, mysql.MySQLErrName[mysql.ErrBatchInsertFail]) + ErrUnsupportedPs = terror.ClassExecutor.New(mysql.ErrUnsupportedPs, mysql.MySQLErrName[mysql.ErrUnsupportedPs]) ErrCantCreateUserWithGrant = terror.ClassExecutor.New(mysql.ErrCantCreateUserWithGrant, mysql.MySQLErrName[mysql.ErrCantCreateUserWithGrant]) ErrPasswordNoMatch = terror.ClassExecutor.New(mysql.ErrPasswordNoMatch, mysql.MySQLErrName[mysql.ErrPasswordNoMatch]) diff --git a/executor/executor_test.go b/executor/executor_test.go index aa3427c739c36..eeafe0e9805ce 100644 --- a/executor/executor_test.go +++ b/executor/executor_test.go @@ -5620,6 +5620,11 @@ func (s *testClusterTableSuite) TearDownSuite(c *C) { s.testSuiteWithCliBase.TearDownSuite(c) } +func (s *testSuiteP1) TestPrepareLoadData(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustGetErrCode(`prepare stmt from "load data local infile '/tmp/load_data_test.csv' into table test";`, mysql.ErrUnsupportedPs) +} + func (s *testClusterTableSuite) TestSlowQuery(c *C) { writeFile := func(file string, data string) { f, err := os.OpenFile(file, os.O_CREATE|os.O_WRONLY, 0644) diff --git a/executor/prepared.go b/executor/prepared.go index aae6f4bd0a58d..4bde0554d7384 100644 --- a/executor/prepared.go +++ b/executor/prepared.go @@ -147,6 +147,10 @@ func (e *PrepareExec) Next(ctx context.Context, req *chunk.Chunk) error { return ErrPrepareDDL } + if _, ok := stmt.(*ast.LoadDataStmt); ok { + return ErrUnsupportedPs + } + // Prepare parameters should NOT over 2 bytes(MaxUint16) // https://dev.mysql.com/doc/internals/en/com-stmt-prepare-response.html#packet-COM_STMT_PREPARE_OK. if len(extractor.markers) > math.MaxUint16 { From efe2f483aefdb47caf6951f29ae8f1575a9f9045 Mon Sep 17 00:00:00 2001 From: Feng Liyuan Date: Tue, 24 Nov 2020 19:45:14 +0800 Subject: [PATCH 144/229] *: redact arguments for Error (#21245) --- config/config.go | 23 +- ddl/ddl_worker.go | 3 +- ddl/error.go | 233 +-- distsql/select_result.go | 9 +- distsql/stream.go | 3 +- domain/domain.go | 8 +- domain/infosync/info.go | 4 +- errno/errname.go | 2133 +++++++++++---------- errno/logredaction.md | 33 + errors.toml | 5 + executor/adapter.go | 6 +- executor/aggfuncs/func_group_concat.go | 6 +- executor/errors.go | 54 +- executor/executor_test.go | 10 +- executor/insert.go | 2 +- executor/load_data.go | 2 +- executor/replace.go | 2 +- executor/set_test.go | 8 +- executor/update.go | 2 +- expression/errors.go | 47 +- expression/expr_to_pb.go | 4 +- expression/scalar_function.go | 3 +- go.mod | 6 +- go.sum | 9 +- infoschema/error.go | 52 +- kv/error.go | 30 +- meta/autoid/errors.go | 14 +- meta/meta.go | 10 +- planner/core/errors.go | 126 +- planner/core/testdata/plan_suite_out.json | 2 +- plugin/errors.go | 16 +- privilege/privileges/errors.go | 8 +- server/conn.go | 6 +- server/conn_stmt.go | 5 +- server/server.go | 17 +- session/session.go | 11 +- session/session_test.go | 28 + session/tidb.go | 4 +- sessionctx/variable/error.go | 30 +- sessionctx/variable/session.go | 14 +- sessionctx/variable/sysvar.go | 4 +- sessionctx/variable/tidb_vars.go | 10 +- sessionctx/variable/varsutil_test.go | 6 + store/tikv/error.go | 34 +- structure/structure.go | 10 +- table/table.go | 40 +- tablecodec/tablecodec.go | 7 +- types/errors.go | 48 +- types/json/constants.go | 18 +- util/admin/admin.go | 10 +- util/collate/collate.go | 5 +- util/dbterror/terror.go | 56 + util/dbterror/terror_test.go | 43 + util/hint/hint_processor.go | 4 +- util/memory/action.go | 4 +- util/ranger/points.go | 4 +- util/redact/redact.go | 67 - 57 files changed, 1737 insertions(+), 1621 deletions(-) create mode 100644 errno/logredaction.md create mode 100644 util/dbterror/terror.go create mode 100644 util/dbterror/terror_test.go delete mode 100644 util/redact/redact.go diff --git a/config/config.go b/config/config.go index 3f563e06842ba..67ec120dd18af 100644 --- a/config/config.go +++ b/config/config.go @@ -58,8 +58,6 @@ const ( DefStatusHost = "0.0.0.0" // DefStoreLivenessTimeout is the default value for store liveness timeout. DefStoreLivenessTimeout = "5s" - // DefTiDBRedactLog is the default value for redact log. - DefTiDBRedactLog = 0 ) // Valid config maps @@ -146,8 +144,6 @@ type Config struct { SkipRegisterToDashboard bool `toml:"skip-register-to-dashboard" json:"skip-register-to-dashboard"` // EnableTelemetry enables the usage data report to PingCAP. EnableTelemetry bool `toml:"enable-telemetry" json:"enable-telemetry"` - // EnableRedactLog indicates that whether redact log, 0 is disable. 1 is enable. - EnableRedactLog int32 `toml:"enable-redact-log" json:"enable-redact-log"` } // UpdateTempStoragePath is to update the `TempStoragePath` if port/statusPort was changed @@ -697,7 +693,6 @@ var defaultConf = Config{ }, EnableCollectExecutionInfo: true, EnableTelemetry: true, - EnableRedactLog: DefTiDBRedactLog, } var ( @@ -731,6 +726,7 @@ var deprecatedConfig = map[string]struct{}{ "txn-local-latches.capacity": {}, "max-txn-time-use": {}, "experimental.allow-auto-random": {}, + "enable-redact-log": {}, // use variable tidb_redact_log instead } func isAllDeprecatedConfigItems(items []string) bool { @@ -934,23 +930,6 @@ var TableLockDelayClean = func() uint64 { return GetGlobalConfig().DelayCleanTableLock } -// RedactLogEnabled uses to check whether enabled the log redact. -func RedactLogEnabled() bool { - return atomic.LoadInt32(&GetGlobalConfig().EnableRedactLog) == 1 -} - -// SetRedactLog uses to set log redact status. -func SetRedactLog(enable bool) { - value := int32(0) - if enable { - value = 1 - } - g := GetGlobalConfig() - newConf := *g - newConf.EnableRedactLog = value - StoreGlobalConfig(&newConf) -} - // ToLogConfig converts *Log to *logutil.LogConfig. func (l *Log) ToLogConfig() *logutil.LogConfig { return logutil.NewLogConfig(l.Level, l.Format, l.SlowQueryFile, l.File, l.getDisableTimestamp(), func(config *zaplog.Config) { config.DisableErrorVerbose = l.getDisableErrorStack() }) diff --git a/ddl/ddl_worker.go b/ddl/ddl_worker.go index 972d50a4ac9b7..f665e906f7fb6 100644 --- a/ddl/ddl_worker.go +++ b/ddl/ddl_worker.go @@ -34,6 +34,7 @@ import ( "github.com/pingcap/tidb/sessionctx/variable" tidbutil "github.com/pingcap/tidb/util" "github.com/pingcap/tidb/util/admin" + "github.com/pingcap/tidb/util/dbterror" "github.com/pingcap/tidb/util/logutil" "go.uber.org/zap" ) @@ -726,7 +727,7 @@ func toTError(err error) *terror.Error { } // TODO: Add the error code. - return terror.ClassDDL.Synthesize(terror.CodeUnknown, err.Error()) + return dbterror.ClassDDL.Synthesize(terror.CodeUnknown, err.Error()) } // waitSchemaChanged waits for the completion of updating all servers' schema. In order to make sure that happens, diff --git a/ddl/error.go b/ddl/error.go index ca78800c33e4c..7fe666f81127d 100644 --- a/ddl/error.go +++ b/ddl/error.go @@ -16,200 +16,201 @@ package ddl import ( "fmt" - "github.com/pingcap/parser/terror" + parser_mysql "github.com/pingcap/parser/mysql" mysql "github.com/pingcap/tidb/errno" + "github.com/pingcap/tidb/util/dbterror" ) var ( // errWorkerClosed means we have already closed the DDL worker. - errInvalidWorker = terror.ClassDDL.New(mysql.ErrInvalidDDLWorker, mysql.MySQLErrName[mysql.ErrInvalidDDLWorker]) + errInvalidWorker = dbterror.ClassDDL.NewStd(mysql.ErrInvalidDDLWorker) // errNotOwner means we are not owner and can't handle DDL jobs. - errNotOwner = terror.ClassDDL.New(mysql.ErrNotOwner, mysql.MySQLErrName[mysql.ErrNotOwner]) - errCantDecodeIndex = terror.ClassDDL.New(mysql.ErrCantDecodeIndex, mysql.MySQLErrName[mysql.ErrCantDecodeIndex]) - errInvalidDDLJob = terror.ClassDDL.New(mysql.ErrInvalidDDLJob, mysql.MySQLErrName[mysql.ErrInvalidDDLJob]) - errCancelledDDLJob = terror.ClassDDL.New(mysql.ErrCancelledDDLJob, mysql.MySQLErrName[mysql.ErrCancelledDDLJob]) - errFileNotFound = terror.ClassDDL.New(mysql.ErrFileNotFound, mysql.MySQLErrName[mysql.ErrFileNotFound]) - errRunMultiSchemaChanges = terror.ClassDDL.New(mysql.ErrUnsupportedDDLOperation, fmt.Sprintf(mysql.MySQLErrName[mysql.ErrUnsupportedDDLOperation], "multi schema change")) - errWaitReorgTimeout = terror.ClassDDL.New(mysql.ErrLockWaitTimeout, mysql.MySQLErrName[mysql.ErrWaitReorgTimeout]) - errInvalidStoreVer = terror.ClassDDL.New(mysql.ErrInvalidStoreVersion, mysql.MySQLErrName[mysql.ErrInvalidStoreVersion]) + errNotOwner = dbterror.ClassDDL.NewStd(mysql.ErrNotOwner) + errCantDecodeIndex = dbterror.ClassDDL.NewStd(mysql.ErrCantDecodeIndex) + errInvalidDDLJob = dbterror.ClassDDL.NewStd(mysql.ErrInvalidDDLJob) + errCancelledDDLJob = dbterror.ClassDDL.NewStd(mysql.ErrCancelledDDLJob) + errFileNotFound = dbterror.ClassDDL.NewStd(mysql.ErrFileNotFound) + errRunMultiSchemaChanges = dbterror.ClassDDL.NewStdErr(mysql.ErrUnsupportedDDLOperation, parser_mysql.Message(fmt.Sprintf(mysql.MySQLErrName[mysql.ErrUnsupportedDDLOperation].Raw, "multi schema change"), nil)) + errWaitReorgTimeout = dbterror.ClassDDL.NewStdErr(mysql.ErrLockWaitTimeout, mysql.MySQLErrName[mysql.ErrWaitReorgTimeout]) + errInvalidStoreVer = dbterror.ClassDDL.NewStd(mysql.ErrInvalidStoreVersion) // ErrRepairTableFail is used to repair tableInfo in repair mode. - ErrRepairTableFail = terror.ClassDDL.New(mysql.ErrRepairTable, mysql.MySQLErrName[mysql.ErrRepairTable]) + ErrRepairTableFail = dbterror.ClassDDL.NewStd(mysql.ErrRepairTable) // We don't support dropping column with index covered now. - errCantDropColWithIndex = terror.ClassDDL.New(mysql.ErrUnsupportedDDLOperation, fmt.Sprintf(mysql.MySQLErrName[mysql.ErrUnsupportedDDLOperation], "drop column with index")) - errUnsupportedAddColumn = terror.ClassDDL.New(mysql.ErrUnsupportedDDLOperation, fmt.Sprintf(mysql.MySQLErrName[mysql.ErrUnsupportedDDLOperation], "add column")) - errUnsupportedModifyColumn = terror.ClassDDL.New(mysql.ErrUnsupportedDDLOperation, fmt.Sprintf(mysql.MySQLErrName[mysql.ErrUnsupportedDDLOperation], "modify column: %s")) - errUnsupportedModifyCharset = terror.ClassDDL.New(mysql.ErrUnsupportedDDLOperation, fmt.Sprintf(mysql.MySQLErrName[mysql.ErrUnsupportedDDLOperation], "modify %s")) - errUnsupportedModifyCollation = terror.ClassDDL.New(mysql.ErrUnsupportedDDLOperation, fmt.Sprintf(mysql.MySQLErrName[mysql.ErrUnsupportedDDLOperation], "modifying collation from %s to %s")) - errUnsupportedPKHandle = terror.ClassDDL.New(mysql.ErrUnsupportedDDLOperation, fmt.Sprintf(mysql.MySQLErrName[mysql.ErrUnsupportedDDLOperation], "drop integer primary key")) - errUnsupportedCharset = terror.ClassDDL.New(mysql.ErrUnsupportedDDLOperation, fmt.Sprintf(mysql.MySQLErrName[mysql.ErrUnsupportedDDLOperation], "charset %s and collate %s")) - errUnsupportedShardRowIDBits = terror.ClassDDL.New(mysql.ErrUnsupportedDDLOperation, fmt.Sprintf(mysql.MySQLErrName[mysql.ErrUnsupportedDDLOperation], "shard_row_id_bits for table with primary key as row id")) - errBlobKeyWithoutLength = terror.ClassDDL.New(mysql.ErrBlobKeyWithoutLength, mysql.MySQLErrName[mysql.ErrBlobKeyWithoutLength]) - errKeyPart0 = terror.ClassDDL.New(mysql.ErrKeyPart0, mysql.MySQLErrName[mysql.ErrKeyPart0]) - errIncorrectPrefixKey = terror.ClassDDL.New(mysql.ErrWrongSubKey, mysql.MySQLErrName[mysql.ErrWrongSubKey]) - errTooLongKey = terror.ClassDDL.New(mysql.ErrTooLongKey, mysql.MySQLErrName[mysql.ErrTooLongKey]) - errKeyColumnDoesNotExits = terror.ClassDDL.New(mysql.ErrKeyColumnDoesNotExits, mysql.MySQLErrName[mysql.ErrKeyColumnDoesNotExits]) - errUnknownTypeLength = terror.ClassDDL.New(mysql.ErrUnknownTypeLength, mysql.MySQLErrName[mysql.ErrUnknownTypeLength]) - errUnknownFractionLength = terror.ClassDDL.New(mysql.ErrUnknownFractionLength, mysql.MySQLErrName[mysql.ErrUnknownFractionLength]) - errInvalidDDLJobVersion = terror.ClassDDL.New(mysql.ErrInvalidDDLJobVersion, mysql.MySQLErrName[mysql.ErrInvalidDDLJobVersion]) - errInvalidUseOfNull = terror.ClassDDL.New(mysql.ErrInvalidUseOfNull, mysql.MySQLErrName[mysql.ErrInvalidUseOfNull]) - errTooManyFields = terror.ClassDDL.New(mysql.ErrTooManyFields, mysql.MySQLErrName[mysql.ErrTooManyFields]) - errInvalidSplitRegionRanges = terror.ClassDDL.New(mysql.ErrInvalidSplitRegionRanges, mysql.MySQLErrName[mysql.ErrInvalidSplitRegionRanges]) - errReorgPanic = terror.ClassDDL.New(mysql.ErrReorgPanic, mysql.MySQLErrName[mysql.ErrReorgPanic]) - errFkColumnCannotDrop = terror.ClassDDL.New(mysql.ErrFkColumnCannotDrop, mysql.MySQLErrName[mysql.ErrFkColumnCannotDrop]) - errFKIncompatibleColumns = terror.ClassDDL.New(mysql.ErrFKIncompatibleColumns, mysql.MySQLErrName[mysql.ErrFKIncompatibleColumns]) + errCantDropColWithIndex = dbterror.ClassDDL.NewStdErr(mysql.ErrUnsupportedDDLOperation, parser_mysql.Message(fmt.Sprintf(mysql.MySQLErrName[mysql.ErrUnsupportedDDLOperation].Raw, "drop column with index"), nil)) + errUnsupportedAddColumn = dbterror.ClassDDL.NewStdErr(mysql.ErrUnsupportedDDLOperation, parser_mysql.Message(fmt.Sprintf(mysql.MySQLErrName[mysql.ErrUnsupportedDDLOperation].Raw, "add column"), nil)) + errUnsupportedModifyColumn = dbterror.ClassDDL.NewStdErr(mysql.ErrUnsupportedDDLOperation, parser_mysql.Message(fmt.Sprintf(mysql.MySQLErrName[mysql.ErrUnsupportedDDLOperation].Raw, "modify column: %s"), nil)) + errUnsupportedModifyCharset = dbterror.ClassDDL.NewStdErr(mysql.ErrUnsupportedDDLOperation, parser_mysql.Message(fmt.Sprintf(mysql.MySQLErrName[mysql.ErrUnsupportedDDLOperation].Raw, "modify %s"), nil)) + errUnsupportedModifyCollation = dbterror.ClassDDL.NewStdErr(mysql.ErrUnsupportedDDLOperation, parser_mysql.Message(fmt.Sprintf(mysql.MySQLErrName[mysql.ErrUnsupportedDDLOperation].Raw, "modifying collation from %s to %s"), nil)) + errUnsupportedPKHandle = dbterror.ClassDDL.NewStdErr(mysql.ErrUnsupportedDDLOperation, parser_mysql.Message(fmt.Sprintf(mysql.MySQLErrName[mysql.ErrUnsupportedDDLOperation].Raw, "drop integer primary key"), nil)) + errUnsupportedCharset = dbterror.ClassDDL.NewStdErr(mysql.ErrUnsupportedDDLOperation, parser_mysql.Message(fmt.Sprintf(mysql.MySQLErrName[mysql.ErrUnsupportedDDLOperation].Raw, "charset %s and collate %s"), nil)) + errUnsupportedShardRowIDBits = dbterror.ClassDDL.NewStdErr(mysql.ErrUnsupportedDDLOperation, parser_mysql.Message(fmt.Sprintf(mysql.MySQLErrName[mysql.ErrUnsupportedDDLOperation].Raw, "shard_row_id_bits for table with primary key as row id"), nil)) + errBlobKeyWithoutLength = dbterror.ClassDDL.NewStd(mysql.ErrBlobKeyWithoutLength) + errKeyPart0 = dbterror.ClassDDL.NewStd(mysql.ErrKeyPart0) + errIncorrectPrefixKey = dbterror.ClassDDL.NewStd(mysql.ErrWrongSubKey) + errTooLongKey = dbterror.ClassDDL.NewStd(mysql.ErrTooLongKey) + errKeyColumnDoesNotExits = dbterror.ClassDDL.NewStd(mysql.ErrKeyColumnDoesNotExits) + errUnknownTypeLength = dbterror.ClassDDL.NewStd(mysql.ErrUnknownTypeLength) + errUnknownFractionLength = dbterror.ClassDDL.NewStd(mysql.ErrUnknownFractionLength) + errInvalidDDLJobVersion = dbterror.ClassDDL.NewStd(mysql.ErrInvalidDDLJobVersion) + errInvalidUseOfNull = dbterror.ClassDDL.NewStd(mysql.ErrInvalidUseOfNull) + errTooManyFields = dbterror.ClassDDL.NewStd(mysql.ErrTooManyFields) + errInvalidSplitRegionRanges = dbterror.ClassDDL.NewStd(mysql.ErrInvalidSplitRegionRanges) + errReorgPanic = dbterror.ClassDDL.NewStd(mysql.ErrReorgPanic) + errFkColumnCannotDrop = dbterror.ClassDDL.NewStd(mysql.ErrFkColumnCannotDrop) + errFKIncompatibleColumns = dbterror.ClassDDL.NewStd(mysql.ErrFKIncompatibleColumns) - errOnlyOnRangeListPartition = terror.ClassDDL.New(mysql.ErrOnlyOnRangeListPartition, mysql.MySQLErrName[mysql.ErrOnlyOnRangeListPartition]) + errOnlyOnRangeListPartition = dbterror.ClassDDL.NewStd(mysql.ErrOnlyOnRangeListPartition) // errWrongKeyColumn is for table column cannot be indexed. - errWrongKeyColumn = terror.ClassDDL.New(mysql.ErrWrongKeyColumn, mysql.MySQLErrName[mysql.ErrWrongKeyColumn]) + errWrongKeyColumn = dbterror.ClassDDL.NewStd(mysql.ErrWrongKeyColumn) // errWrongFKOptionForGeneratedColumn is for wrong foreign key reference option on generated columns. - errWrongFKOptionForGeneratedColumn = terror.ClassDDL.New(mysql.ErrWrongFKOptionForGeneratedColumn, mysql.MySQLErrName[mysql.ErrWrongFKOptionForGeneratedColumn]) + errWrongFKOptionForGeneratedColumn = dbterror.ClassDDL.NewStd(mysql.ErrWrongFKOptionForGeneratedColumn) // errUnsupportedOnGeneratedColumn is for unsupported actions on generated columns. - errUnsupportedOnGeneratedColumn = terror.ClassDDL.New(mysql.ErrUnsupportedOnGeneratedColumn, mysql.MySQLErrName[mysql.ErrUnsupportedOnGeneratedColumn]) + errUnsupportedOnGeneratedColumn = dbterror.ClassDDL.NewStd(mysql.ErrUnsupportedOnGeneratedColumn) // errGeneratedColumnNonPrior forbids to refer generated column non prior to it. - errGeneratedColumnNonPrior = terror.ClassDDL.New(mysql.ErrGeneratedColumnNonPrior, mysql.MySQLErrName[mysql.ErrGeneratedColumnNonPrior]) + errGeneratedColumnNonPrior = dbterror.ClassDDL.NewStd(mysql.ErrGeneratedColumnNonPrior) // errDependentByGeneratedColumn forbids to delete columns which are dependent by generated columns. - errDependentByGeneratedColumn = terror.ClassDDL.New(mysql.ErrDependentByGeneratedColumn, mysql.MySQLErrName[mysql.ErrDependentByGeneratedColumn]) + errDependentByGeneratedColumn = dbterror.ClassDDL.NewStd(mysql.ErrDependentByGeneratedColumn) // errJSONUsedAsKey forbids to use JSON as key or index. - errJSONUsedAsKey = terror.ClassDDL.New(mysql.ErrJSONUsedAsKey, mysql.MySQLErrName[mysql.ErrJSONUsedAsKey]) + errJSONUsedAsKey = dbterror.ClassDDL.NewStd(mysql.ErrJSONUsedAsKey) // errBlobCantHaveDefault forbids to give not null default value to TEXT/BLOB/JSON. - errBlobCantHaveDefault = terror.ClassDDL.New(mysql.ErrBlobCantHaveDefault, mysql.MySQLErrName[mysql.ErrBlobCantHaveDefault]) - errTooLongIndexComment = terror.ClassDDL.New(mysql.ErrTooLongIndexComment, mysql.MySQLErrName[mysql.ErrTooLongIndexComment]) + errBlobCantHaveDefault = dbterror.ClassDDL.NewStd(mysql.ErrBlobCantHaveDefault) + errTooLongIndexComment = dbterror.ClassDDL.NewStd(mysql.ErrTooLongIndexComment) // ErrInvalidDefaultValue returns for invalid default value for columns. - ErrInvalidDefaultValue = terror.ClassDDL.New(mysql.ErrInvalidDefault, mysql.MySQLErrName[mysql.ErrInvalidDefault]) + ErrInvalidDefaultValue = dbterror.ClassDDL.NewStd(mysql.ErrInvalidDefault) // ErrGeneratedColumnRefAutoInc forbids to refer generated columns to auto-increment columns . - ErrGeneratedColumnRefAutoInc = terror.ClassDDL.New(mysql.ErrGeneratedColumnRefAutoInc, mysql.MySQLErrName[mysql.ErrGeneratedColumnRefAutoInc]) + ErrGeneratedColumnRefAutoInc = dbterror.ClassDDL.NewStd(mysql.ErrGeneratedColumnRefAutoInc) // ErrExpressionIndexCanNotRefer forbids to refer expression index to auto-increment column. - ErrExpressionIndexCanNotRefer = terror.ClassDDL.New(mysql.ErrFunctionalIndexRefAutoIncrement, mysql.MySQLErrName[mysql.ErrFunctionalIndexRefAutoIncrement]) + ErrExpressionIndexCanNotRefer = dbterror.ClassDDL.NewStd(mysql.ErrFunctionalIndexRefAutoIncrement) // ErrUnsupportedAddPartition returns for does not support add partitions. - ErrUnsupportedAddPartition = terror.ClassDDL.New(mysql.ErrUnsupportedDDLOperation, fmt.Sprintf(mysql.MySQLErrName[mysql.ErrUnsupportedDDLOperation], "add partitions")) + ErrUnsupportedAddPartition = dbterror.ClassDDL.NewStdErr(mysql.ErrUnsupportedDDLOperation, parser_mysql.Message(fmt.Sprintf(mysql.MySQLErrName[mysql.ErrUnsupportedDDLOperation].Raw, "add partitions"), nil)) // ErrUnsupportedCoalescePartition returns for does not support coalesce partitions. - ErrUnsupportedCoalescePartition = terror.ClassDDL.New(mysql.ErrUnsupportedDDLOperation, fmt.Sprintf(mysql.MySQLErrName[mysql.ErrUnsupportedDDLOperation], "coalesce partitions")) - errUnsupportedReorganizePartition = terror.ClassDDL.New(mysql.ErrUnsupportedDDLOperation, fmt.Sprintf(mysql.MySQLErrName[mysql.ErrUnsupportedDDLOperation], "reorganize partition")) - errUnsupportedCheckPartition = terror.ClassDDL.New(mysql.ErrUnsupportedDDLOperation, fmt.Sprintf(mysql.MySQLErrName[mysql.ErrUnsupportedDDLOperation], "check partition")) - errUnsupportedOptimizePartition = terror.ClassDDL.New(mysql.ErrUnsupportedDDLOperation, fmt.Sprintf(mysql.MySQLErrName[mysql.ErrUnsupportedDDLOperation], "optimize partition")) - errUnsupportedRebuildPartition = terror.ClassDDL.New(mysql.ErrUnsupportedDDLOperation, fmt.Sprintf(mysql.MySQLErrName[mysql.ErrUnsupportedDDLOperation], "rebuild partition")) - errUnsupportedRemovePartition = terror.ClassDDL.New(mysql.ErrUnsupportedDDLOperation, fmt.Sprintf(mysql.MySQLErrName[mysql.ErrUnsupportedDDLOperation], "remove partitioning")) - errUnsupportedExchangePartition = terror.ClassDDL.New(mysql.ErrUnsupportedDDLOperation, fmt.Sprintf(mysql.MySQLErrName[mysql.ErrUnsupportedDDLOperation], "exchange partition")) + ErrUnsupportedCoalescePartition = dbterror.ClassDDL.NewStdErr(mysql.ErrUnsupportedDDLOperation, parser_mysql.Message(fmt.Sprintf(mysql.MySQLErrName[mysql.ErrUnsupportedDDLOperation].Raw, "coalesce partitions"), nil)) + errUnsupportedReorganizePartition = dbterror.ClassDDL.NewStdErr(mysql.ErrUnsupportedDDLOperation, parser_mysql.Message(fmt.Sprintf(mysql.MySQLErrName[mysql.ErrUnsupportedDDLOperation].Raw, "reorganize partition"), nil)) + errUnsupportedCheckPartition = dbterror.ClassDDL.NewStdErr(mysql.ErrUnsupportedDDLOperation, parser_mysql.Message(fmt.Sprintf(mysql.MySQLErrName[mysql.ErrUnsupportedDDLOperation].Raw, "check partition"), nil)) + errUnsupportedOptimizePartition = dbterror.ClassDDL.NewStdErr(mysql.ErrUnsupportedDDLOperation, parser_mysql.Message(fmt.Sprintf(mysql.MySQLErrName[mysql.ErrUnsupportedDDLOperation].Raw, "optimize partition"), nil)) + errUnsupportedRebuildPartition = dbterror.ClassDDL.NewStdErr(mysql.ErrUnsupportedDDLOperation, parser_mysql.Message(fmt.Sprintf(mysql.MySQLErrName[mysql.ErrUnsupportedDDLOperation].Raw, "rebuild partition"), nil)) + errUnsupportedRemovePartition = dbterror.ClassDDL.NewStdErr(mysql.ErrUnsupportedDDLOperation, parser_mysql.Message(fmt.Sprintf(mysql.MySQLErrName[mysql.ErrUnsupportedDDLOperation].Raw, "remove partitioning"), nil)) + errUnsupportedExchangePartition = dbterror.ClassDDL.NewStdErr(mysql.ErrUnsupportedDDLOperation, parser_mysql.Message(fmt.Sprintf(mysql.MySQLErrName[mysql.ErrUnsupportedDDLOperation].Raw, "exchange partition"), nil)) // ErrGeneratedColumnFunctionIsNotAllowed returns for unsupported functions for generated columns. - ErrGeneratedColumnFunctionIsNotAllowed = terror.ClassDDL.New(mysql.ErrGeneratedColumnFunctionIsNotAllowed, mysql.MySQLErrName[mysql.ErrGeneratedColumnFunctionIsNotAllowed]) + ErrGeneratedColumnFunctionIsNotAllowed = dbterror.ClassDDL.NewStd(mysql.ErrGeneratedColumnFunctionIsNotAllowed) // ErrUnsupportedPartitionByRangeColumns returns for does unsupported partition by range columns. - ErrUnsupportedPartitionByRangeColumns = terror.ClassDDL.New(mysql.ErrUnsupportedDDLOperation, fmt.Sprintf(mysql.MySQLErrName[mysql.ErrUnsupportedDDLOperation], "partition by range columns")) - errUnsupportedCreatePartition = terror.ClassDDL.New(mysql.ErrUnsupportedDDLOperation, fmt.Sprintf(mysql.MySQLErrName[mysql.ErrUnsupportedDDLOperation], "partition type, treat as normal table")) - errTablePartitionDisabled = terror.ClassDDL.New(mysql.ErrUnsupportedDDLOperation, "Partitions are ignored because Table Partition is disabled, please set 'tidb_enable_table_partition' if you need to need to enable it") - errUnsupportedIndexType = terror.ClassDDL.New(mysql.ErrUnsupportedDDLOperation, fmt.Sprintf(mysql.MySQLErrName[mysql.ErrUnsupportedDDLOperation], "index type")) + ErrUnsupportedPartitionByRangeColumns = dbterror.ClassDDL.NewStdErr(mysql.ErrUnsupportedDDLOperation, parser_mysql.Message(fmt.Sprintf(mysql.MySQLErrName[mysql.ErrUnsupportedDDLOperation].Raw, "partition by range columns"), nil)) + errUnsupportedCreatePartition = dbterror.ClassDDL.NewStdErr(mysql.ErrUnsupportedDDLOperation, parser_mysql.Message(fmt.Sprintf(mysql.MySQLErrName[mysql.ErrUnsupportedDDLOperation].Raw, "partition type, treat as normal table"), nil)) + errTablePartitionDisabled = dbterror.ClassDDL.NewStdErr(mysql.ErrUnsupportedDDLOperation, parser_mysql.Message("Partitions are ignored because Table Partition is disabled, please set 'tidb_enable_table_partition' if you need to need to enable it", nil)) + errUnsupportedIndexType = dbterror.ClassDDL.NewStdErr(mysql.ErrUnsupportedDDLOperation, parser_mysql.Message(fmt.Sprintf(mysql.MySQLErrName[mysql.ErrUnsupportedDDLOperation].Raw, "index type"), nil)) // ErrDupKeyName returns for duplicated key name - ErrDupKeyName = terror.ClassDDL.New(mysql.ErrDupKeyName, mysql.MySQLErrName[mysql.ErrDupKeyName]) + ErrDupKeyName = dbterror.ClassDDL.NewStd(mysql.ErrDupKeyName) // ErrInvalidDDLState returns for invalid ddl model object state. - ErrInvalidDDLState = terror.ClassDDL.New(mysql.ErrInvalidDDLState, fmt.Sprintf(mysql.MySQLErrName[mysql.ErrInvalidDDLState])) + ErrInvalidDDLState = dbterror.ClassDDL.NewStdErr(mysql.ErrInvalidDDLState, parser_mysql.Message(fmt.Sprintf(mysql.MySQLErrName[mysql.ErrInvalidDDLState].Raw), nil)) // ErrUnsupportedModifyPrimaryKey returns an error when add or drop the primary key. // It's exported for testing. - ErrUnsupportedModifyPrimaryKey = terror.ClassDDL.New(mysql.ErrUnsupportedDDLOperation, fmt.Sprintf(mysql.MySQLErrName[mysql.ErrUnsupportedDDLOperation], "%s primary key")) + ErrUnsupportedModifyPrimaryKey = dbterror.ClassDDL.NewStdErr(mysql.ErrUnsupportedDDLOperation, parser_mysql.Message(fmt.Sprintf(mysql.MySQLErrName[mysql.ErrUnsupportedDDLOperation].Raw, "%s primary key"), nil)) // ErrColumnBadNull returns for a bad null value. - ErrColumnBadNull = terror.ClassDDL.New(mysql.ErrBadNull, mysql.MySQLErrName[mysql.ErrBadNull]) + ErrColumnBadNull = dbterror.ClassDDL.NewStd(mysql.ErrBadNull) // ErrBadField forbids to refer to unknown column. - ErrBadField = terror.ClassDDL.New(mysql.ErrBadField, mysql.MySQLErrName[mysql.ErrBadField]) + ErrBadField = dbterror.ClassDDL.NewStd(mysql.ErrBadField) // ErrCantRemoveAllFields returns for deleting all columns. - ErrCantRemoveAllFields = terror.ClassDDL.New(mysql.ErrCantRemoveAllFields, mysql.MySQLErrName[mysql.ErrCantRemoveAllFields]) + ErrCantRemoveAllFields = dbterror.ClassDDL.NewStd(mysql.ErrCantRemoveAllFields) // ErrCantDropFieldOrKey returns for dropping a non-existent field or key. - ErrCantDropFieldOrKey = terror.ClassDDL.New(mysql.ErrCantDropFieldOrKey, mysql.MySQLErrName[mysql.ErrCantDropFieldOrKey]) + ErrCantDropFieldOrKey = dbterror.ClassDDL.NewStd(mysql.ErrCantDropFieldOrKey) // ErrInvalidOnUpdate returns for invalid ON UPDATE clause. - ErrInvalidOnUpdate = terror.ClassDDL.New(mysql.ErrInvalidOnUpdate, mysql.MySQLErrName[mysql.ErrInvalidOnUpdate]) + ErrInvalidOnUpdate = dbterror.ClassDDL.NewStd(mysql.ErrInvalidOnUpdate) // ErrTooLongIdent returns for too long name of database/table/column/index. - ErrTooLongIdent = terror.ClassDDL.New(mysql.ErrTooLongIdent, mysql.MySQLErrName[mysql.ErrTooLongIdent]) + ErrTooLongIdent = dbterror.ClassDDL.NewStd(mysql.ErrTooLongIdent) // ErrWrongDBName returns for wrong database name. - ErrWrongDBName = terror.ClassDDL.New(mysql.ErrWrongDBName, mysql.MySQLErrName[mysql.ErrWrongDBName]) + ErrWrongDBName = dbterror.ClassDDL.NewStd(mysql.ErrWrongDBName) // ErrWrongTableName returns for wrong table name. - ErrWrongTableName = terror.ClassDDL.New(mysql.ErrWrongTableName, mysql.MySQLErrName[mysql.ErrWrongTableName]) + ErrWrongTableName = dbterror.ClassDDL.NewStd(mysql.ErrWrongTableName) // ErrWrongColumnName returns for wrong column name. - ErrWrongColumnName = terror.ClassDDL.New(mysql.ErrWrongColumnName, mysql.MySQLErrName[mysql.ErrWrongColumnName]) + ErrWrongColumnName = dbterror.ClassDDL.NewStd(mysql.ErrWrongColumnName) // ErrInvalidGroupFuncUse returns for using invalid group functions. - ErrInvalidGroupFuncUse = terror.ClassDDL.New(mysql.ErrInvalidGroupFuncUse, mysql.MySQLErrName[mysql.ErrInvalidGroupFuncUse]) + ErrInvalidGroupFuncUse = dbterror.ClassDDL.NewStd(mysql.ErrInvalidGroupFuncUse) // ErrTableMustHaveColumns returns for missing column when creating a table. - ErrTableMustHaveColumns = terror.ClassDDL.New(mysql.ErrTableMustHaveColumns, mysql.MySQLErrName[mysql.ErrTableMustHaveColumns]) + ErrTableMustHaveColumns = dbterror.ClassDDL.NewStd(mysql.ErrTableMustHaveColumns) // ErrWrongNameForIndex returns for wrong index name. - ErrWrongNameForIndex = terror.ClassDDL.New(mysql.ErrWrongNameForIndex, mysql.MySQLErrName[mysql.ErrWrongNameForIndex]) + ErrWrongNameForIndex = dbterror.ClassDDL.NewStd(mysql.ErrWrongNameForIndex) // ErrUnknownCharacterSet returns unknown character set. - ErrUnknownCharacterSet = terror.ClassDDL.New(mysql.ErrUnknownCharacterSet, mysql.MySQLErrName[mysql.ErrUnknownCharacterSet]) + ErrUnknownCharacterSet = dbterror.ClassDDL.NewStd(mysql.ErrUnknownCharacterSet) // ErrUnknownCollation returns unknown collation. - ErrUnknownCollation = terror.ClassDDL.New(mysql.ErrUnknownCollation, mysql.MySQLErrName[mysql.ErrUnknownCollation]) + ErrUnknownCollation = dbterror.ClassDDL.NewStd(mysql.ErrUnknownCollation) // ErrCollationCharsetMismatch returns when collation not match the charset. - ErrCollationCharsetMismatch = terror.ClassDDL.New(mysql.ErrCollationCharsetMismatch, mysql.MySQLErrName[mysql.ErrCollationCharsetMismatch]) + ErrCollationCharsetMismatch = dbterror.ClassDDL.NewStd(mysql.ErrCollationCharsetMismatch) // ErrConflictingDeclarations return conflict declarations. - ErrConflictingDeclarations = terror.ClassDDL.New(mysql.ErrConflictingDeclarations, fmt.Sprintf(mysql.MySQLErrName[mysql.ErrConflictingDeclarations], "CHARACTER SET ", "%s", "CHARACTER SET ", "%s")) + ErrConflictingDeclarations = dbterror.ClassDDL.NewStdErr(mysql.ErrConflictingDeclarations, parser_mysql.Message(fmt.Sprintf(mysql.MySQLErrName[mysql.ErrConflictingDeclarations].Raw, "CHARACTER SET ", "%s", "CHARACTER SET ", "%s"), nil)) // ErrPrimaryCantHaveNull returns All parts of a PRIMARY KEY must be NOT NULL; if you need NULL in a key, use UNIQUE instead - ErrPrimaryCantHaveNull = terror.ClassDDL.New(mysql.ErrPrimaryCantHaveNull, mysql.MySQLErrName[mysql.ErrPrimaryCantHaveNull]) + ErrPrimaryCantHaveNull = dbterror.ClassDDL.NewStd(mysql.ErrPrimaryCantHaveNull) // ErrErrorOnRename returns error for wrong database name in alter table rename - ErrErrorOnRename = terror.ClassDDL.New(mysql.ErrErrorOnRename, mysql.MySQLErrName[mysql.ErrErrorOnRename]) + ErrErrorOnRename = dbterror.ClassDDL.NewStd(mysql.ErrErrorOnRename) // ErrViewSelectClause returns error for create view with select into clause - ErrViewSelectClause = terror.ClassDDL.New(mysql.ErrViewSelectClause, mysql.MySQLErrName[mysql.ErrViewSelectClause]) + ErrViewSelectClause = dbterror.ClassDDL.NewStd(mysql.ErrViewSelectClause) // ErrNotAllowedTypeInPartition returns not allowed type error when creating table partition with unsupported expression type. - ErrNotAllowedTypeInPartition = terror.ClassDDL.New(mysql.ErrFieldTypeNotAllowedAsPartitionField, mysql.MySQLErrName[mysql.ErrFieldTypeNotAllowedAsPartitionField]) + ErrNotAllowedTypeInPartition = dbterror.ClassDDL.NewStd(mysql.ErrFieldTypeNotAllowedAsPartitionField) // ErrPartitionMgmtOnNonpartitioned returns it's not a partition table. - ErrPartitionMgmtOnNonpartitioned = terror.ClassDDL.New(mysql.ErrPartitionMgmtOnNonpartitioned, mysql.MySQLErrName[mysql.ErrPartitionMgmtOnNonpartitioned]) + ErrPartitionMgmtOnNonpartitioned = dbterror.ClassDDL.NewStd(mysql.ErrPartitionMgmtOnNonpartitioned) // ErrDropPartitionNonExistent returns error in list of partition. - ErrDropPartitionNonExistent = terror.ClassDDL.New(mysql.ErrDropPartitionNonExistent, mysql.MySQLErrName[mysql.ErrDropPartitionNonExistent]) + ErrDropPartitionNonExistent = dbterror.ClassDDL.NewStd(mysql.ErrDropPartitionNonExistent) // ErrSameNamePartition returns duplicate partition name. - ErrSameNamePartition = terror.ClassDDL.New(mysql.ErrSameNamePartition, mysql.MySQLErrName[mysql.ErrSameNamePartition]) + ErrSameNamePartition = dbterror.ClassDDL.NewStd(mysql.ErrSameNamePartition) // ErrRangeNotIncreasing returns values less than value must be strictly increasing for each partition. - ErrRangeNotIncreasing = terror.ClassDDL.New(mysql.ErrRangeNotIncreasing, mysql.MySQLErrName[mysql.ErrRangeNotIncreasing]) + ErrRangeNotIncreasing = dbterror.ClassDDL.NewStd(mysql.ErrRangeNotIncreasing) // ErrPartitionMaxvalue returns maxvalue can only be used in last partition definition. - ErrPartitionMaxvalue = terror.ClassDDL.New(mysql.ErrPartitionMaxvalue, mysql.MySQLErrName[mysql.ErrPartitionMaxvalue]) - //ErrDropLastPartition returns cannot remove all partitions, use drop table instead. - ErrDropLastPartition = terror.ClassDDL.New(mysql.ErrDropLastPartition, mysql.MySQLErrName[mysql.ErrDropLastPartition]) - //ErrTooManyPartitions returns too many partitions were defined. - ErrTooManyPartitions = terror.ClassDDL.New(mysql.ErrTooManyPartitions, mysql.MySQLErrName[mysql.ErrTooManyPartitions]) - //ErrPartitionFunctionIsNotAllowed returns this partition function is not allowed. - ErrPartitionFunctionIsNotAllowed = terror.ClassDDL.New(mysql.ErrPartitionFunctionIsNotAllowed, mysql.MySQLErrName[mysql.ErrPartitionFunctionIsNotAllowed]) + ErrPartitionMaxvalue = dbterror.ClassDDL.NewStd(mysql.ErrPartitionMaxvalue) + // ErrDropLastPartition returns cannot remove all partitions, use drop table instead. + ErrDropLastPartition = dbterror.ClassDDL.NewStd(mysql.ErrDropLastPartition) + // ErrTooManyPartitions returns too many partitions were defined. + ErrTooManyPartitions = dbterror.ClassDDL.NewStd(mysql.ErrTooManyPartitions) + // ErrPartitionFunctionIsNotAllowed returns this partition function is not allowed. + ErrPartitionFunctionIsNotAllowed = dbterror.ClassDDL.NewStd(mysql.ErrPartitionFunctionIsNotAllowed) // ErrPartitionFuncNotAllowed returns partition function returns the wrong type. - ErrPartitionFuncNotAllowed = terror.ClassDDL.New(mysql.ErrPartitionFuncNotAllowed, mysql.MySQLErrName[mysql.ErrPartitionFuncNotAllowed]) + ErrPartitionFuncNotAllowed = dbterror.ClassDDL.NewStd(mysql.ErrPartitionFuncNotAllowed) // ErrUniqueKeyNeedAllFieldsInPf returns must include all columns in the table's partitioning function. - ErrUniqueKeyNeedAllFieldsInPf = terror.ClassDDL.New(mysql.ErrUniqueKeyNeedAllFieldsInPf, mysql.MySQLErrName[mysql.ErrUniqueKeyNeedAllFieldsInPf]) - errWrongExprInPartitionFunc = terror.ClassDDL.New(mysql.ErrWrongExprInPartitionFunc, mysql.MySQLErrName[mysql.ErrWrongExprInPartitionFunc]) + ErrUniqueKeyNeedAllFieldsInPf = dbterror.ClassDDL.NewStd(mysql.ErrUniqueKeyNeedAllFieldsInPf) + errWrongExprInPartitionFunc = dbterror.ClassDDL.NewStd(mysql.ErrWrongExprInPartitionFunc) // ErrWarnDataTruncated returns data truncated error. - ErrWarnDataTruncated = terror.ClassDDL.New(mysql.WarnDataTruncated, mysql.MySQLErrName[mysql.WarnDataTruncated]) + ErrWarnDataTruncated = dbterror.ClassDDL.NewStd(mysql.WarnDataTruncated) // ErrCoalesceOnlyOnHashPartition returns coalesce partition can only be used on hash/key partitions. - ErrCoalesceOnlyOnHashPartition = terror.ClassDDL.New(mysql.ErrCoalesceOnlyOnHashPartition, mysql.MySQLErrName[mysql.ErrCoalesceOnlyOnHashPartition]) + ErrCoalesceOnlyOnHashPartition = dbterror.ClassDDL.NewStd(mysql.ErrCoalesceOnlyOnHashPartition) // ErrViewWrongList returns create view must include all columns in the select clause - ErrViewWrongList = terror.ClassDDL.New(mysql.ErrViewWrongList, mysql.MySQLErrName[mysql.ErrViewWrongList]) + ErrViewWrongList = dbterror.ClassDDL.NewStd(mysql.ErrViewWrongList) // ErrAlterOperationNotSupported returns when alter operations is not supported. - ErrAlterOperationNotSupported = terror.ClassDDL.New(mysql.ErrAlterOperationNotSupportedReason, mysql.MySQLErrName[mysql.ErrAlterOperationNotSupportedReason]) + ErrAlterOperationNotSupported = dbterror.ClassDDL.NewStd(mysql.ErrAlterOperationNotSupportedReason) // ErrWrongObject returns for wrong object. - ErrWrongObject = terror.ClassDDL.New(mysql.ErrWrongObject, mysql.MySQLErrName[mysql.ErrWrongObject]) + ErrWrongObject = dbterror.ClassDDL.NewStd(mysql.ErrWrongObject) // ErrTableCantHandleFt returns FULLTEXT keys are not supported by table type - ErrTableCantHandleFt = terror.ClassDDL.New(mysql.ErrTableCantHandleFt, mysql.MySQLErrName[mysql.ErrTableCantHandleFt]) + ErrTableCantHandleFt = dbterror.ClassDDL.NewStd(mysql.ErrTableCantHandleFt) // ErrFieldNotFoundPart returns an error when 'partition by columns' are not found in table columns. - ErrFieldNotFoundPart = terror.ClassDDL.New(mysql.ErrFieldNotFoundPart, mysql.MySQLErrName[mysql.ErrFieldNotFoundPart]) + ErrFieldNotFoundPart = dbterror.ClassDDL.NewStd(mysql.ErrFieldNotFoundPart) // ErrWrongTypeColumnValue returns 'Partition column values of incorrect type' - ErrWrongTypeColumnValue = terror.ClassDDL.New(mysql.ErrWrongTypeColumnValue, mysql.MySQLErrName[mysql.ErrWrongTypeColumnValue]) + ErrWrongTypeColumnValue = dbterror.ClassDDL.NewStd(mysql.ErrWrongTypeColumnValue) // ErrFunctionalIndexPrimaryKey returns 'The primary key cannot be a functional index' - ErrFunctionalIndexPrimaryKey = terror.ClassDDL.New(mysql.ErrFunctionalIndexPrimaryKey, mysql.MySQLErrName[mysql.ErrFunctionalIndexPrimaryKey]) + ErrFunctionalIndexPrimaryKey = dbterror.ClassDDL.NewStd(mysql.ErrFunctionalIndexPrimaryKey) // ErrFunctionalIndexOnField returns 'Functional index on a column is not supported. Consider using a regular index instead' - ErrFunctionalIndexOnField = terror.ClassDDL.New(mysql.ErrFunctionalIndexOnField, mysql.MySQLErrName[mysql.ErrFunctionalIndexOnField]) + ErrFunctionalIndexOnField = dbterror.ClassDDL.NewStd(mysql.ErrFunctionalIndexOnField) // ErrInvalidAutoRandom returns when auto_random is used incorrectly. - ErrInvalidAutoRandom = terror.ClassDDL.New(mysql.ErrInvalidAutoRandom, mysql.MySQLErrName[mysql.ErrInvalidAutoRandom]) + ErrInvalidAutoRandom = dbterror.ClassDDL.NewStd(mysql.ErrInvalidAutoRandom) // ErrDerivedMustHaveAlias returns when a sub select statement does not have a table alias. - ErrDerivedMustHaveAlias = terror.ClassDDL.New(mysql.ErrDerivedMustHaveAlias, mysql.MySQLErrName[mysql.ErrDerivedMustHaveAlias]) + ErrDerivedMustHaveAlias = dbterror.ClassDDL.NewStd(mysql.ErrDerivedMustHaveAlias) // ErrSequenceRunOut returns when the sequence has been run out. - ErrSequenceRunOut = terror.ClassDDL.New(mysql.ErrSequenceRunOut, mysql.MySQLErrName[mysql.ErrSequenceRunOut]) + ErrSequenceRunOut = dbterror.ClassDDL.NewStd(mysql.ErrSequenceRunOut) // ErrSequenceInvalidData returns when sequence values are conflicting. - ErrSequenceInvalidData = terror.ClassDDL.New(mysql.ErrSequenceInvalidData, mysql.MySQLErrName[mysql.ErrSequenceInvalidData]) + ErrSequenceInvalidData = dbterror.ClassDDL.NewStd(mysql.ErrSequenceInvalidData) // ErrSequenceAccessFail returns when sequences are not able to access. - ErrSequenceAccessFail = terror.ClassDDL.New(mysql.ErrSequenceAccessFail, mysql.MySQLErrName[mysql.ErrSequenceAccessFail]) + ErrSequenceAccessFail = dbterror.ClassDDL.NewStd(mysql.ErrSequenceAccessFail) // ErrNotSequence returns when object is not a sequence. - ErrNotSequence = terror.ClassDDL.New(mysql.ErrNotSequence, mysql.MySQLErrName[mysql.ErrNotSequence]) + ErrNotSequence = dbterror.ClassDDL.NewStd(mysql.ErrNotSequence) // ErrUnknownSequence returns when drop / alter unknown sequence. - ErrUnknownSequence = terror.ClassDDL.New(mysql.ErrUnknownSequence, mysql.MySQLErrName[mysql.ErrUnknownSequence]) + ErrUnknownSequence = dbterror.ClassDDL.NewStd(mysql.ErrUnknownSequence) // ErrSequenceUnsupportedTableOption returns when unsupported table option exists in sequence. - ErrSequenceUnsupportedTableOption = terror.ClassDDL.New(mysql.ErrSequenceUnsupportedTableOption, mysql.MySQLErrName[mysql.ErrSequenceUnsupportedTableOption]) + ErrSequenceUnsupportedTableOption = dbterror.ClassDDL.NewStd(mysql.ErrSequenceUnsupportedTableOption) // ErrColumnTypeUnsupportedNextValue is returned when sequence next value is assigned to unsupported column type. - ErrColumnTypeUnsupportedNextValue = terror.ClassDDL.New(mysql.ErrColumnTypeUnsupportedNextValue, mysql.MySQLErrName[mysql.ErrColumnTypeUnsupportedNextValue]) + ErrColumnTypeUnsupportedNextValue = dbterror.ClassDDL.NewStd(mysql.ErrColumnTypeUnsupportedNextValue) // ErrAddColumnWithSequenceAsDefault is returned when the new added column with sequence's nextval as it's default value. - ErrAddColumnWithSequenceAsDefault = terror.ClassDDL.New(mysql.ErrAddColumnWithSequenceAsDefault, mysql.MySQLErrName[mysql.ErrAddColumnWithSequenceAsDefault]) + ErrAddColumnWithSequenceAsDefault = dbterror.ClassDDL.NewStd(mysql.ErrAddColumnWithSequenceAsDefault) // ErrUnsupportedExpressionIndex is returned when create an expression index without allow-expression-index. - ErrUnsupportedExpressionIndex = terror.ClassDDL.New(mysql.ErrUnsupportedDDLOperation, fmt.Sprintf(mysql.MySQLErrName[mysql.ErrUnsupportedDDLOperation], "creating expression index without allow-expression-index in config")) + ErrUnsupportedExpressionIndex = dbterror.ClassDDL.NewStdErr(mysql.ErrUnsupportedDDLOperation, parser_mysql.Message(fmt.Sprintf(mysql.MySQLErrName[mysql.ErrUnsupportedDDLOperation].Raw, "creating expression index without allow-expression-index in config"), nil)) ) diff --git a/distsql/select_result.go b/distsql/select_result.go index e819b2e890550..a74c8765aba33 100644 --- a/distsql/select_result.go +++ b/distsql/select_result.go @@ -34,6 +34,7 @@ import ( "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/chunk" "github.com/pingcap/tidb/util/codec" + "github.com/pingcap/tidb/util/dbterror" "github.com/pingcap/tidb/util/execdetails" "github.com/pingcap/tidb/util/logutil" "github.com/pingcap/tidb/util/memory" @@ -42,8 +43,10 @@ import ( ) var ( - errQueryInterrupted = terror.ClassExecutor.NewStd(errno.ErrQueryInterrupted) + errQueryInterrupted = dbterror.ClassExecutor.NewStd(errno.ErrQueryInterrupted) +) +var ( coprCacheHistogramHit = metrics.DistSQLCoprCacheHistogram.WithLabelValues("hit") coprCacheHistogramMiss = metrics.DistSQLCoprCacheHistogram.WithLabelValues("miss") ) @@ -130,7 +133,7 @@ func (r *selectResult) fetchResp(ctx context.Context) error { r.selectRespSize = r.selectResp.Size() r.memConsume(int64(r.selectRespSize)) if err := r.selectResp.Error; err != nil { - return terror.ClassTiKV.Synthesize(terror.ErrCode(err.Code), err.Msg) + return dbterror.ClassTiKV.Synthesize(terror.ErrCode(err.Code), err.Msg) } sessVars := r.ctx.GetSessionVars() if atomic.LoadUint32(&sessVars.Killed) == 1 { @@ -138,7 +141,7 @@ func (r *selectResult) fetchResp(ctx context.Context) error { } sc := sessVars.StmtCtx for _, warning := range r.selectResp.Warnings { - sc.AppendWarning(terror.ClassTiKV.Synthesize(terror.ErrCode(warning.Code), warning.Msg)) + sc.AppendWarning(dbterror.ClassTiKV.Synthesize(terror.ErrCode(warning.Code), warning.Msg)) } r.feedback.Update(resultSubset.GetStartKey(), r.selectResp.OutputCounts) r.partialCount++ diff --git a/distsql/stream.go b/distsql/stream.go index f1817084cdf44..56e8b9e89b244 100644 --- a/distsql/stream.go +++ b/distsql/stream.go @@ -26,6 +26,7 @@ import ( "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/chunk" "github.com/pingcap/tidb/util/codec" + "github.com/pingcap/tidb/util/dbterror" "github.com/pingcap/tipb/go-tipb" ) @@ -97,7 +98,7 @@ func (r *streamResult) readDataFromResponse(ctx context.Context, resp kv.Respons return false, errors.Errorf("stream response error: [%d]%s\n", stream.Error.Code, stream.Error.Msg) } for _, warning := range stream.Warnings { - r.ctx.GetSessionVars().StmtCtx.AppendWarning(terror.ClassTiKV.Synthesize(terror.ErrCode(warning.Code), warning.Msg)) + r.ctx.GetSessionVars().StmtCtx.AppendWarning(dbterror.ClassTiKV.Synthesize(terror.ErrCode(warning.Code), warning.Msg)) } err = result.Unmarshal(stream.Data) diff --git a/domain/domain.go b/domain/domain.go index 871ba921bc563..ebe0bd04fcade 100644 --- a/domain/domain.go +++ b/domain/domain.go @@ -26,6 +26,7 @@ import ( "github.com/pingcap/failpoint" "github.com/pingcap/parser/ast" "github.com/pingcap/parser/model" + "github.com/pingcap/parser/mysql" "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/bindinfo" "github.com/pingcap/tidb/config" @@ -45,6 +46,7 @@ import ( "github.com/pingcap/tidb/store/tikv" "github.com/pingcap/tidb/telemetry" "github.com/pingcap/tidb/util" + "github.com/pingcap/tidb/util/dbterror" "github.com/pingcap/tidb/util/domainutil" "github.com/pingcap/tidb/util/expensivequery" "github.com/pingcap/tidb/util/logutil" @@ -1212,8 +1214,8 @@ func (do *Domain) NotifyUpdatePrivilege(ctx sessionctx.Context) { var ( // ErrInfoSchemaExpired returns the error that information schema is out of date. - ErrInfoSchemaExpired = terror.ClassDomain.New(errno.ErrInfoSchemaExpired, errno.MySQLErrName[errno.ErrInfoSchemaExpired]) + ErrInfoSchemaExpired = dbterror.ClassDomain.NewStd(errno.ErrInfoSchemaExpired) // ErrInfoSchemaChanged returns the error that information schema is changed. - ErrInfoSchemaChanged = terror.ClassDomain.New(errno.ErrInfoSchemaChanged, - errno.MySQLErrName[errno.ErrInfoSchemaChanged]+". "+kv.TxnRetryableMark) + ErrInfoSchemaChanged = dbterror.ClassDomain.NewStdErr(errno.ErrInfoSchemaChanged, + mysql.Message(errno.MySQLErrName[errno.ErrInfoSchemaChanged].Raw+". "+kv.TxnRetryableMark, nil)) ) diff --git a/domain/infosync/info.go b/domain/infosync/info.go index 2f377a0698e10..ef8cd72096c3b 100644 --- a/domain/infosync/info.go +++ b/domain/infosync/info.go @@ -28,7 +28,6 @@ import ( "github.com/pingcap/errors" "github.com/pingcap/failpoint" "github.com/pingcap/parser/mysql" - "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/config" "github.com/pingcap/tidb/ddl/util" "github.com/pingcap/tidb/errno" @@ -38,6 +37,7 @@ import ( "github.com/pingcap/tidb/sessionctx/variable" "github.com/pingcap/tidb/store/tikv/oracle" util2 "github.com/pingcap/tidb/util" + "github.com/pingcap/tidb/util/dbterror" "github.com/pingcap/tidb/util/hack" "github.com/pingcap/tidb/util/logutil" "github.com/pingcap/tidb/util/pdapi" @@ -75,7 +75,7 @@ const ( ) // ErrPrometheusAddrIsNotSet is the error that Prometheus address is not set in PD and etcd -var ErrPrometheusAddrIsNotSet = terror.ClassDomain.New(errno.ErrPrometheusAddrIsNotSet, errno.MySQLErrName[errno.ErrPrometheusAddrIsNotSet]) +var ErrPrometheusAddrIsNotSet = dbterror.ClassDomain.NewStd(errno.ErrPrometheusAddrIsNotSet) // InfoSyncer stores server info to etcd when the tidb-server starts and delete when tidb-server shuts down. type InfoSyncer struct { diff --git a/errno/errname.go b/errno/errname.go index e0e881c4d033e..cd74abd8cd227 100644 --- a/errno/errname.go +++ b/errno/errname.go @@ -13,1078 +13,1083 @@ package errno +import "github.com/pingcap/parser/mysql" + // MySQLErrName maps error code to MySQL error messages. -var MySQLErrName = map[uint16]string{ - ErrHashchk: "hashchk", - ErrNisamchk: "isamchk", - ErrNo: "NO", - ErrYes: "YES", - ErrCantCreateFile: "Can't create file '%-.200s' (errno: %d - %s)", - ErrCantCreateTable: "Can't create table '%-.200s' (errno: %d)", - ErrCantCreateDB: "Can't create database '%-.192s' (errno: %d)", - ErrDBCreateExists: "Can't create database '%-.192s'; database exists", - ErrDBDropExists: "Can't drop database '%-.192s'; database doesn't exist", - ErrDBDropDelete: "Error dropping database (can't delete '%-.192s', errno: %d)", - ErrDBDropRmdir: "Error dropping database (can't rmdir '%-.192s', errno: %d)", - ErrCantDeleteFile: "Error on delete of '%-.192s' (errno: %d - %s)", - ErrCantFindSystemRec: "Can't read record in system table", - ErrCantGetStat: "Can't get status of '%-.200s' (errno: %d - %s)", - ErrCantGetWd: "Can't get working directory (errno: %d - %s)", - ErrCantLock: "Can't lock file (errno: %d - %s)", - ErrCantOpenFile: "Can't open file: '%-.200s' (errno: %d - %s)", - ErrFileNotFound: "Can't find file: '%-.200s' (errno: %d - %s)", - ErrCantReadDir: "Can't read dir of '%-.192s' (errno: %d - %s)", - ErrCantSetWd: "Can't change dir to '%-.192s' (errno: %d - %s)", - ErrCheckread: "Record has changed since last read in table '%-.192s'", - ErrDiskFull: "Disk full (%s); waiting for someone to free some space... (errno: %d - %s)", - ErrDupKey: "Can't write; duplicate key in table '%-.192s'", - ErrErrorOnClose: "Error on close of '%-.192s' (errno: %d - %s)", - ErrErrorOnRead: "Error reading file '%-.200s' (errno: %d - %s)", - ErrErrorOnRename: "Error on rename of '%-.210s' to '%-.210s' (errno: %d - %s)", - ErrErrorOnWrite: "Error writing file '%-.200s' (errno: %d - %s)", - ErrFileUsed: "'%-.192s' is locked against change", - ErrFilsortAbort: "Sort aborted", - ErrFormNotFound: "View '%-.192s' doesn't exist for '%-.192s'", - ErrGetErrno: "Got error %d from storage engine", - ErrIllegalHa: "Table storage engine for '%-.192s' doesn't have this option", - ErrKeyNotFound: "Can't find record in '%-.192s'", - ErrNotFormFile: "Incorrect information in file: '%-.200s'", - ErrNotKeyFile: "Incorrect key file for table '%-.200s'; try to repair it", - ErrOldKeyFile: "Old key file for table '%-.192s'; repair it!", - ErrOpenAsReadonly: "Table '%-.192s' is read only", - ErrOutofMemory: "Out of memory; restart server and try again (needed %d bytes)", - ErrOutOfSortMemory: "Out of sort memory, consider increasing server sort buffer size", - ErrUnexpectedEOF: "Unexpected EOF found when reading file '%-.192s' (errno: %d - %s)", - ErrConCount: "Too many connections", - ErrOutOfResources: "Out of memory; check if mysqld or some other process uses all available memory; if not, you may have to use 'ulimit' to allow mysqld to use more memory or you can add more swap space", - ErrBadHost: "Can't get hostname for your address", - ErrHandshake: "Bad handshake", - ErrDBaccessDenied: "Access denied for user '%-.48s'@'%-.64s' to database '%-.192s'", - ErrAccessDenied: "Access denied for user '%-.48s'@'%-.64s' (using password: %s)", - ErrNoDB: "No database selected", - ErrUnknownCom: "Unknown command", - ErrBadNull: "Column '%-.192s' cannot be null", - ErrBadDB: "Unknown database '%-.192s'", - ErrTableExists: "Table '%-.192s' already exists", - ErrBadTable: "Unknown table '%-.100s'", - ErrNonUniq: "Column '%-.192s' in %-.192s is ambiguous", - ErrServerShutdown: "Server shutdown in progress", - ErrBadField: "Unknown column '%-.192s' in '%-.192s'", - ErrFieldNotInGroupBy: "Expression #%d of %s is not in GROUP BY clause and contains nonaggregated column '%s' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by", - ErrWrongGroupField: "Can't group on '%-.192s'", - ErrWrongSumSelect: "Statement has sum functions and columns in same statement", - ErrWrongValueCount: "Column count doesn't match value count", - ErrTooLongIdent: "Identifier name '%-.100s' is too long", - ErrDupFieldName: "Duplicate column name '%-.192s'", - ErrDupKeyName: "Duplicate key name '%-.192s'", - ErrDupEntry: "Duplicate entry '%-.64s' for key '%-.192s'", - ErrWrongFieldSpec: "Incorrect column specifier for column '%-.192s'", - ErrParse: "%s %s", - ErrEmptyQuery: "Query was empty", - ErrNonuniqTable: "Not unique table/alias: '%-.192s'", - ErrInvalidDefault: "Invalid default value for '%-.192s'", - ErrMultiplePriKey: "Multiple primary key defined", - ErrTooManyKeys: "Too many keys specified; max %d keys allowed", - ErrTooManyKeyParts: "Too many key parts specified; max %d parts allowed", - ErrTooLongKey: "Specified key was too long; max key length is %d bytes", - ErrKeyColumnDoesNotExits: "Key column '%-.192s' doesn't exist in table", - ErrBlobUsedAsKey: "BLOB column '%-.192s' can't be used in key specification with the used table type", - ErrTooBigFieldlength: "Column length too big for column '%-.192s' (max = %d); use BLOB or TEXT instead", - ErrWrongAutoKey: "Incorrect table definition; there can be only one auto column and it must be defined as a key", - ErrReady: "%s: ready for connections.\nVersion: '%s' socket: '%s' port: %d", - ErrNormalShutdown: "%s: Normal shutdown\n", - ErrGotSignal: "%s: Got signal %d. Aborting!\n", - ErrShutdownComplete: "%s: Shutdown complete\n", - ErrForcingClose: "%s: Forcing close of thread %d user: '%-.48s'\n", - ErrIpsock: "Can't create IP socket", - ErrNoSuchIndex: "Table '%-.192s' has no index like the one used in CREATE INDEX; recreate the table", - ErrWrongFieldTerminators: "Field separator argument is not what is expected; check the manual", - ErrBlobsAndNoTerminated: "You can't use fixed rowlength with BLOBs; please use 'fields terminated by'", - ErrTextFileNotReadable: "The file '%-.128s' must be in the database directory or be readable by all", - ErrFileExists: "File '%-.200s' already exists", - ErrLoadInfo: "Records: %d Deleted: %d Skipped: %d Warnings: %d", - ErrAlterInfo: "Records: %d Duplicates: %d", - ErrWrongSubKey: "Incorrect prefix key; the used key part isn't a string, the used length is longer than the key part, or the storage engine doesn't support unique prefix keys", - ErrCantRemoveAllFields: "You can't delete all columns with ALTER TABLE; use DROP TABLE instead", - ErrCantDropFieldOrKey: "Can't DROP '%-.192s'; check that column/key exists", - ErrInsertInfo: "Records: %d Duplicates: %d Warnings: %d", - ErrUpdateTableUsed: "You can't specify target table '%-.192s' for update in FROM clause", - ErrNoSuchThread: "Unknown thread id: %d", - ErrKillDenied: "You are not owner of thread %d", - ErrNoTablesUsed: "No tables used", - ErrTooBigSet: "Too many strings for column %-.192s and SET", - ErrNoUniqueLogFile: "Can't generate a unique log-filename %-.200s.(1-999)\n", - ErrTableNotLockedForWrite: "Table '%-.192s' was locked with a READ lock and can't be updated", - ErrTableNotLocked: "Table '%-.192s' was not locked with LOCK TABLES", - ErrBlobCantHaveDefault: "BLOB/TEXT/JSON column '%-.192s' can't have a default value", - ErrWrongDBName: "Incorrect database name '%-.100s'", - ErrWrongTableName: "Incorrect table name '%-.100s'", - ErrTooBigSelect: "The SELECT would examine more than MAXJOINSIZE rows; check your WHERE and use SET SQLBIGSELECTS=1 or SET MAXJOINSIZE=# if the SELECT is okay", - ErrUnknown: "Unknown error", - ErrUnknownProcedure: "Unknown procedure '%-.192s'", - ErrWrongParamcountToProcedure: "Incorrect parameter count to procedure '%-.192s'", - ErrWrongParametersToProcedure: "Incorrect parameters to procedure '%-.192s'", - ErrUnknownTable: "Unknown table '%-.192s' in %-.32s", - ErrFieldSpecifiedTwice: "Column '%-.192s' specified twice", - ErrInvalidGroupFuncUse: "Invalid use of group function", - ErrUnsupportedExtension: "Table '%-.192s' uses an extension that doesn't exist in this MySQL version", - ErrTableMustHaveColumns: "A table must have at least 1 column", - ErrRecordFileFull: "The table '%-.192s' is full", - ErrUnknownCharacterSet: "Unknown character set: '%-.64s'", - ErrTooManyTables: "Too many tables; MySQL can only use %d tables in a join", - ErrTooManyFields: "Too many columns", - ErrTooBigRowsize: "Row size too large. The maximum row size for the used table type, not counting BLOBs, is %d. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs", - ErrStackOverrun: "Thread stack overrun: Used: %d of a %d stack. Use 'mysqld --threadStack=#' to specify a bigger stack if needed", - ErrWrongOuterJoin: "Cross dependency found in OUTER JOIN; examine your ON conditions", - ErrNullColumnInIndex: "Table handler doesn't support NULL in given index. Please change column '%-.192s' to be NOT NULL or use another handler", - ErrCantFindUdf: "Can't load function '%-.192s'", - ErrCantInitializeUdf: "Can't initialize function '%-.192s'; %-.80s", - ErrUdfNoPaths: "No paths allowed for shared library", - ErrUdfExists: "Function '%-.192s' already exists", - ErrCantOpenLibrary: "Can't open shared library '%-.192s' (errno: %d %-.128s)", - ErrCantFindDlEntry: "Can't find symbol '%-.128s' in library", - ErrFunctionNotDefined: "Function '%-.192s' is not defined", - ErrHostIsBlocked: "Host '%-.64s' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'", - ErrHostNotPrivileged: "Host '%-.64s' is not allowed to connect to this MySQL server", - ErrPasswordAnonymousUser: "You are using MySQL as an anonymous user and anonymous users are not allowed to change passwords", - ErrPasswordNotAllowed: "You must have privileges to update tables in the mysql database to be able to change passwords for others", - ErrPasswordNoMatch: "Can't find any matching row in the user table", - ErrUpdateInfo: "Rows matched: %d Changed: %d Warnings: %d", - ErrCantCreateThread: "Can't create a new thread (errno %d); if you are not out of available memory, you can consult the manual for a possible OS-dependent bug", - ErrWrongValueCountOnRow: "Column count doesn't match value count at row %d", - ErrCantReopenTable: "Can't reopen table: '%-.192s'", - ErrInvalidUseOfNull: "Invalid use of NULL value", - ErrRegexp: "Got error '%-.64s' from regexp", - ErrMixOfGroupFuncAndFields: "Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause", - ErrNonexistingGrant: "There is no such grant defined for user '%-.48s' on host '%-.64s'", - ErrTableaccessDenied: "%-.128s command denied to user '%-.48s'@'%-.64s' for table '%-.64s'", - ErrColumnaccessDenied: "%-.16s command denied to user '%-.48s'@'%-.64s' for column '%-.192s' in table '%-.192s'", - ErrIllegalGrantForTable: "Illegal GRANT/REVOKE command; please consult the manual to see which privileges can be used", - ErrGrantWrongHostOrUser: "The host or user argument to GRANT is too long", - ErrNoSuchTable: "Table '%-.192s.%-.192s' doesn't exist", - ErrNonexistingTableGrant: "There is no such grant defined for user '%-.48s' on host '%-.64s' on table '%-.192s'", - ErrNotAllowedCommand: "The used command is not allowed with this MySQL version", - ErrSyntax: "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use", - ErrDelayedCantChangeLock: "Delayed insert thread couldn't get requested lock for table %-.192s", - ErrTooManyDelayedThreads: "Too many delayed threads in use", - ErrAbortingConnection: "Aborted connection %d to db: '%-.192s' user: '%-.48s' (%-.64s)", - ErrNetPacketTooLarge: "Got a packet bigger than 'maxAllowedPacket' bytes", - ErrNetReadErrorFromPipe: "Got a read error from the connection pipe", - ErrNetFcntl: "Got an error from fcntl()", - ErrNetPacketsOutOfOrder: "Got packets out of order", - ErrNetUncompress: "Couldn't uncompress communication packet", - ErrNetRead: "Got an error reading communication packets", - ErrNetReadInterrupted: "Got timeout reading communication packets", - ErrNetErrorOnWrite: "Got an error writing communication packets", - ErrNetWriteInterrupted: "Got timeout writing communication packets", - ErrTooLongString: "Result string is longer than 'maxAllowedPacket' bytes", - ErrTableCantHandleBlob: "The used table type doesn't support BLOB/TEXT columns", - ErrTableCantHandleAutoIncrement: "The used table type doesn't support AUTOINCREMENT columns", - ErrDelayedInsertTableLocked: "INSERT DELAYED can't be used with table '%-.192s' because it is locked with LOCK TABLES", - ErrWrongColumnName: "Incorrect column name '%-.100s'", - ErrWrongKeyColumn: "The used storage engine can't index column '%-.192s'", - ErrWrongMrgTable: "Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist", - ErrDupUnique: "Can't write, because of unique constraint, to table '%-.192s'", - ErrBlobKeyWithoutLength: "BLOB/TEXT column '%-.192s' used in key specification without a key length", - ErrPrimaryCantHaveNull: "All parts of a PRIMARY KEY must be NOT NULL; if you need NULL in a key, use UNIQUE instead", - ErrTooManyRows: "Result consisted of more than one row", - ErrRequiresPrimaryKey: "This table type requires a primary key", - ErrNoRaidCompiled: "This version of MySQL is not compiled with RAID support", - ErrUpdateWithoutKeyInSafeMode: "You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column", - ErrKeyDoesNotExist: "Key '%-.192s' doesn't exist in table '%-.192s'", - ErrCheckNoSuchTable: "Can't open table", - ErrCheckNotImplemented: "The storage engine for the table doesn't support %s", - ErrCantDoThisDuringAnTransaction: "You are not allowed to execute this command in a transaction", - ErrErrorDuringCommit: "Got error %d during COMMIT", - ErrErrorDuringRollback: "Got error %d during ROLLBACK", - ErrErrorDuringFlushLogs: "Got error %d during FLUSHLOGS", - ErrErrorDuringCheckpoint: "Got error %d during CHECKPOINT", - ErrNewAbortingConnection: "Aborted connection %d to db: '%-.192s' user: '%-.48s' host: '%-.64s' (%-.64s)", - ErrDumpNotImplemented: "The storage engine for the table does not support binary table dump", - ErrFlushMasterBinlogClosed: "Binlog closed, cannot RESET MASTER", - ErrIndexRebuild: "Failed rebuilding the index of dumped table '%-.192s'", - ErrMaster: "Error from master: '%-.64s'", - ErrMasterNetRead: "Net error reading from master", - ErrMasterNetWrite: "Net error writing to master", - ErrFtMatchingKeyNotFound: "Can't find FULLTEXT index matching the column list", - ErrLockOrActiveTransaction: "Can't execute the given command because you have active locked tables or an active transaction", - ErrUnknownSystemVariable: "Unknown system variable '%-.64s'", - ErrCrashedOnUsage: "Table '%-.192s' is marked as crashed and should be repaired", - ErrCrashedOnRepair: "Table '%-.192s' is marked as crashed and last (automatic?) repair failed", - ErrWarningNotCompleteRollback: "Some non-transactional changed tables couldn't be rolled back", - ErrTransCacheFull: "Multi-statement transaction required more than 'maxBinlogCacheSize' bytes of storage; increase this mysqld variable and try again", - ErrSlaveMustStop: "This operation cannot be performed with a running slave; run STOP SLAVE first", - ErrSlaveNotRunning: "This operation requires a running slave; configure slave and do START SLAVE", - ErrBadSlave: "The server is not configured as slave; fix in config file or with CHANGE MASTER TO", - ErrMasterInfo: "Could not initialize master info structure; more error messages can be found in the MySQL error log", - ErrSlaveThread: "Could not create slave thread; check system resources", - ErrTooManyUserConnections: "User %-.64s already has more than 'maxUserConnections' active connections", - ErrSetConstantsOnly: "You may only use constant expressions with SET", - ErrLockWaitTimeout: "Lock wait timeout exceeded; try restarting transaction", - ErrLockTableFull: "The total number of locks exceeds the lock table size", - ErrReadOnlyTransaction: "Update locks cannot be acquired during a READ UNCOMMITTED transaction", - ErrDropDBWithReadLock: "DROP DATABASE not allowed while thread is holding global read lock", - ErrCreateDBWithReadLock: "CREATE DATABASE not allowed while thread is holding global read lock", - ErrWrongArguments: "Incorrect arguments to %s", - ErrNoPermissionToCreateUser: "'%-.48s'@'%-.64s' is not allowed to create new users", - ErrUnionTablesInDifferentDir: "Incorrect table definition; all MERGE tables must be in the same database", - ErrLockDeadlock: "Deadlock found when trying to get lock; try restarting transaction", - ErrTableCantHandleFt: "The used table type doesn't support FULLTEXT indexes", - ErrCannotAddForeign: "Cannot add foreign key constraint", - ErrNoReferencedRow: "Cannot add or update a child row: a foreign key constraint fails", - ErrRowIsReferenced: "Cannot delete or update a parent row: a foreign key constraint fails", - ErrConnectToMaster: "Error connecting to master: %-.128s", - ErrQueryOnMaster: "Error running query on master: %-.128s", - ErrErrorWhenExecutingCommand: "Error when executing command %s: %-.128s", - ErrWrongUsage: "Incorrect usage of %s and %s", - ErrWrongNumberOfColumnsInSelect: "The used SELECT statements have a different number of columns", - ErrCantUpdateWithReadlock: "Can't execute the query because you have a conflicting read lock", - ErrMixingNotAllowed: "Mixing of transactional and non-transactional tables is disabled", - ErrDupArgument: "Option '%s' used twice in statement", - ErrUserLimitReached: "User '%-.64s' has exceeded the '%s' resource (current value: %d)", - ErrSpecificAccessDenied: "Access denied; you need (at least one of) the %-.128s privilege(s) for this operation", - ErrLocalVariable: "Variable '%-.64s' is a SESSION variable and can't be used with SET GLOBAL", - ErrGlobalVariable: "Variable '%-.64s' is a GLOBAL variable and should be set with SET GLOBAL", - ErrNoDefault: "Variable '%-.64s' doesn't have a default value", - ErrWrongValueForVar: "Variable '%-.64s' can't be set to the value of '%-.200s'", - ErrWrongTypeForVar: "Incorrect argument type to variable '%-.64s'", - ErrVarCantBeRead: "Variable '%-.64s' can only be set, not read", - ErrCantUseOptionHere: "Incorrect usage/placement of '%s'", - ErrNotSupportedYet: "This version of TiDB doesn't yet support '%s'", - ErrMasterFatalErrorReadingBinlog: "Got fatal error %d from master when reading data from binary log: '%-.320s'", - ErrSlaveIgnoredTable: "Slave SQL thread ignored the query because of replicate-*-table rules", - ErrIncorrectGlobalLocalVar: "Variable '%-.192s' is a %s variable", - ErrWrongFkDef: "Incorrect foreign key definition for '%-.192s': %s", - ErrKeyRefDoNotMatchTableRef: "Key reference and table reference don't match", - ErrOperandColumns: "Operand should contain %d column(s)", - ErrSubqueryNo1Row: "Subquery returns more than 1 row", - ErrUnknownStmtHandler: "Unknown prepared statement handler (%.*s) given to %s", - ErrCorruptHelpDB: "Help database is corrupt or does not exist", - ErrCyclicReference: "Cyclic reference on subqueries", - ErrAutoConvert: "Converting column '%s' from %s to %s", - ErrIllegalReference: "Reference '%-.64s' not supported (%s)", - ErrDerivedMustHaveAlias: "Every derived table must have its own alias", - ErrSelectReduced: "Select %d was reduced during optimization", - ErrTablenameNotAllowedHere: "Table '%s' from one of the %ss cannot be used in %s", - ErrNotSupportedAuthMode: "Client does not support authentication protocol requested by server; consider upgrading MySQL client", - ErrSpatialCantHaveNull: "All parts of a SPATIAL index must be NOT NULL", - ErrCollationCharsetMismatch: "COLLATION '%s' is not valid for CHARACTER SET '%s'", - ErrSlaveWasRunning: "Slave is already running", - ErrSlaveWasNotRunning: "Slave already has been stopped", - ErrTooBigForUncompress: "Uncompressed data size too large; the maximum size is %d (probably, length of uncompressed data was corrupted)", - ErrZlibZMem: "ZLIB: Not enough memory", - ErrZlibZBuf: "ZLIB: Not enough room in the output buffer (probably, length of uncompressed data was corrupted)", - ErrZlibZData: "ZLIB: Input data corrupted", - ErrCutValueGroupConcat: "Some rows were cut by GROUPCONCAT(%s)", - ErrWarnTooFewRecords: "Row %d doesn't contain data for all columns", - ErrWarnTooManyRecords: "Row %d was truncated; it contained more data than there were input columns", - ErrWarnNullToNotnull: "Column set to default value; NULL supplied to NOT NULL column '%s' at row %d", - ErrWarnDataOutOfRange: "Out of range value for column '%s' at row %d", - WarnDataTruncated: "Data truncated for column '%s' at row %d", - ErrWarnUsingOtherHandler: "Using storage engine %s for table '%s'", - ErrCantAggregate2collations: "Illegal mix of collations (%s,%s) and (%s,%s) for operation '%s'", - ErrDropUser: "Cannot drop one or more of the requested users", - ErrRevokeGrants: "Can't revoke all privileges for one or more of the requested users", - ErrCantAggregate3collations: "Illegal mix of collations (%s,%s), (%s,%s), (%s,%s) for operation '%s'", - ErrCantAggregateNcollations: "Illegal mix of collations for operation '%s'", - ErrVariableIsNotStruct: "Variable '%-.64s' is not a variable component (can't be used as XXXX.variableName)", - ErrUnknownCollation: "Unknown collation: '%-.64s'", - ErrSlaveIgnoredSslParams: "SSL parameters in CHANGE MASTER are ignored because this MySQL slave was compiled without SSL support; they can be used later if MySQL slave with SSL is started", - ErrServerIsInSecureAuthMode: "Server is running in --secure-auth mode, but '%s'@'%s' has a password in the old format; please change the password to the new format", - ErrWarnFieldResolved: "Field or reference '%-.192s%s%-.192s%s%-.192s' of SELECT #%d was resolved in SELECT #%d", - ErrBadSlaveUntilCond: "Incorrect parameter or combination of parameters for START SLAVE UNTIL", - ErrMissingSkipSlave: "It is recommended to use --skip-slave-start when doing step-by-step replication with START SLAVE UNTIL; otherwise, you will get problems if you get an unexpected slave's mysqld restart", - ErrUntilCondIgnored: "SQL thread is not to be started so UNTIL options are ignored", - ErrWrongNameForIndex: "Incorrect index name '%-.100s'", - ErrWrongNameForCatalog: "Incorrect catalog name '%-.100s'", - ErrWarnQcResize: "Query cache failed to set size %d; new query cache size is %d", - ErrBadFtColumn: "Column '%-.192s' cannot be part of FULLTEXT index", - ErrUnknownKeyCache: "Unknown key cache '%-.100s'", - ErrWarnHostnameWontWork: "MySQL is started in --skip-name-resolve mode; you must restart it without this switch for this grant to work", - ErrUnknownStorageEngine: "Unknown storage engine '%s'", - ErrWarnDeprecatedSyntax: "'%s' is deprecated and will be removed in a future release. Please use %s instead", - ErrNonUpdatableTable: "The target table %-.100s of the %s is not updatable", - ErrFeatureDisabled: "The '%s' feature is disabled; you need MySQL built with '%s' to have it working", - ErrOptionPreventsStatement: "The MySQL server is running with the %s option so it cannot execute this statement", - ErrDuplicatedValueInType: "Column '%-.100s' has duplicated value '%-.64s' in %s", - ErrTruncatedWrongValue: "Truncated incorrect %-.64s value: '%-.128s'", - ErrTooMuchAutoTimestampCols: "Incorrect table definition; there can be only one TIMESTAMP column with CURRENTTIMESTAMP in DEFAULT or ON UPDATE clause", - ErrInvalidOnUpdate: "Invalid ON UPDATE clause for '%-.192s' column", - ErrUnsupportedPs: "This command is not supported in the prepared statement protocol yet", - ErrGetErrmsg: "Got error %d '%-.100s' from %s", - ErrGetTemporaryErrmsg: "Got temporary error %d '%-.100s' from %s", - ErrUnknownTimeZone: "Unknown or incorrect time zone: '%-.64s'", - ErrWarnInvalidTimestamp: "Invalid TIMESTAMP value in column '%s' at row %d", - ErrInvalidCharacterString: "Invalid %s character string: '%.64s'", - ErrWarnAllowedPacketOverflowed: "Result of %s() was larger than max_allowed_packet (%d) - truncated", - ErrConflictingDeclarations: "Conflicting declarations: '%s%s' and '%s%s'", - ErrSpNoRecursiveCreate: "Can't create a %s from within another stored routine", - ErrSpAlreadyExists: "%s %s already exists", - ErrSpDoesNotExist: "%s %s does not exist", - ErrSpDropFailed: "Failed to DROP %s %s", - ErrSpStoreFailed: "Failed to CREATE %s %s", - ErrSpLilabelMismatch: "%s with no matching label: %s", - ErrSpLabelRedefine: "Redefining label %s", - ErrSpLabelMismatch: "End-label %s without match", - ErrSpUninitVar: "Referring to uninitialized variable %s", - ErrSpBadselect: "PROCEDURE %s can't return a result set in the given context", - ErrSpBadreturn: "RETURN is only allowed in a FUNCTION", - ErrSpBadstatement: "%s is not allowed in stored procedures", - ErrUpdateLogDeprecatedIgnored: "The update log is deprecated and replaced by the binary log; SET SQLLOGUPDATE has been ignored.", - ErrUpdateLogDeprecatedTranslated: "The update log is deprecated and replaced by the binary log; SET SQLLOGUPDATE has been translated to SET SQLLOGBIN.", - ErrQueryInterrupted: "Query execution was interrupted", - ErrSpWrongNoOfArgs: "Incorrect number of arguments for %s %s; expected %d, got %d", - ErrSpCondMismatch: "Undefined CONDITION: %s", - ErrSpNoreturn: "No RETURN found in FUNCTION %s", - ErrSpNoreturnend: "FUNCTION %s ended without RETURN", - ErrSpBadCursorQuery: "Cursor statement must be a SELECT", - ErrSpBadCursorSelect: "Cursor SELECT must not have INTO", - ErrSpCursorMismatch: "Undefined CURSOR: %s", - ErrSpCursorAlreadyOpen: "Cursor is already open", - ErrSpCursorNotOpen: "Cursor is not open", - ErrSpUndeclaredVar: "Undeclared variable: %s", - ErrSpWrongNoOfFetchArgs: "Incorrect number of FETCH variables", - ErrSpFetchNoData: "No data - zero rows fetched, selected, or processed", - ErrSpDupParam: "Duplicate parameter: %s", - ErrSpDupVar: "Duplicate variable: %s", - ErrSpDupCond: "Duplicate condition: %s", - ErrSpDupCurs: "Duplicate cursor: %s", - ErrSpCantAlter: "Failed to ALTER %s %s", - ErrSpSubselectNyi: "Subquery value not supported", - ErrStmtNotAllowedInSfOrTrg: "%s is not allowed in stored function or trigger", - ErrSpVarcondAfterCurshndlr: "Variable or condition declaration after cursor or handler declaration", - ErrSpCursorAfterHandler: "Cursor declaration after handler declaration", - ErrSpCaseNotFound: "Case not found for CASE statement", - ErrFparserTooBigFile: "Configuration file '%-.192s' is too big", - ErrFparserBadHeader: "Malformed file type header in file '%-.192s'", - ErrFparserEOFInComment: "Unexpected end of file while parsing comment '%-.200s'", - ErrFparserErrorInParameter: "Error while parsing parameter '%-.192s' (line: '%-.192s')", - ErrFparserEOFInUnknownParameter: "Unexpected end of file while skipping unknown parameter '%-.192s'", - ErrViewNoExplain: "EXPLAIN/SHOW can not be issued; lacking privileges for underlying table", - ErrFrmUnknownType: "File '%-.192s' has unknown type '%-.64s' in its header", - ErrWrongObject: "'%-.192s.%-.192s' is not %s", - ErrNonupdateableColumn: "Column '%-.192s' is not updatable", - ErrViewSelectDerived: "View's SELECT contains a subquery in the FROM clause", - ErrViewSelectClause: "View's SELECT contains a '%s' clause", - ErrViewSelectVariable: "View's SELECT contains a variable or parameter", - ErrViewSelectTmptable: "View's SELECT refers to a temporary table '%-.192s'", - ErrViewWrongList: "View's SELECT and view's field list have different column counts", - ErrWarnViewMerge: "View merge algorithm can't be used here for now (assumed undefined algorithm)", - ErrWarnViewWithoutKey: "View being updated does not have complete key of underlying table in it", - ErrViewInvalid: "View '%-.192s.%-.192s' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them", - ErrSpNoDropSp: "Can't drop or alter a %s from within another stored routine", - ErrSpGotoInHndlr: "GOTO is not allowed in a stored procedure handler", - ErrTrgAlreadyExists: "Trigger already exists", - ErrTrgDoesNotExist: "Trigger does not exist", - ErrTrgOnViewOrTempTable: "Trigger's '%-.192s' is view or temporary table", - ErrTrgCantChangeRow: "Updating of %s row is not allowed in %strigger", - ErrTrgNoSuchRowInTrg: "There is no %s row in %s trigger", - ErrNoDefaultForField: "Field '%-.192s' doesn't have a default value", - ErrDivisionByZero: "Division by 0", - ErrTruncatedWrongValueForField: "Incorrect %-.32s value: '%-.128s' for column '%.192s' at row %d", - ErrIllegalValueForType: "Illegal %s '%-.192s' value found during parsing", - ErrViewNonupdCheck: "CHECK OPTION on non-updatable view '%-.192s.%-.192s'", - ErrViewCheckFailed: "CHECK OPTION failed '%-.192s.%-.192s'", - ErrProcaccessDenied: "%-.16s command denied to user '%-.48s'@'%-.64s' for routine '%-.192s'", - ErrRelayLogFail: "Failed purging old relay logs: %s", - ErrPasswdLength: "Password hash should be a %d-digit hexadecimal number", - ErrUnknownTargetBinlog: "Target log not found in binlog index", - ErrIoErrLogIndexRead: "I/O error reading log index file", - ErrBinlogPurgeProhibited: "Server configuration does not permit binlog purge", - ErrFseekFail: "Failed on fseek()", - ErrBinlogPurgeFatalErr: "Fatal error during log purge", - ErrLogInUse: "A purgeable log is in use, will not purge", - ErrLogPurgeUnknownErr: "Unknown error during log purge", - ErrRelayLogInit: "Failed initializing relay log position: %s", - ErrNoBinaryLogging: "You are not using binary logging", - ErrReservedSyntax: "The '%-.64s' syntax is reserved for purposes internal to the MySQL server", - ErrWsasFailed: "WSAStartup Failed", - ErrDiffGroupsProc: "Can't handle procedures with different groups yet", - ErrNoGroupForProc: "Select must have a group with this procedure", - ErrOrderWithProc: "Can't use ORDER clause with this procedure", - ErrLoggingProhibitChangingOf: "Binary logging and replication forbid changing the global server %s", - ErrNoFileMapping: "Can't map file: %-.200s, errno: %d", - ErrWrongMagic: "Wrong magic in %-.64s", - ErrPsManyParam: "Prepared statement contains too many placeholders", - ErrKeyPart0: "Key part '%-.192s' length cannot be 0", - ErrViewChecksum: "View text checksum failed", - ErrViewMultiupdate: "Can not modify more than one base table through a join view '%-.192s.%-.192s'", - ErrViewNoInsertFieldList: "Can not insert into join view '%-.192s.%-.192s' without fields list", - ErrViewDeleteMergeView: "Can not delete from join view '%-.192s.%-.192s'", - ErrCannotUser: "Operation %s failed for %.256s", - ErrXaerNota: "XAERNOTA: Unknown XID", - ErrXaerInval: "XAERINVAL: Invalid arguments (or unsupported command)", - ErrXaerRmfail: "XAERRMFAIL: The command cannot be executed when global transaction is in the %.64s state", - ErrXaerOutside: "XAEROUTSIDE: Some work is done outside global transaction", - ErrXaerRmerr: "XAERRMERR: Fatal error occurred in the transaction branch - check your data for consistency", - ErrXaRbrollback: "XARBROLLBACK: Transaction branch was rolled back", - ErrNonexistingProcGrant: "There is no such grant defined for user '%-.48s' on host '%-.64s' on routine '%-.192s'", - ErrProcAutoGrantFail: "Failed to grant EXECUTE and ALTER ROUTINE privileges", - ErrProcAutoRevokeFail: "Failed to revoke all privileges to dropped routine", - ErrDataTooLong: "Data too long for column '%s' at row %d", - ErrSpBadSQLstate: "Bad SQLSTATE: '%s'", - ErrStartup: "%s: ready for connections.\nVersion: '%s' socket: '%s' port: %d %s", - ErrLoadFromFixedSizeRowsToVar: "Can't load value from file with fixed size rows to variable", - ErrCantCreateUserWithGrant: "You are not allowed to create a user with GRANT", - ErrWrongValueForType: "Incorrect %-.32s value: '%-.128s' for function %-.32s", - ErrTableDefChanged: "Table definition has changed, please retry transaction", - ErrSpDupHandler: "Duplicate handler declared in the same block", - ErrSpNotVarArg: "OUT or INOUT argument %d for routine %s is not a variable or NEW pseudo-variable in BEFORE trigger", - ErrSpNoRetset: "Not allowed to return a result set from a %s", - ErrCantCreateGeometryObject: "Cannot get geometry object from data you send to the GEOMETRY field", - ErrFailedRoutineBreakBinlog: "A routine failed and has neither NO SQL nor READS SQL DATA in its declaration and binary logging is enabled; if non-transactional tables were updated, the binary log will miss their changes", - ErrBinlogUnsafeRoutine: "This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe logBinTrustFunctionCreators variable)", - ErrBinlogCreateRoutineNeedSuper: "You do not have the SUPER privilege and binary logging is enabled (you *might* want to use the less safe logBinTrustFunctionCreators variable)", - ErrExecStmtWithOpenCursor: "You can't execute a prepared statement which has an open cursor associated with it. Reset the statement to re-execute it.", - ErrStmtHasNoOpenCursor: "The statement (%d) has no open cursor.", - ErrCommitNotAllowedInSfOrTrg: "Explicit or implicit commit is not allowed in stored function or trigger.", - ErrNoDefaultForViewField: "Field of view '%-.192s.%-.192s' underlying table doesn't have a default value", - ErrSpNoRecursion: "Recursive stored functions and triggers are not allowed.", - ErrTooBigScale: "Too big scale %d specified for column '%-.192s'. Maximum is %d.", - ErrTooBigPrecision: "Too big precision %d specified for column '%-.192s'. Maximum is %d.", - ErrMBiggerThanD: "For float(M,D), double(M,D) or decimal(M,D), M must be >= D (column '%-.192s').", - ErrWrongLockOfSystemTable: "You can't combine write-locking of system tables with other tables or lock types", - ErrConnectToForeignDataSource: "Unable to connect to foreign data source: %.64s", - ErrQueryOnForeignDataSource: "There was a problem processing the query on the foreign data source. Data source : %-.64s", - ErrForeignDataSourceDoesntExist: "The foreign data source you are trying to reference does not exist. Data source : %-.64s", - ErrForeignDataStringInvalidCantCreate: "Can't create federated table. The data source connection string '%-.64s' is not in the correct format", - ErrForeignDataStringInvalid: "The data source connection string '%-.64s' is not in the correct format", - ErrCantCreateFederatedTable: "Can't create federated table. Foreign data src : %-.64s", - ErrTrgInWrongSchema: "Trigger in wrong schema", - ErrStackOverrunNeedMore: "Thread stack overrun: %d bytes used of a %d byte stack, and %d bytes needed. Use 'mysqld --threadStack=#' to specify a bigger stack.", - ErrTooLongBody: "Routine body for '%-.100s' is too long", - ErrWarnCantDropDefaultKeycache: "Cannot drop default keycache", - ErrTooBigDisplaywidth: "Display width out of range for column '%-.192s' (max = %d)", - ErrXaerDupid: "XAERDUPID: The XID already exists", - ErrDatetimeFunctionOverflow: "Datetime function: %-.32s field overflow", - ErrCantUpdateUsedTableInSfOrTrg: "Can't update table '%-.192s' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.", - ErrViewPreventUpdate: "The definition of table '%-.192s' prevents operation %.192s on table '%-.192s'.", - ErrPsNoRecursion: "The prepared statement contains a stored routine call that refers to that same statement. It's not allowed to execute a prepared statement in such a recursive manner", - ErrSpCantSetAutocommit: "Not allowed to set autocommit from a stored function or trigger", - ErrMalformedDefiner: "Definer is not fully qualified", - ErrViewFrmNoUser: "View '%-.192s'.'%-.192s' has no definer information (old table format). Current user is used as definer. Please recreate the view!", - ErrViewOtherUser: "You need the SUPER privilege for creation view with '%-.192s'@'%-.192s' definer", - ErrNoSuchUser: "The user specified as a definer ('%-.64s'@'%-.64s') does not exist", - ErrForbidSchemaChange: "Changing schema from '%-.192s' to '%-.192s' is not allowed.", - ErrRowIsReferenced2: "Cannot delete or update a parent row: a foreign key constraint fails (%.192s)", - ErrNoReferencedRow2: "Cannot add or update a child row: a foreign key constraint fails (%.192s)", - ErrSpBadVarShadow: "Variable '%-.64s' must be quoted with `...`, or renamed", - ErrTrgNoDefiner: "No definer attribute for trigger '%-.192s'.'%-.192s'. The trigger will be activated under the authorization of the invoker, which may have insufficient privileges. Please recreate the trigger.", - ErrOldFileFormat: "'%-.192s' has an old format, you should re-create the '%s' object(s)", - ErrSpRecursionLimit: "Recursive limit %d (as set by the maxSpRecursionDepth variable) was exceeded for routine %.192s", - ErrSpProcTableCorrupt: "Failed to load routine %-.192s. The table mysql.proc is missing, corrupt, or contains bad data (internal code %d)", - ErrSpWrongName: "Incorrect routine name '%-.192s'", - ErrTableNeedsUpgrade: "Table upgrade required. Please do \"REPAIR TABLE `%-.32s`\"", - ErrSpNoAggregate: "AGGREGATE is not supported for stored functions", - ErrMaxPreparedStmtCountReached: "Can't create more than maxPreparedStmtCount statements (current value: %d)", - ErrViewRecursive: "`%-.192s`.`%-.192s` contains view recursion", - ErrNonGroupingFieldUsed: "Non-grouping field '%-.192s' is used in %-.64s clause", - ErrTableCantHandleSpkeys: "The used table type doesn't support SPATIAL indexes", - ErrNoTriggersOnSystemSchema: "Triggers can not be created on system tables", - ErrRemovedSpaces: "Leading spaces are removed from name '%s'", - ErrAutoincReadFailed: "Failed to read auto-increment value from storage engine", - ErrUsername: "user name", - ErrHostname: "host name", - ErrWrongStringLength: "String '%-.70s' is too long for %s (should be no longer than %d)", - ErrNonInsertableTable: "The target table %-.100s of the %s is not insertable-into", - ErrAdminWrongMrgTable: "Table '%-.64s' is differently defined or of non-MyISAM type or doesn't exist", - ErrTooHighLevelOfNestingForSelect: "Too high level of nesting for select", - ErrNameBecomesEmpty: "Name '%-.64s' has become ''", - ErrAmbiguousFieldTerm: "First character of the FIELDS TERMINATED string is ambiguous; please use non-optional and non-empty FIELDS ENCLOSED BY", - ErrForeignServerExists: "The foreign server, %s, you are trying to create already exists.", - ErrForeignServerDoesntExist: "The foreign server name you are trying to reference does not exist. Data source : %-.64s", - ErrIllegalHaCreateOption: "Table storage engine '%-.64s' does not support the create option '%.64s'", - ErrPartitionRequiresValues: "Syntax : %-.64s PARTITIONING requires definition of VALUES %-.64s for each partition", - ErrPartitionWrongValues: "Only %-.64s PARTITIONING can use VALUES %-.64s in partition definition", - ErrPartitionMaxvalue: "MAXVALUE can only be used in last partition definition", - ErrPartitionSubpartition: "Subpartitions can only be hash partitions and by key", - ErrPartitionSubpartMix: "Must define subpartitions on all partitions if on one partition", - ErrPartitionWrongNoPart: "Wrong number of partitions defined, mismatch with previous setting", - ErrPartitionWrongNoSubpart: "Wrong number of subpartitions defined, mismatch with previous setting", - ErrWrongExprInPartitionFunc: "Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed", - ErrNoConstExprInRangeOrList: "Expression in RANGE/LIST VALUES must be constant", - ErrFieldNotFoundPart: "Field in list of fields for partition function not found in table", - ErrListOfFieldsOnlyInHash: "List of fields is only allowed in KEY partitions", - ErrInconsistentPartitionInfo: "The partition info in the frm file is not consistent with what can be written into the frm file", - ErrPartitionFuncNotAllowed: "The %-.192s function returns the wrong type", - ErrPartitionsMustBeDefined: "For %-.64s partitions each partition must be defined", - ErrRangeNotIncreasing: "VALUES LESS THAN value must be strictly increasing for each partition", - ErrInconsistentTypeOfFunctions: "VALUES value must be of same type as partition function", - ErrMultipleDefConstInListPart: "Multiple definition of same constant in list partitioning", - ErrPartitionEntry: "Partitioning can not be used stand-alone in query", - ErrMixHandler: "The mix of handlers in the partitions is not allowed in this version of MySQL", - ErrPartitionNotDefined: "For the partitioned engine it is necessary to define all %-.64s", - ErrTooManyPartitions: "Too many partitions (including subpartitions) were defined", - ErrSubpartition: "It is only possible to mix RANGE/LIST partitioning with HASH/KEY partitioning for subpartitioning", - ErrCantCreateHandlerFile: "Failed to create specific handler file", - ErrBlobFieldInPartFunc: "A BLOB field is not allowed in partition function", - ErrUniqueKeyNeedAllFieldsInPf: "A %-.192s must include all columns in the table's partitioning function", - ErrNoParts: "Number of %-.64s = 0 is not an allowed value", - ErrPartitionMgmtOnNonpartitioned: "Partition management on a not partitioned table is not possible", - ErrForeignKeyOnPartitioned: "Foreign key clause is not yet supported in conjunction with partitioning", - ErrDropPartitionNonExistent: "Error in list of partitions to %-.64s", - ErrDropLastPartition: "Cannot remove all partitions, use DROP TABLE instead", - ErrCoalesceOnlyOnHashPartition: "COALESCE PARTITION can only be used on HASH/KEY partitions", - ErrReorgHashOnlyOnSameNo: "REORGANIZE PARTITION can only be used to reorganize partitions not to change their numbers", - ErrReorgNoParam: "REORGANIZE PARTITION without parameters can only be used on auto-partitioned tables using HASH PARTITIONs", - ErrOnlyOnRangeListPartition: "%-.64s PARTITION can only be used on RANGE/LIST partitions", - ErrAddPartitionSubpart: "Trying to Add partition(s) with wrong number of subpartitions", - ErrAddPartitionNoNewPartition: "At least one partition must be added", - ErrCoalescePartitionNoPartition: "At least one partition must be coalesced", - ErrReorgPartitionNotExist: "More partitions to reorganize than there are partitions", - ErrSameNamePartition: "Duplicate partition name %-.192s", - ErrNoBinlog: "It is not allowed to shut off binlog on this command", - ErrConsecutiveReorgPartitions: "When reorganizing a set of partitions they must be in consecutive order", - ErrReorgOutsideRange: "Reorganize of range partitions cannot change total ranges except for last partition where it can extend the range", - ErrPartitionFunctionFailure: "Partition function not supported in this version for this handler", - ErrPartState: "Partition state cannot be defined from CREATE/ALTER TABLE", - ErrLimitedPartRange: "The %-.64s handler only supports 32 bit integers in VALUES", - ErrPluginIsNotLoaded: "Plugin '%-.192s' is not loaded", - ErrWrongValue: "Incorrect %-.32s value: '%-.128s'", - ErrNoPartitionForGivenValue: "Table has no partition for value %-.64s", - ErrFilegroupOptionOnlyOnce: "It is not allowed to specify %s more than once", - ErrCreateFilegroupFailed: "Failed to create %s", - ErrDropFilegroupFailed: "Failed to drop %s", - ErrTablespaceAutoExtend: "The handler doesn't support autoextend of tablespaces", - ErrWrongSizeNumber: "A size parameter was incorrectly specified, either number or on the form 10M", - ErrSizeOverflow: "The size number was correct but we don't allow the digit part to be more than 2 billion", - ErrAlterFilegroupFailed: "Failed to alter: %s", - ErrBinlogRowLoggingFailed: "Writing one row to the row-based binary log failed", - ErrBinlogRowWrongTableDef: "Table definition on master and slave does not match: %s", - ErrBinlogRowRbrToSbr: "Slave running with --log-slave-updates must use row-based binary logging to be able to replicate row-based binary log events", - ErrEventAlreadyExists: "Event '%-.192s' already exists", - ErrEventStoreFailed: "Failed to store event %s. Error code %d from storage engine.", - ErrEventDoesNotExist: "Unknown event '%-.192s'", - ErrEventCantAlter: "Failed to alter event '%-.192s'", - ErrEventDropFailed: "Failed to drop %s", - ErrEventIntervalNotPositiveOrTooBig: "INTERVAL is either not positive or too big", - ErrEventEndsBeforeStarts: "ENDS is either invalid or before STARTS", - ErrEventExecTimeInThePast: "Event execution time is in the past. Event has been disabled", - ErrEventOpenTableFailed: "Failed to open mysql.event", - ErrEventNeitherMExprNorMAt: "No datetime expression provided", - ErrObsoleteColCountDoesntMatchCorrupted: "Column count of mysql.%s is wrong. Expected %d, found %d. The table is probably corrupted", - ErrObsoleteCannotLoadFromTable: "Cannot load from mysql.%s. The table is probably corrupted", - ErrEventCannotDelete: "Failed to delete the event from mysql.event", - ErrEventCompile: "Error during compilation of event's body", - ErrEventSameName: "Same old and new event name", - ErrEventDataTooLong: "Data for column '%s' too long", - ErrDropIndexFk: "Cannot drop index '%-.192s': needed in a foreign key constraint", - ErrWarnDeprecatedSyntaxWithVer: "The syntax '%s' is deprecated and will be removed in MySQL %s. Please use %s instead", - ErrCantWriteLockLogTable: "You can't write-lock a log table. Only read access is possible", - ErrCantLockLogTable: "You can't use locks with log tables.", - ErrForeignDuplicateKeyOldUnused: "Upholding foreign key constraints for table '%.192s', entry '%-.192s', key %d would lead to a duplicate entry", - ErrColCountDoesntMatchPleaseUpdate: "Column count of mysql.%s is wrong. Expected %d, found %d. Created with MySQL %d, now running %d. Please use mysqlUpgrade to fix this error.", - ErrTempTablePreventsSwitchOutOfRbr: "Cannot switch out of the row-based binary log format when the session has open temporary tables", - ErrStoredFunctionPreventsSwitchBinlogFormat: "Cannot change the binary logging format inside a stored function or trigger", - ErrNdbCantSwitchBinlogFormat: "The NDB cluster engine does not support changing the binlog format on the fly yet", - ErrPartitionNoTemporary: "Cannot create temporary table with partitions", - ErrPartitionConstDomain: "Partition constant is out of partition function domain", - ErrPartitionFunctionIsNotAllowed: "This partition function is not allowed", - ErrDdlLog: "Error in DDL log", - ErrNullInValuesLessThan: "Not allowed to use NULL value in VALUES LESS THAN", - ErrWrongPartitionName: "Incorrect partition name", - ErrCantChangeTxCharacteristics: "Transaction characteristics can't be changed while a transaction is in progress", - ErrDupEntryAutoincrementCase: "ALTER TABLE causes autoIncrement resequencing, resulting in duplicate entry '%-.192s' for key '%-.192s'", - ErrEventModifyQueue: "Internal scheduler error %d", - ErrEventSetVar: "Error during starting/stopping of the scheduler. Error code %d", - ErrPartitionMerge: "Engine cannot be used in partitioned tables", - ErrCantActivateLog: "Cannot activate '%-.64s' log", - ErrRbrNotAvailable: "The server was not built with row-based replication", - ErrBase64Decode: "Decoding of base64 string failed", - ErrEventRecursionForbidden: "Recursion of EVENT DDL statements is forbidden when body is present", - ErrEventsDB: "Cannot proceed because system tables used by Event Scheduler were found damaged at server start", - ErrOnlyIntegersAllowed: "Only integers allowed as number here", - ErrUnsuportedLogEngine: "This storage engine cannot be used for log tables\"", - ErrBadLogStatement: "You cannot '%s' a log table if logging is enabled", - ErrCantRenameLogTable: "Cannot rename '%s'. When logging enabled, rename to/from log table must rename two tables: the log table to an archive table and another table back to '%s'", - ErrWrongParamcountToNativeFct: "Incorrect parameter count in the call to native function '%-.192s'", - ErrWrongParametersToNativeFct: "Incorrect parameters in the call to native function '%-.192s'", - ErrWrongParametersToStoredFct: "Incorrect parameters in the call to stored function '%-.192s'", - ErrNativeFctNameCollision: "This function '%-.192s' has the same name as a native function", - ErrDupEntryWithKeyName: "Duplicate entry '%-.64s' for key '%-.192s'", - ErrBinlogPurgeEmFile: "Too many files opened, please execute the command again", - ErrEventCannotCreateInThePast: "Event execution time is in the past and ON COMPLETION NOT PRESERVE is set. The event was dropped immediately after creation.", - ErrEventCannotAlterInThePast: "Event execution time is in the past and ON COMPLETION NOT PRESERVE is set. The event was not changed. Specify a time in the future.", - ErrSlaveIncident: "The incident %s occurred on the master. Message: %-.64s", - ErrNoPartitionForGivenValueSilent: "Table has no partition for some existing values", - ErrBinlogUnsafeStatement: "Unsafe statement written to the binary log using statement format since BINLOGFORMAT = STATEMENT. %s", - ErrSlaveFatal: "Fatal : %s", - ErrSlaveRelayLogReadFailure: "Relay log read failure: %s", - ErrSlaveRelayLogWriteFailure: "Relay log write failure: %s", - ErrSlaveCreateEventFailure: "Failed to create %s", - ErrSlaveMasterComFailure: "Master command %s failed: %s", - ErrBinlogLoggingImpossible: "Binary logging not possible. Message: %s", - ErrViewNoCreationCtx: "View `%-.64s`.`%-.64s` has no creation context", - ErrViewInvalidCreationCtx: "Creation context of view `%-.64s`.`%-.64s' is invalid", - ErrSrInvalidCreationCtx: "Creation context of stored routine `%-.64s`.`%-.64s` is invalid", - ErrTrgCorruptedFile: "Corrupted TRG file for table `%-.64s`.`%-.64s`", - ErrTrgNoCreationCtx: "Triggers for table `%-.64s`.`%-.64s` have no creation context", - ErrTrgInvalidCreationCtx: "Trigger creation context of table `%-.64s`.`%-.64s` is invalid", - ErrEventInvalidCreationCtx: "Creation context of event `%-.64s`.`%-.64s` is invalid", - ErrTrgCantOpenTable: "Cannot open table for trigger `%-.64s`.`%-.64s`", - ErrCantCreateSroutine: "Cannot create stored routine `%-.64s`. Check warnings", - ErrNeverUsed: "Ambiguous slave modes combination. %s", - ErrNoFormatDescriptionEventBeforeBinlogStatement: "The BINLOG statement of type `%s` was not preceded by a format description BINLOG statement.", - ErrSlaveCorruptEvent: "Corrupted replication event was detected", - ErrLoadDataInvalidColumn: "Invalid column reference (%-.64s) in LOAD DATA", - ErrLogPurgeNoFile: "Being purged log %s was not found", - ErrXaRbtimeout: "XARBTIMEOUT: Transaction branch was rolled back: took too long", - ErrXaRbdeadlock: "XARBDEADLOCK: Transaction branch was rolled back: deadlock was detected", - ErrNeedReprepare: "Prepared statement needs to be re-prepared", - ErrDelayedNotSupported: "DELAYED option not supported for table '%-.192s'", - WarnNoMasterInfo: "The master info structure does not exist", - WarnOptionIgnored: "<%-.64s> option ignored", - WarnPluginDeleteBuiltin: "Built-in plugins cannot be deleted", - WarnPluginBusy: "Plugin is busy and will be uninstalled on shutdown", - ErrVariableIsReadonly: "%s variable '%s' is read-only. Use SET %s to assign the value", - ErrWarnEngineTransactionRollback: "Storage engine %s does not support rollback for this statement. Transaction rolled back and must be restarted", - ErrSlaveHeartbeatFailure: "Unexpected master's heartbeat data: %s", - ErrSlaveHeartbeatValueOutOfRange: "The requested value for the heartbeat period is either negative or exceeds the maximum allowed (%s seconds).", - ErrNdbReplicationSchema: "Bad schema for mysql.ndbReplication table. Message: %-.64s", - ErrConflictFnParse: "Error in parsing conflict function. Message: %-.64s", - ErrExceptionsWrite: "Write to exceptions table failed. Message: %-.128s\"", - ErrTooLongTableComment: "Comment for table '%-.64s' is too long (max = %d)", - ErrTooLongFieldComment: "Comment for field '%-.64s' is too long (max = %d)", - ErrFuncInexistentNameCollision: "FUNCTION %s does not exist. Check the 'Function Name Parsing and Resolution' section in the Reference Manual", - ErrDatabaseName: "Database", - ErrTableName: "Table", - ErrPartitionName: "Partition", - ErrSubpartitionName: "Subpartition", - ErrTemporaryName: "Temporary", - ErrRenamedName: "Renamed", - ErrTooManyConcurrentTrxs: "Too many active concurrent transactions", - WarnNonASCIISeparatorNotImplemented: "Non-ASCII separator arguments are not fully supported", - ErrDebugSyncTimeout: "debug sync point wait timed out", - ErrDebugSyncHitLimit: "debug sync point hit limit reached", - ErrDupSignalSet: "Duplicate condition information item '%s'", - ErrSignalWarn: "Unhandled user-defined warning condition", - ErrSignalNotFound: "Unhandled user-defined not found condition", - ErrSignalException: "Unhandled user-defined exception condition", - ErrResignalWithoutActiveHandler: "RESIGNAL when handler not active", - ErrSignalBadConditionType: "SIGNAL/RESIGNAL can only use a CONDITION defined with SQLSTATE", - WarnCondItemTruncated: "Data truncated for condition item '%s'", - ErrCondItemTooLong: "Data too long for condition item '%s'", - ErrUnknownLocale: "Unknown locale: '%-.64s'", - ErrSlaveIgnoreServerIds: "The requested server id %d clashes with the slave startup option --replicate-same-server-id", - ErrQueryCacheDisabled: "Query cache is disabled; restart the server with queryCacheType=1 to enable it", - ErrSameNamePartitionField: "Duplicate partition field name '%-.192s'", - ErrPartitionColumnList: "Inconsistency in usage of column lists for partitioning", - ErrWrongTypeColumnValue: "Partition column values of incorrect type", - ErrTooManyPartitionFuncFields: "Too many fields in '%-.192s'", - ErrMaxvalueInValuesIn: "Cannot use MAXVALUE as value in VALUES IN", - ErrTooManyValues: "Cannot have more than one value for this type of %-.64s partitioning", - ErrRowSinglePartitionField: "Row expressions in VALUES IN only allowed for multi-field column partitioning", - ErrFieldTypeNotAllowedAsPartitionField: "Field '%-.192s' is of a not allowed type for this type of partitioning", - ErrPartitionFieldsTooLong: "The total length of the partitioning fields is too large", - ErrBinlogRowEngineAndStmtEngine: "Cannot execute statement: impossible to write to binary log since both row-incapable engines and statement-incapable engines are involved.", - ErrBinlogRowModeAndStmtEngine: "Cannot execute statement: impossible to write to binary log since BINLOGFORMAT = ROW and at least one table uses a storage engine limited to statement-based logging.", - ErrBinlogUnsafeAndStmtEngine: "Cannot execute statement: impossible to write to binary log since statement is unsafe, storage engine is limited to statement-based logging, and BINLOGFORMAT = MIXED. %s", - ErrBinlogRowInjectionAndStmtEngine: "Cannot execute statement: impossible to write to binary log since statement is in row format and at least one table uses a storage engine limited to statement-based logging.", - ErrBinlogStmtModeAndRowEngine: "Cannot execute statement: impossible to write to binary log since BINLOGFORMAT = STATEMENT and at least one table uses a storage engine limited to row-based logging.%s", - ErrBinlogRowInjectionAndStmtMode: "Cannot execute statement: impossible to write to binary log since statement is in row format and BINLOGFORMAT = STATEMENT.", - ErrBinlogMultipleEnginesAndSelfLoggingEngine: "Cannot execute statement: impossible to write to binary log since more than one engine is involved and at least one engine is self-logging.", - ErrBinlogUnsafeLimit: "The statement is unsafe because it uses a LIMIT clause. This is unsafe because the set of rows included cannot be predicted.", - ErrBinlogUnsafeInsertDelayed: "The statement is unsafe because it uses INSERT DELAYED. This is unsafe because the times when rows are inserted cannot be predicted.", - ErrBinlogUnsafeSystemTable: "The statement is unsafe because it uses the general log, slow query log, or performanceSchema table(s). This is unsafe because system tables may differ on slaves.", - ErrBinlogUnsafeAutoincColumns: "Statement is unsafe because it invokes a trigger or a stored function that inserts into an AUTOINCREMENT column. Inserted values cannot be logged correctly.", - ErrBinlogUnsafeUdf: "Statement is unsafe because it uses a UDF which may not return the same value on the slave.", - ErrBinlogUnsafeSystemVariable: "Statement is unsafe because it uses a system variable that may have a different value on the slave.", - ErrBinlogUnsafeSystemFunction: "Statement is unsafe because it uses a system function that may return a different value on the slave.", - ErrBinlogUnsafeNontransAfterTrans: "Statement is unsafe because it accesses a non-transactional table after accessing a transactional table within the same transaction.", - ErrMessageAndStatement: "%s Statement: %s", - ErrSlaveConversionFailed: "Column %d of table '%-.192s.%-.192s' cannot be converted from type '%-.32s' to type '%-.32s'", - ErrSlaveCantCreateConversion: "Can't create conversion table for table '%-.192s.%-.192s'", - ErrInsideTransactionPreventsSwitchBinlogFormat: "Cannot modify @@session.binlogFormat inside a transaction", - ErrPathLength: "The path specified for %.64s is too long.", - ErrWarnDeprecatedSyntaxNoReplacement: "'%s' is deprecated and will be removed in a future release.", - ErrWrongNativeTableStructure: "Native table '%-.64s'.'%-.64s' has the wrong structure", - ErrWrongPerfSchemaUsage: "Invalid performanceSchema usage.", - ErrWarnISSkippedTable: "Table '%s'.'%s' was skipped since its definition is being modified by concurrent DDL statement", - ErrInsideTransactionPreventsSwitchBinlogDirect: "Cannot modify @@session.binlogDirectNonTransactionalUpdates inside a transaction", - ErrStoredFunctionPreventsSwitchBinlogDirect: "Cannot change the binlog direct flag inside a stored function or trigger", - ErrSpatialMustHaveGeomCol: "A SPATIAL index may only contain a geometrical type column", - ErrTooLongIndexComment: "Comment for index '%-.64s' is too long (max = %d)", - ErrLockAborted: "Wait on a lock was aborted due to a pending exclusive lock", - ErrDataOutOfRange: "%s value is out of range in '%s'", - ErrWrongSpvarTypeInLimit: "A variable of a non-integer based type in LIMIT clause", - ErrBinlogUnsafeMultipleEnginesAndSelfLoggingEngine: "Mixing self-logging and non-self-logging engines in a statement is unsafe.", - ErrBinlogUnsafeMixedStatement: "Statement accesses nontransactional table as well as transactional or temporary table, and writes to any of them.", - ErrInsideTransactionPreventsSwitchSQLLogBin: "Cannot modify @@session.sqlLogBin inside a transaction", - ErrStoredFunctionPreventsSwitchSQLLogBin: "Cannot change the sqlLogBin inside a stored function or trigger", - ErrFailedReadFromParFile: "Failed to read from the .par file", - ErrValuesIsNotIntType: "VALUES value for partition '%-.64s' must have type INT", - ErrAccessDeniedNoPassword: "Access denied for user '%-.48s'@'%-.64s'", - ErrSetPasswordAuthPlugin: "SET PASSWORD has no significance for users authenticating via plugins", - ErrGrantPluginUserExists: "GRANT with IDENTIFIED WITH is illegal because the user %-.*s already exists", - ErrTruncateIllegalFk: "Cannot truncate a table referenced in a foreign key constraint (%.192s)", - ErrPluginIsPermanent: "Plugin '%s' is forcePlusPermanent and can not be unloaded", - ErrSlaveHeartbeatValueOutOfRangeMin: "The requested value for the heartbeat period is less than 1 millisecond. The value is reset to 0, meaning that heartbeating will effectively be disabled.", - ErrSlaveHeartbeatValueOutOfRangeMax: "The requested value for the heartbeat period exceeds the value of `slaveNetTimeout' seconds. A sensible value for the period should be less than the timeout.", - ErrStmtCacheFull: "Multi-row statements required more than 'maxBinlogStmtCacheSize' bytes of storage; increase this mysqld variable and try again", - ErrMultiUpdateKeyConflict: "Primary key/partition key update is not allowed since the table is updated both as '%-.192s' and '%-.192s'.", - ErrTableNeedsRebuild: "Table rebuild required. Please do \"ALTER TABLE `%-.32s` FORCE\" or dump/reload to fix it!", - WarnOptionBelowLimit: "The value of '%s' should be no less than the value of '%s'", - ErrIndexColumnTooLong: "Index column size too large. The maximum column size is %d bytes.", - ErrErrorInTriggerBody: "Trigger '%-.64s' has an error in its body: '%-.256s'", - ErrErrorInUnknownTriggerBody: "Unknown trigger has an error in its body: '%-.256s'", - ErrIndexCorrupt: "Index %s is corrupted", - ErrUndoRecordTooBig: "Undo log record is too big.", - ErrBinlogUnsafeInsertIgnoreSelect: "INSERT IGNORE... SELECT is unsafe because the order in which rows are retrieved by the SELECT determines which (if any) rows are ignored. This order cannot be predicted and may differ on master and the slave.", - ErrBinlogUnsafeInsertSelectUpdate: "INSERT... SELECT... ON DUPLICATE KEY UPDATE is unsafe because the order in which rows are retrieved by the SELECT determines which (if any) rows are updated. This order cannot be predicted and may differ on master and the slave.", - ErrBinlogUnsafeReplaceSelect: "REPLACE... SELECT is unsafe because the order in which rows are retrieved by the SELECT determines which (if any) rows are replaced. This order cannot be predicted and may differ on master and the slave.", - ErrBinlogUnsafeCreateIgnoreSelect: "CREATE... IGNORE SELECT is unsafe because the order in which rows are retrieved by the SELECT determines which (if any) rows are ignored. This order cannot be predicted and may differ on master and the slave.", - ErrBinlogUnsafeCreateReplaceSelect: "CREATE... REPLACE SELECT is unsafe because the order in which rows are retrieved by the SELECT determines which (if any) rows are replaced. This order cannot be predicted and may differ on master and the slave.", - ErrBinlogUnsafeUpdateIgnore: "UPDATE IGNORE is unsafe because the order in which rows are updated determines which (if any) rows are ignored. This order cannot be predicted and may differ on master and the slave.", - ErrPluginNoUninstall: "Plugin '%s' is marked as not dynamically uninstallable. You have to stop the server to uninstall it.", - ErrPluginNoInstall: "Plugin '%s' is marked as not dynamically installable. You have to stop the server to install it.", - ErrBinlogUnsafeWriteAutoincSelect: "Statements writing to a table with an auto-increment column after selecting from another table are unsafe because the order in which rows are retrieved determines what (if any) rows will be written. This order cannot be predicted and may differ on master and the slave.", - ErrBinlogUnsafeCreateSelectAutoinc: "CREATE TABLE... SELECT... on a table with an auto-increment column is unsafe because the order in which rows are retrieved by the SELECT determines which (if any) rows are inserted. This order cannot be predicted and may differ on master and the slave.", - ErrBinlogUnsafeInsertTwoKeys: "INSERT... ON DUPLICATE KEY UPDATE on a table with more than one UNIQUE KEY is unsafe", - ErrTableInFkCheck: "Table is being used in foreign key check.", - ErrUnsupportedEngine: "Storage engine '%s' does not support system tables. [%s.%s]", - ErrBinlogUnsafeAutoincNotFirst: "INSERT into autoincrement field which is not the first part in the composed primary key is unsafe.", - ErrCannotLoadFromTableV2: "Cannot load from %s.%s. The table is probably corrupted", - ErrMasterDelayValueOutOfRange: "The requested value %d for the master delay exceeds the maximum %d", - ErrOnlyFdAndRbrEventsAllowedInBinlogStatement: "Only FormatDescriptionLogEvent and row events are allowed in BINLOG statements (but %s was provided)", - ErrPartitionExchangeDifferentOption: "Non matching attribute '%-.64s' between partition and table", - ErrPartitionExchangePartTable: "Table to exchange with partition is partitioned: '%-.64s'", - ErrPartitionExchangeTempTable: "Table to exchange with partition is temporary: '%-.64s'", - ErrPartitionInsteadOfSubpartition: "Subpartitioned table, use subpartition instead of partition", - ErrUnknownPartition: "Unknown partition '%-.64s' in table '%-.64s'", - ErrTablesDifferentMetadata: "Tables have different definitions", - ErrRowDoesNotMatchPartition: "Found a row that does not match the partition", - ErrBinlogCacheSizeGreaterThanMax: "Option binlogCacheSize (%d) is greater than maxBinlogCacheSize (%d); setting binlogCacheSize equal to maxBinlogCacheSize.", - ErrWarnIndexNotApplicable: "Cannot use %-.64s access on index '%-.64s' due to type or collation conversion on field '%-.64s'", - ErrPartitionExchangeForeignKey: "Table to exchange with partition has foreign key references: '%-.64s'", - ErrNoSuchKeyValue: "Key value '%-.192s' was not found in table '%-.192s.%-.192s'", - ErrRplInfoDataTooLong: "Data for column '%s' too long", - ErrNetworkReadEventChecksumFailure: "Replication event checksum verification failed while reading from network.", - ErrBinlogReadEventChecksumFailure: "Replication event checksum verification failed while reading from a log file.", - ErrBinlogStmtCacheSizeGreaterThanMax: "Option binlogStmtCacheSize (%d) is greater than maxBinlogStmtCacheSize (%d); setting binlogStmtCacheSize equal to maxBinlogStmtCacheSize.", - ErrCantUpdateTableInCreateTableSelect: "Can't update table '%-.192s' while '%-.192s' is being created.", - ErrPartitionClauseOnNonpartitioned: "PARTITION () clause on non partitioned table", - ErrRowDoesNotMatchGivenPartitionSet: "Found a row not matching the given partition set", - ErrNoSuchPartitionunused: "partition '%-.64s' doesn't exist", - ErrChangeRplInfoRepositoryFailure: "Failure while changing the type of replication repository: %s.", - ErrWarningNotCompleteRollbackWithCreatedTempTable: "The creation of some temporary tables could not be rolled back.", - ErrWarningNotCompleteRollbackWithDroppedTempTable: "Some temporary tables were dropped, but these operations could not be rolled back.", - ErrMtsFeatureIsNotSupported: "%s is not supported in multi-threaded slave mode. %s", - ErrMtsUpdatedDBsGreaterMax: "The number of modified databases exceeds the maximum %d; the database names will not be included in the replication event metadata.", - ErrMtsCantParallel: "Cannot execute the current event group in the parallel mode. Encountered event %s, relay-log name %s, position %s which prevents execution of this event group in parallel mode. Reason: %s.", - ErrMtsInconsistentData: "%s", - ErrFulltextNotSupportedWithPartitioning: "FULLTEXT index is not supported for partitioned tables.", - ErrDaInvalidConditionNumber: "Invalid condition number", - ErrInsecurePlainText: "Sending passwords in plain text without SSL/TLS is extremely insecure.", - ErrInsecureChangeMaster: "Storing MySQL user name or password information in the master.info repository is not secure and is therefore not recommended. Please see the MySQL Manual for more about this issue and possible alternatives.", - ErrForeignDuplicateKeyWithChildInfo: "Foreign key constraint for table '%.192s', record '%-.192s' would lead to a duplicate entry in table '%.192s', key '%.192s'", - ErrForeignDuplicateKeyWithoutChildInfo: "Foreign key constraint for table '%.192s', record '%-.192s' would lead to a duplicate entry in a child table", - ErrSQLthreadWithSecureSlave: "Setting authentication options is not possible when only the Slave SQL Thread is being started.", - ErrTableHasNoFt: "The table does not have FULLTEXT index to support this query", - ErrVariableNotSettableInSfOrTrigger: "The system variable %.200s cannot be set in stored functions or triggers.", - ErrVariableNotSettableInTransaction: "The system variable %.200s cannot be set when there is an ongoing transaction.", - ErrGtidNextIsNotInGtidNextList: "The system variable @@SESSION.GTIDNEXT has the value %.200s, which is not listed in @@SESSION.GTIDNEXTLIST.", - ErrCantChangeGtidNextInTransactionWhenGtidNextListIsNull: "When @@SESSION.GTIDNEXTLIST == NULL, the system variable @@SESSION.GTIDNEXT cannot change inside a transaction.", - ErrSetStatementCannotInvokeFunction: "The statement 'SET %.200s' cannot invoke a stored function.", - ErrGtidNextCantBeAutomaticIfGtidNextListIsNonNull: "The system variable @@SESSION.GTIDNEXT cannot be 'AUTOMATIC' when @@SESSION.GTIDNEXTLIST is non-NULL.", - ErrSkippingLoggedTransaction: "Skipping transaction %.200s because it has already been executed and logged.", - ErrMalformedGtidSetSpecification: "Malformed GTID set specification '%.200s'.", - ErrMalformedGtidSetEncoding: "Malformed GTID set encoding.", - ErrMalformedGtidSpecification: "Malformed GTID specification '%.200s'.", - ErrGnoExhausted: "Impossible to generate Global Transaction Identifier: the integer component reached the maximal value. Restart the server with a new serverUuid.", - ErrBadSlaveAutoPosition: "Parameters MASTERLOGFILE, MASTERLOGPOS, RELAYLOGFILE and RELAYLOGPOS cannot be set when MASTERAUTOPOSITION is active.", - ErrAutoPositionRequiresGtidModeOn: "CHANGE MASTER TO MASTERAUTOPOSITION = 1 can only be executed when @@GLOBAL.GTIDMODE = ON.", - ErrCantDoImplicitCommitInTrxWhenGtidNextIsSet: "Cannot execute statements with implicit commit inside a transaction when @@SESSION.GTIDNEXT != AUTOMATIC or @@SESSION.GTIDNEXTLIST != NULL.", - ErrGtidMode2Or3RequiresEnforceGtidConsistencyOn: "@@GLOBAL.GTIDMODE = ON or UPGRADESTEP2 requires @@GLOBAL.ENFORCEGTIDCONSISTENCY = 1.", - ErrGtidModeRequiresBinlog: "@@GLOBAL.GTIDMODE = ON or UPGRADESTEP1 or UPGRADESTEP2 requires --log-bin and --log-slave-updates.", - ErrCantSetGtidNextToGtidWhenGtidModeIsOff: "@@SESSION.GTIDNEXT cannot be set to UUID:NUMBER when @@GLOBAL.GTIDMODE = OFF.", - ErrCantSetGtidNextToAnonymousWhenGtidModeIsOn: "@@SESSION.GTIDNEXT cannot be set to ANONYMOUS when @@GLOBAL.GTIDMODE = ON.", - ErrCantSetGtidNextListToNonNullWhenGtidModeIsOff: "@@SESSION.GTIDNEXTLIST cannot be set to a non-NULL value when @@GLOBAL.GTIDMODE = OFF.", - ErrFoundGtidEventWhenGtidModeIsOff: "Found a GtidLogEvent or PreviousGtidsLogEvent when @@GLOBAL.GTIDMODE = OFF.", - ErrGtidUnsafeNonTransactionalTable: "When @@GLOBAL.ENFORCEGTIDCONSISTENCY = 1, updates to non-transactional tables can only be done in either autocommitted statements or single-statement transactions, and never in the same statement as updates to transactional tables.", - ErrGtidUnsafeCreateSelect: "CREATE TABLE ... SELECT is forbidden when @@GLOBAL.ENFORCEGTIDCONSISTENCY = 1.", - ErrGtidUnsafeCreateDropTemporaryTableInTransaction: "When @@GLOBAL.ENFORCEGTIDCONSISTENCY = 1, the statements CREATE TEMPORARY TABLE and DROP TEMPORARY TABLE can be executed in a non-transactional context only, and require that AUTOCOMMIT = 1.", - ErrGtidModeCanOnlyChangeOneStepAtATime: "The value of @@GLOBAL.GTIDMODE can only change one step at a time: OFF <-> UPGRADESTEP1 <-> UPGRADESTEP2 <-> ON. Also note that this value must be stepped up or down simultaneously on all servers; see the Manual for instructions.", - ErrMasterHasPurgedRequiredGtids: "The slave is connecting using CHANGE MASTER TO MASTERAUTOPOSITION = 1, but the master has purged binary logs containing GTIDs that the slave requires.", - ErrCantSetGtidNextWhenOwningGtid: "@@SESSION.GTIDNEXT cannot be changed by a client that owns a GTID. The client owns %s. Ownership is released on COMMIT or ROLLBACK.", - ErrUnknownExplainFormat: "Unknown EXPLAIN format name: '%s'", - ErrCantExecuteInReadOnlyTransaction: "Cannot execute statement in a READ ONLY transaction.", - ErrTooLongTablePartitionComment: "Comment for table partition '%-.64s' is too long (max = %d)", - ErrSlaveConfiguration: "Slave is not configured or failed to initialize properly. You must at least set --server-id to enable either a master or a slave. Additional error messages can be found in the MySQL error log.", - ErrInnodbFtLimit: "InnoDB presently supports one FULLTEXT index creation at a time", - ErrInnodbNoFtTempTable: "Cannot create FULLTEXT index on temporary InnoDB table", - ErrInnodbFtWrongDocidColumn: "Column '%-.192s' is of wrong type for an InnoDB FULLTEXT index", - ErrInnodbFtWrongDocidIndex: "Index '%-.192s' is of wrong type for an InnoDB FULLTEXT index", - ErrInnodbOnlineLogTooBig: "Creating index '%-.192s' required more than 'innodbOnlineAlterLogMaxSize' bytes of modification log. Please try again.", - ErrUnknownAlterAlgorithm: "Unknown ALGORITHM '%s'", - ErrUnknownAlterLock: "Unknown LOCK type '%s'", - ErrMtsChangeMasterCantRunWithGaps: "CHANGE MASTER cannot be executed when the slave was stopped with an error or killed in MTS mode. Consider using RESET SLAVE or START SLAVE UNTIL.", - ErrMtsRecoveryFailure: "Cannot recover after SLAVE errored out in parallel execution mode. Additional error messages can be found in the MySQL error log.", - ErrMtsResetWorkers: "Cannot clean up worker info tables. Additional error messages can be found in the MySQL error log.", - ErrColCountDoesntMatchCorruptedV2: "Column count of %s.%s is wrong. Expected %d, found %d. The table is probably corrupted", - ErrSlaveSilentRetryTransaction: "Slave must silently retry current transaction", - ErrDiscardFkChecksRunning: "There is a foreign key check running on table '%-.192s'. Cannot discard the table.", - ErrTableSchemaMismatch: "Schema mismatch (%s)", - ErrTableInSystemTablespace: "Table '%-.192s' in system tablespace", - ErrIoRead: "IO Read : (%d, %s) %s", - ErrIoWrite: "IO Write : (%d, %s) %s", - ErrTablespaceMissing: "Tablespace is missing for table '%-.192s'", - ErrTablespaceExists: "Tablespace for table '%-.192s' exists. Please DISCARD the tablespace before IMPORT.", - ErrTablespaceDiscarded: "Tablespace has been discarded for table '%-.192s'", - ErrInternal: "Internal : %s", - ErrInnodbImport: "ALTER TABLE '%-.192s' IMPORT TABLESPACE failed with error %d : '%s'", - ErrInnodbIndexCorrupt: "Index corrupt: %s", - ErrInvalidYearColumnLength: "Supports only YEAR or YEAR(4) column", - ErrNotValidPassword: "Your password does not satisfy the current policy requirements", - ErrMustChangePassword: "You must SET PASSWORD before executing this statement", - ErrFkNoIndexChild: "Failed to add the foreign key constaint. Missing index for constraint '%s' in the foreign table '%s'", - ErrFkNoIndexParent: "Failed to add the foreign key constaint. Missing index for constraint '%s' in the referenced table '%s'", - ErrFkFailAddSystem: "Failed to add the foreign key constraint '%s' to system tables", - ErrFkCannotOpenParent: "Failed to open the referenced table '%s'", - ErrFkIncorrectOption: "Failed to add the foreign key constraint on table '%s'. Incorrect options in FOREIGN KEY constraint '%s'", - ErrFkDupName: "Duplicate foreign key constraint name '%s'", - ErrPasswordFormat: "The password hash doesn't have the expected format. Check if the correct password algorithm is being used with the PASSWORD() function.", - ErrFkColumnCannotDrop: "Cannot drop column '%-.192s': needed in a foreign key constraint '%-.192s'", - ErrFkColumnCannotDropChild: "Cannot drop column '%-.192s': needed in a foreign key constraint '%-.192s' of table '%-.192s'", - ErrFkColumnNotNull: "Column '%-.192s' cannot be NOT NULL: needed in a foreign key constraint '%-.192s' SET NULL", - ErrDupIndex: "Duplicate index '%-.64s' defined on the table '%-.64s.%-.64s'. This is deprecated and will be disallowed in a future release.", - ErrFkColumnCannotChange: "Cannot change column '%-.192s': used in a foreign key constraint '%-.192s'", - ErrFkColumnCannotChangeChild: "Cannot change column '%-.192s': used in a foreign key constraint '%-.192s' of table '%-.192s'", - ErrFkCannotDeleteParent: "Cannot delete rows from table which is parent in a foreign key constraint '%-.192s' of table '%-.192s'", - ErrMalformedPacket: "Malformed communication packet.", - ErrReadOnlyMode: "Running in read-only mode", - ErrGtidNextTypeUndefinedGroup: "When @@SESSION.GTIDNEXT is set to a GTID, you must explicitly set it again after a COMMIT or ROLLBACK. If you see this error message in the slave SQL thread, it means that a table in the current transaction is transactional on the master and non-transactional on the slave. In a client connection, it means that you executed SET @@SESSION.GTIDNEXT before a transaction and forgot to set @@SESSION.GTIDNEXT to a different identifier or to 'AUTOMATIC' after COMMIT or ROLLBACK. Current @@SESSION.GTIDNEXT is '%s'.", - ErrVariableNotSettableInSp: "The system variable %.200s cannot be set in stored procedures.", - ErrCantSetGtidPurgedWhenGtidModeIsOff: "@@GLOBAL.GTIDPURGED can only be set when @@GLOBAL.GTIDMODE = ON.", - ErrCantSetGtidPurgedWhenGtidExecutedIsNotEmpty: "@@GLOBAL.GTIDPURGED can only be set when @@GLOBAL.GTIDEXECUTED is empty.", - ErrCantSetGtidPurgedWhenOwnedGtidsIsNotEmpty: "@@GLOBAL.GTIDPURGED can only be set when there are no ongoing transactions (not even in other clients).", - ErrGtidPurgedWasChanged: "@@GLOBAL.GTIDPURGED was changed from '%s' to '%s'.", - ErrGtidExecutedWasChanged: "@@GLOBAL.GTIDEXECUTED was changed from '%s' to '%s'.", - ErrBinlogStmtModeAndNoReplTables: "Cannot execute statement: impossible to write to binary log since BINLOGFORMAT = STATEMENT, and both replicated and non replicated tables are written to.", - ErrAlterOperationNotSupported: "%s is not supported for this operation. Try %s.", - ErrAlterOperationNotSupportedReason: "%s is not supported. Reason: %s. Try %s.", - ErrAlterOperationNotSupportedReasonCopy: "COPY algorithm requires a lock", - ErrAlterOperationNotSupportedReasonPartition: "Partition specific operations do not yet support LOCK/ALGORITHM", - ErrAlterOperationNotSupportedReasonFkRename: "Columns participating in a foreign key are renamed", - ErrAlterOperationNotSupportedReasonColumnType: "Cannot change column type INPLACE", - ErrAlterOperationNotSupportedReasonFkCheck: "Adding foreign keys needs foreignKeyChecks=OFF", - ErrAlterOperationNotSupportedReasonIgnore: "Creating unique indexes with IGNORE requires COPY algorithm to remove duplicate rows", - ErrAlterOperationNotSupportedReasonNopk: "Dropping a primary key is not allowed without also adding a new primary key", - ErrAlterOperationNotSupportedReasonAutoinc: "Adding an auto-increment column requires a lock", - ErrAlterOperationNotSupportedReasonHiddenFts: "Cannot replace hidden FTSDOCID with a user-visible one", - ErrAlterOperationNotSupportedReasonChangeFts: "Cannot drop or rename FTSDOCID", - ErrAlterOperationNotSupportedReasonFts: "Fulltext index creation requires a lock", - ErrSQLSlaveSkipCounterNotSettableInGtidMode: "sqlSlaveSkipCounter can not be set when the server is running with @@GLOBAL.GTIDMODE = ON. Instead, for each transaction that you want to skip, generate an empty transaction with the same GTID as the transaction", - ErrDupUnknownInIndex: "Duplicate entry for key '%-.192s'", - ErrIdentCausesTooLongPath: "Long database name and identifier for object resulted in path length exceeding %d characters. Path: '%s'.", - ErrAlterOperationNotSupportedReasonNotNull: "cannot silently convert NULL values, as required in this SQLMODE", - ErrMustChangePasswordLogin: "Your password has expired. To log in you must change it using a client that supports expired passwords.", - ErrRowInWrongPartition: "Found a row in wrong partition %s", - ErrGeneratedColumnFunctionIsNotAllowed: "Expression of generated column '%s' contains a disallowed function.", - ErrUnsupportedAlterInplaceOnVirtualColumn: "INPLACE ADD or DROP of virtual columns cannot be combined with other ALTER TABLE actions.", - ErrWrongFKOptionForGeneratedColumn: "Cannot define foreign key with %s clause on a generated column.", - ErrBadGeneratedColumn: "The value specified for generated column '%s' in table '%s' is not allowed.", - ErrUnsupportedOnGeneratedColumn: "'%s' is not supported for generated columns.", - ErrGeneratedColumnNonPrior: "Generated column can refer only to generated columns defined prior to it.", - ErrDependentByGeneratedColumn: "Column '%s' has a generated column dependency.", - ErrGeneratedColumnRefAutoInc: "Generated column '%s' cannot refer to auto-increment column.", - ErrWarnConflictingHint: "Hint %s is ignored as conflicting/duplicated.", - ErrInvalidFieldSize: "Invalid size for column '%s'.", - ErrInvalidArgumentForLogarithm: "Invalid argument for logarithm", - ErrIncorrectType: "Incorrect type for argument %s in function %s.", - ErrInvalidJSONData: "Invalid JSON data provided to function %s: %s", - ErrInvalidJSONText: "Invalid JSON text: %-.192s", - ErrInvalidJSONPath: "Invalid JSON path expression %s.", - ErrInvalidTypeForJSON: "Invalid data type for JSON data in argument %d to function %s; a JSON string or JSON type is required.", - ErrInvalidJSONPathWildcard: "In this situation, path expressions may not contain the * and ** tokens.", - ErrInvalidJSONContainsPathType: "The second argument can only be either 'one' or 'all'.", - ErrJSONUsedAsKey: "JSON column '%-.192s' cannot be used in key specification.", - ErrJSONDocumentNULLKey: "JSON documents may not contain NULL member names.", - ErrSecureTransportRequired: "Connections using insecure transport are prohibited while --require_secure_transport=ON.", - ErrBadUser: "User %s does not exist.", - ErrUserAlreadyExists: "User %s already exists.", - ErrInvalidJSONPathArrayCell: "A path expression is not a path to a cell in an array.", - ErrInvalidEncryptionOption: "Invalid encryption option.", - ErrWindowNoSuchWindow: "Window name '%s' is not defined.", - ErrWindowCircularityInWindowGraph: "There is a circularity in the window dependency graph.", - ErrWindowNoChildPartitioning: "A window which depends on another cannot define partitioning.", - ErrWindowNoInherentFrame: "Window '%s' has a frame definition, so cannot be referenced by another window.", - ErrWindowNoRedefineOrderBy: "Window '%s' cannot inherit '%s' since both contain an ORDER BY clause.", - ErrWindowFrameStartIllegal: "Window '%s': frame start cannot be UNBOUNDED FOLLOWING.", - ErrWindowFrameEndIllegal: "Window '%s': frame end cannot be UNBOUNDED PRECEDING.", - ErrWindowFrameIllegal: "Window '%s': frame start or end is negative, NULL or of non-integral type", - ErrWindowRangeFrameOrderType: "Window '%s' with RANGE N PRECEDING/FOLLOWING frame requires exactly one ORDER BY expression, of numeric or temporal type", - ErrWindowRangeFrameTemporalType: "Window '%s' with RANGE frame has ORDER BY expression of datetime type. Only INTERVAL bound value allowed.", - ErrWindowRangeFrameNumericType: "Window '%s' with RANGE frame has ORDER BY expression of numeric type, INTERVAL bound value not allowed.", - ErrWindowRangeBoundNotConstant: "Window '%s' has a non-constant frame bound.", - ErrWindowDuplicateName: "Window '%s' is defined twice.", - ErrWindowIllegalOrderBy: "Window '%s': ORDER BY or PARTITION BY uses legacy position indication which is not supported, use expression.", - ErrWindowInvalidWindowFuncUse: "You cannot use the window function '%s' in this context.'", - ErrWindowInvalidWindowFuncAliasUse: "You cannot use the alias '%s' of an expression containing a window function in this context.'", - ErrWindowNestedWindowFuncUseInWindowSpec: "You cannot nest a window function in the specification of window '%s'.", - ErrWindowRowsIntervalUse: "Window '%s': INTERVAL can only be used with RANGE frames.", - ErrWindowNoGroupOrderUnused: "ASC or DESC with GROUP BY isn't allowed with window functions; put ASC or DESC in ORDER BY", - ErrWindowExplainJSON: "To get information about window functions use EXPLAIN FORMAT=JSON", - ErrWindowFunctionIgnoresFrame: "Window function '%s' ignores the frame clause of window '%s' and aggregates over the whole partition", - ErrRoleNotGranted: "%s is is not granted to %s", - ErrMaxExecTimeExceeded: "Query execution was interrupted, max_execution_time exceeded.", - ErrLockAcquireFailAndNoWaitSet: "Statement aborted because lock(s) could not be acquired immediately and NOWAIT is set.", - ErrDataTruncatedFunctionalIndex: "Data truncated for functional index '%s' at row %d", - ErrDataOutOfRangeFunctionalIndex: "Value is out of range for functional index '%s' at row %d", - ErrFunctionalIndexOnJSONOrGeometryFunction: "Cannot create a functional index on a function that returns a JSON or GEOMETRY value", - ErrFunctionalIndexRefAutoIncrement: "Functional index '%s' cannot refer to an auto-increment column", - ErrCannotDropColumnFunctionalIndex: "Cannot drop column '%s' because it is used by a functional index. In order to drop the column, you must remove the functional index", - ErrFunctionalIndexPrimaryKey: "The primary key cannot be a functional index", - ErrFunctionalIndexOnLob: "Cannot create a functional index on an expression that returns a BLOB or TEXT. Please consider using CAST", - ErrFunctionalIndexFunctionIsNotAllowed: "Expression of functional index '%s' contains a disallowed function", - ErrFulltextFunctionalIndex: "Fulltext functional index is not supported", - ErrSpatialFunctionalIndex: "Spatial functional index is not supported", - ErrWrongKeyColumnFunctionalIndex: "The used storage engine cannot index the expression '%s'", - ErrFunctionalIndexOnField: "Functional index on a column is not supported. Consider using a regular index instead", - ErrFKIncompatibleColumns: "Referencing column '%s' in foreign key constraint '%s' are incompatible", - ErrFunctionalIndexRowValueIsNotAllowed: "Expression of functional index '%s' cannot refer to a row value", - ErrDependentByFunctionalIndex: "Column '%s' has a functional index dependency and cannot be dropped or renamed", - ErrInvalidJSONValueForFuncIndex: "Invalid JSON value for CAST for functional index '%s'", - ErrJSONValueOutOfRangeForFuncIndex: "Out of range JSON value for CAST for functional index '%s'", - ErrFunctionalIndexDataIsTooLong: "Data too long for functional index '%s'", - ErrFunctionalIndexNotApplicable: "Cannot use functional index '%s' due to type or collation conversion", +// Note: all ErrMessage to be added should be considered about the log redaction +// by setting the suitable configuration in the second argument of mysql.Message. +// See https://github.com/pingcap/tidb/blob/master/errno/logredaction.md +var MySQLErrName = map[uint16]*mysql.ErrMessage{ + ErrHashchk: mysql.Message("hashchk", nil), + ErrNisamchk: mysql.Message("isamchk", nil), + ErrNo: mysql.Message("NO", nil), + ErrYes: mysql.Message("YES", nil), + ErrCantCreateFile: mysql.Message("Can't create file '%-.200s' (errno: %d - %s)", nil), + ErrCantCreateTable: mysql.Message("Can't create table '%-.200s' (errno: %d)", nil), + ErrCantCreateDB: mysql.Message("Can't create database '%-.192s' (errno: %d)", nil), + ErrDBCreateExists: mysql.Message("Can't create database '%-.192s'; database exists", nil), + ErrDBDropExists: mysql.Message("Can't drop database '%-.192s'; database doesn't exist", nil), + ErrDBDropDelete: mysql.Message("Error dropping database (can't delete '%-.192s', errno: %d)", nil), + ErrDBDropRmdir: mysql.Message("Error dropping database (can't rmdir '%-.192s', errno: %d)", nil), + ErrCantDeleteFile: mysql.Message("Error on delete of '%-.192s' (errno: %d - %s)", nil), + ErrCantFindSystemRec: mysql.Message("Can't read record in system table", nil), + ErrCantGetStat: mysql.Message("Can't get status of '%-.200s' (errno: %d - %s)", nil), + ErrCantGetWd: mysql.Message("Can't get working directory (errno: %d - %s)", nil), + ErrCantLock: mysql.Message("Can't lock file (errno: %d - %s)", nil), + ErrCantOpenFile: mysql.Message("Can't open file: '%-.200s' (errno: %d - %s)", nil), + ErrFileNotFound: mysql.Message("Can't find file: '%-.200s' (errno: %d - %s)", nil), + ErrCantReadDir: mysql.Message("Can't read dir of '%-.192s' (errno: %d - %s)", nil), + ErrCantSetWd: mysql.Message("Can't change dir to '%-.192s' (errno: %d - %s)", nil), + ErrCheckread: mysql.Message("Record has changed since last read in table '%-.192s'", nil), + ErrDiskFull: mysql.Message("Disk full (%s); waiting for someone to free some space... (errno: %d - %s)", nil), + ErrDupKey: mysql.Message("Can't write; duplicate key in table '%-.192s'", nil), + ErrErrorOnClose: mysql.Message("Error on close of '%-.192s' (errno: %d - %s)", nil), + ErrErrorOnRead: mysql.Message("Error reading file '%-.200s' (errno: %d - %s)", nil), + ErrErrorOnRename: mysql.Message("Error on rename of '%-.210s' to '%-.210s' (errno: %d - %s)", nil), + ErrErrorOnWrite: mysql.Message("Error writing file '%-.200s' (errno: %d - %s)", nil), + ErrFileUsed: mysql.Message("'%-.192s' is locked against change", nil), + ErrFilsortAbort: mysql.Message("Sort aborted", nil), + ErrFormNotFound: mysql.Message("View '%-.192s' doesn't exist for '%-.192s'", nil), + ErrGetErrno: mysql.Message("Got error %d from storage engine", nil), + ErrIllegalHa: mysql.Message("Table storage engine for '%-.192s' doesn't have this option", nil), + ErrKeyNotFound: mysql.Message("Can't find record in '%-.192s'", nil), + ErrNotFormFile: mysql.Message("Incorrect information in file: '%-.200s'", nil), + ErrNotKeyFile: mysql.Message("Incorrect key file for table '%-.200s'; try to repair it", nil), + ErrOldKeyFile: mysql.Message("Old key file for table '%-.192s'; repair it!", nil), + ErrOpenAsReadonly: mysql.Message("Table '%-.192s' is read only", nil), + ErrOutofMemory: mysql.Message("Out of memory; restart server and try again (needed %d bytes)", nil), + ErrOutOfSortMemory: mysql.Message("Out of sort memory, consider increasing server sort buffer size", nil), + ErrUnexpectedEOF: mysql.Message("Unexpected EOF found when reading file '%-.192s' (errno: %d - %s)", nil), + ErrConCount: mysql.Message("Too many connections", nil), + ErrOutOfResources: mysql.Message("Out of memory; check if mysqld or some other process uses all available memory; if not, you may have to use 'ulimit' to allow mysqld to use more memory or you can add more swap space", nil), + ErrBadHost: mysql.Message("Can't get hostname for your address", nil), + ErrHandshake: mysql.Message("Bad handshake", nil), + ErrDBaccessDenied: mysql.Message("Access denied for user '%-.48s'@'%-.64s' to database '%-.192s'", nil), + ErrAccessDenied: mysql.Message("Access denied for user '%-.48s'@'%-.64s' (using password: %s)", nil), + ErrNoDB: mysql.Message("No database selected", nil), + ErrUnknownCom: mysql.Message("Unknown command", nil), + ErrBadNull: mysql.Message("Column '%-.192s' cannot be null", nil), + ErrBadDB: mysql.Message("Unknown database '%-.192s'", nil), + ErrTableExists: mysql.Message("Table '%-.192s' already exists", nil), + ErrBadTable: mysql.Message("Unknown table '%-.100s'", nil), + ErrNonUniq: mysql.Message("Column '%-.192s' in %-.192s is ambiguous", nil), + ErrServerShutdown: mysql.Message("Server shutdown in progress", nil), + ErrBadField: mysql.Message("Unknown column '%-.192s' in '%-.192s'", nil), + ErrFieldNotInGroupBy: mysql.Message("Expression #%d of %s is not in GROUP BY clause and contains nonaggregated column '%s' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by", nil), + ErrWrongGroupField: mysql.Message("Can't group on '%-.192s'", nil), + ErrWrongSumSelect: mysql.Message("Statement has sum functions and columns in same statement", nil), + ErrWrongValueCount: mysql.Message("Column count doesn't match value count", nil), + ErrTooLongIdent: mysql.Message("Identifier name '%-.100s' is too long", nil), + ErrDupFieldName: mysql.Message("Duplicate column name '%-.192s'", nil), + ErrDupKeyName: mysql.Message("Duplicate key name '%-.192s'", nil), + ErrDupEntry: mysql.Message("Duplicate entry '%-.64s' for key '%-.192s'", []int{0, 1}), + ErrWrongFieldSpec: mysql.Message("Incorrect column specifier for column '%-.192s'", nil), + ErrParse: mysql.Message("%s %s", nil), + ErrEmptyQuery: mysql.Message("Query was empty", nil), + ErrNonuniqTable: mysql.Message("Not unique table/alias: '%-.192s'", nil), + ErrInvalidDefault: mysql.Message("Invalid default value for '%-.192s'", nil), + ErrMultiplePriKey: mysql.Message("Multiple primary key defined", nil), + ErrTooManyKeys: mysql.Message("Too many keys specified; max %d keys allowed", nil), + ErrTooManyKeyParts: mysql.Message("Too many key parts specified; max %d parts allowed", nil), + ErrTooLongKey: mysql.Message("Specified key was too long; max key length is %d bytes", nil), + ErrKeyColumnDoesNotExits: mysql.Message("Key column '%-.192s' doesn't exist in table", nil), + ErrBlobUsedAsKey: mysql.Message("BLOB column '%-.192s' can't be used in key specification with the used table type", nil), + ErrTooBigFieldlength: mysql.Message("Column length too big for column '%-.192s' (max = %d); use BLOB or TEXT instead", nil), + ErrWrongAutoKey: mysql.Message("Incorrect table definition; there can be only one auto column and it must be defined as a key", nil), + ErrReady: mysql.Message("%s: ready for connections.\nVersion: '%s' socket: '%s' port: %d", nil), + ErrNormalShutdown: mysql.Message("%s: Normal shutdown\n", nil), + ErrGotSignal: mysql.Message("%s: Got signal %d. Aborting!\n", nil), + ErrShutdownComplete: mysql.Message("%s: Shutdown complete\n", nil), + ErrForcingClose: mysql.Message("%s: Forcing close of thread %d user: '%-.48s'\n", nil), + ErrIpsock: mysql.Message("Can't create IP socket", nil), + ErrNoSuchIndex: mysql.Message("Table '%-.192s' has no index like the one used in CREATE INDEX; recreate the table", nil), + ErrWrongFieldTerminators: mysql.Message("Field separator argument is not what is expected; check the manual", nil), + ErrBlobsAndNoTerminated: mysql.Message("You can't use fixed rowlength with BLOBs; please use 'fields terminated by'", nil), + ErrTextFileNotReadable: mysql.Message("The file '%-.128s' must be in the database directory or be readable by all", nil), + ErrFileExists: mysql.Message("File '%-.200s' already exists", nil), + ErrLoadInfo: mysql.Message("Records: %d Deleted: %d Skipped: %d Warnings: %d", nil), + ErrAlterInfo: mysql.Message("Records: %d Duplicates: %d", nil), + ErrWrongSubKey: mysql.Message("Incorrect prefix key; the used key part isn't a string, the used length is longer than the key part, or the storage engine doesn't support unique prefix keys", nil), + ErrCantRemoveAllFields: mysql.Message("You can't delete all columns with ALTER TABLE; use DROP TABLE instead", nil), + ErrCantDropFieldOrKey: mysql.Message("Can't DROP '%-.192s'; check that column/key exists", nil), + ErrInsertInfo: mysql.Message("Records: %d Duplicates: %d Warnings: %d", nil), + ErrUpdateTableUsed: mysql.Message("You can't specify target table '%-.192s' for update in FROM clause", nil), + ErrNoSuchThread: mysql.Message("Unknown thread id: %d", nil), + ErrKillDenied: mysql.Message("You are not owner of thread %d", nil), + ErrNoTablesUsed: mysql.Message("No tables used", nil), + ErrTooBigSet: mysql.Message("Too many strings for column %-.192s and SET", nil), + ErrNoUniqueLogFile: mysql.Message("Can't generate a unique log-filename %-.200s.(1-999)\n", nil), + ErrTableNotLockedForWrite: mysql.Message("Table '%-.192s' was locked with a READ lock and can't be updated", nil), + ErrTableNotLocked: mysql.Message("Table '%-.192s' was not locked with LOCK TABLES", nil), + ErrBlobCantHaveDefault: mysql.Message("BLOB/TEXT/JSON column '%-.192s' can't have a default value", nil), + ErrWrongDBName: mysql.Message("Incorrect database name '%-.100s'", nil), + ErrWrongTableName: mysql.Message("Incorrect table name '%-.100s'", nil), + ErrTooBigSelect: mysql.Message("The SELECT would examine more than MAXJOINSIZE rows; check your WHERE and use SET SQLBIGSELECTS=1 or SET MAXJOINSIZE=# if the SELECT is okay", nil), + ErrUnknown: mysql.Message("Unknown error", nil), + ErrUnknownProcedure: mysql.Message("Unknown procedure '%-.192s'", nil), + ErrWrongParamcountToProcedure: mysql.Message("Incorrect parameter count to procedure '%-.192s'", nil), + ErrWrongParametersToProcedure: mysql.Message("Incorrect parameters to procedure '%-.192s'", nil), + ErrUnknownTable: mysql.Message("Unknown table '%-.192s' in %-.32s", nil), + ErrFieldSpecifiedTwice: mysql.Message("Column '%-.192s' specified twice", nil), + ErrInvalidGroupFuncUse: mysql.Message("Invalid use of group function", nil), + ErrUnsupportedExtension: mysql.Message("Table '%-.192s' uses an extension that doesn't exist in this MySQL version", nil), + ErrTableMustHaveColumns: mysql.Message("A table must have at least 1 column", nil), + ErrRecordFileFull: mysql.Message("The table '%-.192s' is full", nil), + ErrUnknownCharacterSet: mysql.Message("Unknown character set: '%-.64s'", nil), + ErrTooManyTables: mysql.Message("Too many tables; MySQL can only use %d tables in a join", nil), + ErrTooManyFields: mysql.Message("Too many columns", nil), + ErrTooBigRowsize: mysql.Message("Row size too large. The maximum row size for the used table type, not counting BLOBs, is %d. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs", nil), + ErrStackOverrun: mysql.Message("Thread stack overrun: Used: %d of a %d stack. Use 'mysqld --threadStack=#' to specify a bigger stack if needed", nil), + ErrWrongOuterJoin: mysql.Message("Cross dependency found in OUTER JOIN; examine your ON conditions", nil), + ErrNullColumnInIndex: mysql.Message("Table handler doesn't support NULL in given index. Please change column '%-.192s' to be NOT NULL or use another handler", nil), + ErrCantFindUdf: mysql.Message("Can't load function '%-.192s'", nil), + ErrCantInitializeUdf: mysql.Message("Can't initialize function '%-.192s'; %-.80s", nil), + ErrUdfNoPaths: mysql.Message("No paths allowed for shared library", nil), + ErrUdfExists: mysql.Message("Function '%-.192s' already exists", nil), + ErrCantOpenLibrary: mysql.Message("Can't open shared library '%-.192s' (errno: %d %-.128s)", nil), + ErrCantFindDlEntry: mysql.Message("Can't find symbol '%-.128s' in library", nil), + ErrFunctionNotDefined: mysql.Message("Function '%-.192s' is not defined", nil), + ErrHostIsBlocked: mysql.Message("Host '%-.64s' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'", nil), + ErrHostNotPrivileged: mysql.Message("Host '%-.64s' is not allowed to connect to this MySQL server", nil), + ErrPasswordAnonymousUser: mysql.Message("You are using MySQL as an anonymous user and anonymous users are not allowed to change passwords", nil), + ErrPasswordNotAllowed: mysql.Message("You must have privileges to update tables in the mysql database to be able to change passwords for others", nil), + ErrPasswordNoMatch: mysql.Message("Can't find any matching row in the user table", nil), + ErrUpdateInfo: mysql.Message("Rows matched: %d Changed: %d Warnings: %d", nil), + ErrCantCreateThread: mysql.Message("Can't create a new thread (errno %d); if you are not out of available memory, you can consult the manual for a possible OS-dependent bug", nil), + ErrWrongValueCountOnRow: mysql.Message("Column count doesn't match value count at row %d", nil), + ErrCantReopenTable: mysql.Message("Can't reopen table: '%-.192s'", nil), + ErrInvalidUseOfNull: mysql.Message("Invalid use of NULL value", nil), + ErrRegexp: mysql.Message("Got error '%-.64s' from regexp", nil), + ErrMixOfGroupFuncAndFields: mysql.Message("Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause", nil), + ErrNonexistingGrant: mysql.Message("There is no such grant defined for user '%-.48s' on host '%-.64s'", nil), + ErrTableaccessDenied: mysql.Message("%-.128s command denied to user '%-.48s'@'%-.64s' for table '%-.64s'", nil), + ErrColumnaccessDenied: mysql.Message("%-.16s command denied to user '%-.48s'@'%-.64s' for column '%-.192s' in table '%-.192s'", nil), + ErrIllegalGrantForTable: mysql.Message("Illegal GRANT/REVOKE command; please consult the manual to see which privileges can be used", nil), + ErrGrantWrongHostOrUser: mysql.Message("The host or user argument to GRANT is too long", nil), + ErrNoSuchTable: mysql.Message("Table '%-.192s.%-.192s' doesn't exist", nil), + ErrNonexistingTableGrant: mysql.Message("There is no such grant defined for user '%-.48s' on host '%-.64s' on table '%-.192s'", nil), + ErrNotAllowedCommand: mysql.Message("The used command is not allowed with this MySQL version", nil), + ErrSyntax: mysql.Message("You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use", nil), + ErrDelayedCantChangeLock: mysql.Message("Delayed insert thread couldn't get requested lock for table %-.192s", nil), + ErrTooManyDelayedThreads: mysql.Message("Too many delayed threads in use", nil), + ErrAbortingConnection: mysql.Message("Aborted connection %d to db: '%-.192s' user: '%-.48s' (%-.64s)", nil), + ErrNetPacketTooLarge: mysql.Message("Got a packet bigger than 'maxAllowedPacket' bytes", nil), + ErrNetReadErrorFromPipe: mysql.Message("Got a read error from the connection pipe", nil), + ErrNetFcntl: mysql.Message("Got an error from fcntl()", nil), + ErrNetPacketsOutOfOrder: mysql.Message("Got packets out of order", nil), + ErrNetUncompress: mysql.Message("Couldn't uncompress communication packet", nil), + ErrNetRead: mysql.Message("Got an error reading communication packets", nil), + ErrNetReadInterrupted: mysql.Message("Got timeout reading communication packets", nil), + ErrNetErrorOnWrite: mysql.Message("Got an error writing communication packets", nil), + ErrNetWriteInterrupted: mysql.Message("Got timeout writing communication packets", nil), + ErrTooLongString: mysql.Message("Result string is longer than 'maxAllowedPacket' bytes", nil), + ErrTableCantHandleBlob: mysql.Message("The used table type doesn't support BLOB/TEXT columns", nil), + ErrTableCantHandleAutoIncrement: mysql.Message("The used table type doesn't support AUTOINCREMENT columns", nil), + ErrDelayedInsertTableLocked: mysql.Message("INSERT DELAYED can't be used with table '%-.192s' because it is locked with LOCK TABLES", nil), + ErrWrongColumnName: mysql.Message("Incorrect column name '%-.100s'", nil), + ErrWrongKeyColumn: mysql.Message("The used storage engine can't index column '%-.192s'", nil), + ErrWrongMrgTable: mysql.Message("Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist", nil), + ErrDupUnique: mysql.Message("Can't write, because of unique constraint, to table '%-.192s'", nil), + ErrBlobKeyWithoutLength: mysql.Message("BLOB/TEXT column '%-.192s' used in key specification without a key length", nil), + ErrPrimaryCantHaveNull: mysql.Message("All parts of a PRIMARY KEY must be NOT NULL; if you need NULL in a key, use UNIQUE instead", nil), + ErrTooManyRows: mysql.Message("Result consisted of more than one row", nil), + ErrRequiresPrimaryKey: mysql.Message("This table type requires a primary key", nil), + ErrNoRaidCompiled: mysql.Message("This version of MySQL is not compiled with RAID support", nil), + ErrUpdateWithoutKeyInSafeMode: mysql.Message("You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column", nil), + ErrKeyDoesNotExist: mysql.Message("Key '%-.192s' doesn't exist in table '%-.192s'", nil), + ErrCheckNoSuchTable: mysql.Message("Can't open table", nil), + ErrCheckNotImplemented: mysql.Message("The storage engine for the table doesn't support %s", nil), + ErrCantDoThisDuringAnTransaction: mysql.Message("You are not allowed to execute this command in a transaction", nil), + ErrErrorDuringCommit: mysql.Message("Got error %d during COMMIT", nil), + ErrErrorDuringRollback: mysql.Message("Got error %d during ROLLBACK", nil), + ErrErrorDuringFlushLogs: mysql.Message("Got error %d during FLUSHLOGS", nil), + ErrErrorDuringCheckpoint: mysql.Message("Got error %d during CHECKPOINT", nil), + ErrNewAbortingConnection: mysql.Message("Aborted connection %d to db: '%-.192s' user: '%-.48s' host: '%-.64s' (%-.64s)", nil), + ErrDumpNotImplemented: mysql.Message("The storage engine for the table does not support binary table dump", nil), + ErrFlushMasterBinlogClosed: mysql.Message("Binlog closed, cannot RESET MASTER", nil), + ErrIndexRebuild: mysql.Message("Failed rebuilding the index of dumped table '%-.192s'", nil), + ErrMaster: mysql.Message("Error from master: '%-.64s'", nil), + ErrMasterNetRead: mysql.Message("Net error reading from master", nil), + ErrMasterNetWrite: mysql.Message("Net error writing to master", nil), + ErrFtMatchingKeyNotFound: mysql.Message("Can't find FULLTEXT index matching the column list", nil), + ErrLockOrActiveTransaction: mysql.Message("Can't execute the given command because you have active locked tables or an active transaction", nil), + ErrUnknownSystemVariable: mysql.Message("Unknown system variable '%-.64s'", nil), + ErrCrashedOnUsage: mysql.Message("Table '%-.192s' is marked as crashed and should be repaired", nil), + ErrCrashedOnRepair: mysql.Message("Table '%-.192s' is marked as crashed and last (automatic?) repair failed", nil), + ErrWarningNotCompleteRollback: mysql.Message("Some non-transactional changed tables couldn't be rolled back", nil), + ErrTransCacheFull: mysql.Message("Multi-statement transaction required more than 'maxBinlogCacheSize' bytes of storage; increase this mysqld variable and try again", nil), + ErrSlaveMustStop: mysql.Message("This operation cannot be performed with a running slave; run STOP SLAVE first", nil), + ErrSlaveNotRunning: mysql.Message("This operation requires a running slave; configure slave and do START SLAVE", nil), + ErrBadSlave: mysql.Message("The server is not configured as slave; fix in config file or with CHANGE MASTER TO", nil), + ErrMasterInfo: mysql.Message("Could not initialize master info structure; more error messages can be found in the MySQL error log", nil), + ErrSlaveThread: mysql.Message("Could not create slave thread; check system resources", nil), + ErrTooManyUserConnections: mysql.Message("User %-.64s already has more than 'maxUserConnections' active connections", nil), + ErrSetConstantsOnly: mysql.Message("You may only use constant expressions with SET", nil), + ErrLockWaitTimeout: mysql.Message("Lock wait timeout exceeded; try restarting transaction", nil), + ErrLockTableFull: mysql.Message("The total number of locks exceeds the lock table size", nil), + ErrReadOnlyTransaction: mysql.Message("Update locks cannot be acquired during a READ UNCOMMITTED transaction", nil), + ErrDropDBWithReadLock: mysql.Message("DROP DATABASE not allowed while thread is holding global read lock", nil), + ErrCreateDBWithReadLock: mysql.Message("CREATE DATABASE not allowed while thread is holding global read lock", nil), + ErrWrongArguments: mysql.Message("Incorrect arguments to %s", nil), + ErrNoPermissionToCreateUser: mysql.Message("'%-.48s'@'%-.64s' is not allowed to create new users", nil), + ErrUnionTablesInDifferentDir: mysql.Message("Incorrect table definition; all MERGE tables must be in the same database", nil), + ErrLockDeadlock: mysql.Message("Deadlock found when trying to get lock; try restarting transaction", nil), + ErrTableCantHandleFt: mysql.Message("The used table type doesn't support FULLTEXT indexes", nil), + ErrCannotAddForeign: mysql.Message("Cannot add foreign key constraint", nil), + ErrNoReferencedRow: mysql.Message("Cannot add or update a child row: a foreign key constraint fails", nil), + ErrRowIsReferenced: mysql.Message("Cannot delete or update a parent row: a foreign key constraint fails", nil), + ErrConnectToMaster: mysql.Message("Error connecting to master: %-.128s", nil), + ErrQueryOnMaster: mysql.Message("Error running query on master: %-.128s", nil), + ErrErrorWhenExecutingCommand: mysql.Message("Error when executing command %s: %-.128s", nil), + ErrWrongUsage: mysql.Message("Incorrect usage of %s and %s", nil), + ErrWrongNumberOfColumnsInSelect: mysql.Message("The used SELECT statements have a different number of columns", nil), + ErrCantUpdateWithReadlock: mysql.Message("Can't execute the query because you have a conflicting read lock", nil), + ErrMixingNotAllowed: mysql.Message("Mixing of transactional and non-transactional tables is disabled", nil), + ErrDupArgument: mysql.Message("Option '%s' used twice in statement", nil), + ErrUserLimitReached: mysql.Message("User '%-.64s' has exceeded the '%s' resource (current value: %d)", nil), + ErrSpecificAccessDenied: mysql.Message("Access denied; you need (at least one of) the %-.128s privilege(s) for this operation", nil), + ErrLocalVariable: mysql.Message("Variable '%-.64s' is a SESSION variable and can't be used with SET GLOBAL", nil), + ErrGlobalVariable: mysql.Message("Variable '%-.64s' is a GLOBAL variable and should be set with SET GLOBAL", nil), + ErrNoDefault: mysql.Message("Variable '%-.64s' doesn't have a default value", nil), + ErrWrongValueForVar: mysql.Message("Variable '%-.64s' can't be set to the value of '%-.200s'", nil), + ErrWrongTypeForVar: mysql.Message("Incorrect argument type to variable '%-.64s'", nil), + ErrVarCantBeRead: mysql.Message("Variable '%-.64s' can only be set, not read", nil), + ErrCantUseOptionHere: mysql.Message("Incorrect usage/placement of '%s'", nil), + ErrNotSupportedYet: mysql.Message("This version of TiDB doesn't yet support '%s'", nil), + ErrMasterFatalErrorReadingBinlog: mysql.Message("Got fatal error %d from master when reading data from binary log: '%-.320s'", nil), + ErrSlaveIgnoredTable: mysql.Message("Slave SQL thread ignored the query because of replicate-*-table rules", nil), + ErrIncorrectGlobalLocalVar: mysql.Message("Variable '%-.192s' is a %s variable", nil), + ErrWrongFkDef: mysql.Message("Incorrect foreign key definition for '%-.192s': %s", nil), + ErrKeyRefDoNotMatchTableRef: mysql.Message("Key reference and table reference don't match", nil), + ErrOperandColumns: mysql.Message("Operand should contain %d column(s)", nil), + ErrSubqueryNo1Row: mysql.Message("Subquery returns more than 1 row", nil), + ErrUnknownStmtHandler: mysql.Message("Unknown prepared statement handler (%.*s) given to %s", nil), + ErrCorruptHelpDB: mysql.Message("Help database is corrupt or does not exist", nil), + ErrCyclicReference: mysql.Message("Cyclic reference on subqueries", nil), + ErrAutoConvert: mysql.Message("Converting column '%s' from %s to %s", nil), + ErrIllegalReference: mysql.Message("Reference '%-.64s' not supported (%s)", nil), + ErrDerivedMustHaveAlias: mysql.Message("Every derived table must have its own alias", nil), + ErrSelectReduced: mysql.Message("Select %d was reduced during optimization", nil), + ErrTablenameNotAllowedHere: mysql.Message("Table '%s' from one of the %ss cannot be used in %s", nil), + ErrNotSupportedAuthMode: mysql.Message("Client does not support authentication protocol requested by server; consider upgrading MySQL client", nil), + ErrSpatialCantHaveNull: mysql.Message("All parts of a SPATIAL index must be NOT NULL", nil), + ErrCollationCharsetMismatch: mysql.Message("COLLATION '%s' is not valid for CHARACTER SET '%s'", nil), + ErrSlaveWasRunning: mysql.Message("Slave is already running", nil), + ErrSlaveWasNotRunning: mysql.Message("Slave already has been stopped", nil), + ErrTooBigForUncompress: mysql.Message("Uncompressed data size too large; the maximum size is %d (probably, length of uncompressed data was corrupted)", nil), + ErrZlibZMem: mysql.Message("ZLIB: Not enough memory", nil), + ErrZlibZBuf: mysql.Message("ZLIB: Not enough room in the output buffer (probably, length of uncompressed data was corrupted)", nil), + ErrZlibZData: mysql.Message("ZLIB: Input data corrupted", nil), + ErrCutValueGroupConcat: mysql.Message("Some rows were cut by GROUPCONCAT(%s)", nil), + ErrWarnTooFewRecords: mysql.Message("Row %d doesn't contain data for all columns", nil), + ErrWarnTooManyRecords: mysql.Message("Row %d was truncated; it contained more data than there were input columns", nil), + ErrWarnNullToNotnull: mysql.Message("Column set to default value; NULL supplied to NOT NULL column '%s' at row %d", nil), + ErrWarnDataOutOfRange: mysql.Message("Out of range value for column '%s' at row %d", nil), + WarnDataTruncated: mysql.Message("Data truncated for column '%s' at row %d", nil), + ErrWarnUsingOtherHandler: mysql.Message("Using storage engine %s for table '%s'", nil), + ErrCantAggregate2collations: mysql.Message("Illegal mix of collations (%s,%s) and (%s,%s) for operation '%s'", nil), + ErrDropUser: mysql.Message("Cannot drop one or more of the requested users", nil), + ErrRevokeGrants: mysql.Message("Can't revoke all privileges for one or more of the requested users", nil), + ErrCantAggregate3collations: mysql.Message("Illegal mix of collations (%s,%s), (%s,%s), (%s,%s) for operation '%s'", nil), + ErrCantAggregateNcollations: mysql.Message("Illegal mix of collations for operation '%s'", nil), + ErrVariableIsNotStruct: mysql.Message("Variable '%-.64s' is not a variable component (can't be used as XXXX.variableName)", nil), + ErrUnknownCollation: mysql.Message("Unknown collation: '%-.64s'", nil), + ErrSlaveIgnoredSslParams: mysql.Message("SSL parameters in CHANGE MASTER are ignored because this MySQL slave was compiled without SSL support; they can be used later if MySQL slave with SSL is started", nil), + ErrServerIsInSecureAuthMode: mysql.Message("Server is running in --secure-auth mode, but '%s'@'%s' has a password in the old format; please change the password to the new format", nil), + ErrWarnFieldResolved: mysql.Message("Field or reference '%-.192s%s%-.192s%s%-.192s' of SELECT #%d was resolved in SELECT #%d", nil), + ErrBadSlaveUntilCond: mysql.Message("Incorrect parameter or combination of parameters for START SLAVE UNTIL", nil), + ErrMissingSkipSlave: mysql.Message("It is recommended to use --skip-slave-start when doing step-by-step replication with START SLAVE UNTIL; otherwise, you will get problems if you get an unexpected slave's mysqld restart", nil), + ErrUntilCondIgnored: mysql.Message("SQL thread is not to be started so UNTIL options are ignored", nil), + ErrWrongNameForIndex: mysql.Message("Incorrect index name '%-.100s'", nil), + ErrWrongNameForCatalog: mysql.Message("Incorrect catalog name '%-.100s'", nil), + ErrWarnQcResize: mysql.Message("Query cache failed to set size %d; new query cache size is %d", nil), + ErrBadFtColumn: mysql.Message("Column '%-.192s' cannot be part of FULLTEXT index", nil), + ErrUnknownKeyCache: mysql.Message("Unknown key cache '%-.100s'", nil), + ErrWarnHostnameWontWork: mysql.Message("MySQL is started in --skip-name-resolve mode; you must restart it without this switch for this grant to work", nil), + ErrUnknownStorageEngine: mysql.Message("Unknown storage engine '%s'", nil), + ErrWarnDeprecatedSyntax: mysql.Message("'%s' is deprecated and will be removed in a future release. Please use %s instead", nil), + ErrNonUpdatableTable: mysql.Message("The target table %-.100s of the %s is not updatable", nil), + ErrFeatureDisabled: mysql.Message("The '%s' feature is disabled; you need MySQL built with '%s' to have it working", nil), + ErrOptionPreventsStatement: mysql.Message("The MySQL server is running with the %s option so it cannot execute this statement", nil), + ErrDuplicatedValueInType: mysql.Message("Column '%-.100s' has duplicated value '%-.64s' in %s", nil), + ErrTruncatedWrongValue: mysql.Message("Truncated incorrect %-.64s value: '%-.128s'", nil), + ErrTooMuchAutoTimestampCols: mysql.Message("Incorrect table definition; there can be only one TIMESTAMP column with CURRENTTIMESTAMP in DEFAULT or ON UPDATE clause", nil), + ErrInvalidOnUpdate: mysql.Message("Invalid ON UPDATE clause for '%-.192s' column", nil), + ErrUnsupportedPs: mysql.Message("This command is not supported in the prepared statement protocol yet", nil), + ErrGetErrmsg: mysql.Message("Got error %d '%-.100s' from %s", nil), + ErrGetTemporaryErrmsg: mysql.Message("Got temporary error %d '%-.100s' from %s", nil), + ErrUnknownTimeZone: mysql.Message("Unknown or incorrect time zone: '%-.64s'", nil), + ErrWarnInvalidTimestamp: mysql.Message("Invalid TIMESTAMP value in column '%s' at row %d", nil), + ErrInvalidCharacterString: mysql.Message("Invalid %s character string: '%.64s'", nil), + ErrWarnAllowedPacketOverflowed: mysql.Message("Result of %s() was larger than max_allowed_packet (%d) - truncated", nil), + ErrConflictingDeclarations: mysql.Message("Conflicting declarations: '%s%s' and '%s%s'", nil), + ErrSpNoRecursiveCreate: mysql.Message("Can't create a %s from within another stored routine", nil), + ErrSpAlreadyExists: mysql.Message("%s %s already exists", nil), + ErrSpDoesNotExist: mysql.Message("%s %s does not exist", nil), + ErrSpDropFailed: mysql.Message("Failed to DROP %s %s", nil), + ErrSpStoreFailed: mysql.Message("Failed to CREATE %s %s", nil), + ErrSpLilabelMismatch: mysql.Message("%s with no matching label: %s", nil), + ErrSpLabelRedefine: mysql.Message("Redefining label %s", nil), + ErrSpLabelMismatch: mysql.Message("End-label %s without match", nil), + ErrSpUninitVar: mysql.Message("Referring to uninitialized variable %s", nil), + ErrSpBadselect: mysql.Message("PROCEDURE %s can't return a result set in the given context", nil), + ErrSpBadreturn: mysql.Message("RETURN is only allowed in a FUNCTION", nil), + ErrSpBadstatement: mysql.Message("%s is not allowed in stored procedures", nil), + ErrUpdateLogDeprecatedIgnored: mysql.Message("The update log is deprecated and replaced by the binary log; SET SQLLOGUPDATE has been ignored.", nil), + ErrUpdateLogDeprecatedTranslated: mysql.Message("The update log is deprecated and replaced by the binary log; SET SQLLOGUPDATE has been translated to SET SQLLOGBIN.", nil), + ErrQueryInterrupted: mysql.Message("Query execution was interrupted", nil), + ErrSpWrongNoOfArgs: mysql.Message("Incorrect number of arguments for %s %s; expected %d, got %d", nil), + ErrSpCondMismatch: mysql.Message("Undefined CONDITION: %s", nil), + ErrSpNoreturn: mysql.Message("No RETURN found in FUNCTION %s", nil), + ErrSpNoreturnend: mysql.Message("FUNCTION %s ended without RETURN", nil), + ErrSpBadCursorQuery: mysql.Message("Cursor statement must be a SELECT", nil), + ErrSpBadCursorSelect: mysql.Message("Cursor SELECT must not have INTO", nil), + ErrSpCursorMismatch: mysql.Message("Undefined CURSOR: %s", nil), + ErrSpCursorAlreadyOpen: mysql.Message("Cursor is already open", nil), + ErrSpCursorNotOpen: mysql.Message("Cursor is not open", nil), + ErrSpUndeclaredVar: mysql.Message("Undeclared variable: %s", nil), + ErrSpWrongNoOfFetchArgs: mysql.Message("Incorrect number of FETCH variables", nil), + ErrSpFetchNoData: mysql.Message("No data - zero rows fetched, selected, or processed", nil), + ErrSpDupParam: mysql.Message("Duplicate parameter: %s", nil), + ErrSpDupVar: mysql.Message("Duplicate variable: %s", nil), + ErrSpDupCond: mysql.Message("Duplicate condition: %s", nil), + ErrSpDupCurs: mysql.Message("Duplicate cursor: %s", nil), + ErrSpCantAlter: mysql.Message("Failed to ALTER %s %s", nil), + ErrSpSubselectNyi: mysql.Message("Subquery value not supported", nil), + ErrStmtNotAllowedInSfOrTrg: mysql.Message("%s is not allowed in stored function or trigger", nil), + ErrSpVarcondAfterCurshndlr: mysql.Message("Variable or condition declaration after cursor or handler declaration", nil), + ErrSpCursorAfterHandler: mysql.Message("Cursor declaration after handler declaration", nil), + ErrSpCaseNotFound: mysql.Message("Case not found for CASE statement", nil), + ErrFparserTooBigFile: mysql.Message("Configuration file '%-.192s' is too big", nil), + ErrFparserBadHeader: mysql.Message("Malformed file type header in file '%-.192s'", nil), + ErrFparserEOFInComment: mysql.Message("Unexpected end of file while parsing comment '%-.200s'", nil), + ErrFparserErrorInParameter: mysql.Message("Error while parsing parameter '%-.192s' (line: '%-.192s')", nil), + ErrFparserEOFInUnknownParameter: mysql.Message("Unexpected end of file while skipping unknown parameter '%-.192s'", nil), + ErrViewNoExplain: mysql.Message("EXPLAIN/SHOW can not be issued; lacking privileges for underlying table", nil), + ErrFrmUnknownType: mysql.Message("File '%-.192s' has unknown type '%-.64s' in its header", nil), + ErrWrongObject: mysql.Message("'%-.192s.%-.192s' is not %s", nil), + ErrNonupdateableColumn: mysql.Message("Column '%-.192s' is not updatable", nil), + ErrViewSelectDerived: mysql.Message("View's SELECT contains a subquery in the FROM clause", nil), + ErrViewSelectClause: mysql.Message("View's SELECT contains a '%s' clause", nil), + ErrViewSelectVariable: mysql.Message("View's SELECT contains a variable or parameter", nil), + ErrViewSelectTmptable: mysql.Message("View's SELECT refers to a temporary table '%-.192s'", nil), + ErrViewWrongList: mysql.Message("View's SELECT and view's field list have different column counts", nil), + ErrWarnViewMerge: mysql.Message("View merge algorithm can't be used here for now (assumed undefined algorithm)", nil), + ErrWarnViewWithoutKey: mysql.Message("View being updated does not have complete key of underlying table in it", nil), + ErrViewInvalid: mysql.Message("View '%-.192s.%-.192s' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them", nil), + ErrSpNoDropSp: mysql.Message("Can't drop or alter a %s from within another stored routine", nil), + ErrSpGotoInHndlr: mysql.Message("GOTO is not allowed in a stored procedure handler", nil), + ErrTrgAlreadyExists: mysql.Message("Trigger already exists", nil), + ErrTrgDoesNotExist: mysql.Message("Trigger does not exist", nil), + ErrTrgOnViewOrTempTable: mysql.Message("Trigger's '%-.192s' is view or temporary table", nil), + ErrTrgCantChangeRow: mysql.Message("Updating of %s row is not allowed in %strigger", nil), + ErrTrgNoSuchRowInTrg: mysql.Message("There is no %s row in %s trigger", nil), + ErrNoDefaultForField: mysql.Message("Field '%-.192s' doesn't have a default value", nil), + ErrDivisionByZero: mysql.Message("Division by 0", nil), + ErrTruncatedWrongValueForField: mysql.Message("Incorrect %-.32s value: '%-.128s' for column '%.192s' at row %d", nil), + ErrIllegalValueForType: mysql.Message("Illegal %s '%-.192s' value found during parsing", nil), + ErrViewNonupdCheck: mysql.Message("CHECK OPTION on non-updatable view '%-.192s.%-.192s'", nil), + ErrViewCheckFailed: mysql.Message("CHECK OPTION failed '%-.192s.%-.192s'", nil), + ErrProcaccessDenied: mysql.Message("%-.16s command denied to user '%-.48s'@'%-.64s' for routine '%-.192s'", nil), + ErrRelayLogFail: mysql.Message("Failed purging old relay logs: %s", nil), + ErrPasswdLength: mysql.Message("Password hash should be a %d-digit hexadecimal number", nil), + ErrUnknownTargetBinlog: mysql.Message("Target log not found in binlog index", nil), + ErrIoErrLogIndexRead: mysql.Message("I/O error reading log index file", nil), + ErrBinlogPurgeProhibited: mysql.Message("Server configuration does not permit binlog purge", nil), + ErrFseekFail: mysql.Message("Failed on fseek()", nil), + ErrBinlogPurgeFatalErr: mysql.Message("Fatal error during log purge", nil), + ErrLogInUse: mysql.Message("A purgeable log is in use, will not purge", nil), + ErrLogPurgeUnknownErr: mysql.Message("Unknown error during log purge", nil), + ErrRelayLogInit: mysql.Message("Failed initializing relay log position: %s", nil), + ErrNoBinaryLogging: mysql.Message("You are not using binary logging", nil), + ErrReservedSyntax: mysql.Message("The '%-.64s' syntax is reserved for purposes internal to the MySQL server", nil), + ErrWsasFailed: mysql.Message("WSAStartup Failed", nil), + ErrDiffGroupsProc: mysql.Message("Can't handle procedures with different groups yet", nil), + ErrNoGroupForProc: mysql.Message("Select must have a group with this procedure", nil), + ErrOrderWithProc: mysql.Message("Can't use ORDER clause with this procedure", nil), + ErrLoggingProhibitChangingOf: mysql.Message("Binary logging and replication forbid changing the global server %s", nil), + ErrNoFileMapping: mysql.Message("Can't map file: %-.200s, errno: %d", nil), + ErrWrongMagic: mysql.Message("Wrong magic in %-.64s", nil), + ErrPsManyParam: mysql.Message("Prepared statement contains too many placeholders", nil), + ErrKeyPart0: mysql.Message("Key part '%-.192s' length cannot be 0", nil), + ErrViewChecksum: mysql.Message("View text checksum failed", nil), + ErrViewMultiupdate: mysql.Message("Can not modify more than one base table through a join view '%-.192s.%-.192s'", nil), + ErrViewNoInsertFieldList: mysql.Message("Can not insert into join view '%-.192s.%-.192s' without fields list", nil), + ErrViewDeleteMergeView: mysql.Message("Can not delete from join view '%-.192s.%-.192s'", nil), + ErrCannotUser: mysql.Message("Operation %s failed for %.256s", nil), + ErrXaerNota: mysql.Message("XAERNOTA: Unknown XID", nil), + ErrXaerInval: mysql.Message("XAERINVAL: Invalid arguments (or unsupported command)", nil), + ErrXaerRmfail: mysql.Message("XAERRMFAIL: The command cannot be executed when global transaction is in the %.64s state", nil), + ErrXaerOutside: mysql.Message("XAEROUTSIDE: Some work is done outside global transaction", nil), + ErrXaerRmerr: mysql.Message("XAERRMERR: Fatal error occurred in the transaction branch - check your data for consistency", nil), + ErrXaRbrollback: mysql.Message("XARBROLLBACK: Transaction branch was rolled back", nil), + ErrNonexistingProcGrant: mysql.Message("There is no such grant defined for user '%-.48s' on host '%-.64s' on routine '%-.192s'", nil), + ErrProcAutoGrantFail: mysql.Message("Failed to grant EXECUTE and ALTER ROUTINE privileges", nil), + ErrProcAutoRevokeFail: mysql.Message("Failed to revoke all privileges to dropped routine", nil), + ErrDataTooLong: mysql.Message("Data too long for column '%s' at row %d", nil), + ErrSpBadSQLstate: mysql.Message("Bad SQLSTATE: '%s'", nil), + ErrStartup: mysql.Message("%s: ready for connections.\nVersion: '%s' socket: '%s' port: %d %s", nil), + ErrLoadFromFixedSizeRowsToVar: mysql.Message("Can't load value from file with fixed size rows to variable", nil), + ErrCantCreateUserWithGrant: mysql.Message("You are not allowed to create a user with GRANT", nil), + ErrWrongValueForType: mysql.Message("Incorrect %-.32s value: '%-.128s' for function %-.32s", nil), + ErrTableDefChanged: mysql.Message("Table definition has changed, please retry transaction", nil), + ErrSpDupHandler: mysql.Message("Duplicate handler declared in the same block", nil), + ErrSpNotVarArg: mysql.Message("OUT or INOUT argument %d for routine %s is not a variable or NEW pseudo-variable in BEFORE trigger", nil), + ErrSpNoRetset: mysql.Message("Not allowed to return a result set from a %s", nil), + ErrCantCreateGeometryObject: mysql.Message("Cannot get geometry object from data you send to the GEOMETRY field", nil), + ErrFailedRoutineBreakBinlog: mysql.Message("A routine failed and has neither NO SQL nor READS SQL DATA in its declaration and binary logging is enabled; if non-transactional tables were updated, the binary log will miss their changes", nil), + ErrBinlogUnsafeRoutine: mysql.Message("This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe logBinTrustFunctionCreators variable)", nil), + ErrBinlogCreateRoutineNeedSuper: mysql.Message("You do not have the SUPER privilege and binary logging is enabled (you *might* want to use the less safe logBinTrustFunctionCreators variable)", nil), + ErrExecStmtWithOpenCursor: mysql.Message("You can't execute a prepared statement which has an open cursor associated with it. Reset the statement to re-execute it.", nil), + ErrStmtHasNoOpenCursor: mysql.Message("The statement (%d) has no open cursor.", nil), + ErrCommitNotAllowedInSfOrTrg: mysql.Message("Explicit or implicit commit is not allowed in stored function or trigger.", nil), + ErrNoDefaultForViewField: mysql.Message("Field of view '%-.192s.%-.192s' underlying table doesn't have a default value", nil), + ErrSpNoRecursion: mysql.Message("Recursive stored functions and triggers are not allowed.", nil), + ErrTooBigScale: mysql.Message("Too big scale %d specified for column '%-.192s'. Maximum is %d.", nil), + ErrTooBigPrecision: mysql.Message("Too big precision %d specified for column '%-.192s'. Maximum is %d.", nil), + ErrMBiggerThanD: mysql.Message("For float(M,D), double(M,D) or decimal(M,D), M must be >= D (column '%-.192s').", nil), + ErrWrongLockOfSystemTable: mysql.Message("You can't combine write-locking of system tables with other tables or lock types", nil), + ErrConnectToForeignDataSource: mysql.Message("Unable to connect to foreign data source: %.64s", nil), + ErrQueryOnForeignDataSource: mysql.Message("There was a problem processing the query on the foreign data source. Data source : %-.64s", nil), + ErrForeignDataSourceDoesntExist: mysql.Message("The foreign data source you are trying to reference does not exist. Data source : %-.64s", nil), + ErrForeignDataStringInvalidCantCreate: mysql.Message("Can't create federated table. The data source connection string '%-.64s' is not in the correct format", nil), + ErrForeignDataStringInvalid: mysql.Message("The data source connection string '%-.64s' is not in the correct format", nil), + ErrCantCreateFederatedTable: mysql.Message("Can't create federated table. Foreign data src : %-.64s", nil), + ErrTrgInWrongSchema: mysql.Message("Trigger in wrong schema", nil), + ErrStackOverrunNeedMore: mysql.Message("Thread stack overrun: %d bytes used of a %d byte stack, and %d bytes needed. Use 'mysqld --threadStack=#' to specify a bigger stack.", nil), + ErrTooLongBody: mysql.Message("Routine body for '%-.100s' is too long", nil), + ErrWarnCantDropDefaultKeycache: mysql.Message("Cannot drop default keycache", nil), + ErrTooBigDisplaywidth: mysql.Message("Display width out of range for column '%-.192s' (max = %d)", nil), + ErrXaerDupid: mysql.Message("XAERDUPID: The XID already exists", nil), + ErrDatetimeFunctionOverflow: mysql.Message("Datetime function: %-.32s field overflow", nil), + ErrCantUpdateUsedTableInSfOrTrg: mysql.Message("Can't update table '%-.192s' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.", nil), + ErrViewPreventUpdate: mysql.Message("The definition of table '%-.192s' prevents operation %.192s on table '%-.192s'.", nil), + ErrPsNoRecursion: mysql.Message("The prepared statement contains a stored routine call that refers to that same statement. It's not allowed to execute a prepared statement in such a recursive manner", nil), + ErrSpCantSetAutocommit: mysql.Message("Not allowed to set autocommit from a stored function or trigger", nil), + ErrMalformedDefiner: mysql.Message("Definer is not fully qualified", nil), + ErrViewFrmNoUser: mysql.Message("View '%-.192s'.'%-.192s' has no definer information (old table format). Current user is used as definer. Please recreate the view!", nil), + ErrViewOtherUser: mysql.Message("You need the SUPER privilege for creation view with '%-.192s'@'%-.192s' definer", nil), + ErrNoSuchUser: mysql.Message("The user specified as a definer ('%-.64s'@'%-.64s') does not exist", nil), + ErrForbidSchemaChange: mysql.Message("Changing schema from '%-.192s' to '%-.192s' is not allowed.", nil), + ErrRowIsReferenced2: mysql.Message("Cannot delete or update a parent row: a foreign key constraint fails (%.192s)", nil), + ErrNoReferencedRow2: mysql.Message("Cannot add or update a child row: a foreign key constraint fails (%.192s)", nil), + ErrSpBadVarShadow: mysql.Message("Variable '%-.64s' must be quoted with `...`, or renamed", nil), + ErrTrgNoDefiner: mysql.Message("No definer attribute for trigger '%-.192s'.'%-.192s'. The trigger will be activated under the authorization of the invoker, which may have insufficient privileges. Please recreate the trigger.", nil), + ErrOldFileFormat: mysql.Message("'%-.192s' has an old format, you should re-create the '%s' object(s)", nil), + ErrSpRecursionLimit: mysql.Message("Recursive limit %d (as set by the maxSpRecursionDepth variable) was exceeded for routine %.192s", nil), + ErrSpProcTableCorrupt: mysql.Message("Failed to load routine %-.192s. The table mysql.proc is missing, corrupt, or contains bad data (internal code %d)", nil), + ErrSpWrongName: mysql.Message("Incorrect routine name '%-.192s'", nil), + ErrTableNeedsUpgrade: mysql.Message("Table upgrade required. Please do \"REPAIR TABLE `%-.32s`\"", nil), + ErrSpNoAggregate: mysql.Message("AGGREGATE is not supported for stored functions", nil), + ErrMaxPreparedStmtCountReached: mysql.Message("Can't create more than maxPreparedStmtCount statements (current value: %d)", nil), + ErrViewRecursive: mysql.Message("`%-.192s`.`%-.192s` contains view recursion", nil), + ErrNonGroupingFieldUsed: mysql.Message("Non-grouping field '%-.192s' is used in %-.64s clause", nil), + ErrTableCantHandleSpkeys: mysql.Message("The used table type doesn't support SPATIAL indexes", nil), + ErrNoTriggersOnSystemSchema: mysql.Message("Triggers can not be created on system tables", nil), + ErrRemovedSpaces: mysql.Message("Leading spaces are removed from name '%s'", nil), + ErrAutoincReadFailed: mysql.Message("Failed to read auto-increment value from storage engine", nil), + ErrUsername: mysql.Message("user name", nil), + ErrHostname: mysql.Message("host name", nil), + ErrWrongStringLength: mysql.Message("String '%-.70s' is too long for %s (should be no longer than %d)", nil), + ErrNonInsertableTable: mysql.Message("The target table %-.100s of the %s is not insertable-into", nil), + ErrAdminWrongMrgTable: mysql.Message("Table '%-.64s' is differently defined or of non-MyISAM type or doesn't exist", nil), + ErrTooHighLevelOfNestingForSelect: mysql.Message("Too high level of nesting for select", nil), + ErrNameBecomesEmpty: mysql.Message("Name '%-.64s' has become ''", nil), + ErrAmbiguousFieldTerm: mysql.Message("First character of the FIELDS TERMINATED string is ambiguous; please use non-optional and non-empty FIELDS ENCLOSED BY", nil), + ErrForeignServerExists: mysql.Message("The foreign server, %s, you are trying to create already exists.", nil), + ErrForeignServerDoesntExist: mysql.Message("The foreign server name you are trying to reference does not exist. Data source : %-.64s", nil), + ErrIllegalHaCreateOption: mysql.Message("Table storage engine '%-.64s' does not support the create option '%.64s'", nil), + ErrPartitionRequiresValues: mysql.Message("Syntax : %-.64s PARTITIONING requires definition of VALUES %-.64s for each partition", nil), + ErrPartitionWrongValues: mysql.Message("Only %-.64s PARTITIONING can use VALUES %-.64s in partition definition", nil), + ErrPartitionMaxvalue: mysql.Message("MAXVALUE can only be used in last partition definition", nil), + ErrPartitionSubpartition: mysql.Message("Subpartitions can only be hash partitions and by key", nil), + ErrPartitionSubpartMix: mysql.Message("Must define subpartitions on all partitions if on one partition", nil), + ErrPartitionWrongNoPart: mysql.Message("Wrong number of partitions defined, mismatch with previous setting", nil), + ErrPartitionWrongNoSubpart: mysql.Message("Wrong number of subpartitions defined, mismatch with previous setting", nil), + ErrWrongExprInPartitionFunc: mysql.Message("Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed", nil), + ErrNoConstExprInRangeOrList: mysql.Message("Expression in RANGE/LIST VALUES must be constant", nil), + ErrFieldNotFoundPart: mysql.Message("Field in list of fields for partition function not found in table", nil), + ErrListOfFieldsOnlyInHash: mysql.Message("List of fields is only allowed in KEY partitions", nil), + ErrInconsistentPartitionInfo: mysql.Message("The partition info in the frm file is not consistent with what can be written into the frm file", nil), + ErrPartitionFuncNotAllowed: mysql.Message("The %-.192s function returns the wrong type", nil), + ErrPartitionsMustBeDefined: mysql.Message("For %-.64s partitions each partition must be defined", nil), + ErrRangeNotIncreasing: mysql.Message("VALUES LESS THAN value must be strictly increasing for each partition", nil), + ErrInconsistentTypeOfFunctions: mysql.Message("VALUES value must be of same type as partition function", nil), + ErrMultipleDefConstInListPart: mysql.Message("Multiple definition of same constant in list partitioning", nil), + ErrPartitionEntry: mysql.Message("Partitioning can not be used stand-alone in query", nil), + ErrMixHandler: mysql.Message("The mix of handlers in the partitions is not allowed in this version of MySQL", nil), + ErrPartitionNotDefined: mysql.Message("For the partitioned engine it is necessary to define all %-.64s", nil), + ErrTooManyPartitions: mysql.Message("Too many partitions (including subpartitions) were defined", nil), + ErrSubpartition: mysql.Message("It is only possible to mix RANGE/LIST partitioning with HASH/KEY partitioning for subpartitioning", nil), + ErrCantCreateHandlerFile: mysql.Message("Failed to create specific handler file", nil), + ErrBlobFieldInPartFunc: mysql.Message("A BLOB field is not allowed in partition function", nil), + ErrUniqueKeyNeedAllFieldsInPf: mysql.Message("A %-.192s must include all columns in the table's partitioning function", nil), + ErrNoParts: mysql.Message("Number of %-.64s = 0 is not an allowed value", nil), + ErrPartitionMgmtOnNonpartitioned: mysql.Message("Partition management on a not partitioned table is not possible", nil), + ErrForeignKeyOnPartitioned: mysql.Message("Foreign key clause is not yet supported in conjunction with partitioning", nil), + ErrDropPartitionNonExistent: mysql.Message("Error in list of partitions to %-.64s", nil), + ErrDropLastPartition: mysql.Message("Cannot remove all partitions, use DROP TABLE instead", nil), + ErrCoalesceOnlyOnHashPartition: mysql.Message("COALESCE PARTITION can only be used on HASH/KEY partitions", nil), + ErrReorgHashOnlyOnSameNo: mysql.Message("REORGANIZE PARTITION can only be used to reorganize partitions not to change their numbers", nil), + ErrReorgNoParam: mysql.Message("REORGANIZE PARTITION without parameters can only be used on auto-partitioned tables using HASH PARTITIONs", nil), + ErrOnlyOnRangeListPartition: mysql.Message("%-.64s PARTITION can only be used on RANGE/LIST partitions", nil), + ErrAddPartitionSubpart: mysql.Message("Trying to Add partition(s) with wrong number of subpartitions", nil), + ErrAddPartitionNoNewPartition: mysql.Message("At least one partition must be added", nil), + ErrCoalescePartitionNoPartition: mysql.Message("At least one partition must be coalesced", nil), + ErrReorgPartitionNotExist: mysql.Message("More partitions to reorganize than there are partitions", nil), + ErrSameNamePartition: mysql.Message("Duplicate partition name %-.192s", nil), + ErrNoBinlog: mysql.Message("It is not allowed to shut off binlog on this command", nil), + ErrConsecutiveReorgPartitions: mysql.Message("When reorganizing a set of partitions they must be in consecutive order", nil), + ErrReorgOutsideRange: mysql.Message("Reorganize of range partitions cannot change total ranges except for last partition where it can extend the range", nil), + ErrPartitionFunctionFailure: mysql.Message("Partition function not supported in this version for this handler", nil), + ErrPartState: mysql.Message("Partition state cannot be defined from CREATE/ALTER TABLE", nil), + ErrLimitedPartRange: mysql.Message("The %-.64s handler only supports 32 bit integers in VALUES", nil), + ErrPluginIsNotLoaded: mysql.Message("Plugin '%-.192s' is not loaded", nil), + ErrWrongValue: mysql.Message("Incorrect %-.32s value: '%-.128s'", nil), + ErrNoPartitionForGivenValue: mysql.Message("Table has no partition for value %-.64s", nil), + ErrFilegroupOptionOnlyOnce: mysql.Message("It is not allowed to specify %s more than once", nil), + ErrCreateFilegroupFailed: mysql.Message("Failed to create %s", nil), + ErrDropFilegroupFailed: mysql.Message("Failed to drop %s", nil), + ErrTablespaceAutoExtend: mysql.Message("The handler doesn't support autoextend of tablespaces", nil), + ErrWrongSizeNumber: mysql.Message("A size parameter was incorrectly specified, either number or on the form 10M", nil), + ErrSizeOverflow: mysql.Message("The size number was correct but we don't allow the digit part to be more than 2 billion", nil), + ErrAlterFilegroupFailed: mysql.Message("Failed to alter: %s", nil), + ErrBinlogRowLoggingFailed: mysql.Message("Writing one row to the row-based binary log failed", nil), + ErrBinlogRowWrongTableDef: mysql.Message("Table definition on master and slave does not match: %s", nil), + ErrBinlogRowRbrToSbr: mysql.Message("Slave running with --log-slave-updates must use row-based binary logging to be able to replicate row-based binary log events", nil), + ErrEventAlreadyExists: mysql.Message("Event '%-.192s' already exists", nil), + ErrEventStoreFailed: mysql.Message("Failed to store event %s. Error code %d from storage engine.", nil), + ErrEventDoesNotExist: mysql.Message("Unknown event '%-.192s'", nil), + ErrEventCantAlter: mysql.Message("Failed to alter event '%-.192s'", nil), + ErrEventDropFailed: mysql.Message("Failed to drop %s", nil), + ErrEventIntervalNotPositiveOrTooBig: mysql.Message("INTERVAL is either not positive or too big", nil), + ErrEventEndsBeforeStarts: mysql.Message("ENDS is either invalid or before STARTS", nil), + ErrEventExecTimeInThePast: mysql.Message("Event execution time is in the past. Event has been disabled", nil), + ErrEventOpenTableFailed: mysql.Message("Failed to open mysql.event", nil), + ErrEventNeitherMExprNorMAt: mysql.Message("No datetime expression provided", nil), + ErrObsoleteColCountDoesntMatchCorrupted: mysql.Message("Column count of mysql.%s is wrong. Expected %d, found %d. The table is probably corrupted", nil), + ErrObsoleteCannotLoadFromTable: mysql.Message("Cannot load from mysql.%s. The table is probably corrupted", nil), + ErrEventCannotDelete: mysql.Message("Failed to delete the event from mysql.event", nil), + ErrEventCompile: mysql.Message("Error during compilation of event's body", nil), + ErrEventSameName: mysql.Message("Same old and new event name", nil), + ErrEventDataTooLong: mysql.Message("Data for column '%s' too long", nil), + ErrDropIndexFk: mysql.Message("Cannot drop index '%-.192s': needed in a foreign key constraint", nil), + ErrWarnDeprecatedSyntaxWithVer: mysql.Message("The syntax '%s' is deprecated and will be removed in MySQL %s. Please use %s instead", nil), + ErrCantWriteLockLogTable: mysql.Message("You can't write-lock a log table. Only read access is possible", nil), + ErrCantLockLogTable: mysql.Message("You can't use locks with log tables.", nil), + ErrForeignDuplicateKeyOldUnused: mysql.Message("Upholding foreign key constraints for table '%.192s', entry '%-.192s', key %d would lead to a duplicate entry", nil), + ErrColCountDoesntMatchPleaseUpdate: mysql.Message("Column count of mysql.%s is wrong. Expected %d, found %d. Created with MySQL %d, now running %d. Please use mysqlUpgrade to fix this error.", nil), + ErrTempTablePreventsSwitchOutOfRbr: mysql.Message("Cannot switch out of the row-based binary log format when the session has open temporary tables", nil), + ErrStoredFunctionPreventsSwitchBinlogFormat: mysql.Message("Cannot change the binary logging format inside a stored function or trigger", nil), + ErrNdbCantSwitchBinlogFormat: mysql.Message("The NDB cluster engine does not support changing the binlog format on the fly yet", nil), + ErrPartitionNoTemporary: mysql.Message("Cannot create temporary table with partitions", nil), + ErrPartitionConstDomain: mysql.Message("Partition constant is out of partition function domain", nil), + ErrPartitionFunctionIsNotAllowed: mysql.Message("This partition function is not allowed", nil), + ErrDdlLog: mysql.Message("Error in DDL log", nil), + ErrNullInValuesLessThan: mysql.Message("Not allowed to use NULL value in VALUES LESS THAN", nil), + ErrWrongPartitionName: mysql.Message("Incorrect partition name", nil), + ErrCantChangeTxCharacteristics: mysql.Message("Transaction characteristics can't be changed while a transaction is in progress", nil), + ErrDupEntryAutoincrementCase: mysql.Message("ALTER TABLE causes autoIncrement resequencing, resulting in duplicate entry '%-.192s' for key '%-.192s'", nil), + ErrEventModifyQueue: mysql.Message("Internal scheduler error %d", nil), + ErrEventSetVar: mysql.Message("Error during starting/stopping of the scheduler. Error code %d", nil), + ErrPartitionMerge: mysql.Message("Engine cannot be used in partitioned tables", nil), + ErrCantActivateLog: mysql.Message("Cannot activate '%-.64s' log", nil), + ErrRbrNotAvailable: mysql.Message("The server was not built with row-based replication", nil), + ErrBase64Decode: mysql.Message("Decoding of base64 string failed", nil), + ErrEventRecursionForbidden: mysql.Message("Recursion of EVENT DDL statements is forbidden when body is present", nil), + ErrEventsDB: mysql.Message("Cannot proceed because system tables used by Event Scheduler were found damaged at server start", nil), + ErrOnlyIntegersAllowed: mysql.Message("Only integers allowed as number here", nil), + ErrUnsuportedLogEngine: mysql.Message("This storage engine cannot be used for log tables\"", nil), + ErrBadLogStatement: mysql.Message("You cannot '%s' a log table if logging is enabled", nil), + ErrCantRenameLogTable: mysql.Message("Cannot rename '%s'. When logging enabled, rename to/from log table must rename two tables: the log table to an archive table and another table back to '%s'", nil), + ErrWrongParamcountToNativeFct: mysql.Message("Incorrect parameter count in the call to native function '%-.192s'", nil), + ErrWrongParametersToNativeFct: mysql.Message("Incorrect parameters in the call to native function '%-.192s'", nil), + ErrWrongParametersToStoredFct: mysql.Message("Incorrect parameters in the call to stored function '%-.192s'", nil), + ErrNativeFctNameCollision: mysql.Message("This function '%-.192s' has the same name as a native function", nil), + ErrDupEntryWithKeyName: mysql.Message("Duplicate entry '%-.64s' for key '%-.192s'", nil), + ErrBinlogPurgeEmFile: mysql.Message("Too many files opened, please execute the command again", nil), + ErrEventCannotCreateInThePast: mysql.Message("Event execution time is in the past and ON COMPLETION NOT PRESERVE is set. The event was dropped immediately after creation.", nil), + ErrEventCannotAlterInThePast: mysql.Message("Event execution time is in the past and ON COMPLETION NOT PRESERVE is set. The event was not changed. Specify a time in the future.", nil), + ErrSlaveIncident: mysql.Message("The incident %s occurred on the master. Message: %-.64s", nil), + ErrNoPartitionForGivenValueSilent: mysql.Message("Table has no partition for some existing values", nil), + ErrBinlogUnsafeStatement: mysql.Message("Unsafe statement written to the binary log using statement format since BINLOGFORMAT = STATEMENT. %s", nil), + ErrSlaveFatal: mysql.Message("Fatal : %s", nil), + ErrSlaveRelayLogReadFailure: mysql.Message("Relay log read failure: %s", nil), + ErrSlaveRelayLogWriteFailure: mysql.Message("Relay log write failure: %s", nil), + ErrSlaveCreateEventFailure: mysql.Message("Failed to create %s", nil), + ErrSlaveMasterComFailure: mysql.Message("Master command %s failed: %s", nil), + ErrBinlogLoggingImpossible: mysql.Message("Binary logging not possible. Message: %s", nil), + ErrViewNoCreationCtx: mysql.Message("View `%-.64s`.`%-.64s` has no creation context", nil), + ErrViewInvalidCreationCtx: mysql.Message("Creation context of view `%-.64s`.`%-.64s' is invalid", nil), + ErrSrInvalidCreationCtx: mysql.Message("Creation context of stored routine `%-.64s`.`%-.64s` is invalid", nil), + ErrTrgCorruptedFile: mysql.Message("Corrupted TRG file for table `%-.64s`.`%-.64s`", nil), + ErrTrgNoCreationCtx: mysql.Message("Triggers for table `%-.64s`.`%-.64s` have no creation context", nil), + ErrTrgInvalidCreationCtx: mysql.Message("Trigger creation context of table `%-.64s`.`%-.64s` is invalid", nil), + ErrEventInvalidCreationCtx: mysql.Message("Creation context of event `%-.64s`.`%-.64s` is invalid", nil), + ErrTrgCantOpenTable: mysql.Message("Cannot open table for trigger `%-.64s`.`%-.64s`", nil), + ErrCantCreateSroutine: mysql.Message("Cannot create stored routine `%-.64s`. Check warnings", nil), + ErrNeverUsed: mysql.Message("Ambiguous slave modes combination. %s", nil), + ErrNoFormatDescriptionEventBeforeBinlogStatement: mysql.Message("The BINLOG statement of type `%s` was not preceded by a format description BINLOG statement.", nil), + ErrSlaveCorruptEvent: mysql.Message("Corrupted replication event was detected", nil), + ErrLoadDataInvalidColumn: mysql.Message("Invalid column reference (%-.64s) in LOAD DATA", nil), + ErrLogPurgeNoFile: mysql.Message("Being purged log %s was not found", nil), + ErrXaRbtimeout: mysql.Message("XARBTIMEOUT: Transaction branch was rolled back: took too long", nil), + ErrXaRbdeadlock: mysql.Message("XARBDEADLOCK: Transaction branch was rolled back: deadlock was detected", nil), + ErrNeedReprepare: mysql.Message("Prepared statement needs to be re-prepared", nil), + ErrDelayedNotSupported: mysql.Message("DELAYED option not supported for table '%-.192s'", nil), + WarnNoMasterInfo: mysql.Message("The master info structure does not exist", nil), + WarnOptionIgnored: mysql.Message("<%-.64s> option ignored", nil), + WarnPluginDeleteBuiltin: mysql.Message("Built-in plugins cannot be deleted", nil), + WarnPluginBusy: mysql.Message("Plugin is busy and will be uninstalled on shutdown", nil), + ErrVariableIsReadonly: mysql.Message("%s variable '%s' is read-only. Use SET %s to assign the value", nil), + ErrWarnEngineTransactionRollback: mysql.Message("Storage engine %s does not support rollback for this statement. Transaction rolled back and must be restarted", nil), + ErrSlaveHeartbeatFailure: mysql.Message("Unexpected master's heartbeat data: %s", nil), + ErrSlaveHeartbeatValueOutOfRange: mysql.Message("The requested value for the heartbeat period is either negative or exceeds the maximum allowed (%s seconds).", nil), + ErrNdbReplicationSchema: mysql.Message("Bad schema for mysql.ndbReplication table. Message: %-.64s", nil), + ErrConflictFnParse: mysql.Message("Error in parsing conflict function. Message: %-.64s", nil), + ErrExceptionsWrite: mysql.Message("Write to exceptions table failed. Message: %-.128s\"", nil), + ErrTooLongTableComment: mysql.Message("Comment for table '%-.64s' is too long (max = %d)", nil), + ErrTooLongFieldComment: mysql.Message("Comment for field '%-.64s' is too long (max = %d)", nil), + ErrFuncInexistentNameCollision: mysql.Message("FUNCTION %s does not exist. Check the 'Function Name Parsing and Resolution' section in the Reference Manual", nil), + ErrDatabaseName: mysql.Message("Database", nil), + ErrTableName: mysql.Message("Table", nil), + ErrPartitionName: mysql.Message("Partition", nil), + ErrSubpartitionName: mysql.Message("Subpartition", nil), + ErrTemporaryName: mysql.Message("Temporary", nil), + ErrRenamedName: mysql.Message("Renamed", nil), + ErrTooManyConcurrentTrxs: mysql.Message("Too many active concurrent transactions", nil), + WarnNonASCIISeparatorNotImplemented: mysql.Message("Non-ASCII separator arguments are not fully supported", nil), + ErrDebugSyncTimeout: mysql.Message("debug sync point wait timed out", nil), + ErrDebugSyncHitLimit: mysql.Message("debug sync point hit limit reached", nil), + ErrDupSignalSet: mysql.Message("Duplicate condition information item '%s'", nil), + ErrSignalWarn: mysql.Message("Unhandled user-defined warning condition", nil), + ErrSignalNotFound: mysql.Message("Unhandled user-defined not found condition", nil), + ErrSignalException: mysql.Message("Unhandled user-defined exception condition", nil), + ErrResignalWithoutActiveHandler: mysql.Message("RESIGNAL when handler not active", nil), + ErrSignalBadConditionType: mysql.Message("SIGNAL/RESIGNAL can only use a CONDITION defined with SQLSTATE", nil), + WarnCondItemTruncated: mysql.Message("Data truncated for condition item '%s'", nil), + ErrCondItemTooLong: mysql.Message("Data too long for condition item '%s'", nil), + ErrUnknownLocale: mysql.Message("Unknown locale: '%-.64s'", nil), + ErrSlaveIgnoreServerIds: mysql.Message("The requested server id %d clashes with the slave startup option --replicate-same-server-id", nil), + ErrQueryCacheDisabled: mysql.Message("Query cache is disabled; restart the server with queryCacheType=1 to enable it", nil), + ErrSameNamePartitionField: mysql.Message("Duplicate partition field name '%-.192s'", nil), + ErrPartitionColumnList: mysql.Message("Inconsistency in usage of column lists for partitioning", nil), + ErrWrongTypeColumnValue: mysql.Message("Partition column values of incorrect type", nil), + ErrTooManyPartitionFuncFields: mysql.Message("Too many fields in '%-.192s'", nil), + ErrMaxvalueInValuesIn: mysql.Message("Cannot use MAXVALUE as value in VALUES IN", nil), + ErrTooManyValues: mysql.Message("Cannot have more than one value for this type of %-.64s partitioning", nil), + ErrRowSinglePartitionField: mysql.Message("Row expressions in VALUES IN only allowed for multi-field column partitioning", nil), + ErrFieldTypeNotAllowedAsPartitionField: mysql.Message("Field '%-.192s' is of a not allowed type for this type of partitioning", nil), + ErrPartitionFieldsTooLong: mysql.Message("The total length of the partitioning fields is too large", nil), + ErrBinlogRowEngineAndStmtEngine: mysql.Message("Cannot execute statement: impossible to write to binary log since both row-incapable engines and statement-incapable engines are involved.", nil), + ErrBinlogRowModeAndStmtEngine: mysql.Message("Cannot execute statement: impossible to write to binary log since BINLOGFORMAT = ROW and at least one table uses a storage engine limited to statement-based logging.", nil), + ErrBinlogUnsafeAndStmtEngine: mysql.Message("Cannot execute statement: impossible to write to binary log since statement is unsafe, storage engine is limited to statement-based logging, and BINLOGFORMAT = MIXED. %s", nil), + ErrBinlogRowInjectionAndStmtEngine: mysql.Message("Cannot execute statement: impossible to write to binary log since statement is in row format and at least one table uses a storage engine limited to statement-based logging.", nil), + ErrBinlogStmtModeAndRowEngine: mysql.Message("Cannot execute statement: impossible to write to binary log since BINLOGFORMAT = STATEMENT and at least one table uses a storage engine limited to row-based logging.%s", nil), + ErrBinlogRowInjectionAndStmtMode: mysql.Message("Cannot execute statement: impossible to write to binary log since statement is in row format and BINLOGFORMAT = STATEMENT.", nil), + ErrBinlogMultipleEnginesAndSelfLoggingEngine: mysql.Message("Cannot execute statement: impossible to write to binary log since more than one engine is involved and at least one engine is self-logging.", nil), + ErrBinlogUnsafeLimit: mysql.Message("The statement is unsafe because it uses a LIMIT clause. This is unsafe because the set of rows included cannot be predicted.", nil), + ErrBinlogUnsafeInsertDelayed: mysql.Message("The statement is unsafe because it uses INSERT DELAYED. This is unsafe because the times when rows are inserted cannot be predicted.", nil), + ErrBinlogUnsafeSystemTable: mysql.Message("The statement is unsafe because it uses the general log, slow query log, or performanceSchema table(s). This is unsafe because system tables may differ on slaves.", nil), + ErrBinlogUnsafeAutoincColumns: mysql.Message("Statement is unsafe because it invokes a trigger or a stored function that inserts into an AUTOINCREMENT column. Inserted values cannot be logged correctly.", nil), + ErrBinlogUnsafeUdf: mysql.Message("Statement is unsafe because it uses a UDF which may not return the same value on the slave.", nil), + ErrBinlogUnsafeSystemVariable: mysql.Message("Statement is unsafe because it uses a system variable that may have a different value on the slave.", nil), + ErrBinlogUnsafeSystemFunction: mysql.Message("Statement is unsafe because it uses a system function that may return a different value on the slave.", nil), + ErrBinlogUnsafeNontransAfterTrans: mysql.Message("Statement is unsafe because it accesses a non-transactional table after accessing a transactional table within the same transaction.", nil), + ErrMessageAndStatement: mysql.Message("%s Statement: %s", nil), + ErrSlaveConversionFailed: mysql.Message("Column %d of table '%-.192s.%-.192s' cannot be converted from type '%-.32s' to type '%-.32s'", nil), + ErrSlaveCantCreateConversion: mysql.Message("Can't create conversion table for table '%-.192s.%-.192s'", nil), + ErrInsideTransactionPreventsSwitchBinlogFormat: mysql.Message("Cannot modify @@session.binlogFormat inside a transaction", nil), + ErrPathLength: mysql.Message("The path specified for %.64s is too long.", nil), + ErrWarnDeprecatedSyntaxNoReplacement: mysql.Message("'%s' is deprecated and will be removed in a future release.", nil), + ErrWrongNativeTableStructure: mysql.Message("Native table '%-.64s'.'%-.64s' has the wrong structure", nil), + ErrWrongPerfSchemaUsage: mysql.Message("Invalid performanceSchema usage.", nil), + ErrWarnISSkippedTable: mysql.Message("Table '%s'.'%s' was skipped since its definition is being modified by concurrent DDL statement", nil), + ErrInsideTransactionPreventsSwitchBinlogDirect: mysql.Message("Cannot modify @@session.binlogDirectNonTransactionalUpdates inside a transaction", nil), + ErrStoredFunctionPreventsSwitchBinlogDirect: mysql.Message("Cannot change the binlog direct flag inside a stored function or trigger", nil), + ErrSpatialMustHaveGeomCol: mysql.Message("A SPATIAL index may only contain a geometrical type column", nil), + ErrTooLongIndexComment: mysql.Message("Comment for index '%-.64s' is too long (max = %d)", nil), + ErrLockAborted: mysql.Message("Wait on a lock was aborted due to a pending exclusive lock", nil), + ErrDataOutOfRange: mysql.Message("%s value is out of range in '%s'", nil), + ErrWrongSpvarTypeInLimit: mysql.Message("A variable of a non-integer based type in LIMIT clause", nil), + ErrBinlogUnsafeMultipleEnginesAndSelfLoggingEngine: mysql.Message("Mixing self-logging and non-self-logging engines in a statement is unsafe.", nil), + ErrBinlogUnsafeMixedStatement: mysql.Message("Statement accesses nontransactional table as well as transactional or temporary table, and writes to any of them.", nil), + ErrInsideTransactionPreventsSwitchSQLLogBin: mysql.Message("Cannot modify @@session.sqlLogBin inside a transaction", nil), + ErrStoredFunctionPreventsSwitchSQLLogBin: mysql.Message("Cannot change the sqlLogBin inside a stored function or trigger", nil), + ErrFailedReadFromParFile: mysql.Message("Failed to read from the .par file", nil), + ErrValuesIsNotIntType: mysql.Message("VALUES value for partition '%-.64s' must have type INT", nil), + ErrAccessDeniedNoPassword: mysql.Message("Access denied for user '%-.48s'@'%-.64s'", nil), + ErrSetPasswordAuthPlugin: mysql.Message("SET PASSWORD has no significance for users authenticating via plugins", nil), + ErrGrantPluginUserExists: mysql.Message("GRANT with IDENTIFIED WITH is illegal because the user %-.*s already exists", nil), + ErrTruncateIllegalFk: mysql.Message("Cannot truncate a table referenced in a foreign key constraint (%.192s)", nil), + ErrPluginIsPermanent: mysql.Message("Plugin '%s' is forcePlusPermanent and can not be unloaded", nil), + ErrSlaveHeartbeatValueOutOfRangeMin: mysql.Message("The requested value for the heartbeat period is less than 1 millisecond. The value is reset to 0, meaning that heartbeating will effectively be disabled.", nil), + ErrSlaveHeartbeatValueOutOfRangeMax: mysql.Message("The requested value for the heartbeat period exceeds the value of `slaveNetTimeout' seconds. A sensible value for the period should be less than the timeout.", nil), + ErrStmtCacheFull: mysql.Message("Multi-row statements required more than 'maxBinlogStmtCacheSize' bytes of storage; increase this mysqld variable and try again", nil), + ErrMultiUpdateKeyConflict: mysql.Message("Primary key/partition key update is not allowed since the table is updated both as '%-.192s' and '%-.192s'.", nil), + ErrTableNeedsRebuild: mysql.Message("Table rebuild required. Please do \"ALTER TABLE `%-.32s` FORCE\" or dump/reload to fix it!", nil), + WarnOptionBelowLimit: mysql.Message("The value of '%s' should be no less than the value of '%s'", nil), + ErrIndexColumnTooLong: mysql.Message("Index column size too large. The maximum column size is %d bytes.", nil), + ErrErrorInTriggerBody: mysql.Message("Trigger '%-.64s' has an error in its body: '%-.256s'", nil), + ErrErrorInUnknownTriggerBody: mysql.Message("Unknown trigger has an error in its body: '%-.256s'", nil), + ErrIndexCorrupt: mysql.Message("Index %s is corrupted", nil), + ErrUndoRecordTooBig: mysql.Message("Undo log record is too big.", nil), + ErrBinlogUnsafeInsertIgnoreSelect: mysql.Message("INSERT IGNORE... SELECT is unsafe because the order in which rows are retrieved by the SELECT determines which (if any) rows are ignored. This order cannot be predicted and may differ on master and the slave.", nil), + ErrBinlogUnsafeInsertSelectUpdate: mysql.Message("INSERT... SELECT... ON DUPLICATE KEY UPDATE is unsafe because the order in which rows are retrieved by the SELECT determines which (if any) rows are updated. This order cannot be predicted and may differ on master and the slave.", nil), + ErrBinlogUnsafeReplaceSelect: mysql.Message("REPLACE... SELECT is unsafe because the order in which rows are retrieved by the SELECT determines which (if any) rows are replaced. This order cannot be predicted and may differ on master and the slave.", nil), + ErrBinlogUnsafeCreateIgnoreSelect: mysql.Message("CREATE... IGNORE SELECT is unsafe because the order in which rows are retrieved by the SELECT determines which (if any) rows are ignored. This order cannot be predicted and may differ on master and the slave.", nil), + ErrBinlogUnsafeCreateReplaceSelect: mysql.Message("CREATE... REPLACE SELECT is unsafe because the order in which rows are retrieved by the SELECT determines which (if any) rows are replaced. This order cannot be predicted and may differ on master and the slave.", nil), + ErrBinlogUnsafeUpdateIgnore: mysql.Message("UPDATE IGNORE is unsafe because the order in which rows are updated determines which (if any) rows are ignored. This order cannot be predicted and may differ on master and the slave.", nil), + ErrPluginNoUninstall: mysql.Message("Plugin '%s' is marked as not dynamically uninstallable. You have to stop the server to uninstall it.", nil), + ErrPluginNoInstall: mysql.Message("Plugin '%s' is marked as not dynamically installable. You have to stop the server to install it.", nil), + ErrBinlogUnsafeWriteAutoincSelect: mysql.Message("Statements writing to a table with an auto-increment column after selecting from another table are unsafe because the order in which rows are retrieved determines what (if any) rows will be written. This order cannot be predicted and may differ on master and the slave.", nil), + ErrBinlogUnsafeCreateSelectAutoinc: mysql.Message("CREATE TABLE... SELECT... on a table with an auto-increment column is unsafe because the order in which rows are retrieved by the SELECT determines which (if any) rows are inserted. This order cannot be predicted and may differ on master and the slave.", nil), + ErrBinlogUnsafeInsertTwoKeys: mysql.Message("INSERT... ON DUPLICATE KEY UPDATE on a table with more than one UNIQUE KEY is unsafe", nil), + ErrTableInFkCheck: mysql.Message("Table is being used in foreign key check.", nil), + ErrUnsupportedEngine: mysql.Message("Storage engine '%s' does not support system tables. [%s.%s]", nil), + ErrBinlogUnsafeAutoincNotFirst: mysql.Message("INSERT into autoincrement field which is not the first part in the composed primary key is unsafe.", nil), + ErrCannotLoadFromTableV2: mysql.Message("Cannot load from %s.%s. The table is probably corrupted", nil), + ErrMasterDelayValueOutOfRange: mysql.Message("The requested value %d for the master delay exceeds the maximum %d", nil), + ErrOnlyFdAndRbrEventsAllowedInBinlogStatement: mysql.Message("Only FormatDescriptionLogEvent and row events are allowed in BINLOG statements (but %s was provided)", nil), + ErrPartitionExchangeDifferentOption: mysql.Message("Non matching attribute '%-.64s' between partition and table", nil), + ErrPartitionExchangePartTable: mysql.Message("Table to exchange with partition is partitioned: '%-.64s'", nil), + ErrPartitionExchangeTempTable: mysql.Message("Table to exchange with partition is temporary: '%-.64s'", nil), + ErrPartitionInsteadOfSubpartition: mysql.Message("Subpartitioned table, use subpartition instead of partition", nil), + ErrUnknownPartition: mysql.Message("Unknown partition '%-.64s' in table '%-.64s'", nil), + ErrTablesDifferentMetadata: mysql.Message("Tables have different definitions", nil), + ErrRowDoesNotMatchPartition: mysql.Message("Found a row that does not match the partition", nil), + ErrBinlogCacheSizeGreaterThanMax: mysql.Message("Option binlogCacheSize (%d) is greater than maxBinlogCacheSize (%d); setting binlogCacheSize equal to maxBinlogCacheSize.", nil), + ErrWarnIndexNotApplicable: mysql.Message("Cannot use %-.64s access on index '%-.64s' due to type or collation conversion on field '%-.64s'", nil), + ErrPartitionExchangeForeignKey: mysql.Message("Table to exchange with partition has foreign key references: '%-.64s'", nil), + ErrNoSuchKeyValue: mysql.Message("Key value '%-.192s' was not found in table '%-.192s.%-.192s'", nil), + ErrRplInfoDataTooLong: mysql.Message("Data for column '%s' too long", nil), + ErrNetworkReadEventChecksumFailure: mysql.Message("Replication event checksum verification failed while reading from network.", nil), + ErrBinlogReadEventChecksumFailure: mysql.Message("Replication event checksum verification failed while reading from a log file.", nil), + ErrBinlogStmtCacheSizeGreaterThanMax: mysql.Message("Option binlogStmtCacheSize (%d) is greater than maxBinlogStmtCacheSize (%d); setting binlogStmtCacheSize equal to maxBinlogStmtCacheSize.", nil), + ErrCantUpdateTableInCreateTableSelect: mysql.Message("Can't update table '%-.192s' while '%-.192s' is being created.", nil), + ErrPartitionClauseOnNonpartitioned: mysql.Message("PARTITION () clause on non partitioned table", nil), + ErrRowDoesNotMatchGivenPartitionSet: mysql.Message("Found a row not matching the given partition set", nil), + ErrNoSuchPartitionunused: mysql.Message("partition '%-.64s' doesn't exist", nil), + ErrChangeRplInfoRepositoryFailure: mysql.Message("Failure while changing the type of replication repository: %s.", nil), + ErrWarningNotCompleteRollbackWithCreatedTempTable: mysql.Message("The creation of some temporary tables could not be rolled back.", nil), + ErrWarningNotCompleteRollbackWithDroppedTempTable: mysql.Message("Some temporary tables were dropped, but these operations could not be rolled back.", nil), + ErrMtsFeatureIsNotSupported: mysql.Message("%s is not supported in multi-threaded slave mode. %s", nil), + ErrMtsUpdatedDBsGreaterMax: mysql.Message("The number of modified databases exceeds the maximum %d; the database names will not be included in the replication event metadata.", nil), + ErrMtsCantParallel: mysql.Message("Cannot execute the current event group in the parallel mode. Encountered event %s, relay-log name %s, position %s which prevents execution of this event group in parallel mode. Reason: %s.", nil), + ErrMtsInconsistentData: mysql.Message("%s", nil), + ErrFulltextNotSupportedWithPartitioning: mysql.Message("FULLTEXT index is not supported for partitioned tables.", nil), + ErrDaInvalidConditionNumber: mysql.Message("Invalid condition number", nil), + ErrInsecurePlainText: mysql.Message("Sending passwords in plain text without SSL/TLS is extremely insecure.", nil), + ErrInsecureChangeMaster: mysql.Message("Storing MySQL user name or password information in the master.info repository is not secure and is therefore not recommended. Please see the MySQL Manual for more about this issue and possible alternatives.", nil), + ErrForeignDuplicateKeyWithChildInfo: mysql.Message("Foreign key constraint for table '%.192s', record '%-.192s' would lead to a duplicate entry in table '%.192s', key '%.192s'", nil), + ErrForeignDuplicateKeyWithoutChildInfo: mysql.Message("Foreign key constraint for table '%.192s', record '%-.192s' would lead to a duplicate entry in a child table", nil), + ErrSQLthreadWithSecureSlave: mysql.Message("Setting authentication options is not possible when only the Slave SQL Thread is being started.", nil), + ErrTableHasNoFt: mysql.Message("The table does not have FULLTEXT index to support this query", nil), + ErrVariableNotSettableInSfOrTrigger: mysql.Message("The system variable %.200s cannot be set in stored functions or triggers.", nil), + ErrVariableNotSettableInTransaction: mysql.Message("The system variable %.200s cannot be set when there is an ongoing transaction.", nil), + ErrGtidNextIsNotInGtidNextList: mysql.Message("The system variable @@SESSION.GTIDNEXT has the value %.200s, which is not listed in @@SESSION.GTIDNEXTLIST.", nil), + ErrCantChangeGtidNextInTransactionWhenGtidNextListIsNull: mysql.Message("When @@SESSION.GTIDNEXTLIST == NULL, the system variable @@SESSION.GTIDNEXT cannot change inside a transaction.", nil), + ErrSetStatementCannotInvokeFunction: mysql.Message("The statement 'SET %.200s' cannot invoke a stored function.", nil), + ErrGtidNextCantBeAutomaticIfGtidNextListIsNonNull: mysql.Message("The system variable @@SESSION.GTIDNEXT cannot be 'AUTOMATIC' when @@SESSION.GTIDNEXTLIST is non-NULL.", nil), + ErrSkippingLoggedTransaction: mysql.Message("Skipping transaction %.200s because it has already been executed and logged.", nil), + ErrMalformedGtidSetSpecification: mysql.Message("Malformed GTID set specification '%.200s'.", nil), + ErrMalformedGtidSetEncoding: mysql.Message("Malformed GTID set encoding.", nil), + ErrMalformedGtidSpecification: mysql.Message("Malformed GTID specification '%.200s'.", nil), + ErrGnoExhausted: mysql.Message("Impossible to generate Global Transaction Identifier: the integer component reached the maximal value. Restart the server with a new serverUuid.", nil), + ErrBadSlaveAutoPosition: mysql.Message("Parameters MASTERLOGFILE, MASTERLOGPOS, RELAYLOGFILE and RELAYLOGPOS cannot be set when MASTERAUTOPOSITION is active.", nil), + ErrAutoPositionRequiresGtidModeOn: mysql.Message("CHANGE MASTER TO MASTERAUTOPOSITION = 1 can only be executed when @@GLOBAL.GTIDMODE = ON.", nil), + ErrCantDoImplicitCommitInTrxWhenGtidNextIsSet: mysql.Message("Cannot execute statements with implicit commit inside a transaction when @@SESSION.GTIDNEXT != AUTOMATIC or @@SESSION.GTIDNEXTLIST != NULL.", nil), + ErrGtidMode2Or3RequiresEnforceGtidConsistencyOn: mysql.Message("@@GLOBAL.GTIDMODE = ON or UPGRADESTEP2 requires @@GLOBAL.ENFORCEGTIDCONSISTENCY = 1.", nil), + ErrGtidModeRequiresBinlog: mysql.Message("@@GLOBAL.GTIDMODE = ON or UPGRADESTEP1 or UPGRADESTEP2 requires --log-bin and --log-slave-updates.", nil), + ErrCantSetGtidNextToGtidWhenGtidModeIsOff: mysql.Message("@@SESSION.GTIDNEXT cannot be set to UUID:NUMBER when @@GLOBAL.GTIDMODE = OFF.", nil), + ErrCantSetGtidNextToAnonymousWhenGtidModeIsOn: mysql.Message("@@SESSION.GTIDNEXT cannot be set to ANONYMOUS when @@GLOBAL.GTIDMODE = ON.", nil), + ErrCantSetGtidNextListToNonNullWhenGtidModeIsOff: mysql.Message("@@SESSION.GTIDNEXTLIST cannot be set to a non-NULL value when @@GLOBAL.GTIDMODE = OFF.", nil), + ErrFoundGtidEventWhenGtidModeIsOff: mysql.Message("Found a GtidLogEvent or PreviousGtidsLogEvent when @@GLOBAL.GTIDMODE = OFF.", nil), + ErrGtidUnsafeNonTransactionalTable: mysql.Message("When @@GLOBAL.ENFORCEGTIDCONSISTENCY = 1, updates to non-transactional tables can only be done in either autocommitted statements or single-statement transactions, and never in the same statement as updates to transactional tables.", nil), + ErrGtidUnsafeCreateSelect: mysql.Message("CREATE TABLE ... SELECT is forbidden when @@GLOBAL.ENFORCEGTIDCONSISTENCY = 1.", nil), + ErrGtidUnsafeCreateDropTemporaryTableInTransaction: mysql.Message("When @@GLOBAL.ENFORCEGTIDCONSISTENCY = 1, the statements CREATE TEMPORARY TABLE and DROP TEMPORARY TABLE can be executed in a non-transactional context only, and require that AUTOCOMMIT = 1.", nil), + ErrGtidModeCanOnlyChangeOneStepAtATime: mysql.Message("The value of @@GLOBAL.GTIDMODE can only change one step at a time: OFF <-> UPGRADESTEP1 <-> UPGRADESTEP2 <-> ON. Also note that this value must be stepped up or down simultaneously on all servers; see the Manual for instructions.", nil), + ErrMasterHasPurgedRequiredGtids: mysql.Message("The slave is connecting using CHANGE MASTER TO MASTERAUTOPOSITION = 1, but the master has purged binary logs containing GTIDs that the slave requires.", nil), + ErrCantSetGtidNextWhenOwningGtid: mysql.Message("@@SESSION.GTIDNEXT cannot be changed by a client that owns a GTID. The client owns %s. Ownership is released on COMMIT or ROLLBACK.", nil), + ErrUnknownExplainFormat: mysql.Message("Unknown EXPLAIN format name: '%s'", nil), + ErrCantExecuteInReadOnlyTransaction: mysql.Message("Cannot execute statement in a READ ONLY transaction.", nil), + ErrTooLongTablePartitionComment: mysql.Message("Comment for table partition '%-.64s' is too long (max = %d)", nil), + ErrSlaveConfiguration: mysql.Message("Slave is not configured or failed to initialize properly. You must at least set --server-id to enable either a master or a slave. Additional error messages can be found in the MySQL error log.", nil), + ErrInnodbFtLimit: mysql.Message("InnoDB presently supports one FULLTEXT index creation at a time", nil), + ErrInnodbNoFtTempTable: mysql.Message("Cannot create FULLTEXT index on temporary InnoDB table", nil), + ErrInnodbFtWrongDocidColumn: mysql.Message("Column '%-.192s' is of wrong type for an InnoDB FULLTEXT index", nil), + ErrInnodbFtWrongDocidIndex: mysql.Message("Index '%-.192s' is of wrong type for an InnoDB FULLTEXT index", nil), + ErrInnodbOnlineLogTooBig: mysql.Message("Creating index '%-.192s' required more than 'innodbOnlineAlterLogMaxSize' bytes of modification log. Please try again.", nil), + ErrUnknownAlterAlgorithm: mysql.Message("Unknown ALGORITHM '%s'", nil), + ErrUnknownAlterLock: mysql.Message("Unknown LOCK type '%s'", nil), + ErrMtsChangeMasterCantRunWithGaps: mysql.Message("CHANGE MASTER cannot be executed when the slave was stopped with an error or killed in MTS mode. Consider using RESET SLAVE or START SLAVE UNTIL.", nil), + ErrMtsRecoveryFailure: mysql.Message("Cannot recover after SLAVE errored out in parallel execution mode. Additional error messages can be found in the MySQL error log.", nil), + ErrMtsResetWorkers: mysql.Message("Cannot clean up worker info tables. Additional error messages can be found in the MySQL error log.", nil), + ErrColCountDoesntMatchCorruptedV2: mysql.Message("Column count of %s.%s is wrong. Expected %d, found %d. The table is probably corrupted", nil), + ErrSlaveSilentRetryTransaction: mysql.Message("Slave must silently retry current transaction", nil), + ErrDiscardFkChecksRunning: mysql.Message("There is a foreign key check running on table '%-.192s'. Cannot discard the table.", nil), + ErrTableSchemaMismatch: mysql.Message("Schema mismatch (%s)", nil), + ErrTableInSystemTablespace: mysql.Message("Table '%-.192s' in system tablespace", nil), + ErrIoRead: mysql.Message("IO Read : (%d, %s) %s", nil), + ErrIoWrite: mysql.Message("IO Write : (%d, %s) %s", nil), + ErrTablespaceMissing: mysql.Message("Tablespace is missing for table '%-.192s'", nil), + ErrTablespaceExists: mysql.Message("Tablespace for table '%-.192s' exists. Please DISCARD the tablespace before IMPORT.", nil), + ErrTablespaceDiscarded: mysql.Message("Tablespace has been discarded for table '%-.192s'", nil), + ErrInternal: mysql.Message("Internal : %s", nil), + ErrInnodbImport: mysql.Message("ALTER TABLE '%-.192s' IMPORT TABLESPACE failed with error %d : '%s'", nil), + ErrInnodbIndexCorrupt: mysql.Message("Index corrupt: %s", nil), + ErrInvalidYearColumnLength: mysql.Message("Supports only YEAR or YEAR(4) column", nil), + ErrNotValidPassword: mysql.Message("Your password does not satisfy the current policy requirements", nil), + ErrMustChangePassword: mysql.Message("You must SET PASSWORD before executing this statement", nil), + ErrFkNoIndexChild: mysql.Message("Failed to add the foreign key constaint. Missing index for constraint '%s' in the foreign table '%s'", nil), + ErrFkNoIndexParent: mysql.Message("Failed to add the foreign key constaint. Missing index for constraint '%s' in the referenced table '%s'", nil), + ErrFkFailAddSystem: mysql.Message("Failed to add the foreign key constraint '%s' to system tables", nil), + ErrFkCannotOpenParent: mysql.Message("Failed to open the referenced table '%s'", nil), + ErrFkIncorrectOption: mysql.Message("Failed to add the foreign key constraint on table '%s'. Incorrect options in FOREIGN KEY constraint '%s'", nil), + ErrFkDupName: mysql.Message("Duplicate foreign key constraint name '%s'", nil), + ErrPasswordFormat: mysql.Message("The password hash doesn't have the expected format. Check if the correct password algorithm is being used with the PASSWORD() function.", nil), + ErrFkColumnCannotDrop: mysql.Message("Cannot drop column '%-.192s': needed in a foreign key constraint '%-.192s'", nil), + ErrFkColumnCannotDropChild: mysql.Message("Cannot drop column '%-.192s': needed in a foreign key constraint '%-.192s' of table '%-.192s'", nil), + ErrFkColumnNotNull: mysql.Message("Column '%-.192s' cannot be NOT NULL: needed in a foreign key constraint '%-.192s' SET NULL", nil), + ErrDupIndex: mysql.Message("Duplicate index '%-.64s' defined on the table '%-.64s.%-.64s'. This is deprecated and will be disallowed in a future release.", nil), + ErrFkColumnCannotChange: mysql.Message("Cannot change column '%-.192s': used in a foreign key constraint '%-.192s'", nil), + ErrFkColumnCannotChangeChild: mysql.Message("Cannot change column '%-.192s': used in a foreign key constraint '%-.192s' of table '%-.192s'", nil), + ErrFkCannotDeleteParent: mysql.Message("Cannot delete rows from table which is parent in a foreign key constraint '%-.192s' of table '%-.192s'", nil), + ErrMalformedPacket: mysql.Message("Malformed communication packet.", nil), + ErrReadOnlyMode: mysql.Message("Running in read-only mode", nil), + ErrGtidNextTypeUndefinedGroup: mysql.Message("When @@SESSION.GTIDNEXT is set to a GTID, you must explicitly set it again after a COMMIT or ROLLBACK. If you see this error message in the slave SQL thread, it means that a table in the current transaction is transactional on the master and non-transactional on the slave. In a client connection, it means that you executed SET @@SESSION.GTIDNEXT before a transaction and forgot to set @@SESSION.GTIDNEXT to a different identifier or to 'AUTOMATIC' after COMMIT or ROLLBACK. Current @@SESSION.GTIDNEXT is '%s'.", nil), + ErrVariableNotSettableInSp: mysql.Message("The system variable %.200s cannot be set in stored procedures.", nil), + ErrCantSetGtidPurgedWhenGtidModeIsOff: mysql.Message("@@GLOBAL.GTIDPURGED can only be set when @@GLOBAL.GTIDMODE = ON.", nil), + ErrCantSetGtidPurgedWhenGtidExecutedIsNotEmpty: mysql.Message("@@GLOBAL.GTIDPURGED can only be set when @@GLOBAL.GTIDEXECUTED is empty.", nil), + ErrCantSetGtidPurgedWhenOwnedGtidsIsNotEmpty: mysql.Message("@@GLOBAL.GTIDPURGED can only be set when there are no ongoing transactions (not even in other clients).", nil), + ErrGtidPurgedWasChanged: mysql.Message("@@GLOBAL.GTIDPURGED was changed from '%s' to '%s'.", nil), + ErrGtidExecutedWasChanged: mysql.Message("@@GLOBAL.GTIDEXECUTED was changed from '%s' to '%s'.", nil), + ErrBinlogStmtModeAndNoReplTables: mysql.Message("Cannot execute statement: impossible to write to binary log since BINLOGFORMAT = STATEMENT, and both replicated and non replicated tables are written to.", nil), + ErrAlterOperationNotSupported: mysql.Message("%s is not supported for this operation. Try %s.", nil), + ErrAlterOperationNotSupportedReason: mysql.Message("%s is not supported. Reason: %s. Try %s.", nil), + ErrAlterOperationNotSupportedReasonCopy: mysql.Message("COPY algorithm requires a lock", nil), + ErrAlterOperationNotSupportedReasonPartition: mysql.Message("Partition specific operations do not yet support LOCK/ALGORITHM", nil), + ErrAlterOperationNotSupportedReasonFkRename: mysql.Message("Columns participating in a foreign key are renamed", nil), + ErrAlterOperationNotSupportedReasonColumnType: mysql.Message("Cannot change column type INPLACE", nil), + ErrAlterOperationNotSupportedReasonFkCheck: mysql.Message("Adding foreign keys needs foreignKeyChecks=OFF", nil), + ErrAlterOperationNotSupportedReasonIgnore: mysql.Message("Creating unique indexes with IGNORE requires COPY algorithm to remove duplicate rows", nil), + ErrAlterOperationNotSupportedReasonNopk: mysql.Message("Dropping a primary key is not allowed without also adding a new primary key", nil), + ErrAlterOperationNotSupportedReasonAutoinc: mysql.Message("Adding an auto-increment column requires a lock", nil), + ErrAlterOperationNotSupportedReasonHiddenFts: mysql.Message("Cannot replace hidden FTSDOCID with a user-visible one", nil), + ErrAlterOperationNotSupportedReasonChangeFts: mysql.Message("Cannot drop or rename FTSDOCID", nil), + ErrAlterOperationNotSupportedReasonFts: mysql.Message("Fulltext index creation requires a lock", nil), + ErrSQLSlaveSkipCounterNotSettableInGtidMode: mysql.Message("sqlSlaveSkipCounter can not be set when the server is running with @@GLOBAL.GTIDMODE = ON. Instead, for each transaction that you want to skip, generate an empty transaction with the same GTID as the transaction", nil), + ErrDupUnknownInIndex: mysql.Message("Duplicate entry for key '%-.192s'", nil), + ErrIdentCausesTooLongPath: mysql.Message("Long database name and identifier for object resulted in path length exceeding %d characters. Path: '%s'.", nil), + ErrAlterOperationNotSupportedReasonNotNull: mysql.Message("cannot silently convert NULL values, as required in this SQLMODE", nil), + ErrMustChangePasswordLogin: mysql.Message("Your password has expired. To log in you must change it using a client that supports expired passwords.", nil), + ErrRowInWrongPartition: mysql.Message("Found a row in wrong partition %s", nil), + ErrGeneratedColumnFunctionIsNotAllowed: mysql.Message("Expression of generated column '%s' contains a disallowed function.", nil), + ErrUnsupportedAlterInplaceOnVirtualColumn: mysql.Message("INPLACE ADD or DROP of virtual columns cannot be combined with other ALTER TABLE actions.", nil), + ErrWrongFKOptionForGeneratedColumn: mysql.Message("Cannot define foreign key with %s clause on a generated column.", nil), + ErrBadGeneratedColumn: mysql.Message("The value specified for generated column '%s' in table '%s' is not allowed.", nil), + ErrUnsupportedOnGeneratedColumn: mysql.Message("'%s' is not supported for generated columns.", nil), + ErrGeneratedColumnNonPrior: mysql.Message("Generated column can refer only to generated columns defined prior to it.", nil), + ErrDependentByGeneratedColumn: mysql.Message("Column '%s' has a generated column dependency.", nil), + ErrGeneratedColumnRefAutoInc: mysql.Message("Generated column '%s' cannot refer to auto-increment column.", nil), + ErrWarnConflictingHint: mysql.Message("Hint %s is ignored as conflicting/duplicated.", nil), + ErrInvalidFieldSize: mysql.Message("Invalid size for column '%s'.", nil), + ErrInvalidArgumentForLogarithm: mysql.Message("Invalid argument for logarithm", nil), + ErrIncorrectType: mysql.Message("Incorrect type for argument %s in function %s.", nil), + ErrInvalidJSONData: mysql.Message("Invalid JSON data provided to function %s: %s", nil), + ErrInvalidJSONText: mysql.Message("Invalid JSON text: %-.192s", nil), + ErrInvalidJSONPath: mysql.Message("Invalid JSON path expression %s.", nil), + ErrInvalidTypeForJSON: mysql.Message("Invalid data type for JSON data in argument %d to function %s; a JSON string or JSON type is required.", nil), + ErrInvalidJSONPathWildcard: mysql.Message("In this situation, path expressions may not contain the * and ** tokens.", nil), + ErrInvalidJSONContainsPathType: mysql.Message("The second argument can only be either 'one' or 'all'.", nil), + ErrJSONUsedAsKey: mysql.Message("JSON column '%-.192s' cannot be used in key specification.", nil), + ErrJSONDocumentNULLKey: mysql.Message("JSON documents may not contain NULL member names.", nil), + ErrSecureTransportRequired: mysql.Message("Connections using insecure transport are prohibited while --require_secure_transport=ON.", nil), + ErrBadUser: mysql.Message("User %s does not exist.", nil), + ErrUserAlreadyExists: mysql.Message("User %s already exists.", nil), + ErrInvalidJSONPathArrayCell: mysql.Message("A path expression is not a path to a cell in an array.", nil), + ErrInvalidEncryptionOption: mysql.Message("Invalid encryption option.", nil), + ErrWindowNoSuchWindow: mysql.Message("Window name '%s' is not defined.", nil), + ErrWindowCircularityInWindowGraph: mysql.Message("There is a circularity in the window dependency graph.", nil), + ErrWindowNoChildPartitioning: mysql.Message("A window which depends on another cannot define partitioning.", nil), + ErrWindowNoInherentFrame: mysql.Message("Window '%s' has a frame definition, so cannot be referenced by another window.", nil), + ErrWindowNoRedefineOrderBy: mysql.Message("Window '%s' cannot inherit '%s' since both contain an ORDER BY clause.", nil), + ErrWindowFrameStartIllegal: mysql.Message("Window '%s': frame start cannot be UNBOUNDED FOLLOWING.", nil), + ErrWindowFrameEndIllegal: mysql.Message("Window '%s': frame end cannot be UNBOUNDED PRECEDING.", nil), + ErrWindowFrameIllegal: mysql.Message("Window '%s': frame start or end is negative, NULL or of non-integral type", nil), + ErrWindowRangeFrameOrderType: mysql.Message("Window '%s' with RANGE N PRECEDING/FOLLOWING frame requires exactly one ORDER BY expression, of numeric or temporal type", nil), + ErrWindowRangeFrameTemporalType: mysql.Message("Window '%s' with RANGE frame has ORDER BY expression of datetime type. Only INTERVAL bound value allowed.", nil), + ErrWindowRangeFrameNumericType: mysql.Message("Window '%s' with RANGE frame has ORDER BY expression of numeric type, INTERVAL bound value not allowed.", nil), + ErrWindowRangeBoundNotConstant: mysql.Message("Window '%s' has a non-constant frame bound.", nil), + ErrWindowDuplicateName: mysql.Message("Window '%s' is defined twice.", nil), + ErrWindowIllegalOrderBy: mysql.Message("Window '%s': ORDER BY or PARTITION BY uses legacy position indication which is not supported, use expression.", nil), + ErrWindowInvalidWindowFuncUse: mysql.Message("You cannot use the window function '%s' in this context.'", nil), + ErrWindowInvalidWindowFuncAliasUse: mysql.Message("You cannot use the alias '%s' of an expression containing a window function in this context.'", nil), + ErrWindowNestedWindowFuncUseInWindowSpec: mysql.Message("You cannot nest a window function in the specification of window '%s'.", nil), + ErrWindowRowsIntervalUse: mysql.Message("Window '%s': INTERVAL can only be used with RANGE frames.", nil), + ErrWindowNoGroupOrderUnused: mysql.Message("ASC or DESC with GROUP BY isn't allowed with window functions; put ASC or DESC in ORDER BY", nil), + ErrWindowExplainJSON: mysql.Message("To get information about window functions use EXPLAIN FORMAT=JSON", nil), + ErrWindowFunctionIgnoresFrame: mysql.Message("Window function '%s' ignores the frame clause of window '%s' and aggregates over the whole partition", nil), + ErrRoleNotGranted: mysql.Message("%s is is not granted to %s", nil), + ErrMaxExecTimeExceeded: mysql.Message("Query execution was interrupted, max_execution_time exceeded.", nil), + ErrLockAcquireFailAndNoWaitSet: mysql.Message("Statement aborted because lock(s) could not be acquired immediately and NOWAIT is set.", nil), + ErrDataTruncatedFunctionalIndex: mysql.Message("Data truncated for functional index '%s' at row %d", nil), + ErrDataOutOfRangeFunctionalIndex: mysql.Message("Value is out of range for functional index '%s' at row %d", nil), + ErrFunctionalIndexOnJSONOrGeometryFunction: mysql.Message("Cannot create a functional index on a function that returns a JSON or GEOMETRY value", nil), + ErrFunctionalIndexRefAutoIncrement: mysql.Message("Functional index '%s' cannot refer to an auto-increment column", nil), + ErrCannotDropColumnFunctionalIndex: mysql.Message("Cannot drop column '%s' because it is used by a functional index. In order to drop the column, you must remove the functional index", nil), + ErrFunctionalIndexPrimaryKey: mysql.Message("The primary key cannot be a functional index", nil), + ErrFunctionalIndexOnLob: mysql.Message("Cannot create a functional index on an expression that returns a BLOB or TEXT. Please consider using CAST", nil), + ErrFunctionalIndexFunctionIsNotAllowed: mysql.Message("Expression of functional index '%s' contains a disallowed function", nil), + ErrFulltextFunctionalIndex: mysql.Message("Fulltext functional index is not supported", nil), + ErrSpatialFunctionalIndex: mysql.Message("Spatial functional index is not supported", nil), + ErrWrongKeyColumnFunctionalIndex: mysql.Message("The used storage engine cannot index the expression '%s'", nil), + ErrFunctionalIndexOnField: mysql.Message("Functional index on a column is not supported. Consider using a regular index instead", nil), + ErrFKIncompatibleColumns: mysql.Message("Referencing column '%s' in foreign key constraint '%s' are incompatible", nil), + ErrFunctionalIndexRowValueIsNotAllowed: mysql.Message("Expression of functional index '%s' cannot refer to a row value", nil), + ErrDependentByFunctionalIndex: mysql.Message("Column '%s' has a functional index dependency and cannot be dropped or renamed", nil), + ErrInvalidJSONValueForFuncIndex: mysql.Message("Invalid JSON value for CAST for functional index '%s'", nil), + ErrJSONValueOutOfRangeForFuncIndex: mysql.Message("Out of range JSON value for CAST for functional index '%s'", nil), + ErrFunctionalIndexDataIsTooLong: mysql.Message("Data too long for functional index '%s'", nil), + ErrFunctionalIndexNotApplicable: mysql.Message("Cannot use functional index '%s' due to type or collation conversion", nil), // MariaDB errors. - ErrOnlyOneDefaultPartionAllowed: "Only one DEFAULT partition allowed", - ErrWrongPartitionTypeExpectedSystemTime: "Wrong partitioning type, expected type: `SYSTEM_TIME`", - ErrSystemVersioningWrongPartitions: "Wrong Partitions: must have at least one HISTORY and exactly one last CURRENT", - ErrSequenceRunOut: "Sequence '%-.64s.%-.64s' has run out", - ErrSequenceInvalidData: "Sequence '%-.64s.%-.64s' values are conflicting", - ErrSequenceAccessFail: "Sequence '%-.64s.%-.64s' access error", - ErrNotSequence: "'%-.64s.%-.64s' is not a SEQUENCE", - ErrUnknownSequence: "Unknown SEQUENCE: '%-.300s'", - ErrWrongInsertIntoSequence: "Wrong INSERT into a SEQUENCE. One can only do single table INSERT into a sequence object (like with mysqldump). If you want to change the SEQUENCE, use ALTER SEQUENCE instead.", - ErrSequenceInvalidTableStructure: "Sequence '%-.64s.%-.64s' table structure is invalid (%s)", + ErrOnlyOneDefaultPartionAllowed: mysql.Message("Only one DEFAULT partition allowed", nil), + ErrWrongPartitionTypeExpectedSystemTime: mysql.Message("Wrong partitioning type, expected type: `SYSTEM_TIME`", nil), + ErrSystemVersioningWrongPartitions: mysql.Message("Wrong Partitions: must have at least one HISTORY and exactly one last CURRENT", nil), + ErrSequenceRunOut: mysql.Message("Sequence '%-.64s.%-.64s' has run out", nil), + ErrSequenceInvalidData: mysql.Message("Sequence '%-.64s.%-.64s' values are conflicting", nil), + ErrSequenceAccessFail: mysql.Message("Sequence '%-.64s.%-.64s' access error", nil), + ErrNotSequence: mysql.Message("'%-.64s.%-.64s' is not a SEQUENCE", nil), + ErrUnknownSequence: mysql.Message("Unknown SEQUENCE: '%-.300s'", nil), + ErrWrongInsertIntoSequence: mysql.Message("Wrong INSERT into a SEQUENCE. One can only do single table INSERT into a sequence object (like with mysqldump). If you want to change the SEQUENCE, use ALTER SEQUENCE instead.", nil), + ErrSequenceInvalidTableStructure: mysql.Message("Sequence '%-.64s.%-.64s' table structure is invalid (%s)", nil), // TiDB errors. - ErrMemExceedThreshold: "%s holds %dB memory, exceeds threshold %dB.%s", - ErrForUpdateCantRetry: "[%d] can not retry select for update statement", - ErrAdminCheckTable: "TiDB admin check table failed.", - ErrTxnTooLarge: "Transaction is too large, size: %d", - ErrWriteConflictInTiDB: "Write conflict, txnStartTS %d is stale", - ErrInvalidPluginID: "Wrong plugin id: %s, valid plugin id is [name]-[version], both name and version should not contain '-'", - ErrInvalidPluginManifest: "Cannot read plugin %s's manifest", - ErrInvalidPluginName: "Plugin load with %s but got wrong name %s", - ErrInvalidPluginVersion: "Plugin load with %s but got %s", - ErrDuplicatePlugin: "Plugin [%s] is redeclared", - ErrInvalidPluginSysVarName: "Plugin %s's sysVar %s must start with its plugin name %s", - ErrRequireVersionCheckFail: "Plugin %s require %s be %v but got %v", - ErrUnsupportedReloadPlugin: "Plugin %s isn't loaded so cannot be reloaded", - ErrUnsupportedReloadPluginVar: "Reload plugin with different sysVar is unsupported %v", - ErrTableLocked: "Table '%s' was locked in %s by %v", - ErrNotExist: "Error: key not exist", - ErrTxnRetryable: "Error: KV error safe to retry %s ", - ErrCannotSetNilValue: "can not set nil value", - ErrInvalidTxn: "invalid transaction", - ErrEntryTooLarge: "entry too large, the max entry size is %d, the size of data is %d", - ErrNotImplemented: "not implemented", - ErrInfoSchemaExpired: "Information schema is out of date: schema failed to update in 1 lease, please make sure TiDB can connect to TiKV", - ErrInfoSchemaChanged: "Information schema is changed during the execution of the statement(for example, table definition may be updated by other DDL ran in parallel). If you see this error often, try increasing `tidb_max_delta_schema_count`", - ErrBadNumber: "Bad Number", - ErrCastAsSignedOverflow: "Cast to signed converted positive out-of-range integer to it's negative complement", - ErrCastNegIntAsUnsigned: "Cast to unsigned converted negative integer to it's positive complement", - ErrInvalidYearFormat: "invalid year format", - ErrInvalidYear: "invalid year", - ErrIncorrectDatetimeValue: "Incorrect datetime value: '%s'", - ErrInvalidTimeFormat: "invalid time format: '%v'", - ErrInvalidWeekModeFormat: "invalid week mode format: '%v'", - ErrFieldGetDefaultFailed: "Field '%s' get default value fail", - ErrIndexOutBound: "Index column %s offset out of bound, offset: %d, row: %v", - ErrUnsupportedOp: "operation not supported", - ErrRowNotFound: "can not find the row: %s", - ErrTableStateCantNone: "table %s can't be in none state", - ErrColumnStateCantNone: "column %s can't be in none state", - ErrColumnStateNonPublic: "can not use non-public column", - ErrIndexStateCantNone: "index %s can't be in none state", - ErrInvalidRecordKey: "invalid record key", - ErrUnsupportedValueForVar: "variable '%s' does not yet support value: %s", - ErrUnsupportedIsolationLevel: "The isolation level '%s' is not supported. Set tidb_skip_isolation_level_check=1 to skip this error", - ErrInvalidDDLWorker: "Invalid DDL worker", - ErrUnsupportedDDLOperation: "Unsupported %s", - ErrNotOwner: "TiDB server is not a DDL owner", - ErrCantDecodeIndex: "Cannot decode index value, because %s", - ErrInvalidDDLJob: "Invalid DDL job", - ErrInvalidDDLJobFlag: "Invalid DDL job flag", - ErrWaitReorgTimeout: "Timeout waiting for data reorganization", - ErrInvalidStoreVersion: "Invalid storage current version: %d", - ErrUnknownTypeLength: "Unknown length for type %d", - ErrUnknownFractionLength: "Unknown length for type %d and fraction %d", - ErrInvalidDDLJobVersion: "Version %d of DDL job is greater than current one: %d", - ErrInvalidSplitRegionRanges: "Failed to split region ranges", - ErrReorgPanic: "Reorg worker panic", - ErrInvalidDDLState: "Invalid %s state: %v", - ErrCancelledDDLJob: "Cancelled DDL job", - ErrRepairTable: "Failed to repair table: %s", - ErrLoadPrivilege: "Load privilege table fail: %s", - ErrInvalidPrivilegeType: "unknown privilege type %s", - ErrUnknownFieldType: "unknown field type", - ErrInvalidSequence: "invalid sequence", - ErrInvalidType: "invalid type", - ErrCantGetValidID: "Cannot get a valid auto-ID when retrying the statement", - ErrCantSetToNull: "cannot set variable to null", - ErrSnapshotTooOld: "snapshot is older than GC safe point %s", - ErrInvalidTableID: "invalid TableID", - ErrInvalidAutoRandom: "Invalid auto random: %s", - ErrInvalidHashKeyFlag: "invalid encoded hash key flag", - ErrInvalidListIndex: "invalid list index", - ErrInvalidListMetaData: "invalid list meta data", - ErrWriteOnSnapshot: "write on snapshot", - ErrInvalidKey: "invalid key", - ErrInvalidIndexKey: "invalid index key", - ErrDataInConsistent: "data isn't equal", - ErrDDLJobNotFound: "DDL Job:%v not found", - ErrCancelFinishedDDLJob: "This job:%v is finished, so can't be cancelled", - ErrCannotCancelDDLJob: "This job:%v is almost finished, can't be cancelled now", - ErrUnknownAllocatorType: "Invalid allocator type", - ErrAutoRandReadFailed: "Failed to read auto-random value from storage engine", - ErrInvalidIncrementAndOffset: "Invalid auto_increment settings: auto_increment_increment: %d, auto_increment_offset: %d, both of them must be in range [1..65535]", + ErrMemExceedThreshold: mysql.Message("%s holds %dB memory, exceeds threshold %dB.%s", nil), + ErrForUpdateCantRetry: mysql.Message("[%d] can not retry select for update statement", nil), + ErrAdminCheckTable: mysql.Message("TiDB admin check table failed.", nil), + ErrTxnTooLarge: mysql.Message("Transaction is too large, size: %d", nil), + ErrWriteConflictInTiDB: mysql.Message("Write conflict, txnStartTS %d is stale", nil), + ErrInvalidPluginID: mysql.Message("Wrong plugin id: %s, valid plugin id is [name]-[version], both name and version should not contain '-'", nil), + ErrInvalidPluginManifest: mysql.Message("Cannot read plugin %s's manifest", nil), + ErrInvalidPluginName: mysql.Message("Plugin load with %s but got wrong name %s", nil), + ErrInvalidPluginVersion: mysql.Message("Plugin load with %s but got %s", nil), + ErrDuplicatePlugin: mysql.Message("Plugin [%s] is redeclared", nil), + ErrInvalidPluginSysVarName: mysql.Message("Plugin %s's sysVar %s must start with its plugin name %s", nil), + ErrRequireVersionCheckFail: mysql.Message("Plugin %s require %s be %v but got %v", nil), + ErrUnsupportedReloadPlugin: mysql.Message("Plugin %s isn't loaded so cannot be reloaded", nil), + ErrUnsupportedReloadPluginVar: mysql.Message("Reload plugin with different sysVar is unsupported %v", nil), + ErrTableLocked: mysql.Message("Table '%s' was locked in %s by %v", nil), + ErrNotExist: mysql.Message("Error: key not exist", nil), + ErrTxnRetryable: mysql.Message("Error: KV error safe to retry %s ", nil), + ErrCannotSetNilValue: mysql.Message("can not set nil value", nil), + ErrInvalidTxn: mysql.Message("invalid transaction", nil), + ErrEntryTooLarge: mysql.Message("entry too large, the max entry size is %d, the size of data is %d", nil), + ErrNotImplemented: mysql.Message("not implemented", nil), + ErrInfoSchemaExpired: mysql.Message("Information schema is out of date: schema failed to update in 1 lease, please make sure TiDB can connect to TiKV", nil), + ErrInfoSchemaChanged: mysql.Message("Information schema is changed during the execution of the statement(for example, table definition may be updated by other DDL ran in parallel). If you see this error often, try increasing `tidb_max_delta_schema_count`", nil), + ErrBadNumber: mysql.Message("Bad Number", nil), + ErrCastAsSignedOverflow: mysql.Message("Cast to signed converted positive out-of-range integer to it's negative complement", nil), + ErrCastNegIntAsUnsigned: mysql.Message("Cast to unsigned converted negative integer to it's positive complement", nil), + ErrInvalidYearFormat: mysql.Message("invalid year format", nil), + ErrInvalidYear: mysql.Message("invalid year", nil), + ErrIncorrectDatetimeValue: mysql.Message("Incorrect datetime value: '%s'", nil), + ErrInvalidTimeFormat: mysql.Message("invalid time format: '%v'", nil), + ErrInvalidWeekModeFormat: mysql.Message("invalid week mode format: '%v'", nil), + ErrFieldGetDefaultFailed: mysql.Message("Field '%s' get default value fail", nil), + ErrIndexOutBound: mysql.Message("Index column %s offset out of bound, offset: %d, row: %v", nil), + ErrUnsupportedOp: mysql.Message("operation not supported", nil), + ErrRowNotFound: mysql.Message("can not find the row: %s", nil), + ErrTableStateCantNone: mysql.Message("table %s can't be in none state", nil), + ErrColumnStateCantNone: mysql.Message("column %s can't be in none state", nil), + ErrColumnStateNonPublic: mysql.Message("can not use non-public column", nil), + ErrIndexStateCantNone: mysql.Message("index %s can't be in none state", nil), + ErrInvalidRecordKey: mysql.Message("invalid record key", nil), + ErrUnsupportedValueForVar: mysql.Message("variable '%s' does not yet support value: %s", nil), + ErrUnsupportedIsolationLevel: mysql.Message("The isolation level '%s' is not supported. Set tidb_skip_isolation_level_check=1 to skip this error", nil), + ErrInvalidDDLWorker: mysql.Message("Invalid DDL worker", nil), + ErrUnsupportedDDLOperation: mysql.Message("Unsupported %s", nil), + ErrNotOwner: mysql.Message("TiDB server is not a DDL owner", nil), + ErrCantDecodeIndex: mysql.Message("Cannot decode index value, because %s", nil), + ErrInvalidDDLJob: mysql.Message("Invalid DDL job", nil), + ErrInvalidDDLJobFlag: mysql.Message("Invalid DDL job flag", nil), + ErrWaitReorgTimeout: mysql.Message("Timeout waiting for data reorganization", nil), + ErrInvalidStoreVersion: mysql.Message("Invalid storage current version: %d", nil), + ErrUnknownTypeLength: mysql.Message("Unknown length for type %d", nil), + ErrUnknownFractionLength: mysql.Message("Unknown length for type %d and fraction %d", nil), + ErrInvalidDDLJobVersion: mysql.Message("Version %d of DDL job is greater than current one: %d", nil), + ErrInvalidSplitRegionRanges: mysql.Message("Failed to split region ranges", nil), + ErrReorgPanic: mysql.Message("Reorg worker panic", nil), + ErrInvalidDDLState: mysql.Message("Invalid %s state: %v", nil), + ErrCancelledDDLJob: mysql.Message("Cancelled DDL job", nil), + ErrRepairTable: mysql.Message("Failed to repair table: %s", nil), + ErrLoadPrivilege: mysql.Message("Load privilege table fail: %s", nil), + ErrInvalidPrivilegeType: mysql.Message("unknown privilege type %s", nil), + ErrUnknownFieldType: mysql.Message("unknown field type", nil), + ErrInvalidSequence: mysql.Message("invalid sequence", nil), + ErrInvalidType: mysql.Message("invalid type", nil), + ErrCantGetValidID: mysql.Message("Cannot get a valid auto-ID when retrying the statement", nil), + ErrCantSetToNull: mysql.Message("cannot set variable to null", nil), + ErrSnapshotTooOld: mysql.Message("snapshot is older than GC safe point %s", nil), + ErrInvalidTableID: mysql.Message("invalid TableID", nil), + ErrInvalidAutoRandom: mysql.Message("Invalid auto random: %s", nil), + ErrInvalidHashKeyFlag: mysql.Message("invalid encoded hash key flag", nil), + ErrInvalidListIndex: mysql.Message("invalid list index", nil), + ErrInvalidListMetaData: mysql.Message("invalid list meta data", nil), + ErrWriteOnSnapshot: mysql.Message("write on snapshot", nil), + ErrInvalidKey: mysql.Message("invalid key", nil), + ErrInvalidIndexKey: mysql.Message("invalid index key", nil), + ErrDataInConsistent: mysql.Message("data isn't equal", nil), + ErrDDLJobNotFound: mysql.Message("DDL Job:%v not found", nil), + ErrCancelFinishedDDLJob: mysql.Message("This job:%v is finished, so can't be cancelled", nil), + ErrCannotCancelDDLJob: mysql.Message("This job:%v is almost finished, can't be cancelled now", nil), + ErrUnknownAllocatorType: mysql.Message("Invalid allocator type", nil), + ErrAutoRandReadFailed: mysql.Message("Failed to read auto-random value from storage engine", nil), + ErrInvalidIncrementAndOffset: mysql.Message("Invalid auto_increment settings: auto_increment_increment: %d, auto_increment_offset: %d, both of them must be in range [1..65535]", nil), - ErrWarnOptimizerHintInvalidInteger: "integer value is out of range in '%s'", - ErrWarnOptimizerHintUnsupportedHint: "Optimizer hint %s is not supported by TiDB and is ignored", - ErrWarnOptimizerHintInvalidToken: "Cannot use %s '%s' (tok = %d) in an optimizer hint", - ErrWarnMemoryQuotaOverflow: "Max value of MEMORY_QUOTA is %d bytes, ignore this invalid limit", - ErrWarnOptimizerHintParseError: "Optimizer hint syntax error at %v", + ErrWarnOptimizerHintInvalidInteger: mysql.Message("integer value is out of range in '%s'", nil), + ErrWarnOptimizerHintUnsupportedHint: mysql.Message("Optimizer hint %s is not supported by TiDB and is ignored", nil), + ErrWarnOptimizerHintInvalidToken: mysql.Message("Cannot use %s '%s' (tok = %d) in an optimizer hint", nil), + ErrWarnMemoryQuotaOverflow: mysql.Message("Max value of MEMORY_QUOTA is %d bytes, ignore this invalid limit", nil), + ErrWarnOptimizerHintParseError: mysql.Message("Optimizer hint syntax error at %v", nil), - ErrSequenceUnsupportedTableOption: "Unsupported sequence table-option %s", - ErrColumnTypeUnsupportedNextValue: "Unsupported sequence default value for column type '%s'", - ErrAddColumnWithSequenceAsDefault: "Unsupported using sequence as default value in add column '%s'", - ErrUnsupportedType: "Unsupported type %T", - ErrAnalyzeMissIndex: "Index '%s' in field list does not exist in table '%s'", - ErrCartesianProductUnsupported: "Cartesian product is unsupported", - ErrPreparedStmtNotFound: "Prepared statement not found", - ErrWrongParamCount: "Wrong parameter count", - ErrSchemaChanged: "Schema has changed", - ErrUnknownPlan: "Unknown plan", - ErrPrepareMulti: "Can not prepare multiple statements", - ErrPrepareDDL: "Can not prepare DDL statements with parameters", - ErrResultIsEmpty: "Result is empty", - ErrBuildExecutor: "Failed to build executor", - ErrBatchInsertFail: "Batch insert failed, please clean the table and try again.", - ErrGetStartTS: "Can not get start ts", - ErrPrivilegeCheckFail: "privilege check fail", // this error message should begin lowercased to be compatible with the test - ErrInvalidWildCard: "Wildcard fields without any table name appears in wrong place", - ErrMixOfGroupFuncAndFieldsIncompatible: "In aggregated query without GROUP BY, expression #%d of SELECT list contains nonaggregated column '%s'; this is incompatible with sql_mode=only_full_group_by", - ErrUnsupportedSecondArgumentType: "JSON_OBJECTAGG: unsupported second argument type %v", - ErrLockExpire: "TTL manager has timed out, pessimistic locks may expire, please commit or rollback this transaction", + ErrSequenceUnsupportedTableOption: mysql.Message("Unsupported sequence table-option %s", nil), + ErrColumnTypeUnsupportedNextValue: mysql.Message("Unsupported sequence default value for column type '%s'", nil), + ErrAddColumnWithSequenceAsDefault: mysql.Message("Unsupported using sequence as default value in add column '%s'", nil), + ErrUnsupportedType: mysql.Message("Unsupported type %T", nil), + ErrAnalyzeMissIndex: mysql.Message("Index '%s' in field list does not exist in table '%s'", nil), + ErrCartesianProductUnsupported: mysql.Message("Cartesian product is unsupported", nil), + ErrPreparedStmtNotFound: mysql.Message("Prepared statement not found", nil), + ErrWrongParamCount: mysql.Message("Wrong parameter count", nil), + ErrSchemaChanged: mysql.Message("Schema has changed", nil), + ErrUnknownPlan: mysql.Message("Unknown plan", nil), + ErrPrepareMulti: mysql.Message("Can not prepare multiple statements", nil), + ErrPrepareDDL: mysql.Message("Can not prepare DDL statements with parameters", nil), + ErrResultIsEmpty: mysql.Message("Result is empty", nil), + ErrBuildExecutor: mysql.Message("Failed to build executor", nil), + ErrBatchInsertFail: mysql.Message("Batch insert failed, please clean the table and try again.", nil), + ErrGetStartTS: mysql.Message("Can not get start ts", nil), + ErrPrivilegeCheckFail: mysql.Message("privilege check fail", nil), // this error message should begin lowercased to be compatible with the test + ErrInvalidWildCard: mysql.Message("Wildcard fields without any table name appears in wrong place", nil), + ErrMixOfGroupFuncAndFieldsIncompatible: mysql.Message("In aggregated query without GROUP BY, expression #%d of SELECT list contains nonaggregated column '%s'; this is incompatible with sql_mode=only_full_group_by", nil), + ErrUnsupportedSecondArgumentType: mysql.Message("JSON_OBJECTAGG: unsupported second argument type %v", nil), + ErrLockExpire: mysql.Message("TTL manager has timed out, pessimistic locks may expire, please commit or rollback this transaction", nil), - ErrBRIEBackupFailed: "Backup failed: %s", - ErrBRIERestoreFailed: "Restore failed: %s", - ErrBRIEImportFailed: "Import failed: %s", - ErrBRIEExportFailed: "Export failed: %s", + ErrBRIEBackupFailed: mysql.Message("Backup failed: %s", nil), + ErrBRIERestoreFailed: mysql.Message("Restore failed: %s", nil), + ErrBRIEImportFailed: mysql.Message("Import failed: %s", nil), + ErrBRIEExportFailed: mysql.Message("Export failed: %s", nil), // TiKV/PD errors. - ErrPDServerTimeout: "PD server timeout", - ErrTiKVServerTimeout: "TiKV server timeout", - ErrTiKVServerBusy: "TiKV server is busy", - ErrResolveLockTimeout: "Resolve lock timeout", - ErrRegionUnavailable: "Region is unavailable", - ErrGCTooEarly: "GC life time is shorter than transaction duration, transaction starts at %v, GC safe point is %v", - ErrWriteConflict: "Write conflict, txnStartTS=%d, conflictStartTS=%d, conflictCommitTS=%d, key=%s", - ErrTiKVStoreLimit: "Store token is up to the limit, store id = %d", - ErrPrometheusAddrIsNotSet: "Prometheus address is not set in PD and etcd", - ErrTiKVStaleCommand: "TiKV server reports stale command", + ErrPDServerTimeout: mysql.Message("PD server timeout", nil), + ErrTiKVServerTimeout: mysql.Message("TiKV server timeout", nil), + ErrTiKVServerBusy: mysql.Message("TiKV server is busy", nil), + ErrResolveLockTimeout: mysql.Message("Resolve lock timeout", nil), + ErrRegionUnavailable: mysql.Message("Region is unavailable", nil), + ErrGCTooEarly: mysql.Message("GC life time is shorter than transaction duration, transaction starts at %v, GC safe point is %v", nil), + ErrWriteConflict: mysql.Message("Write conflict, txnStartTS=%d, conflictStartTS=%d, conflictCommitTS=%d, key=%s", nil), + ErrTiKVStoreLimit: mysql.Message("Store token is up to the limit, store id = %d", nil), + ErrPrometheusAddrIsNotSet: mysql.Message("Prometheus address is not set in PD and etcd", nil), + ErrTiKVStaleCommand: mysql.Message("TiKV server reports stale command", nil), } diff --git a/errno/logredaction.md b/errno/logredaction.md new file mode 100644 index 0000000000000..3009b19f87f46 --- /dev/null +++ b/errno/logredaction.md @@ -0,0 +1,33 @@ +# Log Redaction + +Background: + +Issue: https://github.com/pingcap/tidb/issues/18566 + +Our database may store some sensitive information, such as customer ID number, credit card number, etc. This sensitive information sometimes exists in the error message in some manners like a form of key-value, and this information will be printed in the log along with the error. + +Some of our users do not want this sensitive information to spread along with logs. Therefore, our requirement is to provide a switch which can hide these possible sensitive information when printing the log. + + +For example, +```sql +mysql> create table t (a int, unique key (a)); +Query OK, 0 rows affected (0.00 sec) + +mysql> insert into t values (1),(1); +ERROR 1062 (23000): Duplicate entry '1' for key 'a' +mysql> set @@session.tidb_redact_log=1; +Query OK, 0 rows affected (0.00 sec) + +mysql> insert into t values (1),(1); +ERROR 1062 (23000): Duplicate entry '?' for key '?' +``` + +And its corresponding log is: +``` +[2020/10/20 11:45:37.796 +08:00] [INFO] [conn.go:800] ["command dispatched failed"] [conn=5] [connInfo="id:5, addr:127.0.0.1:57222 status:10, collation:utf8_general_ci, user:root"] [command=Query] [status="inTxn:0, autocommit:1"] [sql="insert into t values (1),(1)"] [txn_mode=OPTIMISTIC] [err="[kv:1062]Duplicate entry '1' for key 'a'"] + +[2020/10/20 11:45:49.539 +08:00] [INFO] [conn.go:800] ["command dispatched failed"] [conn=5] [connInfo="id:5, addr:127.0.0.1:57222 status:10, collation:utf8_general_ci, user:root"] [command=Query] [status="inTxn:0, autocommit:1"] [sql="insert into t values ( ? ) , ( ? )"] [txn_mode=OPTIMISTIC] [err="[kv:1062]Duplicate entry '?' for key '?'"] +``` + +As you can see, after enabling `tidb_redact_log`, sensitive content is hidden both in the error message and in the log. diff --git a/errors.toml b/errors.toml index d170522ec4e6a..5179b4ac48a1d 100644 --- a/errors.toml +++ b/errors.toml @@ -556,6 +556,11 @@ error = ''' JSON_OBJECTAGG: unsupported second argument type %v ''' +["kv:1062"] +error = ''' +Duplicate entry '%-.64s' for key '%-.192s' +''' + ["kv:8004"] error = ''' Transaction is too large, size: %d diff --git a/executor/adapter.go b/executor/adapter.go index afa955c8b7ed5..6569b6fe8621d 100644 --- a/executor/adapter.go +++ b/executor/adapter.go @@ -819,7 +819,7 @@ func (a *ExecStmt) FinishExecuteStmt(txnTS uint64, succ bool, hasMoreResults boo a.LogSlowQuery(txnTS, succ, hasMoreResults) a.SummaryStmt(succ) prevStmt := a.GetTextToLog() - if config.RedactLogEnabled() { + if sessVars.EnableRedactLog { sessVars.PrevStmt = FormatSQL(prevStmt, nil) } else { pps := types.CloneRow(sessVars.PreparedParams) @@ -849,7 +849,7 @@ func (a *ExecStmt) LogSlowQuery(txnTS uint64, succ bool, hasMoreResults bool) { } var sql stringutil.StringerFunc normalizedSQL, digest := sessVars.StmtCtx.SQLDigest() - if config.RedactLogEnabled() { + if sessVars.EnableRedactLog { sql = FormatSQL(normalizedSQL, nil) } else if sensitiveStmt, ok := a.StmtNode.(ast.SensitiveStmtNode); ok { sql = FormatSQL(sensitiveStmt.SecureText(), nil) @@ -1059,7 +1059,7 @@ func (a *ExecStmt) SummaryStmt(succ bool) { // GetTextToLog return the query text to log. func (a *ExecStmt) GetTextToLog() string { var sql string - if config.RedactLogEnabled() { + if a.Ctx.GetSessionVars().EnableRedactLog { sql, _ = a.Ctx.GetSessionVars().StmtCtx.SQLDigest() } else if sensitiveStmt, ok := a.StmtNode.(ast.SensitiveStmtNode); ok { sql = sensitiveStmt.SecureText() diff --git a/executor/aggfuncs/func_group_concat.go b/executor/aggfuncs/func_group_concat.go index ef3305a38bd6f..d13bc754b0842 100644 --- a/executor/aggfuncs/func_group_concat.go +++ b/executor/aggfuncs/func_group_concat.go @@ -19,7 +19,6 @@ import ( "sort" "sync/atomic" - "github.com/pingcap/parser/terror" mysql "github.com/pingcap/tidb/errno" "github.com/pingcap/tidb/expression" "github.com/pingcap/tidb/planner/util" @@ -27,6 +26,7 @@ import ( "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/chunk" "github.com/pingcap/tidb/util/codec" + "github.com/pingcap/tidb/util/dbterror" "github.com/pingcap/tidb/util/hack" "github.com/pingcap/tidb/util/set" ) @@ -409,7 +409,7 @@ func (e *groupConcatOrder) UpdatePartialResult(sctx sessionctx.Context, rowsInGr func (e *groupConcatOrder) MergePartialResult(sctx sessionctx.Context, src, dst PartialResult) error { // If order by exists, the parallel hash aggregation is forbidden in executorBuilder.buildHashAgg. // So MergePartialResult will not be called. - return terror.ClassOptimizer.New(mysql.ErrInternal, mysql.MySQLErrName[mysql.ErrInternal]).GenWithStack("groupConcatOrder.MergePartialResult should not be called") + return dbterror.ClassOptimizer.NewStd(mysql.ErrInternal).GenWithStack("groupConcatOrder.MergePartialResult should not be called") } // SetTruncated will be called in `executorBuilder#buildHashAgg` with duck-type. @@ -518,5 +518,5 @@ func (e *groupConcatDistinctOrder) UpdatePartialResult(sctx sessionctx.Context, func (e *groupConcatDistinctOrder) MergePartialResult(sctx sessionctx.Context, src, dst PartialResult) error { // If order by exists, the parallel hash aggregation is forbidden in executorBuilder.buildHashAgg. // So MergePartialResult will not be called. - return terror.ClassOptimizer.New(mysql.ErrInternal, mysql.MySQLErrName[mysql.ErrInternal]).GenWithStack("groupConcatDistinctOrder.MergePartialResult should not be called") + return dbterror.ClassOptimizer.NewStd(mysql.ErrInternal).GenWithStack("groupConcatDistinctOrder.MergePartialResult should not be called") } diff --git a/executor/errors.go b/executor/errors.go index 31967c8a319e8..d648b56b81c81 100644 --- a/executor/errors.go +++ b/executor/errors.go @@ -14,38 +14,38 @@ package executor import ( - "github.com/pingcap/parser/terror" mysql "github.com/pingcap/tidb/errno" + "github.com/pingcap/tidb/util/dbterror" ) // Error instances. var ( - ErrGetStartTS = terror.ClassExecutor.New(mysql.ErrGetStartTS, mysql.MySQLErrName[mysql.ErrGetStartTS]) - ErrUnknownPlan = terror.ClassExecutor.New(mysql.ErrUnknownPlan, mysql.MySQLErrName[mysql.ErrUnknownPlan]) - ErrPrepareMulti = terror.ClassExecutor.New(mysql.ErrPrepareMulti, mysql.MySQLErrName[mysql.ErrPrepareMulti]) - ErrPrepareDDL = terror.ClassExecutor.New(mysql.ErrPrepareDDL, mysql.MySQLErrName[mysql.ErrPrepareDDL]) - ErrResultIsEmpty = terror.ClassExecutor.New(mysql.ErrResultIsEmpty, mysql.MySQLErrName[mysql.ErrResultIsEmpty]) - ErrBuildExecutor = terror.ClassExecutor.New(mysql.ErrBuildExecutor, mysql.MySQLErrName[mysql.ErrBuildExecutor]) - ErrBatchInsertFail = terror.ClassExecutor.New(mysql.ErrBatchInsertFail, mysql.MySQLErrName[mysql.ErrBatchInsertFail]) - ErrUnsupportedPs = terror.ClassExecutor.New(mysql.ErrUnsupportedPs, mysql.MySQLErrName[mysql.ErrUnsupportedPs]) + ErrGetStartTS = dbterror.ClassExecutor.NewStd(mysql.ErrGetStartTS) + ErrUnknownPlan = dbterror.ClassExecutor.NewStd(mysql.ErrUnknownPlan) + ErrPrepareMulti = dbterror.ClassExecutor.NewStd(mysql.ErrPrepareMulti) + ErrPrepareDDL = dbterror.ClassExecutor.NewStd(mysql.ErrPrepareDDL) + ErrResultIsEmpty = dbterror.ClassExecutor.NewStd(mysql.ErrResultIsEmpty) + ErrBuildExecutor = dbterror.ClassExecutor.NewStd(mysql.ErrBuildExecutor) + ErrBatchInsertFail = dbterror.ClassExecutor.NewStd(mysql.ErrBatchInsertFail) + ErrUnsupportedPs = dbterror.ClassExecutor.NewStd(mysql.ErrUnsupportedPs) - ErrCantCreateUserWithGrant = terror.ClassExecutor.New(mysql.ErrCantCreateUserWithGrant, mysql.MySQLErrName[mysql.ErrCantCreateUserWithGrant]) - ErrPasswordNoMatch = terror.ClassExecutor.New(mysql.ErrPasswordNoMatch, mysql.MySQLErrName[mysql.ErrPasswordNoMatch]) - ErrCannotUser = terror.ClassExecutor.New(mysql.ErrCannotUser, mysql.MySQLErrName[mysql.ErrCannotUser]) - ErrPasswordFormat = terror.ClassExecutor.New(mysql.ErrPasswordFormat, mysql.MySQLErrName[mysql.ErrPasswordFormat]) - ErrCantChangeTxCharacteristics = terror.ClassExecutor.New(mysql.ErrCantChangeTxCharacteristics, mysql.MySQLErrName[mysql.ErrCantChangeTxCharacteristics]) - ErrPsManyParam = terror.ClassExecutor.New(mysql.ErrPsManyParam, mysql.MySQLErrName[mysql.ErrPsManyParam]) - ErrAdminCheckTable = terror.ClassExecutor.New(mysql.ErrAdminCheckTable, mysql.MySQLErrName[mysql.ErrAdminCheckTable]) - ErrDBaccessDenied = terror.ClassExecutor.New(mysql.ErrDBaccessDenied, mysql.MySQLErrName[mysql.ErrDBaccessDenied]) - ErrTableaccessDenied = terror.ClassExecutor.New(mysql.ErrTableaccessDenied, mysql.MySQLErrName[mysql.ErrTableaccessDenied]) - ErrBadDB = terror.ClassExecutor.New(mysql.ErrBadDB, mysql.MySQLErrName[mysql.ErrBadDB]) - ErrWrongObject = terror.ClassExecutor.New(mysql.ErrWrongObject, mysql.MySQLErrName[mysql.ErrWrongObject]) - ErrRoleNotGranted = terror.ClassPrivilege.New(mysql.ErrRoleNotGranted, mysql.MySQLErrName[mysql.ErrRoleNotGranted]) - ErrDeadlock = terror.ClassExecutor.New(mysql.ErrLockDeadlock, mysql.MySQLErrName[mysql.ErrLockDeadlock]) - ErrQueryInterrupted = terror.ClassExecutor.New(mysql.ErrQueryInterrupted, mysql.MySQLErrName[mysql.ErrQueryInterrupted]) + ErrCantCreateUserWithGrant = dbterror.ClassExecutor.NewStd(mysql.ErrCantCreateUserWithGrant) + ErrPasswordNoMatch = dbterror.ClassExecutor.NewStd(mysql.ErrPasswordNoMatch) + ErrCannotUser = dbterror.ClassExecutor.NewStd(mysql.ErrCannotUser) + ErrPasswordFormat = dbterror.ClassExecutor.NewStd(mysql.ErrPasswordFormat) + ErrCantChangeTxCharacteristics = dbterror.ClassExecutor.NewStd(mysql.ErrCantChangeTxCharacteristics) + ErrPsManyParam = dbterror.ClassExecutor.NewStd(mysql.ErrPsManyParam) + ErrAdminCheckTable = dbterror.ClassExecutor.NewStd(mysql.ErrAdminCheckTable) + ErrDBaccessDenied = dbterror.ClassExecutor.NewStd(mysql.ErrDBaccessDenied) + ErrTableaccessDenied = dbterror.ClassExecutor.NewStd(mysql.ErrTableaccessDenied) + ErrBadDB = dbterror.ClassExecutor.NewStd(mysql.ErrBadDB) + ErrWrongObject = dbterror.ClassExecutor.NewStd(mysql.ErrWrongObject) + ErrRoleNotGranted = dbterror.ClassPrivilege.NewStd(mysql.ErrRoleNotGranted) + ErrDeadlock = dbterror.ClassExecutor.NewStd(mysql.ErrLockDeadlock) + ErrQueryInterrupted = dbterror.ClassExecutor.NewStd(mysql.ErrQueryInterrupted) - ErrBRIEBackupFailed = terror.ClassExecutor.New(mysql.ErrBRIEBackupFailed, mysql.MySQLErrName[mysql.ErrBRIEBackupFailed]) - ErrBRIERestoreFailed = terror.ClassExecutor.New(mysql.ErrBRIERestoreFailed, mysql.MySQLErrName[mysql.ErrBRIERestoreFailed]) - ErrBRIEImportFailed = terror.ClassExecutor.New(mysql.ErrBRIEImportFailed, mysql.MySQLErrName[mysql.ErrBRIEImportFailed]) - ErrBRIEExportFailed = terror.ClassExecutor.New(mysql.ErrBRIEExportFailed, mysql.MySQLErrName[mysql.ErrBRIEExportFailed]) + ErrBRIEBackupFailed = dbterror.ClassExecutor.NewStd(mysql.ErrBRIEBackupFailed) + ErrBRIERestoreFailed = dbterror.ClassExecutor.NewStd(mysql.ErrBRIERestoreFailed) + ErrBRIEImportFailed = dbterror.ClassExecutor.NewStd(mysql.ErrBRIEImportFailed) + ErrBRIEExportFailed = dbterror.ClassExecutor.NewStd(mysql.ErrBRIEExportFailed) ) diff --git a/executor/executor_test.go b/executor/executor_test.go index eeafe0e9805ce..709c0776877e6 100644 --- a/executor/executor_test.go +++ b/executor/executor_test.go @@ -6136,16 +6136,14 @@ func (s *testSplitTable) TestKillTableReader(c *C) { func (s *testSerialSuite1) TestPrevStmtDesensitization(c *C) { tk := testkit.NewTestKit(c, s.store) tk.MustExec("use test;") - oriCfg := config.GetGlobalConfig() - defer config.StoreGlobalConfig(oriCfg) - newCfg := *oriCfg - newCfg.EnableRedactLog = 1 - config.StoreGlobalConfig(&newCfg) + tk.MustExec(fmt.Sprintf("set @@session.%v=1", variable.TiDBRedactLog)) + defer tk.MustExec(fmt.Sprintf("set @@session.%v=0", variable.TiDBRedactLog)) tk.MustExec("drop table if exists t") - tk.MustExec("create table t (a int)") + tk.MustExec("create table t (a int, unique key (a))") tk.MustExec("begin") tk.MustExec("insert into t values (1),(2)") c.Assert(tk.Se.GetSessionVars().PrevStmt.String(), Equals, "insert into t values ( ? ) , ( ? )") + c.Assert(tk.ExecToErr("insert into t values (1)").Error(), Equals, `[kv:1062]Duplicate entry '?' for key '?'`) } func (s *testSuite) TestIssue19372(c *C) { diff --git a/executor/insert.go b/executor/insert.go index 7913142a55cef..dbba7e0e4d144 100644 --- a/executor/insert.go +++ b/executor/insert.go @@ -387,7 +387,7 @@ func (e *InsertExec) setMessage() { numDuplicates = stmtCtx.UpdatedRows() } } - msg := fmt.Sprintf(mysql.MySQLErrName[mysql.ErrInsertInfo], numRecords, numDuplicates, numWarnings) + msg := fmt.Sprintf(mysql.MySQLErrName[mysql.ErrInsertInfo].Raw, numRecords, numDuplicates, numWarnings) stmtCtx.SetMessage(msg) } } diff --git a/executor/load_data.go b/executor/load_data.go index 8f9feec944eb0..41f497a0c4988 100644 --- a/executor/load_data.go +++ b/executor/load_data.go @@ -452,7 +452,7 @@ func (e *LoadDataInfo) SetMessage() { numDeletes := 0 numSkipped := numRecords - stmtCtx.CopiedRows() numWarnings := stmtCtx.WarningCount() - msg := fmt.Sprintf(mysql.MySQLErrName[mysql.ErrLoadInfo], numRecords, numDeletes, numSkipped, numWarnings) + msg := fmt.Sprintf(mysql.MySQLErrName[mysql.ErrLoadInfo].Raw, numRecords, numDeletes, numSkipped, numWarnings) e.ctx.GetSessionVars().StmtCtx.SetMessage(msg) } diff --git a/executor/replace.go b/executor/replace.go index 450d96c117403..3c50cdd48223a 100644 --- a/executor/replace.go +++ b/executor/replace.go @@ -239,7 +239,7 @@ func (e *ReplaceExec) setMessage() { if e.SelectExec != nil || numRecords > 1 { numWarnings := stmtCtx.WarningCount() numDuplicates := stmtCtx.AffectedRows() - numRecords - msg := fmt.Sprintf(mysql.MySQLErrName[mysql.ErrInsertInfo], numRecords, numDuplicates, numWarnings) + msg := fmt.Sprintf(mysql.MySQLErrName[mysql.ErrInsertInfo].Raw, numRecords, numDuplicates, numWarnings) stmtCtx.SetMessage(msg) } } diff --git a/executor/set_test.go b/executor/set_test.go index 59d337e51a2fc..723fd4541a218 100644 --- a/executor/set_test.go +++ b/executor/set_test.go @@ -424,10 +424,10 @@ func (s *testSuite5) TestSetVar(c *C) { tk.MustQuery(`select @@global.tidb_slow_log_masking;`).Check(testkit.Rows("1")) tk.MustExec("set global tidb_slow_log_masking = 0") tk.MustQuery(`select @@global.tidb_slow_log_masking;`).Check(testkit.Rows("0")) - _, err = tk.Exec("set session tidb_slow_log_masking = 0") - c.Assert(err, NotNil) - _, err = tk.Exec(`select @@session.tidb_slow_log_masking;`) - c.Assert(err, NotNil) + tk.MustExec("set session tidb_slow_log_masking = 0") + tk.MustQuery(`select @@session.tidb_slow_log_masking;`).Check(testkit.Rows("0")) + tk.MustExec("set session tidb_slow_log_masking = 1") + tk.MustQuery(`select @@session.tidb_slow_log_masking;`).Check(testkit.Rows("1")) } func (s *testSuite5) TestTruncateIncorrectIntSessionVar(c *C) { diff --git a/executor/update.go b/executor/update.go index b912eea050251..2c32980cfbd56 100644 --- a/executor/update.go +++ b/executor/update.go @@ -290,7 +290,7 @@ func (e *UpdateExec) setMessage() { numMatched := e.matched numChanged := stmtCtx.UpdatedRows() numWarnings := stmtCtx.WarningCount() - msg := fmt.Sprintf(mysql.MySQLErrName[mysql.ErrUpdateInfo], numMatched, numChanged, numWarnings) + msg := fmt.Sprintf(mysql.MySQLErrName[mysql.ErrUpdateInfo].Raw, numMatched, numChanged, numWarnings) stmtCtx.SetMessage(msg) } diff --git a/expression/errors.go b/expression/errors.go index 53a08594a318a..e3ae09e93fe0a 100644 --- a/expression/errors.go +++ b/expression/errors.go @@ -14,41 +14,42 @@ package expression import ( - "github.com/pingcap/parser/terror" + pmysql "github.com/pingcap/parser/mysql" mysql "github.com/pingcap/tidb/errno" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/types" + "github.com/pingcap/tidb/util/dbterror" ) // Error instances. var ( // All the exported errors are defined here: - ErrIncorrectParameterCount = terror.ClassExpression.New(mysql.ErrWrongParamcountToNativeFct, mysql.MySQLErrName[mysql.ErrWrongParamcountToNativeFct]) - ErrDivisionByZero = terror.ClassExpression.New(mysql.ErrDivisionByZero, mysql.MySQLErrName[mysql.ErrDivisionByZero]) - ErrRegexp = terror.ClassExpression.New(mysql.ErrRegexp, mysql.MySQLErrName[mysql.ErrRegexp]) - ErrOperandColumns = terror.ClassExpression.New(mysql.ErrOperandColumns, mysql.MySQLErrName[mysql.ErrOperandColumns]) - ErrCutValueGroupConcat = terror.ClassExpression.New(mysql.ErrCutValueGroupConcat, mysql.MySQLErrName[mysql.ErrCutValueGroupConcat]) - ErrFunctionsNoopImpl = terror.ClassExpression.New(mysql.ErrNotSupportedYet, "function %s has only noop implementation in tidb now, use tidb_enable_noop_functions to enable these functions") - ErrInvalidArgumentForLogarithm = terror.ClassExpression.New(mysql.ErrInvalidArgumentForLogarithm, mysql.MySQLErrName[mysql.ErrInvalidArgumentForLogarithm]) - ErrIncorrectType = terror.ClassExpression.New(mysql.ErrIncorrectType, mysql.MySQLErrName[mysql.ErrIncorrectType]) + ErrIncorrectParameterCount = dbterror.ClassExpression.NewStd(mysql.ErrWrongParamcountToNativeFct) + ErrDivisionByZero = dbterror.ClassExpression.NewStd(mysql.ErrDivisionByZero) + ErrRegexp = dbterror.ClassExpression.NewStd(mysql.ErrRegexp) + ErrOperandColumns = dbterror.ClassExpression.NewStd(mysql.ErrOperandColumns) + ErrCutValueGroupConcat = dbterror.ClassExpression.NewStd(mysql.ErrCutValueGroupConcat) + ErrFunctionsNoopImpl = dbterror.ClassExpression.NewStdErr(mysql.ErrNotSupportedYet, pmysql.Message("function %s has only noop implementation in tidb now, use tidb_enable_noop_functions to enable these functions", nil)) + ErrInvalidArgumentForLogarithm = dbterror.ClassExpression.NewStd(mysql.ErrInvalidArgumentForLogarithm) + ErrIncorrectType = dbterror.ClassExpression.NewStd(mysql.ErrIncorrectType) // All the un-exported errors are defined here: - errFunctionNotExists = terror.ClassExpression.New(mysql.ErrSpDoesNotExist, mysql.MySQLErrName[mysql.ErrSpDoesNotExist]) - errZlibZData = terror.ClassExpression.New(mysql.ErrZlibZData, mysql.MySQLErrName[mysql.ErrZlibZData]) - errZlibZBuf = terror.ClassExpression.New(mysql.ErrZlibZBuf, mysql.MySQLErrName[mysql.ErrZlibZBuf]) - errIncorrectArgs = terror.ClassExpression.New(mysql.ErrWrongArguments, mysql.MySQLErrName[mysql.ErrWrongArguments]) - errUnknownCharacterSet = terror.ClassExpression.New(mysql.ErrUnknownCharacterSet, mysql.MySQLErrName[mysql.ErrUnknownCharacterSet]) - errDefaultValue = terror.ClassExpression.New(mysql.ErrInvalidDefault, "invalid default value") - errDeprecatedSyntaxNoReplacement = terror.ClassExpression.New(mysql.ErrWarnDeprecatedSyntaxNoReplacement, mysql.MySQLErrName[mysql.ErrWarnDeprecatedSyntaxNoReplacement]) - errBadField = terror.ClassExpression.New(mysql.ErrBadField, mysql.MySQLErrName[mysql.ErrBadField]) - errWarnAllowedPacketOverflowed = terror.ClassExpression.New(mysql.ErrWarnAllowedPacketOverflowed, mysql.MySQLErrName[mysql.ErrWarnAllowedPacketOverflowed]) - errWarnOptionIgnored = terror.ClassExpression.New(mysql.WarnOptionIgnored, mysql.MySQLErrName[mysql.WarnOptionIgnored]) - errTruncatedWrongValue = terror.ClassExpression.New(mysql.ErrTruncatedWrongValue, mysql.MySQLErrName[mysql.ErrTruncatedWrongValue]) - errUnknownLocale = terror.ClassExpression.New(mysql.ErrUnknownLocale, mysql.MySQLErrName[mysql.ErrUnknownLocale]) - errNonUniq = terror.ClassExpression.New(mysql.ErrNonUniq, mysql.MySQLErrName[mysql.ErrNonUniq]) + errFunctionNotExists = dbterror.ClassExpression.NewStd(mysql.ErrSpDoesNotExist) + errZlibZData = dbterror.ClassExpression.NewStd(mysql.ErrZlibZData) + errZlibZBuf = dbterror.ClassExpression.NewStd(mysql.ErrZlibZBuf) + errIncorrectArgs = dbterror.ClassExpression.NewStd(mysql.ErrWrongArguments) + errUnknownCharacterSet = dbterror.ClassExpression.NewStd(mysql.ErrUnknownCharacterSet) + errDefaultValue = dbterror.ClassExpression.NewStdErr(mysql.ErrInvalidDefault, pmysql.Message("invalid default value", nil)) + errDeprecatedSyntaxNoReplacement = dbterror.ClassExpression.NewStd(mysql.ErrWarnDeprecatedSyntaxNoReplacement) + errBadField = dbterror.ClassExpression.NewStd(mysql.ErrBadField) + errWarnAllowedPacketOverflowed = dbterror.ClassExpression.NewStd(mysql.ErrWarnAllowedPacketOverflowed) + errWarnOptionIgnored = dbterror.ClassExpression.NewStd(mysql.WarnOptionIgnored) + errTruncatedWrongValue = dbterror.ClassExpression.NewStd(mysql.ErrTruncatedWrongValue) + errUnknownLocale = dbterror.ClassExpression.NewStd(mysql.ErrUnknownLocale) + errNonUniq = dbterror.ClassExpression.NewStd(mysql.ErrNonUniq) // Sequence usage privilege check. - errSequenceAccessDenied = terror.ClassExpression.New(mysql.ErrTableaccessDenied, mysql.MySQLErrName[mysql.ErrTableaccessDenied]) + errSequenceAccessDenied = dbterror.ClassExpression.NewStd(mysql.ErrTableaccessDenied) ) // handleInvalidTimeError reports error or warning depend on the context. diff --git a/expression/expr_to_pb.go b/expression/expr_to_pb.go index a68673f1b4a19..b932bb04f24d2 100644 --- a/expression/expr_to_pb.go +++ b/expression/expr_to_pb.go @@ -18,13 +18,13 @@ import ( "github.com/pingcap/errors" "github.com/pingcap/failpoint" "github.com/pingcap/parser/mysql" - "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/kv" "github.com/pingcap/tidb/sessionctx/stmtctx" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/chunk" "github.com/pingcap/tidb/util/codec" "github.com/pingcap/tidb/util/collate" + "github.com/pingcap/tidb/util/dbterror" "github.com/pingcap/tidb/util/logutil" "github.com/pingcap/tipb/go-tipb" "go.uber.org/zap" @@ -36,7 +36,7 @@ func ExpressionsToPBList(sc *stmtctx.StatementContext, exprs []Expression, clien for _, expr := range exprs { v := pc.ExprToPB(expr) if v == nil { - return nil, terror.ClassOptimizer.New(mysql.ErrInternal, mysql.MySQLErrName[mysql.ErrInternal]). + return nil, dbterror.ClassOptimizer.NewStd(mysql.ErrInternal). GenWithStack("expression %v cannot be pushed down", expr) } pbExpr = append(pbExpr, v) diff --git a/expression/scalar_function.go b/expression/scalar_function.go index 80cbdbf706d43..7052509dbbab9 100755 --- a/expression/scalar_function.go +++ b/expression/scalar_function.go @@ -28,12 +28,13 @@ import ( "github.com/pingcap/tidb/types/json" "github.com/pingcap/tidb/util/chunk" "github.com/pingcap/tidb/util/codec" + "github.com/pingcap/tidb/util/dbterror" "github.com/pingcap/tidb/util/hack" ) // error definitions. var ( - ErrNoDB = terror.ClassOptimizer.New(mysql.ErrNoDB, mysql.MySQLErrName[mysql.ErrNoDB]) + ErrNoDB = dbterror.ClassOptimizer.NewStd(mysql.ErrNoDB) ) // ScalarFunction is the function that returns a value. diff --git a/go.mod b/go.mod index 0a6c3ff043108..7d951388728a3 100644 --- a/go.mod +++ b/go.mod @@ -28,13 +28,13 @@ require ( github.com/opentracing/opentracing-go v1.1.0 github.com/pingcap/br v0.0.0-20200921112226-ee2e962f5e4b github.com/pingcap/check v0.0.0-20200212061837-5e12011dc712 - github.com/pingcap/errors v0.11.5-0.20200917111840-a15ef68f753d + github.com/pingcap/errors v0.11.5-0.20201029093017-5a7df2af2ac7 github.com/pingcap/failpoint v0.0.0-20200702092429-9f69995143ce github.com/pingcap/fn v0.0.0-20200306044125-d5540d389059 github.com/pingcap/goleveldb v0.0.0-20191226122134-f82aafb29989 github.com/pingcap/kvproto v0.0.0-20200907074027-32a3a0accf7d - github.com/pingcap/log v0.0.0-20200828042413-fce0951f1463 - github.com/pingcap/parser v0.0.0-20201104074312-b05b93d3a011 + github.com/pingcap/log v0.0.0-20201112100606-8f1e84a3abc8 + github.com/pingcap/parser v0.0.0-20201123083041-dfb0acc7c2fa github.com/pingcap/sysutil v0.0.0-20200715082929-4c47bcac246a github.com/pingcap/tidb-tools v4.0.6-0.20200828085514-03575b185007+incompatible github.com/pingcap/tipb v0.0.0-20200618092958-4fad48b4c8c3 diff --git a/go.sum b/go.sum index e62c1ef8b906e..0cd0cd033dd0f 100644 --- a/go.sum +++ b/go.sum @@ -419,8 +419,9 @@ github.com/pingcap/errors v0.11.0/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTw github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8= github.com/pingcap/errors v0.11.5-0.20190809092503-95897b64e011/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8= github.com/pingcap/errors v0.11.5-0.20200902104258-eba4f1d8f6de/go.mod h1:g4vx//d6VakjJ0mk7iLBlKA8LFavV/sAVINT/1PFxeQ= -github.com/pingcap/errors v0.11.5-0.20200917111840-a15ef68f753d h1:TH18wFO5Nq/zUQuWu9ms2urgZnLP69XJYiI2JZAkUGc= github.com/pingcap/errors v0.11.5-0.20200917111840-a15ef68f753d/go.mod h1:g4vx//d6VakjJ0mk7iLBlKA8LFavV/sAVINT/1PFxeQ= +github.com/pingcap/errors v0.11.5-0.20201029093017-5a7df2af2ac7 h1:wQKuKP2HUtej2gSvx1cZmY4DENUH6tlOxRkfvPT8EBU= +github.com/pingcap/errors v0.11.5-0.20201029093017-5a7df2af2ac7/go.mod h1:G7x87le1poQzLB/TqvTJI2ILrSgobnq4Ut7luOwvfvI= github.com/pingcap/failpoint v0.0.0-20191029060244-12f4ac2fd11d/go.mod h1:DNS3Qg7bEDhU6EXNHF+XSv/PGznQaMJ5FWvctpm6pQI= github.com/pingcap/failpoint v0.0.0-20200210140405-f8f9fb234798/go.mod h1:DNS3Qg7bEDhU6EXNHF+XSv/PGznQaMJ5FWvctpm6pQI= github.com/pingcap/failpoint v0.0.0-20200506114213-c17f16071c53/go.mod h1:w4PEZ5y16LeofeeGwdgZB4ddv9bLyDuIX+ljstgKZyk= @@ -449,6 +450,8 @@ github.com/pingcap/log v0.0.0-20200117041106-d28c14d3b1cd/go.mod h1:4rbK1p9ILyIf github.com/pingcap/log v0.0.0-20200511115504-543df19646ad/go.mod h1:4rbK1p9ILyIfb6hU7OG2CiWSqMXnp3JMbiaVJ6mvoY8= github.com/pingcap/log v0.0.0-20200828042413-fce0951f1463 h1:Jboj+s4jSCp5E1WDgmRUv5rIFKFHaaSWuSZ4wMwXIcc= github.com/pingcap/log v0.0.0-20200828042413-fce0951f1463/go.mod h1:4rbK1p9ILyIfb6hU7OG2CiWSqMXnp3JMbiaVJ6mvoY8= +github.com/pingcap/log v0.0.0-20201112100606-8f1e84a3abc8 h1:M+DNpOu/I3uDmwee6vcnoPd6GgSMqND4gxvDQ/W584U= +github.com/pingcap/log v0.0.0-20201112100606-8f1e84a3abc8/go.mod h1:4rbK1p9ILyIfb6hU7OG2CiWSqMXnp3JMbiaVJ6mvoY8= github.com/pingcap/parser v0.0.0-20200424075042-8222d8b724a4/go.mod h1:9v0Edh8IbgjGYW2ArJr19E+bvL8zKahsFp+ixWeId+4= github.com/pingcap/parser v0.0.0-20200507022230-f3bf29096657/go.mod h1:9v0Edh8IbgjGYW2ArJr19E+bvL8zKahsFp+ixWeId+4= github.com/pingcap/parser v0.0.0-20200603032439-c4ecb4508d2f/go.mod h1:9v0Edh8IbgjGYW2ArJr19E+bvL8zKahsFp+ixWeId+4= @@ -457,8 +460,8 @@ github.com/pingcap/parser v0.0.0-20200803072748-fdf66528323d/go.mod h1:vQdbJqobJ github.com/pingcap/parser v0.0.0-20200901062802-475ea5e2e0a7/go.mod h1:vQdbJqobJAgFyiRNNtXahpMoGWwPEuWciVEK5A20NS0= github.com/pingcap/parser v0.0.0-20200921063432-e220cfcfd026 h1:i+r4P7hb4KpW74nPn+P/hqtsW3fu4U9A4JGAYKWMvtw= github.com/pingcap/parser v0.0.0-20200921063432-e220cfcfd026/go.mod h1:dMMvhqeowLnAsDWspyalgxXoRUnP09cZ7wAnpt2e/S8= -github.com/pingcap/parser v0.0.0-20201104074312-b05b93d3a011 h1:OK7jx9L6bgzfreJDSfmn5DE5xfPT+T7WClGunIvg4Qo= -github.com/pingcap/parser v0.0.0-20201104074312-b05b93d3a011/go.mod h1:dMMvhqeowLnAsDWspyalgxXoRUnP09cZ7wAnpt2e/S8= +github.com/pingcap/parser v0.0.0-20201123083041-dfb0acc7c2fa h1:HFoeh5c1SCVo492d4mOuud3cxmtTUcenx65ttNzs6O4= +github.com/pingcap/parser v0.0.0-20201123083041-dfb0acc7c2fa/go.mod h1:GbEr2PgY72/4XqPZzmzstlOU/+il/wrjeTNFs6ihsSE= github.com/pingcap/pd/v4 v4.0.0-rc.1.0.20200422143320-428acd53eba2/go.mod h1:s+utZtXDznOiL24VK0qGmtoHjjXNsscJx3m1n8cC56s= github.com/pingcap/pd/v4 v4.0.0-rc.2.0.20200520083007-2c251bd8f181/go.mod h1:q4HTx/bA8aKBa4S7L+SQKHvjRPXCRV0tA0yRw0qkZSA= github.com/pingcap/pd/v4 v4.0.5-0.20200817114353-e465cafe8a91/go.mod h1:m9OEkKoPMQWjrbJ9pqjjeCqzqxraZrPEuWa1OI6Wcek= diff --git a/infoschema/error.go b/infoschema/error.go index 7eb164a5210e6..a0ef7ab9c8760 100644 --- a/infoschema/error.go +++ b/infoschema/error.go @@ -14,59 +14,59 @@ package infoschema import ( - "github.com/pingcap/parser/terror" mysql "github.com/pingcap/tidb/errno" + "github.com/pingcap/tidb/util/dbterror" ) var ( // ErrDatabaseExists returns for database already exists. - ErrDatabaseExists = terror.ClassSchema.New(mysql.ErrDBCreateExists, mysql.MySQLErrName[mysql.ErrDBCreateExists]) + ErrDatabaseExists = dbterror.ClassSchema.NewStd(mysql.ErrDBCreateExists) // ErrDatabaseDropExists returns for dropping a non-existent database. - ErrDatabaseDropExists = terror.ClassSchema.New(mysql.ErrDBDropExists, mysql.MySQLErrName[mysql.ErrDBDropExists]) + ErrDatabaseDropExists = dbterror.ClassSchema.NewStd(mysql.ErrDBDropExists) // ErrAccessDenied return when the user doesn't have the permission to access the table. - ErrAccessDenied = terror.ClassSchema.New(mysql.ErrAccessDenied, mysql.MySQLErrName[mysql.ErrAccessDenied]) + ErrAccessDenied = dbterror.ClassSchema.NewStd(mysql.ErrAccessDenied) // ErrDatabaseNotExists returns for database not exists. - ErrDatabaseNotExists = terror.ClassSchema.New(mysql.ErrBadDB, mysql.MySQLErrName[mysql.ErrBadDB]) + ErrDatabaseNotExists = dbterror.ClassSchema.NewStd(mysql.ErrBadDB) // ErrTableExists returns for table already exists. - ErrTableExists = terror.ClassSchema.New(mysql.ErrTableExists, mysql.MySQLErrName[mysql.ErrTableExists]) + ErrTableExists = dbterror.ClassSchema.NewStd(mysql.ErrTableExists) // ErrTableDropExists returns for dropping a non-existent table. - ErrTableDropExists = terror.ClassSchema.New(mysql.ErrBadTable, mysql.MySQLErrName[mysql.ErrBadTable]) + ErrTableDropExists = dbterror.ClassSchema.NewStd(mysql.ErrBadTable) // ErrSequenceDropExists returns for dropping a non-exist sequence. - ErrSequenceDropExists = terror.ClassSchema.New(mysql.ErrUnknownSequence, mysql.MySQLErrName[mysql.ErrUnknownSequence]) + ErrSequenceDropExists = dbterror.ClassSchema.NewStd(mysql.ErrUnknownSequence) // ErrColumnNotExists returns for column not exists. - ErrColumnNotExists = terror.ClassSchema.New(mysql.ErrBadField, mysql.MySQLErrName[mysql.ErrBadField]) + ErrColumnNotExists = dbterror.ClassSchema.NewStd(mysql.ErrBadField) // ErrColumnExists returns for column already exists. - ErrColumnExists = terror.ClassSchema.New(mysql.ErrDupFieldName, mysql.MySQLErrName[mysql.ErrDupFieldName]) + ErrColumnExists = dbterror.ClassSchema.NewStd(mysql.ErrDupFieldName) // ErrKeyNameDuplicate returns for index duplicate when rename index. - ErrKeyNameDuplicate = terror.ClassSchema.New(mysql.ErrDupKeyName, mysql.MySQLErrName[mysql.ErrDupKeyName]) + ErrKeyNameDuplicate = dbterror.ClassSchema.NewStd(mysql.ErrDupKeyName) // ErrNonuniqTable returns when none unique tables errors. - ErrNonuniqTable = terror.ClassSchema.New(mysql.ErrNonuniqTable, mysql.MySQLErrName[mysql.ErrNonuniqTable]) + ErrNonuniqTable = dbterror.ClassSchema.NewStd(mysql.ErrNonuniqTable) // ErrMultiplePriKey returns for multiple primary keys. - ErrMultiplePriKey = terror.ClassSchema.New(mysql.ErrMultiplePriKey, mysql.MySQLErrName[mysql.ErrMultiplePriKey]) + ErrMultiplePriKey = dbterror.ClassSchema.NewStd(mysql.ErrMultiplePriKey) // ErrTooManyKeyParts returns for too many key parts. - ErrTooManyKeyParts = terror.ClassSchema.New(mysql.ErrTooManyKeyParts, mysql.MySQLErrName[mysql.ErrTooManyKeyParts]) + ErrTooManyKeyParts = dbterror.ClassSchema.NewStd(mysql.ErrTooManyKeyParts) // ErrForeignKeyNotExists returns for foreign key not exists. - ErrForeignKeyNotExists = terror.ClassSchema.New(mysql.ErrCantDropFieldOrKey, mysql.MySQLErrName[mysql.ErrCantDropFieldOrKey]) + ErrForeignKeyNotExists = dbterror.ClassSchema.NewStd(mysql.ErrCantDropFieldOrKey) // ErrTableNotLockedForWrite returns for write tables when only hold the table read lock. - ErrTableNotLockedForWrite = terror.ClassSchema.New(mysql.ErrTableNotLockedForWrite, mysql.MySQLErrName[mysql.ErrTableNotLockedForWrite]) + ErrTableNotLockedForWrite = dbterror.ClassSchema.NewStd(mysql.ErrTableNotLockedForWrite) // ErrTableNotLocked returns when session has explicitly lock tables, then visit unlocked table will return this error. - ErrTableNotLocked = terror.ClassSchema.New(mysql.ErrTableNotLocked, mysql.MySQLErrName[mysql.ErrTableNotLocked]) + ErrTableNotLocked = dbterror.ClassSchema.NewStd(mysql.ErrTableNotLocked) // ErrTableNotExists returns for table not exists. - ErrTableNotExists = terror.ClassSchema.New(mysql.ErrNoSuchTable, mysql.MySQLErrName[mysql.ErrNoSuchTable]) + ErrTableNotExists = dbterror.ClassSchema.NewStd(mysql.ErrNoSuchTable) // ErrKeyNotExists returns for index not exists. - ErrKeyNotExists = terror.ClassSchema.New(mysql.ErrKeyDoesNotExist, mysql.MySQLErrName[mysql.ErrKeyDoesNotExist]) + ErrKeyNotExists = dbterror.ClassSchema.NewStd(mysql.ErrKeyDoesNotExist) // ErrCannotAddForeign returns for foreign key exists. - ErrCannotAddForeign = terror.ClassSchema.New(mysql.ErrCannotAddForeign, mysql.MySQLErrName[mysql.ErrCannotAddForeign]) + ErrCannotAddForeign = dbterror.ClassSchema.NewStd(mysql.ErrCannotAddForeign) // ErrForeignKeyNotMatch returns for foreign key not match. - ErrForeignKeyNotMatch = terror.ClassSchema.New(mysql.ErrWrongFkDef, mysql.MySQLErrName[mysql.ErrWrongFkDef]) + ErrForeignKeyNotMatch = dbterror.ClassSchema.NewStd(mysql.ErrWrongFkDef) // ErrIndexExists returns for index already exists. - ErrIndexExists = terror.ClassSchema.New(mysql.ErrDupIndex, mysql.MySQLErrName[mysql.ErrDupIndex]) + ErrIndexExists = dbterror.ClassSchema.NewStd(mysql.ErrDupIndex) // ErrUserDropExists returns for dropping a non-existent user. - ErrUserDropExists = terror.ClassSchema.New(mysql.ErrBadUser, mysql.MySQLErrName[mysql.ErrBadUser]) + ErrUserDropExists = dbterror.ClassSchema.NewStd(mysql.ErrBadUser) // ErrUserAlreadyExists return for creating a existent user. - ErrUserAlreadyExists = terror.ClassSchema.New(mysql.ErrUserAlreadyExists, mysql.MySQLErrName[mysql.ErrUserAlreadyExists]) + ErrUserAlreadyExists = dbterror.ClassSchema.NewStd(mysql.ErrUserAlreadyExists) // ErrTableLocked returns when the table was locked by other session. - ErrTableLocked = terror.ClassSchema.New(mysql.ErrTableLocked, mysql.MySQLErrName[mysql.ErrTableLocked]) + ErrTableLocked = dbterror.ClassSchema.NewStd(mysql.ErrTableLocked) // ErrWrongObject returns when the table/view/sequence is not the expected object. - ErrWrongObject = terror.ClassSchema.New(mysql.ErrWrongObject, mysql.MySQLErrName[mysql.ErrWrongObject]) + ErrWrongObject = dbterror.ClassSchema.NewStd(mysql.ErrWrongObject) ) diff --git a/kv/error.go b/kv/error.go index 7fc1b75432fb3..b55bc9e45d0ab 100644 --- a/kv/error.go +++ b/kv/error.go @@ -14,9 +14,9 @@ package kv import ( - "github.com/pingcap/parser/terror" + pmysql "github.com/pingcap/parser/mysql" mysql "github.com/pingcap/tidb/errno" - "github.com/pingcap/tidb/util/redact" + "github.com/pingcap/tidb/util/dbterror" ) // TxnRetryableMark is used to uniform the commit error messages which could retry the transaction. @@ -25,30 +25,30 @@ const TxnRetryableMark = "[try again later]" var ( // ErrNotExist is used when try to get an entry with an unexist key from KV store. - ErrNotExist = terror.ClassKV.New(mysql.ErrNotExist, mysql.MySQLErrName[mysql.ErrNotExist]) + ErrNotExist = dbterror.ClassKV.NewStd(mysql.ErrNotExist) // ErrTxnRetryable is used when KV store occurs retryable error which SQL layer can safely retry the transaction. // When using TiKV as the storage node, the error is returned ONLY when lock not found (txnLockNotFound) in Commit, // subject to change it in the future. - ErrTxnRetryable = terror.ClassKV.New(mysql.ErrTxnRetryable, - mysql.MySQLErrName[mysql.ErrTxnRetryable]+TxnRetryableMark) + ErrTxnRetryable = dbterror.ClassKV.NewStdErr(mysql.ErrTxnRetryable, + pmysql.Message(mysql.MySQLErrName[mysql.ErrTxnRetryable].Raw+TxnRetryableMark, nil)) // ErrCannotSetNilValue is the error when sets an empty value. - ErrCannotSetNilValue = terror.ClassKV.New(mysql.ErrCannotSetNilValue, mysql.MySQLErrName[mysql.ErrCannotSetNilValue]) + ErrCannotSetNilValue = dbterror.ClassKV.NewStd(mysql.ErrCannotSetNilValue) // ErrInvalidTxn is the error when commits or rollbacks in an invalid transaction. - ErrInvalidTxn = terror.ClassKV.New(mysql.ErrInvalidTxn, mysql.MySQLErrName[mysql.ErrInvalidTxn]) + ErrInvalidTxn = dbterror.ClassKV.NewStd(mysql.ErrInvalidTxn) // ErrTxnTooLarge is the error when transaction is too large, lock time reached the maximum value. - ErrTxnTooLarge = terror.ClassKV.New(mysql.ErrTxnTooLarge, mysql.MySQLErrName[mysql.ErrTxnTooLarge]) + ErrTxnTooLarge = dbterror.ClassKV.NewStd(mysql.ErrTxnTooLarge) // ErrEntryTooLarge is the error when a key value entry is too large. - ErrEntryTooLarge = terror.ClassKV.New(mysql.ErrEntryTooLarge, mysql.MySQLErrName[mysql.ErrEntryTooLarge]) + ErrEntryTooLarge = dbterror.ClassKV.NewStd(mysql.ErrEntryTooLarge) // ErrKeyExists returns when key is already exist. - ErrKeyExists = redact.NewRedactError(terror.ClassKV.New(mysql.ErrDupEntry, mysql.MySQLErrName[mysql.ErrDupEntry]), 0, 1) + ErrKeyExists = dbterror.ClassKV.NewStd(mysql.ErrDupEntry) // ErrNotImplemented returns when a function is not implemented yet. - ErrNotImplemented = terror.ClassKV.New(mysql.ErrNotImplemented, mysql.MySQLErrName[mysql.ErrNotImplemented]) + ErrNotImplemented = dbterror.ClassKV.NewStd(mysql.ErrNotImplemented) // ErrWriteConflict is the error when the commit meets an write conflict error. - ErrWriteConflict = terror.ClassKV.New(mysql.ErrWriteConflict, - mysql.MySQLErrName[mysql.ErrWriteConflict]+" "+TxnRetryableMark) + ErrWriteConflict = dbterror.ClassKV.NewStdErr(mysql.ErrWriteConflict, + pmysql.Message(mysql.MySQLErrName[mysql.ErrWriteConflict].Raw+" "+TxnRetryableMark, nil)) // ErrWriteConflictInTiDB is the error when the commit meets an write conflict error when local latch is enabled. - ErrWriteConflictInTiDB = terror.ClassKV.New(mysql.ErrWriteConflictInTiDB, - mysql.MySQLErrName[mysql.ErrWriteConflictInTiDB]+" "+TxnRetryableMark) + ErrWriteConflictInTiDB = dbterror.ClassKV.NewStdErr(mysql.ErrWriteConflictInTiDB, + pmysql.Message(mysql.MySQLErrName[mysql.ErrWriteConflictInTiDB].Raw+" "+TxnRetryableMark, nil)) ) // IsTxnRetryableError checks if the error could safely retry the transaction. diff --git a/meta/autoid/errors.go b/meta/autoid/errors.go index 3f92ecc023250..c8152c6b810ba 100644 --- a/meta/autoid/errors.go +++ b/meta/autoid/errors.go @@ -14,18 +14,18 @@ package autoid import ( - "github.com/pingcap/parser/terror" mysql "github.com/pingcap/tidb/errno" + "github.com/pingcap/tidb/util/dbterror" ) // Error instances. var ( - errInvalidTableID = terror.ClassAutoid.New(mysql.ErrInvalidTableID, mysql.MySQLErrName[mysql.ErrInvalidTableID]) - errInvalidIncrementAndOffset = terror.ClassAutoid.New(mysql.ErrInvalidIncrementAndOffset, mysql.MySQLErrName[mysql.ErrInvalidIncrementAndOffset]) - ErrAutoincReadFailed = terror.ClassAutoid.New(mysql.ErrAutoincReadFailed, mysql.MySQLErrName[mysql.ErrAutoincReadFailed]) - ErrWrongAutoKey = terror.ClassAutoid.New(mysql.ErrWrongAutoKey, mysql.MySQLErrName[mysql.ErrWrongAutoKey]) - ErrInvalidAllocatorType = terror.ClassAutoid.New(mysql.ErrUnknownAllocatorType, mysql.MySQLErrName[mysql.ErrUnknownAllocatorType]) - ErrAutoRandReadFailed = terror.ClassAutoid.New(mysql.ErrAutoRandReadFailed, mysql.MySQLErrName[mysql.ErrAutoRandReadFailed]) + errInvalidTableID = dbterror.ClassAutoid.NewStd(mysql.ErrInvalidTableID) + errInvalidIncrementAndOffset = dbterror.ClassAutoid.NewStd(mysql.ErrInvalidIncrementAndOffset) + ErrAutoincReadFailed = dbterror.ClassAutoid.NewStd(mysql.ErrAutoincReadFailed) + ErrWrongAutoKey = dbterror.ClassAutoid.NewStd(mysql.ErrWrongAutoKey) + ErrInvalidAllocatorType = dbterror.ClassAutoid.NewStd(mysql.ErrUnknownAllocatorType) + ErrAutoRandReadFailed = dbterror.ClassAutoid.NewStd(mysql.ErrAutoRandReadFailed) ) const ( diff --git a/meta/meta.go b/meta/meta.go index fcc1e63be40f2..3c077486254d2 100644 --- a/meta/meta.go +++ b/meta/meta.go @@ -27,10 +27,10 @@ import ( "github.com/pingcap/errors" "github.com/pingcap/parser/model" "github.com/pingcap/parser/mysql" - "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/kv" "github.com/pingcap/tidb/metrics" "github.com/pingcap/tidb/structure" + "github.com/pingcap/tidb/util/dbterror" "github.com/pingcap/tidb/util/logutil" "go.uber.org/zap" ) @@ -71,13 +71,13 @@ var ( var ( // ErrDBExists is the error for db exists. - ErrDBExists = terror.ClassMeta.New(mysql.ErrDBCreateExists, mysql.MySQLErrName[mysql.ErrDBCreateExists]) + ErrDBExists = dbterror.ClassMeta.NewStd(mysql.ErrDBCreateExists) // ErrDBNotExists is the error for db not exists. - ErrDBNotExists = terror.ClassMeta.New(mysql.ErrBadDB, mysql.MySQLErrName[mysql.ErrBadDB]) + ErrDBNotExists = dbterror.ClassMeta.NewStd(mysql.ErrBadDB) // ErrTableExists is the error for table exists. - ErrTableExists = terror.ClassMeta.New(mysql.ErrTableExists, mysql.MySQLErrName[mysql.ErrTableExists]) + ErrTableExists = dbterror.ClassMeta.NewStd(mysql.ErrTableExists) // ErrTableNotExists is the error for table not exists. - ErrTableNotExists = terror.ClassMeta.New(mysql.ErrNoSuchTable, mysql.MySQLErrName[mysql.ErrNoSuchTable]) + ErrTableNotExists = dbterror.ClassMeta.NewStd(mysql.ErrNoSuchTable) ) // Meta is for handling meta information in a transaction. diff --git a/planner/core/errors.go b/planner/core/errors.go index 87e97039e0b97..a0f075539a493 100644 --- a/planner/core/errors.go +++ b/planner/core/errors.go @@ -14,73 +14,73 @@ package core import ( - "github.com/pingcap/parser/terror" mysql "github.com/pingcap/tidb/errno" + "github.com/pingcap/tidb/util/dbterror" ) // error definitions. var ( - ErrUnsupportedType = terror.ClassOptimizer.New(mysql.ErrUnsupportedType, mysql.MySQLErrName[mysql.ErrUnsupportedType]) - ErrAnalyzeMissIndex = terror.ClassOptimizer.New(mysql.ErrAnalyzeMissIndex, mysql.MySQLErrName[mysql.ErrAnalyzeMissIndex]) - ErrWrongParamCount = terror.ClassOptimizer.New(mysql.ErrWrongParamCount, mysql.MySQLErrName[mysql.ErrWrongParamCount]) - ErrSchemaChanged = terror.ClassOptimizer.New(mysql.ErrSchemaChanged, mysql.MySQLErrName[mysql.ErrSchemaChanged]) - ErrTablenameNotAllowedHere = terror.ClassOptimizer.New(mysql.ErrTablenameNotAllowedHere, mysql.MySQLErrName[mysql.ErrTablenameNotAllowedHere]) - ErrNotSupportedYet = terror.ClassOptimizer.New(mysql.ErrNotSupportedYet, mysql.MySQLErrName[mysql.ErrNotSupportedYet]) - ErrWrongUsage = terror.ClassOptimizer.New(mysql.ErrWrongUsage, mysql.MySQLErrName[mysql.ErrWrongUsage]) - ErrUnknown = terror.ClassOptimizer.New(mysql.ErrUnknown, mysql.MySQLErrName[mysql.ErrUnknown]) - ErrUnknownTable = terror.ClassOptimizer.New(mysql.ErrUnknownTable, mysql.MySQLErrName[mysql.ErrUnknownTable]) - ErrNoSuchTable = terror.ClassOptimizer.New(mysql.ErrNoSuchTable, mysql.MySQLErrName[mysql.ErrNoSuchTable]) - ErrViewRecursive = terror.ClassOptimizer.New(mysql.ErrViewRecursive, mysql.MySQLErrName[mysql.ErrViewRecursive]) - ErrWrongArguments = terror.ClassOptimizer.New(mysql.ErrWrongArguments, mysql.MySQLErrName[mysql.ErrWrongArguments]) - ErrWrongNumberOfColumnsInSelect = terror.ClassOptimizer.New(mysql.ErrWrongNumberOfColumnsInSelect, mysql.MySQLErrName[mysql.ErrWrongNumberOfColumnsInSelect]) - ErrBadGeneratedColumn = terror.ClassOptimizer.New(mysql.ErrBadGeneratedColumn, mysql.MySQLErrName[mysql.ErrBadGeneratedColumn]) - ErrFieldNotInGroupBy = terror.ClassOptimizer.New(mysql.ErrFieldNotInGroupBy, mysql.MySQLErrName[mysql.ErrFieldNotInGroupBy]) - ErrBadTable = terror.ClassOptimizer.New(mysql.ErrBadTable, mysql.MySQLErrName[mysql.ErrBadTable]) - ErrKeyDoesNotExist = terror.ClassOptimizer.New(mysql.ErrKeyDoesNotExist, mysql.MySQLErrName[mysql.ErrKeyDoesNotExist]) - ErrOperandColumns = terror.ClassOptimizer.New(mysql.ErrOperandColumns, mysql.MySQLErrName[mysql.ErrOperandColumns]) - ErrInvalidGroupFuncUse = terror.ClassOptimizer.New(mysql.ErrInvalidGroupFuncUse, mysql.MySQLErrName[mysql.ErrInvalidGroupFuncUse]) - ErrIllegalReference = terror.ClassOptimizer.New(mysql.ErrIllegalReference, mysql.MySQLErrName[mysql.ErrIllegalReference]) - ErrNoDB = terror.ClassOptimizer.New(mysql.ErrNoDB, mysql.MySQLErrName[mysql.ErrNoDB]) - ErrUnknownExplainFormat = terror.ClassOptimizer.New(mysql.ErrUnknownExplainFormat, mysql.MySQLErrName[mysql.ErrUnknownExplainFormat]) - ErrWrongGroupField = terror.ClassOptimizer.New(mysql.ErrWrongGroupField, mysql.MySQLErrName[mysql.ErrWrongGroupField]) - ErrDupFieldName = terror.ClassOptimizer.New(mysql.ErrDupFieldName, mysql.MySQLErrName[mysql.ErrDupFieldName]) - ErrNonUpdatableTable = terror.ClassOptimizer.New(mysql.ErrNonUpdatableTable, mysql.MySQLErrName[mysql.ErrNonUpdatableTable]) - ErrInternal = terror.ClassOptimizer.New(mysql.ErrInternal, mysql.MySQLErrName[mysql.ErrInternal]) - ErrNonUniqTable = terror.ClassOptimizer.New(mysql.ErrNonuniqTable, mysql.MySQLErrName[mysql.ErrNonuniqTable]) - ErrWindowInvalidWindowFuncUse = terror.ClassOptimizer.New(mysql.ErrWindowInvalidWindowFuncUse, mysql.MySQLErrName[mysql.ErrWindowInvalidWindowFuncUse]) - ErrWindowInvalidWindowFuncAliasUse = terror.ClassOptimizer.New(mysql.ErrWindowInvalidWindowFuncAliasUse, mysql.MySQLErrName[mysql.ErrWindowInvalidWindowFuncAliasUse]) - ErrWindowNoSuchWindow = terror.ClassOptimizer.New(mysql.ErrWindowNoSuchWindow, mysql.MySQLErrName[mysql.ErrWindowNoSuchWindow]) - ErrWindowCircularityInWindowGraph = terror.ClassOptimizer.New(mysql.ErrWindowCircularityInWindowGraph, mysql.MySQLErrName[mysql.ErrWindowCircularityInWindowGraph]) - ErrWindowNoChildPartitioning = terror.ClassOptimizer.New(mysql.ErrWindowNoChildPartitioning, mysql.MySQLErrName[mysql.ErrWindowNoChildPartitioning]) - ErrWindowNoInherentFrame = terror.ClassOptimizer.New(mysql.ErrWindowNoInherentFrame, mysql.MySQLErrName[mysql.ErrWindowNoInherentFrame]) - ErrWindowNoRedefineOrderBy = terror.ClassOptimizer.New(mysql.ErrWindowNoRedefineOrderBy, mysql.MySQLErrName[mysql.ErrWindowNoRedefineOrderBy]) - ErrWindowDuplicateName = terror.ClassOptimizer.New(mysql.ErrWindowDuplicateName, mysql.MySQLErrName[mysql.ErrWindowDuplicateName]) - ErrPartitionClauseOnNonpartitioned = terror.ClassOptimizer.New(mysql.ErrPartitionClauseOnNonpartitioned, mysql.MySQLErrName[mysql.ErrPartitionClauseOnNonpartitioned]) - ErrWindowFrameStartIllegal = terror.ClassOptimizer.New(mysql.ErrWindowFrameStartIllegal, mysql.MySQLErrName[mysql.ErrWindowFrameStartIllegal]) - ErrWindowFrameEndIllegal = terror.ClassOptimizer.New(mysql.ErrWindowFrameEndIllegal, mysql.MySQLErrName[mysql.ErrWindowFrameEndIllegal]) - ErrWindowFrameIllegal = terror.ClassOptimizer.New(mysql.ErrWindowFrameIllegal, mysql.MySQLErrName[mysql.ErrWindowFrameIllegal]) - ErrWindowRangeFrameOrderType = terror.ClassOptimizer.New(mysql.ErrWindowRangeFrameOrderType, mysql.MySQLErrName[mysql.ErrWindowRangeFrameOrderType]) - ErrWindowRangeFrameTemporalType = terror.ClassOptimizer.New(mysql.ErrWindowRangeFrameTemporalType, mysql.MySQLErrName[mysql.ErrWindowRangeFrameTemporalType]) - ErrWindowRangeFrameNumericType = terror.ClassOptimizer.New(mysql.ErrWindowRangeFrameNumericType, mysql.MySQLErrName[mysql.ErrWindowRangeFrameNumericType]) - ErrWindowRangeBoundNotConstant = terror.ClassOptimizer.New(mysql.ErrWindowRangeBoundNotConstant, mysql.MySQLErrName[mysql.ErrWindowRangeBoundNotConstant]) - ErrWindowRowsIntervalUse = terror.ClassOptimizer.New(mysql.ErrWindowRowsIntervalUse, mysql.MySQLErrName[mysql.ErrWindowRowsIntervalUse]) - ErrWindowFunctionIgnoresFrame = terror.ClassOptimizer.New(mysql.ErrWindowFunctionIgnoresFrame, mysql.MySQLErrName[mysql.ErrWindowFunctionIgnoresFrame]) - ErrUnsupportedOnGeneratedColumn = terror.ClassOptimizer.New(mysql.ErrUnsupportedOnGeneratedColumn, mysql.MySQLErrName[mysql.ErrUnsupportedOnGeneratedColumn]) - ErrPrivilegeCheckFail = terror.ClassOptimizer.New(mysql.ErrPrivilegeCheckFail, mysql.MySQLErrName[mysql.ErrPrivilegeCheckFail]) - ErrInvalidWildCard = terror.ClassOptimizer.New(mysql.ErrInvalidWildCard, mysql.MySQLErrName[mysql.ErrInvalidWildCard]) - ErrMixOfGroupFuncAndFields = terror.ClassOptimizer.New(mysql.ErrMixOfGroupFuncAndFieldsIncompatible, mysql.MySQLErrName[mysql.ErrMixOfGroupFuncAndFieldsIncompatible]) - errTooBigPrecision = terror.ClassExpression.New(mysql.ErrTooBigPrecision, mysql.MySQLErrName[mysql.ErrTooBigPrecision]) - ErrDBaccessDenied = terror.ClassOptimizer.New(mysql.ErrDBaccessDenied, mysql.MySQLErrName[mysql.ErrDBaccessDenied]) - ErrTableaccessDenied = terror.ClassOptimizer.New(mysql.ErrTableaccessDenied, mysql.MySQLErrName[mysql.ErrTableaccessDenied]) - ErrSpecificAccessDenied = terror.ClassOptimizer.New(mysql.ErrSpecificAccessDenied, mysql.MySQLErrName[mysql.ErrSpecificAccessDenied]) - ErrViewNoExplain = terror.ClassOptimizer.New(mysql.ErrViewNoExplain, mysql.MySQLErrName[mysql.ErrViewNoExplain]) - ErrWrongValueCountOnRow = terror.ClassOptimizer.New(mysql.ErrWrongValueCountOnRow, mysql.MySQLErrName[mysql.ErrWrongValueCountOnRow]) - ErrViewInvalid = terror.ClassOptimizer.New(mysql.ErrViewInvalid, mysql.MySQLErrName[mysql.ErrViewInvalid]) - ErrNoSuchThread = terror.ClassOptimizer.New(mysql.ErrNoSuchThread, mysql.MySQLErrName[mysql.ErrNoSuchThread]) - ErrUnknownColumn = terror.ClassOptimizer.New(mysql.ErrBadField, mysql.MySQLErrName[mysql.ErrBadField]) - ErrCartesianProductUnsupported = terror.ClassOptimizer.New(mysql.ErrCartesianProductUnsupported, mysql.MySQLErrName[mysql.ErrCartesianProductUnsupported]) - ErrStmtNotFound = terror.ClassOptimizer.New(mysql.ErrPreparedStmtNotFound, mysql.MySQLErrName[mysql.ErrPreparedStmtNotFound]) - ErrAmbiguous = terror.ClassOptimizer.New(mysql.ErrNonUniq, mysql.MySQLErrName[mysql.ErrNonUniq]) + ErrUnsupportedType = dbterror.ClassOptimizer.NewStd(mysql.ErrUnsupportedType) + ErrAnalyzeMissIndex = dbterror.ClassOptimizer.NewStd(mysql.ErrAnalyzeMissIndex) + ErrWrongParamCount = dbterror.ClassOptimizer.NewStd(mysql.ErrWrongParamCount) + ErrSchemaChanged = dbterror.ClassOptimizer.NewStd(mysql.ErrSchemaChanged) + ErrTablenameNotAllowedHere = dbterror.ClassOptimizer.NewStd(mysql.ErrTablenameNotAllowedHere) + ErrNotSupportedYet = dbterror.ClassOptimizer.NewStd(mysql.ErrNotSupportedYet) + ErrWrongUsage = dbterror.ClassOptimizer.NewStd(mysql.ErrWrongUsage) + ErrUnknown = dbterror.ClassOptimizer.NewStd(mysql.ErrUnknown) + ErrUnknownTable = dbterror.ClassOptimizer.NewStd(mysql.ErrUnknownTable) + ErrNoSuchTable = dbterror.ClassOptimizer.NewStd(mysql.ErrNoSuchTable) + ErrViewRecursive = dbterror.ClassOptimizer.NewStd(mysql.ErrViewRecursive) + ErrWrongArguments = dbterror.ClassOptimizer.NewStd(mysql.ErrWrongArguments) + ErrWrongNumberOfColumnsInSelect = dbterror.ClassOptimizer.NewStd(mysql.ErrWrongNumberOfColumnsInSelect) + ErrBadGeneratedColumn = dbterror.ClassOptimizer.NewStd(mysql.ErrBadGeneratedColumn) + ErrFieldNotInGroupBy = dbterror.ClassOptimizer.NewStd(mysql.ErrFieldNotInGroupBy) + ErrBadTable = dbterror.ClassOptimizer.NewStd(mysql.ErrBadTable) + ErrKeyDoesNotExist = dbterror.ClassOptimizer.NewStd(mysql.ErrKeyDoesNotExist) + ErrOperandColumns = dbterror.ClassOptimizer.NewStd(mysql.ErrOperandColumns) + ErrInvalidGroupFuncUse = dbterror.ClassOptimizer.NewStd(mysql.ErrInvalidGroupFuncUse) + ErrIllegalReference = dbterror.ClassOptimizer.NewStd(mysql.ErrIllegalReference) + ErrNoDB = dbterror.ClassOptimizer.NewStd(mysql.ErrNoDB) + ErrUnknownExplainFormat = dbterror.ClassOptimizer.NewStd(mysql.ErrUnknownExplainFormat) + ErrWrongGroupField = dbterror.ClassOptimizer.NewStd(mysql.ErrWrongGroupField) + ErrDupFieldName = dbterror.ClassOptimizer.NewStd(mysql.ErrDupFieldName) + ErrNonUpdatableTable = dbterror.ClassOptimizer.NewStd(mysql.ErrNonUpdatableTable) + ErrInternal = dbterror.ClassOptimizer.NewStd(mysql.ErrInternal) + ErrNonUniqTable = dbterror.ClassOptimizer.NewStd(mysql.ErrNonuniqTable) + ErrWindowInvalidWindowFuncUse = dbterror.ClassOptimizer.NewStd(mysql.ErrWindowInvalidWindowFuncUse) + ErrWindowInvalidWindowFuncAliasUse = dbterror.ClassOptimizer.NewStd(mysql.ErrWindowInvalidWindowFuncAliasUse) + ErrWindowNoSuchWindow = dbterror.ClassOptimizer.NewStd(mysql.ErrWindowNoSuchWindow) + ErrWindowCircularityInWindowGraph = dbterror.ClassOptimizer.NewStd(mysql.ErrWindowCircularityInWindowGraph) + ErrWindowNoChildPartitioning = dbterror.ClassOptimizer.NewStd(mysql.ErrWindowNoChildPartitioning) + ErrWindowNoInherentFrame = dbterror.ClassOptimizer.NewStd(mysql.ErrWindowNoInherentFrame) + ErrWindowNoRedefineOrderBy = dbterror.ClassOptimizer.NewStd(mysql.ErrWindowNoRedefineOrderBy) + ErrWindowDuplicateName = dbterror.ClassOptimizer.NewStd(mysql.ErrWindowDuplicateName) + ErrPartitionClauseOnNonpartitioned = dbterror.ClassOptimizer.NewStd(mysql.ErrPartitionClauseOnNonpartitioned) + ErrWindowFrameStartIllegal = dbterror.ClassOptimizer.NewStd(mysql.ErrWindowFrameStartIllegal) + ErrWindowFrameEndIllegal = dbterror.ClassOptimizer.NewStd(mysql.ErrWindowFrameEndIllegal) + ErrWindowFrameIllegal = dbterror.ClassOptimizer.NewStd(mysql.ErrWindowFrameIllegal) + ErrWindowRangeFrameOrderType = dbterror.ClassOptimizer.NewStd(mysql.ErrWindowRangeFrameOrderType) + ErrWindowRangeFrameTemporalType = dbterror.ClassOptimizer.NewStd(mysql.ErrWindowRangeFrameTemporalType) + ErrWindowRangeFrameNumericType = dbterror.ClassOptimizer.NewStd(mysql.ErrWindowRangeFrameNumericType) + ErrWindowRangeBoundNotConstant = dbterror.ClassOptimizer.NewStd(mysql.ErrWindowRangeBoundNotConstant) + ErrWindowRowsIntervalUse = dbterror.ClassOptimizer.NewStd(mysql.ErrWindowRowsIntervalUse) + ErrWindowFunctionIgnoresFrame = dbterror.ClassOptimizer.NewStd(mysql.ErrWindowFunctionIgnoresFrame) + ErrUnsupportedOnGeneratedColumn = dbterror.ClassOptimizer.NewStd(mysql.ErrUnsupportedOnGeneratedColumn) + ErrPrivilegeCheckFail = dbterror.ClassOptimizer.NewStd(mysql.ErrPrivilegeCheckFail) + ErrInvalidWildCard = dbterror.ClassOptimizer.NewStd(mysql.ErrInvalidWildCard) + ErrMixOfGroupFuncAndFields = dbterror.ClassOptimizer.NewStd(mysql.ErrMixOfGroupFuncAndFieldsIncompatible) + errTooBigPrecision = dbterror.ClassExpression.NewStd(mysql.ErrTooBigPrecision) + ErrDBaccessDenied = dbterror.ClassOptimizer.NewStd(mysql.ErrDBaccessDenied) + ErrTableaccessDenied = dbterror.ClassOptimizer.NewStd(mysql.ErrTableaccessDenied) + ErrSpecificAccessDenied = dbterror.ClassOptimizer.NewStd(mysql.ErrSpecificAccessDenied) + ErrViewNoExplain = dbterror.ClassOptimizer.NewStd(mysql.ErrViewNoExplain) + ErrWrongValueCountOnRow = dbterror.ClassOptimizer.NewStd(mysql.ErrWrongValueCountOnRow) + ErrViewInvalid = dbterror.ClassOptimizer.NewStd(mysql.ErrViewInvalid) + ErrNoSuchThread = dbterror.ClassOptimizer.NewStd(mysql.ErrNoSuchThread) + ErrUnknownColumn = dbterror.ClassOptimizer.NewStd(mysql.ErrBadField) + ErrCartesianProductUnsupported = dbterror.ClassOptimizer.NewStd(mysql.ErrCartesianProductUnsupported) + ErrStmtNotFound = dbterror.ClassOptimizer.NewStd(mysql.ErrPreparedStmtNotFound) + ErrAmbiguous = dbterror.ClassOptimizer.NewStd(mysql.ErrNonUniq) // Since we cannot know if user logged in with a password, use message of ErrAccessDeniedNoPassword instead - ErrAccessDenied = terror.ClassOptimizer.New(mysql.ErrAccessDenied, mysql.MySQLErrName[mysql.ErrAccessDeniedNoPassword]) + ErrAccessDenied = dbterror.ClassOptimizer.NewStdErr(mysql.ErrAccessDenied, mysql.MySQLErrName[mysql.ErrAccessDeniedNoPassword]) ) diff --git a/planner/core/testdata/plan_suite_out.json b/planner/core/testdata/plan_suite_out.json index 4644c9c7fd6f4..b9a2f5d4873f2 100644 --- a/planner/core/testdata/plan_suite_out.json +++ b/planner/core/testdata/plan_suite_out.json @@ -2099,7 +2099,7 @@ { "SQL": "select /*+ INL_HASH_JOIN(t1) */ t1.b, t2.b from t1 inner join t2 on t1.a = t2.a;", "Plan": "IndexHashJoin{IndexLookUp(Index(t1.idx_a)[[NULL,+inf]]->Sel([not(isnull(test.t1.a))]), Table(t1))->TableReader(Table(t2)->Sel([not(isnull(test.t2.a))]))}(test.t2.a,test.t1.a)", - "Hints": "use_index(@`sel_1` `test`.`t1` `idx_a`), use_index(@`sel_1` `test`.`t2` ), inl_hash_join(@`sel_1` )" + "Hints": "use_index(@`sel_1` `test`.`t1` `idx_a`), use_index(@`sel_1` `test`.`t2` ), inl_hash_join(@`sel_1` `test`.`t1`)" }, { "SQL": "select /*+ INL_MERGE_JOIN(t1) */ t1.b, t2.b from t1 inner join t2 on t1.a = t2.a;", diff --git a/plugin/errors.go b/plugin/errors.go index a0f4a792f89d3..c310fa4e6be7e 100644 --- a/plugin/errors.go +++ b/plugin/errors.go @@ -14,16 +14,16 @@ package plugin import ( - "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/errno" + "github.com/pingcap/tidb/util/dbterror" ) var ( - errInvalidPluginID = terror.ClassPlugin.NewStd(errno.ErrInvalidPluginID) - errInvalidPluginManifest = terror.ClassPlugin.NewStd(errno.ErrInvalidPluginManifest) - errInvalidPluginName = terror.ClassPlugin.NewStd(errno.ErrInvalidPluginName) - errInvalidPluginVersion = terror.ClassPlugin.NewStd(errno.ErrInvalidPluginVersion) - errDuplicatePlugin = terror.ClassPlugin.NewStd(errno.ErrDuplicatePlugin) - errInvalidPluginSysVarName = terror.ClassPlugin.NewStd(errno.ErrInvalidPluginSysVarName) - errRequireVersionCheckFail = terror.ClassPlugin.NewStd(errno.ErrRequireVersionCheckFail) + errInvalidPluginID = dbterror.ClassPlugin.NewStd(errno.ErrInvalidPluginID) + errInvalidPluginManifest = dbterror.ClassPlugin.NewStd(errno.ErrInvalidPluginManifest) + errInvalidPluginName = dbterror.ClassPlugin.NewStd(errno.ErrInvalidPluginName) + errInvalidPluginVersion = dbterror.ClassPlugin.NewStd(errno.ErrInvalidPluginVersion) + errDuplicatePlugin = dbterror.ClassPlugin.NewStd(errno.ErrDuplicatePlugin) + errInvalidPluginSysVarName = dbterror.ClassPlugin.NewStd(errno.ErrInvalidPluginSysVarName) + errRequireVersionCheckFail = dbterror.ClassPlugin.NewStd(errno.ErrRequireVersionCheckFail) ) diff --git a/privilege/privileges/errors.go b/privilege/privileges/errors.go index a1fea3ce0c897..daadc33b43c2a 100644 --- a/privilege/privileges/errors.go +++ b/privilege/privileges/errors.go @@ -14,13 +14,13 @@ package privileges import ( - "github.com/pingcap/parser/terror" mysql "github.com/pingcap/tidb/errno" + "github.com/pingcap/tidb/util/dbterror" ) // error definitions. var ( - errInvalidPrivilegeType = terror.ClassPrivilege.New(mysql.ErrInvalidPrivilegeType, mysql.MySQLErrName[mysql.ErrInvalidPrivilegeType]) - ErrNonexistingGrant = terror.ClassPrivilege.New(mysql.ErrNonexistingGrant, mysql.MySQLErrName[mysql.ErrNonexistingGrant]) - errLoadPrivilege = terror.ClassPrivilege.New(mysql.ErrLoadPrivilege, mysql.MySQLErrName[mysql.ErrLoadPrivilege]) + errInvalidPrivilegeType = dbterror.ClassPrivilege.NewStd(mysql.ErrInvalidPrivilegeType) + ErrNonexistingGrant = dbterror.ClassPrivilege.NewStd(mysql.ErrNonexistingGrant) + errLoadPrivilege = dbterror.ClassPrivilege.NewStd(mysql.ErrLoadPrivilege) ) diff --git a/server/conn.go b/server/conn.go index ce9e94ab671f6..40b3f3e034879 100644 --- a/server/conn.go +++ b/server/conn.go @@ -1010,7 +1010,7 @@ func (cc *clientConn) dispatch(ctx context.Context, data []byte) error { case mysql.ComChangeUser: return cc.handleChangeUser(ctx, data) default: - return mysql.NewErrf(mysql.ErrUnknown, "command %d not supported now", cmd) + return mysql.NewErrf(mysql.ErrUnknown, "command %d not supported now", nil, cmd) } } @@ -1083,7 +1083,7 @@ func (cc *clientConn) writeError(ctx context.Context, e error) error { case *terror.Error: m = terror.ToSQLError(y) default: - m = mysql.NewErrf(mysql.ErrUnknown, "%s", e.Error()) + m = mysql.NewErrf(mysql.ErrUnknown, "%s", nil, e.Error()) } } @@ -1745,7 +1745,7 @@ func (cc getLastStmtInConn) String() string { return "ListFields " + string(data) case mysql.ComQuery, mysql.ComStmtPrepare: sql := string(hack.String(data)) - if config.RedactLogEnabled() { + if cc.ctx.GetSessionVars().EnableRedactLog { sql, _ = parser.NormalizeDigest(sql) } return queryStrForLog(sql) diff --git a/server/conn_stmt.go b/server/conn_stmt.go index 5e1af890f3152..9f7a33d75633f 100644 --- a/server/conn_stmt.go +++ b/server/conn_stmt.go @@ -45,7 +45,6 @@ import ( "github.com/pingcap/errors" "github.com/pingcap/parser/mysql" - "github.com/pingcap/tidb/config" plannercore "github.com/pingcap/tidb/planner/core" "github.com/pingcap/tidb/sessionctx/stmtctx" "github.com/pingcap/tidb/types" @@ -141,7 +140,7 @@ func (cc *clientConn) handleStmtExecute(ctx context.Context, data []byte) (err e case 1: useCursor = true default: - return mysql.NewErrf(mysql.ErrUnknown, "unsupported flag %d", flag) + return mysql.NewErrf(mysql.ErrUnknown, "unsupported flag %d", nil, flag) } // skip iteration-count, always 1 @@ -638,7 +637,7 @@ func (cc *clientConn) preparedStmt2String(stmtID uint32) string { if sv == nil { return "" } - if config.RedactLogEnabled() { + if sv.EnableRedactLog { return cc.preparedStmt2StringNoArgs(stmtID) } return cc.preparedStmt2StringNoArgs(stmtID) + sv.PreparedParams.String() diff --git a/server/server.go b/server/server.go index e71f808091f9f..7a4c048f1bc47 100644 --- a/server/server.go +++ b/server/server.go @@ -58,6 +58,7 @@ import ( "github.com/pingcap/tidb/plugin" "github.com/pingcap/tidb/sessionctx/variable" "github.com/pingcap/tidb/util" + "github.com/pingcap/tidb/util/dbterror" "github.com/pingcap/tidb/util/fastrand" "github.com/pingcap/tidb/util/logutil" "github.com/pingcap/tidb/util/sys/linux" @@ -90,14 +91,14 @@ func init() { } var ( - errUnknownFieldType = terror.ClassServer.New(errno.ErrUnknownFieldType, errno.MySQLErrName[errno.ErrUnknownFieldType]) - errInvalidSequence = terror.ClassServer.New(errno.ErrInvalidSequence, errno.MySQLErrName[errno.ErrInvalidSequence]) - errInvalidType = terror.ClassServer.New(errno.ErrInvalidType, errno.MySQLErrName[errno.ErrInvalidType]) - errNotAllowedCommand = terror.ClassServer.New(errno.ErrNotAllowedCommand, errno.MySQLErrName[errno.ErrNotAllowedCommand]) - errAccessDenied = terror.ClassServer.New(errno.ErrAccessDenied, errno.MySQLErrName[errno.ErrAccessDenied]) - errConCount = terror.ClassServer.New(errno.ErrConCount, errno.MySQLErrName[errno.ErrConCount]) - errSecureTransportRequired = terror.ClassServer.New(errno.ErrSecureTransportRequired, errno.MySQLErrName[errno.ErrSecureTransportRequired]) - errMultiStatementDisabled = terror.ClassServer.New(errno.ErrUnknown, "client has multi-statement capability disabled") // MySQL returns a parse error + errUnknownFieldType = dbterror.ClassServer.NewStd(errno.ErrUnknownFieldType) + errInvalidSequence = dbterror.ClassServer.NewStd(errno.ErrInvalidSequence) + errInvalidType = dbterror.ClassServer.NewStd(errno.ErrInvalidType) + errNotAllowedCommand = dbterror.ClassServer.NewStd(errno.ErrNotAllowedCommand) + errAccessDenied = dbterror.ClassServer.NewStd(errno.ErrAccessDenied) + errConCount = dbterror.ClassServer.NewStd(errno.ErrConCount) + errSecureTransportRequired = dbterror.ClassServer.NewStd(errno.ErrSecureTransportRequired) + errMultiStatementDisabled = dbterror.ClassServer.NewStdErr(errno.ErrUnknown, mysql.Message("client has multi-statement capability disabled", nil)) // MySQL returns a parse error ) // DefaultCapability is the capability of the server when it is created using the default configuration. diff --git a/session/session.go b/session/session.go index dfd4afcf4f05e..de28262388b26 100644 --- a/session/session.go +++ b/session/session.go @@ -657,7 +657,7 @@ func (s *session) retry(ctx context.Context, maxCnt uint) (err error) { // We do not have to log the query every time. // We print the queries at the first try only. sql := sqlForLog(st.GetTextToLog()) - if !config.RedactLogEnabled() { + if !sessVars.EnableRedactLog { sql += sessVars.PreparedParams.String() } logutil.Logger(ctx).Warn("retrying", @@ -962,6 +962,9 @@ func (s *session) GetAllSysVars() (map[string]string, error) { // GetGlobalSysVar implements GlobalVarAccessor.GetGlobalSysVar interface. func (s *session) GetGlobalSysVar(name string) (string, error) { + if name == variable.TiDBSlowLogMasking { + name = variable.TiDBRedactLog + } if s.Value(sessionctx.Initing) != nil { // When running bootstrap or upgrade, we should not access global storage. return "", nil @@ -983,6 +986,9 @@ func (s *session) GetGlobalSysVar(name string) (string, error) { // SetGlobalSysVar implements GlobalVarAccessor.SetGlobalSysVar interface. func (s *session) SetGlobalSysVar(name, value string) error { + if name == variable.TiDBSlowLogMasking { + name = variable.TiDBRedactLog + } if name == variable.SQLModeVar { value = mysql.FormatSQLModeStr(value) if _, err := mysql.GetSQLMode(value); err != nil { @@ -1997,7 +2003,6 @@ var builtinGlobalVariable = []string{ variable.TiDBIsolationReadEngines, variable.TiDBStoreLimit, variable.TiDBAllowAutoRandExplicitInsert, - variable.TiDBSlowLogMasking, variable.TiDBRedactLog, variable.TiDBEnableTelemetry, variable.TiDBEnableAmendPessimisticTxn, @@ -2185,7 +2190,7 @@ func logStmt(execStmt *executor.ExecStmt, vars *variable.SessionVars) { func logQuery(query string, vars *variable.SessionVars) { if atomic.LoadUint32(&variable.ProcessGeneralLog) != 0 && !vars.InRestrictedSQL { query = executor.QueryReplacer.Replace(query) - if !config.RedactLogEnabled() { + if !vars.EnableRedactLog { query = query + vars.PreparedParams.String() } logutil.BgLogger().Info("GENERAL_LOG", diff --git a/session/session_test.go b/session/session_test.go index 544b5f3488cc4..13c4b3a80e200 100644 --- a/session/session_test.go +++ b/session/session_test.go @@ -3228,6 +3228,34 @@ func (s *testSessionSuite2) TestPerStmtTaskID(c *C) { c.Assert(taskID1 != taskID2, IsTrue) } +func (s *testSessionSuite2) TestDeprecateSlowLogMasking(c *C) { + tk := testkit.NewTestKitWithInit(c, s.store) + + tk.MustExec("set @@global.tidb_redact_log=0") + tk.MustQuery("select @@global.tidb_redact_log").Check(testkit.Rows("0")) + tk.MustQuery("select @@global.tidb_slow_log_masking").Check(testkit.Rows("0")) + + tk.MustExec("set @@global.tidb_redact_log=1") + tk.MustQuery("select @@global.tidb_redact_log").Check(testkit.Rows("1")) + tk.MustQuery("select @@global.tidb_slow_log_masking").Check(testkit.Rows("1")) + + tk.MustExec("set @@global.tidb_slow_log_masking=0") + tk.MustQuery("select @@global.tidb_redact_log").Check(testkit.Rows("0")) + tk.MustQuery("select @@global.tidb_slow_log_masking").Check(testkit.Rows("0")) + + tk.MustExec("set @@session.tidb_redact_log=0") + tk.MustQuery("select @@session.tidb_redact_log").Check(testkit.Rows("0")) + tk.MustQuery("select @@session.tidb_slow_log_masking").Check(testkit.Rows("0")) + + tk.MustExec("set @@session.tidb_redact_log=1") + tk.MustQuery("select @@session.tidb_redact_log").Check(testkit.Rows("1")) + tk.MustQuery("select @@session.tidb_slow_log_masking").Check(testkit.Rows("1")) + + tk.MustExec("set @@session.tidb_slow_log_masking=0") + tk.MustQuery("select @@session.tidb_redact_log").Check(testkit.Rows("0")) + tk.MustQuery("select @@session.tidb_slow_log_masking").Check(testkit.Rows("0")) +} + func (s *testBackupRestoreSuite) TestBackupAndRestore(c *C) { // only run BR SQL integration test with tikv store. if *withTiKV { diff --git a/session/tidb.go b/session/tidb.go index 9d914407a8eff..275f354f1c5f6 100644 --- a/session/tidb.go +++ b/session/tidb.go @@ -29,7 +29,6 @@ import ( "github.com/pingcap/parser" "github.com/pingcap/parser/ast" "github.com/pingcap/parser/mysql" - "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/config" "github.com/pingcap/tidb/domain" "github.com/pingcap/tidb/errno" @@ -39,6 +38,7 @@ import ( "github.com/pingcap/tidb/sessionctx/variable" "github.com/pingcap/tidb/util" "github.com/pingcap/tidb/util/chunk" + "github.com/pingcap/tidb/util/dbterror" "github.com/pingcap/tidb/util/logutil" "github.com/pingcap/tidb/util/sqlexec" "go.uber.org/zap" @@ -416,7 +416,7 @@ func ResultSetToStringSlice(ctx context.Context, s Session, rs sqlexec.RecordSet // Session errors. var ( - ErrForUpdateCantRetry = terror.ClassSession.New(errno.ErrForUpdateCantRetry, errno.MySQLErrName[errno.ErrForUpdateCantRetry]) + ErrForUpdateCantRetry = dbterror.ClassSession.NewStd(errno.ErrForUpdateCantRetry) ) // ExecStmtVarKeyType is a dummy type to avoid naming collision in context. diff --git a/sessionctx/variable/error.go b/sessionctx/variable/error.go index 016783bdb64a3..b6a5bf2901def 100644 --- a/sessionctx/variable/error.go +++ b/sessionctx/variable/error.go @@ -14,24 +14,24 @@ package variable import ( - "github.com/pingcap/parser/terror" mysql "github.com/pingcap/tidb/errno" + "github.com/pingcap/tidb/util/dbterror" ) // Error instances. var ( - errCantGetValidID = terror.ClassVariable.New(mysql.ErrCantGetValidID, mysql.MySQLErrName[mysql.ErrCantGetValidID]) - errWarnDeprecatedSyntax = terror.ClassVariable.New(mysql.ErrWarnDeprecatedSyntax, mysql.MySQLErrName[mysql.ErrWarnDeprecatedSyntax]) - ErrCantSetToNull = terror.ClassVariable.New(mysql.ErrCantSetToNull, mysql.MySQLErrName[mysql.ErrCantSetToNull]) - ErrSnapshotTooOld = terror.ClassVariable.New(mysql.ErrSnapshotTooOld, mysql.MySQLErrName[mysql.ErrSnapshotTooOld]) - ErrUnsupportedValueForVar = terror.ClassVariable.New(mysql.ErrUnsupportedValueForVar, mysql.MySQLErrName[mysql.ErrUnsupportedValueForVar]) - ErrUnknownSystemVar = terror.ClassVariable.New(mysql.ErrUnknownSystemVariable, mysql.MySQLErrName[mysql.ErrUnknownSystemVariable]) - ErrIncorrectScope = terror.ClassVariable.New(mysql.ErrIncorrectGlobalLocalVar, mysql.MySQLErrName[mysql.ErrIncorrectGlobalLocalVar]) - ErrUnknownTimeZone = terror.ClassVariable.New(mysql.ErrUnknownTimeZone, mysql.MySQLErrName[mysql.ErrUnknownTimeZone]) - ErrReadOnly = terror.ClassVariable.New(mysql.ErrVariableIsReadonly, mysql.MySQLErrName[mysql.ErrVariableIsReadonly]) - ErrWrongValueForVar = terror.ClassVariable.New(mysql.ErrWrongValueForVar, mysql.MySQLErrName[mysql.ErrWrongValueForVar]) - ErrWrongTypeForVar = terror.ClassVariable.New(mysql.ErrWrongTypeForVar, mysql.MySQLErrName[mysql.ErrWrongTypeForVar]) - ErrTruncatedWrongValue = terror.ClassVariable.New(mysql.ErrTruncatedWrongValue, mysql.MySQLErrName[mysql.ErrTruncatedWrongValue]) - ErrMaxPreparedStmtCountReached = terror.ClassVariable.New(mysql.ErrMaxPreparedStmtCountReached, mysql.MySQLErrName[mysql.ErrMaxPreparedStmtCountReached]) - ErrUnsupportedIsolationLevel = terror.ClassVariable.New(mysql.ErrUnsupportedIsolationLevel, mysql.MySQLErrName[mysql.ErrUnsupportedIsolationLevel]) + errCantGetValidID = dbterror.ClassVariable.NewStd(mysql.ErrCantGetValidID) + errWarnDeprecatedSyntax = dbterror.ClassVariable.NewStd(mysql.ErrWarnDeprecatedSyntax) + ErrCantSetToNull = dbterror.ClassVariable.NewStd(mysql.ErrCantSetToNull) + ErrSnapshotTooOld = dbterror.ClassVariable.NewStd(mysql.ErrSnapshotTooOld) + ErrUnsupportedValueForVar = dbterror.ClassVariable.NewStd(mysql.ErrUnsupportedValueForVar) + ErrUnknownSystemVar = dbterror.ClassVariable.NewStd(mysql.ErrUnknownSystemVariable) + ErrIncorrectScope = dbterror.ClassVariable.NewStd(mysql.ErrIncorrectGlobalLocalVar) + ErrUnknownTimeZone = dbterror.ClassVariable.NewStd(mysql.ErrUnknownTimeZone) + ErrReadOnly = dbterror.ClassVariable.NewStd(mysql.ErrVariableIsReadonly) + ErrWrongValueForVar = dbterror.ClassVariable.NewStd(mysql.ErrWrongValueForVar) + ErrWrongTypeForVar = dbterror.ClassVariable.NewStd(mysql.ErrWrongTypeForVar) + ErrTruncatedWrongValue = dbterror.ClassVariable.NewStd(mysql.ErrTruncatedWrongValue) + ErrMaxPreparedStmtCountReached = dbterror.ClassVariable.NewStd(mysql.ErrMaxPreparedStmtCountReached) + ErrUnsupportedIsolationLevel = dbterror.ClassVariable.NewStd(mysql.ErrUnsupportedIsolationLevel) ) diff --git a/sessionctx/variable/session.go b/sessionctx/variable/session.go index a5ff5929acaf6..f35c392c8af70 100644 --- a/sessionctx/variable/session.go +++ b/sessionctx/variable/session.go @@ -637,6 +637,9 @@ type SessionVars struct { // SelectLimit limits the max counts of select statement's output SelectLimit uint64 + // EnableRedactLog indicates that whether redact log. + EnableRedactLog bool + // EnableAmendPessimisticTxn indicates if schema change amend is enabled for pessimistic transactions. EnableAmendPessimisticTxn bool @@ -985,6 +988,9 @@ func (s *SessionVars) GetSystemVar(name string) (string, bool) { } else if name == ErrorCount { return strconv.Itoa(int(s.SysErrorCount)), true } + if name == TiDBSlowLogMasking { + name = TiDBRedactLog + } val, ok := s.systems[name] return val, ok } @@ -1347,8 +1353,12 @@ func (s *SessionVars) SetSystemVar(name string, val string) error { config.GetGlobalConfig().EnableCollectExecutionInfo = TiDBOptOn(val) case TiDBAllowAutoRandExplicitInsert: s.AllowAutoRandExplicitInsert = TiDBOptOn(val) - case TiDBSlowLogMasking, TiDBRedactLog: - config.SetRedactLog(TiDBOptOn(val)) + case TiDBSlowLogMasking: + // TiDBSlowLogMasking is deprecated and a alias of TiDBRedactLog. + return s.SetSystemVar(TiDBRedactLog, val) + case TiDBRedactLog: + s.EnableRedactLog = TiDBOptOn(val) + errors.RedactLogEnabled.Store(s.EnableRedactLog) case TiDBEnableAmendPessimisticTxn: s.EnableAmendPessimisticTxn = TiDBOptOn(val) } diff --git a/sessionctx/variable/sysvar.go b/sessionctx/variable/sysvar.go index b3a85c90f6a14..5db39c673bd08 100644 --- a/sessionctx/variable/sysvar.go +++ b/sessionctx/variable/sysvar.go @@ -724,10 +724,10 @@ var defaultSysVars = []*SysVar{ {ScopeSession, TiDBQueryLogMaxLen, strconv.Itoa(logutil.DefaultQueryLogMaxLen)}, {ScopeSession, TiDBCheckMb4ValueInUTF8, BoolToIntStr(config.GetGlobalConfig().CheckMb4ValueInUTF8)}, {ScopeSession, TiDBFoundInPlanCache, BoolToIntStr(DefTiDBFoundInPlanCache)}, - {ScopeGlobal, TiDBSlowLogMasking, BoolToIntStr(DefTiDBSlowLogMasking)}, {ScopeSession, TiDBEnableCollectExecutionInfo, BoolToIntStr(DefTiDBEnableCollectExecutionInfo)}, {ScopeGlobal | ScopeSession, TiDBAllowAutoRandExplicitInsert, boolToOnOff(DefTiDBAllowAutoRandExplicitInsert)}, - {ScopeGlobal, TiDBRedactLog, strconv.Itoa(config.DefTiDBRedactLog)}, + {ScopeGlobal | ScopeSession, TiDBSlowLogMasking, BoolToIntStr(DefTiDBRedactLog)}, + {ScopeGlobal | ScopeSession, TiDBRedactLog, BoolToIntStr(DefTiDBRedactLog)}, {ScopeGlobal, TiDBEnableTelemetry, BoolToIntStr(DefTiDBEnableTelemetry)}, {ScopeGlobal | ScopeSession, TiDBEnableAmendPessimisticTxn, boolToOnOff(DefTiDBEnableAmendPessimisticTxn)}, } diff --git a/sessionctx/variable/tidb_vars.go b/sessionctx/variable/tidb_vars.go index 86d356d880932..255f82f6413bc 100644 --- a/sessionctx/variable/tidb_vars.go +++ b/sessionctx/variable/tidb_vars.go @@ -403,13 +403,13 @@ const ( // TiDBMetricSchemaRangeDuration indicates the range duration when query metric schema. TiDBMetricSchemaRangeDuration = "tidb_metric_query_range_duration" - // TiDBSlowLogMasking indicates that whether masking the query data when log slow query. - // Deprecated: use TiDBRedactLog instead. - TiDBSlowLogMasking = "tidb_slow_log_masking" - // TiDBEnableCollectExecutionInfo indicates that whether execution info is collected. TiDBEnableCollectExecutionInfo = "tidb_enable_collect_execution_info" + // TiDBSlowLogMasking is deprecated and a alias of TiDBRedactLog. + // Deprecated: use TiDBRedactLog instead. + TiDBSlowLogMasking = "tidb_slow_log_masking" + // TiDBRedactLog indicates that whether redact log. TiDBRedactLog = "tidb_redact_log" @@ -514,9 +514,9 @@ const ( DefTiDBMetricSchemaStep = 60 // 60s DefTiDBMetricSchemaRangeDuration = 60 // 60s DefTiDBFoundInPlanCache = false - DefTiDBSlowLogMasking = false DefTiDBEnableCollectExecutionInfo = true DefTiDBAllowAutoRandExplicitInsert = false + DefTiDBRedactLog = false DefTiDBEnableTelemetry = true DefTiDBEnableAmendPessimisticTxn = false ) diff --git a/sessionctx/variable/varsutil_test.go b/sessionctx/variable/varsutil_test.go index d0802ca1dc4ce..5acbc70810851 100644 --- a/sessionctx/variable/varsutil_test.go +++ b/sessionctx/variable/varsutil_test.go @@ -415,6 +415,12 @@ func (s *testVarsutilSuite) TestVarsutil(c *C) { c.Assert(err, IsNil) c.Assert(val, Equals, "1") + err = SetSessionSystemVar(v, TiDBRedactLog, types.NewStringDatum("ON")) + c.Assert(err, IsNil) + val, err = GetSessionSystemVar(v, TiDBRedactLog) + c.Assert(err, IsNil) + c.Assert(val, Equals, "ON") + err = SetSessionSystemVar(v, TiDBStmtSummaryRefreshInterval, types.NewStringDatum("10")) c.Assert(err, IsNil) val, err = GetSessionSystemVar(v, TiDBStmtSummaryRefreshInterval) diff --git a/store/tikv/error.go b/store/tikv/error.go index 67b4f90ebb0dd..1bbd5c4a1787b 100644 --- a/store/tikv/error.go +++ b/store/tikv/error.go @@ -17,8 +17,8 @@ import ( "github.com/pingcap/errors" "github.com/pingcap/kvproto/pkg/kvrpcpb" "github.com/pingcap/kvproto/pkg/pdpb" - "github.com/pingcap/parser/terror" mysql "github.com/pingcap/tidb/errno" + "github.com/pingcap/tidb/util/dbterror" ) var ( @@ -33,26 +33,26 @@ const mismatchClusterID = "mismatch cluster id" // MySQL error instances. var ( - ErrTiKVServerTimeout = terror.ClassTiKV.New(mysql.ErrTiKVServerTimeout, mysql.MySQLErrName[mysql.ErrTiKVServerTimeout]) - ErrResolveLockTimeout = terror.ClassTiKV.New(mysql.ErrResolveLockTimeout, mysql.MySQLErrName[mysql.ErrResolveLockTimeout]) - ErrPDServerTimeout = terror.ClassTiKV.New(mysql.ErrPDServerTimeout, mysql.MySQLErrName[mysql.ErrPDServerTimeout]) - ErrRegionUnavailable = terror.ClassTiKV.New(mysql.ErrRegionUnavailable, mysql.MySQLErrName[mysql.ErrRegionUnavailable]) - ErrTiKVServerBusy = terror.ClassTiKV.New(mysql.ErrTiKVServerBusy, mysql.MySQLErrName[mysql.ErrTiKVServerBusy]) - ErrTiKVStaleCommand = terror.ClassTiKV.New(mysql.ErrTiKVStaleCommand, mysql.MySQLErrName[mysql.ErrTiKVStaleCommand]) - ErrGCTooEarly = terror.ClassTiKV.New(mysql.ErrGCTooEarly, mysql.MySQLErrName[mysql.ErrGCTooEarly]) - ErrQueryInterrupted = terror.ClassTiKV.New(mysql.ErrQueryInterrupted, mysql.MySQLErrName[mysql.ErrQueryInterrupted]) - ErrLockAcquireFailAndNoWaitSet = terror.ClassTiKV.New(mysql.ErrLockAcquireFailAndNoWaitSet, mysql.MySQLErrName[mysql.ErrLockAcquireFailAndNoWaitSet]) - ErrLockWaitTimeout = terror.ClassTiKV.New(mysql.ErrLockWaitTimeout, mysql.MySQLErrName[mysql.ErrLockWaitTimeout]) - ErrTokenLimit = terror.ClassTiKV.New(mysql.ErrTiKVStoreLimit, mysql.MySQLErrName[mysql.ErrTiKVStoreLimit]) - ErrLockExpire = terror.ClassTiKV.New(mysql.ErrLockExpire, mysql.MySQLErrName[mysql.ErrLockExpire]) - ErrUnknown = terror.ClassTiKV.New(mysql.ErrUnknown, mysql.MySQLErrName[mysql.ErrUnknown]) + ErrTiKVServerTimeout = dbterror.ClassTiKV.NewStd(mysql.ErrTiKVServerTimeout) + ErrResolveLockTimeout = dbterror.ClassTiKV.NewStd(mysql.ErrResolveLockTimeout) + ErrPDServerTimeout = dbterror.ClassTiKV.NewStd(mysql.ErrPDServerTimeout) + ErrRegionUnavailable = dbterror.ClassTiKV.NewStd(mysql.ErrRegionUnavailable) + ErrTiKVServerBusy = dbterror.ClassTiKV.NewStd(mysql.ErrTiKVServerBusy) + ErrTiKVStaleCommand = dbterror.ClassTiKV.NewStd(mysql.ErrTiKVStaleCommand) + ErrGCTooEarly = dbterror.ClassTiKV.NewStd(mysql.ErrGCTooEarly) + ErrQueryInterrupted = dbterror.ClassTiKV.NewStd(mysql.ErrQueryInterrupted) + ErrLockAcquireFailAndNoWaitSet = dbterror.ClassTiKV.NewStd(mysql.ErrLockAcquireFailAndNoWaitSet) + ErrLockWaitTimeout = dbterror.ClassTiKV.NewStd(mysql.ErrLockWaitTimeout) + ErrTokenLimit = dbterror.ClassTiKV.NewStd(mysql.ErrTiKVStoreLimit) + ErrLockExpire = dbterror.ClassTiKV.NewStd(mysql.ErrLockExpire) + ErrUnknown = dbterror.ClassTiKV.NewStd(mysql.ErrUnknown) ) // Registers error returned from TiKV. var ( - _ = terror.ClassTiKV.NewStd(mysql.ErrDataOutOfRange) - _ = terror.ClassTiKV.NewStd(mysql.ErrTruncatedWrongValue) - _ = terror.ClassTiKV.NewStd(mysql.ErrDivisionByZero) + _ = dbterror.ClassTiKV.NewStd(mysql.ErrDataOutOfRange) + _ = dbterror.ClassTiKV.NewStd(mysql.ErrTruncatedWrongValue) + _ = dbterror.ClassTiKV.NewStd(mysql.ErrDivisionByZero) ) // ErrDeadlock wraps *kvrpcpb.Deadlock to implement the error interface. diff --git a/structure/structure.go b/structure/structure.go index dce4ff8dd7204..e46160c71d599 100644 --- a/structure/structure.go +++ b/structure/structure.go @@ -14,20 +14,20 @@ package structure import ( - "github.com/pingcap/parser/terror" mysql "github.com/pingcap/tidb/errno" "github.com/pingcap/tidb/kv" + "github.com/pingcap/tidb/util/dbterror" ) var ( // ErrInvalidHashKeyFlag used by structure - ErrInvalidHashKeyFlag = terror.ClassStructure.New(mysql.ErrInvalidHashKeyFlag, mysql.MySQLErrName[mysql.ErrInvalidHashKeyFlag]) + ErrInvalidHashKeyFlag = dbterror.ClassStructure.NewStd(mysql.ErrInvalidHashKeyFlag) // ErrInvalidListIndex used by structure - ErrInvalidListIndex = terror.ClassStructure.New(mysql.ErrInvalidListIndex, mysql.MySQLErrName[mysql.ErrInvalidListIndex]) + ErrInvalidListIndex = dbterror.ClassStructure.NewStd(mysql.ErrInvalidListIndex) // ErrInvalidListMetaData used by structure - ErrInvalidListMetaData = terror.ClassStructure.New(mysql.ErrInvalidListMetaData, mysql.MySQLErrName[mysql.ErrInvalidListMetaData]) + ErrInvalidListMetaData = dbterror.ClassStructure.NewStd(mysql.ErrInvalidListMetaData) // ErrWriteOnSnapshot used by structure - ErrWriteOnSnapshot = terror.ClassStructure.New(mysql.ErrWriteOnSnapshot, mysql.MySQLErrName[mysql.ErrWriteOnSnapshot]) + ErrWriteOnSnapshot = dbterror.ClassStructure.NewStd(mysql.ErrWriteOnSnapshot) ) // NewStructure creates a TxStructure with Retriever, RetrieverMutator and key prefix. diff --git a/table/table.go b/table/table.go index 7afc22b15cd12..02fd330655d16 100644 --- a/table/table.go +++ b/table/table.go @@ -22,12 +22,12 @@ import ( "github.com/opentracing/opentracing-go" "github.com/pingcap/parser/model" - "github.com/pingcap/parser/terror" mysql "github.com/pingcap/tidb/errno" "github.com/pingcap/tidb/kv" "github.com/pingcap/tidb/meta/autoid" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/types" + "github.com/pingcap/tidb/util/dbterror" ) // Type , the type of table, store data in different ways. @@ -66,44 +66,44 @@ const ( var ( // ErrColumnCantNull is used for inserting null to a not null column. - ErrColumnCantNull = terror.ClassTable.New(mysql.ErrBadNull, mysql.MySQLErrName[mysql.ErrBadNull]) + ErrColumnCantNull = dbterror.ClassTable.NewStd(mysql.ErrBadNull) // ErrUnknownColumn is returned when accessing an unknown column. - ErrUnknownColumn = terror.ClassTable.New(mysql.ErrBadField, mysql.MySQLErrName[mysql.ErrBadField]) - errDuplicateColumn = terror.ClassTable.New(mysql.ErrFieldSpecifiedTwice, mysql.MySQLErrName[mysql.ErrFieldSpecifiedTwice]) + ErrUnknownColumn = dbterror.ClassTable.NewStd(mysql.ErrBadField) + errDuplicateColumn = dbterror.ClassTable.NewStd(mysql.ErrFieldSpecifiedTwice) - errGetDefaultFailed = terror.ClassTable.New(mysql.ErrFieldGetDefaultFailed, mysql.MySQLErrName[mysql.ErrFieldGetDefaultFailed]) + errGetDefaultFailed = dbterror.ClassTable.NewStd(mysql.ErrFieldGetDefaultFailed) // ErrNoDefaultValue is used when insert a row, the column value is not given, and the column has not null flag // and it doesn't have a default value. - ErrNoDefaultValue = terror.ClassTable.New(mysql.ErrNoDefaultForField, mysql.MySQLErrName[mysql.ErrNoDefaultForField]) + ErrNoDefaultValue = dbterror.ClassTable.NewStd(mysql.ErrNoDefaultForField) // ErrIndexOutBound returns for index column offset out of bound. - ErrIndexOutBound = terror.ClassTable.New(mysql.ErrIndexOutBound, mysql.MySQLErrName[mysql.ErrIndexOutBound]) + ErrIndexOutBound = dbterror.ClassTable.NewStd(mysql.ErrIndexOutBound) // ErrUnsupportedOp returns for unsupported operation. - ErrUnsupportedOp = terror.ClassTable.New(mysql.ErrUnsupportedOp, mysql.MySQLErrName[mysql.ErrUnsupportedOp]) + ErrUnsupportedOp = dbterror.ClassTable.NewStd(mysql.ErrUnsupportedOp) // ErrRowNotFound returns for row not found. - ErrRowNotFound = terror.ClassTable.New(mysql.ErrRowNotFound, mysql.MySQLErrName[mysql.ErrRowNotFound]) + ErrRowNotFound = dbterror.ClassTable.NewStd(mysql.ErrRowNotFound) // ErrTableStateCantNone returns for table none state. - ErrTableStateCantNone = terror.ClassTable.New(mysql.ErrTableStateCantNone, mysql.MySQLErrName[mysql.ErrTableStateCantNone]) + ErrTableStateCantNone = dbterror.ClassTable.NewStd(mysql.ErrTableStateCantNone) // ErrColumnStateCantNone returns for column none state. - ErrColumnStateCantNone = terror.ClassTable.New(mysql.ErrColumnStateCantNone, mysql.MySQLErrName[mysql.ErrColumnStateCantNone]) + ErrColumnStateCantNone = dbterror.ClassTable.NewStd(mysql.ErrColumnStateCantNone) // ErrColumnStateNonPublic returns for column non-public state. - ErrColumnStateNonPublic = terror.ClassTable.New(mysql.ErrColumnStateNonPublic, mysql.MySQLErrName[mysql.ErrColumnStateNonPublic]) + ErrColumnStateNonPublic = dbterror.ClassTable.NewStd(mysql.ErrColumnStateNonPublic) // ErrIndexStateCantNone returns for index none state. - ErrIndexStateCantNone = terror.ClassTable.New(mysql.ErrIndexStateCantNone, mysql.MySQLErrName[mysql.ErrIndexStateCantNone]) + ErrIndexStateCantNone = dbterror.ClassTable.NewStd(mysql.ErrIndexStateCantNone) // ErrInvalidRecordKey returns for invalid record key. - ErrInvalidRecordKey = terror.ClassTable.New(mysql.ErrInvalidRecordKey, mysql.MySQLErrName[mysql.ErrInvalidRecordKey]) + ErrInvalidRecordKey = dbterror.ClassTable.NewStd(mysql.ErrInvalidRecordKey) // ErrTruncatedWrongValueForField returns for truncate wrong value for field. - ErrTruncatedWrongValueForField = terror.ClassTable.New(mysql.ErrTruncatedWrongValueForField, mysql.MySQLErrName[mysql.ErrTruncatedWrongValueForField]) + ErrTruncatedWrongValueForField = dbterror.ClassTable.NewStd(mysql.ErrTruncatedWrongValueForField) // ErrUnknownPartition returns unknown partition error. - ErrUnknownPartition = terror.ClassTable.New(mysql.ErrUnknownPartition, mysql.MySQLErrName[mysql.ErrUnknownPartition]) + ErrUnknownPartition = dbterror.ClassTable.NewStd(mysql.ErrUnknownPartition) // ErrNoPartitionForGivenValue returns table has no partition for value. - ErrNoPartitionForGivenValue = terror.ClassTable.New(mysql.ErrNoPartitionForGivenValue, mysql.MySQLErrName[mysql.ErrNoPartitionForGivenValue]) + ErrNoPartitionForGivenValue = dbterror.ClassTable.NewStd(mysql.ErrNoPartitionForGivenValue) // ErrLockOrActiveTransaction returns when execute unsupported statement in a lock session or an active transaction. - ErrLockOrActiveTransaction = terror.ClassTable.New(mysql.ErrLockOrActiveTransaction, mysql.MySQLErrName[mysql.ErrLockOrActiveTransaction]) + ErrLockOrActiveTransaction = dbterror.ClassTable.NewStd(mysql.ErrLockOrActiveTransaction) // ErrSequenceHasRunOut returns when sequence has run out. - ErrSequenceHasRunOut = terror.ClassTable.New(mysql.ErrSequenceRunOut, mysql.MySQLErrName[mysql.ErrSequenceRunOut]) + ErrSequenceHasRunOut = dbterror.ClassTable.NewStd(mysql.ErrSequenceRunOut) // ErrRowDoesNotMatchGivenPartitionSet returns when the destination partition conflict with the partition selection. - ErrRowDoesNotMatchGivenPartitionSet = terror.ClassTable.NewStd(mysql.ErrRowDoesNotMatchGivenPartitionSet) + ErrRowDoesNotMatchGivenPartitionSet = dbterror.ClassTable.NewStd(mysql.ErrRowDoesNotMatchGivenPartitionSet) ) // RecordIterFunc is used for low-level record iteration. diff --git a/tablecodec/tablecodec.go b/tablecodec/tablecodec.go index 8f0e7768b18c0..9179955af674f 100644 --- a/tablecodec/tablecodec.go +++ b/tablecodec/tablecodec.go @@ -32,13 +32,14 @@ import ( "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/codec" "github.com/pingcap/tidb/util/collate" + "github.com/pingcap/tidb/util/dbterror" "github.com/pingcap/tidb/util/rowcodec" ) var ( - errInvalidKey = terror.ClassXEval.New(errno.ErrInvalidKey, errno.MySQLErrName[errno.ErrInvalidKey]) - errInvalidRecordKey = terror.ClassXEval.New(errno.ErrInvalidRecordKey, errno.MySQLErrName[errno.ErrInvalidRecordKey]) - errInvalidIndexKey = terror.ClassXEval.New(errno.ErrInvalidIndexKey, errno.MySQLErrName[errno.ErrInvalidIndexKey]) + errInvalidKey = dbterror.ClassXEval.NewStd(errno.ErrInvalidKey) + errInvalidRecordKey = dbterror.ClassXEval.NewStd(errno.ErrInvalidRecordKey) + errInvalidIndexKey = dbterror.ClassXEval.NewStd(errno.ErrInvalidIndexKey) ) var ( diff --git a/types/errors.go b/types/errors.go index e55eb32208015..e7a8a9c2b467c 100644 --- a/types/errors.go +++ b/types/errors.go @@ -14,9 +14,9 @@ package types import ( - "github.com/pingcap/parser/terror" parser_types "github.com/pingcap/parser/types" mysql "github.com/pingcap/tidb/errno" + "github.com/pingcap/tidb/util/dbterror" ) // const strings for ErrWrongValue @@ -29,50 +29,50 @@ var ( // ErrInvalidDefault is returned when meet a invalid default value. ErrInvalidDefault = parser_types.ErrInvalidDefault // ErrDataTooLong is returned when converts a string value that is longer than field type length. - ErrDataTooLong = terror.ClassTypes.New(mysql.ErrDataTooLong, mysql.MySQLErrName[mysql.ErrDataTooLong]) + ErrDataTooLong = dbterror.ClassTypes.NewStd(mysql.ErrDataTooLong) // ErrIllegalValueForType is returned when value of type is illegal. - ErrIllegalValueForType = terror.ClassTypes.New(mysql.ErrIllegalValueForType, mysql.MySQLErrName[mysql.ErrIllegalValueForType]) + ErrIllegalValueForType = dbterror.ClassTypes.NewStd(mysql.ErrIllegalValueForType) // ErrTruncated is returned when data has been truncated during conversion. - ErrTruncated = terror.ClassTypes.New(mysql.WarnDataTruncated, mysql.MySQLErrName[mysql.WarnDataTruncated]) + ErrTruncated = dbterror.ClassTypes.NewStd(mysql.WarnDataTruncated) // ErrOverflow is returned when data is out of range for a field type. - ErrOverflow = terror.ClassTypes.New(mysql.ErrDataOutOfRange, mysql.MySQLErrName[mysql.ErrDataOutOfRange]) + ErrOverflow = dbterror.ClassTypes.NewStd(mysql.ErrDataOutOfRange) // ErrDivByZero is return when do division by 0. - ErrDivByZero = terror.ClassTypes.New(mysql.ErrDivisionByZero, mysql.MySQLErrName[mysql.ErrDivisionByZero]) + ErrDivByZero = dbterror.ClassTypes.NewStd(mysql.ErrDivisionByZero) // ErrTooBigDisplayWidth is return when display width out of range for column. - ErrTooBigDisplayWidth = terror.ClassTypes.New(mysql.ErrTooBigDisplaywidth, mysql.MySQLErrName[mysql.ErrTooBigDisplaywidth]) + ErrTooBigDisplayWidth = dbterror.ClassTypes.NewStd(mysql.ErrTooBigDisplaywidth) // ErrTooBigFieldLength is return when column length too big for column. - ErrTooBigFieldLength = terror.ClassTypes.New(mysql.ErrTooBigFieldlength, mysql.MySQLErrName[mysql.ErrTooBigFieldlength]) + ErrTooBigFieldLength = dbterror.ClassTypes.NewStd(mysql.ErrTooBigFieldlength) // ErrTooBigSet is returned when too many strings for column. - ErrTooBigSet = terror.ClassTypes.New(mysql.ErrTooBigSet, mysql.MySQLErrName[mysql.ErrTooBigSet]) + ErrTooBigSet = dbterror.ClassTypes.NewStd(mysql.ErrTooBigSet) // ErrTooBigScale is returned when type DECIMAL/NUMERIC scale is bigger than mysql.MaxDecimalScale. - ErrTooBigScale = terror.ClassTypes.New(mysql.ErrTooBigScale, mysql.MySQLErrName[mysql.ErrTooBigScale]) + ErrTooBigScale = dbterror.ClassTypes.NewStd(mysql.ErrTooBigScale) // ErrTooBigPrecision is returned when type DECIMAL/NUMERIC precision is bigger than mysql.MaxDecimalWidth - ErrTooBigPrecision = terror.ClassTypes.New(mysql.ErrTooBigPrecision, mysql.MySQLErrName[mysql.ErrTooBigPrecision]) + ErrTooBigPrecision = dbterror.ClassTypes.NewStd(mysql.ErrTooBigPrecision) // ErrBadNumber is return when parsing an invalid binary decimal number. - ErrBadNumber = terror.ClassTypes.New(mysql.ErrBadNumber, mysql.MySQLErrName[mysql.ErrBadNumber]) + ErrBadNumber = dbterror.ClassTypes.NewStd(mysql.ErrBadNumber) // ErrInvalidFieldSize is returned when the precision of a column is out of range. - ErrInvalidFieldSize = terror.ClassTypes.New(mysql.ErrInvalidFieldSize, mysql.MySQLErrName[mysql.ErrInvalidFieldSize]) + ErrInvalidFieldSize = dbterror.ClassTypes.NewStd(mysql.ErrInvalidFieldSize) // ErrMBiggerThanD is returned when precision less than the scale. - ErrMBiggerThanD = terror.ClassTypes.New(mysql.ErrMBiggerThanD, mysql.MySQLErrName[mysql.ErrMBiggerThanD]) + ErrMBiggerThanD = dbterror.ClassTypes.NewStd(mysql.ErrMBiggerThanD) // ErrWarnDataOutOfRange is returned when the value in a numeric column that is outside the permissible range of the column data type. // See https://dev.mysql.com/doc/refman/5.5/en/out-of-range-and-overflow.html for details - ErrWarnDataOutOfRange = terror.ClassTypes.New(mysql.ErrWarnDataOutOfRange, mysql.MySQLErrName[mysql.ErrWarnDataOutOfRange]) + ErrWarnDataOutOfRange = dbterror.ClassTypes.NewStd(mysql.ErrWarnDataOutOfRange) // ErrDuplicatedValueInType is returned when enum column has duplicated value. - ErrDuplicatedValueInType = terror.ClassTypes.New(mysql.ErrDuplicatedValueInType, mysql.MySQLErrName[mysql.ErrDuplicatedValueInType]) + ErrDuplicatedValueInType = dbterror.ClassTypes.NewStd(mysql.ErrDuplicatedValueInType) // ErrDatetimeFunctionOverflow is returned when the calculation in datetime function cause overflow. - ErrDatetimeFunctionOverflow = terror.ClassTypes.New(mysql.ErrDatetimeFunctionOverflow, mysql.MySQLErrName[mysql.ErrDatetimeFunctionOverflow]) + ErrDatetimeFunctionOverflow = dbterror.ClassTypes.NewStd(mysql.ErrDatetimeFunctionOverflow) // ErrCastAsSignedOverflow is returned when positive out-of-range integer, and convert to it's negative complement. - ErrCastAsSignedOverflow = terror.ClassTypes.New(mysql.ErrCastAsSignedOverflow, mysql.MySQLErrName[mysql.ErrCastAsSignedOverflow]) + ErrCastAsSignedOverflow = dbterror.ClassTypes.NewStd(mysql.ErrCastAsSignedOverflow) // ErrCastNegIntAsUnsigned is returned when a negative integer be casted to an unsigned int. - ErrCastNegIntAsUnsigned = terror.ClassTypes.New(mysql.ErrCastNegIntAsUnsigned, mysql.MySQLErrName[mysql.ErrCastNegIntAsUnsigned]) + ErrCastNegIntAsUnsigned = dbterror.ClassTypes.NewStd(mysql.ErrCastNegIntAsUnsigned) // ErrInvalidYearFormat is returned when the input is not a valid year format. - ErrInvalidYearFormat = terror.ClassTypes.New(mysql.ErrInvalidYearFormat, mysql.MySQLErrName[mysql.ErrInvalidYearFormat]) + ErrInvalidYearFormat = dbterror.ClassTypes.NewStd(mysql.ErrInvalidYearFormat) // ErrInvalidYear is returned when the input value is not a valid year. - ErrInvalidYear = terror.ClassTypes.New(mysql.ErrInvalidYear, mysql.MySQLErrName[mysql.ErrInvalidYear]) + ErrInvalidYear = dbterror.ClassTypes.NewStd(mysql.ErrInvalidYear) // ErrTruncatedWrongVal is returned when data has been truncated during conversion. - ErrTruncatedWrongVal = terror.ClassTypes.New(mysql.ErrTruncatedWrongValue, mysql.MySQLErrName[mysql.ErrTruncatedWrongValue]) + ErrTruncatedWrongVal = dbterror.ClassTypes.NewStd(mysql.ErrTruncatedWrongValue) // ErrInvalidWeekModeFormat is returned when the week mode is wrong. - ErrInvalidWeekModeFormat = terror.ClassTypes.New(mysql.ErrInvalidWeekModeFormat, mysql.MySQLErrName[mysql.ErrInvalidWeekModeFormat]) + ErrInvalidWeekModeFormat = dbterror.ClassTypes.NewStd(mysql.ErrInvalidWeekModeFormat) // ErrWrongValue is returned when the input value is in wrong format. - ErrWrongValue = terror.ClassTypes.New(mysql.ErrTruncatedWrongValue, mysql.MySQLErrName[mysql.ErrWrongValue]) + ErrWrongValue = dbterror.ClassTypes.NewStdErr(mysql.ErrTruncatedWrongValue, mysql.MySQLErrName[mysql.ErrWrongValue]) ) diff --git a/types/json/constants.go b/types/json/constants.go index c6f17c992ad67..bb375884847cd 100644 --- a/types/json/constants.go +++ b/types/json/constants.go @@ -17,8 +17,8 @@ import ( "encoding/binary" "unicode/utf8" - "github.com/pingcap/parser/terror" mysql "github.com/pingcap/tidb/errno" + "github.com/pingcap/tidb/util/dbterror" ) // TypeCode indicates JSON type. @@ -206,21 +206,21 @@ const ( var ( // ErrInvalidJSONText means invalid JSON text. - ErrInvalidJSONText = terror.ClassJSON.New(mysql.ErrInvalidJSONText, mysql.MySQLErrName[mysql.ErrInvalidJSONText]) + ErrInvalidJSONText = dbterror.ClassJSON.NewStd(mysql.ErrInvalidJSONText) // ErrInvalidJSONPath means invalid JSON path. - ErrInvalidJSONPath = terror.ClassJSON.New(mysql.ErrInvalidJSONPath, mysql.MySQLErrName[mysql.ErrInvalidJSONPath]) + ErrInvalidJSONPath = dbterror.ClassJSON.NewStd(mysql.ErrInvalidJSONPath) // ErrInvalidJSONData means invalid JSON data. - ErrInvalidJSONData = terror.ClassJSON.New(mysql.ErrInvalidJSONData, mysql.MySQLErrName[mysql.ErrInvalidJSONData]) + ErrInvalidJSONData = dbterror.ClassJSON.NewStd(mysql.ErrInvalidJSONData) // ErrInvalidJSONPathWildcard means invalid JSON path that contain wildcard characters. - ErrInvalidJSONPathWildcard = terror.ClassJSON.New(mysql.ErrInvalidJSONPathWildcard, mysql.MySQLErrName[mysql.ErrInvalidJSONPathWildcard]) + ErrInvalidJSONPathWildcard = dbterror.ClassJSON.NewStd(mysql.ErrInvalidJSONPathWildcard) // ErrInvalidJSONContainsPathType means invalid JSON contains path type. - ErrInvalidJSONContainsPathType = terror.ClassJSON.New(mysql.ErrInvalidJSONContainsPathType, mysql.MySQLErrName[mysql.ErrInvalidJSONContainsPathType]) + ErrInvalidJSONContainsPathType = dbterror.ClassJSON.NewStd(mysql.ErrInvalidJSONContainsPathType) // ErrJSONDocumentNULLKey means that json's key is null - ErrJSONDocumentNULLKey = terror.ClassJSON.New(mysql.ErrJSONDocumentNULLKey, mysql.MySQLErrName[mysql.ErrJSONDocumentNULLKey]) + ErrJSONDocumentNULLKey = dbterror.ClassJSON.NewStd(mysql.ErrJSONDocumentNULLKey) // ErrInvalidJSONPathArrayCell means invalid JSON path for an array cell. - ErrInvalidJSONPathArrayCell = terror.ClassJSON.New(mysql.ErrInvalidJSONPathArrayCell, mysql.MySQLErrName[mysql.ErrInvalidJSONPathArrayCell]) + ErrInvalidJSONPathArrayCell = dbterror.ClassJSON.NewStd(mysql.ErrInvalidJSONPathArrayCell) // ErrUnsupportedSecondArgumentType means unsupported second argument type in json_objectagg - ErrUnsupportedSecondArgumentType = terror.ClassJSON.New(mysql.ErrUnsupportedSecondArgumentType, mysql.MySQLErrName[mysql.ErrUnsupportedSecondArgumentType]) + ErrUnsupportedSecondArgumentType = dbterror.ClassJSON.NewStd(mysql.ErrUnsupportedSecondArgumentType) ) // json_contains_path function type choices diff --git a/util/admin/admin.go b/util/admin/admin.go index a52c0994abe7d..a5f46de92f9aa 100644 --- a/util/admin/admin.go +++ b/util/admin/admin.go @@ -24,7 +24,6 @@ import ( "github.com/pingcap/errors" "github.com/pingcap/parser/model" "github.com/pingcap/parser/mysql" - "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/errno" "github.com/pingcap/tidb/expression" "github.com/pingcap/tidb/kv" @@ -34,6 +33,7 @@ import ( "github.com/pingcap/tidb/tablecodec" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util" + "github.com/pingcap/tidb/util/dbterror" "github.com/pingcap/tidb/util/logutil" "github.com/pingcap/tidb/util/rowDecoder" "github.com/pingcap/tidb/util/sqlexec" @@ -459,11 +459,11 @@ func iterRecords(sessCtx sessionctx.Context, retriever kv.Retriever, t table.Tab var ( // ErrDataInConsistent indicate that meets inconsistent data. - ErrDataInConsistent = terror.ClassAdmin.New(errno.ErrDataInConsistent, errno.MySQLErrName[errno.ErrDataInConsistent]) + ErrDataInConsistent = dbterror.ClassAdmin.NewStd(errno.ErrDataInConsistent) // ErrDDLJobNotFound indicates the job id was not found. - ErrDDLJobNotFound = terror.ClassAdmin.New(errno.ErrDDLJobNotFound, errno.MySQLErrName[errno.ErrDDLJobNotFound]) + ErrDDLJobNotFound = dbterror.ClassAdmin.NewStd(errno.ErrDDLJobNotFound) // ErrCancelFinishedDDLJob returns when cancel a finished ddl job. - ErrCancelFinishedDDLJob = terror.ClassAdmin.New(errno.ErrCancelFinishedDDLJob, errno.MySQLErrName[errno.ErrCancelFinishedDDLJob]) + ErrCancelFinishedDDLJob = dbterror.ClassAdmin.NewStd(errno.ErrCancelFinishedDDLJob) // ErrCannotCancelDDLJob returns when cancel a almost finished ddl job, because cancel in now may cause data inconsistency. - ErrCannotCancelDDLJob = terror.ClassAdmin.New(errno.ErrCannotCancelDDLJob, errno.MySQLErrName[errno.ErrCannotCancelDDLJob]) + ErrCannotCancelDDLJob = dbterror.ClassAdmin.NewStd(errno.ErrCannotCancelDDLJob) ) diff --git a/util/collate/collate.go b/util/collate/collate.go index 0b866d80a9c24..ec99afcf2dfd5 100644 --- a/util/collate/collate.go +++ b/util/collate/collate.go @@ -21,6 +21,7 @@ import ( "github.com/pingcap/parser/charset" "github.com/pingcap/parser/mysql" "github.com/pingcap/parser/terror" + "github.com/pingcap/tidb/util/dbterror" "github.com/pingcap/tidb/util/logutil" "go.uber.org/zap" ) @@ -34,9 +35,9 @@ var ( binCollatorInstance = &binCollator{} // ErrUnsupportedCollation is returned when an unsupported collation is specified. - ErrUnsupportedCollation = terror.ClassDDL.New(mysql.ErrUnknownCollation, "Unsupported collation when new collation is enabled: '%-.64s'") + ErrUnsupportedCollation = dbterror.ClassDDL.NewStdErr(mysql.ErrUnknownCollation, mysql.Message("Unsupported collation when new collation is enabled: '%-.64s'", nil)) // ErrIllegalMixCollation is returned when illegal mix of collations. - ErrIllegalMixCollation = terror.ClassExpression.New(mysql.ErrCantAggregate2collations, mysql.MySQLErrName[mysql.ErrCantAggregate2collations]) + ErrIllegalMixCollation = dbterror.ClassExpression.NewStd(mysql.ErrCantAggregate2collations) ) // DefaultLen is set for datum if the string datum don't know its length. diff --git a/util/dbterror/terror.go b/util/dbterror/terror.go new file mode 100644 index 0000000000000..3f8918efa9ddf --- /dev/null +++ b/util/dbterror/terror.go @@ -0,0 +1,56 @@ +// Copyright 2020 PingCAP, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// See the License for the specific language governing permissions and +// limitations under the License. + +package dbterror + +import ( + "github.com/pingcap/parser/terror" + "github.com/pingcap/tidb/errno" +) + +// ErrClass represents a class of errors. +type ErrClass struct{ terror.ErrClass } + +// Error classes. +var ( + ClassAutoid = ErrClass{terror.ClassAutoid} + ClassDDL = ErrClass{terror.ClassDDL} + ClassDomain = ErrClass{terror.ClassDomain} + ClassExecutor = ErrClass{terror.ClassExecutor} + ClassExpression = ErrClass{terror.ClassExpression} + ClassAdmin = ErrClass{terror.ClassAdmin} + ClassKV = ErrClass{terror.ClassKV} + ClassMeta = ErrClass{terror.ClassMeta} + ClassOptimizer = ErrClass{terror.ClassOptimizer} + ClassPrivilege = ErrClass{terror.ClassPrivilege} + ClassSchema = ErrClass{terror.ClassSchema} + ClassServer = ErrClass{terror.ClassServer} + ClassStructure = ErrClass{terror.ClassStructure} + ClassVariable = ErrClass{terror.ClassVariable} + ClassXEval = ErrClass{terror.ClassXEval} + ClassTable = ErrClass{terror.ClassTable} + ClassTypes = ErrClass{terror.ClassTypes} + ClassJSON = ErrClass{terror.ClassJSON} + ClassTiKV = ErrClass{terror.ClassTiKV} + ClassSession = ErrClass{terror.ClassSession} + ClassPlugin = ErrClass{terror.ClassPlugin} + ClassUtil = ErrClass{terror.ClassUtil} +) + +// NewStd calls New using the standard message for the error code +// Attention: +// this method is not goroutine-safe and +// usually be used in global variable initializer +func (ec ErrClass) NewStd(code terror.ErrCode) *terror.Error { + return ec.NewStdErr(code, errno.MySQLErrName[uint16(code)]) +} diff --git a/util/dbterror/terror_test.go b/util/dbterror/terror_test.go new file mode 100644 index 0000000000000..ba66e26727d0a --- /dev/null +++ b/util/dbterror/terror_test.go @@ -0,0 +1,43 @@ +// Copyright 2020 PingCAP, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// See the License for the specific language governing permissions and +// limitations under the License. + +package dbterror + +import ( + "strings" + "testing" + + . "github.com/pingcap/check" + "github.com/pingcap/errors" + "github.com/pingcap/tidb/errno" +) + +func TestT(t *testing.T) { + TestingT(t) +} + +var _ = Suite(&testkSuite{}) + +type testkSuite struct{} + +func (s *testkSuite) TestErrorRedact(c *C) { + original := errors.RedactLogEnabled.Load() + errors.RedactLogEnabled.Store(true) + defer func() { errors.RedactLogEnabled.Store(original) }() + + class := ErrClass{} + err := class.NewStd(errno.ErrDupEntry).GenWithStackByArgs("sensitive", "data") + c.Assert(strings.Contains(err.Error(), "?"), IsTrue) + c.Assert(strings.Contains(err.Error(), "sensitive"), IsFalse) + c.Assert(strings.Contains(err.Error(), "data"), IsFalse) +} diff --git a/util/hint/hint_processor.go b/util/hint/hint_processor.go index b1fd24ed20909..86804acee6ab1 100644 --- a/util/hint/hint_processor.go +++ b/util/hint/hint_processor.go @@ -23,9 +23,9 @@ import ( "github.com/pingcap/parser/ast" "github.com/pingcap/parser/format" "github.com/pingcap/parser/model" - "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/errno" "github.com/pingcap/tidb/sessionctx" + "github.com/pingcap/tidb/util/dbterror" "github.com/pingcap/tidb/util/logutil" "go.uber.org/zap" ) @@ -105,7 +105,7 @@ func checkInsertStmtHintDuplicated(node ast.Node, sctx sessionctx.Context) { } if duplicatedHint != nil { hint := fmt.Sprintf("%s(`%v`)", duplicatedHint.HintName.O, duplicatedHint.HintData) - err := terror.ClassUtil.New(errno.ErrWarnConflictingHint, fmt.Sprintf(errno.MySQLErrName[errno.ErrWarnConflictingHint], hint)) + err := dbterror.ClassUtil.NewStd(errno.ErrWarnConflictingHint).FastGenByArgs(hint) sctx.GetSessionVars().StmtCtx.AppendWarning(err) } } diff --git a/util/memory/action.go b/util/memory/action.go index b1081ba5c1adc..d78d4994272a9 100644 --- a/util/memory/action.go +++ b/util/memory/action.go @@ -17,8 +17,8 @@ import ( "fmt" "sync" - "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/errno" + "github.com/pingcap/tidb/util/dbterror" "github.com/pingcap/tidb/util/logutil" "go.uber.org/zap" ) @@ -100,7 +100,7 @@ func (a *PanicOnExceed) Action(t *Tracker) { func (a *PanicOnExceed) SetFallback(ActionOnExceed) {} var ( - errMemExceedThreshold = terror.ClassUtil.New(errno.ErrMemExceedThreshold, errno.MySQLErrName[errno.ErrMemExceedThreshold]) + errMemExceedThreshold = dbterror.ClassUtil.NewStd(errno.ErrMemExceedThreshold) ) const ( diff --git a/util/ranger/points.go b/util/ranger/points.go index 0e6b1406ffd9b..c780b5b8c73fd 100644 --- a/util/ranger/points.go +++ b/util/ranger/points.go @@ -21,7 +21,6 @@ import ( "github.com/pingcap/errors" "github.com/pingcap/parser/ast" "github.com/pingcap/parser/mysql" - "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/errno" "github.com/pingcap/tidb/expression" "github.com/pingcap/tidb/sessionctx" @@ -29,11 +28,12 @@ import ( "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/chunk" "github.com/pingcap/tidb/util/collate" + "github.com/pingcap/tidb/util/dbterror" ) // Error instances. var ( - ErrUnsupportedType = terror.ClassOptimizer.New(errno.ErrUnsupportedType, errno.MySQLErrName[errno.ErrUnsupportedType]) + ErrUnsupportedType = dbterror.ClassOptimizer.NewStd(errno.ErrUnsupportedType) ) // RangeType is alias for int. diff --git a/util/redact/redact.go b/util/redact/redact.go deleted file mode 100644 index 11f894f5086f9..0000000000000 --- a/util/redact/redact.go +++ /dev/null @@ -1,67 +0,0 @@ -// Copyright 2020 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package redact - -import ( - "github.com/pingcap/parser/terror" - "github.com/pingcap/tidb/config" -) - -// TError is a alias, use to avoid `Error` method name in conflict with field name. -type TError = terror.Error - -type redactError struct { - *TError - redactPositions []int -} - -// GenWithStackByArgs generates a new *Error with the same class and code, and new arguments. -func (e *redactError) GenWithStackByArgs(args ...interface{}) error { - redactErrorArg(args, e.redactPositions) - return e.TError.GenWithStackByArgs(args...) -} - -// FastGen generates a new *Error with the same class and code, and a new arguments. -func (e *redactError) FastGenByArgs(args ...interface{}) error { - redactErrorArg(args, e.redactPositions) - return e.TError.GenWithStackByArgs(args...) -} - -// Equal checks if err is equal to e. -func (e *redactError) Equal(err error) bool { - if redactErr, ok := err.(*redactError); ok { - return e.TError.Equal(redactErr.TError) - } - return e.TError.Equal(err) -} - -// Cause implement the Cause interface. -func (e *redactError) Cause() error { - return e.TError -} - -func redactErrorArg(args []interface{}, position []int) { - if config.RedactLogEnabled() { - for _, pos := range position { - if len(args) > pos { - args[pos] = "?" - } - } - } -} - -// NewRedactError returns a new redact error. -func NewRedactError(err *terror.Error, redactPositions ...int) *redactError { - return &redactError{err, redactPositions} -} From cbfa0bd3e31e5e0cc56d50b3df086843c2dec520 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Wed, 25 Nov 2020 01:32:40 +0800 Subject: [PATCH 145/229] expression: fix TIMESTAMP func get wrong result with decimal (#15185) (#20088) (#20470) --- expression/builtin_time.go | 2 +- expression/integration_test.go | 38 ++++++++++++++++++++++++++++++++++ types/time.go | 27 +++++++++++++++++++----- types/time_test.go | 37 +++++++++++++++++++++++++++++++-- 4 files changed, 96 insertions(+), 8 deletions(-) diff --git a/expression/builtin_time.go b/expression/builtin_time.go index 9f0efbfc592b3..9201c414f9709 100644 --- a/expression/builtin_time.go +++ b/expression/builtin_time.go @@ -4851,7 +4851,7 @@ func (c *timestampFunctionClass) getFunction(ctx sessionctx.Context, args []Expr } isFloat := false switch args[0].GetType().Tp { - case mysql.TypeFloat, mysql.TypeDouble, mysql.TypeDecimal: + case mysql.TypeFloat, mysql.TypeDouble, mysql.TypeNewDecimal, mysql.TypeLonglong: isFloat = true } bf, err := newBaseBuiltinFuncWithTp(ctx, c.funcName, args, types.ETDatetime, evalTps...) diff --git a/expression/integration_test.go b/expression/integration_test.go index 66172d4f20195..63b849450687c 100755 --- a/expression/integration_test.go +++ b/expression/integration_test.go @@ -2170,6 +2170,44 @@ func (s *testIntegrationSuite2) TestTimeBuiltin(c *C) { result = tk.MustQuery("select time(\"-- --1\");") result.Check(testkit.Rows("00:00:00")) tk.MustQuery("show warnings;").Check(testkit.Rows("Warning 1292 Truncated incorrect time value: '-- --1'")) + + // fix issue #15185 + result = tk.MustQuery(`select timestamp(11111.1111)`) + result.Check(testkit.Rows("2001-11-11 00:00:00.0000")) + result = tk.MustQuery(`select timestamp(cast(11111.1111 as decimal(60, 5)))`) + result.Check(testkit.Rows("2001-11-11 00:00:00.00000")) + result = tk.MustQuery(`select timestamp(1021121141105.4324)`) + result.Check(testkit.Rows("0102-11-21 14:11:05.4324")) + result = tk.MustQuery(`select timestamp(cast(1021121141105.4324 as decimal(60, 5)))`) + result.Check(testkit.Rows("0102-11-21 14:11:05.43240")) + result = tk.MustQuery(`select timestamp(21121141105.101)`) + result.Check(testkit.Rows("2002-11-21 14:11:05.101")) + result = tk.MustQuery(`select timestamp(cast(21121141105.101 as decimal(60, 5)))`) + result.Check(testkit.Rows("2002-11-21 14:11:05.10100")) + result = tk.MustQuery(`select timestamp(1121141105.799055)`) + result.Check(testkit.Rows("2000-11-21 14:11:05.799055")) + result = tk.MustQuery(`select timestamp(cast(1121141105.799055 as decimal(60, 5)))`) + result.Check(testkit.Rows("2000-11-21 14:11:05.79906")) + result = tk.MustQuery(`select timestamp(121141105.123)`) + result.Check(testkit.Rows("2000-01-21 14:11:05.123")) + result = tk.MustQuery(`select timestamp(cast(121141105.123 as decimal(60, 5)))`) + result.Check(testkit.Rows("2000-01-21 14:11:05.12300")) + result = tk.MustQuery(`select timestamp(1141105)`) + result.Check(testkit.Rows("0114-11-05 00:00:00")) + result = tk.MustQuery(`select timestamp(cast(1141105 as decimal(60, 5)))`) + result.Check(testkit.Rows("0114-11-05 00:00:00.00000")) + result = tk.MustQuery(`select timestamp(41105.11)`) + result.Check(testkit.Rows("2004-11-05 00:00:00.00")) + result = tk.MustQuery(`select timestamp(cast(41105.11 as decimal(60, 5)))`) + result.Check(testkit.Rows("2004-11-05 00:00:00.00000")) + result = tk.MustQuery(`select timestamp(1105.3)`) + result.Check(testkit.Rows("2000-11-05 00:00:00.0")) + result = tk.MustQuery(`select timestamp(cast(1105.3 as decimal(60, 5)))`) + result.Check(testkit.Rows("2000-11-05 00:00:00.00000")) + result = tk.MustQuery(`select timestamp(105)`) + result.Check(testkit.Rows("2000-01-05 00:00:00")) + result = tk.MustQuery(`select timestamp(cast(105 as decimal(60, 5)))`) + result.Check(testkit.Rows("2000-01-05 00:00:00.00000")) } func (s *testIntegrationSuite) TestOpBuiltin(c *C) { diff --git a/types/time.go b/types/time.go index f8b679090f15b..b4d1ce898b321 100644 --- a/types/time.go +++ b/types/time.go @@ -997,6 +997,28 @@ func parseDatetime(sc *stmtctx.StatementContext, str string, fsp int8, isFloat b switch len(seps) { case 1: l := len(seps[0]) + // Values specified as numbers + if isFloat { + numOfTime, err := StrToInt(sc, seps[0], false) + if err != nil { + return ZeroDatetime, errors.Trace(ErrWrongValue.GenWithStackByArgs(DateTimeStr, str)) + } + + dateTime, err := ParseDatetimeFromNum(sc, numOfTime) + if err != nil { + return ZeroDatetime, errors.Trace(ErrWrongValue.GenWithStackByArgs(DateTimeStr, str)) + } + + year, month, day, hour, minute, second = + dateTime.Year(), dateTime.Month(), dateTime.Day(), dateTime.Hour(), dateTime.Minute(), dateTime.Second() + if l >= 9 && l <= 14 { + hhmmss = true + } + + break + } + + // Values specified as strings switch l { case 14: // No delimiter. // YYYYMMDDHHMMSS @@ -1834,11 +1856,6 @@ func parseDateTimeFromNum(sc *stmtctx.StatementContext, num int64) (Time, error) return getTime(sc, num, t.Type()) } - // Check YYYYMMDD. - if num < 10000101 { - return t, errors.Trace(ErrWrongValue.GenWithStackByArgs(TimeStr, strconv.FormatInt(num, 10))) - } - // Adjust hour/min/second. if num <= 99991231 { num = num * 1000000 diff --git a/types/time_test.go b/types/time_test.go index fa341370566e2..31003c74fce38 100644 --- a/types/time_test.go +++ b/types/time_test.go @@ -631,7 +631,7 @@ func (s *testTimeSuite) TestParseTimeFromNum(c *C) { {2010101011, true, types.ZeroDatetimeStr, true, types.ZeroDatetimeStr, true, types.ZeroDateStr}, {201010101, false, "2000-02-01 01:01:01", false, "2000-02-01 01:01:01", false, "2000-02-01"}, {20101010, false, "2010-10-10 00:00:00", false, "2010-10-10 00:00:00", false, "2010-10-10"}, - {2010101, true, types.ZeroDatetimeStr, true, types.ZeroDatetimeStr, true, types.ZeroDateStr}, + {2010101, false, "0201-01-01 00:00:00", true, types.ZeroDatetimeStr, false, "0201-01-01"}, {201010, false, "2020-10-10 00:00:00", false, "2020-10-10 00:00:00", false, "2020-10-10"}, {20101, false, "2002-01-01 00:00:00", false, "2002-01-01 00:00:00", false, "2002-01-01"}, {2010, true, types.ZeroDatetimeStr, true, types.ZeroDatetimeStr, true, types.ZeroDateStr}, @@ -764,6 +764,39 @@ func (s *testTimeSuite) TestToNumber(c *C) { } } +func (s *testTimeSuite) TestParseTimeFromFloatString(c *C) { + sc := mock.NewContext().GetSessionVars().StmtCtx + sc.IgnoreZeroInDate = true + defer testleak.AfterTest(c)() + table := []struct { + Input string + Fsp int8 + ExpectError bool + Expect string + }{ + {"20170118.123", 3, false, "2017-01-18 00:00:00.000"}, + {"121231113045.123345", 6, false, "2012-12-31 11:30:45.123345"}, + {"20121231113045.123345", 6, false, "2012-12-31 11:30:45.123345"}, + {"121231113045.9999999", 6, false, "2012-12-31 11:30:46.000000"}, + {"170105084059.575601", 6, false, "2017-01-05 08:40:59.575601"}, + {"201705051315111.22", 2, true, "0000-00-00 00:00:00.00"}, + {"2011110859.1111", 4, true, "0000-00-00 00:00:00.0000"}, + {"2011110859.1111", 4, true, "0000-00-00 00:00:00.0000"}, + {"191203081.1111", 4, true, "0000-00-00 00:00:00.0000"}, + {"43128.121105", 6, true, "0000-00-00 00:00:00.000000"}, + } + + for _, test := range table { + t, err := types.ParseTimeFromFloatString(sc, test.Input, mysql.TypeDatetime, test.Fsp) + if test.ExpectError { + c.Assert(err, NotNil) + } else { + c.Assert(err, IsNil) + c.Assert(t.String(), Equals, test.Expect) + } + } +} + func (s *testTimeSuite) TestParseFrac(c *C) { defer testleak.AfterTest(c)() tbl := []struct { @@ -1044,7 +1077,7 @@ func (s *testTimeSuite) TestParseDateFormat(c *C) { } } -func (s *testTimeSuite) TestTamestampDiff(c *C) { +func (s *testTimeSuite) TestTimestampDiff(c *C) { tests := []struct { unit string t1 types.CoreTime From 3fe77c6aa798dc66417787da3ebf71816162283e Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Wed, 25 Nov 2020 10:35:24 +0800 Subject: [PATCH 146/229] infoschema: resolve loopback address of node (#20546) (#20850) Signed-off-by: ti-srebot Signed-off-by: crazycs520 --- infoschema/tables.go | 32 ++++++++++++++++++++++++++++++++ infoschema/tables_test.go | 18 ++++++++++++++++++ 2 files changed, 50 insertions(+) diff --git a/infoschema/tables.go b/infoschema/tables.go index 55ba91eba630a..41a4f2b180ba4 100644 --- a/infoschema/tables.go +++ b/infoschema/tables.go @@ -18,6 +18,7 @@ import ( "encoding/json" "fmt" "io/ioutil" + "net" "net/http" "sort" "strconv" @@ -1370,6 +1371,34 @@ type ServerInfo struct { StartTimestamp int64 } +func (s *ServerInfo) isLoopBackOrUnspecifiedAddr(addr string) bool { + tcpAddr, err := net.ResolveTCPAddr("", addr) + if err != nil { + return false + } + ip := net.ParseIP(tcpAddr.IP.String()) + return ip != nil && (ip.IsUnspecified() || ip.IsLoopback()) +} + +// ResolveLoopBackAddr exports for testing. +func (s *ServerInfo) ResolveLoopBackAddr() { + if s.isLoopBackOrUnspecifiedAddr(s.Address) && !s.isLoopBackOrUnspecifiedAddr(s.StatusAddr) { + addr, err1 := net.ResolveTCPAddr("", s.Address) + statusAddr, err2 := net.ResolveTCPAddr("", s.StatusAddr) + if err1 == nil && err2 == nil { + addr.IP = statusAddr.IP + s.Address = addr.String() + } + } else if !s.isLoopBackOrUnspecifiedAddr(s.Address) && s.isLoopBackOrUnspecifiedAddr(s.StatusAddr) { + addr, err1 := net.ResolveTCPAddr("", s.Address) + statusAddr, err2 := net.ResolveTCPAddr("", s.StatusAddr) + if err1 == nil && err2 == nil { + statusAddr.IP = addr.IP + s.StatusAddr = statusAddr.String() + } + } +} + // GetClusterServerInfo returns all components information of cluster func GetClusterServerInfo(ctx sessionctx.Context) ([]ServerInfo, error) { failpoint.Inject("mockClusterInfo", func(val failpoint.Value) { @@ -1398,6 +1427,9 @@ func GetClusterServerInfo(ctx sessionctx.Context) ([]ServerInfo, error) { if err != nil { return nil, err } + for i := range nodes { + nodes[i].ResolveLoopBackAddr() + } servers = append(servers, nodes...) } return servers, nil diff --git a/infoschema/tables_test.go b/infoschema/tables_test.go index 4e823b6055f9f..8282a460e7bbf 100644 --- a/infoschema/tables_test.go +++ b/infoschema/tables_test.go @@ -1345,3 +1345,21 @@ func (s *testTableSuite) TestFormatVersion(c *C) { c.Assert(version, Equals, res[i]) } } + +func (s *testTableSuite) TestServerInfoResolveLoopBackAddr(c *C) { + nodes := []infoschema.ServerInfo{ + {Address: "127.0.0.1:4000", StatusAddr: "192.168.130.22:10080"}, + {Address: "0.0.0.0:4000", StatusAddr: "192.168.130.22:10080"}, + {Address: "localhost:4000", StatusAddr: "192.168.130.22:10080"}, + {Address: "192.168.130.22:4000", StatusAddr: "0.0.0.0:10080"}, + {Address: "192.168.130.22:4000", StatusAddr: "127.0.0.1:10080"}, + {Address: "192.168.130.22:4000", StatusAddr: "localhost:10080"}, + } + for i := range nodes { + nodes[i].ResolveLoopBackAddr() + } + for _, n := range nodes { + c.Assert(n.Address, Equals, "192.168.130.22:4000") + c.Assert(n.StatusAddr, Equals, "192.168.130.22:10080") + } +} From e8e9e765f3fdcde3d51a9f65cd55210719dadaa4 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Wed, 25 Nov 2020 11:07:23 +0800 Subject: [PATCH 147/229] ddl: check partition name unique when create hash type partition table (#21210) (#21257) Signed-off-by: ti-srebot --- ddl/db_partition_test.go | 1 + ddl/ddl_api.go | 3 +++ 2 files changed, 4 insertions(+) diff --git a/ddl/db_partition_test.go b/ddl/db_partition_test.go index 32eb70cb91b46..f6fe13b079b47 100644 --- a/ddl/db_partition_test.go +++ b/ddl/db_partition_test.go @@ -334,6 +334,7 @@ func (s *testIntegrationSuite2) TestCreateTableWithHashPartition(c *C) { PARTITION p1 VALUES LESS THAN (200), PARTITION p2 VALUES LESS THAN MAXVALUE)`) tk.MustGetErrCode("select * from t_sub partition (p0)", tmysql.ErrPartitionClauseOnNonpartitioned) + tk.MustGetErrCode("create table t_hash(a int) partition by hash (a) partitions 3 (partition p1, partition p2, partition p2);", tmysql.ErrSameNamePartition) } func (s *testIntegrationSuite7) TestCreateTableWithRangeColumnPartition(c *C) { diff --git a/ddl/ddl_api.go b/ddl/ddl_api.go index 6073b0ba1bf7d..8d7dc9bf00019 100644 --- a/ddl/ddl_api.go +++ b/ddl/ddl_api.go @@ -1699,6 +1699,9 @@ func buildViewInfo(ctx sessionctx.Context, s *ast.CreateViewStmt) (*model.ViewIn func checkPartitionByHash(ctx sessionctx.Context, tbInfo *model.TableInfo, s *ast.CreateTableStmt) error { pi := tbInfo.Partition + if err := checkPartitionNameUnique(pi); err != nil { + return err + } if err := checkAddPartitionTooManyPartitions(pi.Num); err != nil { return err } From 6b938b8f5a38fd6eee92ec14887e866d19bb66e9 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Wed, 25 Nov 2020 14:07:44 +0800 Subject: [PATCH 148/229] *: seperate hash keys from join keys in IndexJoin (#20761) (#21086) --- cmd/explaintest/r/explain_complex.result | 62 ++--- .../r/explain_complex_stats.result | 30 +-- cmd/explaintest/r/explain_easy.result | 18 +- cmd/explaintest/r/explain_easy_stats.result | 12 +- cmd/explaintest/r/explain_join_stats.result | 30 +-- cmd/explaintest/r/explain_union_scan.result | 26 +- cmd/explaintest/r/generated_columns.result | 30 +-- cmd/explaintest/r/index_join.result | 44 ++-- cmd/explaintest/r/subquery.result | 2 +- cmd/explaintest/r/topn_push_down.result | 62 ++--- cmd/explaintest/r/tpch.result | 244 +++++++++--------- executor/benchmark_test.go | 8 + executor/builder.go | 13 +- executor/index_lookup_hash_join.go | 10 +- executor/index_lookup_join.go | 42 +-- executor/join_test.go | 64 +++-- planner/core/exhaust_physical_plans.go | 47 +++- planner/core/explain.go | 14 + planner/core/integration_test.go | 25 ++ planner/core/physical_plans.go | 6 + planner/core/resolve_indices.go | 11 + planner/core/testdata/analyze_suite_out.json | 22 +- .../testdata/integration_serial_suite_in.json | 20 ++ .../integration_serial_suite_out.json | 191 ++++++++++---- .../core/testdata/integration_suite_out.json | 54 ++-- .../testdata/plan_normalized_suite_out.json | 4 +- planner/core/testdata/plan_suite_out.json | 2 +- util/ranger/testdata/ranger_suite_out.json | 2 +- 28 files changed, 675 insertions(+), 420 deletions(-) diff --git a/cmd/explaintest/r/explain_complex.result b/cmd/explaintest/r/explain_complex.result index c526e4e859a56..fb5f570e3ef1a 100644 --- a/cmd/explaintest/r/explain_complex.result +++ b/cmd/explaintest/r/explain_complex.result @@ -118,24 +118,24 @@ id estRows task access object operator info Projection_13 1.00 root test.st.id, test.dd.id, test.st.aid, test.st.cm, test.dd.dic, test.dd.ip, test.dd.t, test.st.p1, test.st.p2, test.st.p3, test.st.p4, test.st.p5, test.st.p6_md5, test.st.p7_md5, test.st.ext, test.st.t └─Limit_16 1.00 root offset:0, count:2500 └─HashAgg_19 1.00 root group by:test.dd.dic, test.st.aid, funcs:firstrow(test.st.id)->test.st.id, funcs:firstrow(test.st.aid)->test.st.aid, funcs:firstrow(test.st.cm)->test.st.cm, funcs:firstrow(test.st.p1)->test.st.p1, funcs:firstrow(test.st.p2)->test.st.p2, funcs:firstrow(test.st.p3)->test.st.p3, funcs:firstrow(test.st.p4)->test.st.p4, funcs:firstrow(test.st.p5)->test.st.p5, funcs:firstrow(test.st.p6_md5)->test.st.p6_md5, funcs:firstrow(test.st.p7_md5)->test.st.p7_md5, funcs:firstrow(test.st.ext)->test.st.ext, funcs:firstrow(test.st.t)->test.st.t, funcs:firstrow(test.dd.id)->test.dd.id, funcs:firstrow(test.dd.dic)->test.dd.dic, funcs:firstrow(test.dd.ip)->test.dd.ip, funcs:firstrow(test.dd.t)->test.dd.t - └─HashJoin_28 0.00 root inner join, equal:[eq(test.dd.aid, test.st.aid) eq(test.dd.ip, test.st.ip)], other cond:gt(test.dd.t, test.st.t) - ├─IndexLookUp_46(Build) 0.00 root - │ ├─IndexRangeScan_43(Build) 3333.33 cop[tikv] table:dd, index:t(t) range:(1478143908,+inf], keep order:false, stats:pseudo - │ └─Selection_45(Probe) 0.00 cop[tikv] eq(test.dd.bm, 0), eq(test.dd.pt, "android"), not(isnull(test.dd.ip)) - │ └─TableRowIDScan_44 3333.33 cop[tikv] table:dd keep order:false, stats:pseudo - └─IndexLookUp_35(Probe) 3.33 root - ├─IndexRangeScan_32(Build) 3333.33 cop[tikv] table:gad, index:t(t) range:(1478143908,+inf], keep order:false, stats:pseudo - └─Selection_34(Probe) 3.33 cop[tikv] eq(test.st.pt, "android"), not(isnull(test.st.ip)) - └─TableRowIDScan_33 3333.33 cop[tikv] table:gad keep order:false, stats:pseudo + └─HashJoin_30 0.00 root inner join, equal:[eq(test.dd.aid, test.st.aid) eq(test.dd.ip, test.st.ip)], other cond:gt(test.dd.t, test.st.t) + ├─IndexLookUp_48(Build) 0.00 root + │ ├─IndexRangeScan_45(Build) 3333.33 cop[tikv] table:dd, index:t(t) range:(1478143908,+inf], keep order:false, stats:pseudo + │ └─Selection_47(Probe) 0.00 cop[tikv] eq(test.dd.bm, 0), eq(test.dd.pt, "android"), not(isnull(test.dd.ip)) + │ └─TableRowIDScan_46 3333.33 cop[tikv] table:dd keep order:false, stats:pseudo + └─IndexLookUp_37(Probe) 3.33 root + ├─IndexRangeScan_34(Build) 3333.33 cop[tikv] table:gad, index:t(t) range:(1478143908,+inf], keep order:false, stats:pseudo + └─Selection_36(Probe) 3.33 cop[tikv] eq(test.st.pt, "android"), not(isnull(test.st.ip)) + └─TableRowIDScan_35 3333.33 cop[tikv] table:gad keep order:false, stats:pseudo explain select gad.id as gid,sdk.id as sid,gad.aid as aid,gad.cm as cm,sdk.dic as dic,sdk.ip as ip, sdk.t as t, gad.p1 as p1, gad.p2 as p2, gad.p3 as p3, gad.p4 as p4, gad.p5 as p5, gad.p6_md5 as p6, gad.p7_md5 as p7, gad.ext as ext from st gad join dd sdk on gad.aid = sdk.aid and gad.dic = sdk.mac and gad.t < sdk.t where gad.t > 1477971479 and gad.bm = 0 and gad.pt = 'ios' and gad.dit = 'mac' and sdk.t > 1477971479 and sdk.bm = 0 and sdk.pt = 'ios' limit 3000; id estRows task access object operator info Projection_10 0.00 root test.st.id, test.dd.id, test.st.aid, test.st.cm, test.dd.dic, test.dd.ip, test.dd.t, test.st.p1, test.st.p2, test.st.p3, test.st.p4, test.st.p5, test.st.p6_md5, test.st.p7_md5, test.st.ext └─Limit_13 0.00 root offset:0, count:3000 - └─IndexJoin_18 0.00 root inner join, inner:IndexLookUp_17, outer key:test.st.aid, inner key:test.dd.aid, other cond:eq(test.st.dic, test.dd.mac), lt(test.st.t, test.dd.t) - ├─IndexLookUp_29(Build) 0.00 root - │ ├─IndexRangeScan_26(Build) 3333.33 cop[tikv] table:gad, index:t(t) range:(1477971479,+inf], keep order:false, stats:pseudo - │ └─Selection_28(Probe) 0.00 cop[tikv] eq(test.st.bm, 0), eq(test.st.dit, "mac"), eq(test.st.pt, "ios"), not(isnull(test.st.dic)) - │ └─TableRowIDScan_27 3333.33 cop[tikv] table:gad keep order:false, stats:pseudo + └─IndexJoin_18 0.00 root inner join, inner:IndexLookUp_17, outer key:test.st.aid, inner key:test.dd.aid, equal cond:eq(test.st.aid, test.dd.aid), eq(test.st.dic, test.dd.mac), other cond:lt(test.st.t, test.dd.t) + ├─IndexLookUp_31(Build) 0.00 root + │ ├─IndexRangeScan_28(Build) 3333.33 cop[tikv] table:gad, index:t(t) range:(1477971479,+inf], keep order:false, stats:pseudo + │ └─Selection_30(Probe) 0.00 cop[tikv] eq(test.st.bm, 0), eq(test.st.dit, "mac"), eq(test.st.pt, "ios"), not(isnull(test.st.dic)) + │ └─TableRowIDScan_29 3333.33 cop[tikv] table:gad keep order:false, stats:pseudo └─IndexLookUp_17(Probe) 0.00 root ├─IndexRangeScan_14(Build) 10000.00 cop[tikv] table:sdk, index:aid(aid, dic) range: decided by [eq(test.dd.aid, test.st.aid)], keep order:false, stats:pseudo └─Selection_16(Probe) 0.00 cop[tikv] eq(test.dd.bm, 0), eq(test.dd.pt, "ios"), gt(test.dd.t, 1477971479), not(isnull(test.dd.mac)), not(isnull(test.dd.t)) @@ -152,15 +152,15 @@ explain select dt.id as id, dt.aid as aid, dt.pt as pt, dt.dic as dic, dt.cm as id estRows task access object operator info Projection_10 0.00 root test.dt.id, test.dt.aid, test.dt.pt, test.dt.dic, test.dt.cm, test.rr.gid, test.rr.acd, test.rr.t, test.dt.p1, test.dt.p2, test.dt.p3, test.dt.p4, test.dt.p5, test.dt.p6_md5, test.dt.p7_md5 └─Limit_13 0.00 root offset:0, count:2000 - └─IndexJoin_27 0.00 root inner join, inner:IndexLookUp_26, outer key:test.rr.aid, test.rr.dic, inner key:test.dt.aid, test.dt.dic - ├─TableReader_47(Build) 3.33 root data:Selection_46 - │ └─Selection_46 3.33 cop[tikv] eq(test.rr.pt, "ios"), gt(test.rr.t, 1478185592) - │ └─TableFullScan_45 10000.00 cop[tikv] table:rr keep order:false, stats:pseudo - └─IndexLookUp_26(Probe) 0.00 root - ├─Selection_24(Build) 1.00 cop[tikv] not(isnull(test.dt.dic)) - │ └─IndexRangeScan_22 1.00 cop[tikv] table:dt, index:aid(aid, dic) range: decided by [eq(test.dt.aid, test.rr.aid) eq(test.dt.dic, test.rr.dic)], keep order:false, stats:pseudo - └─Selection_25(Probe) 0.00 cop[tikv] eq(test.dt.bm, 0), eq(test.dt.pt, "ios"), gt(test.dt.t, 1478185592) - └─TableRowIDScan_23 1.00 cop[tikv] table:dt keep order:false, stats:pseudo + └─IndexJoin_29 0.00 root inner join, inner:IndexLookUp_28, outer key:test.rr.aid, test.rr.dic, inner key:test.dt.aid, test.dt.dic, equal cond:eq(test.rr.aid, test.dt.aid), eq(test.rr.dic, test.dt.dic) + ├─TableReader_51(Build) 3.33 root data:Selection_50 + │ └─Selection_50 3.33 cop[tikv] eq(test.rr.pt, "ios"), gt(test.rr.t, 1478185592) + │ └─TableFullScan_49 10000.00 cop[tikv] table:rr keep order:false, stats:pseudo + └─IndexLookUp_28(Probe) 0.00 root + ├─Selection_26(Build) 1.00 cop[tikv] not(isnull(test.dt.dic)) + │ └─IndexRangeScan_24 1.00 cop[tikv] table:dt, index:aid(aid, dic) range: decided by [eq(test.dt.aid, test.rr.aid) eq(test.dt.dic, test.rr.dic)], keep order:false, stats:pseudo + └─Selection_27(Probe) 0.00 cop[tikv] eq(test.dt.bm, 0), eq(test.dt.pt, "ios"), gt(test.dt.t, 1478185592) + └─TableRowIDScan_25 1.00 cop[tikv] table:dt keep order:false, stats:pseudo explain select pc,cr,count(DISTINCT uid) as pay_users,count(oid) as pay_times,sum(am) as am from pp where ps=2 and ppt>=1478188800 and ppt<1478275200 and pi in ('510017','520017') and uid in ('18089709','18090780') group by pc,cr; id estRows task access object operator info Projection_5 1.00 root test.pp.pc, test.pp.cr, Column#22, Column#23, Column#24 @@ -247,16 +247,16 @@ Sort_10 1.00 root test.org_department.left_value:asc └─HashAgg_15 1.00 root group by:test.org_department.id, funcs:firstrow(test.org_department.id)->test.org_department.id, funcs:firstrow(test.org_department.ctx)->test.org_department.ctx, funcs:firstrow(test.org_department.name)->test.org_department.name, funcs:firstrow(test.org_department.left_value)->test.org_department.left_value, funcs:firstrow(test.org_department.right_value)->test.org_department.right_value, funcs:firstrow(test.org_department.depth)->test.org_department.depth, funcs:firstrow(test.org_department.leader_id)->test.org_department.leader_id, funcs:firstrow(test.org_department.status)->test.org_department.status, funcs:firstrow(test.org_department.created_on)->test.org_department.created_on, funcs:firstrow(test.org_department.updated_on)->test.org_department.updated_on └─Selection_22 0.01 root or(eq(test.org_employee_position.user_id, 62), or(eq(test.org_department.id, 20), eq(test.org_department.id, 20))) └─HashJoin_24 0.02 root left outer join, equal:[eq(test.org_position.id, test.org_employee_position.position_id)] - ├─IndexJoin_33(Build) 0.01 root left outer join, inner:IndexLookUp_32, outer key:test.org_department.id, inner key:test.org_position.department_id - │ ├─IndexLookUp_55(Build) 0.01 root - │ │ ├─IndexRangeScan_52(Build) 10.00 cop[tikv] table:d, index:org_department_ctx_index(ctx) range:[1,1], keep order:false, stats:pseudo - │ │ └─Selection_54(Probe) 0.01 cop[tikv] eq(test.org_department.status, 1000) - │ │ └─TableRowIDScan_53 10.00 cop[tikv] table:d keep order:false, stats:pseudo + ├─IndexJoin_33(Build) 0.01 root left outer join, inner:IndexLookUp_32, outer key:test.org_department.id, inner key:test.org_position.department_id, equal cond:eq(test.org_department.id, test.org_position.department_id) + │ ├─IndexLookUp_57(Build) 0.01 root + │ │ ├─IndexRangeScan_54(Build) 10.00 cop[tikv] table:d, index:org_department_ctx_index(ctx) range:[1,1], keep order:false, stats:pseudo + │ │ └─Selection_56(Probe) 0.01 cop[tikv] eq(test.org_department.status, 1000) + │ │ └─TableRowIDScan_55 10.00 cop[tikv] table:d keep order:false, stats:pseudo │ └─IndexLookUp_32(Probe) 1.25 root │ ├─Selection_30(Build) 1250.00 cop[tikv] not(isnull(test.org_position.department_id)) │ │ └─IndexRangeScan_28 1251.25 cop[tikv] table:p, index:org_position_department_id_index(department_id) range: decided by [eq(test.org_position.department_id, test.org_department.id)], keep order:false, stats:pseudo │ └─Selection_31(Probe) 1.25 cop[tikv] eq(test.org_position.status, 1000) │ └─TableRowIDScan_29 1250.00 cop[tikv] table:p keep order:false, stats:pseudo - └─TableReader_65(Probe) 9.99 root data:Selection_64 - └─Selection_64 9.99 cop[tikv] eq(test.org_employee_position.status, 1000), not(isnull(test.org_employee_position.position_id)) - └─TableFullScan_63 10000.00 cop[tikv] table:ep keep order:false, stats:pseudo + └─TableReader_67(Probe) 9.99 root data:Selection_66 + └─Selection_66 9.99 cop[tikv] eq(test.org_employee_position.status, 1000), not(isnull(test.org_employee_position.position_id)) + └─TableFullScan_65 10000.00 cop[tikv] table:ep keep order:false, stats:pseudo diff --git a/cmd/explaintest/r/explain_complex_stats.result b/cmd/explaintest/r/explain_complex_stats.result index 534f32420dccb..228f27a75e463 100644 --- a/cmd/explaintest/r/explain_complex_stats.result +++ b/cmd/explaintest/r/explain_complex_stats.result @@ -128,21 +128,21 @@ id estRows task access object operator info Projection_13 424.00 root test.st.id, test.dd.id, test.st.aid, test.st.cm, test.dd.dic, test.dd.ip, test.dd.t, test.st.p1, test.st.p2, test.st.p3, test.st.p4, test.st.p5, test.st.p6_md5, test.st.p7_md5, test.st.ext, test.st.t └─Limit_16 424.00 root offset:0, count:2500 └─HashAgg_19 424.00 root group by:test.dd.dic, test.st.aid, funcs:firstrow(test.st.id)->test.st.id, funcs:firstrow(test.st.aid)->test.st.aid, funcs:firstrow(test.st.cm)->test.st.cm, funcs:firstrow(test.st.p1)->test.st.p1, funcs:firstrow(test.st.p2)->test.st.p2, funcs:firstrow(test.st.p3)->test.st.p3, funcs:firstrow(test.st.p4)->test.st.p4, funcs:firstrow(test.st.p5)->test.st.p5, funcs:firstrow(test.st.p6_md5)->test.st.p6_md5, funcs:firstrow(test.st.p7_md5)->test.st.p7_md5, funcs:firstrow(test.st.ext)->test.st.ext, funcs:firstrow(test.st.t)->test.st.t, funcs:firstrow(test.dd.id)->test.dd.id, funcs:firstrow(test.dd.dic)->test.dd.dic, funcs:firstrow(test.dd.ip)->test.dd.ip, funcs:firstrow(test.dd.t)->test.dd.t - └─HashJoin_28 424.00 root inner join, equal:[eq(test.st.aid, test.dd.aid) eq(test.st.ip, test.dd.ip)], other cond:gt(test.dd.t, test.st.t) - ├─TableReader_31(Build) 424.00 root data:Selection_30 - │ └─Selection_30 424.00 cop[tikv] eq(test.st.bm, 0), eq(test.st.pt, "android"), gt(test.st.t, 1478143908), not(isnull(test.st.ip)) - │ └─TableRangeScan_29 1999.00 cop[tikv] table:gad range:[0,+inf], keep order:false - └─TableReader_38(Probe) 455.80 root data:Selection_37 - └─Selection_37 455.80 cop[tikv] eq(test.dd.bm, 0), eq(test.dd.pt, "android"), gt(test.dd.t, 1478143908), not(isnull(test.dd.ip)), not(isnull(test.dd.t)) - └─TableRangeScan_36 2000.00 cop[tikv] table:dd range:[0,+inf], keep order:false + └─HashJoin_30 424.00 root inner join, equal:[eq(test.st.aid, test.dd.aid) eq(test.st.ip, test.dd.ip)], other cond:gt(test.dd.t, test.st.t) + ├─TableReader_33(Build) 424.00 root data:Selection_32 + │ └─Selection_32 424.00 cop[tikv] eq(test.st.bm, 0), eq(test.st.pt, "android"), gt(test.st.t, 1478143908), not(isnull(test.st.ip)) + │ └─TableRangeScan_31 1999.00 cop[tikv] table:gad range:[0,+inf], keep order:false + └─TableReader_40(Probe) 455.80 root data:Selection_39 + └─Selection_39 455.80 cop[tikv] eq(test.dd.bm, 0), eq(test.dd.pt, "android"), gt(test.dd.t, 1478143908), not(isnull(test.dd.ip)), not(isnull(test.dd.t)) + └─TableRangeScan_38 2000.00 cop[tikv] table:dd range:[0,+inf], keep order:false explain select gad.id as gid,sdk.id as sid,gad.aid as aid,gad.cm as cm,sdk.dic as dic,sdk.ip as ip, sdk.t as t, gad.p1 as p1, gad.p2 as p2, gad.p3 as p3, gad.p4 as p4, gad.p5 as p5, gad.p6_md5 as p6, gad.p7_md5 as p7, gad.ext as ext from st gad join dd sdk on gad.aid = sdk.aid and gad.dic = sdk.mac and gad.t < sdk.t where gad.t > 1477971479 and gad.bm = 0 and gad.pt = 'ios' and gad.dit = 'mac' and sdk.t > 1477971479 and sdk.bm = 0 and sdk.pt = 'ios' limit 3000; id estRows task access object operator info Projection_10 170.34 root test.st.id, test.dd.id, test.st.aid, test.st.cm, test.dd.dic, test.dd.ip, test.dd.t, test.st.p1, test.st.p2, test.st.p3, test.st.p4, test.st.p5, test.st.p6_md5, test.st.p7_md5, test.st.ext └─Limit_13 170.34 root offset:0, count:3000 - └─IndexJoin_18 170.34 root inner join, inner:IndexLookUp_17, outer key:test.st.aid, inner key:test.dd.aid, other cond:eq(test.st.dic, test.dd.mac), lt(test.st.t, test.dd.t) - ├─TableReader_25(Build) 170.34 root data:Selection_24 - │ └─Selection_24 170.34 cop[tikv] eq(test.st.bm, 0), eq(test.st.dit, "mac"), eq(test.st.pt, "ios"), gt(test.st.t, 1477971479), not(isnull(test.st.dic)) - │ └─TableRangeScan_23 1999.00 cop[tikv] table:gad range:[0,+inf], keep order:false + └─IndexJoin_18 170.34 root inner join, inner:IndexLookUp_17, outer key:test.st.aid, inner key:test.dd.aid, equal cond:eq(test.st.aid, test.dd.aid), eq(test.st.dic, test.dd.mac), other cond:lt(test.st.t, test.dd.t) + ├─TableReader_27(Build) 170.34 root data:Selection_26 + │ └─Selection_26 170.34 cop[tikv] eq(test.st.bm, 0), eq(test.st.dit, "mac"), eq(test.st.pt, "ios"), gt(test.st.t, 1477971479), not(isnull(test.st.dic)) + │ └─TableRangeScan_25 1999.00 cop[tikv] table:gad range:[0,+inf], keep order:false └─IndexLookUp_17(Probe) 1.00 root ├─IndexRangeScan_14(Build) 3.93 cop[tikv] table:sdk, index:aid(aid, dic) range: decided by [eq(test.dd.aid, test.st.aid)], keep order:false └─Selection_16(Probe) 1.00 cop[tikv] eq(test.dd.bm, 0), eq(test.dd.pt, "ios"), gt(test.dd.t, 1477971479), not(isnull(test.dd.mac)), not(isnull(test.dd.t)) @@ -159,10 +159,10 @@ explain select dt.id as id, dt.aid as aid, dt.pt as pt, dt.dic as dic, dt.cm as id estRows task access object operator info Projection_10 428.32 root test.dt.id, test.dt.aid, test.dt.pt, test.dt.dic, test.dt.cm, test.rr.gid, test.rr.acd, test.rr.t, test.dt.p1, test.dt.p2, test.dt.p3, test.dt.p4, test.dt.p5, test.dt.p6_md5, test.dt.p7_md5 └─Limit_13 428.32 root offset:0, count:2000 - └─IndexJoin_19 428.32 root inner join, inner:IndexLookUp_18, outer key:test.dt.aid, test.dt.dic, inner key:test.rr.aid, test.rr.dic - ├─TableReader_44(Build) 428.32 root data:Selection_43 - │ └─Selection_43 428.32 cop[tikv] eq(test.dt.bm, 0), eq(test.dt.pt, "ios"), gt(test.dt.t, 1478185592), not(isnull(test.dt.dic)) - │ └─TableRangeScan_42 2000.00 cop[tikv] table:dt range:[0,+inf], keep order:false + └─IndexJoin_19 428.32 root inner join, inner:IndexLookUp_18, outer key:test.dt.aid, test.dt.dic, inner key:test.rr.aid, test.rr.dic, equal cond:eq(test.dt.aid, test.rr.aid), eq(test.dt.dic, test.rr.dic) + ├─TableReader_48(Build) 428.32 root data:Selection_47 + │ └─Selection_47 428.32 cop[tikv] eq(test.dt.bm, 0), eq(test.dt.pt, "ios"), gt(test.dt.t, 1478185592), not(isnull(test.dt.dic)) + │ └─TableRangeScan_46 2000.00 cop[tikv] table:dt range:[0,+inf], keep order:false └─IndexLookUp_18(Probe) 1.00 root ├─IndexRangeScan_15(Build) 1.00 cop[tikv] table:rr, index:PRIMARY(aid, dic) range: decided by [eq(test.rr.aid, test.dt.aid) eq(test.rr.dic, test.dt.dic)], keep order:false └─Selection_17(Probe) 1.00 cop[tikv] eq(test.rr.pt, "ios"), gt(test.rr.t, 1478185592) diff --git a/cmd/explaintest/r/explain_easy.result b/cmd/explaintest/r/explain_easy.result index 8edcb4ec78ae8..cdd794b43209c 100644 --- a/cmd/explaintest/r/explain_easy.result +++ b/cmd/explaintest/r/explain_easy.result @@ -45,12 +45,12 @@ IndexReader_6 10.00 root index:IndexRangeScan_5 └─IndexRangeScan_5 10.00 cop[tikv] table:t1, index:c2(c2) range:[1,1], keep order:false, stats:pseudo explain select * from t1 left join t2 on t1.c2 = t2.c1 where t1.c1 > 1; id estRows task access object operator info -HashJoin_16 4166.67 root left outer join, equal:[eq(test.t1.c2, test.t2.c1)] -├─TableReader_26(Build) 3333.33 root data:TableRangeScan_25 -│ └─TableRangeScan_25 3333.33 cop[tikv] table:t1 range:(1,+inf], keep order:false, stats:pseudo -└─TableReader_29(Probe) 9990.00 root data:Selection_28 - └─Selection_28 9990.00 cop[tikv] not(isnull(test.t2.c1)) - └─TableFullScan_27 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo +HashJoin_18 4166.67 root left outer join, equal:[eq(test.t1.c2, test.t2.c1)] +├─TableReader_28(Build) 3333.33 root data:TableRangeScan_27 +│ └─TableRangeScan_27 3333.33 cop[tikv] table:t1 range:(1,+inf], keep order:false, stats:pseudo +└─TableReader_31(Probe) 9990.00 root data:Selection_30 + └─Selection_30 9990.00 cop[tikv] not(isnull(test.t2.c1)) + └─TableFullScan_29 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo explain update t1 set t1.c2 = 2 where t1.c1 = 1; id estRows task access object operator info Update_2 N/A root N/A @@ -323,7 +323,7 @@ Projection_11 10000.00 root Column#11 ├─TableReader_15(Build) 10000.00 root data:TableFullScan_14 │ └─TableFullScan_14 10000.00 cop[tikv] table:t keep order:false, stats:pseudo └─StreamAgg_20(Probe) 1.00 root funcs:count(1)->Column#10 - └─IndexJoin_36 12.50 root inner join, inner:TableReader_35, outer key:test.t.a, inner key:test.t.a + └─IndexJoin_36 12.50 root inner join, inner:TableReader_35, outer key:test.t.a, inner key:test.t.a, equal cond:eq(test.t.a, test.t.a) ├─IndexReader_29(Build) 10.00 root index:IndexRangeScan_28 │ └─IndexRangeScan_28 10.00 cop[tikv] table:s, index:idx(b) range: decided by [eq(test.t.b, test.t.a)], keep order:false, stats:pseudo └─TableReader_35(Probe) 1.00 root data:TableRangeScan_34 @@ -335,7 +335,7 @@ Projection_11 10000.00 root Column#11 ├─TableReader_15(Build) 10000.00 root data:TableFullScan_14 │ └─TableFullScan_14 10000.00 cop[tikv] table:t keep order:false, stats:pseudo └─StreamAgg_20(Probe) 1.00 root funcs:count(1)->Column#10 - └─IndexJoin_38 12.49 root inner join, inner:TableReader_37, outer key:test.t.c, inner key:test.t.a + └─IndexJoin_38 12.49 root inner join, inner:TableReader_37, outer key:test.t.c, inner key:test.t.a, equal cond:eq(test.t.c, test.t.a) ├─IndexLookUp_31(Build) 9.99 root │ ├─IndexRangeScan_28(Build) 10.00 cop[tikv] table:s, index:idx(b) range: decided by [eq(test.t.b, test.t.a)], keep order:false, stats:pseudo │ └─Selection_30(Probe) 9.99 cop[tikv] not(isnull(test.t.c)) @@ -500,7 +500,7 @@ id estRows task access object operator info StreamAgg_22 1.00 root funcs:count(1)->Column#22 └─HashAgg_25 1.00 root group by:Column#32, Column#33, Column#34, funcs:firstrow(1)->Column#31 └─Projection_42 0.01 root Column#14, Column#15, coalesce(test.test02.region_name, 不详)->Column#34 - └─IndexJoin_28 0.01 root left outer join, inner:TableReader_27, outer key:Column#16, inner key:test.test02.id + └─IndexJoin_28 0.01 root left outer join, inner:TableReader_27, outer key:Column#16, inner key:test.test02.id, equal cond:eq(Column#16, test.test02.id) ├─Union_33(Build) 0.01 root │ ├─Projection_34 0.00 root test.test01.stat_date, test.test01.show_date, test.test01.region_id │ │ └─TableDual_35 0.00 root rows:0 diff --git a/cmd/explaintest/r/explain_easy_stats.result b/cmd/explaintest/r/explain_easy_stats.result index f401a70299640..d57664e65e998 100644 --- a/cmd/explaintest/r/explain_easy_stats.result +++ b/cmd/explaintest/r/explain_easy_stats.result @@ -46,12 +46,12 @@ IndexReader_6 0.00 root index:IndexRangeScan_5 └─IndexRangeScan_5 0.00 cop[tikv] table:t1, index:c2(c2) range:[1,1], keep order:false explain select * from t1 left join t2 on t1.c2 = t2.c1 where t1.c1 > 1; id estRows task access object operator info -HashJoin_15 2481.25 root left outer join, equal:[eq(test.t1.c2, test.t2.c1)] -├─TableReader_29(Build) 1985.00 root data:Selection_28 -│ └─Selection_28 1985.00 cop[tikv] not(isnull(test.t2.c1)) -│ └─TableFullScan_27 1985.00 cop[tikv] table:t2 keep order:false -└─TableReader_26(Probe) 1998.00 root data:TableRangeScan_25 - └─TableRangeScan_25 1998.00 cop[tikv] table:t1 range:(1,+inf], keep order:false +HashJoin_17 2481.25 root left outer join, equal:[eq(test.t1.c2, test.t2.c1)] +├─TableReader_31(Build) 1985.00 root data:Selection_30 +│ └─Selection_30 1985.00 cop[tikv] not(isnull(test.t2.c1)) +│ └─TableFullScan_29 1985.00 cop[tikv] table:t2 keep order:false +└─TableReader_28(Probe) 1998.00 root data:TableRangeScan_27 + └─TableRangeScan_27 1998.00 cop[tikv] table:t1 range:(1,+inf], keep order:false explain update t1 set t1.c2 = 2 where t1.c1 = 1; id estRows task access object operator info Update_2 N/A root N/A diff --git a/cmd/explaintest/r/explain_join_stats.result b/cmd/explaintest/r/explain_join_stats.result index 92d8bdb095bbb..86a0ee83e2167 100644 --- a/cmd/explaintest/r/explain_join_stats.result +++ b/cmd/explaintest/r/explain_join_stats.result @@ -7,21 +7,21 @@ load stats 's/explain_join_stats_lo.json'; explain select count(*) from e, lo where lo.a=e.a and e.b=22336; id estRows task access object operator info StreamAgg_13 1.00 root funcs:count(1)->Column#5 -└─HashJoin_65 19977.00 root inner join, equal:[eq(test.lo.a, test.e.a)] - ├─TableReader_38(Build) 250.00 root data:TableFullScan_37 - │ └─TableFullScan_37 250.00 cop[tikv] table:lo keep order:false - └─IndexLookUp_49(Probe) 19977.00 root - ├─IndexRangeScan_46(Build) 19977.00 cop[tikv] table:e, index:idx_b(b) range:[22336,22336], keep order:false - └─Selection_48(Probe) 19977.00 cop[tikv] not(isnull(test.e.a)) - └─TableRowIDScan_47 19977.00 cop[tikv] table:e keep order:false +└─HashJoin_69 19977.00 root inner join, equal:[eq(test.lo.a, test.e.a)] + ├─TableReader_40(Build) 250.00 root data:TableFullScan_39 + │ └─TableFullScan_39 250.00 cop[tikv] table:lo keep order:false + └─IndexLookUp_51(Probe) 19977.00 root + ├─IndexRangeScan_48(Build) 19977.00 cop[tikv] table:e, index:idx_b(b) range:[22336,22336], keep order:false + └─Selection_50(Probe) 19977.00 cop[tikv] not(isnull(test.e.a)) + └─TableRowIDScan_49 19977.00 cop[tikv] table:e keep order:false explain select /*+ TIDB_INLJ(e) */ count(*) from e, lo where lo.a=e.a and e.b=22336; id estRows task access object operator info StreamAgg_12 1.00 root funcs:count(1)->Column#5 -└─IndexJoin_40 19977.00 root inner join, inner:IndexLookUp_39, outer key:test.lo.a, inner key:test.e.a - ├─TableReader_28(Build) 250.00 root data:TableFullScan_27 - │ └─TableFullScan_27 250.00 cop[tikv] table:lo keep order:false - └─IndexLookUp_39(Probe) 79.91 root - ├─Selection_37(Build) 4080.00 cop[tikv] not(isnull(test.e.a)) - │ └─IndexRangeScan_35 4080.00 cop[tikv] table:e, index:idx_a(a) range: decided by [eq(test.e.a, test.lo.a)], keep order:false - └─Selection_38(Probe) 79.91 cop[tikv] eq(test.e.b, 22336) - └─TableRowIDScan_36 4080.00 cop[tikv] table:e keep order:false +└─IndexJoin_42 19977.00 root inner join, inner:IndexLookUp_41, outer key:test.lo.a, inner key:test.e.a, equal cond:eq(test.lo.a, test.e.a) + ├─TableReader_30(Build) 250.00 root data:TableFullScan_29 + │ └─TableFullScan_29 250.00 cop[tikv] table:lo keep order:false + └─IndexLookUp_41(Probe) 79.91 root + ├─Selection_39(Build) 4080.00 cop[tikv] not(isnull(test.e.a)) + │ └─IndexRangeScan_37 4080.00 cop[tikv] table:e, index:idx_a(a) range: decided by [eq(test.e.a, test.lo.a)], keep order:false + └─Selection_40(Probe) 79.91 cop[tikv] eq(test.e.b, 22336) + └─TableRowIDScan_38 4080.00 cop[tikv] table:e keep order:false diff --git a/cmd/explaintest/r/explain_union_scan.result b/cmd/explaintest/r/explain_union_scan.result index 087f0d62efa21..c46c00489bc43 100644 --- a/cmd/explaintest/r/explain_union_scan.result +++ b/cmd/explaintest/r/explain_union_scan.result @@ -15,17 +15,17 @@ id estRows task access object operator info Limit_20 10.00 root offset:0, count:10 └─HashJoin_22 10.00 root left outer join, equal:[eq(test.city.province_id, test.city.province_id)] ├─Limit_25(Build) 10.00 root offset:0, count:10 - │ └─IndexJoin_38 10.00 root inner join, inner:UnionScan_37, outer key:test.city.id, inner key:test.city.id - │ ├─UnionScan_47(Build) 10.00 root - │ │ └─TableReader_49 10.00 root data:TableFullScan_48 - │ │ └─TableFullScan_48 10.00 cop[tikv] table:t2 keep order:false - │ └─UnionScan_37(Probe) 1.00 root gt(test.city.province_id, 1), lt(test.city.province_id, 100) - │ └─IndexLookUp_36 1.00 root - │ ├─IndexRangeScan_33(Build) 1.00 cop[tikv] table:t1, index:PRIMARY(id) range: decided by [eq(test.city.id, test.city.id)], keep order:false - │ └─Selection_35(Probe) 1.00 cop[tikv] gt(test.city.province_id, 1), lt(test.city.province_id, 100) - │ └─TableRowIDScan_34 1.00 cop[tikv] table:t1 keep order:false - └─UnionScan_57(Probe) 536284.00 root gt(test.city.province_id, 1), lt(test.city.province_id, 100), not(isnull(test.city.province_id)) - └─TableReader_60 536284.00 root data:Selection_59 - └─Selection_59 536284.00 cop[tikv] gt(test.city.province_id, 1), lt(test.city.province_id, 100), not(isnull(test.city.province_id)) - └─TableFullScan_58 536284.00 cop[tikv] table:t3 keep order:false + │ └─IndexJoin_40 10.00 root inner join, inner:UnionScan_39, outer key:test.city.id, inner key:test.city.id, equal cond:eq(test.city.id, test.city.id) + │ ├─UnionScan_51(Build) 10.00 root + │ │ └─TableReader_53 10.00 root data:TableFullScan_52 + │ │ └─TableFullScan_52 10.00 cop[tikv] table:t2 keep order:false + │ └─UnionScan_39(Probe) 1.00 root gt(test.city.province_id, 1), lt(test.city.province_id, 100) + │ └─IndexLookUp_38 1.00 root + │ ├─IndexRangeScan_35(Build) 1.00 cop[tikv] table:t1, index:PRIMARY(id) range: decided by [eq(test.city.id, test.city.id)], keep order:false + │ └─Selection_37(Probe) 1.00 cop[tikv] gt(test.city.province_id, 1), lt(test.city.province_id, 100) + │ └─TableRowIDScan_36 1.00 cop[tikv] table:t1 keep order:false + └─UnionScan_61(Probe) 536284.00 root gt(test.city.province_id, 1), lt(test.city.province_id, 100), not(isnull(test.city.province_id)) + └─TableReader_64 536284.00 root data:Selection_63 + └─Selection_63 536284.00 cop[tikv] gt(test.city.province_id, 1), lt(test.city.province_id, 100), not(isnull(test.city.province_id)) + └─TableFullScan_62 536284.00 cop[tikv] table:t3 keep order:false commit; diff --git a/cmd/explaintest/r/generated_columns.result b/cmd/explaintest/r/generated_columns.result index 514e69fb2896d..839e392fd406b 100644 --- a/cmd/explaintest/r/generated_columns.result +++ b/cmd/explaintest/r/generated_columns.result @@ -71,24 +71,24 @@ VALUES ('{"a": 1}', '{"1": "1"}'); ANALYZE TABLE sgc1, sgc2; EXPLAIN SELECT /*+ TIDB_INLJ(sgc1, sgc2) */ * from sgc1 join sgc2 on sgc1.a=sgc2.a; id estRows task access object operator info -IndexJoin_19 5.00 root inner join, inner:IndexLookUp_18, outer key:test.sgc2.a, inner key:test.sgc1.a -├─TableReader_33(Build) 1.00 root data:Selection_32 -│ └─Selection_32 1.00 cop[tikv] not(isnull(test.sgc2.a)) -│ └─TableFullScan_31 1.00 cop[tikv] table:sgc2 keep order:false -└─IndexLookUp_18(Probe) 5.00 root - ├─Selection_17(Build) 5.00 cop[tikv] not(isnull(test.sgc1.a)) - │ └─IndexRangeScan_15 5.00 cop[tikv] table:sgc1, index:idx_a(a) range: decided by [eq(test.sgc1.a, test.sgc2.a)], keep order:false - └─TableRowIDScan_16(Probe) 5.00 cop[tikv] table:sgc1 keep order:false +IndexJoin_21 5.00 root inner join, inner:IndexLookUp_20, outer key:test.sgc2.a, inner key:test.sgc1.a, equal cond:eq(test.sgc2.a, test.sgc1.a) +├─TableReader_37(Build) 1.00 root data:Selection_36 +│ └─Selection_36 1.00 cop[tikv] not(isnull(test.sgc2.a)) +│ └─TableFullScan_35 1.00 cop[tikv] table:sgc2 keep order:false +└─IndexLookUp_20(Probe) 5.00 root + ├─Selection_19(Build) 5.00 cop[tikv] not(isnull(test.sgc1.a)) + │ └─IndexRangeScan_17 5.00 cop[tikv] table:sgc1, index:idx_a(a) range: decided by [eq(test.sgc1.a, test.sgc2.a)], keep order:false + └─TableRowIDScan_18(Probe) 5.00 cop[tikv] table:sgc1 keep order:false EXPLAIN SELECT * from sgc1 join sgc2 on sgc1.a=sgc2.a; id estRows task access object operator info Projection_6 5.00 root test.sgc1.j1, test.sgc1.j2, test.sgc1.a, test.sgc1.b, test.sgc2.j1, test.sgc2.j2, test.sgc2.a, test.sgc2.b -└─HashJoin_24 5.00 root inner join, equal:[eq(test.sgc2.a, test.sgc1.a)] - ├─TableReader_43(Build) 1.00 root data:Selection_42 - │ └─Selection_42 1.00 cop[tikv] not(isnull(test.sgc2.a)) - │ └─TableFullScan_41 1.00 cop[tikv] table:sgc2 keep order:false - └─TableReader_52(Probe) 5.00 root data:Selection_51 - └─Selection_51 5.00 cop[tikv] not(isnull(test.sgc1.a)) - └─TableFullScan_50 5.00 cop[tikv] table:sgc1 keep order:false +└─HashJoin_28 5.00 root inner join, equal:[eq(test.sgc2.a, test.sgc1.a)] + ├─TableReader_47(Build) 1.00 root data:Selection_46 + │ └─Selection_46 1.00 cop[tikv] not(isnull(test.sgc2.a)) + │ └─TableFullScan_45 1.00 cop[tikv] table:sgc2 keep order:false + └─TableReader_56(Probe) 5.00 root data:Selection_55 + └─Selection_55 5.00 cop[tikv] not(isnull(test.sgc1.a)) + └─TableFullScan_54 5.00 cop[tikv] table:sgc1 keep order:false DROP TABLE IF EXISTS sgc3; CREATE TABLE sgc3 ( j JSON, diff --git a/cmd/explaintest/r/index_join.result b/cmd/explaintest/r/index_join.result index d46b281674003..8a60d8a398dec 100644 --- a/cmd/explaintest/r/index_join.result +++ b/cmd/explaintest/r/index_join.result @@ -8,33 +8,33 @@ set session tidb_hashagg_partial_concurrency = 1; set session tidb_hashagg_final_concurrency = 1; explain select /*+ TIDB_INLJ(t1, t2) */ * from t1 join t2 on t1.a=t2.a; id estRows task access object operator info -IndexJoin_18 5.00 root inner join, inner:IndexLookUp_17, outer key:test.t2.a, inner key:test.t1.a -├─TableReader_29(Build) 1.00 root data:Selection_28 -│ └─Selection_28 1.00 cop[tikv] not(isnull(test.t2.a)) -│ └─TableFullScan_27 1.00 cop[tikv] table:t2 keep order:false -└─IndexLookUp_17(Probe) 5.00 root - ├─Selection_16(Build) 5.00 cop[tikv] not(isnull(test.t1.a)) - │ └─IndexRangeScan_14 5.00 cop[tikv] table:t1, index:idx(a) range: decided by [eq(test.t1.a, test.t2.a)], keep order:false - └─TableRowIDScan_15(Probe) 5.00 cop[tikv] table:t1 keep order:false +IndexJoin_20 5.00 root inner join, inner:IndexLookUp_19, outer key:test.t2.a, inner key:test.t1.a, equal cond:eq(test.t2.a, test.t1.a) +├─TableReader_33(Build) 1.00 root data:Selection_32 +│ └─Selection_32 1.00 cop[tikv] not(isnull(test.t2.a)) +│ └─TableFullScan_31 1.00 cop[tikv] table:t2 keep order:false +└─IndexLookUp_19(Probe) 5.00 root + ├─Selection_18(Build) 5.00 cop[tikv] not(isnull(test.t1.a)) + │ └─IndexRangeScan_16 5.00 cop[tikv] table:t1, index:idx(a) range: decided by [eq(test.t1.a, test.t2.a)], keep order:false + └─TableRowIDScan_17(Probe) 5.00 cop[tikv] table:t1 keep order:false explain select * from t1 join t2 on t1.a=t2.a; id estRows task access object operator info Projection_6 5.00 root test.t1.a, test.t1.b, test.t2.a, test.t2.b -└─HashJoin_23 5.00 root inner join, equal:[eq(test.t2.a, test.t1.a)] - ├─TableReader_34(Build) 1.00 root data:Selection_33 - │ └─Selection_33 1.00 cop[tikv] not(isnull(test.t2.a)) - │ └─TableFullScan_32 1.00 cop[tikv] table:t2 keep order:false - └─TableReader_40(Probe) 5.00 root data:Selection_39 - └─Selection_39 5.00 cop[tikv] not(isnull(test.t1.a)) - └─TableFullScan_38 5.00 cop[tikv] table:t1 keep order:false +└─HashJoin_27 5.00 root inner join, equal:[eq(test.t2.a, test.t1.a)] + ├─TableReader_38(Build) 1.00 root data:Selection_37 + │ └─Selection_37 1.00 cop[tikv] not(isnull(test.t2.a)) + │ └─TableFullScan_36 1.00 cop[tikv] table:t2 keep order:false + └─TableReader_44(Probe) 5.00 root data:Selection_43 + └─Selection_43 5.00 cop[tikv] not(isnull(test.t1.a)) + └─TableFullScan_42 5.00 cop[tikv] table:t1 keep order:false drop table if exists t1, t2; create table t1(a int not null, b int not null); create table t2(a int not null, b int not null, key a(a)); set @@tidb_opt_insubq_to_join_and_agg=0; explain select /*+ TIDB_INLJ(t2@sel_2) */ * from t1 where t1.a in (select t2.a from t2); id estRows task access object operator info -IndexJoin_10 8000.00 root semi join, inner:IndexReader_9, outer key:test.t1.a, inner key:test.t2.a -├─TableReader_14(Build) 10000.00 root data:TableFullScan_13 -│ └─TableFullScan_13 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo +IndexJoin_10 8000.00 root semi join, inner:IndexReader_9, outer key:test.t1.a, inner key:test.t2.a, equal cond:eq(test.t1.a, test.t2.a) +├─TableReader_16(Build) 10000.00 root data:TableFullScan_15 +│ └─TableFullScan_15 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo └─IndexReader_9(Probe) 1.25 root index:IndexRangeScan_8 └─IndexRangeScan_8 1.25 cop[tikv] table:t2, index:a(a) range: decided by [eq(test.t2.a, test.t1.a)], keep order:false, stats:pseudo show warnings; @@ -45,10 +45,10 @@ create table t1(a int not null, b int not null, key a(a)); create table t2(a int not null, b int not null, key a(a)); explain select /*+ TIDB_INLJ(t1) */ * from t1 where t1.a in (select t2.a from t2); id estRows task access object operator info -IndexJoin_13 10000.00 root inner join, inner:IndexLookUp_12, outer key:test.t2.a, inner key:test.t1.a -├─StreamAgg_20(Build) 8000.00 root group by:test.t2.a, funcs:firstrow(test.t2.a)->test.t2.a -│ └─IndexReader_33 10000.00 root index:IndexFullScan_32 -│ └─IndexFullScan_32 10000.00 cop[tikv] table:t2, index:a(a) keep order:true, stats:pseudo +IndexJoin_13 10000.00 root inner join, inner:IndexLookUp_12, outer key:test.t2.a, inner key:test.t1.a, equal cond:eq(test.t2.a, test.t1.a) +├─StreamAgg_22(Build) 8000.00 root group by:test.t2.a, funcs:firstrow(test.t2.a)->test.t2.a +│ └─IndexReader_35 10000.00 root index:IndexFullScan_34 +│ └─IndexFullScan_34 10000.00 cop[tikv] table:t2, index:a(a) keep order:true, stats:pseudo └─IndexLookUp_12(Probe) 1.25 root ├─IndexRangeScan_10(Build) 1.25 cop[tikv] table:t1, index:a(a) range: decided by [eq(test.t1.a, test.t2.a)], keep order:false, stats:pseudo └─TableRowIDScan_11(Probe) 1.25 cop[tikv] table:t1 keep order:false, stats:pseudo diff --git a/cmd/explaintest/r/subquery.result b/cmd/explaintest/r/subquery.result index d5c492e6de2fb..bcab5ac1762a7 100644 --- a/cmd/explaintest/r/subquery.result +++ b/cmd/explaintest/r/subquery.result @@ -22,7 +22,7 @@ Projection_11 5.00 root Column#14 ├─TableReader_15(Build) 5.00 root data:TableFullScan_14 │ └─TableFullScan_14 5.00 cop[tikv] table:t keep order:false └─StreamAgg_22(Probe) 1.00 root funcs:count(1)->Column#13 - └─IndexJoin_25 0.50 root inner join, inner:TableReader_24, outer key:test.t.a, inner key:test.t.a + └─IndexJoin_25 0.50 root inner join, inner:TableReader_24, outer key:test.t.a, inner key:test.t.a, equal cond:eq(test.t.a, test.t.a) ├─IndexReader_31(Build) 1.00 root index:IndexRangeScan_30 │ └─IndexRangeScan_30 1.00 cop[tikv] table:s, index:idx(b, c, d) range: decided by [eq(test.t.b, 1) eq(test.t.c, 1) eq(test.t.d, test.t.a)], keep order:false └─TableReader_24(Probe) 1.00 root data:TableRangeScan_23 diff --git a/cmd/explaintest/r/topn_push_down.result b/cmd/explaintest/r/topn_push_down.result index fa854a84728d2..565deeae80935 100644 --- a/cmd/explaintest/r/topn_push_down.result +++ b/cmd/explaintest/r/topn_push_down.result @@ -168,21 +168,21 @@ ORDER BY te.expect_time asc LIMIT 0, 5; id estRows task access object operator info Limit_19 0.00 root offset:0, count:5 -└─IndexJoin_97 0.00 root left outer join, inner:IndexReader_96, outer key:test.tr.id, inner key:test.p.relate_id - ├─TopN_102(Build) 0.00 root test.te.expect_time:asc, offset:0, count:5 - │ └─IndexJoin_39 0.00 root inner join, inner:IndexLookUp_38, outer key:test.tr.id, inner key:test.te.trade_id - │ ├─IndexLookUp_81(Build) 0.00 root - │ │ ├─Selection_79(Build) 0.00 cop[tikv] eq(test.tr.business_type, 18), eq(test.tr.trade_type, 1) - │ │ │ └─IndexRangeScan_77 10.00 cop[tikv] table:tr, index:idx_shop_identy_trade_status_business_type(shop_identy, trade_status, business_type, trade_pay_status, trade_type, delivery_type, source, biz_date) range:[810094178,810094178], keep order:false, stats:pseudo - │ │ └─Selection_80(Probe) 0.00 cop[tikv] eq(test.tr.brand_identy, 32314), eq(test.tr.domain_type, 2) - │ │ └─TableRowIDScan_78 0.00 cop[tikv] table:tr keep order:false, stats:pseudo - │ └─IndexLookUp_38(Probe) 1.25 root - │ ├─IndexRangeScan_35(Build) 50.00 cop[tikv] table:te, index:idx_trade_id(trade_id) range: decided by [eq(test.te.trade_id, test.tr.id)], keep order:false, stats:pseudo - │ └─Selection_37(Probe) 1.25 cop[tikv] ge(test.te.expect_time, 2018-04-23 00:00:00.000000), le(test.te.expect_time, 2018-04-23 23:59:59.000000) - │ └─TableRowIDScan_36 50.00 cop[tikv] table:te keep order:false, stats:pseudo - └─IndexReader_96(Probe) 1.25 root index:Selection_95 - └─Selection_95 1.25 cop[tikv] not(isnull(test.p.relate_id)) - └─IndexRangeScan_94 1.25 cop[tikv] table:p, index:payment_relate_id(relate_id) range: decided by [eq(test.p.relate_id, test.tr.id)], keep order:false, stats:pseudo +└─IndexJoin_101 0.00 root left outer join, inner:IndexReader_100, outer key:test.tr.id, inner key:test.p.relate_id, equal cond:eq(test.tr.id, test.p.relate_id) + ├─TopN_108(Build) 0.00 root test.te.expect_time:asc, offset:0, count:5 + │ └─IndexJoin_41 0.00 root inner join, inner:IndexLookUp_40, outer key:test.tr.id, inner key:test.te.trade_id, equal cond:eq(test.tr.id, test.te.trade_id) + │ ├─IndexLookUp_85(Build) 0.00 root + │ │ ├─Selection_83(Build) 0.00 cop[tikv] eq(test.tr.business_type, 18), eq(test.tr.trade_type, 1) + │ │ │ └─IndexRangeScan_81 10.00 cop[tikv] table:tr, index:idx_shop_identy_trade_status_business_type(shop_identy, trade_status, business_type, trade_pay_status, trade_type, delivery_type, source, biz_date) range:[810094178,810094178], keep order:false, stats:pseudo + │ │ └─Selection_84(Probe) 0.00 cop[tikv] eq(test.tr.brand_identy, 32314), eq(test.tr.domain_type, 2) + │ │ └─TableRowIDScan_82 0.00 cop[tikv] table:tr keep order:false, stats:pseudo + │ └─IndexLookUp_40(Probe) 1.25 root + │ ├─IndexRangeScan_37(Build) 50.00 cop[tikv] table:te, index:idx_trade_id(trade_id) range: decided by [eq(test.te.trade_id, test.tr.id)], keep order:false, stats:pseudo + │ └─Selection_39(Probe) 1.25 cop[tikv] ge(test.te.expect_time, 2018-04-23 00:00:00.000000), le(test.te.expect_time, 2018-04-23 23:59:59.000000) + │ └─TableRowIDScan_38 50.00 cop[tikv] table:te keep order:false, stats:pseudo + └─IndexReader_100(Probe) 1.25 root index:Selection_99 + └─Selection_99 1.25 cop[tikv] not(isnull(test.p.relate_id)) + └─IndexRangeScan_98 1.25 cop[tikv] table:p, index:payment_relate_id(relate_id) range: decided by [eq(test.p.relate_id, test.tr.id)], keep order:false, stats:pseudo desc select 1 as a from dual order by a limit 1; id estRows task access object operator info Projection_6 1.00 root 1->Column#1 @@ -221,18 +221,18 @@ create table t(a int not null, index idx(a)); explain select /*+ TIDB_INLJ(t2) */ * from t t1 join t t2 on t1.a = t2.a limit 5; id estRows task access object operator info Limit_11 5.00 root offset:0, count:5 -└─IndexJoin_15 5.00 root inner join, inner:IndexReader_14, outer key:test.t.a, inner key:test.t.a - ├─TableReader_19(Build) 4.00 root data:TableFullScan_18 - │ └─TableFullScan_18 4.00 cop[tikv] table:t1 keep order:false, stats:pseudo +└─IndexJoin_15 5.00 root inner join, inner:IndexReader_14, outer key:test.t.a, inner key:test.t.a, equal cond:eq(test.t.a, test.t.a) + ├─TableReader_21(Build) 4.00 root data:TableFullScan_20 + │ └─TableFullScan_20 4.00 cop[tikv] table:t1 keep order:false, stats:pseudo └─IndexReader_14(Probe) 1.25 root index:IndexRangeScan_13 └─IndexRangeScan_13 1.25 cop[tikv] table:t2, index:idx(a) range: decided by [eq(test.t.a, test.t.a)], keep order:false, stats:pseudo explain select /*+ TIDB_INLJ(t2) */ * from t t1 left join t t2 on t1.a = t2.a where t2.a is null limit 5; id estRows task access object operator info Limit_12 5.00 root offset:0, count:5 └─Selection_13 5.00 root isnull(test.t.a) - └─IndexJoin_17 5.00 root left outer join, inner:IndexReader_16, outer key:test.t.a, inner key:test.t.a - ├─TableReader_21(Build) 4.00 root data:TableFullScan_20 - │ └─TableFullScan_20 4.00 cop[tikv] table:t1 keep order:false, stats:pseudo + └─IndexJoin_17 5.00 root left outer join, inner:IndexReader_16, outer key:test.t.a, inner key:test.t.a, equal cond:eq(test.t.a, test.t.a) + ├─TableReader_23(Build) 4.00 root data:TableFullScan_22 + │ └─TableFullScan_22 4.00 cop[tikv] table:t1 keep order:false, stats:pseudo └─IndexReader_16(Probe) 1.25 root index:IndexRangeScan_15 └─IndexRangeScan_15 1.25 cop[tikv] table:t2, index:idx(a) range: decided by [eq(test.t.a, test.t.a)], keep order:false, stats:pseudo explain select /*+ TIDB_SMJ(t1, t2) */ * from t t1 join t t2 on t1.a = t2.a limit 5; @@ -255,17 +255,17 @@ Limit_12 5.00 root offset:0, count:5 explain select /*+ TIDB_HJ(t1, t2) */ * from t t1 join t t2 on t1.a = t2.a limit 5; id estRows task access object operator info Limit_11 5.00 root offset:0, count:5 -└─HashJoin_23 5.00 root inner join, equal:[eq(test.t.a, test.t.a)] - ├─TableReader_30(Build) 10000.00 root data:TableFullScan_29 - │ └─TableFullScan_29 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo - └─TableReader_26(Probe) 4.00 root data:TableFullScan_25 - └─TableFullScan_25 4.00 cop[tikv] table:t1 keep order:false, stats:pseudo +└─HashJoin_27 5.00 root inner join, equal:[eq(test.t.a, test.t.a)] + ├─TableReader_34(Build) 10000.00 root data:TableFullScan_33 + │ └─TableFullScan_33 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo + └─TableReader_30(Probe) 4.00 root data:TableFullScan_29 + └─TableFullScan_29 4.00 cop[tikv] table:t1 keep order:false, stats:pseudo explain select /*+ TIDB_HJ(t1, t2) */ * from t t1 left join t t2 on t1.a = t2.a where t2.a is null limit 5; id estRows task access object operator info Limit_12 5.00 root offset:0, count:5 └─Selection_13 5.00 root isnull(test.t.a) - └─HashJoin_21 5.00 root left outer join, equal:[eq(test.t.a, test.t.a)] - ├─TableReader_23(Build) 4.00 root data:TableFullScan_22 - │ └─TableFullScan_22 4.00 cop[tikv] table:t1 keep order:false, stats:pseudo - └─TableReader_27(Probe) 10000.00 root data:TableFullScan_26 - └─TableFullScan_26 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo + └─HashJoin_23 5.00 root left outer join, equal:[eq(test.t.a, test.t.a)] + ├─TableReader_25(Build) 4.00 root data:TableFullScan_24 + │ └─TableFullScan_24 4.00 cop[tikv] table:t1 keep order:false, stats:pseudo + └─TableReader_29(Probe) 10000.00 root data:TableFullScan_28 + └─TableFullScan_28 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo diff --git a/cmd/explaintest/r/tpch.result b/cmd/explaintest/r/tpch.result index 437fbf5b161b4..314e66c2a22c1 100644 --- a/cmd/explaintest/r/tpch.result +++ b/cmd/explaintest/r/tpch.result @@ -252,18 +252,18 @@ id estRows task access object operator info Projection_14 10.00 root tpch.lineitem.l_orderkey, Column#35, tpch.orders.o_orderdate, tpch.orders.o_shippriority └─TopN_17 10.00 root Column#35:desc, tpch.orders.o_orderdate:asc, offset:0, count:10 └─HashAgg_23 40252367.98 root group by:Column#45, Column#46, Column#47, funcs:sum(Column#41)->Column#35, funcs:firstrow(Column#42)->tpch.orders.o_orderdate, funcs:firstrow(Column#43)->tpch.orders.o_shippriority, funcs:firstrow(Column#44)->tpch.lineitem.l_orderkey - └─Projection_65 91515927.49 root mul(tpch.lineitem.l_extendedprice, minus(1, tpch.lineitem.l_discount))->Column#41, tpch.orders.o_orderdate, tpch.orders.o_shippriority, tpch.lineitem.l_orderkey, tpch.lineitem.l_orderkey, tpch.orders.o_orderdate, tpch.orders.o_shippriority - └─HashJoin_33 91515927.49 root inner join, equal:[eq(tpch.orders.o_orderkey, tpch.lineitem.l_orderkey)] - ├─HashJoin_55(Build) 22592975.51 root inner join, equal:[eq(tpch.customer.c_custkey, tpch.orders.o_custkey)] - │ ├─TableReader_61(Build) 1498236.00 root data:Selection_60 - │ │ └─Selection_60 1498236.00 cop[tikv] eq(tpch.customer.c_mktsegment, "AUTOMOBILE") - │ │ └─TableFullScan_59 7500000.00 cop[tikv] table:customer keep order:false - │ └─TableReader_58(Probe) 36870000.00 root data:Selection_57 - │ └─Selection_57 36870000.00 cop[tikv] lt(tpch.orders.o_orderdate, 1995-03-13 00:00:00.000000) - │ └─TableFullScan_56 75000000.00 cop[tikv] table:orders keep order:false - └─TableReader_64(Probe) 163047704.27 root data:Selection_63 - └─Selection_63 163047704.27 cop[tikv] gt(tpch.lineitem.l_shipdate, 1995-03-13 00:00:00.000000) - └─TableFullScan_62 300005811.00 cop[tikv] table:lineitem keep order:false + └─Projection_67 91515927.49 root mul(tpch.lineitem.l_extendedprice, minus(1, tpch.lineitem.l_discount))->Column#41, tpch.orders.o_orderdate, tpch.orders.o_shippriority, tpch.lineitem.l_orderkey, tpch.lineitem.l_orderkey, tpch.orders.o_orderdate, tpch.orders.o_shippriority + └─HashJoin_35 91515927.49 root inner join, equal:[eq(tpch.orders.o_orderkey, tpch.lineitem.l_orderkey)] + ├─HashJoin_57(Build) 22592975.51 root inner join, equal:[eq(tpch.customer.c_custkey, tpch.orders.o_custkey)] + │ ├─TableReader_63(Build) 1498236.00 root data:Selection_62 + │ │ └─Selection_62 1498236.00 cop[tikv] eq(tpch.customer.c_mktsegment, "AUTOMOBILE") + │ │ └─TableFullScan_61 7500000.00 cop[tikv] table:customer keep order:false + │ └─TableReader_60(Probe) 36870000.00 root data:Selection_59 + │ └─Selection_59 36870000.00 cop[tikv] lt(tpch.orders.o_orderdate, 1995-03-13 00:00:00.000000) + │ └─TableFullScan_58 75000000.00 cop[tikv] table:orders keep order:false + └─TableReader_66(Probe) 163047704.27 root data:Selection_65 + └─Selection_65 163047704.27 cop[tikv] gt(tpch.lineitem.l_shipdate, 1995-03-13 00:00:00.000000) + └─TableFullScan_64 300005811.00 cop[tikv] table:lineitem keep order:false /* Q4 Order Priority Checking Query This query determines how well the order priority system is working and gives an assessment of customer satisfaction. @@ -297,10 +297,10 @@ id estRows task access object operator info Sort_10 1.00 root tpch.orders.o_orderpriority:asc └─Projection_12 1.00 root tpch.orders.o_orderpriority, Column#27 └─HashAgg_15 1.00 root group by:tpch.orders.o_orderpriority, funcs:count(1)->Column#27, funcs:firstrow(tpch.orders.o_orderpriority)->tpch.orders.o_orderpriority - └─IndexHashJoin_23 2340750.00 root semi join, inner:IndexLookUp_20, outer key:tpch.orders.o_orderkey, inner key:tpch.lineitem.l_orderkey - ├─TableReader_35(Build) 2925937.50 root data:Selection_34 - │ └─Selection_34 2925937.50 cop[tikv] ge(tpch.orders.o_orderdate, 1995-01-01 00:00:00.000000), lt(tpch.orders.o_orderdate, 1995-04-01) - │ └─TableFullScan_33 75000000.00 cop[tikv] table:orders keep order:false + └─IndexHashJoin_23 2340750.00 root semi join, inner:IndexLookUp_20, outer key:tpch.orders.o_orderkey, inner key:tpch.lineitem.l_orderkey, equal cond:eq(tpch.orders.o_orderkey, tpch.lineitem.l_orderkey) + ├─TableReader_37(Build) 2925937.50 root data:Selection_36 + │ └─Selection_36 2925937.50 cop[tikv] ge(tpch.orders.o_orderdate, 1995-01-01 00:00:00.000000), lt(tpch.orders.o_orderdate, 1995-04-01) + │ └─TableFullScan_35 75000000.00 cop[tikv] table:orders keep order:false └─IndexLookUp_20(Probe) 4.05 root ├─IndexRangeScan_17(Build) 5.06 cop[tikv] table:lineitem, index:PRIMARY(L_ORDERKEY, L_LINENUMBER) range: decided by [eq(tpch.lineitem.l_orderkey, tpch.orders.o_orderkey)], keep order:false └─Selection_19(Probe) 4.05 cop[tikv] lt(tpch.lineitem.l_commitdate, tpch.lineitem.l_receiptdate) @@ -454,7 +454,7 @@ Sort_22 769.96 root tpch.nation.n_name:asc, tpch.nation.n_name:asc, Column#50:a └─HashJoin_42(Probe) 24465505.20 root inner join, equal:[eq(tpch.orders.o_custkey, tpch.customer.c_custkey)] ├─TableReader_73(Build) 7500000.00 root data:TableFullScan_72 │ └─TableFullScan_72 7500000.00 cop[tikv] table:customer keep order:false - └─IndexJoin_47(Probe) 24465505.20 root inner join, inner:TableReader_46, outer key:tpch.lineitem.l_orderkey, inner key:tpch.orders.o_orderkey + └─IndexJoin_47(Probe) 24465505.20 root inner join, inner:TableReader_46, outer key:tpch.lineitem.l_orderkey, inner key:tpch.orders.o_orderkey, equal cond:eq(tpch.lineitem.l_orderkey, tpch.orders.o_orderkey) ├─HashJoin_53(Build) 24465505.20 root inner join, equal:[eq(tpch.supplier.s_suppkey, tpch.lineitem.l_suppkey)] │ ├─HashJoin_61(Build) 40000.00 root inner join, equal:[eq(tpch.nation.n_nationkey, tpch.supplier.s_nationkey)] │ │ ├─TableReader_66(Build) 2.00 root data:Selection_65 @@ -518,32 +518,32 @@ id estRows task access object operator info Sort_29 719.02 root Column#62:asc └─Projection_31 719.02 root Column#62, div(Column#64, Column#65)->Column#66 └─HashAgg_34 719.02 root group by:Column#75, funcs:sum(Column#72)->Column#64, funcs:sum(Column#73)->Column#65, funcs:firstrow(Column#74)->Column#62 - └─Projection_99 563136.02 root case(eq(tpch.nation.n_name, INDIA), Column#63, 0)->Column#72, Column#63, Column#62, Column#62 + └─Projection_101 563136.02 root case(eq(tpch.nation.n_name, INDIA), Column#63, 0)->Column#72, Column#63, Column#62, Column#62 └─Projection_35 563136.02 root extract(YEAR, tpch.orders.o_orderdate)->Column#62, mul(tpch.lineitem.l_extendedprice, minus(1, tpch.lineitem.l_discount))->Column#63, tpch.nation.n_name └─HashJoin_41 563136.02 root inner join, equal:[eq(tpch.supplier.s_nationkey, tpch.nation.n_nationkey)] - ├─TableReader_97(Build) 25.00 root data:TableFullScan_96 - │ └─TableFullScan_96 25.00 cop[tikv] table:n2 keep order:false + ├─TableReader_99(Build) 25.00 root data:TableFullScan_98 + │ └─TableFullScan_98 25.00 cop[tikv] table:n2 keep order:false └─HashJoin_48(Probe) 563136.02 root inner join, equal:[eq(tpch.lineitem.l_suppkey, tpch.supplier.s_suppkey)] - ├─TableReader_95(Build) 500000.00 root data:TableFullScan_94 - │ └─TableFullScan_94 500000.00 cop[tikv] table:supplier keep order:false + ├─TableReader_97(Build) 500000.00 root data:TableFullScan_96 + │ └─TableFullScan_96 500000.00 cop[tikv] table:supplier keep order:false └─HashJoin_56(Probe) 563136.02 root inner join, equal:[eq(tpch.lineitem.l_partkey, tpch.part.p_partkey)] - ├─TableReader_93(Build) 61674.00 root data:Selection_92 - │ └─Selection_92 61674.00 cop[tikv] eq(tpch.part.p_type, "SMALL PLATED COPPER") - │ └─TableFullScan_91 10000000.00 cop[tikv] table:part keep order:false - └─IndexHashJoin_64(Probe) 90788402.51 root inner join, inner:IndexLookUp_61, outer key:tpch.orders.o_orderkey, inner key:tpch.lineitem.l_orderkey - ├─HashJoin_68(Build) 22413367.93 root inner join, equal:[eq(tpch.customer.c_custkey, tpch.orders.o_custkey)] - │ ├─HashJoin_70(Build) 1500000.00 root inner join, equal:[eq(tpch.nation.n_nationkey, tpch.customer.c_nationkey)] - │ │ ├─HashJoin_78(Build) 5.00 root inner join, equal:[eq(tpch.region.r_regionkey, tpch.nation.n_regionkey)] - │ │ │ ├─TableReader_83(Build) 1.00 root data:Selection_82 - │ │ │ │ └─Selection_82 1.00 cop[tikv] eq(tpch.region.r_name, "ASIA") - │ │ │ │ └─TableFullScan_81 5.00 cop[tikv] table:region keep order:false - │ │ │ └─TableReader_80(Probe) 25.00 root data:TableFullScan_79 - │ │ │ └─TableFullScan_79 25.00 cop[tikv] table:n1 keep order:false - │ │ └─TableReader_85(Probe) 7500000.00 root data:TableFullScan_84 - │ │ └─TableFullScan_84 7500000.00 cop[tikv] table:customer keep order:false - │ └─TableReader_88(Probe) 22413367.93 root data:Selection_87 - │ └─Selection_87 22413367.93 cop[tikv] ge(tpch.orders.o_orderdate, 1995-01-01 00:00:00.000000), le(tpch.orders.o_orderdate, 1996-12-31 00:00:00.000000) - │ └─TableFullScan_86 75000000.00 cop[tikv] table:orders keep order:false + ├─TableReader_95(Build) 61674.00 root data:Selection_94 + │ └─Selection_94 61674.00 cop[tikv] eq(tpch.part.p_type, "SMALL PLATED COPPER") + │ └─TableFullScan_93 10000000.00 cop[tikv] table:part keep order:false + └─IndexHashJoin_64(Probe) 90788402.51 root inner join, inner:IndexLookUp_61, outer key:tpch.orders.o_orderkey, inner key:tpch.lineitem.l_orderkey, equal cond:eq(tpch.orders.o_orderkey, tpch.lineitem.l_orderkey) + ├─HashJoin_70(Build) 22413367.93 root inner join, equal:[eq(tpch.customer.c_custkey, tpch.orders.o_custkey)] + │ ├─HashJoin_72(Build) 1500000.00 root inner join, equal:[eq(tpch.nation.n_nationkey, tpch.customer.c_nationkey)] + │ │ ├─HashJoin_80(Build) 5.00 root inner join, equal:[eq(tpch.region.r_regionkey, tpch.nation.n_regionkey)] + │ │ │ ├─TableReader_85(Build) 1.00 root data:Selection_84 + │ │ │ │ └─Selection_84 1.00 cop[tikv] eq(tpch.region.r_name, "ASIA") + │ │ │ │ └─TableFullScan_83 5.00 cop[tikv] table:region keep order:false + │ │ │ └─TableReader_82(Probe) 25.00 root data:TableFullScan_81 + │ │ │ └─TableFullScan_81 25.00 cop[tikv] table:n1 keep order:false + │ │ └─TableReader_87(Probe) 7500000.00 root data:TableFullScan_86 + │ │ └─TableFullScan_86 7500000.00 cop[tikv] table:customer keep order:false + │ └─TableReader_90(Probe) 22413367.93 root data:Selection_89 + │ └─Selection_89 22413367.93 cop[tikv] ge(tpch.orders.o_orderdate, 1995-01-01 00:00:00.000000), le(tpch.orders.o_orderdate, 1996-12-31 00:00:00.000000) + │ └─TableFullScan_88 75000000.00 cop[tikv] table:orders keep order:false └─IndexLookUp_61(Probe) 4.05 root ├─IndexRangeScan_59(Build) 4.05 cop[tikv] table:lineitem, index:PRIMARY(L_ORDERKEY, L_LINENUMBER) range: decided by [eq(tpch.lineitem.l_orderkey, tpch.orders.o_orderkey)], keep order:false └─TableRowIDScan_60(Probe) 4.05 cop[tikv] table:lineitem keep order:false @@ -595,24 +595,24 @@ Sort_25 2406.00 root tpch.nation.n_name:asc, Column#53:desc └─Projection_27 2406.00 root tpch.nation.n_name, Column#53, Column#55 └─HashAgg_30 2406.00 root group by:Column#53, tpch.nation.n_name, funcs:sum(Column#54)->Column#55, funcs:firstrow(tpch.nation.n_name)->tpch.nation.n_name, funcs:firstrow(Column#53)->Column#53 └─Projection_31 971049283.51 root tpch.nation.n_name, extract(YEAR, tpch.orders.o_orderdate)->Column#53, minus(mul(tpch.lineitem.l_extendedprice, minus(1, tpch.lineitem.l_discount)), mul(tpch.partsupp.ps_supplycost, tpch.lineitem.l_quantity))->Column#54 - └─HashJoin_38 971049283.51 root inner join, equal:[eq(tpch.lineitem.l_suppkey, tpch.partsupp.ps_suppkey) eq(tpch.lineitem.l_partkey, tpch.partsupp.ps_partkey)] - ├─TableReader_83(Build) 40000000.00 root data:TableFullScan_82 - │ └─TableFullScan_82 40000000.00 cop[tikv] table:partsupp keep order:false - └─HashJoin_46(Probe) 241379546.70 root inner join, equal:[eq(tpch.lineitem.l_orderkey, tpch.orders.o_orderkey)] - ├─TableReader_81(Build) 75000000.00 root data:TableFullScan_80 - │ └─TableFullScan_80 75000000.00 cop[tikv] table:orders keep order:false - └─HashJoin_60(Probe) 241379546.70 root inner join, equal:[eq(tpch.lineitem.l_partkey, tpch.part.p_partkey)] - ├─TableReader_79(Build) 8000000.00 root data:Selection_78 - │ └─Selection_78 8000000.00 cop[tikv] like(tpch.part.p_name, "%dim%", 92) - │ └─TableFullScan_77 10000000.00 cop[tikv] table:part keep order:false - └─HashJoin_63(Probe) 300005811.00 root inner join, equal:[eq(tpch.supplier.s_suppkey, tpch.lineitem.l_suppkey)] - ├─HashJoin_70(Build) 500000.00 root inner join, equal:[eq(tpch.nation.n_nationkey, tpch.supplier.s_nationkey)] - │ ├─TableReader_74(Build) 25.00 root data:TableFullScan_73 - │ │ └─TableFullScan_73 25.00 cop[tikv] table:nation keep order:false - │ └─TableReader_72(Probe) 500000.00 root data:TableFullScan_71 - │ └─TableFullScan_71 500000.00 cop[tikv] table:supplier keep order:false - └─TableReader_76(Probe) 300005811.00 root data:TableFullScan_75 - └─TableFullScan_75 300005811.00 cop[tikv] table:lineitem keep order:false + └─HashJoin_40 971049283.51 root inner join, equal:[eq(tpch.lineitem.l_suppkey, tpch.partsupp.ps_suppkey) eq(tpch.lineitem.l_partkey, tpch.partsupp.ps_partkey)] + ├─TableReader_85(Build) 40000000.00 root data:TableFullScan_84 + │ └─TableFullScan_84 40000000.00 cop[tikv] table:partsupp keep order:false + └─HashJoin_48(Probe) 241379546.70 root inner join, equal:[eq(tpch.lineitem.l_orderkey, tpch.orders.o_orderkey)] + ├─TableReader_83(Build) 75000000.00 root data:TableFullScan_82 + │ └─TableFullScan_82 75000000.00 cop[tikv] table:orders keep order:false + └─HashJoin_62(Probe) 241379546.70 root inner join, equal:[eq(tpch.lineitem.l_partkey, tpch.part.p_partkey)] + ├─TableReader_81(Build) 8000000.00 root data:Selection_80 + │ └─Selection_80 8000000.00 cop[tikv] like(tpch.part.p_name, "%dim%", 92) + │ └─TableFullScan_79 10000000.00 cop[tikv] table:part keep order:false + └─HashJoin_65(Probe) 300005811.00 root inner join, equal:[eq(tpch.supplier.s_suppkey, tpch.lineitem.l_suppkey)] + ├─HashJoin_72(Build) 500000.00 root inner join, equal:[eq(tpch.nation.n_nationkey, tpch.supplier.s_nationkey)] + │ ├─TableReader_76(Build) 25.00 root data:TableFullScan_75 + │ │ └─TableFullScan_75 25.00 cop[tikv] table:nation keep order:false + │ └─TableReader_74(Probe) 500000.00 root data:TableFullScan_73 + │ └─TableFullScan_73 500000.00 cop[tikv] table:supplier keep order:false + └─TableReader_78(Probe) 300005811.00 root data:TableFullScan_77 + └─TableFullScan_77 300005811.00 cop[tikv] table:lineitem keep order:false /* Q10 Returned Item Reporting Query The query identifies customers who might be having problems with the parts that are shipped to them. @@ -660,17 +660,17 @@ id estRows task access object operator info Projection_17 20.00 root tpch.customer.c_custkey, tpch.customer.c_name, Column#39, tpch.customer.c_acctbal, tpch.nation.n_name, tpch.customer.c_address, tpch.customer.c_phone, tpch.customer.c_comment └─TopN_20 20.00 root Column#39:desc, offset:0, count:20 └─HashAgg_26 3017307.69 root group by:Column#50, Column#51, Column#52, Column#53, Column#54, Column#55, Column#56, funcs:sum(Column#42)->Column#39, funcs:firstrow(Column#43)->tpch.customer.c_custkey, funcs:firstrow(Column#44)->tpch.customer.c_name, funcs:firstrow(Column#45)->tpch.customer.c_address, funcs:firstrow(Column#46)->tpch.customer.c_phone, funcs:firstrow(Column#47)->tpch.customer.c_acctbal, funcs:firstrow(Column#48)->tpch.customer.c_comment, funcs:firstrow(Column#49)->tpch.nation.n_name - └─Projection_56 12222016.17 root mul(tpch.lineitem.l_extendedprice, minus(1, tpch.lineitem.l_discount))->Column#42, tpch.customer.c_custkey, tpch.customer.c_name, tpch.customer.c_address, tpch.customer.c_phone, tpch.customer.c_acctbal, tpch.customer.c_comment, tpch.nation.n_name, tpch.customer.c_custkey, tpch.customer.c_name, tpch.customer.c_acctbal, tpch.customer.c_phone, tpch.nation.n_name, tpch.customer.c_address, tpch.customer.c_comment - └─IndexHashJoin_34 12222016.17 root inner join, inner:IndexLookUp_31, outer key:tpch.orders.o_orderkey, inner key:tpch.lineitem.l_orderkey - ├─HashJoin_37(Build) 3017307.69 root inner join, equal:[eq(tpch.customer.c_custkey, tpch.orders.o_custkey)] - │ ├─TableReader_52(Build) 3017307.69 root data:Selection_51 - │ │ └─Selection_51 3017307.69 cop[tikv] ge(tpch.orders.o_orderdate, 1993-08-01 00:00:00.000000), lt(tpch.orders.o_orderdate, 1993-11-01) - │ │ └─TableFullScan_50 75000000.00 cop[tikv] table:orders keep order:false - │ └─HashJoin_45(Probe) 7500000.00 root inner join, equal:[eq(tpch.nation.n_nationkey, tpch.customer.c_nationkey)] - │ ├─TableReader_49(Build) 25.00 root data:TableFullScan_48 - │ │ └─TableFullScan_48 25.00 cop[tikv] table:nation keep order:false - │ └─TableReader_47(Probe) 7500000.00 root data:TableFullScan_46 - │ └─TableFullScan_46 7500000.00 cop[tikv] table:customer keep order:false + └─Projection_58 12222016.17 root mul(tpch.lineitem.l_extendedprice, minus(1, tpch.lineitem.l_discount))->Column#42, tpch.customer.c_custkey, tpch.customer.c_name, tpch.customer.c_address, tpch.customer.c_phone, tpch.customer.c_acctbal, tpch.customer.c_comment, tpch.nation.n_name, tpch.customer.c_custkey, tpch.customer.c_name, tpch.customer.c_acctbal, tpch.customer.c_phone, tpch.nation.n_name, tpch.customer.c_address, tpch.customer.c_comment + └─IndexHashJoin_34 12222016.17 root inner join, inner:IndexLookUp_31, outer key:tpch.orders.o_orderkey, inner key:tpch.lineitem.l_orderkey, equal cond:eq(tpch.orders.o_orderkey, tpch.lineitem.l_orderkey) + ├─HashJoin_39(Build) 3017307.69 root inner join, equal:[eq(tpch.customer.c_custkey, tpch.orders.o_custkey)] + │ ├─TableReader_54(Build) 3017307.69 root data:Selection_53 + │ │ └─Selection_53 3017307.69 cop[tikv] ge(tpch.orders.o_orderdate, 1993-08-01 00:00:00.000000), lt(tpch.orders.o_orderdate, 1993-11-01) + │ │ └─TableFullScan_52 75000000.00 cop[tikv] table:orders keep order:false + │ └─HashJoin_47(Probe) 7500000.00 root inner join, equal:[eq(tpch.nation.n_nationkey, tpch.customer.c_nationkey)] + │ ├─TableReader_51(Build) 25.00 root data:TableFullScan_50 + │ │ └─TableFullScan_50 25.00 cop[tikv] table:nation keep order:false + │ └─TableReader_49(Probe) 7500000.00 root data:TableFullScan_48 + │ └─TableFullScan_48 7500000.00 cop[tikv] table:customer keep order:false └─IndexLookUp_31(Probe) 4.05 root ├─IndexRangeScan_28(Build) 16.44 cop[tikv] table:lineitem, index:PRIMARY(L_ORDERKEY, L_LINENUMBER) range: decided by [eq(tpch.lineitem.l_orderkey, tpch.orders.o_orderkey)], keep order:false └─Selection_30(Probe) 4.05 cop[tikv] eq(tpch.lineitem.l_returnflag, "R") @@ -768,11 +768,11 @@ id estRows task access object operator info Sort_9 1.00 root tpch.lineitem.l_shipmode:asc └─Projection_11 1.00 root tpch.lineitem.l_shipmode, Column#27, Column#28 └─HashAgg_14 1.00 root group by:Column#37, funcs:sum(Column#34)->Column#27, funcs:sum(Column#35)->Column#28, funcs:firstrow(Column#36)->tpch.lineitem.l_shipmode - └─Projection_43 10023369.01 root cast(case(or(eq(tpch.orders.o_orderpriority, 1-URGENT), eq(tpch.orders.o_orderpriority, 2-HIGH)), 1, 0), decimal(65,0) BINARY)->Column#34, cast(case(and(ne(tpch.orders.o_orderpriority, 1-URGENT), ne(tpch.orders.o_orderpriority, 2-HIGH)), 1, 0), decimal(65,0) BINARY)->Column#35, tpch.lineitem.l_shipmode, tpch.lineitem.l_shipmode - └─IndexJoin_18 10023369.01 root inner join, inner:TableReader_17, outer key:tpch.lineitem.l_orderkey, inner key:tpch.orders.o_orderkey - ├─TableReader_39(Build) 10023369.01 root data:Selection_38 - │ └─Selection_38 10023369.01 cop[tikv] ge(tpch.lineitem.l_receiptdate, 1997-01-01 00:00:00.000000), in(tpch.lineitem.l_shipmode, "RAIL", "FOB"), lt(tpch.lineitem.l_commitdate, tpch.lineitem.l_receiptdate), lt(tpch.lineitem.l_receiptdate, 1998-01-01), lt(tpch.lineitem.l_shipdate, tpch.lineitem.l_commitdate) - │ └─TableFullScan_37 300005811.00 cop[tikv] table:lineitem keep order:false + └─Projection_45 10023369.01 root cast(case(or(eq(tpch.orders.o_orderpriority, 1-URGENT), eq(tpch.orders.o_orderpriority, 2-HIGH)), 1, 0), decimal(65,0) BINARY)->Column#34, cast(case(and(ne(tpch.orders.o_orderpriority, 1-URGENT), ne(tpch.orders.o_orderpriority, 2-HIGH)), 1, 0), decimal(65,0) BINARY)->Column#35, tpch.lineitem.l_shipmode, tpch.lineitem.l_shipmode + └─IndexJoin_18 10023369.01 root inner join, inner:TableReader_17, outer key:tpch.lineitem.l_orderkey, inner key:tpch.orders.o_orderkey, equal cond:eq(tpch.lineitem.l_orderkey, tpch.orders.o_orderkey) + ├─TableReader_41(Build) 10023369.01 root data:Selection_40 + │ └─Selection_40 10023369.01 cop[tikv] ge(tpch.lineitem.l_receiptdate, 1997-01-01 00:00:00.000000), in(tpch.lineitem.l_shipmode, "RAIL", "FOB"), lt(tpch.lineitem.l_commitdate, tpch.lineitem.l_receiptdate), lt(tpch.lineitem.l_receiptdate, 1998-01-01), lt(tpch.lineitem.l_shipdate, tpch.lineitem.l_commitdate) + │ └─TableFullScan_39 300005811.00 cop[tikv] table:lineitem keep order:false └─TableReader_17(Probe) 1.00 root data:TableRangeScan_16 └─TableRangeScan_16 1.00 cop[tikv] table:orders range: decided by [tpch.lineitem.l_orderkey], keep order:false /* @@ -840,7 +840,7 @@ id estRows task access object operator info Projection_8 1.00 root div(mul(100.00, Column#27), Column#28)->Column#29 └─StreamAgg_13 1.00 root funcs:sum(Column#31)->Column#27, funcs:sum(Column#32)->Column#28 └─Projection_33 4121984.49 root case(like(tpch.part.p_type, PROMO%, 92), mul(tpch.lineitem.l_extendedprice, minus(1, tpch.lineitem.l_discount)), 0)->Column#31, mul(tpch.lineitem.l_extendedprice, minus(1, tpch.lineitem.l_discount))->Column#32 - └─IndexJoin_28 4121984.49 root inner join, inner:TableReader_27, outer key:tpch.lineitem.l_partkey, inner key:tpch.part.p_partkey + └─IndexJoin_28 4121984.49 root inner join, inner:TableReader_27, outer key:tpch.lineitem.l_partkey, inner key:tpch.part.p_partkey, equal cond:eq(tpch.lineitem.l_partkey, tpch.part.p_partkey) ├─TableReader_23(Build) 4121984.49 root data:Selection_22 │ └─Selection_22 4121984.49 cop[tikv] ge(tpch.lineitem.l_shipdate, 1996-12-01 00:00:00.000000), lt(tpch.lineitem.l_shipdate, 1997-01-01) │ └─TableFullScan_21 300005811.00 cop[tikv] table:lineitem keep order:false @@ -930,13 +930,13 @@ Sort_13 14.41 root Column#23:desc, tpch.part.p_brand:asc, tpch.part.p_type:asc, └─Projection_15 14.41 root tpch.part.p_brand, tpch.part.p_type, tpch.part.p_size, Column#23 └─HashAgg_16 14.41 root group by:tpch.part.p_brand, tpch.part.p_size, tpch.part.p_type, funcs:count(distinct tpch.partsupp.ps_suppkey)->Column#23, funcs:firstrow(tpch.part.p_brand)->tpch.part.p_brand, funcs:firstrow(tpch.part.p_type)->tpch.part.p_type, funcs:firstrow(tpch.part.p_size)->tpch.part.p_size └─HashJoin_23 3863988.24 root anti semi join, equal:[eq(tpch.partsupp.ps_suppkey, tpch.supplier.s_suppkey)] - ├─TableReader_52(Build) 400000.00 root data:Selection_51 - │ └─Selection_51 400000.00 cop[tikv] like(tpch.supplier.s_comment, "%Customer%Complaints%", 92) - │ └─TableFullScan_50 500000.00 cop[tikv] table:supplier keep order:false - └─IndexHashJoin_29(Probe) 4829985.30 root inner join, inner:IndexReader_26, outer key:tpch.part.p_partkey, inner key:tpch.partsupp.ps_partkey - ├─TableReader_45(Build) 1200618.43 root data:Selection_44 - │ └─Selection_44 1200618.43 cop[tikv] in(tpch.part.p_size, 48, 19, 12, 4, 41, 7, 21, 39), ne(tpch.part.p_brand, "Brand#34"), not(like(tpch.part.p_type, "LARGE BRUSHED%", 92)) - │ └─TableFullScan_43 10000000.00 cop[tikv] table:part keep order:false + ├─TableReader_54(Build) 400000.00 root data:Selection_53 + │ └─Selection_53 400000.00 cop[tikv] like(tpch.supplier.s_comment, "%Customer%Complaints%", 92) + │ └─TableFullScan_52 500000.00 cop[tikv] table:supplier keep order:false + └─IndexHashJoin_29(Probe) 4829985.30 root inner join, inner:IndexReader_26, outer key:tpch.part.p_partkey, inner key:tpch.partsupp.ps_partkey, equal cond:eq(tpch.part.p_partkey, tpch.partsupp.ps_partkey) + ├─TableReader_47(Build) 1200618.43 root data:Selection_46 + │ └─Selection_46 1200618.43 cop[tikv] in(tpch.part.p_size, 48, 19, 12, 4, 41, 7, 21, 39), ne(tpch.part.p_brand, "Brand#34"), not(like(tpch.part.p_type, "LARGE BRUSHED%", 92)) + │ └─TableFullScan_45 10000000.00 cop[tikv] table:part keep order:false └─IndexReader_26(Probe) 4.02 root index:IndexRangeScan_25 └─IndexRangeScan_25 4.02 cop[tikv] table:partsupp, index:PRIMARY(PS_PARTKEY, PS_SUPPKEY) range: decided by [eq(tpch.partsupp.ps_partkey, tpch.part.p_partkey)], keep order:false /* @@ -1027,20 +1027,20 @@ id estRows task access object operator info Projection_24 100.00 root tpch.customer.c_name, tpch.customer.c_custkey, tpch.orders.o_orderkey, tpch.orders.o_orderdate, tpch.orders.o_totalprice, Column#54 └─TopN_27 100.00 root tpch.orders.o_totalprice:desc, tpch.orders.o_orderdate:asc, offset:0, count:100 └─HashAgg_33 59251097.60 root group by:tpch.customer.c_custkey, tpch.customer.c_name, tpch.orders.o_orderdate, tpch.orders.o_orderkey, tpch.orders.o_totalprice, funcs:sum(tpch.lineitem.l_quantity)->Column#54, funcs:firstrow(tpch.customer.c_custkey)->tpch.customer.c_custkey, funcs:firstrow(tpch.customer.c_name)->tpch.customer.c_name, funcs:firstrow(tpch.orders.o_orderkey)->tpch.orders.o_orderkey, funcs:firstrow(tpch.orders.o_totalprice)->tpch.orders.o_totalprice, funcs:firstrow(tpch.orders.o_orderdate)->tpch.orders.o_orderdate - └─HashJoin_42 240004648.80 root inner join, equal:[eq(tpch.orders.o_orderkey, tpch.lineitem.l_orderkey)] - ├─HashJoin_63(Build) 59251097.60 root inner join, equal:[eq(tpch.orders.o_orderkey, tpch.lineitem.l_orderkey)] - │ ├─Selection_76(Build) 59251097.60 root gt(Column#52, 314) - │ │ └─HashAgg_83 74063872.00 root group by:tpch.lineitem.l_orderkey, funcs:sum(Column#63)->Column#52, funcs:firstrow(tpch.lineitem.l_orderkey)->tpch.lineitem.l_orderkey - │ │ └─TableReader_84 74063872.00 root data:HashAgg_77 - │ │ └─HashAgg_77 74063872.00 cop[tikv] group by:tpch.lineitem.l_orderkey, funcs:sum(tpch.lineitem.l_quantity)->Column#63 - │ │ └─TableFullScan_82 300005811.00 cop[tikv] table:lineitem keep order:false - │ └─HashJoin_71(Probe) 75000000.00 root inner join, equal:[eq(tpch.customer.c_custkey, tpch.orders.o_custkey)] - │ ├─TableReader_75(Build) 7500000.00 root data:TableFullScan_74 - │ │ └─TableFullScan_74 7500000.00 cop[tikv] table:customer keep order:false - │ └─TableReader_73(Probe) 75000000.00 root data:TableFullScan_72 - │ └─TableFullScan_72 75000000.00 cop[tikv] table:orders keep order:false - └─TableReader_88(Probe) 300005811.00 root data:TableFullScan_87 - └─TableFullScan_87 300005811.00 cop[tikv] table:lineitem keep order:false + └─HashJoin_44 240004648.80 root inner join, equal:[eq(tpch.orders.o_orderkey, tpch.lineitem.l_orderkey)] + ├─HashJoin_65(Build) 59251097.60 root inner join, equal:[eq(tpch.orders.o_orderkey, tpch.lineitem.l_orderkey)] + │ ├─Selection_78(Build) 59251097.60 root gt(Column#52, 314) + │ │ └─HashAgg_85 74063872.00 root group by:tpch.lineitem.l_orderkey, funcs:sum(Column#63)->Column#52, funcs:firstrow(tpch.lineitem.l_orderkey)->tpch.lineitem.l_orderkey + │ │ └─TableReader_86 74063872.00 root data:HashAgg_79 + │ │ └─HashAgg_79 74063872.00 cop[tikv] group by:tpch.lineitem.l_orderkey, funcs:sum(tpch.lineitem.l_quantity)->Column#63 + │ │ └─TableFullScan_84 300005811.00 cop[tikv] table:lineitem keep order:false + │ └─HashJoin_73(Probe) 75000000.00 root inner join, equal:[eq(tpch.customer.c_custkey, tpch.orders.o_custkey)] + │ ├─TableReader_77(Build) 7500000.00 root data:TableFullScan_76 + │ │ └─TableFullScan_76 7500000.00 cop[tikv] table:customer keep order:false + │ └─TableReader_75(Probe) 75000000.00 root data:TableFullScan_74 + │ └─TableFullScan_74 75000000.00 cop[tikv] table:orders keep order:false + └─TableReader_90(Probe) 300005811.00 root data:TableFullScan_89 + └─TableFullScan_89 300005811.00 cop[tikv] table:lineitem keep order:false /* Q19 Discounted Revenue Query The Discounted Revenue Query reports the gross discounted revenue attributed to the sale of selected parts handled @@ -1089,7 +1089,7 @@ and l_shipinstruct = 'DELIVER IN PERSON' id estRows task access object operator info StreamAgg_13 1.00 root funcs:sum(Column#28)->Column#27 └─Projection_36 6286493.79 root mul(tpch.lineitem.l_extendedprice, minus(1, tpch.lineitem.l_discount))->Column#28 - └─IndexJoin_31 6286493.79 root inner join, inner:TableReader_30, outer key:tpch.lineitem.l_partkey, inner key:tpch.part.p_partkey, other cond:or(and(and(eq(tpch.part.p_brand, "Brand#52"), in(tpch.part.p_container, "SM CASE", "SM BOX", "SM PACK", "SM PKG")), and(ge(tpch.lineitem.l_quantity, 4), and(le(tpch.lineitem.l_quantity, 14), le(tpch.part.p_size, 5)))), or(and(and(eq(tpch.part.p_brand, "Brand#11"), in(tpch.part.p_container, "MED BAG", "MED BOX", "MED PKG", "MED PACK")), and(ge(tpch.lineitem.l_quantity, 18), and(le(tpch.lineitem.l_quantity, 28), le(tpch.part.p_size, 10)))), and(and(eq(tpch.part.p_brand, "Brand#51"), in(tpch.part.p_container, "LG CASE", "LG BOX", "LG PACK", "LG PKG")), and(ge(tpch.lineitem.l_quantity, 29), and(le(tpch.lineitem.l_quantity, 39), le(tpch.part.p_size, 15)))))) + └─IndexJoin_31 6286493.79 root inner join, inner:TableReader_30, outer key:tpch.lineitem.l_partkey, inner key:tpch.part.p_partkey, equal cond:eq(tpch.lineitem.l_partkey, tpch.part.p_partkey), other cond:or(and(and(eq(tpch.part.p_brand, "Brand#52"), in(tpch.part.p_container, "SM CASE", "SM BOX", "SM PACK", "SM PKG")), and(ge(tpch.lineitem.l_quantity, 4), and(le(tpch.lineitem.l_quantity, 14), le(tpch.part.p_size, 5)))), or(and(and(eq(tpch.part.p_brand, "Brand#11"), in(tpch.part.p_container, "MED BAG", "MED BOX", "MED PKG", "MED PACK")), and(ge(tpch.lineitem.l_quantity, 18), and(le(tpch.lineitem.l_quantity, 28), le(tpch.part.p_size, 10)))), and(and(eq(tpch.part.p_brand, "Brand#51"), in(tpch.part.p_container, "LG CASE", "LG BOX", "LG PACK", "LG PKG")), and(ge(tpch.lineitem.l_quantity, 29), and(le(tpch.lineitem.l_quantity, 39), le(tpch.part.p_size, 15)))))) ├─TableReader_24(Build) 6286493.79 root data:Selection_23 │ └─Selection_23 6286493.79 cop[tikv] eq(tpch.lineitem.l_shipinstruct, "DELIVER IN PERSON"), in(tpch.lineitem.l_shipmode, "AIR", "AIR REG"), or(and(ge(tpch.lineitem.l_quantity, 4), le(tpch.lineitem.l_quantity, 14)), or(and(ge(tpch.lineitem.l_quantity, 18), le(tpch.lineitem.l_quantity, 28)), and(ge(tpch.lineitem.l_quantity, 29), le(tpch.lineitem.l_quantity, 39)))) │ └─TableFullScan_22 300005811.00 cop[tikv] table:lineitem keep order:false @@ -1156,16 +1156,16 @@ Sort_28 20000.00 root tpch.supplier.s_name:asc └─Selection_50 257492.04 root gt(cast(tpch.partsupp.ps_availqty), mul(0.5, Column#44)) └─HashAgg_53 321865.05 root group by:tpch.partsupp.ps_partkey, tpch.partsupp.ps_suppkey, funcs:firstrow(tpch.partsupp.ps_suppkey)->tpch.partsupp.ps_suppkey, funcs:firstrow(tpch.partsupp.ps_availqty)->tpch.partsupp.ps_availqty, funcs:sum(tpch.lineitem.l_quantity)->Column#44 └─HashJoin_57 9711455.06 root left outer join, equal:[eq(tpch.partsupp.ps_partkey, tpch.lineitem.l_partkey) eq(tpch.partsupp.ps_suppkey, tpch.lineitem.l_suppkey)] - ├─IndexHashJoin_64(Build) 321865.05 root inner join, inner:IndexLookUp_61, outer key:tpch.part.p_partkey, inner key:tpch.partsupp.ps_partkey - │ ├─TableReader_82(Build) 80007.93 root data:Selection_81 - │ │ └─Selection_81 80007.93 cop[tikv] like(tpch.part.p_name, "green%", 92) - │ │ └─TableFullScan_80 10000000.00 cop[tikv] table:part keep order:false + ├─IndexHashJoin_64(Build) 321865.05 root inner join, inner:IndexLookUp_61, outer key:tpch.part.p_partkey, inner key:tpch.partsupp.ps_partkey, equal cond:eq(tpch.part.p_partkey, tpch.partsupp.ps_partkey) + │ ├─TableReader_84(Build) 80007.93 root data:Selection_83 + │ │ └─Selection_83 80007.93 cop[tikv] like(tpch.part.p_name, "green%", 92) + │ │ └─TableFullScan_82 10000000.00 cop[tikv] table:part keep order:false │ └─IndexLookUp_61(Probe) 4.02 root │ ├─IndexRangeScan_59(Build) 4.02 cop[tikv] table:partsupp, index:PRIMARY(PS_PARTKEY, PS_SUPPKEY) range: decided by [eq(tpch.partsupp.ps_partkey, tpch.part.p_partkey)], keep order:false │ └─TableRowIDScan_60(Probe) 4.02 cop[tikv] table:partsupp keep order:false - └─TableReader_87(Probe) 44189356.65 root data:Selection_86 - └─Selection_86 44189356.65 cop[tikv] ge(tpch.lineitem.l_shipdate, 1993-01-01 00:00:00.000000), lt(tpch.lineitem.l_shipdate, 1994-01-01) - └─TableFullScan_85 300005811.00 cop[tikv] table:lineitem keep order:false + └─TableReader_89(Probe) 44189356.65 root data:Selection_88 + └─Selection_88 44189356.65 cop[tikv] ge(tpch.lineitem.l_shipdate, 1993-01-01 00:00:00.000000), lt(tpch.lineitem.l_shipdate, 1994-01-01) + └─TableFullScan_87 300005811.00 cop[tikv] table:lineitem keep order:false /* Q21 Suppliers Who Kept Orders Waiting Query This query identifies certain suppliers who were not able to ship required parts in a timely manner. @@ -1218,25 +1218,25 @@ id estRows task access object operator info Projection_25 100.00 root tpch.supplier.s_name, Column#72 └─TopN_28 100.00 root Column#72:desc, tpch.supplier.s_name:asc, offset:0, count:100 └─HashAgg_34 12800.00 root group by:tpch.supplier.s_name, funcs:count(1)->Column#72, funcs:firstrow(tpch.supplier.s_name)->tpch.supplier.s_name - └─IndexHashJoin_42 7828961.66 root anti semi join, inner:IndexLookUp_39, outer key:tpch.lineitem.l_orderkey, inner key:tpch.lineitem.l_orderkey, other cond:ne(tpch.lineitem.l_suppkey, tpch.lineitem.l_suppkey) - ├─IndexHashJoin_64(Build) 9786202.08 root semi join, inner:IndexLookUp_61, outer key:tpch.lineitem.l_orderkey, inner key:tpch.lineitem.l_orderkey, other cond:ne(tpch.lineitem.l_suppkey, tpch.lineitem.l_suppkey), ne(tpch.lineitem.l_suppkey, tpch.supplier.s_suppkey) - │ ├─IndexJoin_70(Build) 12232752.60 root inner join, inner:TableReader_69, outer key:tpch.lineitem.l_orderkey, inner key:tpch.orders.o_orderkey - │ │ ├─HashJoin_76(Build) 12232752.60 root inner join, equal:[eq(tpch.supplier.s_suppkey, tpch.lineitem.l_suppkey)] - │ │ │ ├─HashJoin_84(Build) 20000.00 root inner join, equal:[eq(tpch.nation.n_nationkey, tpch.supplier.s_nationkey)] - │ │ │ │ ├─TableReader_89(Build) 1.00 root data:Selection_88 - │ │ │ │ │ └─Selection_88 1.00 cop[tikv] eq(tpch.nation.n_name, "EGYPT") - │ │ │ │ │ └─TableFullScan_87 25.00 cop[tikv] table:nation keep order:false - │ │ │ │ └─TableReader_86(Probe) 500000.00 root data:TableFullScan_85 - │ │ │ │ └─TableFullScan_85 500000.00 cop[tikv] table:supplier keep order:false - │ │ │ └─TableReader_92(Probe) 240004648.80 root data:Selection_91 - │ │ │ └─Selection_91 240004648.80 cop[tikv] gt(tpch.lineitem.l_receiptdate, tpch.lineitem.l_commitdate) - │ │ │ └─TableFullScan_90 300005811.00 cop[tikv] table:l1 keep order:false - │ │ └─TableReader_69(Probe) 0.49 root data:Selection_68 - │ │ └─Selection_68 0.49 cop[tikv] eq(tpch.orders.o_orderstatus, "F") - │ │ └─TableRangeScan_67 1.00 cop[tikv] table:orders range: decided by [tpch.lineitem.l_orderkey], keep order:false - │ └─IndexLookUp_61(Probe) 4.05 root - │ ├─IndexRangeScan_59(Build) 4.05 cop[tikv] table:l2, index:PRIMARY(L_ORDERKEY, L_LINENUMBER) range: decided by [eq(tpch.lineitem.l_orderkey, tpch.lineitem.l_orderkey)], keep order:false - │ └─TableRowIDScan_60(Probe) 4.05 cop[tikv] table:l2 keep order:false + └─IndexHashJoin_42 7828961.66 root anti semi join, inner:IndexLookUp_39, outer key:tpch.lineitem.l_orderkey, inner key:tpch.lineitem.l_orderkey, equal cond:eq(tpch.lineitem.l_orderkey, tpch.lineitem.l_orderkey), other cond:ne(tpch.lineitem.l_suppkey, tpch.lineitem.l_suppkey) + ├─IndexHashJoin_68(Build) 9786202.08 root semi join, inner:IndexLookUp_65, outer key:tpch.lineitem.l_orderkey, inner key:tpch.lineitem.l_orderkey, equal cond:eq(tpch.lineitem.l_orderkey, tpch.lineitem.l_orderkey), other cond:ne(tpch.lineitem.l_suppkey, tpch.lineitem.l_suppkey), ne(tpch.lineitem.l_suppkey, tpch.supplier.s_suppkey) + │ ├─IndexJoin_76(Build) 12232752.60 root inner join, inner:TableReader_75, outer key:tpch.lineitem.l_orderkey, inner key:tpch.orders.o_orderkey, equal cond:eq(tpch.lineitem.l_orderkey, tpch.orders.o_orderkey) + │ │ ├─HashJoin_82(Build) 12232752.60 root inner join, equal:[eq(tpch.supplier.s_suppkey, tpch.lineitem.l_suppkey)] + │ │ │ ├─HashJoin_90(Build) 20000.00 root inner join, equal:[eq(tpch.nation.n_nationkey, tpch.supplier.s_nationkey)] + │ │ │ │ ├─TableReader_95(Build) 1.00 root data:Selection_94 + │ │ │ │ │ └─Selection_94 1.00 cop[tikv] eq(tpch.nation.n_name, "EGYPT") + │ │ │ │ │ └─TableFullScan_93 25.00 cop[tikv] table:nation keep order:false + │ │ │ │ └─TableReader_92(Probe) 500000.00 root data:TableFullScan_91 + │ │ │ │ └─TableFullScan_91 500000.00 cop[tikv] table:supplier keep order:false + │ │ │ └─TableReader_98(Probe) 240004648.80 root data:Selection_97 + │ │ │ └─Selection_97 240004648.80 cop[tikv] gt(tpch.lineitem.l_receiptdate, tpch.lineitem.l_commitdate) + │ │ │ └─TableFullScan_96 300005811.00 cop[tikv] table:l1 keep order:false + │ │ └─TableReader_75(Probe) 0.49 root data:Selection_74 + │ │ └─Selection_74 0.49 cop[tikv] eq(tpch.orders.o_orderstatus, "F") + │ │ └─TableRangeScan_73 1.00 cop[tikv] table:orders range: decided by [tpch.lineitem.l_orderkey], keep order:false + │ └─IndexLookUp_65(Probe) 4.05 root + │ ├─IndexRangeScan_63(Build) 4.05 cop[tikv] table:l2, index:PRIMARY(L_ORDERKEY, L_LINENUMBER) range: decided by [eq(tpch.lineitem.l_orderkey, tpch.lineitem.l_orderkey)], keep order:false + │ └─TableRowIDScan_64(Probe) 4.05 cop[tikv] table:l2 keep order:false └─IndexLookUp_39(Probe) 4.05 root ├─IndexRangeScan_36(Build) 5.06 cop[tikv] table:l3, index:PRIMARY(L_ORDERKEY, L_LINENUMBER) range: decided by [eq(tpch.lineitem.l_orderkey, tpch.lineitem.l_orderkey)], keep order:false └─Selection_38(Probe) 4.05 cop[tikv] gt(tpch.lineitem.l_receiptdate, tpch.lineitem.l_commitdate) diff --git a/executor/benchmark_test.go b/executor/benchmark_test.go index fd357f17ea4b7..040f8c5153775 100644 --- a/executor/benchmark_test.go +++ b/executor/benchmark_test.go @@ -1110,6 +1110,8 @@ type indexJoinTestCase struct { ctx sessionctx.Context outerJoinKeyIdx []int innerJoinKeyIdx []int + outerHashKeyIdx []int + innerHashKeyIdx []int innerIdx []int needOuterSort bool rawData string @@ -1137,6 +1139,8 @@ func defaultIndexJoinTestCase() *indexJoinTestCase { ctx: ctx, outerJoinKeyIdx: []int{0, 1}, innerJoinKeyIdx: []int{0, 1}, + outerHashKeyIdx: []int{0, 1}, + innerHashKeyIdx: []int{0, 1}, innerIdx: []int{0, 1}, rawData: wideString, } @@ -1186,12 +1190,14 @@ func prepare4IndexInnerHashJoin(tc *indexJoinTestCase, outerDS *mockDataSource, outerCtx: outerCtx{ rowTypes: leftTypes, keyCols: tc.outerJoinKeyIdx, + hashCols: tc.outerHashKeyIdx, }, innerCtx: innerCtx{ readerBuilder: &dataReaderBuilder{Plan: &mockPhysicalIndexReader{e: innerDS}, executorBuilder: newExecutorBuilder(tc.ctx, nil)}, rowTypes: rightTypes, colLens: colLens, keyCols: tc.innerJoinKeyIdx, + hashCols: tc.innerHashKeyIdx, }, workerWg: new(sync.WaitGroup), joiner: newJoiner(tc.ctx, 0, false, defaultValues, nil, leftTypes, rightTypes, nil), @@ -1436,6 +1442,8 @@ func newMergeJoinBenchmark(numOuterRows, numInnerDup, numInnerRedundant int) (tc ctx: ctx, outerJoinKeyIdx: []int{0, 1}, innerJoinKeyIdx: []int{0, 1}, + outerHashKeyIdx: []int{0, 1}, + innerHashKeyIdx: []int{0, 1}, innerIdx: []int{0, 1}, rawData: wideString, } diff --git a/executor/builder.go b/executor/builder.go index 4fea31d56af9e..f1e2e689f5826 100644 --- a/executor/builder.go +++ b/executor/builder.go @@ -2138,12 +2138,23 @@ func (b *executorBuilder) buildIndexLookUpJoin(v *plannercore.PhysicalIndexJoin) for i := 0; i < len(v.OuterJoinKeys); i++ { outerKeyCols[i] = v.OuterJoinKeys[i].Index } - e.outerCtx.keyCols = outerKeyCols innerKeyCols := make([]int, len(v.InnerJoinKeys)) for i := 0; i < len(v.InnerJoinKeys); i++ { innerKeyCols[i] = v.InnerJoinKeys[i].Index } + e.outerCtx.keyCols = outerKeyCols e.innerCtx.keyCols = innerKeyCols + + outerHashCols, innerHashCols := make([]int, len(v.OuterHashKeys)), make([]int, len(v.InnerHashKeys)) + for i := 0; i < len(v.OuterHashKeys); i++ { + outerHashCols[i] = v.OuterHashKeys[i].Index + } + for i := 0; i < len(v.InnerHashKeys); i++ { + innerHashCols[i] = v.InnerHashKeys[i].Index + } + e.outerCtx.hashCols = outerHashCols + e.innerCtx.hashCols = innerHashCols + e.joinResult = newFirstChunk(e) executorCounterIndexLookUpJoin.Inc() return e diff --git a/executor/index_lookup_hash_join.go b/executor/index_lookup_hash_join.go index e09bd49b65977..be7e71f72e593 100644 --- a/executor/index_lookup_hash_join.go +++ b/executor/index_lookup_hash_join.go @@ -546,14 +546,14 @@ func (iw *indexHashJoinInnerWorker) buildHashTableForOuterResult(ctx context.Con continue } row := chk.GetRow(rowIdx) - keyColIdx := iw.outerCtx.keyCols - for _, i := range keyColIdx { + hashColIdx := iw.outerCtx.hashCols + for _, i := range hashColIdx { if row.IsNull(i) { continue OUTER } } h.Reset() - err := codec.HashChunkRow(iw.ctx.GetSessionVars().StmtCtx, h, row, iw.outerCtx.rowTypes, keyColIdx, buf) + err := codec.HashChunkRow(iw.ctx.GetSessionVars().StmtCtx, h, row, iw.outerCtx.rowTypes, hashColIdx, buf) failpoint.Inject("testIndexHashJoinBuildErr", func() { err = errors.New("mockIndexHashJoinBuildErr") }) @@ -644,7 +644,7 @@ func (iw *indexHashJoinInnerWorker) doJoinUnordered(ctx context.Context, task *i func (iw *indexHashJoinInnerWorker) getMatchedOuterRows(innerRow chunk.Row, task *indexHashJoinTask, h hash.Hash64, buf []byte) (matchedRows []chunk.Row, matchedRowPtr []chunk.RowPtr, err error) { h.Reset() - err = codec.HashChunkRow(iw.ctx.GetSessionVars().StmtCtx, h, innerRow, iw.rowTypes, iw.keyCols, buf) + err = codec.HashChunkRow(iw.ctx.GetSessionVars().StmtCtx, h, innerRow, iw.rowTypes, iw.hashCols, buf) if err != nil { return nil, nil, err } @@ -658,7 +658,7 @@ func (iw *indexHashJoinInnerWorker) getMatchedOuterRows(innerRow chunk.Row, task matchedRowPtr = make([]chunk.RowPtr, 0, len(iw.matchedOuterPtrs)) for _, ptr := range iw.matchedOuterPtrs { outerRow := task.outerResult.GetRow(ptr) - ok, err := codec.EqualChunkRow(iw.ctx.GetSessionVars().StmtCtx, innerRow, iw.rowTypes, iw.keyCols, outerRow, iw.outerCtx.rowTypes, iw.outerCtx.keyCols) + ok, err := codec.EqualChunkRow(iw.ctx.GetSessionVars().StmtCtx, innerRow, iw.rowTypes, iw.keyCols, outerRow, iw.outerCtx.rowTypes, iw.outerCtx.hashCols) if err != nil { return nil, nil, err } diff --git a/executor/index_lookup_join.go b/executor/index_lookup_join.go index c100fbfa47583..46a07b0f4b8e6 100644 --- a/executor/index_lookup_join.go +++ b/executor/index_lookup_join.go @@ -87,6 +87,7 @@ type IndexLookUpJoin struct { type outerCtx struct { rowTypes []*types.FieldType keyCols []int + hashCols []int filter expression.CNFExprs } @@ -94,6 +95,7 @@ type innerCtx struct { readerBuilder *dataReaderBuilder rowTypes []*types.FieldType keyCols []int + hashCols []int colLens []int hasPrefixCol bool } @@ -532,17 +534,17 @@ func (iw *innerWorker) constructLookupContent(task *lookUpJoinTask) ([]*indexJoi chk := task.outerResult.GetChunk(chkIdx) numRows := chk.NumRows() for rowIdx := 0; rowIdx < numRows; rowIdx++ { - dLookUpKey, err := iw.constructDatumLookupKey(task, chkIdx, rowIdx) + dLookUpKey, dHashKey, err := iw.constructDatumLookupKey(task, chkIdx, rowIdx) if err != nil { return nil, err } - if dLookUpKey == nil { + if dHashKey == nil { // Append null to make looUpKeys the same length as outer Result. task.encodedLookUpKeys[chkIdx].AppendNull(0) continue } keyBuf = keyBuf[:0] - keyBuf, err = codec.EncodeKey(iw.ctx.GetSessionVars().StmtCtx, keyBuf, dLookUpKey...) + keyBuf, err = codec.EncodeKey(iw.ctx.GetSessionVars().StmtCtx, keyBuf, dHashKey...) if err != nil { return nil, err } @@ -569,45 +571,49 @@ func (iw *innerWorker) constructLookupContent(task *lookUpJoinTask) ([]*indexJoi return lookUpContents, nil } -func (iw *innerWorker) constructDatumLookupKey(task *lookUpJoinTask, chkIdx, rowIdx int) ([]types.Datum, error) { +func (iw *innerWorker) constructDatumLookupKey(task *lookUpJoinTask, chkIdx, rowIdx int) ([]types.Datum, []types.Datum, error) { if task.outerMatch != nil && !task.outerMatch[chkIdx][rowIdx] { - return nil, nil + return nil, nil, nil } outerRow := task.outerResult.GetChunk(chkIdx).GetRow(rowIdx) sc := iw.ctx.GetSessionVars().StmtCtx keyLen := len(iw.keyCols) dLookupKey := make([]types.Datum, 0, keyLen) - for i, keyCol := range iw.outerCtx.keyCols { - outerValue := outerRow.GetDatum(keyCol, iw.outerCtx.rowTypes[keyCol]) + dHashKey := make([]types.Datum, 0, len(iw.hashCols)) + for i, hashCol := range iw.outerCtx.hashCols { + outerValue := outerRow.GetDatum(hashCol, iw.outerCtx.rowTypes[hashCol]) // Join-on-condition can be promised to be equal-condition in // IndexNestedLoopJoin, thus the filter will always be false if // outerValue is null, and we don't need to lookup it. if outerValue.IsNull() { - return nil, nil + return nil, nil, nil } - innerColType := iw.rowTypes[iw.keyCols[i]] + innerColType := iw.rowTypes[iw.hashCols[i]] innerValue, err := outerValue.ConvertTo(sc, innerColType) if err != nil { // If the converted outerValue overflows, we don't need to lookup it. if terror.ErrorEqual(err, types.ErrOverflow) { - return nil, nil + return nil, nil, nil } if terror.ErrorEqual(err, types.ErrTruncated) && (innerColType.Tp == mysql.TypeSet || innerColType.Tp == mysql.TypeEnum) { - return nil, nil + return nil, nil, nil } - return nil, err + return nil, nil, err } cmp, err := outerValue.CompareDatum(sc, &innerValue) if err != nil { - return nil, err + return nil, nil, err } if cmp != 0 { // If the converted outerValue is not equal to the origin outerValue, we don't need to lookup it. - return nil, nil + return nil, nil, nil + } + if i < keyLen { + dLookupKey = append(dLookupKey, innerValue) } - dLookupKey = append(dLookupKey, innerValue) + dHashKey = append(dHashKey, innerValue) } - return dLookupKey, nil + return dLookupKey, dHashKey, nil } func (iw *innerWorker) sortAndDedupLookUpContents(lookUpContents []*indexJoinLookUpContent) []*indexJoinLookUpContent { @@ -702,7 +708,7 @@ func (iw *innerWorker) buildLookUpMap(task *lookUpJoinTask) error { } keyBuf = keyBuf[:0] - for _, keyCol := range iw.keyCols { + for _, keyCol := range iw.hashCols { d := innerRow.GetDatum(keyCol, iw.rowTypes[keyCol]) var err error keyBuf, err = codec.EncodeKey(iw.ctx.GetSessionVars().StmtCtx, keyBuf, d) @@ -719,7 +725,7 @@ func (iw *innerWorker) buildLookUpMap(task *lookUpJoinTask) error { } func (iw *innerWorker) hasNullInJoinKey(row chunk.Row) bool { - for _, ordinal := range iw.keyCols { + for _, ordinal := range iw.hashCols { if row.IsNull(ordinal) { return true } diff --git a/executor/join_test.go b/executor/join_test.go index ecada9ae8d098..2a1aca1611a7f 100644 --- a/executor/join_test.go +++ b/executor/join_test.go @@ -1280,10 +1280,10 @@ func (s *testSuiteJoin1) TestIndexLookupJoin(c *C) { tk.MustQuery("desc select /*+ TIDB_INLJ(s) */ count(*) from t join s use index(idx) on s.a = t.a and s.b < t.b").Check(testkit.Rows( "HashAgg_9 1.00 root funcs:count(1)->Column#6", - "└─IndexJoin_16 64.00 root inner join, inner:IndexReader_15, outer key:test.t.a, inner key:test.s.a, other cond:lt(test.s.b, test.t.b)", - " ├─TableReader_21(Build) 64.00 root data:Selection_20", - " │ └─Selection_20 64.00 cop[tikv] not(isnull(test.t.b))", - " │ └─TableFullScan_19 64.00 cop[tikv] table:t keep order:false", + "└─IndexJoin_16 64.00 root inner join, inner:IndexReader_15, outer key:test.t.a, inner key:test.s.a, equal cond:eq(test.t.a, test.s.a), other cond:lt(test.s.b, test.t.b)", + " ├─TableReader_23(Build) 64.00 root data:Selection_22", + " │ └─Selection_22 64.00 cop[tikv] not(isnull(test.t.b))", + " │ └─TableFullScan_21 64.00 cop[tikv] table:t keep order:false", " └─IndexReader_15(Probe) 1.00 root index:Selection_14", " └─Selection_14 1.00 cop[tikv] not(isnull(test.s.a)), not(isnull(test.s.b))", " └─IndexRangeScan_13 1.00 cop[tikv] table:s, index:idx(a, b) range: decided by [eq(test.s.a, test.t.a) lt(test.s.b, test.t.b)], keep order:false")) @@ -1309,10 +1309,10 @@ func (s *testSuiteJoin1) TestIndexLookupJoin(c *C) { tk.MustQuery("desc select /*+ INL_HASH_JOIN(s) */ count(*) from t join s use index(idx) on s.a = t.a and s.b < t.b").Check(testkit.Rows( "HashAgg_9 1.00 root funcs:count(1)->Column#6", - "└─IndexHashJoin_18 64.00 root inner join, inner:IndexReader_15, outer key:test.t.a, inner key:test.s.a, other cond:lt(test.s.b, test.t.b)", - " ├─TableReader_21(Build) 64.00 root data:Selection_20", - " │ └─Selection_20 64.00 cop[tikv] not(isnull(test.t.b))", - " │ └─TableFullScan_19 64.00 cop[tikv] table:t keep order:false", + "└─IndexHashJoin_18 64.00 root inner join, inner:IndexReader_15, outer key:test.t.a, inner key:test.s.a, equal cond:eq(test.t.a, test.s.a), other cond:lt(test.s.b, test.t.b)", + " ├─TableReader_23(Build) 64.00 root data:Selection_22", + " │ └─Selection_22 64.00 cop[tikv] not(isnull(test.t.b))", + " │ └─TableFullScan_21 64.00 cop[tikv] table:t keep order:false", " └─IndexReader_15(Probe) 1.00 root index:Selection_14", " └─Selection_14 1.00 cop[tikv] not(isnull(test.s.a)), not(isnull(test.s.b))", " └─IndexRangeScan_13 1.00 cop[tikv] table:s, index:idx(a, b) range: decided by [eq(test.s.a, test.t.a) lt(test.s.b, test.t.b)], keep order:false", @@ -1354,7 +1354,7 @@ func (s *testSuiteJoinSerial) TestIndexNestedLoopHashJoin(c *C) { tk.MustExec("analyze table s") // Test IndexNestedLoopHashJoin keepOrder. tk.MustQuery("explain select /*+ INL_HASH_JOIN(s) */ * from t left join s on t.a=s.a order by t.pk").Check(testkit.Rows( - "IndexHashJoin_21 100.00 root left outer join, inner:TableReader_18, outer key:test.t.a, inner key:test.s.a", + "IndexHashJoin_21 100.00 root left outer join, inner:TableReader_18, outer key:test.t.a, inner key:test.s.a, equal cond:eq(test.t.a, test.s.a)", "├─TableReader_23(Build) 100.00 root data:TableFullScan_22", "│ └─TableFullScan_22 100.00 cop[tikv] table:t keep order:true", "└─TableReader_18(Probe) 1.00 root data:TableRangeScan_17", @@ -1390,7 +1390,7 @@ func (s *testSuiteJoinSerial) TestIndexNestedLoopHashJoin(c *C) { tk.MustExec("set @@tidb_index_join_batch_size=2") tk.MustQuery("desc select * from t l1 where exists ( select * from t l2 where l2.l_orderkey = l1.l_orderkey and l2.l_suppkey <> l1.l_suppkey ) order by `l_orderkey`,`l_linenumber`;").Check(testkit.Rows( "Sort_9 7.20 root test.t.l_orderkey:asc, test.t.l_linenumber:asc", - "└─IndexHashJoin_17 7.20 root semi join, inner:IndexLookUp_15, outer key:test.t.l_orderkey, inner key:test.t.l_orderkey, other cond:ne(test.t.l_suppkey, test.t.l_suppkey)", + "└─IndexHashJoin_17 7.20 root semi join, inner:IndexLookUp_15, outer key:test.t.l_orderkey, inner key:test.t.l_orderkey, equal cond:eq(test.t.l_orderkey, test.t.l_orderkey), other cond:ne(test.t.l_suppkey, test.t.l_suppkey)", " ├─TableReader_20(Build) 9.00 root data:Selection_19", " │ └─Selection_19 9.00 cop[tikv] not(isnull(test.t.l_suppkey))", " │ └─TableFullScan_18 9.00 cop[tikv] table:l1 keep order:false", @@ -1401,7 +1401,7 @@ func (s *testSuiteJoinSerial) TestIndexNestedLoopHashJoin(c *C) { tk.MustQuery("select * from t l1 where exists ( select * from t l2 where l2.l_orderkey = l1.l_orderkey and l2.l_suppkey <> l1.l_suppkey )order by `l_orderkey`,`l_linenumber`;").Check(testkit.Rows("0 0 0 0", "0 1 0 1", "0 2 0 0", "1 0 1 0", "1 1 1 1", "1 2 1 0", "2 0 0 0", "2 1 0 1", "2 2 0 0")) tk.MustQuery("desc select count(*) from t l1 where exists ( select * from t l2 where l2.l_orderkey = l1.l_orderkey and l2.l_suppkey <> l1.l_suppkey );").Check(testkit.Rows( "StreamAgg_14 1.00 root funcs:count(1)->Column#11", - "└─IndexHashJoin_29 7.20 root semi join, inner:IndexLookUp_27, outer key:test.t.l_orderkey, inner key:test.t.l_orderkey, other cond:ne(test.t.l_suppkey, test.t.l_suppkey)", + "└─IndexHashJoin_29 7.20 root semi join, inner:IndexLookUp_27, outer key:test.t.l_orderkey, inner key:test.t.l_orderkey, equal cond:eq(test.t.l_orderkey, test.t.l_orderkey), other cond:ne(test.t.l_suppkey, test.t.l_suppkey)", " ├─TableReader_23(Build) 9.00 root data:Selection_22", " │ └─Selection_22 9.00 cop[tikv] not(isnull(test.t.l_suppkey))", " │ └─TableFullScan_21 9.00 cop[tikv] table:l1 keep order:false", @@ -1497,12 +1497,12 @@ func (s *testSuiteJoin3) TestIssue13449(c *C) { tk.MustExec("set @@tidb_index_join_batch_size=32;") tk.MustQuery("desc select /*+ INL_HASH_JOIN(s) */ * from t join s on t.a=s.a order by t.a;").Check(testkit.Rows( - "IndexHashJoin_25 12487.50 root inner join, inner:IndexReader_22, outer key:test.t.a, inner key:test.s.a", - "├─IndexReader_27(Build) 9990.00 root index:IndexFullScan_26", - "│ └─IndexFullScan_26 9990.00 cop[tikv] table:t, index:a(a) keep order:true, stats:pseudo", - "└─IndexReader_22(Probe) 1.25 root index:Selection_21", - " └─Selection_21 1.25 cop[tikv] not(isnull(test.s.a))", - " └─IndexRangeScan_20 1.25 cop[tikv] table:s, index:a(a) range: decided by [eq(test.s.a, test.t.a)], keep order:false, stats:pseudo")) + "IndexHashJoin_27 12487.50 root inner join, inner:IndexReader_24, outer key:test.t.a, inner key:test.s.a, equal cond:eq(test.t.a, test.s.a)", + "├─IndexReader_31(Build) 9990.00 root index:IndexFullScan_30", + "│ └─IndexFullScan_30 9990.00 cop[tikv] table:t, index:a(a) keep order:true, stats:pseudo", + "└─IndexReader_24(Probe) 1.25 root index:Selection_23", + " └─Selection_23 1.25 cop[tikv] not(isnull(test.s.a))", + " └─IndexRangeScan_22 1.25 cop[tikv] table:s, index:a(a) range: decided by [eq(test.s.a, test.t.a)], keep order:false, stats:pseudo")) tk.MustQuery("select /*+ INL_HASH_JOIN(s) */ * from t join s on t.a=s.a order by t.a;").Check(testkit.Rows("1 1", "128 128")) } @@ -2083,9 +2083,9 @@ func (s *testSuiteJoinSerial) TestOuterTableBuildHashTableIsuse13933(c *C) { tk.MustExec("Insert into t values (11,2),(1,2),(5,2)") tk.MustQuery("select /*+ INL_HASH_JOIN(s)*/ * from t left join s on s.b=t.b and s.a < t.a;").Sort().Check(testkit.Rows("1 2 ", "11 2 1 2", "5 2 1 2")) tk.MustQuery("explain select /*+ INL_HASH_JOIN(s)*/ * from t left join s on s.b=t.b and s.a < t.a;").Check(testkit.Rows( - "IndexHashJoin_14 12475.01 root left outer join, inner:IndexLookUp_11, outer key:test.t.b, inner key:test.s.b, other cond:lt(test.s.a, test.t.a)", - "├─TableReader_16(Build) 10000.00 root data:TableFullScan_15", - "│ └─TableFullScan_15 10000.00 cop[tikv] table:t keep order:false, stats:pseudo", + "IndexHashJoin_14 12475.01 root left outer join, inner:IndexLookUp_11, outer key:test.t.b, inner key:test.s.b, equal cond:eq(test.t.b, test.s.b), other cond:lt(test.s.a, test.t.a)", + "├─TableReader_18(Build) 10000.00 root data:TableFullScan_17", + "│ └─TableFullScan_17 10000.00 cop[tikv] table:t keep order:false, stats:pseudo", "└─IndexLookUp_11(Probe) 1.25 root ", " ├─Selection_9(Build) 1.25 cop[tikv] not(isnull(test.s.b))", " │ └─IndexRangeScan_7 1.25 cop[tikv] table:s, index:b(b) range: decided by [eq(test.s.b, test.t.b)], keep order:false, stats:pseudo", @@ -2172,6 +2172,7 @@ func (s *testSuiteJoinSerial) TestInlineProjection4HashJoinIssue15316(c *C) { defer func() { plannercore.ForcedHashLeftJoin4Test = false }() tk := testkit.NewTestKit(c, s.store) tk.MustExec("use test") + tk.MustExec("drop table if exists S, T") tk.MustExec("create table S (a int not null, b int, c int);") tk.MustExec("create table T (a int not null, b int, c int);") tk.MustExec("insert into S values (0,1,2),(0,1,null),(0,1,2);") @@ -2445,6 +2446,29 @@ func (s *testSuiteJoinSerial) TestIssue20270(c *C) { failpoint.Disable("github.com/pingcap/tidb/executor/killedInJoin2ChunkForOuterHashJoin") } +func (s *testSuiteJoinSerial) TestIssue20710(c *C) { + tk := testkit.NewTestKitWithInit(c, s.store) + tk.MustExec("drop table if exists t;") + tk.MustExec("drop table if exists s;") + tk.MustExec("create table t(a int, b int)") + tk.MustExec("create table s(a int, b int, index(a))") + tk.MustExec("insert into t values(1,1),(1,2),(2,2)") + tk.MustExec("insert into s values(1,1),(2,2),(2,1)") + tk.MustQuery("select /*+ inl_join(s) */ * from t join s on t.a=s.a and t.b = s.b").Sort().Check(testkit.Rows("1 1 1 1", "2 2 2 2")) + tk.MustQuery("show warnings").Check(testkit.Rows()) + tk.MustQuery("select /*+ inl_join(s) */ * from t join s on t.a=s.a and t.b = s.a").Sort().Check(testkit.Rows("1 1 1 1", "2 2 2 1", "2 2 2 2")) + tk.MustQuery("show warnings").Check(testkit.Rows()) + tk.MustQuery("select /*+ inl_join(s) */ * from t join s on t.a=s.a and t.a = s.b").Sort().Check(testkit.Rows("1 1 1 1", "1 2 1 1", "2 2 2 2")) + tk.MustQuery("show warnings").Check(testkit.Rows()) + + tk.MustQuery("select /*+ inl_join(s) */ * from t join s on t.a=s.a and t.b = s.b").Sort().Check(testkit.Rows("1 1 1 1", "2 2 2 2")) + tk.MustQuery("show warnings").Check(testkit.Rows()) + tk.MustQuery("select /*+ inl_join(s) */ * from t join s on t.a=s.a and t.b = s.a").Sort().Check(testkit.Rows("1 1 1 1", "2 2 2 1", "2 2 2 2")) + tk.MustQuery("show warnings").Check(testkit.Rows()) + tk.MustQuery("select /*+ inl_join(s) */ * from t join s on t.a=s.a and t.a = s.b").Sort().Check(testkit.Rows("1 1 1 1", "1 2 1 1", "2 2 2 2")) + tk.MustQuery("show warnings").Check(testkit.Rows()) +} + func (s *testSuiteJoinSerial) TestIssue20779(c *C) { tk := testkit.NewTestKitWithInit(c, s.store) tk.MustExec("drop table if exists t1") diff --git a/planner/core/exhaust_physical_plans.go b/planner/core/exhaust_physical_plans.go index 01f0b3e066452..efb940bf35fd9 100644 --- a/planner/core/exhaust_physical_plans.go +++ b/planner/core/exhaust_physical_plans.go @@ -354,6 +354,7 @@ func (p *LogicalJoin) getHashJoin(prop *property.PhysicalProperty, innerIdx int, // When inner plan is TableReader, the parameter `ranges` will be nil. Because pk only have one column. So all of its range // is generated during execution time. func (p *LogicalJoin) constructIndexJoin( + joinTP string, prop *property.PhysicalProperty, outerIdx int, innerTask task, @@ -392,6 +393,38 @@ func (p *LogicalJoin) constructIndexJoin( newOuterKeys = append(newOuterKeys, outerJoinKeys[keyOff]) newKeyOff = append(newKeyOff, idxOff) } + + var outerHashKeys, innerHashKeys []*expression.Column + // HashKey is only used for IndexJoin and IndexHashJoin since they need to + // build hash tables. + if joinTP != plancodec.TypeIndexMergeJoin { + outerHashKeys, innerHashKeys = make([]*expression.Column, len(newOuterKeys)), make([]*expression.Column, len(newInnerKeys)) + copy(outerHashKeys, newOuterKeys) + copy(innerHashKeys, newInnerKeys) + // we can use the `col col` in `OtherCondition` to build the hashtable to avoid the unnecessary calculating. + for i := len(newOtherConds) - 1; i >= 0; i = i - 1 { + switch c := newOtherConds[i].(type) { + case *expression.ScalarFunction: + if c.FuncName.L == ast.EQ { + lhs, ok1 := c.GetArgs()[0].(*expression.Column) + rhs, ok2 := c.GetArgs()[1].(*expression.Column) + if ok1 && ok2 { + outerSchema, innerSchema := p.Children()[outerIdx].Schema(), p.Children()[1-outerIdx].Schema() + if outerSchema.Contains(lhs) && innerSchema.Contains(rhs) { + outerHashKeys = append(outerHashKeys, lhs) + innerHashKeys = append(innerHashKeys, rhs) + } else if innerSchema.Contains(lhs) && outerSchema.Contains(rhs) { + outerHashKeys = append(outerHashKeys, rhs) + innerHashKeys = append(innerHashKeys, lhs) + } + newOtherConds = append(newOtherConds[:i], newOtherConds[i+1:]...) + } + } + default: + continue + } + } + } baseJoin := basePhysicalJoin{ InnerChildIdx: 1 - outerIdx, LeftConditions: p.LeftConditions, @@ -408,6 +441,8 @@ func (p *LogicalJoin) constructIndexJoin( KeyOff2IdxOff: newKeyOff, Ranges: ranges, CompareFilters: compareFilters, + OuterHashKeys: outerHashKeys, + InnerHashKeys: innerHashKeys, }.Init(p.ctx, p.stats.ScaleByExpectCnt(prop.ExpectedCnt), p.blockOffset, chReqProps...) if path != nil { join.IdxColLens = path.IdxColLens @@ -425,7 +460,7 @@ func (p *LogicalJoin) constructIndexMergeJoin( path *util.AccessPath, compareFilters *ColWithCmpFuncManager, ) []PhysicalPlan { - indexJoins := p.constructIndexJoin(prop, outerIdx, innerTask, ranges, keyOff2IdxOff, path, compareFilters) + indexJoins := p.constructIndexJoin(plancodec.TypeIndexMergeJoin, prop, outerIdx, innerTask, ranges, keyOff2IdxOff, path, compareFilters) indexMergeJoins := make([]PhysicalPlan, 0, len(indexJoins)) for _, plan := range indexJoins { join := plan.(*PhysicalIndexJoin) @@ -510,7 +545,7 @@ func (p *LogicalJoin) constructIndexHashJoin( path *util.AccessPath, compareFilters *ColWithCmpFuncManager, ) []PhysicalPlan { - indexJoins := p.constructIndexJoin(prop, outerIdx, innerTask, ranges, keyOff2IdxOff, path, compareFilters) + indexJoins := p.constructIndexJoin(plancodec.TypeIndexHashJoin, prop, outerIdx, innerTask, ranges, keyOff2IdxOff, path, compareFilters) indexHashJoins := make([]PhysicalPlan, 0, len(indexJoins)) for _, plan := range indexJoins { join := plan.(*PhysicalIndexJoin) @@ -620,7 +655,8 @@ func (p *LogicalJoin) buildIndexJoinInner2TableScan( failpoint.Return(p.constructIndexHashJoin(prop, outerIdx, innerTask, nil, keyOff2IdxOff, nil, nil)) } }) - joins = append(joins, p.constructIndexJoin(prop, outerIdx, innerTask, nil, keyOff2IdxOff, nil, nil)...) + joins = append(joins, p.constructIndexJoin(plancodec.TypeIndexJoin, prop, outerIdx, innerTask, nil, keyOff2IdxOff, nil, nil)...) + // The index merge join's inner plan is different from index join, so we // should construct another inner plan for it. // Because we can't keep order for union scan, if there is a union scan in inner task, @@ -685,7 +721,10 @@ func (p *LogicalJoin) buildIndexJoinInner2IndexScan( failpoint.Return(p.constructIndexHashJoin(prop, outerIdx, innerTask, helper.chosenRanges, keyOff2IdxOff, helper.chosenPath, helper.lastColManager)) } }) - joins = append(joins, p.constructIndexJoin(prop, outerIdx, innerTask, helper.chosenRanges, keyOff2IdxOff, helper.chosenPath, helper.lastColManager)...) + joins = append(joins, p.constructIndexJoin(plancodec.TypeIndexJoin, prop, outerIdx, innerTask, helper.chosenRanges, keyOff2IdxOff, helper.chosenPath, helper.lastColManager)...) + // We can reuse the `innerTask` here since index nested loop hash join + // do not need the inner child to promise the order. + joins = append(joins, p.constructIndexHashJoin(prop, outerIdx, innerTask, helper.chosenRanges, keyOff2IdxOff, helper.chosenPath, helper.lastColManager)...) // The index merge join's inner plan is different from index join, so we // should construct another inner plan for it. // Because we can't keep order for union scan, if there is a union scan in inner task, diff --git a/planner/core/explain.go b/planner/core/explain.go index 64ed86c7242c0..7b728a49e40a9 100644 --- a/planner/core/explain.go +++ b/planner/core/explain.go @@ -20,10 +20,12 @@ import ( "strings" "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/expression" "github.com/pingcap/tidb/expression/aggregation" "github.com/pingcap/tidb/planner/util" "github.com/pingcap/tidb/statistics" + "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/stringutil" ) @@ -385,6 +387,18 @@ func (p *PhysicalIndexJoin) explainInfo(normalized bool) string { fmt.Fprintf(buffer, ", inner key:%s", expression.ExplainColumnList(p.InnerJoinKeys)) } + + if len(p.OuterHashKeys) > 0 { + exprs := make([]expression.Expression, 0, len(p.OuterHashKeys)) + for i := range p.OuterHashKeys { + expr, err := expression.NewFunctionBase(MockContext(), ast.EQ, types.NewFieldType(mysql.TypeLonglong), p.OuterHashKeys[i], p.InnerHashKeys[i]) + if err != nil { + } + exprs = append(exprs, expr) + } + fmt.Fprintf(buffer, ", equal cond:%s", + sortedExplainExpressionList(exprs)) + } if len(p.LeftConditions) > 0 { fmt.Fprintf(buffer, ", left cond:%s", sortedExplainExpressionList(p.LeftConditions)) diff --git a/planner/core/integration_test.go b/planner/core/integration_test.go index cebbe75095252..f5b7e3c46ea50 100644 --- a/planner/core/integration_test.go +++ b/planner/core/integration_test.go @@ -1475,6 +1475,31 @@ func (s *testIntegrationSuite) TestPartitionUnionWithPPruningColumn(c *C) { } +func (s *testIntegrationSerialSuite) TestIssue20710(c *C) { + tk := testkit.NewTestKitWithInit(c, s.store) + tk.MustExec("drop table if exists t;") + tk.MustExec("drop table if exists s;") + tk.MustExec("create table t(a int, b int)") + tk.MustExec("create table s(a int, b int, index(a))") + tk.MustExec("insert into t values(1,1),(1,2),(2,2)") + tk.MustExec("insert into s values(1,1),(2,2),(2,1)") + + var input []string + var output []struct { + SQL string + Plan []string + } + s.testData.GetTestCases(c, &input, &output) + for i, tt := range input { + s.testData.OnRecord(func() { + output[i].SQL = tt + output[i].Plan = s.testData.ConvertRowsToStrings(tk.MustQuery(tt).Rows()) + }) + res := tk.MustQuery(tt) + res.Check(testkit.Rows(output[i].Plan...)) + } +} + func (s *testIntegrationSuite) TestIssue10448(c *C) { tk := testkit.NewTestKit(c, s.store) tk.MustExec("use test") diff --git a/planner/core/physical_plans.go b/planner/core/physical_plans.go index f83be56fb69b7..597bfeeb49fdc 100644 --- a/planner/core/physical_plans.go +++ b/planner/core/physical_plans.go @@ -417,6 +417,12 @@ type PhysicalIndexJoin struct { // need to be evaluated after we fetch the data of t1. // This struct stores them and evaluate them to ranges. CompareFilters *ColWithCmpFuncManager + // OuterHashKeys indicates the outer keys used to build hash table during + // execution. OuterJoinKeys is the prefix of OuterHashKeys. + OuterHashKeys []*expression.Column + // InnerHashKeys indicates the inner keys used to build hash table during + // execution. InnerJoinKeys is the prefix of InnerHashKeys. + InnerHashKeys []*expression.Column } // PhysicalIndexMergeJoin represents the plan of index look up merge join. diff --git a/planner/core/resolve_indices.go b/planner/core/resolve_indices.go index a9c878d9bc2c6..e37d51e57c1e0 100644 --- a/planner/core/resolve_indices.go +++ b/planner/core/resolve_indices.go @@ -251,6 +251,17 @@ func (p *PhysicalIndexJoin) ResolveIndices() (err error) { p.CompareFilters.affectedColSchema.Columns[i] = resolvedCol.(*expression.Column) } } + for i := range p.OuterHashKeys { + outerKey, err := p.OuterHashKeys[i].ResolveIndices(p.children[1-p.InnerChildIdx].Schema()) + if err != nil { + return err + } + innerKey, err := p.InnerHashKeys[i].ResolveIndices(p.children[p.InnerChildIdx].Schema()) + if err != nil { + return err + } + p.OuterHashKeys[i], p.InnerHashKeys[i] = outerKey.(*expression.Column), innerKey.(*expression.Column) + } return } diff --git a/planner/core/testdata/analyze_suite_out.json b/planner/core/testdata/analyze_suite_out.json index 548572962d7b9..7019f935571d1 100644 --- a/planner/core/testdata/analyze_suite_out.json +++ b/planner/core/testdata/analyze_suite_out.json @@ -47,13 +47,13 @@ ], "Plan": [ "Limit_17 1.00 root offset:0, count:1", - "└─IndexJoin_62 1.00 root left outer semi join, inner:IndexReader_61, outer key:test.t.a, inner key:test.t.b", - " ├─TopN_25(Build) 1.00 root test.t.a:asc, offset:0, count:1", - " │ └─IndexReader_33 1.00 root index:TopN_32", - " │ └─TopN_32 1.00 cop[tikv] test.t.a:asc, offset:0, count:1", - " │ └─IndexRangeScan_31 6.00 cop[tikv] table:t1, index:idx_bc(b, c) range:[-inf,6], keep order:false", - " └─IndexReader_61(Probe) 1.04 root index:IndexRangeScan_60", - " └─IndexRangeScan_60 1.04 cop[tikv] table:t2, index:idx_bc(b, c) range: decided by [eq(test.t.b, test.t.a)], keep order:false" + "└─IndexJoin_64 1.00 root left outer semi join, inner:IndexReader_63, outer key:test.t.a, inner key:test.t.b, equal cond:eq(test.t.a, test.t.b)", + " ├─TopN_27(Build) 1.00 root test.t.a:asc, offset:0, count:1", + " │ └─IndexReader_35 1.00 root index:TopN_34", + " │ └─TopN_34 1.00 cop[tikv] test.t.a:asc, offset:0, count:1", + " │ └─IndexRangeScan_33 6.00 cop[tikv] table:t1, index:idx_bc(b, c) range:[-inf,6], keep order:false", + " └─IndexReader_63(Probe) 1.04 root index:IndexRangeScan_62", + " └─IndexRangeScan_62 1.04 cop[tikv] table:t2, index:idx_bc(b, c) range: decided by [eq(test.t.b, test.t.a)], keep order:false" ] }, { @@ -142,10 +142,10 @@ "explain select /*+ TIDB_INLJ(t2) */ * from t1 join t2 on t2.a=t1.a and t2.b>t1.b-1 and t2.bColumn#7, funcs:firstrow(test.t.b)->test.t.b", - " │ └─IndexReader_42 7992.00 root index:HashAgg_38", - " │ └─HashAgg_38 7992.00 cop[tikv] group by:test.t.b, funcs:max(test.t.a)->Column#10", - " │ └─IndexFullScan_31 9990.00 cop[tikv] table:t2, index:b(b) keep order:false, stats:pseudo", - " └─TableReader_45(Probe) 9990.00 root data:Selection_44", - " └─Selection_44 9990.00 cop[tikv] not(isnull(test.t.b))", - " └─TableFullScan_43 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo" + " └─HashJoin_23 9990.00 root inner join, equal:[eq(test.t.b, test.t.b)]", + " ├─HashAgg_43(Build) 7992.00 root group by:test.t.b, funcs:max(Column#10)->Column#7, funcs:firstrow(test.t.b)->test.t.b", + " │ └─IndexReader_44 7992.00 root index:HashAgg_40", + " │ └─HashAgg_40 7992.00 cop[tikv] group by:test.t.b, funcs:max(test.t.a)->Column#10", + " │ └─IndexFullScan_33 9990.00 cop[tikv] table:t2, index:b(b) keep order:false, stats:pseudo", + " └─TableReader_47(Probe) 9990.00 root data:Selection_46", + " └─Selection_46 9990.00 cop[tikv] not(isnull(test.t.b))", + " └─TableFullScan_45 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo" ], "Warnings": [] }, { "SQL": "desc select /*+ INL_HASH_JOIN(t2) */ distinct t2.a from t t1 join t t2 on t1.a = t2.a", "Plan": [ - "IndexHashJoin_13 12500.00 root inner join, inner:TableReader_10, outer key:test.t.a, inner key:test.t.a", + "IndexHashJoin_13 12500.00 root inner join, inner:TableReader_10, outer key:test.t.a, inner key:test.t.a, equal cond:eq(test.t.a, test.t.a)", "├─TableReader_15(Build) 10000.00 root data:TableFullScan_14", "│ └─TableFullScan_14 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo", "└─TableReader_10(Probe) 1.00 root data:TableRangeScan_9", diff --git a/planner/core/testdata/plan_normalized_suite_out.json b/planner/core/testdata/plan_normalized_suite_out.json index 065aa548b0aeb..554a2d4b79d7c 100644 --- a/planner/core/testdata/plan_normalized_suite_out.json +++ b/planner/core/testdata/plan_normalized_suite_out.json @@ -90,7 +90,7 @@ { "SQL": "SELECT /*+ TIDB_INLJ(t1, t2) */ * from t1, t2 where t1.a = t2.a and t1.c>1;", "Plan": [ - " IndexJoin root inner join, inner:TableReader, outer key:test.t1.a, inner key:test.t2.a", + " IndexJoin root inner join, inner:TableReader, outer key:test.t1.a, inner key:test.t2.a, equal cond:eq(test.t1.a, test.t2.a)", " ├─TableReader root ", " │ └─Selection cop gt(test.t1.c, ?)", " │ └─TableScan cop table:t1, range:[?,?], keep order:false", @@ -123,7 +123,7 @@ { "SQL": "SELECT /*+ TIDB_INLJ(t1, t2) */ * from t1, t2 where t1.a = t2.a and t1.c>1;", "Plan": [ - " IndexJoin root inner join, inner:TableReader, outer key:test.t1.a, inner key:test.t2.a", + " IndexJoin root inner join, inner:TableReader, outer key:test.t1.a, inner key:test.t2.a, equal cond:eq(test.t1.a, test.t2.a)", " ├─TableReader root ", " │ └─Selection cop gt(test.t1.c, ?)", " │ └─TableScan cop table:t1, range:[?,?], keep order:false", diff --git a/planner/core/testdata/plan_suite_out.json b/planner/core/testdata/plan_suite_out.json index b9a2f5d4873f2..efb13483078f8 100644 --- a/planner/core/testdata/plan_suite_out.json +++ b/planner/core/testdata/plan_suite_out.json @@ -1319,7 +1319,7 @@ "explain select /*+ TIDB_INLJ(t2) */ * from t t1, t t2 where t1.a = t2.a" ], "Plan": [ - "IndexJoin_12 12500.00 root inner join, inner:UnionScan_11, outer key:test.t.a, inner key:test.t.a", + "IndexJoin_12 12500.00 root inner join, inner:UnionScan_11, outer key:test.t.a, inner key:test.t.a, equal cond:eq(test.t.a, test.t.a)", "├─UnionScan_15(Build) 10000.00 root ", "│ └─TableReader_17 10000.00 root data:TableFullScan_16", "│ └─TableFullScan_16 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo", diff --git a/util/ranger/testdata/ranger_suite_out.json b/util/ranger/testdata/ranger_suite_out.json index bb9a9cc984af4..38adc21a07390 100644 --- a/util/ranger/testdata/ranger_suite_out.json +++ b/util/ranger/testdata/ranger_suite_out.json @@ -10,7 +10,7 @@ " ├─TableReader_15(Build) 2.00 root data:TableFullScan_14", " │ └─TableFullScan_14 2.00 cop[tikv] table:t keep order:false", " └─StreamAgg_20(Probe) 1.00 root funcs:count(1)->Column#16", - " └─IndexJoin_36 2.00 root inner join, inner:TableReader_35, outer key:test.t.a, inner key:test.t.a", + " └─IndexJoin_36 2.00 root inner join, inner:TableReader_35, outer key:test.t.a, inner key:test.t.a, equal cond:eq(test.t.a, test.t.a)", " ├─IndexReader_29(Build) 2.00 root index:IndexRangeScan_28", " │ └─IndexRangeScan_28 2.00 cop[tikv] table:s, index:idx(b, c, d) range: decided by [eq(test.t.b, 1) in(test.t.c, 1, 2) eq(test.t.d, test.t.a)], keep order:false", " └─TableReader_35(Probe) 1.00 root data:TableRangeScan_34", From 5e8d6ba1db90214bcfc4db524bb67c2be5b80111 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Wed, 25 Nov 2020 14:36:04 +0800 Subject: [PATCH 149/229] executor: set the inner join keys' field length to unspecified (#21233) (#21249) Signed-off-by: ti-srebot --- executor/builder.go | 16 ++++++++++++++-- executor/write_test.go | 19 +++++++++++++++++++ 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/executor/builder.go b/executor/builder.go index f1e2e689f5826..d192cc691fcfd 100644 --- a/executor/builder.go +++ b/executor/builder.go @@ -2080,7 +2080,13 @@ func (b *executorBuilder) buildIndexLookUpJoin(v *plannercore.PhysicalIndexJoin) innerPlan := v.Children()[v.InnerChildIdx] innerTypes := make([]*types.FieldType, innerPlan.Schema().Len()) for i, col := range innerPlan.Schema().Columns { - innerTypes[i] = col.RetType + innerTypes[i] = col.RetType.Clone() + // The `innerTypes` would be called for `Datum.ConvertTo` when converting the columns from outer table + // to build hash map or construct lookup keys. So we need to modify its Flen otherwise there would be + // truncate error. See issue https://github.com/pingcap/tidb/issues/21232 for example. + if innerTypes[i].EvalType() == types.ETString { + innerTypes[i].Flen = types.UnspecifiedLength + } } var ( @@ -2169,7 +2175,13 @@ func (b *executorBuilder) buildIndexLookUpMergeJoin(v *plannercore.PhysicalIndex innerPlan := v.Children()[v.InnerChildIdx] innerTypes := make([]*types.FieldType, innerPlan.Schema().Len()) for i, col := range innerPlan.Schema().Columns { - innerTypes[i] = col.RetType + innerTypes[i] = col.RetType.Clone() + // The `innerTypes` would be called for `Datum.ConvertTo` when converting the columns from outer table + // to build hash map or construct lookup keys. So we need to modify its Flen otherwise there would be + // truncate error. See issue https://github.com/pingcap/tidb/issues/21232 for example. + if innerTypes[i].EvalType() == types.ETString { + innerTypes[i].Flen = types.UnspecifiedLength + } } var ( outerFilter []expression.Expression diff --git a/executor/write_test.go b/executor/write_test.go index eb4234ba4dd97..1e9c95c3f336f 100644 --- a/executor/write_test.go +++ b/executor/write_test.go @@ -2872,3 +2872,22 @@ func (s *testSerialSuite1) TestIssue20724(c *C) { tk.MustQuery("select * from t1").Check(testkit.Rows("A")) tk.MustExec("drop table t1") } + +func (s *testSuite) TestIssue21232(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t, t1") + tk.MustExec("create table t(a varchar(1), index idx(a))") + tk.MustExec("create table t1(a varchar(5), index idx(a))") + tk.MustExec("insert into t values('a'), ('b')") + tk.MustExec("insert into t1 values('a'), ('bbbbb')") + tk.MustExec("update /*+ INL_JOIN(t) */ t, t1 set t.a='a' where t.a=t1.a") + tk.MustQuery("show warnings").Check(testkit.Rows()) + tk.MustQuery("select * from t").Check(testkit.Rows("a", "b")) + tk.MustExec("update /*+ INL_HASH_JOIN(t) */ t, t1 set t.a='a' where t.a=t1.a") + tk.MustQuery("show warnings").Check(testkit.Rows()) + tk.MustQuery("select * from t").Check(testkit.Rows("a", "b")) + tk.MustExec("update /*+ INL_MERGE_JOIN(t) */ t, t1 set t.a='a' where t.a=t1.a") + tk.MustQuery("show warnings").Check(testkit.Rows()) + tk.MustQuery("select * from t").Check(testkit.Rows("a", "b")) +} From 6926836c3a7b20ff1b6a4ac6daec267a36f53d76 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Wed, 25 Nov 2020 15:08:05 +0800 Subject: [PATCH 150/229] executor: fix The JSON Data can not import to TiDB correctly by `load data` (#21043) (#21074) Signed-off-by: ti-srebot --- executor/executor_pkg_test.go | 28 ++++++++++++++++++++++++++++ executor/load_data.go | 18 +++++++++--------- 2 files changed, 37 insertions(+), 9 deletions(-) diff --git a/executor/executor_pkg_test.go b/executor/executor_pkg_test.go index 3616d95961dbc..8121920ddb7be 100644 --- a/executor/executor_pkg_test.go +++ b/executor/executor_pkg_test.go @@ -235,6 +235,7 @@ func (s *testExecSuite) TestGetFieldsFromLine(c *C) { FieldsInfo: &ast.FieldsClause{ Enclosed: '"', Terminated: ",", + Escaped: '\\', }, } @@ -248,6 +249,33 @@ func (s *testExecSuite) TestGetFieldsFromLine(c *C) { c.Assert(err, IsNil) } +func (s *testExecSerialSuite) TestLoadDataWithDifferentEscapeChar(c *C) { + tests := []struct { + input string + escapeChar byte + expected []string + }{ + { + `"{""itemRangeType"":0,""itemContainType"":0,""shopRangeType"":1,""shopJson"":""[{\""id\"":\""A1234\"",\""shopName\"":\""AAAAAA\""}]""}"`, + byte(0), // escaped by '' + []string{`{"itemRangeType":0,"itemContainType":0,"shopRangeType":1,"shopJson":"[{\"id\":\"A1234\",\"shopName\":\"AAAAAA\"}]"}`}, + }, + } + + for _, test := range tests { + ldInfo := LoadDataInfo{ + FieldsInfo: &ast.FieldsClause{ + Enclosed: '"', + Terminated: ",", + Escaped: test.escapeChar, + }, + } + got, err := ldInfo.getFieldsFromLine([]byte(test.input)) + c.Assert(err, IsNil, Commentf("failed: %s", test.input)) + assertEqualStrings(c, got, test.expected) + } +} + func assertEqualStrings(c *C, got []field, expect []string) { c.Assert(len(got), Equals, len(expect)) for i := 0; i < len(got); i++ { diff --git a/executor/load_data.go b/executor/load_data.go index 41f497a0c4988..d69e66c33df6d 100644 --- a/executor/load_data.go +++ b/executor/load_data.go @@ -510,17 +510,19 @@ type fieldWriter struct { term string enclosedChar byte fieldTermChar byte + escapeChar byte isEnclosed bool isLineStart bool isFieldStart bool } -func (w *fieldWriter) Init(enclosedChar byte, fieldTermChar byte, readBuf []byte, term string) { +func (w *fieldWriter) Init(enclosedChar, escapeChar, fieldTermChar byte, readBuf []byte, term string) { w.isEnclosed = false w.isLineStart = true w.isFieldStart = true w.ReadBuf = readBuf w.enclosedChar = enclosedChar + w.escapeChar = escapeChar w.fieldTermChar = fieldTermChar w.term = term } @@ -626,13 +628,12 @@ func (w *fieldWriter) GetField() (bool, field) { w.OutputBuf = append(w.OutputBuf, w.enclosedChar) w.putback() } - } else if ch == '\\' { - // TODO: escape only support '\' + } else if ch == w.escapeChar { // When the escaped character is interpreted as if // it was not escaped, backslash is ignored. flag, ch = w.getChar() if flag { - w.OutputBuf = append(w.OutputBuf, '\\') + w.OutputBuf = append(w.OutputBuf, w.escapeChar) w.OutputBuf = append(w.OutputBuf, ch) } } else { @@ -654,10 +655,10 @@ func (e *LoadDataInfo) getFieldsFromLine(line []byte) ([]field, error) { return fields, nil } - reader.Init(e.FieldsInfo.Enclosed, e.FieldsInfo.Terminated[0], line, e.FieldsInfo.Terminated) + reader.Init(e.FieldsInfo.Enclosed, e.FieldsInfo.Escaped, e.FieldsInfo.Terminated[0], line, e.FieldsInfo.Terminated) for { eol, f := reader.GetField() - f = f.escape() + f = f.escape(reader.escapeChar) if bytes.Equal(f.str, null) && !f.enclosed { f.str = []byte{'N'} f.maybeNull = true @@ -672,12 +673,11 @@ func (e *LoadDataInfo) getFieldsFromLine(line []byte) ([]field, error) { // escape handles escape characters when running load data statement. // See http://dev.mysql.com/doc/refman/5.7/en/load-data.html -// TODO: escape only support '\' as the `ESCAPED BY` character, it should support specify characters. -func (f *field) escape() field { +func (f *field) escape(escapeChar byte) field { pos := 0 for i := 0; i < len(f.str); i++ { c := f.str[i] - if i+1 < len(f.str) && f.str[i] == '\\' { + if i+1 < len(f.str) && f.str[i] == escapeChar { c = f.escapeChar(f.str[i+1]) i++ } From cf26df1bbb5c7f76d2cbf501f00fae5d3ab87227 Mon Sep 17 00:00:00 2001 From: tiancaiamao Date: Wed, 25 Nov 2020 15:22:00 +0800 Subject: [PATCH 151/229] test: stabilize leak test #19526 (#21270) --- util/testleak/leaktest.go | 75 +++++++++++++++++++++++++-------------- 1 file changed, 48 insertions(+), 27 deletions(-) diff --git a/util/testleak/leaktest.go b/util/testleak/leaktest.go index 7ca64d04e967a..f465f951bf621 100644 --- a/util/testleak/leaktest.go +++ b/util/testleak/leaktest.go @@ -31,39 +31,60 @@ import ( func interestingGoroutines() (gs []string) { buf := make([]byte, 2<<20) buf = buf[:runtime.Stack(buf, true)] + ignoreList := []string{ + "created by github.com/pingcap/tidb.init", + "testing.RunTests", + "check.(*resultTracker).start", + "check.(*suiteRunner).runFunc", + "check.(*suiteRunner).parallelRun", + "localstore.(*dbStore).scheduler", + "tikv.(*noGCHandler).Start", + "ddl.(*ddl).start", + "ddl.(*delRange).startEmulator", + "domain.NewDomain", + "testing.(*T).Run", + "domain.(*Domain).LoadPrivilegeLoop", + "domain.(*Domain).UpdateTableStatsLoop", + "testing.Main(", + "runtime.goexit", + "created by runtime.gc", + "interestingGoroutines", + "runtime.MHeap_Scavenger", + "created by os/signal.init", + "gopkg.in/natefinch/lumberjack%2ev2.(*Logger).millRun", + // these go routines are async terminated, so they may still alive after test end, thus cause + // false positive leak failures + "google.golang.org/grpc.(*addrConn).resetTransport", + "google.golang.org/grpc.(*ccBalancerWrapper).watcher", + "github.com/pingcap/goleveldb/leveldb/util.(*BufferPool).drain", + "github.com/pingcap/goleveldb/leveldb.(*DB).compactionError", + "github.com/pingcap/goleveldb/leveldb.(*DB).mpoolDrain", + "go.etcd.io/etcd/pkg/logutil.(*MergeLogger).outputLoop", + "go.etcd.io/etcd/v3/pkg/logutil.(*MergeLogger).outputLoop", + "oracles.(*pdOracle).updateTS", + "tikv.(*tikvStore).runSafePointChecker", + "tikv.(*RegionCache).asyncCheckAndResolveLoop", + "github.com/pingcap/badger", + "github.com/ngaut/unistore/tikv.(*MVCCStore).runUpdateSafePointLoop", + } + shouldIgnore := func(stack string) bool { + if stack == "" { + return true + } + for _, ident := range ignoreList { + if strings.Contains(stack, ident) { + return true + } + } + return false + } for _, g := range strings.Split(string(buf), "\n\n") { sl := strings.SplitN(g, "\n", 2) if len(sl) != 2 { continue } stack := strings.TrimSpace(sl[1]) - if stack == "" || - strings.Contains(stack, "created by github.com/pingcap/tidb.init") || - strings.Contains(stack, "testing.RunTests") || - strings.Contains(stack, "check.(*resultTracker).start") || - strings.Contains(stack, "check.(*suiteRunner).runFunc") || - strings.Contains(stack, "check.(*suiteRunner).parallelRun") || - strings.Contains(stack, "localstore.(*dbStore).scheduler") || - strings.Contains(stack, "tikv.(*noGCHandler).Start") || - strings.Contains(stack, "ddl.(*ddl).start") || - strings.Contains(stack, "ddl.(*delRange).startEmulator") || - strings.Contains(stack, "domain.NewDomain") || - strings.Contains(stack, "testing.(*T).Run") || - strings.Contains(stack, "domain.(*Domain).LoadPrivilegeLoop") || - strings.Contains(stack, "domain.(*Domain).UpdateTableStatsLoop") || - strings.Contains(stack, "testing.Main(") || - strings.Contains(stack, "runtime.goexit") || - strings.Contains(stack, "created by runtime.gc") || - strings.Contains(stack, "interestingGoroutines") || - strings.Contains(stack, "runtime.MHeap_Scavenger") || - strings.Contains(stack, "gopkg.in/natefinch/lumberjack%2ev2.(*Logger).millRun") || - // these go routines are async terminated, so they may still alive after test end, thus cause - // false positive leak failures - strings.Contains(stack, "google.golang.org/grpc.(*addrConn).resetTransport") || - strings.Contains(stack, "google.golang.org/grpc.(*ccBalancerWrapper).watcher") || - strings.Contains(stack, "github.com/pingcap/goleveldb/leveldb/util.(*BufferPool).drain") || - strings.Contains(stack, "github.com/pingcap/goleveldb/leveldb.(*DB).compactionError") || - strings.Contains(stack, "github.com/pingcap/goleveldb/leveldb.(*DB).mpoolDrain") { + if shouldIgnore(stack) { continue } gs = append(gs, stack) From 9a801edcef4cbd5d602fe80ccf0a83489606369a Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Wed, 25 Nov 2020 15:37:00 +0800 Subject: [PATCH 152/229] executor, planner: do not coalesce column for update/delete natural_using_join (#21085) (#21103) Signed-off-by: ti-srebot --- executor/join_test.go | 5 +++++ planner/core/logical_plan_builder.go | 22 ++++++++++++++++++++-- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/executor/join_test.go b/executor/join_test.go index 2a1aca1611a7f..0af764a2be4a9 100644 --- a/executor/join_test.go +++ b/executor/join_test.go @@ -630,6 +630,11 @@ func (s *testSuiteJoin1) TestUsing(c *C) { tk.MustExec("insert into t1 (a) values(1)") tk.MustQuery("select t1.*, t2.* from t1 join t1 t2 using(a)").Check(testkit.Rows("1 1")) tk.MustQuery("select * from t1 join t1 t2 using(a)").Check(testkit.Rows("1")) + + // For issue18992 + tk.MustExec("drop table t") + tk.MustExec("CREATE TABLE t ( a varchar(55) NOT NULL, b varchar(55) NOT NULL, c int(11) DEFAULT NULL, d int(11) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;") + tk.MustExec("update t t1 join t t2 using(a,b) set t1.c=t2.d;") } func (s *testSuiteJoin1) TestNaturalJoin(c *C) { diff --git a/planner/core/logical_plan_builder.go b/planner/core/logical_plan_builder.go index 10f659a032399..8d85008919211 100644 --- a/planner/core/logical_plan_builder.go +++ b/planner/core/logical_plan_builder.go @@ -737,7 +737,16 @@ func (b *PlanBuilder) buildUsingClause(p *LogicalJoin, leftPlan, rightPlan Logic for _, col := range join.Using { filter[col.Name.L] = true } - return b.coalesceCommonColumns(p, leftPlan, rightPlan, join.Tp, filter) + err := b.coalesceCommonColumns(p, leftPlan, rightPlan, join.Tp, filter) + if err != nil { + return err + } + // We do not need to coalesce columns for update and delete. + if b.inUpdateStmt || b.inDeleteStmt { + p.setSchemaAndNames(expression.MergeSchema(p.Children()[0].Schema(), p.Children()[1].Schema()), + append(p.Children()[0].OutputNames(), p.Children()[1].OutputNames()...)) + } + return nil } // buildNaturalJoin builds natural join output schema. It finds out all the common columns @@ -747,7 +756,16 @@ func (b *PlanBuilder) buildUsingClause(p *LogicalJoin, leftPlan, rightPlan Logic // Every column in the first (left) table that is not a common column // Every column in the second (right) table that is not a common column func (b *PlanBuilder) buildNaturalJoin(p *LogicalJoin, leftPlan, rightPlan LogicalPlan, join *ast.Join) error { - return b.coalesceCommonColumns(p, leftPlan, rightPlan, join.Tp, nil) + err := b.coalesceCommonColumns(p, leftPlan, rightPlan, join.Tp, nil) + if err != nil { + return err + } + // We do not need to coalesce columns for update and delete. + if b.inUpdateStmt || b.inDeleteStmt { + p.setSchemaAndNames(expression.MergeSchema(p.Children()[0].Schema(), p.Children()[1].Schema()), + append(p.Children()[0].OutputNames(), p.Children()[1].OutputNames()...)) + } + return nil } // coalesceCommonColumns is used by buildUsingClause and buildNaturalJoin. The filter is used by buildUsingClause. From bf8591c24edd77f8815e646e816819fb901afb8a Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Wed, 25 Nov 2020 15:52:37 +0800 Subject: [PATCH 153/229] planner: refine the explain message of expression (#16276) (#20410) (#20609) Signed-off-by: ti-srebot Signed-off-by: wjhuang2016 --- .../explain_generate_column_substitute.result | 34 +++++++++---------- .../t/explain_generate_column_substitute.test | 2 +- planner/core/explain.go | 12 +++++-- planner/core/point_get_plan.go | 12 +++++-- 4 files changed, 38 insertions(+), 22 deletions(-) diff --git a/cmd/explaintest/r/explain_generate_column_substitute.result b/cmd/explaintest/r/explain_generate_column_substitute.result index 1449cf356c505..9ec73d6627b1e 100644 --- a/cmd/explaintest/r/explain_generate_column_substitute.result +++ b/cmd/explaintest/r/explain_generate_column_substitute.result @@ -168,7 +168,7 @@ desc select * from t where a+1=3; id estRows task access object operator info Projection_4 10.00 root test.t.a, test.t.b, test.t.c, test.t.e └─IndexLookUp_10 10.00 root - ├─IndexRangeScan_8(Build) 10.00 cop[tikv] table:t, index:expr_idx_c(_V$_expr_idx_c_0) range:[3,3], keep order:false, stats:pseudo + ├─IndexRangeScan_8(Build) 10.00 cop[tikv] table:t, index:expr_idx_c(`a` + 1) range:[3,3], keep order:false, stats:pseudo └─TableRowIDScan_9(Probe) 10.00 cop[tikv] table:t keep order:false, stats:pseudo select * from t where a+1=3; a b c e @@ -176,7 +176,7 @@ a b c e desc select a+1 from t where a+1=3; id estRows task access object operator info IndexReader_6 10.00 root index:IndexRangeScan_5 -└─IndexRangeScan_5 10.00 cop[tikv] table:t, index:expr_idx_c(_V$_expr_idx_c_0) range:[3,3], keep order:false, stats:pseudo +└─IndexRangeScan_5 10.00 cop[tikv] table:t, index:expr_idx_c(`a` + 1) range:[3,3], keep order:false, stats:pseudo select a+1 from t where a+1=3; a+1 3 @@ -184,7 +184,7 @@ desc select c from t where a+1=3; id estRows task access object operator info Projection_4 10.00 root test.t.c └─IndexLookUp_10 10.00 root - ├─IndexRangeScan_8(Build) 10.00 cop[tikv] table:t, index:expr_idx_c(_V$_expr_idx_c_0) range:[3,3], keep order:false, stats:pseudo + ├─IndexRangeScan_8(Build) 10.00 cop[tikv] table:t, index:expr_idx_c(`a` + 1) range:[3,3], keep order:false, stats:pseudo └─TableRowIDScan_9(Probe) 10.00 cop[tikv] table:t keep order:false, stats:pseudo select c from t where a+1=3; c @@ -193,7 +193,7 @@ desc select * from t where b+a=3; id estRows task access object operator info Projection_4 10.00 root test.t.a, test.t.b, test.t.c, test.t.e └─IndexLookUp_10 10.00 root - ├─IndexRangeScan_8(Build) 10.00 cop[tikv] table:t, index:expr_idx_e(_V$_expr_idx_e_0) range:[3,3], keep order:false, stats:pseudo + ├─IndexRangeScan_8(Build) 10.00 cop[tikv] table:t, index:expr_idx_e(`b` + `a`) range:[3,3], keep order:false, stats:pseudo └─TableRowIDScan_9(Probe) 10.00 cop[tikv] table:t keep order:false, stats:pseudo select * from t where b+a=3; a b c e @@ -201,7 +201,7 @@ a b c e desc select b+a from t where b+a=3; id estRows task access object operator info IndexReader_6 10.00 root index:IndexRangeScan_5 -└─IndexRangeScan_5 10.00 cop[tikv] table:t, index:expr_idx_e(_V$_expr_idx_e_0) range:[3,3], keep order:false, stats:pseudo +└─IndexRangeScan_5 10.00 cop[tikv] table:t, index:expr_idx_e(`b` + `a`) range:[3,3], keep order:false, stats:pseudo select b+a from t where b+a=3; b+a 3 @@ -209,7 +209,7 @@ desc select e from t where b+a=3; id estRows task access object operator info Projection_4 10.00 root test.t.e └─IndexLookUp_10 10.00 root - ├─IndexRangeScan_8(Build) 10.00 cop[tikv] table:t, index:expr_idx_e(_V$_expr_idx_e_0) range:[3,3], keep order:false, stats:pseudo + ├─IndexRangeScan_8(Build) 10.00 cop[tikv] table:t, index:expr_idx_e(`b` + `a`) range:[3,3], keep order:false, stats:pseudo └─TableRowIDScan_9(Probe) 10.00 cop[tikv] table:t keep order:false, stats:pseudo select e from t where b+a=3; e @@ -217,7 +217,7 @@ e desc select a+1 from t where a+1 in (1, 2, 3); id estRows task access object operator info IndexReader_6 30.00 root index:IndexRangeScan_5 -└─IndexRangeScan_5 30.00 cop[tikv] table:t, index:expr_idx_c(_V$_expr_idx_c_0) range:[1,1], [2,2], [3,3], keep order:false, stats:pseudo +└─IndexRangeScan_5 30.00 cop[tikv] table:t, index:expr_idx_c(`a` + 1) range:[1,1], [2,2], [3,3], keep order:false, stats:pseudo select a+1 from t where a+1 in (1, 2, 3); a+1 1 @@ -228,7 +228,7 @@ desc select * from t where a+1 in (1, 2, 3); id estRows task access object operator info Projection_4 30.00 root test.t.a, test.t.b, test.t.c, test.t.e └─IndexLookUp_10 30.00 root - ├─IndexRangeScan_8(Build) 30.00 cop[tikv] table:t, index:expr_idx_c(_V$_expr_idx_c_0) range:[1,1], [2,2], [3,3], keep order:false, stats:pseudo + ├─IndexRangeScan_8(Build) 30.00 cop[tikv] table:t, index:expr_idx_c(`a` + 1) range:[1,1], [2,2], [3,3], keep order:false, stats:pseudo └─TableRowIDScan_9(Probe) 30.00 cop[tikv] table:t keep order:false, stats:pseudo select * from t where a+1 in (1, 2, 3); a b c e @@ -239,7 +239,7 @@ a b c e desc select a+1 from t where a+1 between 1 and 4; id estRows task access object operator info IndexReader_6 250.00 root index:IndexRangeScan_5 -└─IndexRangeScan_5 250.00 cop[tikv] table:t, index:expr_idx_c(_V$_expr_idx_c_0) range:[1,4], keep order:false, stats:pseudo +└─IndexRangeScan_5 250.00 cop[tikv] table:t, index:expr_idx_c(`a` + 1) range:[1,4], keep order:false, stats:pseudo select a+1 from t where a+1 between 1 and 4; a+1 1 @@ -250,7 +250,7 @@ desc select * from t where a+1 between 1 and 4; id estRows task access object operator info Projection_4 250.00 root test.t.a, test.t.b, test.t.c, test.t.e └─IndexLookUp_10 250.00 root - ├─IndexRangeScan_8(Build) 250.00 cop[tikv] table:t, index:expr_idx_c(_V$_expr_idx_c_0) range:[1,4], keep order:false, stats:pseudo + ├─IndexRangeScan_8(Build) 250.00 cop[tikv] table:t, index:expr_idx_c(`a` + 1) range:[1,4], keep order:false, stats:pseudo └─TableRowIDScan_9(Probe) 250.00 cop[tikv] table:t keep order:false, stats:pseudo select * from t where a+1 between 1 and 4; a b c e @@ -263,7 +263,7 @@ id estRows task access object operator info Projection_5 10000.00 root test.t.a, test.t.b, test.t.c, test.t.e └─Projection_13 10000.00 root test.t.a, test.t.b, test.t.c, test.t.e, EMPTY_NAME └─IndexLookUp_12 10000.00 root - ├─IndexFullScan_10(Build) 10000.00 cop[tikv] table:t, index:expr_idx_c(_V$_expr_idx_c_0) keep order:true, stats:pseudo + ├─IndexFullScan_10(Build) 10000.00 cop[tikv] table:t, index:expr_idx_c(`a` + 1) keep order:true, stats:pseudo └─TableRowIDScan_11(Probe) 10000.00 cop[tikv] table:t keep order:false, stats:pseudo select * from t order by a+1; a b c e @@ -277,7 +277,7 @@ a b c e desc select a+1 from t order by a+1; id estRows task access object operator info IndexReader_13 10000.00 root index:IndexFullScan_12 -└─IndexFullScan_12 10000.00 cop[tikv] table:t, index:expr_idx_c(_V$_expr_idx_c_0) keep order:true, stats:pseudo +└─IndexFullScan_12 10000.00 cop[tikv] table:t, index:expr_idx_c(`a` + 1) keep order:true, stats:pseudo select a+1 from t order by a+1; a+1 0 @@ -290,7 +290,7 @@ a+1 desc select b+a from t order by b+a; id estRows task access object operator info IndexReader_13 10000.00 root index:IndexFullScan_12 -└─IndexFullScan_12 10000.00 cop[tikv] table:t, index:expr_idx_e(_V$_expr_idx_e_0) keep order:true, stats:pseudo +└─IndexFullScan_12 10000.00 cop[tikv] table:t, index:expr_idx_e(`b` + `a`) keep order:true, stats:pseudo select b+a from t order by b+a; b+a -3 @@ -304,25 +304,25 @@ desc update t set a=1 where a+1 = 3; id estRows task access object operator info Update_4 N/A root N/A └─IndexLookUp_11 10.00 root - ├─IndexRangeScan_9(Build) 10.00 cop[tikv] table:t, index:expr_idx_c(_V$_expr_idx_c_0) range:[3,3], keep order:false, stats:pseudo + ├─IndexRangeScan_9(Build) 10.00 cop[tikv] table:t, index:expr_idx_c(`a` + 1) range:[3,3], keep order:false, stats:pseudo └─TableRowIDScan_10(Probe) 10.00 cop[tikv] table:t keep order:false, stats:pseudo desc update t set a=2, b = 3 where b+a = 3; id estRows task access object operator info Update_4 N/A root N/A └─IndexLookUp_11 10.00 root - ├─IndexRangeScan_9(Build) 10.00 cop[tikv] table:t, index:expr_idx_e(_V$_expr_idx_e_0) range:[3,3], keep order:false, stats:pseudo + ├─IndexRangeScan_9(Build) 10.00 cop[tikv] table:t, index:expr_idx_e(`b` + `a`) range:[3,3], keep order:false, stats:pseudo └─TableRowIDScan_10(Probe) 10.00 cop[tikv] table:t keep order:false, stats:pseudo desc delete from t where a+1 = 3; id estRows task access object operator info Delete_4 N/A root N/A └─IndexLookUp_11 10.00 root - ├─IndexRangeScan_9(Build) 10.00 cop[tikv] table:t, index:expr_idx_c(_V$_expr_idx_c_0) range:[3,3], keep order:false, stats:pseudo + ├─IndexRangeScan_9(Build) 10.00 cop[tikv] table:t, index:expr_idx_c(`a` + 1) range:[3,3], keep order:false, stats:pseudo └─TableRowIDScan_10(Probe) 10.00 cop[tikv] table:t keep order:false, stats:pseudo desc delete from t where b+a = 0; id estRows task access object operator info Delete_4 N/A root N/A └─IndexLookUp_11 10.00 root - ├─IndexRangeScan_9(Build) 10.00 cop[tikv] table:t, index:expr_idx_e(_V$_expr_idx_e_0) range:[0,0], keep order:false, stats:pseudo + ├─IndexRangeScan_9(Build) 10.00 cop[tikv] table:t, index:expr_idx_e(`b` + `a`) range:[0,0], keep order:false, stats:pseudo └─TableRowIDScan_10(Probe) 10.00 cop[tikv] table:t keep order:false, stats:pseudo drop table if exists t; create table t(c0 char as (c1), c1 int); diff --git a/cmd/explaintest/t/explain_generate_column_substitute.test b/cmd/explaintest/t/explain_generate_column_substitute.test index ee73da1b2d006..3ae0ad26fd1e2 100644 --- a/cmd/explaintest/t/explain_generate_column_substitute.test +++ b/cmd/explaintest/t/explain_generate_column_substitute.test @@ -221,4 +221,4 @@ drop table t; create table t(a enum('1', '2', '3'), b enum('a', 'b', 'c') as (a) unique); insert into t(a) values ('1'); desc select * from t; -select * from t; \ No newline at end of file +select * from t; diff --git a/planner/core/explain.go b/planner/core/explain.go index 7b728a49e40a9..04643b0f2198b 100644 --- a/planner/core/explain.go +++ b/planner/core/explain.go @@ -85,7 +85,11 @@ func (p *PhysicalIndexScan) AccessObject(normalized bool) string { if len(p.Index.Columns) > 0 { buffer.WriteString(", index:" + p.Index.Name.O + "(") for i, idxCol := range p.Index.Columns { - buffer.WriteString(idxCol.Name.O) + if tblCol := p.Table.Columns[idxCol.Offset]; tblCol.Hidden { + buffer.WriteString(tblCol.GeneratedExprString) + } else { + buffer.WriteString(idxCol.Name.O) + } if i+1 < len(p.Index.Columns) { buffer.WriteString(", ") } @@ -800,7 +804,11 @@ func (p *LogicalIndexScan) ExplainInfo() string { if len(index.Columns) > 0 { buffer.WriteString(", index:") for i, idxCol := range index.Columns { - buffer.WriteString(idxCol.Name.O) + if tblCol := p.Source.tableInfo.Columns[idxCol.Offset]; tblCol.Hidden { + buffer.WriteString(tblCol.GeneratedExprString) + } else { + buffer.WriteString(idxCol.Name.O) + } if i+1 < len(index.Columns) { buffer.WriteString(", ") } diff --git a/planner/core/point_get_plan.go b/planner/core/point_get_plan.go index 4932198fe2d4d..28b267f4b8241 100644 --- a/planner/core/point_get_plan.go +++ b/planner/core/point_get_plan.go @@ -122,7 +122,11 @@ func (p *PointGetPlan) AccessObject(normalized bool) string { if p.IndexInfo != nil { buffer.WriteString(", index:" + p.IndexInfo.Name.O + "(") for i, idxCol := range p.IndexInfo.Columns { - buffer.WriteString(idxCol.Name.O) + if tblCol := p.TblInfo.Columns[idxCol.Offset]; tblCol.Hidden { + buffer.WriteString(tblCol.GeneratedExprString) + } else { + buffer.WriteString(idxCol.Name.O) + } if i+1 < len(p.IndexInfo.Columns) { buffer.WriteString(", ") } @@ -268,7 +272,11 @@ func (p *BatchPointGetPlan) AccessObject(_ bool) string { if p.IndexInfo != nil { buffer.WriteString(", index:" + p.IndexInfo.Name.O + "(") for i, idxCol := range p.IndexInfo.Columns { - buffer.WriteString(idxCol.Name.O) + if tblCol := p.TblInfo.Columns[idxCol.Offset]; tblCol.Hidden { + buffer.WriteString(tblCol.GeneratedExprString) + } else { + buffer.WriteString(idxCol.Name.O) + } if i+1 < len(p.IndexInfo.Columns) { buffer.WriteString(", ") } From 22d3162a55898c25a768675e127e90639f20c5bd Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Wed, 25 Nov 2020 17:00:58 +0800 Subject: [PATCH 154/229] expression: keep the original data type when doing date arithmetic operations (#20940) (#21176) --- expression/builtin_time.go | 12 ++++-------- expression/integration_test.go | 9 +++++++++ 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/expression/builtin_time.go b/expression/builtin_time.go index 9201c414f9709..dae4b1b37e8f8 100644 --- a/expression/builtin_time.go +++ b/expression/builtin_time.go @@ -2750,11 +2750,9 @@ func (du *baseDateArithmitical) getDateFromDatetime(ctx sessionctx.Context, args return types.ZeroTime, true, err } - dateTp := mysql.TypeDate - if date.Type() == mysql.TypeDatetime || date.Type() == mysql.TypeTimestamp || types.IsClockUnit(unit) { - dateTp = mysql.TypeDatetime + if types.IsClockUnit(unit) { + date.SetType(mysql.TypeDatetime) } - date.SetType(dateTp) return date, false, nil } @@ -3021,11 +3019,9 @@ func (du *baseDateArithmitical) vecGetDateFromDatetime(b *baseBuiltinFunc, input continue } - dateTp := mysql.TypeDate - if dates[i].Type() == mysql.TypeDatetime || dates[i].Type() == mysql.TypeTimestamp || isClockUnit { - dateTp = mysql.TypeDatetime + if isClockUnit { + dates[i].SetType(mysql.TypeDatetime) } - dates[i].SetType(dateTp) } return nil } diff --git a/expression/integration_test.go b/expression/integration_test.go index 63b849450687c..7656137eb914c 100755 --- a/expression/integration_test.go +++ b/expression/integration_test.go @@ -7266,6 +7266,15 @@ func (s *testIntegrationSuite) TestIssue20180(c *C) { tk.MustQuery("select * from t where a > 1 and a = \"b\";").Check(testkit.Rows("b")) } +func (s *testIntegrationSuite) TestIssue20860(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t;") + tk.MustExec("create table t(id int primary key, c int, d timestamp null default null)") + tk.MustExec("insert into t values(1, 2, '2038-01-18 20:20:30')") + c.Assert(tk.ExecToErr("update t set d = adddate(d, interval 1 day) where id < 10"), NotNil) +} + func (s *testIntegrationSuite) TestIssue11645(c *C) { defer s.cleanEnv(c) tk := testkit.NewTestKit(c, s.store) From d7e2b47ec60111be50a2afe94d79be42631893c0 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Wed, 25 Nov 2020 17:35:19 +0800 Subject: [PATCH 155/229] ddl: Fix default value of a newly added enum column (#20798) (#20998) Signed-off-by: ti-srebot --- ddl/column.go | 19 +++++++++++++++---- ddl/db_integration_test.go | 29 +++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+), 4 deletions(-) diff --git a/ddl/column.go b/ddl/column.go index a35d2740a0f96..8f2e6994e5a3b 100644 --- a/ddl/column.go +++ b/ddl/column.go @@ -665,10 +665,21 @@ func generateOriginDefaultValue(col *model.ColumnInfo) (interface{}, error) { var err error odValue := col.GetDefaultValue() if odValue == nil && mysql.HasNotNullFlag(col.Flag) { - zeroVal := table.GetZeroValue(col) - odValue, err = zeroVal.ToString() - if err != nil { - return nil, errors.Trace(err) + switch col.Tp { + // Just use enum field's first element for OriginDefaultValue. + case mysql.TypeEnum: + defEnum, verr := types.ParseEnumValue(col.FieldType.Elems, 1) + if verr != nil { + return nil, errors.Trace(verr) + } + defVal := types.NewCollateMysqlEnumDatum(defEnum, col.Collate) + return defVal.ToString() + default: + zeroVal := table.GetZeroValue(col) + odValue, err = zeroVal.ToString() + if err != nil { + return nil, errors.Trace(err) + } } } diff --git a/ddl/db_integration_test.go b/ddl/db_integration_test.go index 6c9f270434fb4..7464ccd1745e1 100644 --- a/ddl/db_integration_test.go +++ b/ddl/db_integration_test.go @@ -2255,3 +2255,32 @@ func (s *testIntegrationSuite3) TestIssue20490(c *C) { tk.MustQuery("select b from issue20490 order by a;").Check(testkit.Rows("1", "1", "")) } + +func (s *testIntegrationSuite3) TestIssue20741WithEnumField(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk.MustExec("drop table if exists issue20741") + tk.MustExec("create table issue20741(id int primary key, c int)") + tk.MustExec("insert into issue20741(id, c) values(1, 2), (2, 2)") + tk.MustExec("alter table issue20741 add column cc enum('a', 'b', 'c', 'd') not null") + tk.MustExec("update issue20741 set c=2 where id=1") + tk.MustQuery("select * from issue20741").Check(testkit.Rows("1 2 a", "2 2 a")) + tk.MustQuery("select * from issue20741 where cc = 0").Check(testkit.Rows()) + tk.MustQuery("select * from issue20741 where cc = 1").Check(testkit.Rows("1 2 a", "2 2 a")) +} + +func (s *testIntegrationSuite3) TestIssue20741WithSetField(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk.MustExec("drop table if exists issue20741_2") + tk.MustExec("create table issue20741_2(id int primary key, c int)") + tk.MustExec("insert into issue20741_2(id, c) values(1, 2), (2, 2)") + tk.MustExec("alter table issue20741_2 add column cc set('a', 'b', 'c', 'd') not null") + tk.MustExec("update issue20741_2 set c=2 where id=1") + tk.MustQuery("select * from issue20741_2").Check(testkit.Rows("1 2 ", "2 2 ")) + tk.MustQuery("select * from issue20741_2 where cc = 0").Check(testkit.Rows("1 2 ", "2 2 ")) + tk.MustQuery("select * from issue20741_2 where cc = 1").Check(testkit.Rows()) + _, err := tk.Exec("insert into issue20741_2(id, c) values (3, 3)") + c.Assert(err, NotNil) + c.Assert(err.Error(), Equals, "[table:1364]Field 'cc' doesn't have a default value") +} From beb08622b4cf524afed163e756ac658f078d9021 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Wed, 25 Nov 2020 17:49:49 +0800 Subject: [PATCH 156/229] planner: fix should not use point get plan (#21124) (#21244) Signed-off-by: ti-srebot --- planner/core/point_get_plan.go | 49 +++++++ planner/core/point_get_plan_test.go | 36 +++++ planner/core/testdata/point_get_plan_in.json | 17 +++ planner/core/testdata/point_get_plan_out.json | 132 ++++++++++++++++++ 4 files changed, 234 insertions(+) diff --git a/planner/core/point_get_plan.go b/planner/core/point_get_plan.go index 28b267f4b8241..ba1ea4e82a78c 100644 --- a/planner/core/point_get_plan.go +++ b/planner/core/point_get_plan.go @@ -25,6 +25,7 @@ import ( "github.com/pingcap/parser/mysql" "github.com/pingcap/parser/opcode" "github.com/pingcap/parser/terror" + ptypes "github.com/pingcap/parser/types" "github.com/pingcap/tidb/expression" "github.com/pingcap/tidb/infoschema" "github.com/pingcap/tidb/kv" @@ -464,6 +465,9 @@ func newBatchPointGetPlan( if d.IsNull() { return nil } + if !checkCanConvertInPointGet(handleCol, d) { + return nil + } intDatum, err := d.ConvertTo(ctx.GetSessionVars().StmtCtx, &handleCol.FieldType) if err != nil { return nil @@ -486,6 +490,14 @@ func newBatchPointGetPlan( // The columns in where clause should be covered by unique index var matchIdxInfo *model.IndexInfo permutations := make([]int, len(whereColNames)) + colInfos := make([]*model.ColumnInfo, len(whereColNames)) + for i, innerCol := range whereColNames { + for _, col := range tbl.Columns { + if col.Name.L == innerCol { + colInfos[i] = col + } + } + } for _, idxInfo := range tbl.Indices { if !idxInfo.Unique || idxInfo.State != model.StatePublic { continue @@ -538,8 +550,14 @@ func newBatchPointGetPlan( permIndex := permutations[index] switch innerX := inner.(type) { case *driver.ValueExpr: + if !checkCanConvertInPointGet(colInfos[index], innerX.Datum) { + return nil + } values[permIndex] = innerX.Datum case *driver.ParamMarkerExpr: + if !checkCanConvertInPointGet(colInfos[index], innerX.Datum) { + return nil + } values[permIndex] = innerX.Datum valuesParams[permIndex] = innerX default: @@ -547,8 +565,14 @@ func newBatchPointGetPlan( } } case *driver.ValueExpr: + if !checkCanConvertInPointGet(colInfos[0], x.Datum) { + return nil + } values = []types.Datum{x.Datum} case *driver.ParamMarkerExpr: + if !checkCanConvertInPointGet(colInfos[0], x.Datum) { + return nil + } values = []types.Datum{x.Datum} valuesParams = []*driver.ParamMarkerExpr{x} default: @@ -964,6 +988,9 @@ func getNameValuePairs(stmtCtx *stmtctx.StatementContext, tbl *model.TableInfo, (col.Tp == mysql.TypeString && col.Collate == charset.CollationBin) { // This type we needn't to pad `\0` in here. return append(nvPairs, nameValuePair{colName: colName.Name.Name.L, value: d, param: param}), false } + if !checkCanConvertInPointGet(col, d) { + return nil, false + } dVal, err := d.ConvertTo(stmtCtx, &col.FieldType) if err != nil { if terror.ErrorEqual(types.ErrOverflow, err) { @@ -987,6 +1014,28 @@ func getNameValuePairs(stmtCtx *stmtctx.StatementContext, tbl *model.TableInfo, return nil, false } +func checkCanConvertInPointGet(col *model.ColumnInfo, d types.Datum) bool { + kind := d.Kind() + switch col.FieldType.EvalType() { + case ptypes.ETString: + switch kind { + case types.KindInt64, types.KindUint64, + types.KindFloat32, types.KindFloat64, types.KindMysqlDecimal: + // column type is String and constant type is numeric + return false + } + } + switch col.FieldType.Tp { + case mysql.TypeBit: + switch kind { + case types.KindString: + // column type is Bit and constant type is string + return false + } + } + return true +} + func findPKHandle(tblInfo *model.TableInfo, pairs []nameValuePair) (handlePair nameValuePair, fieldType *types.FieldType) { if !tblInfo.PKIsHandle { rowIDIdx := findInPairs("_tidb_rowid", pairs) diff --git a/planner/core/point_get_plan_test.go b/planner/core/point_get_plan_test.go index a92c9b43a5a7d..b6140f1ada2e7 100644 --- a/planner/core/point_get_plan_test.go +++ b/planner/core/point_get_plan_test.go @@ -470,6 +470,7 @@ func (s *testPointGetSuite) TestUpdateWithTableReadLockWillFail(c *C) { func (s *testPointGetSuite) TestSelectInMultiColumns(c *C) { tk := testkit.NewTestKit(c, s.store) tk.MustExec("use test") + tk.MustExec("drop table if exists t2") tk.MustExec("create table t2(a int, b int, c int, primary key(a, b, c));") tk.MustExec("insert into t2 values (1, 1, 1), (2, 2, 2), (3, 3, 3), (4, 4, 4)") tk.MustQuery("select * from t2 where (a, b, c) in ((1, 1, 1));").Check(testkit.Rows("1 1 1")) @@ -486,3 +487,38 @@ func (s *testPointGetSuite) TestSelectInMultiColumns(c *C) { c.Assert(err, NotNil) c.Assert(err.Error(), Equals, "[expression:1241]Operand should contain 3 column(s)") } + +func (s *testPointGetSuite) TestCBOShouldNotUsePointGet(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk.MustExec("drop tables if exists t1, t2, t3, t4, t5") + tk.MustExec("create table t1(id varchar(20) primary key)") + tk.MustExec("create table t2(id varchar(20), unique(id))") + tk.MustExec("create table t3(id varchar(20), d varchar(20), unique(id, d))") + tk.MustExec("create table t4(id int, d varchar(20), c varchar(20), unique(id, d))") + tk.MustExec("create table t5(id bit(64) primary key)") + tk.MustExec("insert into t1 values('asdf'), ('1asdf')") + tk.MustExec("insert into t2 values('asdf'), ('1asdf')") + tk.MustExec("insert into t3 values('asdf', 't'), ('1asdf', 't')") + tk.MustExec("insert into t4 values(1, 'b', 'asdf'), (1, 'c', 'jkl'), (1, 'd', '1jkl')") + tk.MustExec("insert into t5 values(48)") + + var input []string + var output []struct { + SQL string + Plan []string + Res []string + } + s.testData.GetTestCases(c, &input, &output) + for i, sql := range input { + plan := tk.MustQuery("explain " + sql) + res := tk.MustQuery(sql) + s.testData.OnRecord(func() { + output[i].SQL = sql + output[i].Plan = s.testData.ConvertRowsToStrings(plan.Rows()) + output[i].Res = s.testData.ConvertRowsToStrings(res.Rows()) + }) + plan.Check(testkit.Rows(output[i].Plan...)) + res.Check(testkit.Rows(output[i].Res...)) + } +} diff --git a/planner/core/testdata/point_get_plan_in.json b/planner/core/testdata/point_get_plan_in.json index 44fa5efa4eacd..5b8e22abeb8c5 100644 --- a/planner/core/testdata/point_get_plan_in.json +++ b/planner/core/testdata/point_get_plan_in.json @@ -9,5 +9,22 @@ "select * from t t1 join t t2 on t1.a = t2.a where t1.a = '4' and (t2.b, t2.c) in ((1,1),(2,2))", "select * from t where (t.b, t.c) in ((2,2), (3,3), (4,4)) order by t.b, t.c" ] + }, + { + "name": "TestCBOShouldNotUsePointGet", + "cases": [ + "select * from t1 where id = 0", + "select * from t1 where id = x'00'", + "select * from t1 where id = b'00'", + "select * from t1 where id = 0.0", + "select * from t1 where id = 1.0", + "select * from t1 where id in (0, 1)", + "select * from t2 where id = 0", + "select * from t2 where id in (0, 1)", + "select * from t3 where (id, d) in ((0, 't'), (1, 't'))", + "select * from t4 where (id, d, c) in ((1, 'b', 0))", + "select * from t4 where (id, d, c) in ((1, 0, 0))", + "select * from t5 where id in ('0')" + ] } ] diff --git a/planner/core/testdata/point_get_plan_out.json b/planner/core/testdata/point_get_plan_out.json index 0dbb22d749104..7691d0ad2ddf9 100644 --- a/planner/core/testdata/point_get_plan_out.json +++ b/planner/core/testdata/point_get_plan_out.json @@ -67,5 +67,137 @@ ] } ] + }, + { + "Name": "TestCBOShouldNotUsePointGet", + "Cases": [ + { + "SQL": "select * from t1 where id = 0", + "Plan": [ + "IndexReader_10 8000.00 root index:Selection_9", + "└─Selection_9 8000.00 cop[tikv] eq(cast(test.t1.id), 0)", + " └─IndexFullScan_8 10000.00 cop[tikv] table:t1, index:PRIMARY(id) keep order:false, stats:pseudo" + ], + "Res": [ + "asdf" + ] + }, + { + "SQL": "select * from t1 where id = x'00'", + "Plan": [ + "Point_Get_1 1.00 root table:t1, index:PRIMARY(id) " + ], + "Res": [] + }, + { + "SQL": "select * from t1 where id = b'00'", + "Plan": [ + "Point_Get_1 1.00 root table:t1, index:PRIMARY(id) " + ], + "Res": [] + }, + { + "SQL": "select * from t1 where id = 0.0", + "Plan": [ + "IndexReader_10 8000.00 root index:Selection_9", + "└─Selection_9 8000.00 cop[tikv] eq(cast(test.t1.id), 0)", + " └─IndexFullScan_8 10000.00 cop[tikv] table:t1, index:PRIMARY(id) keep order:false, stats:pseudo" + ], + "Res": [ + "asdf" + ] + }, + { + "SQL": "select * from t1 where id = 1.0", + "Plan": [ + "IndexReader_10 8000.00 root index:Selection_9", + "└─Selection_9 8000.00 cop[tikv] eq(cast(test.t1.id), 1)", + " └─IndexFullScan_8 10000.00 cop[tikv] table:t1, index:PRIMARY(id) keep order:false, stats:pseudo" + ], + "Res": [ + "1asdf" + ] + }, + { + "SQL": "select * from t1 where id in (0, 1)", + "Plan": [ + "IndexReader_10 8000.00 root index:Selection_9", + "└─Selection_9 8000.00 cop[tikv] or(eq(cast(test.t1.id), 0), eq(cast(test.t1.id), 1))", + " └─IndexFullScan_8 10000.00 cop[tikv] table:t1, index:PRIMARY(id) keep order:false, stats:pseudo" + ], + "Res": [ + "1asdf", + "asdf" + ] + }, + { + "SQL": "select * from t2 where id = 0", + "Plan": [ + "IndexReader_10 8000.00 root index:Selection_9", + "└─Selection_9 8000.00 cop[tikv] eq(cast(test.t2.id), 0)", + " └─IndexFullScan_8 10000.00 cop[tikv] table:t2, index:id(id) keep order:false, stats:pseudo" + ], + "Res": [ + "asdf" + ] + }, + { + "SQL": "select * from t2 where id in (0, 1)", + "Plan": [ + "IndexReader_10 8000.00 root index:Selection_9", + "└─Selection_9 8000.00 cop[tikv] or(eq(cast(test.t2.id), 0), eq(cast(test.t2.id), 1))", + " └─IndexFullScan_8 10000.00 cop[tikv] table:t2, index:id(id) keep order:false, stats:pseudo" + ], + "Res": [ + "1asdf", + "asdf" + ] + }, + { + "SQL": "select * from t3 where (id, d) in ((0, 't'), (1, 't'))", + "Plan": [ + "IndexReader_10 8000.00 root index:Selection_9", + "└─Selection_9 8000.00 cop[tikv] or(and(eq(cast(test.t3.id), 0), eq(test.t3.d, \"t\")), and(eq(cast(test.t3.id), 1), eq(test.t3.d, \"t\")))", + " └─IndexFullScan_8 10000.00 cop[tikv] table:t3, index:id(id, d) keep order:false, stats:pseudo" + ], + "Res": [ + "1asdf t", + "asdf t" + ] + }, + { + "SQL": "select * from t4 where (id, d, c) in ((1, 'b', 0))", + "Plan": [ + "Selection_6 0.80 root eq(cast(test.t4.c), 0)", + "└─Point_Get_5 1.00 root table:t4, index:id(id, d) " + ], + "Res": [ + "1 b asdf" + ] + }, + { + "SQL": "select * from t4 where (id, d, c) in ((1, 0, 0))", + "Plan": [ + "IndexLookUp_12 8.00 root ", + "├─Selection_10(Build) 8.00 cop[tikv] eq(cast(test.t4.d), 0)", + "│ └─IndexRangeScan_8 10.00 cop[tikv] table:t4, index:id(id, d) range:[1,1], keep order:false, stats:pseudo", + "└─Selection_11(Probe) 8.00 cop[tikv] eq(cast(test.t4.c), 0)", + " └─TableRowIDScan_9 8.00 cop[tikv] table:t4 keep order:false, stats:pseudo" + ], + "Res": [ + "1 b asdf", + "1 c jkl" + ] + }, + { + "SQL": "select * from t5 where id in ('0')", + "Plan": [ + "Selection_5 8000.00 root eq(test.t5.id, 0)", + "└─IndexReader_9 10000.00 root index:IndexFullScan_8", + " └─IndexFullScan_8 10000.00 cop[tikv] table:t5, index:PRIMARY(id) keep order:false, stats:pseudo" + ], + "Res": [] + } + ] } ] From f921f19f431bd840708c68a4da76a52300e2f56f Mon Sep 17 00:00:00 2001 From: tangenta Date: Wed, 25 Nov 2020 18:09:39 +0800 Subject: [PATCH 157/229] executor: fix auto-id allocation during statements retry (#20659) (#21079) --- errors.toml | 5 - executor/insert_common.go | 134 ++++++++++---------------- executor/seqtest/seq_executor_test.go | 46 +++++++++ sessionctx/variable/error.go | 2 - sessionctx/variable/session.go | 10 +- 5 files changed, 102 insertions(+), 95 deletions(-) diff --git a/errors.toml b/errors.toml index 5179b4ac48a1d..402c3c85ce207 100644 --- a/errors.toml +++ b/errors.toml @@ -1401,11 +1401,6 @@ error = ''' The isolation level '%s' is not supported. Set tidb_skip_isolation_level_check=1 to skip this error ''' -["variable:8054"] -error = ''' -cannot set variable to null -''' - ["variable:8055"] error = ''' snapshot is older than GC safe point %s diff --git a/executor/insert_common.go b/executor/insert_common.go index a10c461b75c72..3e2a592e2e8dc 100644 --- a/executor/insert_common.go +++ b/executor/insert_common.go @@ -30,6 +30,7 @@ import ( "github.com/pingcap/tidb/expression" "github.com/pingcap/tidb/kv" "github.com/pingcap/tidb/meta/autoid" + "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/store/tikv" "github.com/pingcap/tidb/table" "github.com/pingcap/tidb/table/tables" @@ -622,41 +623,20 @@ func (e *InsertValues) isAutoNull(ctx context.Context, d types.Datum, col *table return false } -func (e *InsertValues) hasAutoIncrementColumn() (int, bool) { - colIdx := -1 - for i, c := range e.Table.Cols() { +func findAutoIncrementColumn(t table.Table) (col *table.Column, offsetInRow int, found bool) { + for i, c := range t.Cols() { if mysql.HasAutoIncrementFlag(c.Flag) { - colIdx = i - break + return c, i, true } } - return colIdx, colIdx != -1 + return nil, -1, false } -func (e *InsertValues) lazyAdjustAutoIncrementDatumInRetry(ctx context.Context, rows [][]types.Datum, colIdx int) ([][]types.Datum, error) { - // Get the autoIncrement column. - col := e.Table.Cols()[colIdx] - // Consider the colIdx of autoIncrement in row are the same. - length := len(rows) - for i := 0; i < length; i++ { - autoDatum := rows[i][colIdx] - - // autoID can be found in RetryInfo. - retryInfo := e.ctx.GetSessionVars().RetryInfo - if retryInfo.Retrying { - id, err := retryInfo.GetCurrAutoIncrementID() - if err != nil { - return nil, err - } - autoDatum.SetAutoID(id, col.Flag) - - if autoDatum, err = col.HandleBadNull(autoDatum, e.ctx.GetSessionVars().StmtCtx); err != nil { - return nil, err - } - rows[i][colIdx] = autoDatum - } - } - return rows, nil +func setDatumAutoIDAndCast(ctx sessionctx.Context, d *types.Datum, id int64, col *table.Column) error { + d.SetAutoID(id, col.Flag) + var err error + *d, err = table.CastValue(ctx, *d, col.ToInfo(), false, false) + return err } // lazyAdjustAutoIncrementDatum is quite similar to adjustAutoIncrementDatum @@ -666,22 +646,14 @@ func (e *InsertValues) lazyAdjustAutoIncrementDatum(ctx context.Context, rows [] if !e.lazyFillAutoID { return rows, nil } - // No autoIncrement column means no need to fill. - colIdx, ok := e.hasAutoIncrementColumn() - if !ok { + col, idx, found := findAutoIncrementColumn(e.Table) + if !found { return rows, nil } - // autoID can be found in RetryInfo. retryInfo := e.ctx.GetSessionVars().RetryInfo - if retryInfo.Retrying { - return e.lazyAdjustAutoIncrementDatumInRetry(ctx, rows, colIdx) - } - // Get the autoIncrement column. - col := e.Table.Cols()[colIdx] - // Consider the colIdx of autoIncrement in row are the same. - length := len(rows) - for i := 0; i < length; i++ { - autoDatum := rows[i][colIdx] + rowCount := len(rows) + for processedIdx := 0; processedIdx < rowCount; processedIdx++ { + autoDatum := rows[processedIdx][idx] var err error var recordID int64 @@ -699,18 +671,32 @@ func (e *InsertValues) lazyAdjustAutoIncrementDatum(ctx context.Context, rows [] } e.ctx.GetSessionVars().StmtCtx.InsertID = uint64(recordID) retryInfo.AddAutoIncrementID(recordID) - rows[i][colIdx] = autoDatum continue } // Change NULL to auto id. // Change value 0 to auto id, if NoAutoValueOnZero SQL mode is not set. if autoDatum.IsNull() || e.ctx.GetSessionVars().SQLMode&mysql.ModeNoAutoValueOnZero == 0 { + // Consume the auto IDs in RetryInfo first. + for retryInfo.Retrying && processedIdx < rowCount { + nextID, ok := retryInfo.GetCurrAutoIncrementID() + if !ok { + break + } + err = setDatumAutoIDAndCast(e.ctx, &rows[processedIdx][idx], nextID, col) + if err != nil { + return nil, err + } + processedIdx++ + if processedIdx == rowCount { + return rows, nil + } + } // Find consecutive num. - start := i + start := processedIdx cnt := 1 - for i+1 < length && e.isAutoNull(ctx, rows[i+1][colIdx], col) { - i++ + for processedIdx+1 < rowCount && e.isAutoNull(ctx, rows[processedIdx+1][idx], col) { + processedIdx++ cnt++ } // AllocBatchAutoIncrementValue allocates batch N consecutive autoIDs. @@ -727,31 +713,21 @@ func (e *InsertValues) lazyAdjustAutoIncrementDatum(ctx context.Context, rows [] // Assign autoIDs to rows. for j := 0; j < cnt; j++ { offset := j + start - d := rows[offset][colIdx] - id := int64(uint64(min) + uint64(j)*uint64(increment)) - d.SetAutoID(id, col.Flag) - retryInfo.AddAutoIncrementID(id) - - // The value of d is adjusted by auto ID, so we need to cast it again. - d, err := table.CastValue(e.ctx, d, col.ToInfo(), false, false) + err = setDatumAutoIDAndCast(e.ctx, &rows[offset][idx], id, col) if err != nil { return nil, err } - rows[offset][colIdx] = d + retryInfo.AddAutoIncrementID(id) } continue } - autoDatum.SetAutoID(recordID, col.Flag) - retryInfo.AddAutoIncrementID(recordID) - - // the value of d is adjusted by auto ID, so we need to cast it again. - autoDatum, err = table.CastValue(e.ctx, autoDatum, col.ToInfo(), false, false) + err = setDatumAutoIDAndCast(e.ctx, &rows[processedIdx][idx], recordID, col) if err != nil { return nil, err } - rows[i][colIdx] = autoDatum + retryInfo.AddAutoIncrementID(recordID) } return rows, nil } @@ -759,12 +735,11 @@ func (e *InsertValues) lazyAdjustAutoIncrementDatum(ctx context.Context, rows [] func (e *InsertValues) adjustAutoIncrementDatum(ctx context.Context, d types.Datum, hasValue bool, c *table.Column) (types.Datum, error) { retryInfo := e.ctx.GetSessionVars().RetryInfo if retryInfo.Retrying { - id, err := retryInfo.GetCurrAutoIncrementID() - if err != nil { - return types.Datum{}, err + id, ok := retryInfo.GetCurrAutoIncrementID() + if ok { + d.SetAutoID(id, c.Flag) + return d, nil } - d.SetAutoID(id, c.Flag) - return d, nil } var err error @@ -803,20 +778,16 @@ func (e *InsertValues) adjustAutoIncrementDatum(ctx context.Context, d types.Dat } } - d.SetAutoID(recordID, c.Flag) - retryInfo.AddAutoIncrementID(recordID) - - // the value of d is adjusted by auto ID, so we need to cast it again. - casted, err := table.CastValue(e.ctx, d, c.ToInfo(), false, false) + err = setDatumAutoIDAndCast(e.ctx, &d, recordID, c) if err != nil { return types.Datum{}, err } - return casted, nil + retryInfo.AddAutoIncrementID(recordID) + return d, nil } func getAutoRecordID(d types.Datum, target *types.FieldType, isInsert bool) (int64, error) { var recordID int64 - switch target.Tp { case mysql.TypeFloat, mysql.TypeDouble: f := d.GetFloat64() @@ -837,12 +808,11 @@ func getAutoRecordID(d types.Datum, target *types.FieldType, isInsert bool) (int func (e *InsertValues) adjustAutoRandomDatum(ctx context.Context, d types.Datum, hasValue bool, c *table.Column) (types.Datum, error) { retryInfo := e.ctx.GetSessionVars().RetryInfo if retryInfo.Retrying { - autoRandomID, err := retryInfo.GetCurrAutoRandomID() - if err != nil { - return types.Datum{}, err + autoRandomID, ok := retryInfo.GetCurrAutoRandomID() + if ok { + d.SetAutoID(autoRandomID, c.Flag) + return d, nil } - d.SetAutoID(autoRandomID, c.Flag) - return d, nil } var err error @@ -889,14 +859,12 @@ func (e *InsertValues) adjustAutoRandomDatum(ctx context.Context, d types.Datum, } } - d.SetAutoID(recordID, c.Flag) - retryInfo.AddAutoRandomID(recordID) - - casted, err := table.CastValue(e.ctx, d, c.ToInfo(), false, false) + err = setDatumAutoIDAndCast(e.ctx, &d, recordID, c) if err != nil { return types.Datum{}, err } - return casted, nil + retryInfo.AddAutoRandomID(recordID) + return d, nil } // allocAutoRandomID allocates a random id for primary key column. It assumes tableInfo.AutoRandomBits > 0. diff --git a/executor/seqtest/seq_executor_test.go b/executor/seqtest/seq_executor_test.go index 32b4798369aa2..46cffc1a895b5 100644 --- a/executor/seqtest/seq_executor_test.go +++ b/executor/seqtest/seq_executor_test.go @@ -1315,6 +1315,52 @@ func (s *seqTestSuite) TestPessimisticConflictRetryAutoID(c *C) { } } +func (s *seqTestSuite) TestInsertFromSelectConflictRetryAutoID(c *C) { + tk := testkit.NewTestKitWithInit(c, s.store) + tk.MustExec("drop table if exists t;") + tk.MustExec("create table t (id int not null auto_increment unique key, idx int unique key, c int);") + tk.MustExec("create table src (a int);") + concurrency := 2 + var wg sync.WaitGroup + var err []error + wgCount := concurrency + 1 + wg.Add(wgCount) + err = make([]error, concurrency) + for i := 0; i < concurrency; i++ { + tk := testkit.NewTestKitWithInit(c, s.store) + go func(idx int) { + for i := 0; i < 10; i++ { + sql := fmt.Sprintf("insert into t(idx, c) select 1 as idx, 1 as c from src on duplicate key update c = %[1]d", i) + _, e := tk.Exec(sql) + if e != nil { + err[idx] = e + wg.Done() + return + } + } + wg.Done() + }(i) + } + var insertErr error + go func() { + tk := testkit.NewTestKitWithInit(c, s.store) + for i := 0; i < 10; i++ { + _, e := tk.Exec("insert into src values (null);") + if e != nil { + insertErr = e + wg.Done() + return + } + } + wg.Done() + }() + wg.Wait() + for _, e := range err { + c.Assert(e, IsNil) + } + c.Assert(insertErr, IsNil) +} + func (s *seqTestSuite) TestAutoRandIDRetry(c *C) { tk := testkit.NewTestKitWithInit(c, s.store) diff --git a/sessionctx/variable/error.go b/sessionctx/variable/error.go index b6a5bf2901def..b9c21782e5be2 100644 --- a/sessionctx/variable/error.go +++ b/sessionctx/variable/error.go @@ -20,9 +20,7 @@ import ( // Error instances. var ( - errCantGetValidID = dbterror.ClassVariable.NewStd(mysql.ErrCantGetValidID) errWarnDeprecatedSyntax = dbterror.ClassVariable.NewStd(mysql.ErrWarnDeprecatedSyntax) - ErrCantSetToNull = dbterror.ClassVariable.NewStd(mysql.ErrCantSetToNull) ErrSnapshotTooOld = dbterror.ClassVariable.NewStd(mysql.ErrSnapshotTooOld) ErrUnsupportedValueForVar = dbterror.ClassVariable.NewStd(mysql.ErrUnsupportedValueForVar) ErrUnknownSystemVar = dbterror.ClassVariable.NewStd(mysql.ErrUnknownSystemVariable) diff --git a/sessionctx/variable/session.go b/sessionctx/variable/session.go index f35c392c8af70..04a0298b8d280 100644 --- a/sessionctx/variable/session.go +++ b/sessionctx/variable/session.go @@ -82,7 +82,7 @@ func (r *RetryInfo) AddAutoIncrementID(id int64) { } // GetCurrAutoIncrementID gets current autoIncrementID. -func (r *RetryInfo) GetCurrAutoIncrementID() (int64, error) { +func (r *RetryInfo) GetCurrAutoIncrementID() (int64, bool) { return r.autoIncrementIDs.getCurrent() } @@ -92,7 +92,7 @@ func (r *RetryInfo) AddAutoRandomID(id int64) { } // GetCurrAutoRandomID gets current AutoRandomID. -func (r *RetryInfo) GetCurrAutoRandomID() (int64, error) { +func (r *RetryInfo) GetCurrAutoRandomID() (int64, bool) { return r.autoRandomIDs.getCurrent() } @@ -112,13 +112,13 @@ func (r *retryInfoAutoIDs) clean() { } } -func (r *retryInfoAutoIDs) getCurrent() (int64, error) { +func (r *retryInfoAutoIDs) getCurrent() (int64, bool) { if r.currentOffset >= len(r.autoIDs) { - return 0, errCantGetValidID + return 0, false } id := r.autoIDs[r.currentOffset] r.currentOffset++ - return id, nil + return id, true } // stmtFuture is used to async get timestamp for statement. From abed326c9e2af4535e808781c4ca313aae399335 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Wed, 25 Nov 2020 18:27:19 +0800 Subject: [PATCH 158/229] planner: ban (index) merge join heuristically when convert eq cond to other cond (#21138) (#21146) Signed-off-by: ti-srebot --- cmd/explaintest/r/explain_complex.result | 58 ++-- .../r/explain_complex_stats.result | 26 +- cmd/explaintest/r/explain_easy.result | 12 +- cmd/explaintest/r/explain_easy_stats.result | 12 +- cmd/explaintest/r/explain_join_stats.result | 30 +- cmd/explaintest/r/explain_union_scan.result | 26 +- cmd/explaintest/r/generated_columns.result | 30 +- cmd/explaintest/r/index_join.result | 40 +-- cmd/explaintest/r/topn_push_down.result | 58 ++-- cmd/explaintest/r/tpch.result | 286 +++++++++--------- executor/join_test.go | 28 +- planner/core/exhaust_physical_plans.go | 65 ++-- planner/core/explain.go | 19 +- planner/core/testdata/analyze_suite_out.json | 20 +- .../integration_serial_suite_out.json | 64 ++-- .../core/testdata/integration_suite_out.json | 60 ++-- planner/core/testdata/plan_suite_out.json | 2 +- 17 files changed, 422 insertions(+), 414 deletions(-) diff --git a/cmd/explaintest/r/explain_complex.result b/cmd/explaintest/r/explain_complex.result index fb5f570e3ef1a..3836967ee7bee 100644 --- a/cmd/explaintest/r/explain_complex.result +++ b/cmd/explaintest/r/explain_complex.result @@ -118,24 +118,24 @@ id estRows task access object operator info Projection_13 1.00 root test.st.id, test.dd.id, test.st.aid, test.st.cm, test.dd.dic, test.dd.ip, test.dd.t, test.st.p1, test.st.p2, test.st.p3, test.st.p4, test.st.p5, test.st.p6_md5, test.st.p7_md5, test.st.ext, test.st.t └─Limit_16 1.00 root offset:0, count:2500 └─HashAgg_19 1.00 root group by:test.dd.dic, test.st.aid, funcs:firstrow(test.st.id)->test.st.id, funcs:firstrow(test.st.aid)->test.st.aid, funcs:firstrow(test.st.cm)->test.st.cm, funcs:firstrow(test.st.p1)->test.st.p1, funcs:firstrow(test.st.p2)->test.st.p2, funcs:firstrow(test.st.p3)->test.st.p3, funcs:firstrow(test.st.p4)->test.st.p4, funcs:firstrow(test.st.p5)->test.st.p5, funcs:firstrow(test.st.p6_md5)->test.st.p6_md5, funcs:firstrow(test.st.p7_md5)->test.st.p7_md5, funcs:firstrow(test.st.ext)->test.st.ext, funcs:firstrow(test.st.t)->test.st.t, funcs:firstrow(test.dd.id)->test.dd.id, funcs:firstrow(test.dd.dic)->test.dd.dic, funcs:firstrow(test.dd.ip)->test.dd.ip, funcs:firstrow(test.dd.t)->test.dd.t - └─HashJoin_30 0.00 root inner join, equal:[eq(test.dd.aid, test.st.aid) eq(test.dd.ip, test.st.ip)], other cond:gt(test.dd.t, test.st.t) - ├─IndexLookUp_48(Build) 0.00 root - │ ├─IndexRangeScan_45(Build) 3333.33 cop[tikv] table:dd, index:t(t) range:(1478143908,+inf], keep order:false, stats:pseudo - │ └─Selection_47(Probe) 0.00 cop[tikv] eq(test.dd.bm, 0), eq(test.dd.pt, "android"), not(isnull(test.dd.ip)) - │ └─TableRowIDScan_46 3333.33 cop[tikv] table:dd keep order:false, stats:pseudo - └─IndexLookUp_37(Probe) 3.33 root - ├─IndexRangeScan_34(Build) 3333.33 cop[tikv] table:gad, index:t(t) range:(1478143908,+inf], keep order:false, stats:pseudo - └─Selection_36(Probe) 3.33 cop[tikv] eq(test.st.pt, "android"), not(isnull(test.st.ip)) - └─TableRowIDScan_35 3333.33 cop[tikv] table:gad keep order:false, stats:pseudo + └─HashJoin_28 0.00 root inner join, equal:[eq(test.dd.aid, test.st.aid) eq(test.dd.ip, test.st.ip)], other cond:gt(test.dd.t, test.st.t) + ├─IndexLookUp_46(Build) 0.00 root + │ ├─IndexRangeScan_43(Build) 3333.33 cop[tikv] table:dd, index:t(t) range:(1478143908,+inf], keep order:false, stats:pseudo + │ └─Selection_45(Probe) 0.00 cop[tikv] eq(test.dd.bm, 0), eq(test.dd.pt, "android"), not(isnull(test.dd.ip)) + │ └─TableRowIDScan_44 3333.33 cop[tikv] table:dd keep order:false, stats:pseudo + └─IndexLookUp_35(Probe) 3.33 root + ├─IndexRangeScan_32(Build) 3333.33 cop[tikv] table:gad, index:t(t) range:(1478143908,+inf], keep order:false, stats:pseudo + └─Selection_34(Probe) 3.33 cop[tikv] eq(test.st.pt, "android"), not(isnull(test.st.ip)) + └─TableRowIDScan_33 3333.33 cop[tikv] table:gad keep order:false, stats:pseudo explain select gad.id as gid,sdk.id as sid,gad.aid as aid,gad.cm as cm,sdk.dic as dic,sdk.ip as ip, sdk.t as t, gad.p1 as p1, gad.p2 as p2, gad.p3 as p3, gad.p4 as p4, gad.p5 as p5, gad.p6_md5 as p6, gad.p7_md5 as p7, gad.ext as ext from st gad join dd sdk on gad.aid = sdk.aid and gad.dic = sdk.mac and gad.t < sdk.t where gad.t > 1477971479 and gad.bm = 0 and gad.pt = 'ios' and gad.dit = 'mac' and sdk.t > 1477971479 and sdk.bm = 0 and sdk.pt = 'ios' limit 3000; id estRows task access object operator info Projection_10 0.00 root test.st.id, test.dd.id, test.st.aid, test.st.cm, test.dd.dic, test.dd.ip, test.dd.t, test.st.p1, test.st.p2, test.st.p3, test.st.p4, test.st.p5, test.st.p6_md5, test.st.p7_md5, test.st.ext └─Limit_13 0.00 root offset:0, count:3000 └─IndexJoin_18 0.00 root inner join, inner:IndexLookUp_17, outer key:test.st.aid, inner key:test.dd.aid, equal cond:eq(test.st.aid, test.dd.aid), eq(test.st.dic, test.dd.mac), other cond:lt(test.st.t, test.dd.t) - ├─IndexLookUp_31(Build) 0.00 root - │ ├─IndexRangeScan_28(Build) 3333.33 cop[tikv] table:gad, index:t(t) range:(1477971479,+inf], keep order:false, stats:pseudo - │ └─Selection_30(Probe) 0.00 cop[tikv] eq(test.st.bm, 0), eq(test.st.dit, "mac"), eq(test.st.pt, "ios"), not(isnull(test.st.dic)) - │ └─TableRowIDScan_29 3333.33 cop[tikv] table:gad keep order:false, stats:pseudo + ├─IndexLookUp_29(Build) 0.00 root + │ ├─IndexRangeScan_26(Build) 3333.33 cop[tikv] table:gad, index:t(t) range:(1477971479,+inf], keep order:false, stats:pseudo + │ └─Selection_28(Probe) 0.00 cop[tikv] eq(test.st.bm, 0), eq(test.st.dit, "mac"), eq(test.st.pt, "ios"), not(isnull(test.st.dic)) + │ └─TableRowIDScan_27 3333.33 cop[tikv] table:gad keep order:false, stats:pseudo └─IndexLookUp_17(Probe) 0.00 root ├─IndexRangeScan_14(Build) 10000.00 cop[tikv] table:sdk, index:aid(aid, dic) range: decided by [eq(test.dd.aid, test.st.aid)], keep order:false, stats:pseudo └─Selection_16(Probe) 0.00 cop[tikv] eq(test.dd.bm, 0), eq(test.dd.pt, "ios"), gt(test.dd.t, 1477971479), not(isnull(test.dd.mac)), not(isnull(test.dd.t)) @@ -152,15 +152,15 @@ explain select dt.id as id, dt.aid as aid, dt.pt as pt, dt.dic as dic, dt.cm as id estRows task access object operator info Projection_10 0.00 root test.dt.id, test.dt.aid, test.dt.pt, test.dt.dic, test.dt.cm, test.rr.gid, test.rr.acd, test.rr.t, test.dt.p1, test.dt.p2, test.dt.p3, test.dt.p4, test.dt.p5, test.dt.p6_md5, test.dt.p7_md5 └─Limit_13 0.00 root offset:0, count:2000 - └─IndexJoin_29 0.00 root inner join, inner:IndexLookUp_28, outer key:test.rr.aid, test.rr.dic, inner key:test.dt.aid, test.dt.dic, equal cond:eq(test.rr.aid, test.dt.aid), eq(test.rr.dic, test.dt.dic) - ├─TableReader_51(Build) 3.33 root data:Selection_50 - │ └─Selection_50 3.33 cop[tikv] eq(test.rr.pt, "ios"), gt(test.rr.t, 1478185592) - │ └─TableFullScan_49 10000.00 cop[tikv] table:rr keep order:false, stats:pseudo - └─IndexLookUp_28(Probe) 0.00 root - ├─Selection_26(Build) 1.00 cop[tikv] not(isnull(test.dt.dic)) - │ └─IndexRangeScan_24 1.00 cop[tikv] table:dt, index:aid(aid, dic) range: decided by [eq(test.dt.aid, test.rr.aid) eq(test.dt.dic, test.rr.dic)], keep order:false, stats:pseudo - └─Selection_27(Probe) 0.00 cop[tikv] eq(test.dt.bm, 0), eq(test.dt.pt, "ios"), gt(test.dt.t, 1478185592) - └─TableRowIDScan_25 1.00 cop[tikv] table:dt keep order:false, stats:pseudo + └─IndexJoin_27 0.00 root inner join, inner:IndexLookUp_26, outer key:test.rr.aid, test.rr.dic, inner key:test.dt.aid, test.dt.dic, equal cond:eq(test.rr.aid, test.dt.aid), eq(test.rr.dic, test.dt.dic) + ├─TableReader_47(Build) 3.33 root data:Selection_46 + │ └─Selection_46 3.33 cop[tikv] eq(test.rr.pt, "ios"), gt(test.rr.t, 1478185592) + │ └─TableFullScan_45 10000.00 cop[tikv] table:rr keep order:false, stats:pseudo + └─IndexLookUp_26(Probe) 0.00 root + ├─Selection_24(Build) 1.00 cop[tikv] not(isnull(test.dt.dic)) + │ └─IndexRangeScan_22 1.00 cop[tikv] table:dt, index:aid(aid, dic) range: decided by [eq(test.dt.aid, test.rr.aid) eq(test.dt.dic, test.rr.dic)], keep order:false, stats:pseudo + └─Selection_25(Probe) 0.00 cop[tikv] eq(test.dt.bm, 0), eq(test.dt.pt, "ios"), gt(test.dt.t, 1478185592) + └─TableRowIDScan_23 1.00 cop[tikv] table:dt keep order:false, stats:pseudo explain select pc,cr,count(DISTINCT uid) as pay_users,count(oid) as pay_times,sum(am) as am from pp where ps=2 and ppt>=1478188800 and ppt<1478275200 and pi in ('510017','520017') and uid in ('18089709','18090780') group by pc,cr; id estRows task access object operator info Projection_5 1.00 root test.pp.pc, test.pp.cr, Column#22, Column#23, Column#24 @@ -248,15 +248,15 @@ Sort_10 1.00 root test.org_department.left_value:asc └─Selection_22 0.01 root or(eq(test.org_employee_position.user_id, 62), or(eq(test.org_department.id, 20), eq(test.org_department.id, 20))) └─HashJoin_24 0.02 root left outer join, equal:[eq(test.org_position.id, test.org_employee_position.position_id)] ├─IndexJoin_33(Build) 0.01 root left outer join, inner:IndexLookUp_32, outer key:test.org_department.id, inner key:test.org_position.department_id, equal cond:eq(test.org_department.id, test.org_position.department_id) - │ ├─IndexLookUp_57(Build) 0.01 root - │ │ ├─IndexRangeScan_54(Build) 10.00 cop[tikv] table:d, index:org_department_ctx_index(ctx) range:[1,1], keep order:false, stats:pseudo - │ │ └─Selection_56(Probe) 0.01 cop[tikv] eq(test.org_department.status, 1000) - │ │ └─TableRowIDScan_55 10.00 cop[tikv] table:d keep order:false, stats:pseudo + │ ├─IndexLookUp_55(Build) 0.01 root + │ │ ├─IndexRangeScan_52(Build) 10.00 cop[tikv] table:d, index:org_department_ctx_index(ctx) range:[1,1], keep order:false, stats:pseudo + │ │ └─Selection_54(Probe) 0.01 cop[tikv] eq(test.org_department.status, 1000) + │ │ └─TableRowIDScan_53 10.00 cop[tikv] table:d keep order:false, stats:pseudo │ └─IndexLookUp_32(Probe) 1.25 root │ ├─Selection_30(Build) 1250.00 cop[tikv] not(isnull(test.org_position.department_id)) │ │ └─IndexRangeScan_28 1251.25 cop[tikv] table:p, index:org_position_department_id_index(department_id) range: decided by [eq(test.org_position.department_id, test.org_department.id)], keep order:false, stats:pseudo │ └─Selection_31(Probe) 1.25 cop[tikv] eq(test.org_position.status, 1000) │ └─TableRowIDScan_29 1250.00 cop[tikv] table:p keep order:false, stats:pseudo - └─TableReader_67(Probe) 9.99 root data:Selection_66 - └─Selection_66 9.99 cop[tikv] eq(test.org_employee_position.status, 1000), not(isnull(test.org_employee_position.position_id)) - └─TableFullScan_65 10000.00 cop[tikv] table:ep keep order:false, stats:pseudo + └─TableReader_65(Probe) 9.99 root data:Selection_64 + └─Selection_64 9.99 cop[tikv] eq(test.org_employee_position.status, 1000), not(isnull(test.org_employee_position.position_id)) + └─TableFullScan_63 10000.00 cop[tikv] table:ep keep order:false, stats:pseudo diff --git a/cmd/explaintest/r/explain_complex_stats.result b/cmd/explaintest/r/explain_complex_stats.result index 228f27a75e463..cd3a6185c2643 100644 --- a/cmd/explaintest/r/explain_complex_stats.result +++ b/cmd/explaintest/r/explain_complex_stats.result @@ -128,21 +128,21 @@ id estRows task access object operator info Projection_13 424.00 root test.st.id, test.dd.id, test.st.aid, test.st.cm, test.dd.dic, test.dd.ip, test.dd.t, test.st.p1, test.st.p2, test.st.p3, test.st.p4, test.st.p5, test.st.p6_md5, test.st.p7_md5, test.st.ext, test.st.t └─Limit_16 424.00 root offset:0, count:2500 └─HashAgg_19 424.00 root group by:test.dd.dic, test.st.aid, funcs:firstrow(test.st.id)->test.st.id, funcs:firstrow(test.st.aid)->test.st.aid, funcs:firstrow(test.st.cm)->test.st.cm, funcs:firstrow(test.st.p1)->test.st.p1, funcs:firstrow(test.st.p2)->test.st.p2, funcs:firstrow(test.st.p3)->test.st.p3, funcs:firstrow(test.st.p4)->test.st.p4, funcs:firstrow(test.st.p5)->test.st.p5, funcs:firstrow(test.st.p6_md5)->test.st.p6_md5, funcs:firstrow(test.st.p7_md5)->test.st.p7_md5, funcs:firstrow(test.st.ext)->test.st.ext, funcs:firstrow(test.st.t)->test.st.t, funcs:firstrow(test.dd.id)->test.dd.id, funcs:firstrow(test.dd.dic)->test.dd.dic, funcs:firstrow(test.dd.ip)->test.dd.ip, funcs:firstrow(test.dd.t)->test.dd.t - └─HashJoin_30 424.00 root inner join, equal:[eq(test.st.aid, test.dd.aid) eq(test.st.ip, test.dd.ip)], other cond:gt(test.dd.t, test.st.t) - ├─TableReader_33(Build) 424.00 root data:Selection_32 - │ └─Selection_32 424.00 cop[tikv] eq(test.st.bm, 0), eq(test.st.pt, "android"), gt(test.st.t, 1478143908), not(isnull(test.st.ip)) - │ └─TableRangeScan_31 1999.00 cop[tikv] table:gad range:[0,+inf], keep order:false - └─TableReader_40(Probe) 455.80 root data:Selection_39 - └─Selection_39 455.80 cop[tikv] eq(test.dd.bm, 0), eq(test.dd.pt, "android"), gt(test.dd.t, 1478143908), not(isnull(test.dd.ip)), not(isnull(test.dd.t)) - └─TableRangeScan_38 2000.00 cop[tikv] table:dd range:[0,+inf], keep order:false + └─HashJoin_28 424.00 root inner join, equal:[eq(test.st.aid, test.dd.aid) eq(test.st.ip, test.dd.ip)], other cond:gt(test.dd.t, test.st.t) + ├─TableReader_31(Build) 424.00 root data:Selection_30 + │ └─Selection_30 424.00 cop[tikv] eq(test.st.bm, 0), eq(test.st.pt, "android"), gt(test.st.t, 1478143908), not(isnull(test.st.ip)) + │ └─TableRangeScan_29 1999.00 cop[tikv] table:gad range:[0,+inf], keep order:false + └─TableReader_38(Probe) 455.80 root data:Selection_37 + └─Selection_37 455.80 cop[tikv] eq(test.dd.bm, 0), eq(test.dd.pt, "android"), gt(test.dd.t, 1478143908), not(isnull(test.dd.ip)), not(isnull(test.dd.t)) + └─TableRangeScan_36 2000.00 cop[tikv] table:dd range:[0,+inf], keep order:false explain select gad.id as gid,sdk.id as sid,gad.aid as aid,gad.cm as cm,sdk.dic as dic,sdk.ip as ip, sdk.t as t, gad.p1 as p1, gad.p2 as p2, gad.p3 as p3, gad.p4 as p4, gad.p5 as p5, gad.p6_md5 as p6, gad.p7_md5 as p7, gad.ext as ext from st gad join dd sdk on gad.aid = sdk.aid and gad.dic = sdk.mac and gad.t < sdk.t where gad.t > 1477971479 and gad.bm = 0 and gad.pt = 'ios' and gad.dit = 'mac' and sdk.t > 1477971479 and sdk.bm = 0 and sdk.pt = 'ios' limit 3000; id estRows task access object operator info Projection_10 170.34 root test.st.id, test.dd.id, test.st.aid, test.st.cm, test.dd.dic, test.dd.ip, test.dd.t, test.st.p1, test.st.p2, test.st.p3, test.st.p4, test.st.p5, test.st.p6_md5, test.st.p7_md5, test.st.ext └─Limit_13 170.34 root offset:0, count:3000 └─IndexJoin_18 170.34 root inner join, inner:IndexLookUp_17, outer key:test.st.aid, inner key:test.dd.aid, equal cond:eq(test.st.aid, test.dd.aid), eq(test.st.dic, test.dd.mac), other cond:lt(test.st.t, test.dd.t) - ├─TableReader_27(Build) 170.34 root data:Selection_26 - │ └─Selection_26 170.34 cop[tikv] eq(test.st.bm, 0), eq(test.st.dit, "mac"), eq(test.st.pt, "ios"), gt(test.st.t, 1477971479), not(isnull(test.st.dic)) - │ └─TableRangeScan_25 1999.00 cop[tikv] table:gad range:[0,+inf], keep order:false + ├─TableReader_25(Build) 170.34 root data:Selection_24 + │ └─Selection_24 170.34 cop[tikv] eq(test.st.bm, 0), eq(test.st.dit, "mac"), eq(test.st.pt, "ios"), gt(test.st.t, 1477971479), not(isnull(test.st.dic)) + │ └─TableRangeScan_23 1999.00 cop[tikv] table:gad range:[0,+inf], keep order:false └─IndexLookUp_17(Probe) 1.00 root ├─IndexRangeScan_14(Build) 3.93 cop[tikv] table:sdk, index:aid(aid, dic) range: decided by [eq(test.dd.aid, test.st.aid)], keep order:false └─Selection_16(Probe) 1.00 cop[tikv] eq(test.dd.bm, 0), eq(test.dd.pt, "ios"), gt(test.dd.t, 1477971479), not(isnull(test.dd.mac)), not(isnull(test.dd.t)) @@ -160,9 +160,9 @@ id estRows task access object operator info Projection_10 428.32 root test.dt.id, test.dt.aid, test.dt.pt, test.dt.dic, test.dt.cm, test.rr.gid, test.rr.acd, test.rr.t, test.dt.p1, test.dt.p2, test.dt.p3, test.dt.p4, test.dt.p5, test.dt.p6_md5, test.dt.p7_md5 └─Limit_13 428.32 root offset:0, count:2000 └─IndexJoin_19 428.32 root inner join, inner:IndexLookUp_18, outer key:test.dt.aid, test.dt.dic, inner key:test.rr.aid, test.rr.dic, equal cond:eq(test.dt.aid, test.rr.aid), eq(test.dt.dic, test.rr.dic) - ├─TableReader_48(Build) 428.32 root data:Selection_47 - │ └─Selection_47 428.32 cop[tikv] eq(test.dt.bm, 0), eq(test.dt.pt, "ios"), gt(test.dt.t, 1478185592), not(isnull(test.dt.dic)) - │ └─TableRangeScan_46 2000.00 cop[tikv] table:dt range:[0,+inf], keep order:false + ├─TableReader_44(Build) 428.32 root data:Selection_43 + │ └─Selection_43 428.32 cop[tikv] eq(test.dt.bm, 0), eq(test.dt.pt, "ios"), gt(test.dt.t, 1478185592), not(isnull(test.dt.dic)) + │ └─TableRangeScan_42 2000.00 cop[tikv] table:dt range:[0,+inf], keep order:false └─IndexLookUp_18(Probe) 1.00 root ├─IndexRangeScan_15(Build) 1.00 cop[tikv] table:rr, index:PRIMARY(aid, dic) range: decided by [eq(test.rr.aid, test.dt.aid) eq(test.rr.dic, test.dt.dic)], keep order:false └─Selection_17(Probe) 1.00 cop[tikv] eq(test.rr.pt, "ios"), gt(test.rr.t, 1478185592) diff --git a/cmd/explaintest/r/explain_easy.result b/cmd/explaintest/r/explain_easy.result index cdd794b43209c..f2970e9916ab2 100644 --- a/cmd/explaintest/r/explain_easy.result +++ b/cmd/explaintest/r/explain_easy.result @@ -45,12 +45,12 @@ IndexReader_6 10.00 root index:IndexRangeScan_5 └─IndexRangeScan_5 10.00 cop[tikv] table:t1, index:c2(c2) range:[1,1], keep order:false, stats:pseudo explain select * from t1 left join t2 on t1.c2 = t2.c1 where t1.c1 > 1; id estRows task access object operator info -HashJoin_18 4166.67 root left outer join, equal:[eq(test.t1.c2, test.t2.c1)] -├─TableReader_28(Build) 3333.33 root data:TableRangeScan_27 -│ └─TableRangeScan_27 3333.33 cop[tikv] table:t1 range:(1,+inf], keep order:false, stats:pseudo -└─TableReader_31(Probe) 9990.00 root data:Selection_30 - └─Selection_30 9990.00 cop[tikv] not(isnull(test.t2.c1)) - └─TableFullScan_29 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo +HashJoin_16 4166.67 root left outer join, equal:[eq(test.t1.c2, test.t2.c1)] +├─TableReader_26(Build) 3333.33 root data:TableRangeScan_25 +│ └─TableRangeScan_25 3333.33 cop[tikv] table:t1 range:(1,+inf], keep order:false, stats:pseudo +└─TableReader_29(Probe) 9990.00 root data:Selection_28 + └─Selection_28 9990.00 cop[tikv] not(isnull(test.t2.c1)) + └─TableFullScan_27 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo explain update t1 set t1.c2 = 2 where t1.c1 = 1; id estRows task access object operator info Update_2 N/A root N/A diff --git a/cmd/explaintest/r/explain_easy_stats.result b/cmd/explaintest/r/explain_easy_stats.result index d57664e65e998..f401a70299640 100644 --- a/cmd/explaintest/r/explain_easy_stats.result +++ b/cmd/explaintest/r/explain_easy_stats.result @@ -46,12 +46,12 @@ IndexReader_6 0.00 root index:IndexRangeScan_5 └─IndexRangeScan_5 0.00 cop[tikv] table:t1, index:c2(c2) range:[1,1], keep order:false explain select * from t1 left join t2 on t1.c2 = t2.c1 where t1.c1 > 1; id estRows task access object operator info -HashJoin_17 2481.25 root left outer join, equal:[eq(test.t1.c2, test.t2.c1)] -├─TableReader_31(Build) 1985.00 root data:Selection_30 -│ └─Selection_30 1985.00 cop[tikv] not(isnull(test.t2.c1)) -│ └─TableFullScan_29 1985.00 cop[tikv] table:t2 keep order:false -└─TableReader_28(Probe) 1998.00 root data:TableRangeScan_27 - └─TableRangeScan_27 1998.00 cop[tikv] table:t1 range:(1,+inf], keep order:false +HashJoin_15 2481.25 root left outer join, equal:[eq(test.t1.c2, test.t2.c1)] +├─TableReader_29(Build) 1985.00 root data:Selection_28 +│ └─Selection_28 1985.00 cop[tikv] not(isnull(test.t2.c1)) +│ └─TableFullScan_27 1985.00 cop[tikv] table:t2 keep order:false +└─TableReader_26(Probe) 1998.00 root data:TableRangeScan_25 + └─TableRangeScan_25 1998.00 cop[tikv] table:t1 range:(1,+inf], keep order:false explain update t1 set t1.c2 = 2 where t1.c1 = 1; id estRows task access object operator info Update_2 N/A root N/A diff --git a/cmd/explaintest/r/explain_join_stats.result b/cmd/explaintest/r/explain_join_stats.result index 86a0ee83e2167..ef8ed1090603f 100644 --- a/cmd/explaintest/r/explain_join_stats.result +++ b/cmd/explaintest/r/explain_join_stats.result @@ -7,21 +7,21 @@ load stats 's/explain_join_stats_lo.json'; explain select count(*) from e, lo where lo.a=e.a and e.b=22336; id estRows task access object operator info StreamAgg_13 1.00 root funcs:count(1)->Column#5 -└─HashJoin_69 19977.00 root inner join, equal:[eq(test.lo.a, test.e.a)] - ├─TableReader_40(Build) 250.00 root data:TableFullScan_39 - │ └─TableFullScan_39 250.00 cop[tikv] table:lo keep order:false - └─IndexLookUp_51(Probe) 19977.00 root - ├─IndexRangeScan_48(Build) 19977.00 cop[tikv] table:e, index:idx_b(b) range:[22336,22336], keep order:false - └─Selection_50(Probe) 19977.00 cop[tikv] not(isnull(test.e.a)) - └─TableRowIDScan_49 19977.00 cop[tikv] table:e keep order:false +└─HashJoin_65 19977.00 root inner join, equal:[eq(test.lo.a, test.e.a)] + ├─TableReader_38(Build) 250.00 root data:TableFullScan_37 + │ └─TableFullScan_37 250.00 cop[tikv] table:lo keep order:false + └─IndexLookUp_49(Probe) 19977.00 root + ├─IndexRangeScan_46(Build) 19977.00 cop[tikv] table:e, index:idx_b(b) range:[22336,22336], keep order:false + └─Selection_48(Probe) 19977.00 cop[tikv] not(isnull(test.e.a)) + └─TableRowIDScan_47 19977.00 cop[tikv] table:e keep order:false explain select /*+ TIDB_INLJ(e) */ count(*) from e, lo where lo.a=e.a and e.b=22336; id estRows task access object operator info StreamAgg_12 1.00 root funcs:count(1)->Column#5 -└─IndexJoin_42 19977.00 root inner join, inner:IndexLookUp_41, outer key:test.lo.a, inner key:test.e.a, equal cond:eq(test.lo.a, test.e.a) - ├─TableReader_30(Build) 250.00 root data:TableFullScan_29 - │ └─TableFullScan_29 250.00 cop[tikv] table:lo keep order:false - └─IndexLookUp_41(Probe) 79.91 root - ├─Selection_39(Build) 4080.00 cop[tikv] not(isnull(test.e.a)) - │ └─IndexRangeScan_37 4080.00 cop[tikv] table:e, index:idx_a(a) range: decided by [eq(test.e.a, test.lo.a)], keep order:false - └─Selection_40(Probe) 79.91 cop[tikv] eq(test.e.b, 22336) - └─TableRowIDScan_38 4080.00 cop[tikv] table:e keep order:false +└─IndexJoin_40 19977.00 root inner join, inner:IndexLookUp_39, outer key:test.lo.a, inner key:test.e.a, equal cond:eq(test.lo.a, test.e.a) + ├─TableReader_28(Build) 250.00 root data:TableFullScan_27 + │ └─TableFullScan_27 250.00 cop[tikv] table:lo keep order:false + └─IndexLookUp_39(Probe) 79.91 root + ├─Selection_37(Build) 4080.00 cop[tikv] not(isnull(test.e.a)) + │ └─IndexRangeScan_35 4080.00 cop[tikv] table:e, index:idx_a(a) range: decided by [eq(test.e.a, test.lo.a)], keep order:false + └─Selection_38(Probe) 79.91 cop[tikv] eq(test.e.b, 22336) + └─TableRowIDScan_36 4080.00 cop[tikv] table:e keep order:false diff --git a/cmd/explaintest/r/explain_union_scan.result b/cmd/explaintest/r/explain_union_scan.result index c46c00489bc43..edd9d414f6fcb 100644 --- a/cmd/explaintest/r/explain_union_scan.result +++ b/cmd/explaintest/r/explain_union_scan.result @@ -15,17 +15,17 @@ id estRows task access object operator info Limit_20 10.00 root offset:0, count:10 └─HashJoin_22 10.00 root left outer join, equal:[eq(test.city.province_id, test.city.province_id)] ├─Limit_25(Build) 10.00 root offset:0, count:10 - │ └─IndexJoin_40 10.00 root inner join, inner:UnionScan_39, outer key:test.city.id, inner key:test.city.id, equal cond:eq(test.city.id, test.city.id) - │ ├─UnionScan_51(Build) 10.00 root - │ │ └─TableReader_53 10.00 root data:TableFullScan_52 - │ │ └─TableFullScan_52 10.00 cop[tikv] table:t2 keep order:false - │ └─UnionScan_39(Probe) 1.00 root gt(test.city.province_id, 1), lt(test.city.province_id, 100) - │ └─IndexLookUp_38 1.00 root - │ ├─IndexRangeScan_35(Build) 1.00 cop[tikv] table:t1, index:PRIMARY(id) range: decided by [eq(test.city.id, test.city.id)], keep order:false - │ └─Selection_37(Probe) 1.00 cop[tikv] gt(test.city.province_id, 1), lt(test.city.province_id, 100) - │ └─TableRowIDScan_36 1.00 cop[tikv] table:t1 keep order:false - └─UnionScan_61(Probe) 536284.00 root gt(test.city.province_id, 1), lt(test.city.province_id, 100), not(isnull(test.city.province_id)) - └─TableReader_64 536284.00 root data:Selection_63 - └─Selection_63 536284.00 cop[tikv] gt(test.city.province_id, 1), lt(test.city.province_id, 100), not(isnull(test.city.province_id)) - └─TableFullScan_62 536284.00 cop[tikv] table:t3 keep order:false + │ └─IndexJoin_38 10.00 root inner join, inner:UnionScan_37, outer key:test.city.id, inner key:test.city.id, equal cond:eq(test.city.id, test.city.id) + │ ├─UnionScan_47(Build) 10.00 root + │ │ └─TableReader_49 10.00 root data:TableFullScan_48 + │ │ └─TableFullScan_48 10.00 cop[tikv] table:t2 keep order:false + │ └─UnionScan_37(Probe) 1.00 root gt(test.city.province_id, 1), lt(test.city.province_id, 100) + │ └─IndexLookUp_36 1.00 root + │ ├─IndexRangeScan_33(Build) 1.00 cop[tikv] table:t1, index:PRIMARY(id) range: decided by [eq(test.city.id, test.city.id)], keep order:false + │ └─Selection_35(Probe) 1.00 cop[tikv] gt(test.city.province_id, 1), lt(test.city.province_id, 100) + │ └─TableRowIDScan_34 1.00 cop[tikv] table:t1 keep order:false + └─UnionScan_57(Probe) 536284.00 root gt(test.city.province_id, 1), lt(test.city.province_id, 100), not(isnull(test.city.province_id)) + └─TableReader_60 536284.00 root data:Selection_59 + └─Selection_59 536284.00 cop[tikv] gt(test.city.province_id, 1), lt(test.city.province_id, 100), not(isnull(test.city.province_id)) + └─TableFullScan_58 536284.00 cop[tikv] table:t3 keep order:false commit; diff --git a/cmd/explaintest/r/generated_columns.result b/cmd/explaintest/r/generated_columns.result index 839e392fd406b..17c408b72d77c 100644 --- a/cmd/explaintest/r/generated_columns.result +++ b/cmd/explaintest/r/generated_columns.result @@ -71,24 +71,24 @@ VALUES ('{"a": 1}', '{"1": "1"}'); ANALYZE TABLE sgc1, sgc2; EXPLAIN SELECT /*+ TIDB_INLJ(sgc1, sgc2) */ * from sgc1 join sgc2 on sgc1.a=sgc2.a; id estRows task access object operator info -IndexJoin_21 5.00 root inner join, inner:IndexLookUp_20, outer key:test.sgc2.a, inner key:test.sgc1.a, equal cond:eq(test.sgc2.a, test.sgc1.a) -├─TableReader_37(Build) 1.00 root data:Selection_36 -│ └─Selection_36 1.00 cop[tikv] not(isnull(test.sgc2.a)) -│ └─TableFullScan_35 1.00 cop[tikv] table:sgc2 keep order:false -└─IndexLookUp_20(Probe) 5.00 root - ├─Selection_19(Build) 5.00 cop[tikv] not(isnull(test.sgc1.a)) - │ └─IndexRangeScan_17 5.00 cop[tikv] table:sgc1, index:idx_a(a) range: decided by [eq(test.sgc1.a, test.sgc2.a)], keep order:false - └─TableRowIDScan_18(Probe) 5.00 cop[tikv] table:sgc1 keep order:false +IndexJoin_19 5.00 root inner join, inner:IndexLookUp_18, outer key:test.sgc2.a, inner key:test.sgc1.a, equal cond:eq(test.sgc2.a, test.sgc1.a) +├─TableReader_33(Build) 1.00 root data:Selection_32 +│ └─Selection_32 1.00 cop[tikv] not(isnull(test.sgc2.a)) +│ └─TableFullScan_31 1.00 cop[tikv] table:sgc2 keep order:false +└─IndexLookUp_18(Probe) 5.00 root + ├─Selection_17(Build) 5.00 cop[tikv] not(isnull(test.sgc1.a)) + │ └─IndexRangeScan_15 5.00 cop[tikv] table:sgc1, index:idx_a(a) range: decided by [eq(test.sgc1.a, test.sgc2.a)], keep order:false + └─TableRowIDScan_16(Probe) 5.00 cop[tikv] table:sgc1 keep order:false EXPLAIN SELECT * from sgc1 join sgc2 on sgc1.a=sgc2.a; id estRows task access object operator info Projection_6 5.00 root test.sgc1.j1, test.sgc1.j2, test.sgc1.a, test.sgc1.b, test.sgc2.j1, test.sgc2.j2, test.sgc2.a, test.sgc2.b -└─HashJoin_28 5.00 root inner join, equal:[eq(test.sgc2.a, test.sgc1.a)] - ├─TableReader_47(Build) 1.00 root data:Selection_46 - │ └─Selection_46 1.00 cop[tikv] not(isnull(test.sgc2.a)) - │ └─TableFullScan_45 1.00 cop[tikv] table:sgc2 keep order:false - └─TableReader_56(Probe) 5.00 root data:Selection_55 - └─Selection_55 5.00 cop[tikv] not(isnull(test.sgc1.a)) - └─TableFullScan_54 5.00 cop[tikv] table:sgc1 keep order:false +└─HashJoin_24 5.00 root inner join, equal:[eq(test.sgc2.a, test.sgc1.a)] + ├─TableReader_43(Build) 1.00 root data:Selection_42 + │ └─Selection_42 1.00 cop[tikv] not(isnull(test.sgc2.a)) + │ └─TableFullScan_41 1.00 cop[tikv] table:sgc2 keep order:false + └─TableReader_52(Probe) 5.00 root data:Selection_51 + └─Selection_51 5.00 cop[tikv] not(isnull(test.sgc1.a)) + └─TableFullScan_50 5.00 cop[tikv] table:sgc1 keep order:false DROP TABLE IF EXISTS sgc3; CREATE TABLE sgc3 ( j JSON, diff --git a/cmd/explaintest/r/index_join.result b/cmd/explaintest/r/index_join.result index 8a60d8a398dec..d72be062a7def 100644 --- a/cmd/explaintest/r/index_join.result +++ b/cmd/explaintest/r/index_join.result @@ -8,24 +8,24 @@ set session tidb_hashagg_partial_concurrency = 1; set session tidb_hashagg_final_concurrency = 1; explain select /*+ TIDB_INLJ(t1, t2) */ * from t1 join t2 on t1.a=t2.a; id estRows task access object operator info -IndexJoin_20 5.00 root inner join, inner:IndexLookUp_19, outer key:test.t2.a, inner key:test.t1.a, equal cond:eq(test.t2.a, test.t1.a) -├─TableReader_33(Build) 1.00 root data:Selection_32 -│ └─Selection_32 1.00 cop[tikv] not(isnull(test.t2.a)) -│ └─TableFullScan_31 1.00 cop[tikv] table:t2 keep order:false -└─IndexLookUp_19(Probe) 5.00 root - ├─Selection_18(Build) 5.00 cop[tikv] not(isnull(test.t1.a)) - │ └─IndexRangeScan_16 5.00 cop[tikv] table:t1, index:idx(a) range: decided by [eq(test.t1.a, test.t2.a)], keep order:false - └─TableRowIDScan_17(Probe) 5.00 cop[tikv] table:t1 keep order:false +IndexJoin_18 5.00 root inner join, inner:IndexLookUp_17, outer key:test.t2.a, inner key:test.t1.a, equal cond:eq(test.t2.a, test.t1.a) +├─TableReader_29(Build) 1.00 root data:Selection_28 +│ └─Selection_28 1.00 cop[tikv] not(isnull(test.t2.a)) +│ └─TableFullScan_27 1.00 cop[tikv] table:t2 keep order:false +└─IndexLookUp_17(Probe) 5.00 root + ├─Selection_16(Build) 5.00 cop[tikv] not(isnull(test.t1.a)) + │ └─IndexRangeScan_14 5.00 cop[tikv] table:t1, index:idx(a) range: decided by [eq(test.t1.a, test.t2.a)], keep order:false + └─TableRowIDScan_15(Probe) 5.00 cop[tikv] table:t1 keep order:false explain select * from t1 join t2 on t1.a=t2.a; id estRows task access object operator info Projection_6 5.00 root test.t1.a, test.t1.b, test.t2.a, test.t2.b -└─HashJoin_27 5.00 root inner join, equal:[eq(test.t2.a, test.t1.a)] - ├─TableReader_38(Build) 1.00 root data:Selection_37 - │ └─Selection_37 1.00 cop[tikv] not(isnull(test.t2.a)) - │ └─TableFullScan_36 1.00 cop[tikv] table:t2 keep order:false - └─TableReader_44(Probe) 5.00 root data:Selection_43 - └─Selection_43 5.00 cop[tikv] not(isnull(test.t1.a)) - └─TableFullScan_42 5.00 cop[tikv] table:t1 keep order:false +└─HashJoin_23 5.00 root inner join, equal:[eq(test.t2.a, test.t1.a)] + ├─TableReader_34(Build) 1.00 root data:Selection_33 + │ └─Selection_33 1.00 cop[tikv] not(isnull(test.t2.a)) + │ └─TableFullScan_32 1.00 cop[tikv] table:t2 keep order:false + └─TableReader_40(Probe) 5.00 root data:Selection_39 + └─Selection_39 5.00 cop[tikv] not(isnull(test.t1.a)) + └─TableFullScan_38 5.00 cop[tikv] table:t1 keep order:false drop table if exists t1, t2; create table t1(a int not null, b int not null); create table t2(a int not null, b int not null, key a(a)); @@ -33,8 +33,8 @@ set @@tidb_opt_insubq_to_join_and_agg=0; explain select /*+ TIDB_INLJ(t2@sel_2) */ * from t1 where t1.a in (select t2.a from t2); id estRows task access object operator info IndexJoin_10 8000.00 root semi join, inner:IndexReader_9, outer key:test.t1.a, inner key:test.t2.a, equal cond:eq(test.t1.a, test.t2.a) -├─TableReader_16(Build) 10000.00 root data:TableFullScan_15 -│ └─TableFullScan_15 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo +├─TableReader_14(Build) 10000.00 root data:TableFullScan_13 +│ └─TableFullScan_13 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo └─IndexReader_9(Probe) 1.25 root index:IndexRangeScan_8 └─IndexRangeScan_8 1.25 cop[tikv] table:t2, index:a(a) range: decided by [eq(test.t2.a, test.t1.a)], keep order:false, stats:pseudo show warnings; @@ -46,9 +46,9 @@ create table t2(a int not null, b int not null, key a(a)); explain select /*+ TIDB_INLJ(t1) */ * from t1 where t1.a in (select t2.a from t2); id estRows task access object operator info IndexJoin_13 10000.00 root inner join, inner:IndexLookUp_12, outer key:test.t2.a, inner key:test.t1.a, equal cond:eq(test.t2.a, test.t1.a) -├─StreamAgg_22(Build) 8000.00 root group by:test.t2.a, funcs:firstrow(test.t2.a)->test.t2.a -│ └─IndexReader_35 10000.00 root index:IndexFullScan_34 -│ └─IndexFullScan_34 10000.00 cop[tikv] table:t2, index:a(a) keep order:true, stats:pseudo +├─StreamAgg_20(Build) 8000.00 root group by:test.t2.a, funcs:firstrow(test.t2.a)->test.t2.a +│ └─IndexReader_33 10000.00 root index:IndexFullScan_32 +│ └─IndexFullScan_32 10000.00 cop[tikv] table:t2, index:a(a) keep order:true, stats:pseudo └─IndexLookUp_12(Probe) 1.25 root ├─IndexRangeScan_10(Build) 1.25 cop[tikv] table:t1, index:a(a) range: decided by [eq(test.t1.a, test.t2.a)], keep order:false, stats:pseudo └─TableRowIDScan_11(Probe) 1.25 cop[tikv] table:t1 keep order:false, stats:pseudo diff --git a/cmd/explaintest/r/topn_push_down.result b/cmd/explaintest/r/topn_push_down.result index 565deeae80935..2510dd77bd92d 100644 --- a/cmd/explaintest/r/topn_push_down.result +++ b/cmd/explaintest/r/topn_push_down.result @@ -168,21 +168,21 @@ ORDER BY te.expect_time asc LIMIT 0, 5; id estRows task access object operator info Limit_19 0.00 root offset:0, count:5 -└─IndexJoin_101 0.00 root left outer join, inner:IndexReader_100, outer key:test.tr.id, inner key:test.p.relate_id, equal cond:eq(test.tr.id, test.p.relate_id) - ├─TopN_108(Build) 0.00 root test.te.expect_time:asc, offset:0, count:5 - │ └─IndexJoin_41 0.00 root inner join, inner:IndexLookUp_40, outer key:test.tr.id, inner key:test.te.trade_id, equal cond:eq(test.tr.id, test.te.trade_id) - │ ├─IndexLookUp_85(Build) 0.00 root - │ │ ├─Selection_83(Build) 0.00 cop[tikv] eq(test.tr.business_type, 18), eq(test.tr.trade_type, 1) - │ │ │ └─IndexRangeScan_81 10.00 cop[tikv] table:tr, index:idx_shop_identy_trade_status_business_type(shop_identy, trade_status, business_type, trade_pay_status, trade_type, delivery_type, source, biz_date) range:[810094178,810094178], keep order:false, stats:pseudo - │ │ └─Selection_84(Probe) 0.00 cop[tikv] eq(test.tr.brand_identy, 32314), eq(test.tr.domain_type, 2) - │ │ └─TableRowIDScan_82 0.00 cop[tikv] table:tr keep order:false, stats:pseudo - │ └─IndexLookUp_40(Probe) 1.25 root - │ ├─IndexRangeScan_37(Build) 50.00 cop[tikv] table:te, index:idx_trade_id(trade_id) range: decided by [eq(test.te.trade_id, test.tr.id)], keep order:false, stats:pseudo - │ └─Selection_39(Probe) 1.25 cop[tikv] ge(test.te.expect_time, 2018-04-23 00:00:00.000000), le(test.te.expect_time, 2018-04-23 23:59:59.000000) - │ └─TableRowIDScan_38 50.00 cop[tikv] table:te keep order:false, stats:pseudo - └─IndexReader_100(Probe) 1.25 root index:Selection_99 - └─Selection_99 1.25 cop[tikv] not(isnull(test.p.relate_id)) - └─IndexRangeScan_98 1.25 cop[tikv] table:p, index:payment_relate_id(relate_id) range: decided by [eq(test.p.relate_id, test.tr.id)], keep order:false, stats:pseudo +└─IndexJoin_97 0.00 root left outer join, inner:IndexReader_96, outer key:test.tr.id, inner key:test.p.relate_id, equal cond:eq(test.tr.id, test.p.relate_id) + ├─TopN_102(Build) 0.00 root test.te.expect_time:asc, offset:0, count:5 + │ └─IndexJoin_39 0.00 root inner join, inner:IndexLookUp_38, outer key:test.tr.id, inner key:test.te.trade_id, equal cond:eq(test.tr.id, test.te.trade_id) + │ ├─IndexLookUp_81(Build) 0.00 root + │ │ ├─Selection_79(Build) 0.00 cop[tikv] eq(test.tr.business_type, 18), eq(test.tr.trade_type, 1) + │ │ │ └─IndexRangeScan_77 10.00 cop[tikv] table:tr, index:idx_shop_identy_trade_status_business_type(shop_identy, trade_status, business_type, trade_pay_status, trade_type, delivery_type, source, biz_date) range:[810094178,810094178], keep order:false, stats:pseudo + │ │ └─Selection_80(Probe) 0.00 cop[tikv] eq(test.tr.brand_identy, 32314), eq(test.tr.domain_type, 2) + │ │ └─TableRowIDScan_78 0.00 cop[tikv] table:tr keep order:false, stats:pseudo + │ └─IndexLookUp_38(Probe) 1.25 root + │ ├─IndexRangeScan_35(Build) 50.00 cop[tikv] table:te, index:idx_trade_id(trade_id) range: decided by [eq(test.te.trade_id, test.tr.id)], keep order:false, stats:pseudo + │ └─Selection_37(Probe) 1.25 cop[tikv] ge(test.te.expect_time, 2018-04-23 00:00:00.000000), le(test.te.expect_time, 2018-04-23 23:59:59.000000) + │ └─TableRowIDScan_36 50.00 cop[tikv] table:te keep order:false, stats:pseudo + └─IndexReader_96(Probe) 1.25 root index:Selection_95 + └─Selection_95 1.25 cop[tikv] not(isnull(test.p.relate_id)) + └─IndexRangeScan_94 1.25 cop[tikv] table:p, index:payment_relate_id(relate_id) range: decided by [eq(test.p.relate_id, test.tr.id)], keep order:false, stats:pseudo desc select 1 as a from dual order by a limit 1; id estRows task access object operator info Projection_6 1.00 root 1->Column#1 @@ -222,8 +222,8 @@ explain select /*+ TIDB_INLJ(t2) */ * from t t1 join t t2 on t1.a = t2.a limit 5 id estRows task access object operator info Limit_11 5.00 root offset:0, count:5 └─IndexJoin_15 5.00 root inner join, inner:IndexReader_14, outer key:test.t.a, inner key:test.t.a, equal cond:eq(test.t.a, test.t.a) - ├─TableReader_21(Build) 4.00 root data:TableFullScan_20 - │ └─TableFullScan_20 4.00 cop[tikv] table:t1 keep order:false, stats:pseudo + ├─TableReader_19(Build) 4.00 root data:TableFullScan_18 + │ └─TableFullScan_18 4.00 cop[tikv] table:t1 keep order:false, stats:pseudo └─IndexReader_14(Probe) 1.25 root index:IndexRangeScan_13 └─IndexRangeScan_13 1.25 cop[tikv] table:t2, index:idx(a) range: decided by [eq(test.t.a, test.t.a)], keep order:false, stats:pseudo explain select /*+ TIDB_INLJ(t2) */ * from t t1 left join t t2 on t1.a = t2.a where t2.a is null limit 5; @@ -231,8 +231,8 @@ id estRows task access object operator info Limit_12 5.00 root offset:0, count:5 └─Selection_13 5.00 root isnull(test.t.a) └─IndexJoin_17 5.00 root left outer join, inner:IndexReader_16, outer key:test.t.a, inner key:test.t.a, equal cond:eq(test.t.a, test.t.a) - ├─TableReader_23(Build) 4.00 root data:TableFullScan_22 - │ └─TableFullScan_22 4.00 cop[tikv] table:t1 keep order:false, stats:pseudo + ├─TableReader_21(Build) 4.00 root data:TableFullScan_20 + │ └─TableFullScan_20 4.00 cop[tikv] table:t1 keep order:false, stats:pseudo └─IndexReader_16(Probe) 1.25 root index:IndexRangeScan_15 └─IndexRangeScan_15 1.25 cop[tikv] table:t2, index:idx(a) range: decided by [eq(test.t.a, test.t.a)], keep order:false, stats:pseudo explain select /*+ TIDB_SMJ(t1, t2) */ * from t t1 join t t2 on t1.a = t2.a limit 5; @@ -255,17 +255,17 @@ Limit_12 5.00 root offset:0, count:5 explain select /*+ TIDB_HJ(t1, t2) */ * from t t1 join t t2 on t1.a = t2.a limit 5; id estRows task access object operator info Limit_11 5.00 root offset:0, count:5 -└─HashJoin_27 5.00 root inner join, equal:[eq(test.t.a, test.t.a)] - ├─TableReader_34(Build) 10000.00 root data:TableFullScan_33 - │ └─TableFullScan_33 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo - └─TableReader_30(Probe) 4.00 root data:TableFullScan_29 - └─TableFullScan_29 4.00 cop[tikv] table:t1 keep order:false, stats:pseudo +└─HashJoin_23 5.00 root inner join, equal:[eq(test.t.a, test.t.a)] + ├─TableReader_30(Build) 10000.00 root data:TableFullScan_29 + │ └─TableFullScan_29 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo + └─TableReader_26(Probe) 4.00 root data:TableFullScan_25 + └─TableFullScan_25 4.00 cop[tikv] table:t1 keep order:false, stats:pseudo explain select /*+ TIDB_HJ(t1, t2) */ * from t t1 left join t t2 on t1.a = t2.a where t2.a is null limit 5; id estRows task access object operator info Limit_12 5.00 root offset:0, count:5 └─Selection_13 5.00 root isnull(test.t.a) - └─HashJoin_23 5.00 root left outer join, equal:[eq(test.t.a, test.t.a)] - ├─TableReader_25(Build) 4.00 root data:TableFullScan_24 - │ └─TableFullScan_24 4.00 cop[tikv] table:t1 keep order:false, stats:pseudo - └─TableReader_29(Probe) 10000.00 root data:TableFullScan_28 - └─TableFullScan_28 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo + └─HashJoin_21 5.00 root left outer join, equal:[eq(test.t.a, test.t.a)] + ├─TableReader_23(Build) 4.00 root data:TableFullScan_22 + │ └─TableFullScan_22 4.00 cop[tikv] table:t1 keep order:false, stats:pseudo + └─TableReader_27(Probe) 10000.00 root data:TableFullScan_26 + └─TableFullScan_26 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo diff --git a/cmd/explaintest/r/tpch.result b/cmd/explaintest/r/tpch.result index 314e66c2a22c1..231236d380b90 100644 --- a/cmd/explaintest/r/tpch.result +++ b/cmd/explaintest/r/tpch.result @@ -184,37 +184,37 @@ limit 100; id estRows task access object operator info Projection_37 100.00 root tpch.supplier.s_acctbal, tpch.supplier.s_name, tpch.nation.n_name, tpch.part.p_partkey, tpch.part.p_mfgr, tpch.supplier.s_address, tpch.supplier.s_phone, tpch.supplier.s_comment └─TopN_40 100.00 root tpch.supplier.s_acctbal:desc, tpch.nation.n_name:asc, tpch.supplier.s_name:asc, tpch.part.p_partkey:asc, offset:0, count:100 - └─HashJoin_46 155496.00 root inner join, equal:[eq(tpch.part.p_partkey, tpch.partsupp.ps_partkey) eq(tpch.partsupp.ps_supplycost, Column#50)] - ├─HashJoin_55(Build) 155496.00 root inner join, equal:[eq(tpch.partsupp.ps_partkey, tpch.part.p_partkey)] - │ ├─TableReader_80(Build) 155496.00 root data:Selection_79 - │ │ └─Selection_79 155496.00 cop[tikv] eq(tpch.part.p_size, 30), like(tpch.part.p_type, "%STEEL", 92) - │ │ └─TableFullScan_78 10000000.00 cop[tikv] table:part keep order:false - │ └─HashJoin_58(Probe) 8155010.44 root inner join, equal:[eq(tpch.supplier.s_suppkey, tpch.partsupp.ps_suppkey)] - │ ├─HashJoin_60(Build) 100000.00 root inner join, equal:[eq(tpch.nation.n_nationkey, tpch.supplier.s_nationkey)] - │ │ ├─HashJoin_68(Build) 5.00 root inner join, equal:[eq(tpch.region.r_regionkey, tpch.nation.n_regionkey)] - │ │ │ ├─TableReader_73(Build) 1.00 root data:Selection_72 - │ │ │ │ └─Selection_72 1.00 cop[tikv] eq(tpch.region.r_name, "ASIA") - │ │ │ │ └─TableFullScan_71 5.00 cop[tikv] table:region keep order:false - │ │ │ └─TableReader_70(Probe) 25.00 root data:TableFullScan_69 - │ │ │ └─TableFullScan_69 25.00 cop[tikv] table:nation keep order:false - │ │ └─TableReader_75(Probe) 500000.00 root data:TableFullScan_74 - │ │ └─TableFullScan_74 500000.00 cop[tikv] table:supplier keep order:false - │ └─TableReader_77(Probe) 40000000.00 root data:TableFullScan_76 - │ └─TableFullScan_76 40000000.00 cop[tikv] table:partsupp keep order:false - └─Selection_81(Probe) 6524008.35 root not(isnull(Column#50)) - └─HashAgg_84 8155010.44 root group by:tpch.partsupp.ps_partkey, funcs:min(tpch.partsupp.ps_supplycost)->Column#50, funcs:firstrow(tpch.partsupp.ps_partkey)->tpch.partsupp.ps_partkey - └─HashJoin_88 8155010.44 root inner join, equal:[eq(tpch.supplier.s_suppkey, tpch.partsupp.ps_suppkey)] - ├─HashJoin_90(Build) 100000.00 root inner join, equal:[eq(tpch.nation.n_nationkey, tpch.supplier.s_nationkey)] - │ ├─HashJoin_98(Build) 5.00 root inner join, equal:[eq(tpch.region.r_regionkey, tpch.nation.n_regionkey)] - │ │ ├─TableReader_103(Build) 1.00 root data:Selection_102 - │ │ │ └─Selection_102 1.00 cop[tikv] eq(tpch.region.r_name, "ASIA") - │ │ │ └─TableFullScan_101 5.00 cop[tikv] table:region keep order:false - │ │ └─TableReader_100(Probe) 25.00 root data:TableFullScan_99 - │ │ └─TableFullScan_99 25.00 cop[tikv] table:nation keep order:false - │ └─TableReader_105(Probe) 500000.00 root data:TableFullScan_104 - │ └─TableFullScan_104 500000.00 cop[tikv] table:supplier keep order:false - └─TableReader_107(Probe) 40000000.00 root data:TableFullScan_106 - └─TableFullScan_106 40000000.00 cop[tikv] table:partsupp keep order:false + └─HashJoin_45 155496.00 root inner join, equal:[eq(tpch.part.p_partkey, tpch.partsupp.ps_partkey) eq(tpch.partsupp.ps_supplycost, Column#50)] + ├─HashJoin_53(Build) 155496.00 root inner join, equal:[eq(tpch.partsupp.ps_partkey, tpch.part.p_partkey)] + │ ├─TableReader_78(Build) 155496.00 root data:Selection_77 + │ │ └─Selection_77 155496.00 cop[tikv] eq(tpch.part.p_size, 30), like(tpch.part.p_type, "%STEEL", 92) + │ │ └─TableFullScan_76 10000000.00 cop[tikv] table:part keep order:false + │ └─HashJoin_56(Probe) 8155010.44 root inner join, equal:[eq(tpch.supplier.s_suppkey, tpch.partsupp.ps_suppkey)] + │ ├─HashJoin_58(Build) 100000.00 root inner join, equal:[eq(tpch.nation.n_nationkey, tpch.supplier.s_nationkey)] + │ │ ├─HashJoin_66(Build) 5.00 root inner join, equal:[eq(tpch.region.r_regionkey, tpch.nation.n_regionkey)] + │ │ │ ├─TableReader_71(Build) 1.00 root data:Selection_70 + │ │ │ │ └─Selection_70 1.00 cop[tikv] eq(tpch.region.r_name, "ASIA") + │ │ │ │ └─TableFullScan_69 5.00 cop[tikv] table:region keep order:false + │ │ │ └─TableReader_68(Probe) 25.00 root data:TableFullScan_67 + │ │ │ └─TableFullScan_67 25.00 cop[tikv] table:nation keep order:false + │ │ └─TableReader_73(Probe) 500000.00 root data:TableFullScan_72 + │ │ └─TableFullScan_72 500000.00 cop[tikv] table:supplier keep order:false + │ └─TableReader_75(Probe) 40000000.00 root data:TableFullScan_74 + │ └─TableFullScan_74 40000000.00 cop[tikv] table:partsupp keep order:false + └─Selection_79(Probe) 6524008.35 root not(isnull(Column#50)) + └─HashAgg_82 8155010.44 root group by:tpch.partsupp.ps_partkey, funcs:min(tpch.partsupp.ps_supplycost)->Column#50, funcs:firstrow(tpch.partsupp.ps_partkey)->tpch.partsupp.ps_partkey + └─HashJoin_86 8155010.44 root inner join, equal:[eq(tpch.supplier.s_suppkey, tpch.partsupp.ps_suppkey)] + ├─HashJoin_88(Build) 100000.00 root inner join, equal:[eq(tpch.nation.n_nationkey, tpch.supplier.s_nationkey)] + │ ├─HashJoin_96(Build) 5.00 root inner join, equal:[eq(tpch.region.r_regionkey, tpch.nation.n_regionkey)] + │ │ ├─TableReader_101(Build) 1.00 root data:Selection_100 + │ │ │ └─Selection_100 1.00 cop[tikv] eq(tpch.region.r_name, "ASIA") + │ │ │ └─TableFullScan_99 5.00 cop[tikv] table:region keep order:false + │ │ └─TableReader_98(Probe) 25.00 root data:TableFullScan_97 + │ │ └─TableFullScan_97 25.00 cop[tikv] table:nation keep order:false + │ └─TableReader_103(Probe) 500000.00 root data:TableFullScan_102 + │ └─TableFullScan_102 500000.00 cop[tikv] table:supplier keep order:false + └─TableReader_105(Probe) 40000000.00 root data:TableFullScan_104 + └─TableFullScan_104 40000000.00 cop[tikv] table:partsupp keep order:false /* Q3 Shipping Priority Query This query retrieves the 10 unshipped orders with the highest value. @@ -252,18 +252,18 @@ id estRows task access object operator info Projection_14 10.00 root tpch.lineitem.l_orderkey, Column#35, tpch.orders.o_orderdate, tpch.orders.o_shippriority └─TopN_17 10.00 root Column#35:desc, tpch.orders.o_orderdate:asc, offset:0, count:10 └─HashAgg_23 40252367.98 root group by:Column#45, Column#46, Column#47, funcs:sum(Column#41)->Column#35, funcs:firstrow(Column#42)->tpch.orders.o_orderdate, funcs:firstrow(Column#43)->tpch.orders.o_shippriority, funcs:firstrow(Column#44)->tpch.lineitem.l_orderkey - └─Projection_67 91515927.49 root mul(tpch.lineitem.l_extendedprice, minus(1, tpch.lineitem.l_discount))->Column#41, tpch.orders.o_orderdate, tpch.orders.o_shippriority, tpch.lineitem.l_orderkey, tpch.lineitem.l_orderkey, tpch.orders.o_orderdate, tpch.orders.o_shippriority - └─HashJoin_35 91515927.49 root inner join, equal:[eq(tpch.orders.o_orderkey, tpch.lineitem.l_orderkey)] - ├─HashJoin_57(Build) 22592975.51 root inner join, equal:[eq(tpch.customer.c_custkey, tpch.orders.o_custkey)] - │ ├─TableReader_63(Build) 1498236.00 root data:Selection_62 - │ │ └─Selection_62 1498236.00 cop[tikv] eq(tpch.customer.c_mktsegment, "AUTOMOBILE") - │ │ └─TableFullScan_61 7500000.00 cop[tikv] table:customer keep order:false - │ └─TableReader_60(Probe) 36870000.00 root data:Selection_59 - │ └─Selection_59 36870000.00 cop[tikv] lt(tpch.orders.o_orderdate, 1995-03-13 00:00:00.000000) - │ └─TableFullScan_58 75000000.00 cop[tikv] table:orders keep order:false - └─TableReader_66(Probe) 163047704.27 root data:Selection_65 - └─Selection_65 163047704.27 cop[tikv] gt(tpch.lineitem.l_shipdate, 1995-03-13 00:00:00.000000) - └─TableFullScan_64 300005811.00 cop[tikv] table:lineitem keep order:false + └─Projection_65 91515927.49 root mul(tpch.lineitem.l_extendedprice, minus(1, tpch.lineitem.l_discount))->Column#41, tpch.orders.o_orderdate, tpch.orders.o_shippriority, tpch.lineitem.l_orderkey, tpch.lineitem.l_orderkey, tpch.orders.o_orderdate, tpch.orders.o_shippriority + └─HashJoin_33 91515927.49 root inner join, equal:[eq(tpch.orders.o_orderkey, tpch.lineitem.l_orderkey)] + ├─HashJoin_55(Build) 22592975.51 root inner join, equal:[eq(tpch.customer.c_custkey, tpch.orders.o_custkey)] + │ ├─TableReader_61(Build) 1498236.00 root data:Selection_60 + │ │ └─Selection_60 1498236.00 cop[tikv] eq(tpch.customer.c_mktsegment, "AUTOMOBILE") + │ │ └─TableFullScan_59 7500000.00 cop[tikv] table:customer keep order:false + │ └─TableReader_58(Probe) 36870000.00 root data:Selection_57 + │ └─Selection_57 36870000.00 cop[tikv] lt(tpch.orders.o_orderdate, 1995-03-13 00:00:00.000000) + │ └─TableFullScan_56 75000000.00 cop[tikv] table:orders keep order:false + └─TableReader_64(Probe) 163047704.27 root data:Selection_63 + └─Selection_63 163047704.27 cop[tikv] gt(tpch.lineitem.l_shipdate, 1995-03-13 00:00:00.000000) + └─TableFullScan_62 300005811.00 cop[tikv] table:lineitem keep order:false /* Q4 Order Priority Checking Query This query determines how well the order priority system is working and gives an assessment of customer satisfaction. @@ -298,9 +298,9 @@ Sort_10 1.00 root tpch.orders.o_orderpriority:asc └─Projection_12 1.00 root tpch.orders.o_orderpriority, Column#27 └─HashAgg_15 1.00 root group by:tpch.orders.o_orderpriority, funcs:count(1)->Column#27, funcs:firstrow(tpch.orders.o_orderpriority)->tpch.orders.o_orderpriority └─IndexHashJoin_23 2340750.00 root semi join, inner:IndexLookUp_20, outer key:tpch.orders.o_orderkey, inner key:tpch.lineitem.l_orderkey, equal cond:eq(tpch.orders.o_orderkey, tpch.lineitem.l_orderkey) - ├─TableReader_37(Build) 2925937.50 root data:Selection_36 - │ └─Selection_36 2925937.50 cop[tikv] ge(tpch.orders.o_orderdate, 1995-01-01 00:00:00.000000), lt(tpch.orders.o_orderdate, 1995-04-01) - │ └─TableFullScan_35 75000000.00 cop[tikv] table:orders keep order:false + ├─TableReader_35(Build) 2925937.50 root data:Selection_34 + │ └─Selection_34 2925937.50 cop[tikv] ge(tpch.orders.o_orderdate, 1995-01-01 00:00:00.000000), lt(tpch.orders.o_orderdate, 1995-04-01) + │ └─TableFullScan_33 75000000.00 cop[tikv] table:orders keep order:false └─IndexLookUp_20(Probe) 4.05 root ├─IndexRangeScan_17(Build) 5.06 cop[tikv] table:lineitem, index:PRIMARY(L_ORDERKEY, L_LINENUMBER) range: decided by [eq(tpch.lineitem.l_orderkey, tpch.orders.o_orderkey)], keep order:false └─Selection_19(Probe) 4.05 cop[tikv] lt(tpch.lineitem.l_commitdate, tpch.lineitem.l_receiptdate) @@ -518,32 +518,32 @@ id estRows task access object operator info Sort_29 719.02 root Column#62:asc └─Projection_31 719.02 root Column#62, div(Column#64, Column#65)->Column#66 └─HashAgg_34 719.02 root group by:Column#75, funcs:sum(Column#72)->Column#64, funcs:sum(Column#73)->Column#65, funcs:firstrow(Column#74)->Column#62 - └─Projection_101 563136.02 root case(eq(tpch.nation.n_name, INDIA), Column#63, 0)->Column#72, Column#63, Column#62, Column#62 + └─Projection_99 563136.02 root case(eq(tpch.nation.n_name, INDIA), Column#63, 0)->Column#72, Column#63, Column#62, Column#62 └─Projection_35 563136.02 root extract(YEAR, tpch.orders.o_orderdate)->Column#62, mul(tpch.lineitem.l_extendedprice, minus(1, tpch.lineitem.l_discount))->Column#63, tpch.nation.n_name └─HashJoin_41 563136.02 root inner join, equal:[eq(tpch.supplier.s_nationkey, tpch.nation.n_nationkey)] - ├─TableReader_99(Build) 25.00 root data:TableFullScan_98 - │ └─TableFullScan_98 25.00 cop[tikv] table:n2 keep order:false + ├─TableReader_97(Build) 25.00 root data:TableFullScan_96 + │ └─TableFullScan_96 25.00 cop[tikv] table:n2 keep order:false └─HashJoin_48(Probe) 563136.02 root inner join, equal:[eq(tpch.lineitem.l_suppkey, tpch.supplier.s_suppkey)] - ├─TableReader_97(Build) 500000.00 root data:TableFullScan_96 - │ └─TableFullScan_96 500000.00 cop[tikv] table:supplier keep order:false + ├─TableReader_95(Build) 500000.00 root data:TableFullScan_94 + │ └─TableFullScan_94 500000.00 cop[tikv] table:supplier keep order:false └─HashJoin_56(Probe) 563136.02 root inner join, equal:[eq(tpch.lineitem.l_partkey, tpch.part.p_partkey)] - ├─TableReader_95(Build) 61674.00 root data:Selection_94 - │ └─Selection_94 61674.00 cop[tikv] eq(tpch.part.p_type, "SMALL PLATED COPPER") - │ └─TableFullScan_93 10000000.00 cop[tikv] table:part keep order:false + ├─TableReader_93(Build) 61674.00 root data:Selection_92 + │ └─Selection_92 61674.00 cop[tikv] eq(tpch.part.p_type, "SMALL PLATED COPPER") + │ └─TableFullScan_91 10000000.00 cop[tikv] table:part keep order:false └─IndexHashJoin_64(Probe) 90788402.51 root inner join, inner:IndexLookUp_61, outer key:tpch.orders.o_orderkey, inner key:tpch.lineitem.l_orderkey, equal cond:eq(tpch.orders.o_orderkey, tpch.lineitem.l_orderkey) - ├─HashJoin_70(Build) 22413367.93 root inner join, equal:[eq(tpch.customer.c_custkey, tpch.orders.o_custkey)] - │ ├─HashJoin_72(Build) 1500000.00 root inner join, equal:[eq(tpch.nation.n_nationkey, tpch.customer.c_nationkey)] - │ │ ├─HashJoin_80(Build) 5.00 root inner join, equal:[eq(tpch.region.r_regionkey, tpch.nation.n_regionkey)] - │ │ │ ├─TableReader_85(Build) 1.00 root data:Selection_84 - │ │ │ │ └─Selection_84 1.00 cop[tikv] eq(tpch.region.r_name, "ASIA") - │ │ │ │ └─TableFullScan_83 5.00 cop[tikv] table:region keep order:false - │ │ │ └─TableReader_82(Probe) 25.00 root data:TableFullScan_81 - │ │ │ └─TableFullScan_81 25.00 cop[tikv] table:n1 keep order:false - │ │ └─TableReader_87(Probe) 7500000.00 root data:TableFullScan_86 - │ │ └─TableFullScan_86 7500000.00 cop[tikv] table:customer keep order:false - │ └─TableReader_90(Probe) 22413367.93 root data:Selection_89 - │ └─Selection_89 22413367.93 cop[tikv] ge(tpch.orders.o_orderdate, 1995-01-01 00:00:00.000000), le(tpch.orders.o_orderdate, 1996-12-31 00:00:00.000000) - │ └─TableFullScan_88 75000000.00 cop[tikv] table:orders keep order:false + ├─HashJoin_68(Build) 22413367.93 root inner join, equal:[eq(tpch.customer.c_custkey, tpch.orders.o_custkey)] + │ ├─HashJoin_70(Build) 1500000.00 root inner join, equal:[eq(tpch.nation.n_nationkey, tpch.customer.c_nationkey)] + │ │ ├─HashJoin_78(Build) 5.00 root inner join, equal:[eq(tpch.region.r_regionkey, tpch.nation.n_regionkey)] + │ │ │ ├─TableReader_83(Build) 1.00 root data:Selection_82 + │ │ │ │ └─Selection_82 1.00 cop[tikv] eq(tpch.region.r_name, "ASIA") + │ │ │ │ └─TableFullScan_81 5.00 cop[tikv] table:region keep order:false + │ │ │ └─TableReader_80(Probe) 25.00 root data:TableFullScan_79 + │ │ │ └─TableFullScan_79 25.00 cop[tikv] table:n1 keep order:false + │ │ └─TableReader_85(Probe) 7500000.00 root data:TableFullScan_84 + │ │ └─TableFullScan_84 7500000.00 cop[tikv] table:customer keep order:false + │ └─TableReader_88(Probe) 22413367.93 root data:Selection_87 + │ └─Selection_87 22413367.93 cop[tikv] ge(tpch.orders.o_orderdate, 1995-01-01 00:00:00.000000), le(tpch.orders.o_orderdate, 1996-12-31 00:00:00.000000) + │ └─TableFullScan_86 75000000.00 cop[tikv] table:orders keep order:false └─IndexLookUp_61(Probe) 4.05 root ├─IndexRangeScan_59(Build) 4.05 cop[tikv] table:lineitem, index:PRIMARY(L_ORDERKEY, L_LINENUMBER) range: decided by [eq(tpch.lineitem.l_orderkey, tpch.orders.o_orderkey)], keep order:false └─TableRowIDScan_60(Probe) 4.05 cop[tikv] table:lineitem keep order:false @@ -595,24 +595,24 @@ Sort_25 2406.00 root tpch.nation.n_name:asc, Column#53:desc └─Projection_27 2406.00 root tpch.nation.n_name, Column#53, Column#55 └─HashAgg_30 2406.00 root group by:Column#53, tpch.nation.n_name, funcs:sum(Column#54)->Column#55, funcs:firstrow(tpch.nation.n_name)->tpch.nation.n_name, funcs:firstrow(Column#53)->Column#53 └─Projection_31 971049283.51 root tpch.nation.n_name, extract(YEAR, tpch.orders.o_orderdate)->Column#53, minus(mul(tpch.lineitem.l_extendedprice, minus(1, tpch.lineitem.l_discount)), mul(tpch.partsupp.ps_supplycost, tpch.lineitem.l_quantity))->Column#54 - └─HashJoin_40 971049283.51 root inner join, equal:[eq(tpch.lineitem.l_suppkey, tpch.partsupp.ps_suppkey) eq(tpch.lineitem.l_partkey, tpch.partsupp.ps_partkey)] - ├─TableReader_85(Build) 40000000.00 root data:TableFullScan_84 - │ └─TableFullScan_84 40000000.00 cop[tikv] table:partsupp keep order:false - └─HashJoin_48(Probe) 241379546.70 root inner join, equal:[eq(tpch.lineitem.l_orderkey, tpch.orders.o_orderkey)] - ├─TableReader_83(Build) 75000000.00 root data:TableFullScan_82 - │ └─TableFullScan_82 75000000.00 cop[tikv] table:orders keep order:false - └─HashJoin_62(Probe) 241379546.70 root inner join, equal:[eq(tpch.lineitem.l_partkey, tpch.part.p_partkey)] - ├─TableReader_81(Build) 8000000.00 root data:Selection_80 - │ └─Selection_80 8000000.00 cop[tikv] like(tpch.part.p_name, "%dim%", 92) - │ └─TableFullScan_79 10000000.00 cop[tikv] table:part keep order:false - └─HashJoin_65(Probe) 300005811.00 root inner join, equal:[eq(tpch.supplier.s_suppkey, tpch.lineitem.l_suppkey)] - ├─HashJoin_72(Build) 500000.00 root inner join, equal:[eq(tpch.nation.n_nationkey, tpch.supplier.s_nationkey)] - │ ├─TableReader_76(Build) 25.00 root data:TableFullScan_75 - │ │ └─TableFullScan_75 25.00 cop[tikv] table:nation keep order:false - │ └─TableReader_74(Probe) 500000.00 root data:TableFullScan_73 - │ └─TableFullScan_73 500000.00 cop[tikv] table:supplier keep order:false - └─TableReader_78(Probe) 300005811.00 root data:TableFullScan_77 - └─TableFullScan_77 300005811.00 cop[tikv] table:lineitem keep order:false + └─HashJoin_38 971049283.51 root inner join, equal:[eq(tpch.lineitem.l_suppkey, tpch.partsupp.ps_suppkey) eq(tpch.lineitem.l_partkey, tpch.partsupp.ps_partkey)] + ├─TableReader_83(Build) 40000000.00 root data:TableFullScan_82 + │ └─TableFullScan_82 40000000.00 cop[tikv] table:partsupp keep order:false + └─HashJoin_46(Probe) 241379546.70 root inner join, equal:[eq(tpch.lineitem.l_orderkey, tpch.orders.o_orderkey)] + ├─TableReader_81(Build) 75000000.00 root data:TableFullScan_80 + │ └─TableFullScan_80 75000000.00 cop[tikv] table:orders keep order:false + └─HashJoin_60(Probe) 241379546.70 root inner join, equal:[eq(tpch.lineitem.l_partkey, tpch.part.p_partkey)] + ├─TableReader_79(Build) 8000000.00 root data:Selection_78 + │ └─Selection_78 8000000.00 cop[tikv] like(tpch.part.p_name, "%dim%", 92) + │ └─TableFullScan_77 10000000.00 cop[tikv] table:part keep order:false + └─HashJoin_63(Probe) 300005811.00 root inner join, equal:[eq(tpch.supplier.s_suppkey, tpch.lineitem.l_suppkey)] + ├─HashJoin_70(Build) 500000.00 root inner join, equal:[eq(tpch.nation.n_nationkey, tpch.supplier.s_nationkey)] + │ ├─TableReader_74(Build) 25.00 root data:TableFullScan_73 + │ │ └─TableFullScan_73 25.00 cop[tikv] table:nation keep order:false + │ └─TableReader_72(Probe) 500000.00 root data:TableFullScan_71 + │ └─TableFullScan_71 500000.00 cop[tikv] table:supplier keep order:false + └─TableReader_76(Probe) 300005811.00 root data:TableFullScan_75 + └─TableFullScan_75 300005811.00 cop[tikv] table:lineitem keep order:false /* Q10 Returned Item Reporting Query The query identifies customers who might be having problems with the parts that are shipped to them. @@ -660,17 +660,17 @@ id estRows task access object operator info Projection_17 20.00 root tpch.customer.c_custkey, tpch.customer.c_name, Column#39, tpch.customer.c_acctbal, tpch.nation.n_name, tpch.customer.c_address, tpch.customer.c_phone, tpch.customer.c_comment └─TopN_20 20.00 root Column#39:desc, offset:0, count:20 └─HashAgg_26 3017307.69 root group by:Column#50, Column#51, Column#52, Column#53, Column#54, Column#55, Column#56, funcs:sum(Column#42)->Column#39, funcs:firstrow(Column#43)->tpch.customer.c_custkey, funcs:firstrow(Column#44)->tpch.customer.c_name, funcs:firstrow(Column#45)->tpch.customer.c_address, funcs:firstrow(Column#46)->tpch.customer.c_phone, funcs:firstrow(Column#47)->tpch.customer.c_acctbal, funcs:firstrow(Column#48)->tpch.customer.c_comment, funcs:firstrow(Column#49)->tpch.nation.n_name - └─Projection_58 12222016.17 root mul(tpch.lineitem.l_extendedprice, minus(1, tpch.lineitem.l_discount))->Column#42, tpch.customer.c_custkey, tpch.customer.c_name, tpch.customer.c_address, tpch.customer.c_phone, tpch.customer.c_acctbal, tpch.customer.c_comment, tpch.nation.n_name, tpch.customer.c_custkey, tpch.customer.c_name, tpch.customer.c_acctbal, tpch.customer.c_phone, tpch.nation.n_name, tpch.customer.c_address, tpch.customer.c_comment + └─Projection_56 12222016.17 root mul(tpch.lineitem.l_extendedprice, minus(1, tpch.lineitem.l_discount))->Column#42, tpch.customer.c_custkey, tpch.customer.c_name, tpch.customer.c_address, tpch.customer.c_phone, tpch.customer.c_acctbal, tpch.customer.c_comment, tpch.nation.n_name, tpch.customer.c_custkey, tpch.customer.c_name, tpch.customer.c_acctbal, tpch.customer.c_phone, tpch.nation.n_name, tpch.customer.c_address, tpch.customer.c_comment └─IndexHashJoin_34 12222016.17 root inner join, inner:IndexLookUp_31, outer key:tpch.orders.o_orderkey, inner key:tpch.lineitem.l_orderkey, equal cond:eq(tpch.orders.o_orderkey, tpch.lineitem.l_orderkey) - ├─HashJoin_39(Build) 3017307.69 root inner join, equal:[eq(tpch.customer.c_custkey, tpch.orders.o_custkey)] - │ ├─TableReader_54(Build) 3017307.69 root data:Selection_53 - │ │ └─Selection_53 3017307.69 cop[tikv] ge(tpch.orders.o_orderdate, 1993-08-01 00:00:00.000000), lt(tpch.orders.o_orderdate, 1993-11-01) - │ │ └─TableFullScan_52 75000000.00 cop[tikv] table:orders keep order:false - │ └─HashJoin_47(Probe) 7500000.00 root inner join, equal:[eq(tpch.nation.n_nationkey, tpch.customer.c_nationkey)] - │ ├─TableReader_51(Build) 25.00 root data:TableFullScan_50 - │ │ └─TableFullScan_50 25.00 cop[tikv] table:nation keep order:false - │ └─TableReader_49(Probe) 7500000.00 root data:TableFullScan_48 - │ └─TableFullScan_48 7500000.00 cop[tikv] table:customer keep order:false + ├─HashJoin_37(Build) 3017307.69 root inner join, equal:[eq(tpch.customer.c_custkey, tpch.orders.o_custkey)] + │ ├─TableReader_52(Build) 3017307.69 root data:Selection_51 + │ │ └─Selection_51 3017307.69 cop[tikv] ge(tpch.orders.o_orderdate, 1993-08-01 00:00:00.000000), lt(tpch.orders.o_orderdate, 1993-11-01) + │ │ └─TableFullScan_50 75000000.00 cop[tikv] table:orders keep order:false + │ └─HashJoin_45(Probe) 7500000.00 root inner join, equal:[eq(tpch.nation.n_nationkey, tpch.customer.c_nationkey)] + │ ├─TableReader_49(Build) 25.00 root data:TableFullScan_48 + │ │ └─TableFullScan_48 25.00 cop[tikv] table:nation keep order:false + │ └─TableReader_47(Probe) 7500000.00 root data:TableFullScan_46 + │ └─TableFullScan_46 7500000.00 cop[tikv] table:customer keep order:false └─IndexLookUp_31(Probe) 4.05 root ├─IndexRangeScan_28(Build) 16.44 cop[tikv] table:lineitem, index:PRIMARY(L_ORDERKEY, L_LINENUMBER) range: decided by [eq(tpch.lineitem.l_orderkey, tpch.orders.o_orderkey)], keep order:false └─Selection_30(Probe) 4.05 cop[tikv] eq(tpch.lineitem.l_returnflag, "R") @@ -768,11 +768,11 @@ id estRows task access object operator info Sort_9 1.00 root tpch.lineitem.l_shipmode:asc └─Projection_11 1.00 root tpch.lineitem.l_shipmode, Column#27, Column#28 └─HashAgg_14 1.00 root group by:Column#37, funcs:sum(Column#34)->Column#27, funcs:sum(Column#35)->Column#28, funcs:firstrow(Column#36)->tpch.lineitem.l_shipmode - └─Projection_45 10023369.01 root cast(case(or(eq(tpch.orders.o_orderpriority, 1-URGENT), eq(tpch.orders.o_orderpriority, 2-HIGH)), 1, 0), decimal(65,0) BINARY)->Column#34, cast(case(and(ne(tpch.orders.o_orderpriority, 1-URGENT), ne(tpch.orders.o_orderpriority, 2-HIGH)), 1, 0), decimal(65,0) BINARY)->Column#35, tpch.lineitem.l_shipmode, tpch.lineitem.l_shipmode + └─Projection_43 10023369.01 root cast(case(or(eq(tpch.orders.o_orderpriority, 1-URGENT), eq(tpch.orders.o_orderpriority, 2-HIGH)), 1, 0), decimal(65,0) BINARY)->Column#34, cast(case(and(ne(tpch.orders.o_orderpriority, 1-URGENT), ne(tpch.orders.o_orderpriority, 2-HIGH)), 1, 0), decimal(65,0) BINARY)->Column#35, tpch.lineitem.l_shipmode, tpch.lineitem.l_shipmode └─IndexJoin_18 10023369.01 root inner join, inner:TableReader_17, outer key:tpch.lineitem.l_orderkey, inner key:tpch.orders.o_orderkey, equal cond:eq(tpch.lineitem.l_orderkey, tpch.orders.o_orderkey) - ├─TableReader_41(Build) 10023369.01 root data:Selection_40 - │ └─Selection_40 10023369.01 cop[tikv] ge(tpch.lineitem.l_receiptdate, 1997-01-01 00:00:00.000000), in(tpch.lineitem.l_shipmode, "RAIL", "FOB"), lt(tpch.lineitem.l_commitdate, tpch.lineitem.l_receiptdate), lt(tpch.lineitem.l_receiptdate, 1998-01-01), lt(tpch.lineitem.l_shipdate, tpch.lineitem.l_commitdate) - │ └─TableFullScan_39 300005811.00 cop[tikv] table:lineitem keep order:false + ├─TableReader_39(Build) 10023369.01 root data:Selection_38 + │ └─Selection_38 10023369.01 cop[tikv] ge(tpch.lineitem.l_receiptdate, 1997-01-01 00:00:00.000000), in(tpch.lineitem.l_shipmode, "RAIL", "FOB"), lt(tpch.lineitem.l_commitdate, tpch.lineitem.l_receiptdate), lt(tpch.lineitem.l_receiptdate, 1998-01-01), lt(tpch.lineitem.l_shipdate, tpch.lineitem.l_commitdate) + │ └─TableFullScan_37 300005811.00 cop[tikv] table:lineitem keep order:false └─TableReader_17(Probe) 1.00 root data:TableRangeScan_16 └─TableRangeScan_16 1.00 cop[tikv] table:orders range: decided by [tpch.lineitem.l_orderkey], keep order:false /* @@ -930,13 +930,13 @@ Sort_13 14.41 root Column#23:desc, tpch.part.p_brand:asc, tpch.part.p_type:asc, └─Projection_15 14.41 root tpch.part.p_brand, tpch.part.p_type, tpch.part.p_size, Column#23 └─HashAgg_16 14.41 root group by:tpch.part.p_brand, tpch.part.p_size, tpch.part.p_type, funcs:count(distinct tpch.partsupp.ps_suppkey)->Column#23, funcs:firstrow(tpch.part.p_brand)->tpch.part.p_brand, funcs:firstrow(tpch.part.p_type)->tpch.part.p_type, funcs:firstrow(tpch.part.p_size)->tpch.part.p_size └─HashJoin_23 3863988.24 root anti semi join, equal:[eq(tpch.partsupp.ps_suppkey, tpch.supplier.s_suppkey)] - ├─TableReader_54(Build) 400000.00 root data:Selection_53 - │ └─Selection_53 400000.00 cop[tikv] like(tpch.supplier.s_comment, "%Customer%Complaints%", 92) - │ └─TableFullScan_52 500000.00 cop[tikv] table:supplier keep order:false + ├─TableReader_52(Build) 400000.00 root data:Selection_51 + │ └─Selection_51 400000.00 cop[tikv] like(tpch.supplier.s_comment, "%Customer%Complaints%", 92) + │ └─TableFullScan_50 500000.00 cop[tikv] table:supplier keep order:false └─IndexHashJoin_29(Probe) 4829985.30 root inner join, inner:IndexReader_26, outer key:tpch.part.p_partkey, inner key:tpch.partsupp.ps_partkey, equal cond:eq(tpch.part.p_partkey, tpch.partsupp.ps_partkey) - ├─TableReader_47(Build) 1200618.43 root data:Selection_46 - │ └─Selection_46 1200618.43 cop[tikv] in(tpch.part.p_size, 48, 19, 12, 4, 41, 7, 21, 39), ne(tpch.part.p_brand, "Brand#34"), not(like(tpch.part.p_type, "LARGE BRUSHED%", 92)) - │ └─TableFullScan_45 10000000.00 cop[tikv] table:part keep order:false + ├─TableReader_45(Build) 1200618.43 root data:Selection_44 + │ └─Selection_44 1200618.43 cop[tikv] in(tpch.part.p_size, 48, 19, 12, 4, 41, 7, 21, 39), ne(tpch.part.p_brand, "Brand#34"), not(like(tpch.part.p_type, "LARGE BRUSHED%", 92)) + │ └─TableFullScan_43 10000000.00 cop[tikv] table:part keep order:false └─IndexReader_26(Probe) 4.02 root index:IndexRangeScan_25 └─IndexRangeScan_25 4.02 cop[tikv] table:partsupp, index:PRIMARY(PS_PARTKEY, PS_SUPPKEY) range: decided by [eq(tpch.partsupp.ps_partkey, tpch.part.p_partkey)], keep order:false /* @@ -1027,20 +1027,20 @@ id estRows task access object operator info Projection_24 100.00 root tpch.customer.c_name, tpch.customer.c_custkey, tpch.orders.o_orderkey, tpch.orders.o_orderdate, tpch.orders.o_totalprice, Column#54 └─TopN_27 100.00 root tpch.orders.o_totalprice:desc, tpch.orders.o_orderdate:asc, offset:0, count:100 └─HashAgg_33 59251097.60 root group by:tpch.customer.c_custkey, tpch.customer.c_name, tpch.orders.o_orderdate, tpch.orders.o_orderkey, tpch.orders.o_totalprice, funcs:sum(tpch.lineitem.l_quantity)->Column#54, funcs:firstrow(tpch.customer.c_custkey)->tpch.customer.c_custkey, funcs:firstrow(tpch.customer.c_name)->tpch.customer.c_name, funcs:firstrow(tpch.orders.o_orderkey)->tpch.orders.o_orderkey, funcs:firstrow(tpch.orders.o_totalprice)->tpch.orders.o_totalprice, funcs:firstrow(tpch.orders.o_orderdate)->tpch.orders.o_orderdate - └─HashJoin_44 240004648.80 root inner join, equal:[eq(tpch.orders.o_orderkey, tpch.lineitem.l_orderkey)] - ├─HashJoin_65(Build) 59251097.60 root inner join, equal:[eq(tpch.orders.o_orderkey, tpch.lineitem.l_orderkey)] - │ ├─Selection_78(Build) 59251097.60 root gt(Column#52, 314) - │ │ └─HashAgg_85 74063872.00 root group by:tpch.lineitem.l_orderkey, funcs:sum(Column#63)->Column#52, funcs:firstrow(tpch.lineitem.l_orderkey)->tpch.lineitem.l_orderkey - │ │ └─TableReader_86 74063872.00 root data:HashAgg_79 - │ │ └─HashAgg_79 74063872.00 cop[tikv] group by:tpch.lineitem.l_orderkey, funcs:sum(tpch.lineitem.l_quantity)->Column#63 - │ │ └─TableFullScan_84 300005811.00 cop[tikv] table:lineitem keep order:false - │ └─HashJoin_73(Probe) 75000000.00 root inner join, equal:[eq(tpch.customer.c_custkey, tpch.orders.o_custkey)] - │ ├─TableReader_77(Build) 7500000.00 root data:TableFullScan_76 - │ │ └─TableFullScan_76 7500000.00 cop[tikv] table:customer keep order:false - │ └─TableReader_75(Probe) 75000000.00 root data:TableFullScan_74 - │ └─TableFullScan_74 75000000.00 cop[tikv] table:orders keep order:false - └─TableReader_90(Probe) 300005811.00 root data:TableFullScan_89 - └─TableFullScan_89 300005811.00 cop[tikv] table:lineitem keep order:false + └─HashJoin_42 240004648.80 root inner join, equal:[eq(tpch.orders.o_orderkey, tpch.lineitem.l_orderkey)] + ├─HashJoin_63(Build) 59251097.60 root inner join, equal:[eq(tpch.orders.o_orderkey, tpch.lineitem.l_orderkey)] + │ ├─Selection_76(Build) 59251097.60 root gt(Column#52, 314) + │ │ └─HashAgg_83 74063872.00 root group by:tpch.lineitem.l_orderkey, funcs:sum(Column#63)->Column#52, funcs:firstrow(tpch.lineitem.l_orderkey)->tpch.lineitem.l_orderkey + │ │ └─TableReader_84 74063872.00 root data:HashAgg_77 + │ │ └─HashAgg_77 74063872.00 cop[tikv] group by:tpch.lineitem.l_orderkey, funcs:sum(tpch.lineitem.l_quantity)->Column#63 + │ │ └─TableFullScan_82 300005811.00 cop[tikv] table:lineitem keep order:false + │ └─HashJoin_71(Probe) 75000000.00 root inner join, equal:[eq(tpch.customer.c_custkey, tpch.orders.o_custkey)] + │ ├─TableReader_75(Build) 7500000.00 root data:TableFullScan_74 + │ │ └─TableFullScan_74 7500000.00 cop[tikv] table:customer keep order:false + │ └─TableReader_73(Probe) 75000000.00 root data:TableFullScan_72 + │ └─TableFullScan_72 75000000.00 cop[tikv] table:orders keep order:false + └─TableReader_88(Probe) 300005811.00 root data:TableFullScan_87 + └─TableFullScan_87 300005811.00 cop[tikv] table:lineitem keep order:false /* Q19 Discounted Revenue Query The Discounted Revenue Query reports the gross discounted revenue attributed to the sale of selected parts handled @@ -1157,15 +1157,15 @@ Sort_28 20000.00 root tpch.supplier.s_name:asc └─HashAgg_53 321865.05 root group by:tpch.partsupp.ps_partkey, tpch.partsupp.ps_suppkey, funcs:firstrow(tpch.partsupp.ps_suppkey)->tpch.partsupp.ps_suppkey, funcs:firstrow(tpch.partsupp.ps_availqty)->tpch.partsupp.ps_availqty, funcs:sum(tpch.lineitem.l_quantity)->Column#44 └─HashJoin_57 9711455.06 root left outer join, equal:[eq(tpch.partsupp.ps_partkey, tpch.lineitem.l_partkey) eq(tpch.partsupp.ps_suppkey, tpch.lineitem.l_suppkey)] ├─IndexHashJoin_64(Build) 321865.05 root inner join, inner:IndexLookUp_61, outer key:tpch.part.p_partkey, inner key:tpch.partsupp.ps_partkey, equal cond:eq(tpch.part.p_partkey, tpch.partsupp.ps_partkey) - │ ├─TableReader_84(Build) 80007.93 root data:Selection_83 - │ │ └─Selection_83 80007.93 cop[tikv] like(tpch.part.p_name, "green%", 92) - │ │ └─TableFullScan_82 10000000.00 cop[tikv] table:part keep order:false + │ ├─TableReader_82(Build) 80007.93 root data:Selection_81 + │ │ └─Selection_81 80007.93 cop[tikv] like(tpch.part.p_name, "green%", 92) + │ │ └─TableFullScan_80 10000000.00 cop[tikv] table:part keep order:false │ └─IndexLookUp_61(Probe) 4.02 root │ ├─IndexRangeScan_59(Build) 4.02 cop[tikv] table:partsupp, index:PRIMARY(PS_PARTKEY, PS_SUPPKEY) range: decided by [eq(tpch.partsupp.ps_partkey, tpch.part.p_partkey)], keep order:false │ └─TableRowIDScan_60(Probe) 4.02 cop[tikv] table:partsupp keep order:false - └─TableReader_89(Probe) 44189356.65 root data:Selection_88 - └─Selection_88 44189356.65 cop[tikv] ge(tpch.lineitem.l_shipdate, 1993-01-01 00:00:00.000000), lt(tpch.lineitem.l_shipdate, 1994-01-01) - └─TableFullScan_87 300005811.00 cop[tikv] table:lineitem keep order:false + └─TableReader_87(Probe) 44189356.65 root data:Selection_86 + └─Selection_86 44189356.65 cop[tikv] ge(tpch.lineitem.l_shipdate, 1993-01-01 00:00:00.000000), lt(tpch.lineitem.l_shipdate, 1994-01-01) + └─TableFullScan_85 300005811.00 cop[tikv] table:lineitem keep order:false /* Q21 Suppliers Who Kept Orders Waiting Query This query identifies certain suppliers who were not able to ship required parts in a timely manner. @@ -1219,24 +1219,24 @@ Projection_25 100.00 root tpch.supplier.s_name, Column#72 └─TopN_28 100.00 root Column#72:desc, tpch.supplier.s_name:asc, offset:0, count:100 └─HashAgg_34 12800.00 root group by:tpch.supplier.s_name, funcs:count(1)->Column#72, funcs:firstrow(tpch.supplier.s_name)->tpch.supplier.s_name └─IndexHashJoin_42 7828961.66 root anti semi join, inner:IndexLookUp_39, outer key:tpch.lineitem.l_orderkey, inner key:tpch.lineitem.l_orderkey, equal cond:eq(tpch.lineitem.l_orderkey, tpch.lineitem.l_orderkey), other cond:ne(tpch.lineitem.l_suppkey, tpch.lineitem.l_suppkey) - ├─IndexHashJoin_68(Build) 9786202.08 root semi join, inner:IndexLookUp_65, outer key:tpch.lineitem.l_orderkey, inner key:tpch.lineitem.l_orderkey, equal cond:eq(tpch.lineitem.l_orderkey, tpch.lineitem.l_orderkey), other cond:ne(tpch.lineitem.l_suppkey, tpch.lineitem.l_suppkey), ne(tpch.lineitem.l_suppkey, tpch.supplier.s_suppkey) - │ ├─IndexJoin_76(Build) 12232752.60 root inner join, inner:TableReader_75, outer key:tpch.lineitem.l_orderkey, inner key:tpch.orders.o_orderkey, equal cond:eq(tpch.lineitem.l_orderkey, tpch.orders.o_orderkey) - │ │ ├─HashJoin_82(Build) 12232752.60 root inner join, equal:[eq(tpch.supplier.s_suppkey, tpch.lineitem.l_suppkey)] - │ │ │ ├─HashJoin_90(Build) 20000.00 root inner join, equal:[eq(tpch.nation.n_nationkey, tpch.supplier.s_nationkey)] - │ │ │ │ ├─TableReader_95(Build) 1.00 root data:Selection_94 - │ │ │ │ │ └─Selection_94 1.00 cop[tikv] eq(tpch.nation.n_name, "EGYPT") - │ │ │ │ │ └─TableFullScan_93 25.00 cop[tikv] table:nation keep order:false - │ │ │ │ └─TableReader_92(Probe) 500000.00 root data:TableFullScan_91 - │ │ │ │ └─TableFullScan_91 500000.00 cop[tikv] table:supplier keep order:false - │ │ │ └─TableReader_98(Probe) 240004648.80 root data:Selection_97 - │ │ │ └─Selection_97 240004648.80 cop[tikv] gt(tpch.lineitem.l_receiptdate, tpch.lineitem.l_commitdate) - │ │ │ └─TableFullScan_96 300005811.00 cop[tikv] table:l1 keep order:false - │ │ └─TableReader_75(Probe) 0.49 root data:Selection_74 - │ │ └─Selection_74 0.49 cop[tikv] eq(tpch.orders.o_orderstatus, "F") - │ │ └─TableRangeScan_73 1.00 cop[tikv] table:orders range: decided by [tpch.lineitem.l_orderkey], keep order:false - │ └─IndexLookUp_65(Probe) 4.05 root - │ ├─IndexRangeScan_63(Build) 4.05 cop[tikv] table:l2, index:PRIMARY(L_ORDERKEY, L_LINENUMBER) range: decided by [eq(tpch.lineitem.l_orderkey, tpch.lineitem.l_orderkey)], keep order:false - │ └─TableRowIDScan_64(Probe) 4.05 cop[tikv] table:l2 keep order:false + ├─IndexHashJoin_64(Build) 9786202.08 root semi join, inner:IndexLookUp_61, outer key:tpch.lineitem.l_orderkey, inner key:tpch.lineitem.l_orderkey, equal cond:eq(tpch.lineitem.l_orderkey, tpch.lineitem.l_orderkey), other cond:ne(tpch.lineitem.l_suppkey, tpch.lineitem.l_suppkey), ne(tpch.lineitem.l_suppkey, tpch.supplier.s_suppkey) + │ ├─IndexJoin_70(Build) 12232752.60 root inner join, inner:TableReader_69, outer key:tpch.lineitem.l_orderkey, inner key:tpch.orders.o_orderkey, equal cond:eq(tpch.lineitem.l_orderkey, tpch.orders.o_orderkey) + │ │ ├─HashJoin_76(Build) 12232752.60 root inner join, equal:[eq(tpch.supplier.s_suppkey, tpch.lineitem.l_suppkey)] + │ │ │ ├─HashJoin_84(Build) 20000.00 root inner join, equal:[eq(tpch.nation.n_nationkey, tpch.supplier.s_nationkey)] + │ │ │ │ ├─TableReader_89(Build) 1.00 root data:Selection_88 + │ │ │ │ │ └─Selection_88 1.00 cop[tikv] eq(tpch.nation.n_name, "EGYPT") + │ │ │ │ │ └─TableFullScan_87 25.00 cop[tikv] table:nation keep order:false + │ │ │ │ └─TableReader_86(Probe) 500000.00 root data:TableFullScan_85 + │ │ │ │ └─TableFullScan_85 500000.00 cop[tikv] table:supplier keep order:false + │ │ │ └─TableReader_92(Probe) 240004648.80 root data:Selection_91 + │ │ │ └─Selection_91 240004648.80 cop[tikv] gt(tpch.lineitem.l_receiptdate, tpch.lineitem.l_commitdate) + │ │ │ └─TableFullScan_90 300005811.00 cop[tikv] table:l1 keep order:false + │ │ └─TableReader_69(Probe) 0.49 root data:Selection_68 + │ │ └─Selection_68 0.49 cop[tikv] eq(tpch.orders.o_orderstatus, "F") + │ │ └─TableRangeScan_67 1.00 cop[tikv] table:orders range: decided by [tpch.lineitem.l_orderkey], keep order:false + │ └─IndexLookUp_61(Probe) 4.05 root + │ ├─IndexRangeScan_59(Build) 4.05 cop[tikv] table:l2, index:PRIMARY(L_ORDERKEY, L_LINENUMBER) range: decided by [eq(tpch.lineitem.l_orderkey, tpch.lineitem.l_orderkey)], keep order:false + │ └─TableRowIDScan_60(Probe) 4.05 cop[tikv] table:l2 keep order:false └─IndexLookUp_39(Probe) 4.05 root ├─IndexRangeScan_36(Build) 5.06 cop[tikv] table:l3, index:PRIMARY(L_ORDERKEY, L_LINENUMBER) range: decided by [eq(tpch.lineitem.l_orderkey, tpch.lineitem.l_orderkey)], keep order:false └─Selection_38(Probe) 4.05 cop[tikv] gt(tpch.lineitem.l_receiptdate, tpch.lineitem.l_commitdate) diff --git a/executor/join_test.go b/executor/join_test.go index 0af764a2be4a9..bde0bdeeac068 100644 --- a/executor/join_test.go +++ b/executor/join_test.go @@ -1286,9 +1286,9 @@ func (s *testSuiteJoin1) TestIndexLookupJoin(c *C) { tk.MustQuery("desc select /*+ TIDB_INLJ(s) */ count(*) from t join s use index(idx) on s.a = t.a and s.b < t.b").Check(testkit.Rows( "HashAgg_9 1.00 root funcs:count(1)->Column#6", "└─IndexJoin_16 64.00 root inner join, inner:IndexReader_15, outer key:test.t.a, inner key:test.s.a, equal cond:eq(test.t.a, test.s.a), other cond:lt(test.s.b, test.t.b)", - " ├─TableReader_23(Build) 64.00 root data:Selection_22", - " │ └─Selection_22 64.00 cop[tikv] not(isnull(test.t.b))", - " │ └─TableFullScan_21 64.00 cop[tikv] table:t keep order:false", + " ├─TableReader_21(Build) 64.00 root data:Selection_20", + " │ └─Selection_20 64.00 cop[tikv] not(isnull(test.t.b))", + " │ └─TableFullScan_19 64.00 cop[tikv] table:t keep order:false", " └─IndexReader_15(Probe) 1.00 root index:Selection_14", " └─Selection_14 1.00 cop[tikv] not(isnull(test.s.a)), not(isnull(test.s.b))", " └─IndexRangeScan_13 1.00 cop[tikv] table:s, index:idx(a, b) range: decided by [eq(test.s.a, test.t.a) lt(test.s.b, test.t.b)], keep order:false")) @@ -1315,9 +1315,9 @@ func (s *testSuiteJoin1) TestIndexLookupJoin(c *C) { tk.MustQuery("desc select /*+ INL_HASH_JOIN(s) */ count(*) from t join s use index(idx) on s.a = t.a and s.b < t.b").Check(testkit.Rows( "HashAgg_9 1.00 root funcs:count(1)->Column#6", "└─IndexHashJoin_18 64.00 root inner join, inner:IndexReader_15, outer key:test.t.a, inner key:test.s.a, equal cond:eq(test.t.a, test.s.a), other cond:lt(test.s.b, test.t.b)", - " ├─TableReader_23(Build) 64.00 root data:Selection_22", - " │ └─Selection_22 64.00 cop[tikv] not(isnull(test.t.b))", - " │ └─TableFullScan_21 64.00 cop[tikv] table:t keep order:false", + " ├─TableReader_21(Build) 64.00 root data:Selection_20", + " │ └─Selection_20 64.00 cop[tikv] not(isnull(test.t.b))", + " │ └─TableFullScan_19 64.00 cop[tikv] table:t keep order:false", " └─IndexReader_15(Probe) 1.00 root index:Selection_14", " └─Selection_14 1.00 cop[tikv] not(isnull(test.s.a)), not(isnull(test.s.b))", " └─IndexRangeScan_13 1.00 cop[tikv] table:s, index:idx(a, b) range: decided by [eq(test.s.a, test.t.a) lt(test.s.b, test.t.b)], keep order:false", @@ -1502,12 +1502,12 @@ func (s *testSuiteJoin3) TestIssue13449(c *C) { tk.MustExec("set @@tidb_index_join_batch_size=32;") tk.MustQuery("desc select /*+ INL_HASH_JOIN(s) */ * from t join s on t.a=s.a order by t.a;").Check(testkit.Rows( - "IndexHashJoin_27 12487.50 root inner join, inner:IndexReader_24, outer key:test.t.a, inner key:test.s.a, equal cond:eq(test.t.a, test.s.a)", - "├─IndexReader_31(Build) 9990.00 root index:IndexFullScan_30", - "│ └─IndexFullScan_30 9990.00 cop[tikv] table:t, index:a(a) keep order:true, stats:pseudo", - "└─IndexReader_24(Probe) 1.25 root index:Selection_23", - " └─Selection_23 1.25 cop[tikv] not(isnull(test.s.a))", - " └─IndexRangeScan_22 1.25 cop[tikv] table:s, index:a(a) range: decided by [eq(test.s.a, test.t.a)], keep order:false, stats:pseudo")) + "IndexHashJoin_25 12487.50 root inner join, inner:IndexReader_22, outer key:test.t.a, inner key:test.s.a, equal cond:eq(test.t.a, test.s.a)", + "├─IndexReader_27(Build) 9990.00 root index:IndexFullScan_26", + "│ └─IndexFullScan_26 9990.00 cop[tikv] table:t, index:a(a) keep order:true, stats:pseudo", + "└─IndexReader_22(Probe) 1.25 root index:Selection_21", + " └─Selection_21 1.25 cop[tikv] not(isnull(test.s.a))", + " └─IndexRangeScan_20 1.25 cop[tikv] table:s, index:a(a) range: decided by [eq(test.s.a, test.t.a)], keep order:false, stats:pseudo")) tk.MustQuery("select /*+ INL_HASH_JOIN(s) */ * from t join s on t.a=s.a order by t.a;").Check(testkit.Rows("1 1", "128 128")) } @@ -2089,8 +2089,8 @@ func (s *testSuiteJoinSerial) TestOuterTableBuildHashTableIsuse13933(c *C) { tk.MustQuery("select /*+ INL_HASH_JOIN(s)*/ * from t left join s on s.b=t.b and s.a < t.a;").Sort().Check(testkit.Rows("1 2 ", "11 2 1 2", "5 2 1 2")) tk.MustQuery("explain select /*+ INL_HASH_JOIN(s)*/ * from t left join s on s.b=t.b and s.a < t.a;").Check(testkit.Rows( "IndexHashJoin_14 12475.01 root left outer join, inner:IndexLookUp_11, outer key:test.t.b, inner key:test.s.b, equal cond:eq(test.t.b, test.s.b), other cond:lt(test.s.a, test.t.a)", - "├─TableReader_18(Build) 10000.00 root data:TableFullScan_17", - "│ └─TableFullScan_17 10000.00 cop[tikv] table:t keep order:false, stats:pseudo", + "├─TableReader_16(Build) 10000.00 root data:TableFullScan_15", + "│ └─TableFullScan_15 10000.00 cop[tikv] table:t keep order:false, stats:pseudo", "└─IndexLookUp_11(Probe) 1.25 root ", " ├─Selection_9(Build) 1.25 cop[tikv] not(isnull(test.s.b))", " │ └─IndexRangeScan_7 1.25 cop[tikv] table:s, index:b(b) range: decided by [eq(test.s.b, test.t.b)], keep order:false, stats:pseudo", diff --git a/planner/core/exhaust_physical_plans.go b/planner/core/exhaust_physical_plans.go index efb940bf35fd9..c59470dbe3030 100644 --- a/planner/core/exhaust_physical_plans.go +++ b/planner/core/exhaust_physical_plans.go @@ -149,7 +149,9 @@ func (p *LogicalJoin) GetMergeJoin(prop *property.PhysicalProperty, schema *expr leftJoinKeys, rightJoinKeys := p.GetJoinKeys() for _, lhsChildProperty := range p.leftProperties { offsets := getMaxSortPrefix(lhsChildProperty, leftJoinKeys) - if len(offsets) == 0 { + // If not all equal conditions hit properties. We ban merge join heuristically. Because in this case, merge join + // may get a very low performance. In executor, executes join results before other conditions filter it. + if len(offsets) < len(leftJoinKeys) { continue } @@ -354,7 +356,6 @@ func (p *LogicalJoin) getHashJoin(prop *property.PhysicalProperty, innerIdx int, // When inner plan is TableReader, the parameter `ranges` will be nil. Because pk only have one column. So all of its range // is generated during execution time. func (p *LogicalJoin) constructIndexJoin( - joinTP string, prop *property.PhysicalProperty, outerIdx int, innerTask task, @@ -397,32 +398,30 @@ func (p *LogicalJoin) constructIndexJoin( var outerHashKeys, innerHashKeys []*expression.Column // HashKey is only used for IndexJoin and IndexHashJoin since they need to // build hash tables. - if joinTP != plancodec.TypeIndexMergeJoin { - outerHashKeys, innerHashKeys = make([]*expression.Column, len(newOuterKeys)), make([]*expression.Column, len(newInnerKeys)) - copy(outerHashKeys, newOuterKeys) - copy(innerHashKeys, newInnerKeys) - // we can use the `col col` in `OtherCondition` to build the hashtable to avoid the unnecessary calculating. - for i := len(newOtherConds) - 1; i >= 0; i = i - 1 { - switch c := newOtherConds[i].(type) { - case *expression.ScalarFunction: - if c.FuncName.L == ast.EQ { - lhs, ok1 := c.GetArgs()[0].(*expression.Column) - rhs, ok2 := c.GetArgs()[1].(*expression.Column) - if ok1 && ok2 { - outerSchema, innerSchema := p.Children()[outerIdx].Schema(), p.Children()[1-outerIdx].Schema() - if outerSchema.Contains(lhs) && innerSchema.Contains(rhs) { - outerHashKeys = append(outerHashKeys, lhs) - innerHashKeys = append(innerHashKeys, rhs) - } else if innerSchema.Contains(lhs) && outerSchema.Contains(rhs) { - outerHashKeys = append(outerHashKeys, rhs) - innerHashKeys = append(innerHashKeys, lhs) - } - newOtherConds = append(newOtherConds[:i], newOtherConds[i+1:]...) + outerHashKeys, innerHashKeys = make([]*expression.Column, len(newOuterKeys)), make([]*expression.Column, len(newInnerKeys)) + copy(outerHashKeys, newOuterKeys) + copy(innerHashKeys, newInnerKeys) + // we can use the `col col` in `OtherCondition` to build the hashtable to avoid the unnecessary calculating. + for i := len(newOtherConds) - 1; i >= 0; i = i - 1 { + switch c := newOtherConds[i].(type) { + case *expression.ScalarFunction: + if c.FuncName.L == ast.EQ { + lhs, ok1 := c.GetArgs()[0].(*expression.Column) + rhs, ok2 := c.GetArgs()[1].(*expression.Column) + if ok1 && ok2 { + outerSchema, innerSchema := p.Children()[outerIdx].Schema(), p.Children()[1-outerIdx].Schema() + if outerSchema.Contains(lhs) && innerSchema.Contains(rhs) { + outerHashKeys = append(outerHashKeys, lhs) + innerHashKeys = append(innerHashKeys, rhs) + } else if innerSchema.Contains(lhs) && outerSchema.Contains(rhs) { + outerHashKeys = append(outerHashKeys, rhs) + innerHashKeys = append(innerHashKeys, lhs) } + newOtherConds = append(newOtherConds[:i], newOtherConds[i+1:]...) } - default: - continue } + default: + continue } } baseJoin := basePhysicalJoin{ @@ -460,10 +459,14 @@ func (p *LogicalJoin) constructIndexMergeJoin( path *util.AccessPath, compareFilters *ColWithCmpFuncManager, ) []PhysicalPlan { - indexJoins := p.constructIndexJoin(plancodec.TypeIndexMergeJoin, prop, outerIdx, innerTask, ranges, keyOff2IdxOff, path, compareFilters) + indexJoins := p.constructIndexJoin(prop, outerIdx, innerTask, ranges, keyOff2IdxOff, path, compareFilters) indexMergeJoins := make([]PhysicalPlan, 0, len(indexJoins)) for _, plan := range indexJoins { join := plan.(*PhysicalIndexJoin) + // Index merge join can't handle hash keys. So we ban it heuristically. + if len(join.InnerHashKeys) > len(join.InnerJoinKeys) { + return nil + } hasPrefixCol := false for _, l := range join.IdxColLens { if l != types.UnspecifiedLength { @@ -545,7 +548,7 @@ func (p *LogicalJoin) constructIndexHashJoin( path *util.AccessPath, compareFilters *ColWithCmpFuncManager, ) []PhysicalPlan { - indexJoins := p.constructIndexJoin(plancodec.TypeIndexHashJoin, prop, outerIdx, innerTask, ranges, keyOff2IdxOff, path, compareFilters) + indexJoins := p.constructIndexJoin(prop, outerIdx, innerTask, ranges, keyOff2IdxOff, path, compareFilters) indexHashJoins := make([]PhysicalPlan, 0, len(indexJoins)) for _, plan := range indexJoins { join := plan.(*PhysicalIndexJoin) @@ -655,8 +658,7 @@ func (p *LogicalJoin) buildIndexJoinInner2TableScan( failpoint.Return(p.constructIndexHashJoin(prop, outerIdx, innerTask, nil, keyOff2IdxOff, nil, nil)) } }) - joins = append(joins, p.constructIndexJoin(plancodec.TypeIndexJoin, prop, outerIdx, innerTask, nil, keyOff2IdxOff, nil, nil)...) - + joins = append(joins, p.constructIndexJoin(prop, outerIdx, innerTask, nil, keyOff2IdxOff, nil, nil)...) // The index merge join's inner plan is different from index join, so we // should construct another inner plan for it. // Because we can't keep order for union scan, if there is a union scan in inner task, @@ -721,10 +723,7 @@ func (p *LogicalJoin) buildIndexJoinInner2IndexScan( failpoint.Return(p.constructIndexHashJoin(prop, outerIdx, innerTask, helper.chosenRanges, keyOff2IdxOff, helper.chosenPath, helper.lastColManager)) } }) - joins = append(joins, p.constructIndexJoin(plancodec.TypeIndexJoin, prop, outerIdx, innerTask, helper.chosenRanges, keyOff2IdxOff, helper.chosenPath, helper.lastColManager)...) - // We can reuse the `innerTask` here since index nested loop hash join - // do not need the inner child to promise the order. - joins = append(joins, p.constructIndexHashJoin(prop, outerIdx, innerTask, helper.chosenRanges, keyOff2IdxOff, helper.chosenPath, helper.lastColManager)...) + joins = append(joins, p.constructIndexJoin(prop, outerIdx, innerTask, helper.chosenRanges, keyOff2IdxOff, helper.chosenPath, helper.lastColManager)...) // The index merge join's inner plan is different from index join, so we // should construct another inner plan for it. // Because we can't keep order for union scan, if there is a union scan in inner task, diff --git a/planner/core/explain.go b/planner/core/explain.go index 04643b0f2198b..973ee611db858 100644 --- a/planner/core/explain.go +++ b/planner/core/explain.go @@ -368,10 +368,15 @@ func (p *basePhysicalAgg) ExplainNormalizedInfo() string { // ExplainInfo implements Plan interface. func (p *PhysicalIndexJoin) ExplainInfo() string { - return p.explainInfo(false) + return p.explainInfo(false, false) } -func (p *PhysicalIndexJoin) explainInfo(normalized bool) string { +// ExplainInfo implements Plan interface. +func (p *PhysicalIndexMergeJoin) ExplainInfo() string { + return p.explainInfo(false, true) +} + +func (p *PhysicalIndexJoin) explainInfo(normalized bool, isIndexMergeJoin bool) string { sortedExplainExpressionList := expression.SortedExplainExpressionList if normalized { sortedExplainExpressionList = expression.SortedExplainNormalizedExpressionList @@ -391,8 +396,7 @@ func (p *PhysicalIndexJoin) explainInfo(normalized bool) string { fmt.Fprintf(buffer, ", inner key:%s", expression.ExplainColumnList(p.InnerJoinKeys)) } - - if len(p.OuterHashKeys) > 0 { + if len(p.OuterHashKeys) > 0 && !isIndexMergeJoin { exprs := make([]expression.Expression, 0, len(p.OuterHashKeys)) for i := range p.OuterHashKeys { expr, err := expression.NewFunctionBase(MockContext(), ast.EQ, types.NewFieldType(mysql.TypeLonglong), p.OuterHashKeys[i], p.InnerHashKeys[i]) @@ -420,7 +424,12 @@ func (p *PhysicalIndexJoin) explainInfo(normalized bool) string { // ExplainNormalizedInfo implements Plan interface. func (p *PhysicalIndexJoin) ExplainNormalizedInfo() string { - return p.explainInfo(true) + return p.explainInfo(true, false) +} + +// ExplainNormalizedInfo implements Plan interface. +func (p *PhysicalIndexMergeJoin) ExplainNormalizedInfo() string { + return p.explainInfo(true, true) } // ExplainInfo implements Plan interface. diff --git a/planner/core/testdata/analyze_suite_out.json b/planner/core/testdata/analyze_suite_out.json index 7019f935571d1..1a6c02ff0f802 100644 --- a/planner/core/testdata/analyze_suite_out.json +++ b/planner/core/testdata/analyze_suite_out.json @@ -47,13 +47,13 @@ ], "Plan": [ "Limit_17 1.00 root offset:0, count:1", - "└─IndexJoin_64 1.00 root left outer semi join, inner:IndexReader_63, outer key:test.t.a, inner key:test.t.b, equal cond:eq(test.t.a, test.t.b)", - " ├─TopN_27(Build) 1.00 root test.t.a:asc, offset:0, count:1", - " │ └─IndexReader_35 1.00 root index:TopN_34", - " │ └─TopN_34 1.00 cop[tikv] test.t.a:asc, offset:0, count:1", - " │ └─IndexRangeScan_33 6.00 cop[tikv] table:t1, index:idx_bc(b, c) range:[-inf,6], keep order:false", - " └─IndexReader_63(Probe) 1.04 root index:IndexRangeScan_62", - " └─IndexRangeScan_62 1.04 cop[tikv] table:t2, index:idx_bc(b, c) range: decided by [eq(test.t.b, test.t.a)], keep order:false" + "└─IndexJoin_62 1.00 root left outer semi join, inner:IndexReader_61, outer key:test.t.a, inner key:test.t.b, equal cond:eq(test.t.a, test.t.b)", + " ├─TopN_25(Build) 1.00 root test.t.a:asc, offset:0, count:1", + " │ └─IndexReader_33 1.00 root index:TopN_32", + " │ └─TopN_32 1.00 cop[tikv] test.t.a:asc, offset:0, count:1", + " │ └─IndexRangeScan_31 6.00 cop[tikv] table:t1, index:idx_bc(b, c) range:[-inf,6], keep order:false", + " └─IndexReader_61(Probe) 1.04 root index:IndexRangeScan_60", + " └─IndexRangeScan_60 1.04 cop[tikv] table:t2, index:idx_bc(b, c) range: decided by [eq(test.t.b, test.t.a)], keep order:false" ] }, { @@ -143,9 +143,9 @@ ], "Plan": [ "IndexJoin_9 12475.01 root inner join, inner:IndexReader_8, outer key:test.t1.a, inner key:test.t2.a, equal cond:eq(test.t1.a, test.t2.a), eq(test.t1.c, test.t2.c), other cond:gt(test.t2.b, minus(test.t1.b, 1)), lt(test.t2.b, plus(test.t1.b, 1))", - "├─TableReader_16(Build) 9980.01 root data:Selection_15", - "│ └─Selection_15 9980.01 cop[tikv] not(isnull(test.t1.a)), not(isnull(test.t1.c))", - "│ └─TableFullScan_14 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo", + "├─TableReader_14(Build) 9980.01 root data:Selection_13", + "│ └─Selection_13 9980.01 cop[tikv] not(isnull(test.t1.a)), not(isnull(test.t1.c))", + "│ └─TableFullScan_12 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo", "└─IndexReader_8(Probe) 1.25 root index:Selection_7", " └─Selection_7 1.25 cop[tikv] not(isnull(test.t2.a)), not(isnull(test.t2.c))", " └─IndexRangeScan_6 1.25 cop[tikv] table:t2, index:idx(a, b, c) range: decided by [eq(test.t2.a, test.t1.a) gt(test.t2.b, minus(test.t1.b, 1)) lt(test.t2.b, plus(test.t1.b, 1))], keep order:false, stats:pseudo" diff --git a/planner/core/testdata/integration_serial_suite_out.json b/planner/core/testdata/integration_serial_suite_out.json index 615d35618f29d..2a2de8dad4a0e 100644 --- a/planner/core/testdata/integration_serial_suite_out.json +++ b/planner/core/testdata/integration_serial_suite_out.json @@ -191,26 +191,26 @@ { "SQL": "desc select /*+ READ_FROM_STORAGE(TIKV[t1], TIKV[t2]) */ * from t t1, t t2 where t1.a = t2.a", "Plan": [ - "HashJoin_27 12487.50 root inner join, equal:[eq(test.t.a, test.t.a)]", - "├─TableReader_45(Build) 9990.00 root data:Selection_44", - "│ └─Selection_44 9990.00 cop[tikv] not(isnull(test.t.a))", - "│ └─TableFullScan_43 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo", - "└─TableReader_39(Probe) 9990.00 root data:Selection_38", - " └─Selection_38 9990.00 cop[tikv] not(isnull(test.t.a))", - " └─TableFullScan_37 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo" + "HashJoin_23 12487.50 root inner join, equal:[eq(test.t.a, test.t.a)]", + "├─TableReader_41(Build) 9990.00 root data:Selection_40", + "│ └─Selection_40 9990.00 cop[tikv] not(isnull(test.t.a))", + "│ └─TableFullScan_39 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo", + "└─TableReader_35(Probe) 9990.00 root data:Selection_34", + " └─Selection_34 9990.00 cop[tikv] not(isnull(test.t.a))", + " └─TableFullScan_33 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo" ], "Warn": null }, { "SQL": "desc select /*+ READ_FROM_STORAGE(TIKV[t1], TIFLASH[t2]) */ * from t t1, t t2 where t1.a = t2.a", "Plan": [ - "HashJoin_18 12487.50 root inner join, equal:[eq(test.t.a, test.t.a)]", - "├─TableReader_26(Build) 9990.00 root data:Selection_25", - "│ └─Selection_25 9990.00 cop[tiflash] not(isnull(test.t.a))", - "│ └─TableFullScan_24 10000.00 cop[tiflash] table:t2 keep order:false, stats:pseudo", - "└─TableReader_29(Probe) 9990.00 root data:Selection_28", - " └─Selection_28 9990.00 cop[tikv] not(isnull(test.t.a))", - " └─TableFullScan_27 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo" + "HashJoin_16 12487.50 root inner join, equal:[eq(test.t.a, test.t.a)]", + "├─TableReader_24(Build) 9990.00 root data:Selection_23", + "│ └─Selection_23 9990.00 cop[tiflash] not(isnull(test.t.a))", + "│ └─TableFullScan_22 10000.00 cop[tiflash] table:t2 keep order:false, stats:pseudo", + "└─TableReader_27(Probe) 9990.00 root data:Selection_26", + " └─Selection_26 9990.00 cop[tikv] not(isnull(test.t.a))", + " └─TableFullScan_25 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo" ], "Warn": null }, @@ -409,9 +409,9 @@ "SQL": "explain select /*+ inl_join(s) */ * from t join s on t.a=s.a and t.b = s.b", "Plan": [ "IndexJoin_11 12475.01 root inner join, inner:IndexLookUp_10, outer key:test.t.a, inner key:test.s.a, equal cond:eq(test.t.a, test.s.a), eq(test.t.b, test.s.b)", - "├─TableReader_18(Build) 9980.01 root data:Selection_17", - "│ └─Selection_17 9980.01 cop[tikv] not(isnull(test.t.a)), not(isnull(test.t.b))", - "│ └─TableFullScan_16 10000.00 cop[tikv] table:t keep order:false, stats:pseudo", + "├─TableReader_16(Build) 9980.01 root data:Selection_15", + "│ └─Selection_15 9980.01 cop[tikv] not(isnull(test.t.a)), not(isnull(test.t.b))", + "│ └─TableFullScan_14 10000.00 cop[tikv] table:t keep order:false, stats:pseudo", "└─IndexLookUp_10(Probe) 1.25 root ", " ├─Selection_8(Build) 1.25 cop[tikv] not(isnull(test.s.a))", " │ └─IndexRangeScan_6 1.25 cop[tikv] table:s, index:a(a) range: decided by [eq(test.s.a, test.t.a)], keep order:false, stats:pseudo", @@ -423,9 +423,9 @@ "SQL": "explain select /*+ inl_join(s) */ * from t join s on t.a=s.a and t.b = s.a", "Plan": [ "IndexJoin_10 12475.01 root inner join, inner:IndexLookUp_9, outer key:test.t.a, inner key:test.s.a, equal cond:eq(test.t.a, test.s.a), eq(test.t.b, test.s.a)", - "├─TableReader_17(Build) 9980.01 root data:Selection_16", - "│ └─Selection_16 9980.01 cop[tikv] not(isnull(test.t.a)), not(isnull(test.t.b))", - "│ └─TableFullScan_15 10000.00 cop[tikv] table:t keep order:false, stats:pseudo", + "├─TableReader_15(Build) 9980.01 root data:Selection_14", + "│ └─Selection_14 9980.01 cop[tikv] not(isnull(test.t.a)), not(isnull(test.t.b))", + "│ └─TableFullScan_13 10000.00 cop[tikv] table:t keep order:false, stats:pseudo", "└─IndexLookUp_9(Probe) 1.25 root ", " ├─Selection_8(Build) 1.25 cop[tikv] not(isnull(test.s.a))", " │ └─IndexRangeScan_6 1.25 cop[tikv] table:s, index:a(a) range: decided by [eq(test.s.a, test.t.a)], keep order:false, stats:pseudo", @@ -436,9 +436,9 @@ "SQL": "explain select /*+ inl_join(s) */ * from t join s on t.a=s.a and t.a = s.b", "Plan": [ "IndexJoin_11 12475.01 root inner join, inner:IndexLookUp_10, outer key:test.t.a, inner key:test.s.a, equal cond:eq(test.t.a, test.s.a), eq(test.t.a, test.s.b)", - "├─TableReader_18(Build) 9990.00 root data:Selection_17", - "│ └─Selection_17 9990.00 cop[tikv] not(isnull(test.t.a))", - "│ └─TableFullScan_16 10000.00 cop[tikv] table:t keep order:false, stats:pseudo", + "├─TableReader_16(Build) 9990.00 root data:Selection_15", + "│ └─Selection_15 9990.00 cop[tikv] not(isnull(test.t.a))", + "│ └─TableFullScan_14 10000.00 cop[tikv] table:t keep order:false, stats:pseudo", "└─IndexLookUp_10(Probe) 1.25 root ", " ├─Selection_8(Build) 1.25 cop[tikv] not(isnull(test.s.a))", " │ └─IndexRangeScan_6 1.25 cop[tikv] table:s, index:a(a) range: decided by [eq(test.s.a, test.t.a)], keep order:false, stats:pseudo", @@ -450,9 +450,9 @@ "SQL": "explain select /*+ inl_hash_join(s) */ * from t join s on t.a=s.a and t.b = s.b", "Plan": [ "IndexHashJoin_13 12475.01 root inner join, inner:IndexLookUp_10, outer key:test.t.a, inner key:test.s.a, equal cond:eq(test.t.a, test.s.a), eq(test.t.b, test.s.b)", - "├─TableReader_18(Build) 9980.01 root data:Selection_17", - "│ └─Selection_17 9980.01 cop[tikv] not(isnull(test.t.a)), not(isnull(test.t.b))", - "│ └─TableFullScan_16 10000.00 cop[tikv] table:t keep order:false, stats:pseudo", + "├─TableReader_16(Build) 9980.01 root data:Selection_15", + "│ └─Selection_15 9980.01 cop[tikv] not(isnull(test.t.a)), not(isnull(test.t.b))", + "│ └─TableFullScan_14 10000.00 cop[tikv] table:t keep order:false, stats:pseudo", "└─IndexLookUp_10(Probe) 1.25 root ", " ├─Selection_8(Build) 1.25 cop[tikv] not(isnull(test.s.a))", " │ └─IndexRangeScan_6 1.25 cop[tikv] table:s, index:a(a) range: decided by [eq(test.s.a, test.t.a)], keep order:false, stats:pseudo", @@ -464,9 +464,9 @@ "SQL": "explain select /*+ inl_hash_join(s) */ * from t join s on t.a=s.a and t.b = s.a", "Plan": [ "IndexHashJoin_12 12475.01 root inner join, inner:IndexLookUp_9, outer key:test.t.a, inner key:test.s.a, equal cond:eq(test.t.a, test.s.a), eq(test.t.b, test.s.a)", - "├─TableReader_17(Build) 9980.01 root data:Selection_16", - "│ └─Selection_16 9980.01 cop[tikv] not(isnull(test.t.a)), not(isnull(test.t.b))", - "│ └─TableFullScan_15 10000.00 cop[tikv] table:t keep order:false, stats:pseudo", + "├─TableReader_15(Build) 9980.01 root data:Selection_14", + "│ └─Selection_14 9980.01 cop[tikv] not(isnull(test.t.a)), not(isnull(test.t.b))", + "│ └─TableFullScan_13 10000.00 cop[tikv] table:t keep order:false, stats:pseudo", "└─IndexLookUp_9(Probe) 1.25 root ", " ├─Selection_8(Build) 1.25 cop[tikv] not(isnull(test.s.a))", " │ └─IndexRangeScan_6 1.25 cop[tikv] table:s, index:a(a) range: decided by [eq(test.s.a, test.t.a)], keep order:false, stats:pseudo", @@ -477,9 +477,9 @@ "SQL": "explain select /*+ inl_hash_join(s) */ * from t join s on t.a=s.a and t.a = s.b", "Plan": [ "IndexHashJoin_13 12475.01 root inner join, inner:IndexLookUp_10, outer key:test.t.a, inner key:test.s.a, equal cond:eq(test.t.a, test.s.a), eq(test.t.a, test.s.b)", - "├─TableReader_18(Build) 9990.00 root data:Selection_17", - "│ └─Selection_17 9990.00 cop[tikv] not(isnull(test.t.a))", - "│ └─TableFullScan_16 10000.00 cop[tikv] table:t keep order:false, stats:pseudo", + "├─TableReader_16(Build) 9990.00 root data:Selection_15", + "│ └─Selection_15 9990.00 cop[tikv] not(isnull(test.t.a))", + "│ └─TableFullScan_14 10000.00 cop[tikv] table:t keep order:false, stats:pseudo", "└─IndexLookUp_10(Probe) 1.25 root ", " ├─Selection_8(Build) 1.25 cop[tikv] not(isnull(test.s.a))", " │ └─IndexRangeScan_6 1.25 cop[tikv] table:s, index:a(a) range: decided by [eq(test.s.a, test.t.a)], keep order:false, stats:pseudo", diff --git a/planner/core/testdata/integration_suite_out.json b/planner/core/testdata/integration_suite_out.json index 962861d803243..d9ba53089c67f 100644 --- a/planner/core/testdata/integration_suite_out.json +++ b/planner/core/testdata/integration_suite_out.json @@ -107,8 +107,8 @@ "SQL": "explain select /*+ TIDB_INLJ(t2) */ * from t1 join t2 on t1.a = t2.a and t1.c = t2.c", "Plan": [ "IndexJoin_9 2.00 root inner join, inner:IndexLookUp_8, outer key:test.t1.a, inner key:test.t2.a, equal cond:eq(test.t1.a, test.t2.a), eq(test.t1.c, test.t2.c)", - "├─TableReader_15(Build) 1.00 root data:TableFullScan_14", - "│ └─TableFullScan_14 1.00 cop[tikv] table:t1 keep order:false", + "├─TableReader_13(Build) 1.00 root data:TableFullScan_12", + "│ └─TableFullScan_12 1.00 cop[tikv] table:t1 keep order:false", "└─IndexLookUp_8(Probe) 2.00 root ", " ├─IndexRangeScan_6(Build) 2.00 cop[tikv] table:t2, index:PRIMARY(a, b) range: decided by [eq(test.t2.a, test.t1.a)], keep order:false", " └─TableRowIDScan_7(Probe) 2.00 cop[tikv] table:t2 keep order:false" @@ -118,8 +118,8 @@ "SQL": "explain select /*+ TIDB_INLJ(t2) */ * from t1 join t2 on t1.a = t2.a and t1.c <= t2.b", "Plan": [ "IndexJoin_9 2.00 root inner join, inner:IndexLookUp_8, outer key:test.t1.a, inner key:test.t2.a, equal cond:eq(test.t1.a, test.t2.a), other cond:le(test.t1.c, test.t2.b)", - "├─TableReader_15(Build) 1.00 root data:TableFullScan_14", - "│ └─TableFullScan_14 1.00 cop[tikv] table:t1 keep order:false", + "├─TableReader_13(Build) 1.00 root data:TableFullScan_12", + "│ └─TableFullScan_12 1.00 cop[tikv] table:t1 keep order:false", "└─IndexLookUp_8(Probe) 2.00 root ", " ├─IndexRangeScan_6(Build) 2.00 cop[tikv] table:t2, index:PRIMARY(a, b) range: decided by [eq(test.t2.a, test.t1.a) le(test.t1.c, test.t2.b)], keep order:false", " └─TableRowIDScan_7(Probe) 2.00 cop[tikv] table:t2 keep order:false" @@ -129,8 +129,8 @@ "SQL": "explain select /*+ TIDB_INLJ(t2) */ * from t1 join t2 on t1.a = t2.a and t2.b = 1", "Plan": [ "IndexJoin_9 1.00 root inner join, inner:IndexLookUp_8, outer key:test.t1.a, inner key:test.t2.a, equal cond:eq(test.t1.a, test.t2.a)", - "├─TableReader_15(Build) 1.00 root data:TableFullScan_14", - "│ └─TableFullScan_14 1.00 cop[tikv] table:t1 keep order:false", + "├─TableReader_13(Build) 1.00 root data:TableFullScan_12", + "│ └─TableFullScan_12 1.00 cop[tikv] table:t1 keep order:false", "└─IndexLookUp_8(Probe) 1.00 root ", " ├─IndexRangeScan_6(Build) 1.00 cop[tikv] table:t2, index:PRIMARY(a, b) range: decided by [eq(test.t2.a, test.t1.a) eq(test.t2.b, 1)], keep order:false", " └─TableRowIDScan_7(Probe) 1.00 cop[tikv] table:t2 keep order:false" @@ -280,23 +280,23 @@ { "SQL": "desc select /*+ TIDB_INLJ(t2)*/ * from t1, t2 where t1.a = t2.a and t1.b = t2.b", "Plan": [ - "IndexJoin_12 12487.50 root inner join, inner:TableReader_11, outer key:test.t1.a, inner key:test.t2.a, equal cond:eq(test.t1.a, test.t2.a), eq(test.t1.b, test.t2.b)", - "├─IndexReader_16(Build) 9990.00 root index:IndexFullScan_15", - "│ └─IndexFullScan_15 9990.00 cop[tikv] table:t1, index:idx_t1_b(b) keep order:false, stats:pseudo", - "└─TableReader_11(Probe) 1.00 root data:Selection_10", - " └─Selection_10 1.00 cop[tikv] not(isnull(test.t2.b))", - " └─TableRangeScan_9 1.00 cop[tikv] table:t2 range: decided by [test.t1.a], keep order:false, stats:pseudo" + "IndexJoin_11 12487.50 root inner join, inner:TableReader_10, outer key:test.t1.a, inner key:test.t2.a, equal cond:eq(test.t1.a, test.t2.a), eq(test.t1.b, test.t2.b)", + "├─IndexReader_15(Build) 9990.00 root index:IndexFullScan_14", + "│ └─IndexFullScan_14 9990.00 cop[tikv] table:t1, index:idx_t1_b(b) keep order:false, stats:pseudo", + "└─TableReader_10(Probe) 1.00 root data:Selection_9", + " └─Selection_9 1.00 cop[tikv] not(isnull(test.t2.b))", + " └─TableRangeScan_8 1.00 cop[tikv] table:t2 range: decided by [test.t1.a], keep order:false, stats:pseudo" ] }, { "SQL": "desc select /*+ TIDB_INLJ(t2)*/ * from t1, t2 where t1.a = t2.a and t1.b = t2.a and t1.b = t2.b", "Plan": [ - "IndexJoin_12 12487.50 root inner join, inner:TableReader_11, outer key:test.t1.a, test.t1.b, inner key:test.t2.a, test.t2.a, equal cond:eq(test.t1.a, test.t2.a), eq(test.t1.b, test.t2.a), eq(test.t1.b, test.t2.b)", - "├─IndexReader_16(Build) 9990.00 root index:IndexFullScan_15", - "│ └─IndexFullScan_15 9990.00 cop[tikv] table:t1, index:idx_t1_b(b) keep order:false, stats:pseudo", - "└─TableReader_11(Probe) 1.00 root data:Selection_10", - " └─Selection_10 1.00 cop[tikv] not(isnull(test.t2.b))", - " └─TableRangeScan_9 1.00 cop[tikv] table:t2 range: decided by [test.t1.a test.t1.b], keep order:false, stats:pseudo" + "IndexJoin_10 12487.50 root inner join, inner:TableReader_9, outer key:test.t1.a, test.t1.b, inner key:test.t2.a, test.t2.a, equal cond:eq(test.t1.a, test.t2.a), eq(test.t1.b, test.t2.a), eq(test.t1.b, test.t2.b)", + "├─IndexReader_14(Build) 9990.00 root index:IndexFullScan_13", + "│ └─IndexFullScan_13 9990.00 cop[tikv] table:t1, index:idx_t1_b(b) keep order:false, stats:pseudo", + "└─TableReader_9(Probe) 1.00 root data:Selection_8", + " └─Selection_8 1.00 cop[tikv] not(isnull(test.t2.b))", + " └─TableRangeScan_7 1.00 cop[tikv] table:t2 range: decided by [test.t1.a test.t1.b], keep order:false, stats:pseudo" ] } ] @@ -309,8 +309,8 @@ "Plan": [ "Sort_7 12487.50 root test.t.a:asc", "└─IndexJoin_15 12487.50 root inner join, inner:IndexLookUp_14, outer key:test.t.a, inner key:test.t.b, equal cond:eq(test.t.a, test.t.b)", - " ├─TableReader_21(Build) 10000.00 root data:TableFullScan_20", - " │ └─TableFullScan_20 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo", + " ├─TableReader_19(Build) 10000.00 root data:TableFullScan_18", + " │ └─TableFullScan_18 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo", " └─IndexLookUp_14(Probe) 1.25 root ", " ├─Selection_13(Build) 1.25 cop[tikv] not(isnull(test.t.b))", " │ └─IndexRangeScan_11 1.25 cop[tikv] table:t2, index:b(b) range: decided by [eq(test.t.b, test.t.a)], keep order:false, stats:pseudo", @@ -323,8 +323,8 @@ "Plan": [ "Sort_7 12487.50 root test.t.a:asc", "└─IndexHashJoin_17 12487.50 root inner join, inner:IndexLookUp_14, outer key:test.t.a, inner key:test.t.b, equal cond:eq(test.t.a, test.t.b)", - " ├─TableReader_21(Build) 10000.00 root data:TableFullScan_20", - " │ └─TableFullScan_20 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo", + " ├─TableReader_19(Build) 10000.00 root data:TableFullScan_18", + " │ └─TableFullScan_18 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo", " └─IndexLookUp_14(Probe) 1.25 root ", " ├─Selection_13(Build) 1.25 cop[tikv] not(isnull(test.t.b))", " │ └─IndexRangeScan_11 1.25 cop[tikv] table:t2, index:b(b) range: decided by [eq(test.t.b, test.t.a)], keep order:false, stats:pseudo", @@ -351,14 +351,14 @@ "Plan": [ "Sort_10 9990.00 root test.t.b:asc", "└─Projection_12 9990.00 root test.t.a, test.t.b, test.t.c, test.t.b, Column#7", - " └─HashJoin_23 9990.00 root inner join, equal:[eq(test.t.b, test.t.b)]", - " ├─HashAgg_43(Build) 7992.00 root group by:test.t.b, funcs:max(Column#10)->Column#7, funcs:firstrow(test.t.b)->test.t.b", - " │ └─IndexReader_44 7992.00 root index:HashAgg_40", - " │ └─HashAgg_40 7992.00 cop[tikv] group by:test.t.b, funcs:max(test.t.a)->Column#10", - " │ └─IndexFullScan_33 9990.00 cop[tikv] table:t2, index:b(b) keep order:false, stats:pseudo", - " └─TableReader_47(Probe) 9990.00 root data:Selection_46", - " └─Selection_46 9990.00 cop[tikv] not(isnull(test.t.b))", - " └─TableFullScan_45 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo" + " └─HashJoin_21 9990.00 root inner join, equal:[eq(test.t.b, test.t.b)]", + " ├─HashAgg_41(Build) 7992.00 root group by:test.t.b, funcs:max(Column#10)->Column#7, funcs:firstrow(test.t.b)->test.t.b", + " │ └─IndexReader_42 7992.00 root index:HashAgg_38", + " │ └─HashAgg_38 7992.00 cop[tikv] group by:test.t.b, funcs:max(test.t.a)->Column#10", + " │ └─IndexFullScan_31 9990.00 cop[tikv] table:t2, index:b(b) keep order:false, stats:pseudo", + " └─TableReader_45(Probe) 9990.00 root data:Selection_44", + " └─Selection_44 9990.00 cop[tikv] not(isnull(test.t.b))", + " └─TableFullScan_43 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo" ], "Warnings": [] }, diff --git a/planner/core/testdata/plan_suite_out.json b/planner/core/testdata/plan_suite_out.json index efb13483078f8..3c2141fc141ba 100644 --- a/planner/core/testdata/plan_suite_out.json +++ b/planner/core/testdata/plan_suite_out.json @@ -438,7 +438,7 @@ }, { "SQL": "select * from t where t.c in (select b from t s where s.a = t.a)", - "Best": "MergeSemiJoin{TableReader(Table(t))->TableReader(Table(t))}(test.t.a,test.t.a)" + "Best": "LeftHashJoin{TableReader(Table(t))->TableReader(Table(t))}(test.t.a,test.t.a)(test.t.c,test.t.b)" }, { "SQL": "select t.c in (select b from t s where s.a = t.a) from t", From 2b841dd117c5d0f87588fe25399eb709d2f3f453 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Wed, 25 Nov 2020 18:41:49 +0800 Subject: [PATCH 159/229] table: fix insert value into hash partition table which not int (#21182) (#21238) Signed-off-by: ti-srebot --- table/tables/partition.go | 13 ++++++++++++- table/tables/partition_test.go | 16 ++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/table/tables/partition.go b/table/tables/partition.go index c8e8820b6467c..0c8e2d09cad3b 100644 --- a/table/tables/partition.go +++ b/table/tables/partition.go @@ -467,7 +467,18 @@ func (t *partitionedTable) locateRangePartition(ctx sessionctx.Context, pi *mode // TODO: supports linear hashing func (t *partitionedTable) locateHashPartition(ctx sessionctx.Context, pi *model.PartitionInfo, r []types.Datum) (int, error) { if col, ok := t.partitionExpr.Expr.(*expression.Column); ok { - ret := r[col.Index].GetInt64() + var data types.Datum + switch r[col.Index].Kind() { + case types.KindInt64, types.KindUint64: + data = r[col.Index] + default: + var err error + data, err = r[col.Index].ConvertTo(ctx.GetSessionVars().StmtCtx, types.NewFieldType(mysql.TypeLong)) + if err != nil { + return 0, err + } + } + ret := data.GetInt64() ret = ret % int64(t.meta.Partition.Num) if ret < 0 { ret = -ret diff --git a/table/tables/partition_test.go b/table/tables/partition_test.go index 26a4182bd9fc1..43b882e833384 100644 --- a/table/tables/partition_test.go +++ b/table/tables/partition_test.go @@ -502,3 +502,19 @@ partition p4 values less than (9223372036854775806))`) tk.MustQuery("select * from t_int where id = -4294967294").Check(testkit.Rows()) tk.MustQuery("select * from t_int where id < -12345 order by id desc").Check(testkit.Rows("-429496729312", "-9223372036854775803")) } + +func (ts *testSuite) TestHashPartitionInsertValue(c *C) { + tk := testkit.NewTestKitWithInit(c, ts.store) + tk.MustExec("use test") + tk.MustExec("drop tables if exists t4") + tk.MustExec(`CREATE TABLE t4( + a bit(1) DEFAULT NULL, + b int(11) DEFAULT NULL + ) PARTITION BY HASH(a) + PARTITIONS 3`) + defer tk.MustExec("drop tables if exists t4") + tk.MustExec("INSERT INTO t4 VALUES(0, 0)") + tk.MustExec("INSERT INTO t4 VALUES(1, 1)") + result := tk.MustQuery("SELECT * FROM t4 WHERE a = 1") + result.Check(testkit.Rows("\x01 1")) +} From af8e479a5b22ddd2daf383eab0cc2949974b3dab Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Wed, 25 Nov 2020 19:09:56 +0800 Subject: [PATCH 160/229] ddl: compare expression in check partition definition according to column type (#21226) (#21273) Signed-off-by: ti-srebot --- ddl/db_partition_test.go | 12 ++++++++++++ ddl/ddl_api.go | 8 ++++---- planner/core/integration_test.go | 14 ++++++++++++++ planner/core/partition_pruning_test.go | 16 ++++++++-------- 4 files changed, 38 insertions(+), 12 deletions(-) diff --git a/ddl/db_partition_test.go b/ddl/db_partition_test.go index f6fe13b079b47..d0823c7bb9fe4 100644 --- a/ddl/db_partition_test.go +++ b/ddl/db_partition_test.go @@ -386,6 +386,18 @@ create table log_message_1 ( "create table t (id int) partition by range columns (id);", ast.ErrPartitionsMustBeDefined, }, + { + "create table t(a datetime) partition by range columns (a) (partition p1 values less than ('2000-02-01'), partition p2 values less than ('20000102'));", + ddl.ErrRangeNotIncreasing, + }, + { + "create table t(a time) partition by range columns (a) (partition p1 values less than ('202020'), partition p2 values less than ('20:20:10'));", + ddl.ErrRangeNotIncreasing, + }, + { + "create table t(a time) partition by range columns (a) (partition p1 values less than ('202090'));", + ddl.ErrWrongTypeColumnValue, + }, { "create table t (id int) partition by range columns (id) (partition p0 values less than (1, 2));", ast.ErrPartitionColumnList, diff --git a/ddl/ddl_api.go b/ddl/ddl_api.go index 8d7dc9bf00019..1f3d510a94ce9 100644 --- a/ddl/ddl_api.go +++ b/ddl/ddl_api.go @@ -1775,7 +1775,7 @@ func checkRangeColumnsPartitionType(tbInfo *model.TableInfo) error { // See https://dev.mysql.com/doc/mysql-partitioning-excerpt/5.7/en/partitioning-columns.html switch colInfo.FieldType.Tp { case mysql.TypeTiny, mysql.TypeShort, mysql.TypeInt24, mysql.TypeLong, mysql.TypeLonglong: - case mysql.TypeDate, mysql.TypeDatetime: + case mysql.TypeDate, mysql.TypeDatetime, mysql.TypeDuration: case mysql.TypeVarchar, mysql.TypeString: default: return ErrNotAllowedTypeInPartition.GenWithStackByArgs(col.O) @@ -1848,11 +1848,11 @@ func checkTwoRangeColumns(ctx sessionctx.Context, curr, prev *model.PartitionDef } func parseAndEvalBoolExpr(ctx sessionctx.Context, l, r string, colInfo *model.ColumnInfo, tbInfo *model.TableInfo) (bool, error) { - lexpr, err := expression.ParseSimpleExprWithTableInfo(ctx, l, tbInfo) + lexpr, err := expression.ParseSimpleExprCastWithTableInfo(ctx, l, tbInfo, &colInfo.FieldType) if err != nil { return false, err } - rexpr, err := expression.ParseSimpleExprWithTableInfo(ctx, r, tbInfo) + rexpr, err := expression.ParseSimpleExprCastWithTableInfo(ctx, r, tbInfo, &colInfo.FieldType) if err != nil { return false, err } @@ -4361,7 +4361,7 @@ func checkRangeColumnsTypeAndValuesMatch(ctx sessionctx.Context, meta *model.Tab // Check val.ConvertTo(colType) doesn't work, so we need this case by case check. vkind := val.Kind() switch colType.Tp { - case mysql.TypeDate, mysql.TypeDatetime: + case mysql.TypeDate, mysql.TypeDatetime, mysql.TypeDuration: switch vkind { case types.KindString, types.KindBytes: if _, err := val.ConvertTo(ctx.GetSessionVars().StmtCtx, colType); err != nil { diff --git a/planner/core/integration_test.go b/planner/core/integration_test.go index f5b7e3c46ea50..fcc974bd41d5e 100644 --- a/planner/core/integration_test.go +++ b/planner/core/integration_test.go @@ -707,6 +707,20 @@ func (s *testIntegrationSuite) TestPartitionPruningForInExpr(c *C) { } } +func (s *testIntegrationSerialSuite) TestPartitionPruningWithDateType(c *C) { + tk := testkit.NewTestKit(c, s.store) + + tk.MustExec("use test") + tk.MustExec("drop table if exists t") + tk.MustExec("create table t(a datetime) partition by range columns (a) (partition p1 values less than ('20000101'), partition p2 values less than ('2000-10-01'));") + tk.MustExec("insert into t values ('20000201'), ('19000101');") + + // cannot get the statistical information immediately + // tk.MustQuery(`SELECT PARTITION_NAME,TABLE_ROWS FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_NAME = 't';`).Check(testkit.Rows("p1 1", "p2 1")) + str := tk.MustQuery(`desc select * from t where a < '2000-01-01';`).Rows()[2][3].(string) + c.Assert(strings.Contains(str, "partition:p1"), IsTrue) +} + func (s *testIntegrationSuite) TestErrNoDB(c *C) { tk := testkit.NewTestKit(c, s.store) tk.MustExec("create user test") diff --git a/planner/core/partition_pruning_test.go b/planner/core/partition_pruning_test.go index 3c4f431f2132f..c46cb70ae6c1c 100644 --- a/planner/core/partition_pruning_test.go +++ b/planner/core/partition_pruning_test.go @@ -367,11 +367,11 @@ func (s *testPartitionPruningSuite) TestPartitionRangePrunner2Date(c *C) { "a", ) lessThanDataInt := []string{ - "'1999-06-01'", + "'19990601'", "'2000-05-01'", - "'2008-04-01'", + "'20080401'", "'2010-03-01'", - "'2016-02-01'", + "'20160201'", "'2020-01-01'"} lessThan := make([]expression.Expression, len(lessThanDataInt)) for i, str := range lessThanDataInt { @@ -386,16 +386,16 @@ func (s *testPartitionPruningSuite) TestPartitionRangePrunner2Date(c *C) { result partitionRangeOR }{ {"a < '1943-02-12'", partitionRangeOR{{0, 1}}}, - {"a >= '1969-02-13'", partitionRangeOR{{0, 6}}}, + {"a >= '19690213'", partitionRangeOR{{0, 6}}}, {"a > '2003-03-13'", partitionRangeOR{{2, 6}}}, {"a < '2006-02-03'", partitionRangeOR{{0, 3}}}, - {"a = '2007-07-07'", partitionRangeOR{{2, 3}}}, + {"a = '20070707'", partitionRangeOR{{2, 3}}}, {"a > '1949-10-10'", partitionRangeOR{{0, 6}}}, - {"a > '2016-02-01' and a < '2000-01-03'", partitionRangeOR{}}, - {"a < '1969-11-12' or a >= '2019-09-18'", partitionRangeOR{{0, 1}, {5, 6}}}, + {"a > '2016-02-01' and a < '20000103'", partitionRangeOR{}}, + {"a < '19691112' or a >= '2019-09-18'", partitionRangeOR{{0, 1}, {5, 6}}}, {"a is null", partitionRangeOR{{0, 1}}}, {"'2003-02-27' >= a", partitionRangeOR{{0, 3}}}, - {"'2014-10-24' < a", partitionRangeOR{{4, 6}}}, + {"'20141024' < a", partitionRangeOR{{4, 6}}}, {"'2003-03-30' > a", partitionRangeOR{{0, 3}}}, } From 6655840a458d84a0f3693944abab5b45912beac7 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Wed, 25 Nov 2020 19:24:49 +0800 Subject: [PATCH 161/229] executor: Fix IndexMergeReader works incorrectly under RC isolation level (#21208) (#21253) Signed-off-by: ti-srebot Signed-off-by: MyonKeminta --- executor/builder.go | 53 +++++++++++++++++-------------------- executor/point_get.go | 6 ----- session/pessimistic_test.go | 30 +++++++++++++++++++++ 3 files changed, 54 insertions(+), 35 deletions(-) diff --git a/executor/builder.go b/executor/builder.go index d192cc691fcfd..4e1fd5a1b4161 100644 --- a/executor/builder.go +++ b/executor/builder.go @@ -74,11 +74,12 @@ var ( // executorBuilder builds an Executor from a Plan. // The InfoSchema must not change during execution. type executorBuilder struct { - ctx sessionctx.Context - is infoschema.InfoSchema - snapshotTS uint64 // The consistent snapshot timestamp for the executor to read data. - err error // err is set when there is error happened during Executor building process. - hasLock bool + ctx sessionctx.Context + is infoschema.InfoSchema + snapshotTS uint64 // The consistent snapshot timestamp for the executor to read data. + snapshotTSCached bool + err error // err is set when there is error happened during Executor building process. + hasLock bool } func newExecutorBuilder(ctx sessionctx.Context, is infoschema.InfoSchema) *executorBuilder { @@ -1290,8 +1291,25 @@ func (b *executorBuilder) buildTableDual(v *plannercore.PhysicalTableDual) Execu return e } +// `getSnapshotTS` returns the timestamp of the snapshot that a reader should read. func (b *executorBuilder) getSnapshotTS() (uint64, error) { + // `refreshForUpdateTSForRC` should always be invoked before returning the cached value to + // ensure the correct value is returned even the `snapshotTS` field is already set by other + // logics. However for `IndexLookUpMergeJoin` and `IndexLookUpHashJoin`, it requires caching the + // snapshotTS and and may even use it after the txn being destroyed. In this case, mark + // `snapshotTSCached` to skip `refreshForUpdateTSForRC`. + if b.snapshotTSCached { + return b.snapshotTS, nil + } + + if b.ctx.GetSessionVars().IsPessimisticReadConsistency() { + if err := b.refreshForUpdateTSForRC(); err != nil { + return 0, err + } + } + if b.snapshotTS != 0 { + b.snapshotTSCached = true // Return the cached value. return b.snapshotTS, nil } @@ -1308,6 +1326,7 @@ func (b *executorBuilder) getSnapshotTS() (uint64, error) { if b.snapshotTS == 0 { return 0, errors.Trace(ErrGetStartTS) } + b.snapshotTSCached = true return snapshotTS, nil } @@ -2361,12 +2380,6 @@ func buildNoRangeTableReader(b *executorBuilder, v *plannercore.PhysicalTableRea // buildTableReader builds a table reader executor. It first build a no range table reader, // and then update it ranges from table scan plan. func (b *executorBuilder) buildTableReader(v *plannercore.PhysicalTableReader) *TableReaderExecutor { - if b.ctx.GetSessionVars().IsPessimisticReadConsistency() { - if err := b.refreshForUpdateTSForRC(); err != nil { - b.err = err - return nil - } - } ret, err := buildNoRangeTableReader(b, v) if err != nil { b.err = err @@ -2435,12 +2448,6 @@ func buildNoRangeIndexReader(b *executorBuilder, v *plannercore.PhysicalIndexRea } func (b *executorBuilder) buildIndexReader(v *plannercore.PhysicalIndexReader) *IndexReaderExecutor { - if b.ctx.GetSessionVars().IsPessimisticReadConsistency() { - if err := b.refreshForUpdateTSForRC(); err != nil { - b.err = err - return nil - } - } ret, err := buildNoRangeIndexReader(b, v) if err != nil { b.err = err @@ -2539,12 +2546,6 @@ func buildNoRangeIndexLookUpReader(b *executorBuilder, v *plannercore.PhysicalIn } func (b *executorBuilder) buildIndexLookUpReader(v *plannercore.PhysicalIndexLookUpReader) *IndexLookUpExecutor { - if b.ctx.GetSessionVars().IsPessimisticReadConsistency() { - if err := b.refreshForUpdateTSForRC(); err != nil { - b.err = err - return nil - } - } ret, err := buildNoRangeIndexLookUpReader(b, v) if err != nil { b.err = err @@ -3065,12 +3066,6 @@ func NewRowDecoder(ctx sessionctx.Context, schema *expression.Schema, tbl *model } func (b *executorBuilder) buildBatchPointGet(plan *plannercore.BatchPointGetPlan) Executor { - if b.ctx.GetSessionVars().IsPessimisticReadConsistency() { - if err := b.refreshForUpdateTSForRC(); err != nil { - b.err = err - return nil - } - } startTS, err := b.getSnapshotTS() if err != nil { b.err = err diff --git a/executor/point_get.go b/executor/point_get.go index 46756260acf97..4f48ff4e0784e 100644 --- a/executor/point_get.go +++ b/executor/point_get.go @@ -34,12 +34,6 @@ import ( ) func (b *executorBuilder) buildPointGet(p *plannercore.PointGetPlan) Executor { - if b.ctx.GetSessionVars().IsPessimisticReadConsistency() { - if err := b.refreshForUpdateTSForRC(); err != nil { - b.err = err - return nil - } - } startTS, err := b.getSnapshotTS() if err != nil { b.err = err diff --git a/session/pessimistic_test.go b/session/pessimistic_test.go index db8d3e11b7132..a7c7ab1feb69f 100644 --- a/session/pessimistic_test.go +++ b/session/pessimistic_test.go @@ -1209,6 +1209,36 @@ func (s *testPessimisticSuite) TestRCSubQuery(c *C) { tk.MustExec("rollback") } +func (s *testPessimisticSuite) TestRCIndexMerge(c *C) { + tk := testkit.NewTestKitWithInit(c, s.store) + tk.MustExec("drop table if exists t") + tk.MustExec(`create table t (id int primary key, v int, a int not null, b int not null, + index ia (a), index ib (b))`) + tk.MustExec("insert into t values (1, 10, 1, 1)") + + tk.MustExec("set transaction isolation level read committed") + tk.MustExec("begin pessimistic") + tk.MustQuery("select /*+ USE_INDEX_MERGE(t, ia, ib) */ * from t where a > 0 or b > 0").Check( + testkit.Rows("1 10 1 1"), + ) + tk.MustQuery("select /*+ NO_INDEX_MERGE() */ * from t where a > 0 or b > 0").Check( + testkit.Rows("1 10 1 1"), + ) + + tk2 := testkit.NewTestKitWithInit(c, s.store) + tk2.MustExec("update t set v = 11 where id = 1") + + // Make sure index merge plan is used. + plan := tk.MustQuery("explain select /*+ USE_INDEX_MERGE(t, ia, ib) */ * from t where a > 0 or b > 0").Rows()[0][0].(string) + c.Assert(strings.Contains(plan, "IndexMerge_"), IsTrue) + tk.MustQuery("select /*+ USE_INDEX_MERGE(t, ia, ib) */ * from t where a > 0 or b > 0").Check( + testkit.Rows("1 11 1 1"), + ) + tk.MustQuery("select /*+ NO_INDEX_MERGE() */ * from t where a > 0 or b > 0").Check( + testkit.Rows("1 11 1 1"), + ) +} + func (s *testPessimisticSuite) TestGenerateColPointGet(c *C) { tk := testkit.NewTestKitWithInit(c, s.store) defer func() { From e0f90565eb2c316d001f1a81df73dd181525c719 Mon Sep 17 00:00:00 2001 From: wjHuang Date: Wed, 25 Nov 2020 19:39:19 +0800 Subject: [PATCH 162/229] session: fix a bug cause panic when retry is enable. (#21285) Signed-off-by: wjhuang2016 --- executor/executor_test.go | 20 ++++++++++++++++++++ session/session.go | 5 ++++- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/executor/executor_test.go b/executor/executor_test.go index 709c0776877e6..df561d5970aae 100644 --- a/executor/executor_test.go +++ b/executor/executor_test.go @@ -6284,3 +6284,23 @@ func (s *testSuite) TestIssue19667(c *C) { tk.MustExec("INSERT INTO t VALUES('1988-04-17 01:59:59')") tk.MustQuery(`SELECT DATE_ADD(a, INTERVAL 1 SECOND) FROM t`).Check(testkit.Rows("1988-04-17 02:00:00")) } + +func (s *testSuite) TestTxnRetry(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk2 := testkit.NewTestKit(c, s.store) + tk.MustExec("use test;") + tk2.MustExec("use test;") + tk.MustExec("drop table if exists t;") + tk.MustExec("create table t (a int);") + tk.MustExec("insert into t values (1)") + tk.MustExec("set @@tidb_disable_txn_auto_retry=0;") + tk.MustExec("set autocommit=0;") + tk.MustQuery("select * from t;").Check(testkit.Rows("1")) + tk.MustExec("SET SQL_SELECT_LIMIT=DEFAULT;") + + tk2.MustExec("update t set a=2") + + tk.MustExec("update t set a=3") + tk.MustExec("commit") + tk.MustQuery("select * from t").Check(testkit.Rows("3")) +} diff --git a/session/session.go b/session/session.go index de28262388b26..cf306fd24c7c2 100644 --- a/session/session.go +++ b/session/session.go @@ -641,7 +641,10 @@ func (s *session) retry(ctx context.Context, maxCnt uint) (err error) { orgStartTS := sessVars.TxnCtx.StartTS label := s.getSQLLabel() for { - s.PrepareTxnCtx(ctx) + err = s.NewTxn(ctx) + if err != nil { + return err + } s.sessionVars.RetryInfo.ResetOffset() for i, sr := range nh.history { st := sr.st From 07dd57146ba93c199dd892c29ce5594942dfef2f Mon Sep 17 00:00:00 2001 From: Zhou Kunqin <25057648+time-and-fate@users.noreply.github.com> Date: Wed, 25 Nov 2020 19:54:20 +0800 Subject: [PATCH 163/229] go.mod, bindinfo: update parser to fix binding doesn't work for prepared stmt with LIMIT (#21214) (#21248) --- bindinfo/bind_test.go | 61 +++++++++++++++++++++++++++++++++++++++++++ go.sum | 29 +++----------------- 2 files changed, 64 insertions(+), 26 deletions(-) diff --git a/bindinfo/bind_test.go b/bindinfo/bind_test.go index 2b9735f38931e..29e953fffd3d3 100644 --- a/bindinfo/bind_test.go +++ b/bindinfo/bind_test.go @@ -15,9 +15,11 @@ package bindinfo_test import ( "context" + "crypto/tls" "flag" "fmt" "os" + "strconv" "testing" "time" @@ -34,6 +36,7 @@ import ( "github.com/pingcap/tidb/session" "github.com/pingcap/tidb/store/mockstore" "github.com/pingcap/tidb/store/mockstore/mocktikv" + "github.com/pingcap/tidb/util" "github.com/pingcap/tidb/util/logutil" "github.com/pingcap/tidb/util/stmtsummary" "github.com/pingcap/tidb/util/testkit" @@ -59,6 +62,40 @@ type testSuite struct { *parser.Parser } +type mockSessionManager struct { + PS []*util.ProcessInfo +} + +func (msm *mockSessionManager) ShowProcessList() map[uint64]*util.ProcessInfo { + ret := make(map[uint64]*util.ProcessInfo) + for _, item := range msm.PS { + ret[item.ID] = item + } + return ret +} + +func (msm *mockSessionManager) GetProcessInfo(id uint64) (*util.ProcessInfo, bool) { + for _, item := range msm.PS { + if item.ID == id { + return item, true + } + } + return &util.ProcessInfo{}, false +} + +func (msm *mockSessionManager) Kill(cid uint64, query bool) { +} + +func (msm *mockSessionManager) KillAllConnections() { +} + +func (msm *mockSessionManager) UpdateTLSConfig(cfg *tls.Config) { +} + +func (msm *mockSessionManager) ServerID() uint64 { + return 1 +} + var mockTikv = flag.Bool("mockTikv", true, "use mock tikv store in bind test") func (s *testSuite) SetUpSuite(c *C) { @@ -1150,3 +1187,27 @@ func (s *testSuite) TestbindingSource(c *C) { bind = bindData.Bindings[0] c.Assert(bind.Source, Equals, bindinfo.Capture) } + +func (s *testSuite) TestIssue19836(c *C) { + tk := testkit.NewTestKit(c, s.store) + s.cleanBindingEnv(tk) + tk.MustExec("use test") + tk.MustExec("drop table if exists t") + tk.MustExec("create table t(a int, key (a));") + tk.MustExec("CREATE SESSION BINDING FOR select * from t where a = 1 limit 5, 5 USING select * from t ignore index (a) where a = 1 limit 5, 5;") + tk.MustExec("PREPARE stmt FROM 'select * from t where a = 40 limit ?, ?';") + tk.MustExec("set @a=1;") + tk.MustExec("set @b=2;") + tk.MustExec("EXECUTE stmt USING @a, @b;") + tk.Se.SetSessionManager(&mockSessionManager{ + PS: []*util.ProcessInfo{tk.Se.ShowProcess()}, + }) + explainResult := testkit.Rows( + "Limit_8 2.00 0 root time:0s, loops:0 offset:1, count:2 N/A N/A", + "└─TableReader_14 3.00 0 root time:0s, loops:0 data:Limit_13 N/A N/A", + " └─Limit_13 3.00 0 cop[tikv] time:0ns, loops:0 offset:0, count:3 N/A N/A", + " └─Selection_12 3.00 0 cop[tikv] time:0ns, loops:0 eq(test.t.a, 40) N/A N/A", + " └─TableFullScan_11 3000.00 0 cop[tikv] table:t time:0ns, loops:0 keep order:false, stats:pseudo N/A N/A", + ) + tk.MustQuery("explain for connection " + strconv.FormatUint(tk.Se.ShowProcess().ID, 10)).Check(explainResult) +} diff --git a/go.sum b/go.sum index 0cd0cd033dd0f..9d91c455edef9 100644 --- a/go.sum +++ b/go.sum @@ -5,7 +5,6 @@ cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6A cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= -cloud.google.com/go v0.50.0 h1:0E3eE8MX426vUOs7aHfI7aN1BrIzzzf4ccKCSfSjGmc= cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= cloud.google.com/go v0.51.0 h1:PvKAVQWCtlGUSlZkGW3QLelKaWq7KYv/MW1EboG8bfM= cloud.google.com/go v0.51.0/go.mod h1:hWtGJ6gnXH+KgDv+V0zFGDvpi07n3z8ZNj3T1RW0Gcw= @@ -27,14 +26,11 @@ github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03 github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/Jeffail/gabs/v2 v2.5.1 h1:ANfZYjpMlfTTKebycu4X1AgkVWumFVDYQl7JwOr4mDk= github.com/Jeffail/gabs/v2 v2.5.1/go.mod h1:xCn81vdHKxFUuWWAaD5jCTQDNPBMh5pPs9IJ+NcziBI= -github.com/KyleBanks/depth v1.2.1 h1:5h8fQADFrWtarTdtDudMmGsC7GPbOAu6RVB3ffsVFHc= github.com/KyleBanks/depth v1.2.1/go.mod h1:jzSb9d0L43HxTQfT+oSA1EEp2q+ne2uh6XgeJcm8brE= github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/PuerkitoBio/purell v1.1.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= -github.com/PuerkitoBio/purell v1.1.1 h1:WEQqlqaGbrPkxLJWfBwQmfEAE1Z7ONdDLqrN38tNFfI= github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= -github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d h1:G0m3OIz70MZUWq3EgK3CesDbo8upS2Vm9/P3FtgI+Jk= github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= @@ -87,7 +83,6 @@ github.com/coreos/go-semver v0.3.0 h1:wkHLiw0WNATZnSG7epLsujiMCgPAc9xhjJ4tgnAxmf github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd v0.0.0-20181031085051-9002847aa142/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e h1:Wf6HqHfScWJN9/ZjdUKyjop4mf3Qdd+1TvvltAvM3m8= github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd v0.0.0-20190719114852-fd7a80b32e1f h1:JOrtw2xFKzlg+cbHpyrpLDmnN1HqhBfnX7WDiW7eG2c= github.com/coreos/go-systemd v0.0.0-20190719114852-fd7a80b32e1f/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= @@ -95,10 +90,8 @@ github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfc github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f h1:lBNOc5arjvs8E5mO2tbpBpLoyyu8B6e44T7hJy6potg= github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/corona10/goimagehash v1.0.2/go.mod h1:/l9umBhvcHQXVtQO1V6Gp1yD20STawkhRnnX0D1bvVI= -github.com/cpuguy83/go-md2man v1.0.10 h1:BSKMNlYxDvnunlTymqtgONjNnaRV1sTpcovwwjF22jk= github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/cpuguy83/go-md2man/v2 v2.0.0 h1:EoUDS0afbrsXAZ9YQ9jdu/mZ2sXgT1/2yyNng4PGlyM= github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= github.com/cznic/golex v0.0.0-20181122101858-9c343928389c/go.mod h1:+bmmJDNmKlhWNG+gwWCkaBoTy39Fs+bzRxVBzoTQbIc= @@ -139,7 +132,6 @@ github.com/erikstmartin/go-testdb v0.0.0-20160219214506-8d10e4a1bae5/go.mod h1:a github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.9.0 h1:8xPHl4/q1VyqGIPif1F+1V3Y3lSmrq01EabUW3CoW5s= github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= -github.com/fatih/structtag v1.2.0 h1:/OdNE99OxoI/PqaW/SuSK9uxxT3f/tcSZgon/ssNSx4= github.com/fatih/structtag v1.2.0/go.mod h1:mBJUNpUnHmRKrKlQQlmCrh5PuhftFbNv8Ys4/aAZl94= github.com/fogleman/gg v1.3.0/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= @@ -148,7 +140,6 @@ github.com/fsouza/fake-gcs-server v1.15.0/go.mod h1:HNxAJ/+FY/XSsxuwz8iIYdp2GtMm github.com/fsouza/fake-gcs-server v1.17.0 h1:OeH75kBZcZa3ZE+zz/mFdJ2btt9FgqfjI7gIh9+5fvk= github.com/fsouza/fake-gcs-server v1.17.0/go.mod h1:D1rTE4YCyHFNa99oyJJ5HyclvN/0uQR+pM/VdlL83bw= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/ghodss/yaml v1.0.1-0.20190212211648-25d852aebe32 h1:Mn26/9ZMNWSw9C9ERFA1PUxfmGpolnw2v0bKOREu5ew= github.com/ghodss/yaml v1.0.1-0.20190212211648-25d852aebe32/go.mod h1:GIjDIg/heH5DOkXY3YJ/wNhfHsQHoXGjl8G8amsYQ1I= github.com/gin-contrib/gzip v0.0.1/go.mod h1:fGBJBCdt6qCZuCAOwWuFhBB4OOq9EFqlo5dEaFhhu5w= github.com/gin-contrib/sse v0.0.0-20170109093832-22d885f9ecc7/go.mod h1:VJ0WA2NBN22VlZ2dKZQPAPnyWw5XTlK1KymzLKsr59s= @@ -170,25 +161,20 @@ github.com/go-ole/go-ole v1.2.4 h1:nNBDSCOigTSiarFpYE9J/KtEA1IOW4CNeqT9TQDqCxI= github.com/go-ole/go-ole v1.2.4/go.mod h1:XCwSNxSkXRo4vlyPy93sltvi/qJq0jqQhjqQNIwKuxM= github.com/go-openapi/jsonpointer v0.17.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M= github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg= -github.com/go-openapi/jsonpointer v0.19.3 h1:gihV7YNZK1iK6Tgwwsxo2rJbD1GTbdm72325Bq8FI3w= github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= github.com/go-openapi/jsonreference v0.17.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I= github.com/go-openapi/jsonreference v0.19.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I= github.com/go-openapi/jsonreference v0.19.2/go.mod h1:jMjeRr2HHw6nAVajTXJ4eiUwohSTlpa0o73RUL1owJc= -github.com/go-openapi/jsonreference v0.19.3 h1:5cxNfTy0UVC3X8JL5ymxzyoUZmo8iZb+jeTWn7tUa8o= github.com/go-openapi/jsonreference v0.19.3/go.mod h1:rjx6GuL8TTa9VaixXglHmQmIL98+wF9xc8zWvFonSJ8= github.com/go-openapi/spec v0.19.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI= github.com/go-openapi/spec v0.19.4/go.mod h1:FpwSN1ksY1eteniUU7X0N/BgJ7a4WvBFVA8Lj9mJglo= -github.com/go-openapi/spec v0.19.7 h1:0xWSeMd35y5avQAThZR2PkEuqSosoS5t6gDH4L8n11M= github.com/go-openapi/spec v0.19.7/go.mod h1:Hm2Jr4jv8G1ciIAo+frC/Ft+rR2kQDh8JHKHb3gWUSk= github.com/go-openapi/swag v0.17.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg= github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= -github.com/go-openapi/swag v0.19.8 h1:vfK6jLhs7OI4tAXkvkooviaE1JEPcw3mutyegLHHjmk= github.com/go-openapi/swag v0.19.8/go.mod h1:ao+8BpOPyKdpQz3AOJfbeEVpLmWAvlT1IfTe5McPyhY= github.com/go-playground/locales v0.12.1/go.mod h1:IUMDtCfWo/w/mtMfIE/IG2K+Ey3ygWanZIBtBW0W2TM= github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= -github.com/go-playground/overalls v0.0.0-20180201144345-22ec1a223b7c h1:3bjbKXoj7jBYdHpQFbKL2546c4dtltTHzjo+5i4CHBU= github.com/go-playground/overalls v0.0.0-20180201144345-22ec1a223b7c/go.mod h1:UqxAgEOt89sCiXlrc/ycnx00LVvUO/eS8tMUkWX4R7w= github.com/go-playground/universal-translator v0.16.0/go.mod h1:1AnU7NaIRDWWzGEKwgtJRd2xk99HeFyHw3yid4rvQIY= github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= @@ -292,7 +278,6 @@ github.com/jmespath/go-jmespath v0.3.0/go.mod h1:9QtRXoHjLGCJ5IBSaohpXITPlowMeeY github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= github.com/jonboulle/clockwork v0.1.0 h1:VKV+ZcuP6l3yW9doeqz6ziZGgcynBVQO+obU0+0hcPo= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= -github.com/joomcode/errorx v1.0.1 h1:CalpDWz14ZHd68fIqluJasJosAewpz2TFaJALrUxjrk= github.com/joomcode/errorx v1.0.1/go.mod h1:kgco15ekB6cs+4Xjzo7SPeXzx38PbJzBwbnu9qfVNHQ= github.com/json-iterator/go v1.1.5/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= @@ -348,6 +333,7 @@ github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHX github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= +github.com/mattn/go-runewidth v0.0.7 h1:Ei8KR0497xHyKJPAv59M1dkC+rOZCMBJ+t3fZ+twI54= github.com/mattn/go-runewidth v0.0.7/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mattn/go-runewidth v0.0.9 h1:Lm995f3rfxdpd6TSmuVCHVb/QhupuXlYr8sCI/QdE+0= github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= @@ -458,7 +444,6 @@ github.com/pingcap/parser v0.0.0-20200603032439-c4ecb4508d2f/go.mod h1:9v0Edh8Ib github.com/pingcap/parser v0.0.0-20200623164729-3a18f1e5dceb/go.mod h1:vQdbJqobJAgFyiRNNtXahpMoGWwPEuWciVEK5A20NS0= github.com/pingcap/parser v0.0.0-20200803072748-fdf66528323d/go.mod h1:vQdbJqobJAgFyiRNNtXahpMoGWwPEuWciVEK5A20NS0= github.com/pingcap/parser v0.0.0-20200901062802-475ea5e2e0a7/go.mod h1:vQdbJqobJAgFyiRNNtXahpMoGWwPEuWciVEK5A20NS0= -github.com/pingcap/parser v0.0.0-20200921063432-e220cfcfd026 h1:i+r4P7hb4KpW74nPn+P/hqtsW3fu4U9A4JGAYKWMvtw= github.com/pingcap/parser v0.0.0-20200921063432-e220cfcfd026/go.mod h1:dMMvhqeowLnAsDWspyalgxXoRUnP09cZ7wAnpt2e/S8= github.com/pingcap/parser v0.0.0-20201123083041-dfb0acc7c2fa h1:HFoeh5c1SCVo492d4mOuud3cxmtTUcenx65ttNzs6O4= github.com/pingcap/parser v0.0.0-20201123083041-dfb0acc7c2fa/go.mod h1:GbEr2PgY72/4XqPZzmzstlOU/+il/wrjeTNFs6ihsSE= @@ -527,14 +512,13 @@ github.com/sasha-s/go-deadlock v0.2.0/go.mod h1:StQn567HiB1fF2yJ44N9au7wOhrPS3iZ github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= github.com/sergi/go-diff v1.0.1-0.20180205163309-da645544ed44 h1:tB9NOR21++IjLyVx3/PCPhWMwqGNCMQEH96A6dMZ/gc= github.com/sergi/go-diff v1.0.1-0.20180205163309-da645544ed44/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= -github.com/shirou/gopsutil v2.19.10+incompatible h1:lA4Pi29JEVIQIgATSeftHSY0rMGI9CLrl2ZvDLiahto= github.com/shirou/gopsutil v2.19.10+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= github.com/shirou/gopsutil v2.20.3+incompatible h1:0JVooMPsT7A7HqEYdydp/OfjSOYSjhXV7w1hkKj/NPQ= github.com/shirou/gopsutil v2.20.3+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= -github.com/shirou/w32 v0.0.0-20160930032740-bb4de0191aa4 h1:udFKJ0aHUL60LboW/A+DfgoHVedieIzIXE8uylPue0U= github.com/shirou/w32 v0.0.0-20160930032740-bb4de0191aa4/go.mod h1:qsXQc7+bwAM3Q1u/4XEfrquwF8Lw7D7y5cD8CuHnfIc= github.com/shurcooL/httpfs v0.0.0-20190707220628-8d4bc4ba7749 h1:bUGsEnyNbVPw06Bs80sCeARAlK8lhwqGyi6UT8ymuGk= github.com/shurcooL/httpfs v0.0.0-20190707220628-8d4bc4ba7749/go.mod h1:ZY1cvUeJuFPAdZ/B6v7RHavJWZn2YPVFQ1OSXhCGOkg= +github.com/shurcooL/httpgzip v0.0.0-20190720172056-320755c1c1b0 h1:mj/nMDAwTBiaCqMEs4cYCqF7pO6Np7vhy1D1wcQGz+E= github.com/shurcooL/httpgzip v0.0.0-20190720172056-320755c1c1b0/go.mod h1:919LwcH0M7/W4fcZ0/jy0qGght1GIhqyS/EgWGH2j5Q= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/shurcooL/vfsgen v0.0.0-20181020040650-a97a25d856ca/go.mod h1:TrYk7fJVaAttu97ZZKrO9UbRa8izdowaMIZcxYMbVaw= @@ -594,7 +578,6 @@ github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1 github.com/tmc/grpc-websocket-proxy v0.0.0-20171017195756-830351dc03c6/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5 h1:LnC5Kc/wtumK+WB441p7ynQJzVuNRJiqddSIE3IlSEQ= github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/uber-go/atomic v1.3.2 h1:Azu9lPBWRNKzYXSIwRfgRuDuS0YKsK4NFhiQv98gkxo= github.com/uber-go/atomic v1.3.2/go.mod h1:/Ct5t2lcmbJ4OSe/waGBoaVvVqtO0bmtfVNex1PFV8g= github.com/uber-go/atomic v1.4.0 h1:yOuPqEq4ovnhEjpHmfFwsqBXDYbQeT6Nb0bwD6XnD5o= github.com/uber-go/atomic v1.4.0/go.mod h1:/Ct5t2lcmbJ4OSe/waGBoaVvVqtO0bmtfVNex1PFV8g= @@ -615,7 +598,6 @@ github.com/unrolled/render v0.0.0-20171102162132-65450fb6b2d3/go.mod h1:tu82oB5W github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/urfave/cli v1.22.2/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= github.com/urfave/cli/v2 v2.1.1/go.mod h1:SE9GqnLQmjVa0iPEY0f1w3ygNIYcIJ0OKPMoW2caLfQ= -github.com/urfave/negroni v0.3.0 h1:PaXOb61mWeZJxc1Ji2xJjpVg9QfPo0rrB+lHyBxGNSU= github.com/urfave/negroni v0.3.0/go.mod h1:Meg73S6kFm/4PpbYdq35yYWoCZ9mS/YSx+lKnmiohz4= github.com/vmihailenco/msgpack/v4 v4.3.11/go.mod h1:gborTTJjAo/GWTqqRjrLCn9pgNN+NXzzngzBKDPIqw4= github.com/vmihailenco/msgpack/v5 v5.0.0-beta.1/go.mod h1:xlngVLeyQ/Qi05oQxhQ+oTuqa03RjMwMfk/7/TCs+QI= @@ -741,7 +723,6 @@ golang.org/x/net v0.0.0-20200813134508-3edf25e44fcc/go.mod h1:/O7V0waA8r7cgGh81R golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6 h1:pE8b58s1HRDMi8RDc79m0HISf9D4TzseP40cEA6IGfs= golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d h1:TzXSXBo42m9gQenoE3b9BGiEpg5IG2JkU5FkPIawgtw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -789,7 +770,6 @@ golang.org/x/sys v0.0.0-20200819171115-d785dc25833f/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= -golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.4 h1:0YWbFKbhXG/wIiuHDSKpS0Iy7FSA+u45VtBMfQcFTTc= golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= @@ -841,6 +821,7 @@ golang.org/x/tools v0.0.0-20200820010801-b793a1359eac h1:DugppSxw0LSF8lcjaODPJZo golang.org/x/tools v0.0.0-20200820010801-b793a1359eac/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -872,7 +853,6 @@ google.golang.org/genproto v0.0.0-20190927181202-20e1ac93f88c/go.mod h1:IbNlFCBr google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb h1:ADPHZzpzM4tk4V4S5cnCrr5SwzvlrPRmqqCuJDB8UTs= google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20200108215221-bd8f9a0ef82f h1:2wh8dWY8959cBGQvk1RD+/eQBgRYYDaZ+hT0/zsARoA= google.golang.org/genproto v0.0.0-20200108215221-bd8f9a0ef82f/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= @@ -924,17 +904,14 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -honnef.co/go/tools v0.0.1-2020.1.5 h1:nI5egYTGJakVyOryqLs1cQO5dO0ksin5XXs2pspk75k= honnef.co/go/tools v0.0.1-2020.1.5/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.6 h1:W18jzjh8mfPez+AwGLxmOImucz/IFjpNlrKVnaj2YVc= honnef.co/go/tools v0.0.1-2020.1.6/go.mod h1:pyyisuGw24ruLjrr1ddx39WE0y9OooInRzEYLhQB2YY= k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= -sigs.k8s.io/yaml v1.1.0 h1:4A07+ZFc2wgJwo8YNlQpr1rVlgUDlxXHhPJciaPY5gs= sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= sigs.k8s.io/yaml v1.2.0 h1:kr/MCeFWJWTwyaHoR9c8EjH9OumOmoF9YGiZd7lFm/Q= sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= -sourcegraph.com/sourcegraph/appdash v0.0.0-20180531100431-4c381bd170b4 h1:VO9oZbbkvTwqLimlQt15QNdOOBArT2dw/bvzsMZBiqQ= sourcegraph.com/sourcegraph/appdash v0.0.0-20180531100431-4c381bd170b4/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0 h1:ucqkfpjg9WzSUubAO62csmucvxl4/JeW3F4I4909XkM= sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= From d09e8541fa338d7723dfb54f96c5da6b277bb634 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Wed, 25 Nov 2020 21:36:19 +0800 Subject: [PATCH 164/229] session: fix unit test TestUnionScanForMemBufferReader (#21258) (#21292) Signed-off-by: ti-srebot --- session/session_test.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/session/session_test.go b/session/session_test.go index 13c4b3a80e200..5d7e89fb6f4f1 100644 --- a/session/session_test.go +++ b/session/session_test.go @@ -3228,7 +3228,8 @@ func (s *testSessionSuite2) TestPerStmtTaskID(c *C) { c.Assert(taskID1 != taskID2, IsTrue) } -func (s *testSessionSuite2) TestDeprecateSlowLogMasking(c *C) { +// TestDeprecateSlowLogMasking should be in serial suite because it changes a global variable. +func (s *testSessionSerialSuite) TestDeprecateSlowLogMasking(c *C) { tk := testkit.NewTestKitWithInit(c, s.store) tk.MustExec("set @@global.tidb_redact_log=0") From 37fe5ec6a9fc21ff8661d9a55416e3b5553b569e Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Wed, 25 Nov 2020 22:04:49 +0800 Subject: [PATCH 165/229] expression, executor: allow insert strings with overflowed trailing spaces (#20987) (#21282) Signed-off-by: ti-srebot --- executor/insert_test.go | 16 ++++++++++++++++ types/datum.go | 26 ++++++++++++++++++++++---- 2 files changed, 38 insertions(+), 4 deletions(-) diff --git a/executor/insert_test.go b/executor/insert_test.go index 561def8a7c00e..d8671e6e25e45 100644 --- a/executor/insert_test.go +++ b/executor/insert_test.go @@ -1268,3 +1268,19 @@ func (s *testSuite9) TestIssue20768(c *C) { tk.MustQuery("select /*+ inl_merge_join(t1) */ * from t1 join t2 on t1.a = t2.a").Check(testkit.Rows("0 0")) tk.MustQuery("select /*+ merge_join(t1) */ * from t1 join t2 on t1.a = t2.a").Check(testkit.Rows("0 0")) } + +func (s *testSuite9) TestIssue10402(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk.MustExec("create table vctt (v varchar(4), c char(4))") + tk.MustExec("insert into vctt values ('ab ', 'ab ')") + tk.MustQuery("select * from vctt").Check(testkit.Rows("ab ab")) + tk.MustExec("delete from vctt") + tk.Se.GetSessionVars().StmtCtx.SetWarnings(nil) + tk.MustExec("insert into vctt values ('ab\\n\\n\\n', 'ab\\n\\n\\n'), ('ab\\t\\t\\t', 'ab\\t\\t\\t'), ('ab ', 'ab '), ('ab\\r\\r\\r', 'ab\\r\\r\\r')") + c.Check(tk.Se.GetSessionVars().StmtCtx.WarningCount(), Equals, uint16(4)) + warns := tk.Se.GetSessionVars().StmtCtx.GetWarnings() + c.Check(fmt.Sprintf("%v", warns), Equals, "[{Warning [types:1265]Data truncated, field len 4, data len 5} {Warning [types:1265]Data truncated, field len 4, data len 5} {Warning [types:1265]Data truncated, field len 4, data len 6} {Warning [types:1265]Data truncated, field len 4, data len 5}]") + tk.MustQuery("select * from vctt").Check(testkit.Rows("ab\n\n ab\n\n", "ab\t\t ab\t\t", "ab ab", "ab\r\r ab\r\r")) + tk.MustQuery("select length(v), length(c) from vctt").Check(testkit.Rows("4 4", "4 4", "4 2", "4 4")) +} diff --git a/types/datum.go b/types/datum.go index dd7ffd96de3ed..eefc0fb79e8ef 100644 --- a/types/datum.go +++ b/types/datum.go @@ -952,10 +952,14 @@ func (d *Datum) convertToString(sc *stmtctx.StatementContext, target *FieldType) func ProduceStrWithSpecifiedTp(s string, tp *FieldType, sc *stmtctx.StatementContext, padZero bool) (_ string, err error) { flen, chs := tp.Flen, tp.Charset if flen >= 0 { + // overflowed stores the part of the string that is out of the length contraint, it is later checked to see if the + // overflowed part is all whitespaces + var overflowed string + var characterLen int // Flen is the rune length, not binary length, for UTF8 charset, we need to calculate the // rune count and truncate to Flen runes if it is too long. if chs == charset.CharsetUTF8 || chs == charset.CharsetUTF8MB4 { - characterLen := utf8.RuneCountInString(s) + characterLen = utf8.RuneCountInString(s) if characterLen > flen { // 1. If len(s) is 0 and flen is 0, truncateLen will be 0, don't truncate s. // CREATE TABLE t (a char(0)); @@ -972,13 +976,27 @@ func ProduceStrWithSpecifiedTp(s string, tp *FieldType, sc *stmtctx.StatementCon } runeCount++ } - err = ErrDataTooLong.GenWithStack("Data Too Long, field len %d, data len %d", flen, characterLen) + overflowed = s[truncateLen:] s = truncateStr(s, truncateLen) } } else if len(s) > flen { - err = ErrDataTooLong.GenWithStack("Data Too Long, field len %d, data len %d", flen, len(s)) + characterLen = len(s) + overflowed = s[flen:] s = truncateStr(s, flen) - } else if tp.Tp == mysql.TypeString && IsBinaryStr(tp) && len(s) < flen && padZero { + } + + if len(overflowed) != 0 { + trimed := strings.TrimRight(overflowed, " \t\n\r") + if len(trimed) == 0 && !IsBinaryStr(tp) && IsTypeChar(tp.Tp) { + if tp.Tp == mysql.TypeVarchar { + sc.AppendWarning(ErrTruncated.GenWithStack("Data truncated, field len %d, data len %d", flen, characterLen)) + } + } else { + err = ErrDataTooLong.GenWithStack("Data Too Long, field len %d, data len %d", flen, characterLen) + } + } + + if tp.Tp == mysql.TypeString && IsBinaryStr(tp) && len(s) < flen && padZero { padding := make([]byte, flen-len(s)) s = string(append([]byte(s), padding...)) } From fd38a6b5a25af2810c4a4b6422ce0544adb7c718 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Wed, 25 Nov 2020 22:20:27 +0800 Subject: [PATCH 166/229] execute: fill arguments when returning `ErrUnknownSystemVar` in `SetSessionSystemVar` (#20102) (#20413) --- sessionctx/variable/varsutil.go | 3 ++- sessionctx/variable/varsutil_test.go | 3 +++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/sessionctx/variable/varsutil.go b/sessionctx/variable/varsutil.go index 9856b51e0a423..f2c8cc466a4ca 100644 --- a/sessionctx/variable/varsutil.go +++ b/sessionctx/variable/varsutil.go @@ -207,10 +207,11 @@ const epochShiftBits = 18 // SetSessionSystemVar sets system variable and updates SessionVars states. func SetSessionSystemVar(vars *SessionVars, name string, value types.Datum) error { + orgName := name name = strings.ToLower(name) sysVar := SysVars[name] if sysVar == nil { - return ErrUnknownSystemVar + return ErrUnknownSystemVar.GenWithStackByArgs(orgName) } sVal := "" var err error diff --git a/sessionctx/variable/varsutil_test.go b/sessionctx/variable/varsutil_test.go index 5acbc70810851..be47632f29636 100644 --- a/sessionctx/variable/varsutil_test.go +++ b/sessionctx/variable/varsutil_test.go @@ -455,6 +455,9 @@ func (s *testVarsutilSuite) TestVarsutil(c *C) { c.Assert(err, IsNil) c.Assert(val, Equals, "0") c.Assert(v.systems[TiDBFoundInPlanCache], Equals, "1") + + err = SetSessionSystemVar(v, "UnknownVariable", types.NewStringDatum("on")) + c.Assert(err, ErrorMatches, ".*]Unknown system variable 'UnknownVariable'") } func (s *testVarsutilSuite) TestSetOverflowBehave(c *C) { From 439527521dd9eef39034e03ee5b1ad8229af125e Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Wed, 25 Nov 2020 22:50:57 +0800 Subject: [PATCH 167/229] expression: adjust int constant when compare with year type (#21099) (#21283) --- executor/executor_test.go | 28 +++++++++++----------------- expression/builtin_compare.go | 19 ++++++++++++++++++- types/time.go | 4 ++-- util/ranger/ranger_test.go | 18 +++++++++++++----- 4 files changed, 44 insertions(+), 25 deletions(-) diff --git a/executor/executor_test.go b/executor/executor_test.go index df561d5970aae..3d4638e667bca 100644 --- a/executor/executor_test.go +++ b/executor/executor_test.go @@ -6285,22 +6285,16 @@ func (s *testSuite) TestIssue19667(c *C) { tk.MustQuery(`SELECT DATE_ADD(a, INTERVAL 1 SECOND) FROM t`).Check(testkit.Rows("1988-04-17 02:00:00")) } -func (s *testSuite) TestTxnRetry(c *C) { +func (s *testSuite) TestIssue20305(c *C) { tk := testkit.NewTestKit(c, s.store) - tk2 := testkit.NewTestKit(c, s.store) - tk.MustExec("use test;") - tk2.MustExec("use test;") - tk.MustExec("drop table if exists t;") - tk.MustExec("create table t (a int);") - tk.MustExec("insert into t values (1)") - tk.MustExec("set @@tidb_disable_txn_auto_retry=0;") - tk.MustExec("set autocommit=0;") - tk.MustQuery("select * from t;").Check(testkit.Rows("1")) - tk.MustExec("SET SQL_SELECT_LIMIT=DEFAULT;") - - tk2.MustExec("update t set a=2") - - tk.MustExec("update t set a=3") - tk.MustExec("commit") - tk.MustQuery("select * from t").Check(testkit.Rows("3")) + tk.MustExec("use test") + tk.MustExec("drop table if exists t") + tk.MustExec("create table t2 (a year(4))") + tk.MustExec("insert into t2 values(69)") + tk.MustQuery("select * from t2 where a <= 69").Check(testkit.Rows("2069")) + // the following test is a regression test that matches MySQL's behavior. + tk.MustExec("drop table if exists t3") + tk.MustExec("CREATE TABLE `t3` (`y` year DEFAULT NULL, `a` int DEFAULT NULL)") + tk.MustExec("INSERT INTO `t3` VALUES (2069, 70), (2010, 11), (2155, 2156), (2069, 69)") + tk.MustQuery("SELECT * FROM `t3` where y <= a").Check(testkit.Rows("2155 2156")) } diff --git a/expression/builtin_compare.go b/expression/builtin_compare.go index c5b5d060787bf..d618c683d0a66 100644 --- a/expression/builtin_compare.go +++ b/expression/builtin_compare.go @@ -1282,7 +1282,8 @@ func RefineComparedConstant(ctx sessionctx.Context, targetFieldType types.FieldT } // refineArgs will rewrite the arguments if the compare expression is `int column non-int constant` or -// `non-int constant int column`. E.g., `a < 1.1` will be rewritten to `a < 2`. +// `non-int constant int column`. E.g., `a < 1.1` will be rewritten to `a < 2`. It also handles comparing year type +// with int constant if the int constant falls into a sensible year representation. func (c *compareFunctionClass) refineArgs(ctx sessionctx.Context, args []Expression) []Expression { if ContainMutableConst(ctx, args) { return args @@ -1325,6 +1326,22 @@ func (c *compareFunctionClass) refineArgs(ctx sessionctx.Context, args []Express } } } + // int constant [cmp] year type + if arg0IsCon && arg0IsInt && arg1Type.Tp == mysql.TypeYear { + adjusted, failed := types.AdjustYear(arg0.Value.GetInt64(), false) + if failed == nil { + arg0.Value.SetInt64(adjusted) + finalArg0 = arg0 + } + } + // year type [cmp] int constant + if arg1IsCon && arg1IsInt && arg0Type.Tp == mysql.TypeYear { + adjusted, failed := types.AdjustYear(arg1.Value.GetInt64(), false) + if failed == nil { + arg1.Value.SetInt64(adjusted) + finalArg1 = arg1 + } + } if isExceptional && (c.op == opcode.EQ || c.op == opcode.NullEQ) { // This will always be false. return []Expression{NewZero(), NewOne()} diff --git a/types/time.go b/types/time.go index b4d1ce898b321..7a8ba205986a7 100644 --- a/types/time.go +++ b/types/time.go @@ -1224,8 +1224,8 @@ func adjustYear(y int) int { } // AdjustYear is used for adjusting year and checking its validation. -func AdjustYear(y int64, shouldAdjust bool) (int64, error) { - if y == 0 && !shouldAdjust { +func AdjustYear(y int64, adjustZero bool) (int64, error) { + if y == 0 && !adjustZero { return y, nil } y = int64(adjustYear(int(y))) diff --git a/util/ranger/ranger_test.go b/util/ranger/ranger_test.go index 2aaf271cae238..27f26c1cb46f1 100644 --- a/util/ranger/ranger_test.go +++ b/util/ranger/ranger_test.go @@ -1234,6 +1234,7 @@ func (s *testRangerSuite) TestIndexRangeForYear(c *C) { testKit.MustExec("INSERT INTO t VALUES (1), (70), (99), (0), ('0')") testKit.MustQuery("SELECT * FROM t WHERE a < 15698").Check(testkit.Rows("0", "1970", "1999", "2000", "2001")) testKit.MustQuery("SELECT * FROM t WHERE a <= 0").Check(testkit.Rows("0")) + testKit.MustQuery("SELECT * FROM t WHERE a <= 1").Check(testkit.Rows("0", "1970", "1999", "2000", "2001")) testKit.MustQuery("SELECT * FROM t WHERE a < 2000").Check(testkit.Rows("0", "1970", "1999")) testKit.MustQuery("SELECT * FROM t WHERE a > -1").Check(testkit.Rows("0", "1970", "1999", "2000", "2001")) @@ -1261,14 +1262,21 @@ func (s *testRangerSuite) TestIndexRangeForYear(c *C) { { indexPos: 0, exprStr: `a not in (1, 2, 70)`, - accessConds: "[not(in(test.t.a, 1, 2, 70))]", + accessConds: "[not(in(test.t.a, 1, 2, 70))]", // this is in accordance with MySQL, MySQL won't interpret 70 here as 1970 filterConds: "[]", resultStr: `[(NULL,1970) (1970,2001) (2002,+inf]]`, }, + { + indexPos: 0, + exprStr: `a = 1 or a = 2 or a = 70`, + accessConds: "[or(eq(test.t.a, 2001), or(eq(test.t.a, 2002), eq(test.t.a, 1970)))]", // this is in accordance with MySQL, MySQL won't interpret 70 here as 1970 + filterConds: "[]", + resultStr: `[[1970,1970] [2001,2002]]`, + }, { indexPos: 0, exprStr: `a not in (99)`, - accessConds: "[ne(test.t.a, 99)]", + accessConds: "[ne(test.t.a, 1999)]", // this is in accordance with MySQL filterConds: "[]", resultStr: `[[-inf,1999) (1999,+inf]]`, }, @@ -1296,7 +1304,7 @@ func (s *testRangerSuite) TestIndexRangeForYear(c *C) { { indexPos: 0, exprStr: `a != 1`, - accessConds: "[ne(test.t.a, 1)]", + accessConds: "[ne(test.t.a, 2001)]", filterConds: "[]", resultStr: `[[-inf,2001) (2001,+inf]]`, }, @@ -1309,13 +1317,13 @@ func (s *testRangerSuite) TestIndexRangeForYear(c *C) { }, { exprStr: "a < 99 or a > 01", - accessConds: "[or(lt(test.t.a, 99), gt(test.t.a, 1))]", + accessConds: "[or(lt(test.t.a, 1999), gt(test.t.a, 2001))]", filterConds: "[]", resultStr: "[[-inf,1999) (2001,+inf]]", }, { exprStr: "a >= 70 and a <= 69", - accessConds: "[ge(test.t.a, 70) le(test.t.a, 69)]", + accessConds: "[ge(test.t.a, 1970) le(test.t.a, 2069)]", filterConds: "[]", resultStr: "[[1970,2069]]", }, From 3848a32378c35f6e454378355654b3f4d9f2a68d Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Thu, 26 Nov 2020 11:19:21 +0800 Subject: [PATCH 168/229] ddl: convert hexLit to stringLit in enum and set default value. (#20459) (#20837) Signed-off-by: ti-srebot Signed-off-by: wjhuang2016 --- ddl/db_integration_test.go | 18 ++++++++++++++++++ ddl/ddl_api.go | 2 +- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/ddl/db_integration_test.go b/ddl/db_integration_test.go index 7464ccd1745e1..b24d35c8b84a8 100644 --- a/ddl/db_integration_test.go +++ b/ddl/db_integration_test.go @@ -2243,6 +2243,24 @@ func (s *testIntegrationSuite7) TestAutoIncrementTableOption(c *C) { tk.MustQuery("select * from t;").Check(testkit.Rows("12345678901234567890")) } +// TestDefaultValueIsLatin1 for issue #18977 +func (s *testIntegrationSuite3) TestEnumAndSetDefaultValue(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t") + defer tk.MustExec("drop table if exists t") + tk.MustExec("create table t (a enum(0x61, 'b') not null default 0x61, b set(0x61, 'b') not null default 0x61) character set latin1") + tbl := testGetTableByName(c, s.ctx, "test", "t") + c.Assert(tbl.Meta().Columns[0].DefaultValue, Equals, "a") + c.Assert(tbl.Meta().Columns[1].DefaultValue, Equals, "a") + + tk.MustExec("drop table t") + tk.MustExec("create table t (a enum(0x61, 'b') not null default 0x61, b set(0x61, 'b') not null default 0x61) character set utf8mb4") + tbl = testGetTableByName(c, s.ctx, "test", "t") + c.Assert(tbl.Meta().Columns[0].DefaultValue, Equals, "a") + c.Assert(tbl.Meta().Columns[1].DefaultValue, Equals, "a") +} + func (s *testIntegrationSuite3) TestIssue20490(c *C) { tk := testkit.NewTestKit(c, s.store) tk.MustExec("use test;") diff --git a/ddl/ddl_api.go b/ddl/ddl_api.go index 1f3d510a94ce9..78e3d841206c0 100644 --- a/ddl/ddl_api.go +++ b/ddl/ddl_api.go @@ -672,7 +672,7 @@ func getDefaultValue(ctx sessionctx.Context, col *table.Column, c *ast.ColumnOpt if tp == mysql.TypeBit || tp == mysql.TypeString || tp == mysql.TypeVarchar || tp == mysql.TypeVarString || tp == mysql.TypeBlob || tp == mysql.TypeLongBlob || tp == mysql.TypeMediumBlob || tp == mysql.TypeTinyBlob || - tp == mysql.TypeJSON { + tp == mysql.TypeJSON || tp == mysql.TypeEnum || tp == mysql.TypeSet { // For BinaryLiteral / string fields, when getting default value we cast the value into BinaryLiteral{}, thus we return // its raw string content here. return v.GetBinaryLiteral().ToString(), false, nil From bba4f4801176cd078aeaefd3d32c160a29d96bae Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Thu, 26 Nov 2020 11:33:24 +0800 Subject: [PATCH 169/229] server: add metric for connection idle time (#21265) (#21301) Signed-off-by: ti-srebot Signed-off-by: crazycs520 --- infoschema/metric_table_def.go | 16 ++++ metrics/grafana/tidb.json | 132 ++++++++++++++++++++++++++++++++- metrics/metrics.go | 1 + metrics/server.go | 9 +++ metrics/session.go | 1 + server/conn.go | 14 +++- 6 files changed, 170 insertions(+), 3 deletions(-) diff --git a/infoschema/metric_table_def.go b/infoschema/metric_table_def.go index 485bcbd0452cd..8fdf43e8845cd 100644 --- a/infoschema/metric_table_def.go +++ b/infoschema/metric_table_def.go @@ -82,6 +82,22 @@ var MetricTableMap = map[string]MetricTableDef{ Labels: []string{"instance"}, Comment: "TiDB current connection counts", }, + "tidb_connection_idle_duration": { + PromQL: `histogram_quantile($QUANTILE, sum(rate(tidb_server_conn_idle_duration_seconds_bucket{$LABEL_CONDITIONS}[$RANGE_DURATION])) by (le,in_txn,instance))`, + Labels: []string{"instance", "in_txn"}, + Quantile: 0.90, + Comment: "The quantile of TiDB connection idle durations(second)", + }, + "tidb_connection_idle_total_count": { + PromQL: `sum(increase(tidb_server_conn_idle_duration_seconds_count{$LABEL_CONDITIONS}[$RANGE_DURATION])) by (in_txn,instance)`, + Labels: []string{"instance", "in_txn"}, + Comment: "The total count of TiDB connection idle", + }, + "tidb_connection_idle_total_time": { + PromQL: `sum(increase(tidb_server_conn_idle_duration_seconds_sum{$LABEL_CONDITIONS}[$RANGE_DURATION])) by (in_txn,instance)`, + Labels: []string{"instance", "in_txn"}, + Comment: "The total time of TiDB connection idle", + }, "node_process_open_fd_count": { PromQL: "process_open_fds{$LABEL_CONDITIONS}", Labels: []string{"instance", "job"}, diff --git a/metrics/grafana/tidb.json b/metrics/grafana/tidb.json index 94ea5f94a97a0..6b12aae30fde5 100644 --- a/metrics/grafana/tidb.json +++ b/metrics/grafana/tidb.json @@ -601,9 +601,9 @@ "fill": 1, "gridPos": { "h": 6, - "w": 24, + "w": 12, "x": 0, - "y": 19 + "y": 25 }, "id": 112, "legend": { @@ -691,6 +691,134 @@ "alignLevel": null } }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "${DS_TEST-CLUSTER}", + "description": "TiDB connection idle durations", + "fill": 1, + "gridPos": { + "h": 6, + "w": 12, + "x": 12, + "y": 25 + }, + "id": 218, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null as zero", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "histogram_quantile(0.99, sum(rate(tidb_server_conn_idle_duration_seconds_bucket{in_txn='1'}[1m])) by (le,in_txn,instance))", + "format": "time_series", + "interval": "", + "intervalFactor": 2, + "legendFormat": "99-in-txn", + "refId": "A" + }, + { + "expr": "histogram_quantile(0.99, sum(rate(tidb_server_conn_idle_duration_seconds_bucket{in_txn='0'}[1m])) by (le,in_txn,instance))", + "format": "time_series", + "interval": "", + "intervalFactor": 2, + "legendFormat": "99-not-in-txn", + "refId": "B" + }, + { + "expr": "histogram_quantile(0.90, sum(rate(tidb_server_conn_idle_duration_seconds_bucket{in_txn='1'}[1m])) by (le,in_txn,instance))", + "format": "time_series", + "interval": "", + "intervalFactor": 2, + "legendFormat": "90-in-txn", + "refId": "C" + }, + { + "expr": "histogram_quantile(0.90, sum(rate(tidb_server_conn_idle_duration_seconds_bucket{in_txn='0'}[1m])) by (le,in_txn,instance))", + "format": "time_series", + "interval": "", + "intervalFactor": 2, + "legendFormat": "90-not-in-txn", + "refId": "D" + }, + { + "expr": "histogram_quantile(0.80, sum(rate(tidb_server_conn_idle_duration_seconds_bucket{in_txn='1'}[1m])) by (le,in_txn,instance))", + "format": "time_series", + "interval": "", + "intervalFactor": 2, + "legendFormat": "80-in-txn", + "refId": "E" + }, + { + "expr": "histogram_quantile(0.80, sum(rate(tidb_server_conn_idle_duration_seconds_bucket{in_txn='0'}[1m])) by (le,in_txn,instance))", + "format": "time_series", + "interval": "", + "intervalFactor": 2, + "legendFormat": "80-not-in-txn", + "refId": "F" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Connection Idle Duration", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:518", + "format": "s", + "label": null, + "logBase": 2, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, { "aliasColors": {}, "bars": false, diff --git a/metrics/metrics.go b/metrics/metrics.go index 8ed739a345461..1b8331f32e786 100644 --- a/metrics/metrics.go +++ b/metrics/metrics.go @@ -169,4 +169,5 @@ func RegisterMetrics() { prometheus.MustRegister(TiKVNoAvailableConnectionCounter) prometheus.MustRegister(MaxProcs) prometheus.MustRegister(GOGC) + prometheus.MustRegister(ConnIdleDurationHistogram) } diff --git a/metrics/server.go b/metrics/server.go index 74645e90b354c..17fa1f998788d 100644 --- a/metrics/server.go +++ b/metrics/server.go @@ -169,6 +169,15 @@ var ( Name: "gogc", Help: "The value of GOGC", }) + + ConnIdleDurationHistogram = prometheus.NewHistogramVec( + prometheus.HistogramOpts{ + Namespace: "tidb", + Subsystem: "server", + Name: "conn_idle_duration_seconds", + Help: "Bucketed histogram of connection idle time (s).", + Buckets: prometheus.ExponentialBuckets(0.0005, 2, 29), // 0.5ms ~ 1.5days + }, []string{LblInTxn}) ) // ExecuteErrorToLabel converts an execute error to label. diff --git a/metrics/session.go b/metrics/session.go index feb38783ce161..a5fc0a974d3b0 100644 --- a/metrics/session.go +++ b/metrics/session.go @@ -143,4 +143,5 @@ const ( LblBatchGet = "batch_get" LblGet = "get" LblLockKeys = "lock_keys" + LblInTxn = "in_txn" ) diff --git a/server/conn.go b/server/conn.go index 40b3f3e034879..0fa7821f56892 100644 --- a/server/conn.go +++ b/server/conn.go @@ -130,6 +130,9 @@ var ( queryDurationHistogramExecute = metrics.QueryDurationHistogram.WithLabelValues("Execute") queryDurationHistogramSet = metrics.QueryDurationHistogram.WithLabelValues("Set") queryDurationHistogramGeneral = metrics.QueryDurationHistogram.WithLabelValues(metrics.LblGeneral) + + connIdleDurationHistogramNotInTxn = metrics.ConnIdleDurationHistogram.WithLabelValues("0") + connIdleDurationHistogramInTxn = metrics.ConnIdleDurationHistogram.WithLabelValues("1") ) // newClientConn creates a *clientConn object. @@ -140,6 +143,7 @@ func newClientConn(s *Server) *clientConn { collation: mysql.DefaultCollationID, alloc: arena.NewAllocator(32 * 1024), status: connStatusDispatching, + lastActive: time.Now(), } } @@ -164,6 +168,7 @@ type clientConn struct { status int32 // dispatching/reading/shutdown/waitshutdown lastCode uint16 // last error code collation uint8 // collation used by client, may be different from the collation used by database. + lastActive time.Time // mu is used for cancelling the execution of current transaction. mu struct { @@ -903,6 +908,13 @@ func (cc *clientConn) dispatch(ctx context.Context, data []byte) error { // reset killed for each request atomic.StoreUint32(&cc.ctx.GetSessionVars().Killed, 0) }() + t := time.Now() + if (cc.ctx.Status() & mysql.ServerStatusInTrans) > 0 { + connIdleDurationHistogramInTxn.Observe(t.Sub(cc.lastActive).Seconds()) + } else { + connIdleDurationHistogramNotInTxn.Observe(t.Sub(cc.lastActive).Seconds()) + } + span := opentracing.StartSpan("server.dispatch") var cancelFunc context.CancelFunc @@ -911,7 +923,6 @@ func (cc *clientConn) dispatch(ctx context.Context, data []byte) error { cc.mu.cancelFunc = cancelFunc cc.mu.Unlock() - t := time.Now() cc.lastPacket = data cmd := data[0] data = data[1:] @@ -948,6 +959,7 @@ func (cc *clientConn) dispatch(ctx context.Context, data []byte) error { cc.server.releaseToken(token) span.Finish() + cc.lastActive = time.Now() }() vars := cc.ctx.GetSessionVars() From 9cc0ea7b90ab102839a9a011a81b0b10bf4b70cc Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Thu, 26 Nov 2020 11:45:10 +0800 Subject: [PATCH 170/229] cherry pick #18973 to release-4.0 (#21107) Signed-off-by: ti-srebot Co-authored-by: Kenan Yao --- executor/executor_test.go | 12 + executor/explainfor_test.go | 59 +++ executor/prepared_test.go | 100 +++++- executor/set.go | 13 +- executor/show_test.go | 4 +- executor/testdata/prepare_suite_in.json | 58 +++ executor/testdata/prepare_suite_out.json | 204 +++++++++++ expression/bench_test.go | 14 + expression/builtin.go | 1 - expression/builtin_other.go | 336 +++++++++++++++--- expression/builtin_other_test.go | 40 ++- expression/builtin_other_vec.go | 230 +++++++++++- expression/builtin_other_vec_test.go | 3 + expression/distsql_builtin.go | 4 +- expression/integration_test.go | 3 - expression/scalar_function.go | 5 +- expression/util_test.go | 3 +- .../transformation_rules_suite_out.json | 10 +- planner/core/cache.go | 24 +- planner/core/common_plans.go | 87 +++-- planner/core/expression_rewriter.go | 22 +- planner/core/logical_plan_builder.go | 48 +++ planner/core/planbuilder.go | 7 +- sessionctx/variable/session.go | 4 + 24 files changed, 1164 insertions(+), 127 deletions(-) create mode 100644 executor/testdata/prepare_suite_in.json create mode 100644 executor/testdata/prepare_suite_out.json diff --git a/executor/executor_test.go b/executor/executor_test.go index 3d4638e667bca..a2b6dba635723 100644 --- a/executor/executor_test.go +++ b/executor/executor_test.go @@ -128,11 +128,13 @@ var _ = SerialSuites(&testClusterTableSuite{}) var _ = SerialSuites(&testPrepareSerialSuite{&baseTestSuite{}}) var _ = SerialSuites(&testSplitTable{&baseTestSuite{}}) var _ = SerialSuites(&testSerialSuite1{&baseTestSuite{}}) +var _ = SerialSuites(&testPrepareSuite{}) type testSuite struct{ *baseTestSuite } type testSuiteP1 struct{ *baseTestSuite } type testSuiteP2 struct{ *baseTestSuite } type testSplitTable struct{ *baseTestSuite } +type testPrepareSuite struct{ testData testutil.TestData } type baseTestSuite struct { cluster *mocktikv.Cluster @@ -171,6 +173,16 @@ func (s *baseTestSuite) SetUpSuite(c *C) { }) } +func (s *testPrepareSuite) SetUpSuite(c *C) { + var err error + s.testData, err = testutil.LoadTestSuiteData("testdata", "prepare_suite") + c.Assert(err, IsNil) +} + +func (s *testPrepareSuite) TearDownSuite(c *C) { + c.Assert(s.testData.GenerateOutputIfNeeded(), IsNil) +} + func (s *baseTestSuite) TearDownSuite(c *C) { s.domain.Close() s.store.Close() diff --git a/executor/explainfor_test.go b/executor/explainfor_test.go index c72fbf11129a2..0f22b6c4e2851 100644 --- a/executor/explainfor_test.go +++ b/executor/explainfor_test.go @@ -315,3 +315,62 @@ func (s *testSuite) TestExplainTableStorage(c *C) { tk.MustQuery(fmt.Sprintf("desc select * from information_schema.TABLE_STORAGE_STATS where TABLE_SCHEMA = 'information_schema' and TABLE_NAME = 'schemata'")).Check(testkit.Rows( fmt.Sprintf("MemTableScan_5 10000.00 root table:TABLE_STORAGE_STATS schema:[\"information_schema\"], table:[\"schemata\"]"))) } + +func (s *testPrepareSerialSuite) TestPointGetUserVarPlanCache(c *C) { + orgEnable := core.PreparedPlanCacheEnabled() + defer func() { + core.SetPreparedPlanCache(orgEnable) + }() + core.SetPreparedPlanCache(true) + + tk := testkit.NewTestKitWithInit(c, s.store) + tk.Se.Auth(&auth.UserIdentity{Username: "root", Hostname: "localhost", CurrentUser: true, AuthUsername: "root", AuthHostname: "%"}, nil, []byte("012345678901234567890")) + + tk.MustExec("use test") + tk.MustExec("set @@tidb_enable_collect_execution_info=0;") + tk.MustExec("drop table if exists t1") + tk.MustExec("CREATE TABLE t1 (a BIGINT, b VARCHAR(40), PRIMARY KEY (a, b))") + tk.MustExec("INSERT INTO t1 VALUES (1,'3'),(2,'4')") + tk.MustExec("drop table if exists t2") + tk.MustExec("CREATE TABLE t2 (a BIGINT, b VARCHAR(40), UNIQUE KEY idx_a (a))") + tk.MustExec("INSERT INTO t2 VALUES (1,'1'),(2,'2')") + tk.MustExec("prepare stmt from 'select * from t1, t2 where t1.a = t2.a and t2.a = ?'") + tk.MustExec("set @a=1") + tk.MustQuery("execute stmt using @a").Check(testkit.Rows( + "1 3 1 1", + )) + tkProcess := tk.Se.ShowProcess() + ps := []*util.ProcessInfo{tkProcess} + tk.Se.SetSessionManager(&mockSessionManager1{PS: ps}) + // t2 should use PointGet. + tk.MustQuery(fmt.Sprintf("explain for connection %d", tkProcess.ID)).Check(testkit.Rows( + "Projection_7 1.00 root test.t1.a, test.t1.b, test.t2.a, test.t2.b", + "└─MergeJoin_8 1.00 root inner join, left key:test.t2.a, right key:test.t1.a", + " ├─IndexReader_27(Build) 10.00 root index:IndexRangeScan_26", + " │ └─IndexRangeScan_26 10.00 cop[tikv] table:t1, index:PRIMARY(a, b) range:[1,1], keep order:true, stats:pseudo", + " └─Selection_25(Probe) 0.80 root not(isnull(test.t2.a))", + " └─Point_Get_24 1.00 root table:t2, index:idx_a(a) ", + )) + tk.MustExec("set @a=2") + tk.MustQuery("execute stmt using @a").Check(testkit.Rows( + "2 4 2 2", + )) + tkProcess = tk.Se.ShowProcess() + ps = []*util.ProcessInfo{tkProcess} + tk.Se.SetSessionManager(&mockSessionManager1{PS: ps}) + // t2 should use PointGet, range is changed to [2,2]. + tk.MustQuery(fmt.Sprintf("explain for connection %d", tkProcess.ID)).Check(testkit.Rows( + "Projection_7 1.00 root test.t1.a, test.t1.b, test.t2.a, test.t2.b", + "└─MergeJoin_8 1.00 root inner join, left key:test.t2.a, right key:test.t1.a", + " ├─IndexReader_27(Build) 10.00 root index:IndexRangeScan_26", + " │ └─IndexRangeScan_26 10.00 cop[tikv] table:t1, index:PRIMARY(a, b) range:[2,2], keep order:true, stats:pseudo", + " └─Selection_25(Probe) 1.00 root not(isnull(test.t2.a))", + " └─Point_Get_24 1.00 root table:t2, index:idx_a(a) ", + )) + tk.MustQuery("execute stmt using @a").Check(testkit.Rows( + "2 4 2 2", + )) + tk.MustQuery("select @@last_plan_from_cache").Check(testkit.Rows( + "1", + )) +} diff --git a/executor/prepared_test.go b/executor/prepared_test.go index aa67084d85641..5de6f65244b8e 100644 --- a/executor/prepared_test.go +++ b/executor/prepared_test.go @@ -187,16 +187,16 @@ func (s *testSuite9) TestPlanCacheOnPointGet(c *C) { tk.MustExec("create table t1(a varchar(20), b varchar(20), c varchar(20), primary key(a, b))") tk.MustExec("insert into t1 values('1','1','111'),('2','2','222'),('3','3','333')") tk.MustExec(`prepare stmt2 from "select * from t1 where t1.a = ? and t1.b = ?"`) - tk.MustExec("set @v1 = 1") - tk.MustExec("set @v2 = 1") + tk.MustExec("set @v1 = '1'") + tk.MustExec("set @v2 = '1'") tk.MustQuery("execute stmt2 using @v1,@v2").Check(testkit.Rows("1 1 111")) tk.MustQuery("select @@last_plan_from_cache").Check(testkit.Rows("0")) - tk.MustExec("set @v1 = 2") - tk.MustExec("set @v2 = 2") + tk.MustExec("set @v1 = '2'") + tk.MustExec("set @v2 = '2'") tk.MustQuery("execute stmt2 using @v1,@v2").Check(testkit.Rows("2 2 222")) tk.MustQuery("select @@last_plan_from_cache").Check(testkit.Rows("1")) - tk.MustExec("set @v1 = 3") - tk.MustExec("set @v2 = 3") + tk.MustExec("set @v1 = '3'") + tk.MustExec("set @v2 = '3'") tk.MustQuery("execute stmt2 using @v1,@v2").Check(testkit.Rows("3 3 333")) tkProcess := tk.Se.ShowProcess() ps := []*util.ProcessInfo{tkProcess} @@ -249,3 +249,91 @@ func (s *testSuite9) TestPlanCacheOnPointGet(c *C) { tk.MustQuery(`execute stmt2 using @v1, @v1, @v2, @v2`).Check(testkit.Rows("a a 1 1 1", "b b 2 2 2")) tk.MustQuery(`execute stmt2 using @v2, @v2, @v3, @v3`).Check(testkit.Rows("b b 2 2 2", "c c 3 3 3")) } + +func (s *testPrepareSuite) TestPlanCacheWithDifferentVariableTypes(c *C) { + store, dom, err := newStoreWithBootstrap() + c.Assert(err, IsNil) + tk := testkit.NewTestKit(c, store) + defer func() { + dom.Close() + store.Close() + }() + orgEnable := plannercore.PreparedPlanCacheEnabled() + defer func() { + plannercore.SetPreparedPlanCache(orgEnable) + }() + plannercore.SetPreparedPlanCache(true) + tk.MustExec("use test") + tk.MustExec("drop table if exists t1, t2") + tk.MustExec("set @@tidb_enable_collect_execution_info=0;") + tk.MustExec("create table t1(a varchar(20), b int, c float, key(b, a))") + tk.MustExec("insert into t1 values('1',1,1.1),('2',2,222),('3',3,333)") + tk.MustExec("create table t2(a varchar(20), b int, c float, key(b, a))") + tk.MustExec("insert into t2 values('3',3,3.3),('2',2,222),('3',3,333)") + + var input []struct { + PrepareStmt string + Executes []struct { + Vars []struct { + Name string + Value string + } + ExecuteSQL string + } + } + var output []struct { + PrepareStmt string + Executes []struct { + SQL string + Vars []struct { + Name string + Value string + } + Plan []string + LastPlanUseCache string + Result []string + } + } + s.testData.GetTestCases(c, &input, &output) + for i, tt := range input { + tk.MustExec(tt.PrepareStmt) + s.testData.OnRecord(func() { + output[i].PrepareStmt = tt.PrepareStmt + output[i].Executes = make([]struct { + SQL string + Vars []struct { + Name string + Value string + } + Plan []string + LastPlanUseCache string + Result []string + }, len(tt.Executes)) + }) + c.Assert(output[i].PrepareStmt, Equals, tt.PrepareStmt) + for j, exec := range tt.Executes { + for _, v := range exec.Vars { + tk.MustExec(fmt.Sprintf(`set @%s = %s`, v.Name, v.Value)) + } + res := tk.MustQuery(exec.ExecuteSQL) + lastPlanUseCache := tk.MustQuery("select @@last_plan_from_cache").Rows()[0][0] + tk.MustQuery(exec.ExecuteSQL) + tkProcess := tk.Se.ShowProcess() + ps := []*util.ProcessInfo{tkProcess} + tk.Se.SetSessionManager(&mockSessionManager1{PS: ps}) + plan := tk.MustQuery(fmt.Sprintf("explain for connection %d", tkProcess.ID)) + s.testData.OnRecord(func() { + output[i].Executes[j].SQL = exec.ExecuteSQL + output[i].Executes[j].Plan = s.testData.ConvertRowsToStrings(plan.Rows()) + output[i].Executes[j].Vars = exec.Vars + output[i].Executes[j].LastPlanUseCache = lastPlanUseCache.(string) + output[i].Executes[j].Result = s.testData.ConvertRowsToStrings(res.Rows()) + }) + c.Assert(output[i].Executes[j].SQL, Equals, exec.ExecuteSQL) + plan.Check(testkit.Rows(output[i].Executes[j].Plan...)) + c.Assert(output[i].Executes[j].Vars, DeepEquals, exec.Vars) + c.Assert(output[i].Executes[j].LastPlanUseCache, Equals, lastPlanUseCache.(string)) + res.Check(testkit.Rows(output[i].Executes[j].Result...)) + } + } +} diff --git a/executor/set.go b/executor/set.go index 08744aeb47a26..75b6b0db95c60 100644 --- a/executor/set.go +++ b/executor/set.go @@ -33,7 +33,6 @@ import ( "github.com/pingcap/tidb/util/gcutil" "github.com/pingcap/tidb/util/logutil" "github.com/pingcap/tidb/util/stmtsummary" - "github.com/pingcap/tidb/util/stringutil" "go.uber.org/zap" ) @@ -91,17 +90,15 @@ func (e *SetExecutor) Next(ctx context.Context, req *chunk.Chunk) error { if err != nil { return err } - + sessionVars.UsersLock.Lock() if value.IsNull() { delete(sessionVars.Users, name) + delete(sessionVars.UserVarTypes, name) } else { - svalue, err1 := value.ToString() - if err1 != nil { - return err1 - } - - sessionVars.SetUserVar(name, stringutil.Copy(svalue), value.Collation()) + sessionVars.Users[name] = value + sessionVars.UserVarTypes[name] = v.Expr.GetType() } + sessionVars.UsersLock.Unlock() continue } diff --git a/executor/show_test.go b/executor/show_test.go index f11ab9c6231f0..eab48ac635125 100644 --- a/executor/show_test.go +++ b/executor/show_test.go @@ -925,9 +925,9 @@ func (s *testSuite5) TestShowBuiltin(c *C) { res := tk.MustQuery("show builtins;") c.Assert(res, NotNil) rows := res.Rows() - c.Assert(268, Equals, len(rows)) + c.Assert(267, Equals, len(rows)) c.Assert("abs", Equals, rows[0][0].(string)) - c.Assert("yearweek", Equals, rows[267][0].(string)) + c.Assert("yearweek", Equals, rows[266][0].(string)) } func (s *testSuite5) TestShowClusterConfig(c *C) { diff --git a/executor/testdata/prepare_suite_in.json b/executor/testdata/prepare_suite_in.json new file mode 100644 index 0000000000000..a592b6ec327c0 --- /dev/null +++ b/executor/testdata/prepare_suite_in.json @@ -0,0 +1,58 @@ +[ + { + "name": "TestPlanCacheWithDifferentVariableTypes", + "cases": [ + { + "PrepareStmt": "prepare stmt from \"select ?, ?\"", + "Executes": [ + { + "Vars": [{"Name": "v1", "Value": "1"}, {"Name": "v2", "Value": "2"}], + "ExecuteSQL": "execute stmt using @v1, @v2" + }, + { + "Vars": [{"Name": "v1", "Value": "1"}, {"Name": "v2", "Value": "\"abc\""}], + "ExecuteSQL": "execute stmt using @v1, @v2" + }, + { + "Vars": [{"Name": "v1", "Value": "10"}, {"Name": "v2", "Value": "\"cba\""}], + "ExecuteSQL": "execute stmt using @v1, @v2" + } + ] + }, + { + "PrepareStmt": "prepare stmt from \"select a from t1 where t1.b = ?\"", + "Executes": [ + { + "Vars": [{"Name": "v1", "Value": "3"}], + "ExecuteSQL": "execute stmt using @v1" + }, + { + "Vars": [{"Name": "v1", "Value": "2"}], + "ExecuteSQL": "execute stmt using @v1" + }, + { + "Vars": [{"Name": "v1", "Value": "\"abc\""}], + "ExecuteSQL": "execute stmt using @v1" + } + ] + }, + { + "PrepareStmt": "prepare stmt from \"select t1.c, t2.c from t1 join t2 on t1.b = t2.b and t1.a = t2.a where t1.b = ?\"", + "Executes": [ + { + "Vars": [{"Name": "v1", "Value": "1"}], + "ExecuteSQL": "execute stmt using @v1" + }, + { + "Vars": [{"Name": "v1", "Value": "2"}], + "ExecuteSQL": "execute stmt using @v1" + }, + { + "Vars": [{"Name": "v1", "Value": "\"abc\""}], + "ExecuteSQL": "execute stmt using @v1" + } + ] + } + ] + } +] diff --git a/executor/testdata/prepare_suite_out.json b/executor/testdata/prepare_suite_out.json new file mode 100644 index 0000000000000..40b2e15b9c698 --- /dev/null +++ b/executor/testdata/prepare_suite_out.json @@ -0,0 +1,204 @@ +[ + { + "Name": "TestPlanCacheWithDifferentVariableTypes", + "Cases": [ + { + "PrepareStmt": "prepare stmt from \"select ?, ?\"", + "Executes": [ + { + "SQL": "execute stmt using @v1, @v2", + "Vars": [ + { + "Name": "v1", + "Value": "1" + }, + { + "Name": "v2", + "Value": "2" + } + ], + "Plan": [ + "Projection_3 1.00 root 1->Column#1, 2->Column#2", + "└─TableDual_4 1.00 root rows:1" + ], + "LastPlanUseCache": "0", + "Result": [ + "1 2" + ] + }, + { + "SQL": "execute stmt using @v1, @v2", + "Vars": [ + { + "Name": "v1", + "Value": "1" + }, + { + "Name": "v2", + "Value": "\"abc\"" + } + ], + "Plan": [ + "Projection_3 1.00 root 1->Column#1, abc->Column#2", + "└─TableDual_4 1.00 root rows:1" + ], + "LastPlanUseCache": "0", + "Result": [ + "1 abc" + ] + }, + { + "SQL": "execute stmt using @v1, @v2", + "Vars": [ + { + "Name": "v1", + "Value": "10" + }, + { + "Name": "v2", + "Value": "\"cba\"" + } + ], + "Plan": [ + "Projection_3 1.00 root 10->Column#1, cba->Column#2", + "└─TableDual_4 1.00 root rows:1" + ], + "LastPlanUseCache": "0", + "Result": [ + "10 cba" + ] + } + ] + }, + { + "PrepareStmt": "prepare stmt from \"select a from t1 where t1.b = ?\"", + "Executes": [ + { + "SQL": "execute stmt using @v1", + "Vars": [ + { + "Name": "v1", + "Value": "3" + } + ], + "Plan": [ + "Projection_4 10.00 root test.t1.a", + "└─IndexReader_6 10.00 root index:IndexRangeScan_5", + " └─IndexRangeScan_5 10.00 cop[tikv] table:t1, index:b(b, a) range:[3,3], keep order:false, stats:pseudo" + ], + "LastPlanUseCache": "0", + "Result": [ + "3" + ] + }, + { + "SQL": "execute stmt using @v1", + "Vars": [ + { + "Name": "v1", + "Value": "2" + } + ], + "Plan": [ + "Projection_4 10.00 root test.t1.a", + "└─IndexReader_6 10.00 root index:IndexRangeScan_5", + " └─IndexRangeScan_5 10.00 cop[tikv] table:t1, index:b(b, a) range:[2,2], keep order:false, stats:pseudo" + ], + "LastPlanUseCache": "1", + "Result": [ + "2" + ] + }, + { + "SQL": "execute stmt using @v1", + "Vars": [ + { + "Name": "v1", + "Value": "\"abc\"" + } + ], + "Plan": [ + "Projection_4 8000.00 root test.t1.a", + "└─IndexReader_10 8000.00 root index:Selection_9", + " └─Selection_9 8000.00 cop[tikv] eq(cast(test.t1.b), 0)", + " └─IndexFullScan_8 10000.00 cop[tikv] table:t1, index:b(b, a) keep order:false, stats:pseudo" + ], + "LastPlanUseCache": "0", + "Result": null + } + ] + }, + { + "PrepareStmt": "prepare stmt from \"select t1.c, t2.c from t1 join t2 on t1.b = t2.b and t1.a = t2.a where t1.b = ?\"", + "Executes": [ + { + "SQL": "execute stmt using @v1", + "Vars": [ + { + "Name": "v1", + "Value": "1" + } + ], + "Plan": [ + "HashJoin_23 99.90 root inner join, equal:[eq(test.t1.b, test.t2.b) eq(test.t1.a, test.t2.a)]", + "├─IndexLookUp_48(Build) 99.80 root ", + "│ ├─Selection_47(Build) 99.80 cop[tikv] not(isnull(test.t2.b))", + "│ │ └─IndexRangeScan_45 99.90 cop[tikv] table:t2, index:b(b, a) range:[1 -inf,1 +inf], keep order:false, stats:pseudo", + "│ └─TableRowIDScan_46(Probe) 99.80 cop[tikv] table:t2 keep order:false, stats:pseudo", + "└─IndexLookUp_41(Probe) 99.80 root ", + " ├─Selection_40(Build) 99.80 cop[tikv] not(isnull(test.t1.b))", + " │ └─IndexRangeScan_38 99.90 cop[tikv] table:t1, index:b(b, a) range:[1 -inf,1 +inf], keep order:false, stats:pseudo", + " └─TableRowIDScan_39(Probe) 99.80 cop[tikv] table:t1 keep order:false, stats:pseudo" + ], + "LastPlanUseCache": "0", + "Result": null + }, + { + "SQL": "execute stmt using @v1", + "Vars": [ + { + "Name": "v1", + "Value": "2" + } + ], + "Plan": [ + "HashJoin_23 99.90 root inner join, equal:[eq(test.t1.b, test.t2.b) eq(test.t1.a, test.t2.a)]", + "├─IndexLookUp_48(Build) 99.80 root ", + "│ ├─Selection_47(Build) 99.80 cop[tikv] not(isnull(test.t2.b))", + "│ │ └─IndexRangeScan_45 99.90 cop[tikv] table:t2, index:b(b, a) range:[2 -inf,2 +inf], keep order:false, stats:pseudo", + "│ └─TableRowIDScan_46(Probe) 99.80 cop[tikv] table:t2 keep order:false, stats:pseudo", + "└─IndexLookUp_41(Probe) 99.80 root ", + " ├─Selection_40(Build) 99.80 cop[tikv] not(isnull(test.t1.b))", + " │ └─IndexRangeScan_38 99.90 cop[tikv] table:t1, index:b(b, a) range:[2 -inf,2 +inf], keep order:false, stats:pseudo", + " └─TableRowIDScan_39(Probe) 99.80 cop[tikv] table:t1 keep order:false, stats:pseudo" + ], + "LastPlanUseCache": "1", + "Result": [ + "222 222" + ] + }, + { + "SQL": "execute stmt using @v1", + "Vars": [ + { + "Name": "v1", + "Value": "\"abc\"" + } + ], + "Plan": [ + "HashJoin_23 9980.01 root inner join, equal:[eq(test.t1.b, test.t2.b) eq(test.t1.a, test.t2.a)]", + "├─TableReader_44(Build) 7984.01 root data:Selection_43", + "│ └─Selection_43 7984.01 cop[tikv] eq(cast(test.t2.b), 0), not(isnull(test.t2.a)), not(isnull(test.t2.b))", + "│ └─TableFullScan_42 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo", + "└─TableReader_37(Probe) 7984.01 root data:Selection_36", + " └─Selection_36 7984.01 cop[tikv] eq(cast(test.t1.b), 0), not(isnull(test.t1.a)), not(isnull(test.t1.b))", + " └─TableFullScan_35 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo" + ], + "LastPlanUseCache": "0", + "Result": null + } + ] + } + ] + } +] diff --git a/expression/bench_test.go b/expression/bench_test.go index 3def2f9319166..cbf2517604f93 100644 --- a/expression/bench_test.go +++ b/expression/bench_test.go @@ -1244,6 +1244,20 @@ func genVecBuiltinFuncBenchCase(ctx sessionctx.Context, funcName string, testCas fc = &castAsStringFunctionClass{baseFunctionClass{ast.Cast, 1, 1}, tp} } baseFunc, err = fc.getFunction(ctx, cols) + } else if funcName == ast.GetVar { + var fc functionClass + tp := eType2FieldType(testCase.retEvalType) + switch testCase.retEvalType { + case types.ETInt: + fc = &getIntVarFunctionClass{getVarFunctionClass{baseFunctionClass{ast.GetVar, 1, 1}, tp}} + case types.ETDecimal: + fc = &getDecimalVarFunctionClass{getVarFunctionClass{baseFunctionClass{ast.GetVar, 1, 1}, tp}} + case types.ETReal: + fc = &getRealVarFunctionClass{getVarFunctionClass{baseFunctionClass{ast.GetVar, 1, 1}, tp}} + default: + fc = &getStringVarFunctionClass{getVarFunctionClass{baseFunctionClass{ast.GetVar, 1, 1}, tp}} + } + baseFunc, err = fc.getFunction(ctx, cols) } else { baseFunc, err = funcs[funcName].getFunction(ctx, cols) } diff --git a/expression/builtin.go b/expression/builtin.go index 5dafb5d3064c3..eccdf0817025a 100644 --- a/expression/builtin.go +++ b/expression/builtin.go @@ -797,7 +797,6 @@ var funcs = map[string]functionClass{ ast.Case: &caseWhenFunctionClass{baseFunctionClass{ast.Case, 1, -1}}, ast.RowFunc: &rowFunctionClass{baseFunctionClass{ast.RowFunc, 2, -1}}, ast.SetVar: &setVarFunctionClass{baseFunctionClass{ast.SetVar, 2, 2}}, - ast.GetVar: &getVarFunctionClass{baseFunctionClass{ast.GetVar, 1, 1}}, ast.BitCount: &bitCountFunctionClass{baseFunctionClass{ast.BitCount, 1, 1}}, ast.GetParam: &getParamFunctionClass{baseFunctionClass{ast.GetParam, 1, 1}}, diff --git a/expression/builtin_other.go b/expression/builtin_other.go index 268487dc6e981..17642d186e161 100644 --- a/expression/builtin_other.go +++ b/expression/builtin_other.go @@ -18,6 +18,8 @@ import ( "time" "github.com/pingcap/errors" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/model" "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/types" @@ -33,7 +35,10 @@ var ( _ functionClass = &inFunctionClass{} _ functionClass = &rowFunctionClass{} _ functionClass = &setVarFunctionClass{} - _ functionClass = &getVarFunctionClass{} + _ functionClass = &getIntVarFunctionClass{} + _ functionClass = &getRealVarFunctionClass{} + _ functionClass = &getDecimalVarFunctionClass{} + _ functionClass = &getStringVarFunctionClass{} _ functionClass = &lockFunctionClass{} _ functionClass = &releaseLockFunctionClass{} _ functionClass = &valuesFunctionClass{} @@ -51,8 +56,14 @@ var ( _ builtinFunc = &builtinInDurationSig{} _ builtinFunc = &builtinInJSONSig{} _ builtinFunc = &builtinRowSig{} - _ builtinFunc = &builtinSetVarSig{} - _ builtinFunc = &builtinGetVarSig{} + _ builtinFunc = &builtinSetStringVarSig{} + _ builtinFunc = &builtinSetIntVarSig{} + _ builtinFunc = &builtinSetRealVarSig{} + _ builtinFunc = &builtinSetDecimalVarSig{} + _ builtinFunc = &builtinGetStringVarSig{} + _ builtinFunc = &builtinGetIntVarSig{} + _ builtinFunc = &builtinGetRealVarSig{} + _ builtinFunc = &builtinGetDecimalVarSig{} _ builtinFunc = &builtinLockSig{} _ builtinFunc = &builtinReleaseLockSig{} _ builtinFunc = &builtinValuesIntSig{} @@ -673,45 +684,56 @@ func (c *setVarFunctionClass) getFunction(ctx sessionctx.Context, args []Express if err = c.verifyArgs(args); err != nil { return nil, err } - bf, err := newBaseBuiltinFuncWithTp(ctx, c.funcName, args, types.ETString, types.ETString, types.ETString) + argTp := args[1].GetType().EvalType() + if argTp == types.ETTimestamp || argTp == types.ETDatetime || argTp == types.ETDuration || argTp == types.ETJson { + argTp = types.ETString + } + bf, err := newBaseBuiltinFuncWithTp(ctx, c.funcName, args, argTp, types.ETString, argTp) if err != nil { return nil, err } bf.tp.Flen = args[1].GetType().Flen - // TODO: we should consider the type of the argument, but not take it as string for all situations. - sig = &builtinSetVarSig{bf} - return sig, err + switch argTp { + case types.ETString: + sig = &builtinSetStringVarSig{bf} + case types.ETReal: + sig = &builtinSetRealVarSig{bf} + case types.ETDecimal: + sig = &builtinSetDecimalVarSig{bf} + case types.ETInt: + sig = &builtinSetIntVarSig{bf} + default: + return nil, errors.Errorf("unexpected types.EvalType %v", argTp) + } + return sig, nil } -type builtinSetVarSig struct { +type builtinSetStringVarSig struct { baseBuiltinFunc } -func (b *builtinSetVarSig) Clone() builtinFunc { - newSig := &builtinSetVarSig{} +func (b *builtinSetStringVarSig) Clone() builtinFunc { + newSig := &builtinSetStringVarSig{} newSig.cloneFrom(&b.baseBuiltinFunc) return newSig } -func (b *builtinSetVarSig) evalString(row chunk.Row) (res string, isNull bool, err error) { +func (b *builtinSetStringVarSig) evalString(row chunk.Row) (res string, isNull bool, err error) { var varName string sessionVars := b.ctx.GetSessionVars() varName, isNull, err = b.args[0].EvalString(b.ctx, row) if isNull || err != nil { return "", isNull, err } - datum, err := b.args[1].Eval(row) isNull = datum.IsNull() if isNull || err != nil { return "", isNull, err } - res, err = datum.ToString() if err != nil { return "", isNull, err } - varName = strings.ToLower(varName) sessionVars.UsersLock.Lock() sessionVars.SetUserVar(varName, stringutil.Copy(res), datum.Collation()) @@ -719,72 +741,298 @@ func (b *builtinSetVarSig) evalString(row chunk.Row) (res string, isNull bool, e return res, false, nil } +type builtinSetRealVarSig struct { + baseBuiltinFunc +} + +func (b *builtinSetRealVarSig) Clone() builtinFunc { + newSig := &builtinSetRealVarSig{} + newSig.cloneFrom(&b.baseBuiltinFunc) + return newSig +} + +func (b *builtinSetRealVarSig) evalReal(row chunk.Row) (res float64, isNull bool, err error) { + var varName string + sessionVars := b.ctx.GetSessionVars() + varName, isNull, err = b.args[0].EvalString(b.ctx, row) + if isNull || err != nil { + return 0, isNull, err + } + datum, err := b.args[1].Eval(row) + isNull = datum.IsNull() + if isNull || err != nil { + return 0, isNull, err + } + res = datum.GetFloat64() + varName = strings.ToLower(varName) + sessionVars.UsersLock.Lock() + sessionVars.Users[varName] = datum + sessionVars.UsersLock.Unlock() + return res, false, nil +} + +type builtinSetDecimalVarSig struct { + baseBuiltinFunc +} + +func (b *builtinSetDecimalVarSig) Clone() builtinFunc { + newSig := &builtinSetDecimalVarSig{} + newSig.cloneFrom(&b.baseBuiltinFunc) + return newSig +} + +func (b *builtinSetDecimalVarSig) evalDecimal(row chunk.Row) (*types.MyDecimal, bool, error) { + sessionVars := b.ctx.GetSessionVars() + varName, isNull, err := b.args[0].EvalString(b.ctx, row) + if isNull || err != nil { + return nil, isNull, err + } + datum, err := b.args[1].Eval(row) + isNull = datum.IsNull() + if isNull || err != nil { + return nil, isNull, err + } + res := datum.GetMysqlDecimal() + varName = strings.ToLower(varName) + sessionVars.UsersLock.Lock() + sessionVars.Users[varName] = datum + sessionVars.UsersLock.Unlock() + return res, false, nil +} + +type builtinSetIntVarSig struct { + baseBuiltinFunc +} + +func (b *builtinSetIntVarSig) Clone() builtinFunc { + newSig := &builtinSetIntVarSig{} + newSig.cloneFrom(&b.baseBuiltinFunc) + return newSig +} + +func (b *builtinSetIntVarSig) evalInt(row chunk.Row) (int64, bool, error) { + sessionVars := b.ctx.GetSessionVars() + varName, isNull, err := b.args[0].EvalString(b.ctx, row) + if isNull || err != nil { + return 0, isNull, err + } + datum, err := b.args[1].Eval(row) + isNull = datum.IsNull() + if isNull || err != nil { + return 0, isNull, err + } + res := datum.GetInt64() + varName = strings.ToLower(varName) + sessionVars.UsersLock.Lock() + sessionVars.Users[varName] = datum + sessionVars.UsersLock.Unlock() + return res, false, nil +} + +// BuildGetVarFunction builds a GetVar ScalarFunction from the Expression. +func BuildGetVarFunction(ctx sessionctx.Context, expr Expression, retType *types.FieldType) (Expression, error) { + var fc functionClass + switch retType.EvalType() { + case types.ETInt: + fc = &getIntVarFunctionClass{getVarFunctionClass{baseFunctionClass{ast.GetVar, 1, 1}, retType}} + case types.ETDecimal: + fc = &getDecimalVarFunctionClass{getVarFunctionClass{baseFunctionClass{ast.GetVar, 1, 1}, retType}} + case types.ETReal: + fc = &getRealVarFunctionClass{getVarFunctionClass{baseFunctionClass{ast.GetVar, 1, 1}, retType}} + default: + fc = &getStringVarFunctionClass{getVarFunctionClass{baseFunctionClass{ast.GetVar, 1, 1}, retType}} + } + f, err := fc.getFunction(ctx, []Expression{expr}) + if err != nil { + return nil, err + } + if builtinRetTp := f.getRetTp(); builtinRetTp.Tp != mysql.TypeUnspecified || retType.Tp == mysql.TypeUnspecified { + retType = builtinRetTp + } + return &ScalarFunction{ + FuncName: model.NewCIStr(ast.GetVar), + RetType: retType, + Function: f, + }, nil +} + type getVarFunctionClass struct { baseFunctionClass + + tp *types.FieldType } -func (c *getVarFunctionClass) getFunction(ctx sessionctx.Context, args []Expression) (sig builtinFunc, err error) { +type getStringVarFunctionClass struct { + getVarFunctionClass +} + +func (c *getStringVarFunctionClass) getFunction(ctx sessionctx.Context, args []Expression) (sig builtinFunc, err error) { if err = c.verifyArgs(args); err != nil { return nil, err } - // TODO: we should consider the type of the argument, but not take it as string for all situations. bf, err := newBaseBuiltinFuncWithTp(ctx, c.funcName, args, types.ETString, types.ETString) if err != nil { return nil, err } - bf.tp.Flen = mysql.MaxFieldVarCharLength - if err := c.resolveCollation(ctx, args, &bf); err != nil { + bf.tp.Flen = c.tp.Flen + if len(c.tp.Charset) > 0 { + bf.tp.Charset = c.tp.Charset + bf.tp.Collate = c.tp.Collate + } + sig = &builtinGetStringVarSig{bf} + return sig, nil +} + +type builtinGetStringVarSig struct { + baseBuiltinFunc +} + +func (b *builtinGetStringVarSig) Clone() builtinFunc { + newSig := &builtinGetStringVarSig{} + newSig.cloneFrom(&b.baseBuiltinFunc) + return newSig +} + +func (b *builtinGetStringVarSig) evalString(row chunk.Row) (string, bool, error) { + sessionVars := b.ctx.GetSessionVars() + varName, isNull, err := b.args[0].EvalString(b.ctx, row) + if isNull || err != nil { + return "", isNull, err + } + varName = strings.ToLower(varName) + sessionVars.UsersLock.RLock() + defer sessionVars.UsersLock.RUnlock() + if v, ok := sessionVars.Users[varName]; ok { + return v.GetString(), false, nil + } + return "", true, nil +} + +type getIntVarFunctionClass struct { + getVarFunctionClass +} + +func (c *getIntVarFunctionClass) getFunction(ctx sessionctx.Context, args []Expression) (sig builtinFunc, err error) { + if err = c.verifyArgs(args); err != nil { + return nil, err + } + bf, err := newBaseBuiltinFuncWithTp(ctx, c.funcName, args, types.ETInt, types.ETString) + if err != nil { return nil, err } - sig = &builtinGetVarSig{bf} + bf.tp.Flen = c.tp.Flen + bf.tp.Flag = c.tp.Flag + sig = &builtinGetIntVarSig{bf} return sig, nil } -func (c *getVarFunctionClass) resolveCollation(ctx sessionctx.Context, args []Expression, bf *baseBuiltinFunc) (err error) { - if constant, ok := args[0].(*Constant); ok { - varName, err := constant.Value.ToString() - if err != nil { - return err - } - varName = strings.ToLower(varName) - ctx.GetSessionVars().UsersLock.RLock() - defer ctx.GetSessionVars().UsersLock.RUnlock() - if v, ok := ctx.GetSessionVars().Users[varName]; ok { - bf.tp.Collate = v.Collation() - if len(bf.tp.Charset) <= 0 { - charset, _ := ctx.GetSessionVars().GetCharsetInfo() - bf.tp.Charset = charset - } - return nil - } +type builtinGetIntVarSig struct { + baseBuiltinFunc +} + +func (b *builtinGetIntVarSig) Clone() builtinFunc { + newSig := &builtinGetIntVarSig{} + newSig.cloneFrom(&b.baseBuiltinFunc) + return newSig +} + +func (b *builtinGetIntVarSig) evalInt(row chunk.Row) (int64, bool, error) { + sessionVars := b.ctx.GetSessionVars() + varName, isNull, err := b.args[0].EvalString(b.ctx, row) + if isNull || err != nil { + return 0, isNull, err + } + varName = strings.ToLower(varName) + sessionVars.UsersLock.RLock() + defer sessionVars.UsersLock.RUnlock() + if v, ok := sessionVars.Users[varName]; ok { + return v.GetInt64(), false, nil } + return 0, true, nil +} - return nil +type getRealVarFunctionClass struct { + getVarFunctionClass } -type builtinGetVarSig struct { +func (c *getRealVarFunctionClass) getFunction(ctx sessionctx.Context, args []Expression) (sig builtinFunc, err error) { + if err = c.verifyArgs(args); err != nil { + return nil, err + } + bf, err := newBaseBuiltinFuncWithTp(ctx, c.funcName, args, types.ETReal, types.ETString) + if err != nil { + return nil, err + } + bf.tp.Flen = c.tp.Flen + sig = &builtinGetRealVarSig{bf} + return sig, nil +} + +type builtinGetRealVarSig struct { baseBuiltinFunc } -func (b *builtinGetVarSig) Clone() builtinFunc { - newSig := &builtinGetVarSig{} +func (b *builtinGetRealVarSig) Clone() builtinFunc { + newSig := &builtinGetRealVarSig{} newSig.cloneFrom(&b.baseBuiltinFunc) return newSig } -func (b *builtinGetVarSig) evalString(row chunk.Row) (string, bool, error) { +func (b *builtinGetRealVarSig) evalReal(row chunk.Row) (float64, bool, error) { sessionVars := b.ctx.GetSessionVars() varName, isNull, err := b.args[0].EvalString(b.ctx, row) if isNull || err != nil { - return "", isNull, err + return 0, isNull, err } varName = strings.ToLower(varName) sessionVars.UsersLock.RLock() defer sessionVars.UsersLock.RUnlock() if v, ok := sessionVars.Users[varName]; ok { - return v.GetString(), false, nil + return v.GetFloat64(), false, nil } - return "", true, nil + return 0, true, nil +} + +type getDecimalVarFunctionClass struct { + getVarFunctionClass +} + +func (c *getDecimalVarFunctionClass) getFunction(ctx sessionctx.Context, args []Expression) (sig builtinFunc, err error) { + if err = c.verifyArgs(args); err != nil { + return nil, err + } + bf, err := newBaseBuiltinFuncWithTp(ctx, c.funcName, args, types.ETDecimal, types.ETString) + if err != nil { + return nil, err + } + bf.tp.Flen = c.tp.Flen + sig = &builtinGetDecimalVarSig{bf} + return sig, nil +} + +type builtinGetDecimalVarSig struct { + baseBuiltinFunc +} + +func (b *builtinGetDecimalVarSig) Clone() builtinFunc { + newSig := &builtinGetDecimalVarSig{} + newSig.cloneFrom(&b.baseBuiltinFunc) + return newSig +} + +func (b *builtinGetDecimalVarSig) evalDecimal(row chunk.Row) (*types.MyDecimal, bool, error) { + sessionVars := b.ctx.GetSessionVars() + varName, isNull, err := b.args[0].EvalString(b.ctx, row) + if isNull || err != nil { + return nil, isNull, err + } + varName = strings.ToLower(varName) + sessionVars.UsersLock.RLock() + defer sessionVars.UsersLock.RUnlock() + if v, ok := sessionVars.Users[varName]; ok { + return v.GetMysqlDecimal(), false, nil + } + return nil, true, nil } type valuesFunctionClass struct { diff --git a/expression/builtin_other_test.go b/expression/builtin_other_test.go index 147656756df82..205cbbba3d1d6 100644 --- a/expression/builtin_other_test.go +++ b/expression/builtin_other_test.go @@ -151,47 +151,54 @@ func (s *testEvaluatorSuite) TestRowFunc(c *C) { func (s *testEvaluatorSuite) TestSetVar(c *C) { fc := funcs[ast.SetVar] + dec := types.NewDecFromInt(5) testCases := []struct { args []interface{} res interface{} }{ {[]interface{}{"a", "12"}, "12"}, {[]interface{}{"b", "34"}, "34"}, - {[]interface{}{"c", nil}, ""}, + {[]interface{}{"c", nil}, nil}, {[]interface{}{"c", "ABC"}, "ABC"}, {[]interface{}{"c", "dEf"}, "dEf"}, + {[]interface{}{"d", int64(3)}, int64(3)}, + {[]interface{}{"e", float64(2.5)}, float64(2.5)}, + {[]interface{}{"f", dec}, dec}, } for _, tc := range testCases { fn, err := fc.getFunction(s.ctx, s.datumsToConstants(types.MakeDatums(tc.args...))) c.Assert(err, IsNil) d, err := evalBuiltinFunc(fn, chunk.MutRowFromDatums(types.MakeDatums(tc.args...)).ToRow()) c.Assert(err, IsNil) - c.Assert(d.GetString(), Equals, tc.res) + c.Assert(d.GetValue(), Equals, tc.res) if tc.args[1] != nil { key, ok := tc.args[0].(string) c.Assert(ok, Equals, true) - val, ok := tc.res.(string) - c.Assert(ok, Equals, true) sessionVar, ok := s.ctx.GetSessionVars().Users[key] c.Assert(ok, Equals, true) - c.Assert(sessionVar.GetString(), Equals, val) + c.Assert(sessionVar.GetValue(), Equals, tc.res) } } } func (s *testEvaluatorSuite) TestGetVar(c *C) { - fc := funcs[ast.GetVar] - + dec := types.NewDecFromInt(5) sessionVars := []struct { key string - val string + val interface{} }{ {"a", "中"}, {"b", "文字符chuan"}, {"c", ""}, + {"e", int64(3)}, + {"f", float64(2.5)}, + {"g", dec}, } for _, kv := range sessionVars { - s.ctx.GetSessionVars().Users[kv.key] = types.NewStringDatum(kv.val) + s.ctx.GetSessionVars().Users[kv.key] = types.NewDatum(kv.val) + tp := types.NewFieldType(mysql.TypeVarString) + types.DefaultParamTypeForValue(kv.val, tp) + s.ctx.GetSessionVars().UserVarTypes[kv.key] = tp } testCases := []struct { @@ -201,14 +208,21 @@ func (s *testEvaluatorSuite) TestGetVar(c *C) { {[]interface{}{"a"}, "中"}, {[]interface{}{"b"}, "文字符chuan"}, {[]interface{}{"c"}, ""}, - {[]interface{}{"d"}, ""}, + {[]interface{}{"d"}, nil}, + {[]interface{}{"e"}, int64(3)}, + {[]interface{}{"f"}, float64(2.5)}, + {[]interface{}{"g"}, dec}, } for _, tc := range testCases { - fn, err := fc.getFunction(s.ctx, s.datumsToConstants(types.MakeDatums(tc.args...))) + tp, ok := s.ctx.GetSessionVars().UserVarTypes[tc.args[0].(string)] + if !ok { + tp = types.NewFieldType(mysql.TypeVarString) + } + fn, err := BuildGetVarFunction(s.ctx, s.datumsToConstants(types.MakeDatums(tc.args...))[0], tp) c.Assert(err, IsNil) - d, err := evalBuiltinFunc(fn, chunk.MutRowFromDatums(types.MakeDatums(tc.args...)).ToRow()) + d, err := fn.Eval(chunk.Row{}) c.Assert(err, IsNil) - c.Assert(d.GetString(), Equals, tc.res) + c.Assert(d.GetValue(), Equals, tc.res) } } diff --git a/expression/builtin_other_vec.go b/expression/builtin_other_vec.go index 7bbbd8260857e..557f8ac87ae2e 100644 --- a/expression/builtin_other_vec.go +++ b/expression/builtin_other_vec.go @@ -155,11 +155,11 @@ func (b *builtinGetParamStringSig) vecEvalString(input *chunk.Chunk, result *chu return nil } -func (b *builtinSetVarSig) vectorized() bool { +func (b *builtinSetStringVarSig) vectorized() bool { return true } -func (b *builtinSetVarSig) vecEvalString(input *chunk.Chunk, result *chunk.Column) error { +func (b *builtinSetStringVarSig) vecEvalString(input *chunk.Chunk, result *chunk.Column) error { n := input.NumRows() buf0, err := b.bufAllocator.get(types.ETString, n) if err != nil { @@ -195,6 +195,126 @@ func (b *builtinSetVarSig) vecEvalString(input *chunk.Chunk, result *chunk.Colum return nil } +func (b *builtinSetIntVarSig) vectorized() bool { + return true +} + +func (b *builtinSetIntVarSig) vecEvalInt(input *chunk.Chunk, result *chunk.Column) error { + n := input.NumRows() + buf0, err := b.bufAllocator.get(types.ETString, n) + if err != nil { + return err + } + defer b.bufAllocator.put(buf0) + if err := b.args[0].VecEvalString(b.ctx, input, buf0); err != nil { + return err + } + buf1, err := b.bufAllocator.get(types.ETInt, n) + if err != nil { + return err + } + defer b.bufAllocator.put(buf1) + if err := b.args[1].VecEvalInt(b.ctx, input, buf1); err != nil { + return err + } + result.ResizeInt64(n, false) + i64s := result.Int64s() + sessionVars := b.ctx.GetSessionVars() + sessionVars.UsersLock.Lock() + defer sessionVars.UsersLock.Unlock() + for i := 0; i < n; i++ { + if buf0.IsNull(i) || buf1.IsNull(i) { + result.SetNull(i, true) + continue + } + varName := strings.ToLower(buf0.GetString(i)) + res := buf1.GetInt64(i) + sessionVars.Users[varName] = types.NewIntDatum(res) + i64s[i] = res + } + return nil +} + +func (b *builtinSetRealVarSig) vectorized() bool { + return true +} + +func (b *builtinSetRealVarSig) vecEvalReal(input *chunk.Chunk, result *chunk.Column) error { + n := input.NumRows() + buf0, err := b.bufAllocator.get(types.ETString, n) + if err != nil { + return err + } + defer b.bufAllocator.put(buf0) + if err := b.args[0].VecEvalString(b.ctx, input, buf0); err != nil { + return err + } + buf1, err := b.bufAllocator.get(types.ETReal, n) + if err != nil { + return err + } + defer b.bufAllocator.put(buf1) + if err := b.args[1].VecEvalReal(b.ctx, input, buf1); err != nil { + return err + } + result.ResizeFloat64(n, false) + f64s := result.Float64s() + sessionVars := b.ctx.GetSessionVars() + sessionVars.UsersLock.Lock() + defer sessionVars.UsersLock.Unlock() + for i := 0; i < n; i++ { + if buf0.IsNull(i) || buf1.IsNull(i) { + result.SetNull(i, true) + continue + } + varName := strings.ToLower(buf0.GetString(i)) + res := buf1.GetFloat64(i) + sessionVars.Users[varName] = types.NewFloat64Datum(res) + f64s[i] = res + } + return nil +} + +func (b *builtinSetDecimalVarSig) vectorized() bool { + return true +} + +func (b *builtinSetDecimalVarSig) vecEvalDecimal(input *chunk.Chunk, result *chunk.Column) error { + n := input.NumRows() + buf0, err := b.bufAllocator.get(types.ETString, n) + if err != nil { + return err + } + defer b.bufAllocator.put(buf0) + if err := b.args[0].VecEvalString(b.ctx, input, buf0); err != nil { + return err + } + buf1, err := b.bufAllocator.get(types.ETDecimal, n) + if err != nil { + return err + } + defer b.bufAllocator.put(buf1) + if err := b.args[1].VecEvalDecimal(b.ctx, input, buf1); err != nil { + return err + } + result.ResizeDecimal(n, false) + decs := result.Decimals() + sessionVars := b.ctx.GetSessionVars() + sessionVars.UsersLock.Lock() + defer sessionVars.UsersLock.Unlock() + for i := 0; i < n; i++ { + if buf0.IsNull(i) || buf1.IsNull(i) { + result.SetNull(i, true) + continue + } + varName := strings.ToLower(buf0.GetString(i)) + res := buf1.GetDecimal(i) + sessionVars.Users[varName] = types.NewDecimalDatum(res) + decs[i] = *res + } + return nil +} + func (b *builtinValuesDecimalSig) vectorized() bool { return false } @@ -203,11 +323,11 @@ func (b *builtinValuesDecimalSig) vecEvalDecimal(input *chunk.Chunk, result *chu return errors.Errorf("not implemented") } -func (b *builtinGetVarSig) vectorized() bool { +func (b *builtinGetStringVarSig) vectorized() bool { return true } -func (b *builtinGetVarSig) vecEvalString(input *chunk.Chunk, result *chunk.Column) error { +func (b *builtinGetStringVarSig) vecEvalString(input *chunk.Chunk, result *chunk.Column) error { n := input.NumRows() buf0, err := b.bufAllocator.get(types.ETString, n) if err != nil { @@ -235,3 +355,105 @@ func (b *builtinGetVarSig) vecEvalString(input *chunk.Chunk, result *chunk.Colum } return nil } + +func (b *builtinGetIntVarSig) vectorized() bool { + return true +} + +func (b *builtinGetIntVarSig) vecEvalInt(input *chunk.Chunk, result *chunk.Column) error { + n := input.NumRows() + buf0, err := b.bufAllocator.get(types.ETString, n) + if err != nil { + return err + } + defer b.bufAllocator.put(buf0) + if err := b.args[0].VecEvalString(b.ctx, input, buf0); err != nil { + return err + } + result.ResizeInt64(n, false) + result.MergeNulls(buf0) + i64s := result.Int64s() + sessionVars := b.ctx.GetSessionVars() + sessionVars.UsersLock.Lock() + defer sessionVars.UsersLock.Unlock() + for i := 0; i < n; i++ { + if result.IsNull(i) { + continue + } + varName := strings.ToLower(buf0.GetString(i)) + if v, ok := sessionVars.Users[varName]; ok { + i64s[i] = v.GetInt64() + continue + } + result.SetNull(i, true) + } + return nil +} + +func (b *builtinGetRealVarSig) vectorized() bool { + return true +} + +func (b *builtinGetRealVarSig) vecEvalReal(input *chunk.Chunk, result *chunk.Column) error { + n := input.NumRows() + buf0, err := b.bufAllocator.get(types.ETString, n) + if err != nil { + return err + } + defer b.bufAllocator.put(buf0) + if err := b.args[0].VecEvalString(b.ctx, input, buf0); err != nil { + return err + } + result.ResizeFloat64(n, false) + result.MergeNulls(buf0) + f64s := result.Float64s() + sessionVars := b.ctx.GetSessionVars() + sessionVars.UsersLock.Lock() + defer sessionVars.UsersLock.Unlock() + for i := 0; i < n; i++ { + if result.IsNull(i) { + continue + } + varName := strings.ToLower(buf0.GetString(i)) + if v, ok := sessionVars.Users[varName]; ok { + f64s[i] = v.GetFloat64() + continue + } + result.SetNull(i, true) + } + return nil +} + +func (b *builtinGetDecimalVarSig) vectorized() bool { + return true +} + +func (b *builtinGetDecimalVarSig) vecEvalDecimal(input *chunk.Chunk, result *chunk.Column) error { + n := input.NumRows() + buf0, err := b.bufAllocator.get(types.ETString, n) + if err != nil { + return err + } + defer b.bufAllocator.put(buf0) + if err := b.args[0].VecEvalString(b.ctx, input, buf0); err != nil { + return err + } + result.ResizeDecimal(n, false) + result.MergeNulls(buf0) + decs := result.Decimals() + sessionVars := b.ctx.GetSessionVars() + sessionVars.UsersLock.Lock() + defer sessionVars.UsersLock.Unlock() + for i := 0; i < n; i++ { + if result.IsNull(i) { + continue + } + varName := strings.ToLower(buf0.GetString(i)) + if v, ok := sessionVars.Users[varName]; ok { + decs[i] = *v.GetMysqlDecimal() + continue + } + result.SetNull(i, true) + } + return nil +} diff --git a/expression/builtin_other_vec_test.go b/expression/builtin_other_vec_test.go index 55541186822d0..b042de216115d 100644 --- a/expression/builtin_other_vec_test.go +++ b/expression/builtin_other_vec_test.go @@ -36,6 +36,9 @@ func dateTimeFromString(s string) types.Time { var vecBuiltinOtherCases = map[string][]vecExprBenchCase{ ast.SetVar: { {retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETString, types.ETString}}, + {retEvalType: types.ETInt, childrenTypes: []types.EvalType{types.ETString, types.ETInt}}, + {retEvalType: types.ETReal, childrenTypes: []types.EvalType{types.ETString, types.ETReal}}, + {retEvalType: types.ETDecimal, childrenTypes: []types.EvalType{types.ETString, types.ETDecimal}}, }, ast.GetVar: { {retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETString}}, diff --git a/expression/distsql_builtin.go b/expression/distsql_builtin.go index a5e707cadf29e..97f199885fd27 100644 --- a/expression/distsql_builtin.go +++ b/expression/distsql_builtin.go @@ -487,10 +487,10 @@ func getSignatureByPB(ctx sessionctx.Context, sigCode tipb.ScalarFuncSig, tp *ti case tipb.ScalarFuncSig_GetParamString: f = &builtinGetParamStringSig{base} case tipb.ScalarFuncSig_GetVar: - f = &builtinGetVarSig{base} + f = &builtinGetStringVarSig{base} //case tipb.ScalarFuncSig_RowSig: case tipb.ScalarFuncSig_SetVar: - f = &builtinSetVarSig{base} + f = &builtinSetStringVarSig{base} //case tipb.ScalarFuncSig_ValuesDecimal: // f = &builtinValuesDecimalSig{base} //case tipb.ScalarFuncSig_ValuesDuration: diff --git a/expression/integration_test.go b/expression/integration_test.go index 7656137eb914c..586333f97ef42 100755 --- a/expression/integration_test.go +++ b/expression/integration_test.go @@ -5892,9 +5892,6 @@ func (s *testIntegrationSuite) TestCollation(c *C) { tk.MustExec("set names utf8mb4 collate utf8mb4_general_ci") tk.MustExec("set @test_collate_var = 'a'") tk.MustQuery("select collation(@test_collate_var)").Check(testkit.Rows("utf8mb4_general_ci")) - tk.MustExec("set names utf8mb4 collate utf8mb4_general_ci") - tk.MustExec("set @test_collate_var = 1") - tk.MustQuery("select collation(@test_collate_var)").Check(testkit.Rows("utf8mb4_general_ci")) tk.MustExec("set @test_collate_var = concat(\"a\", \"b\" collate utf8mb4_bin)") tk.MustQuery("select collation(@test_collate_var)").Check(testkit.Rows("utf8mb4_bin")) } diff --git a/expression/scalar_function.go b/expression/scalar_function.go index 7052509dbbab9..8301e01750ace 100755 --- a/expression/scalar_function.go +++ b/expression/scalar_function.go @@ -181,8 +181,11 @@ func newFunctionImpl(ctx sessionctx.Context, fold int, funcName string, retType if retType == nil { return nil, errors.Errorf("RetType cannot be nil for ScalarFunction.") } - if funcName == ast.Cast { + switch funcName { + case ast.Cast: return BuildCastFunction(ctx, args[0], retType), nil + case ast.GetVar: + return BuildGetVarFunction(ctx, args[0], retType) } fc, ok := funcs[funcName] if !ok { diff --git a/expression/util_test.go b/expression/util_test.go index b86968c9675db..377f7e6e8273e 100644 --- a/expression/util_test.go +++ b/expression/util_test.go @@ -124,7 +124,8 @@ func (s *testUtilSuite) TestClone(c *check.C) { &builtinUnaryMinusIntSig{}, &builtinDecimalIsNullSig{}, &builtinDurationIsNullSig{}, &builtinIntIsNullSig{}, &builtinRealIsNullSig{}, &builtinStringIsNullSig{}, &builtinTimeIsNullSig{}, &builtinUnaryNotRealSig{}, &builtinUnaryNotDecimalSig{}, &builtinUnaryNotIntSig{}, &builtinSleepSig{}, &builtinInIntSig{}, &builtinInStringSig{}, &builtinInDecimalSig{}, &builtinInRealSig{}, &builtinInTimeSig{}, &builtinInDurationSig{}, - &builtinInJSONSig{}, &builtinRowSig{}, &builtinSetVarSig{}, &builtinGetVarSig{}, &builtinLockSig{}, + &builtinInJSONSig{}, &builtinRowSig{}, &builtinSetStringVarSig{}, &builtinSetIntVarSig{}, &builtinSetRealVarSig{}, &builtinSetDecimalVarSig{}, + &builtinGetIntVarSig{}, &builtinGetRealVarSig{}, &builtinGetDecimalVarSig{}, &builtinGetStringVarSig{}, &builtinLockSig{}, &builtinReleaseLockSig{}, &builtinValuesIntSig{}, &builtinValuesRealSig{}, &builtinValuesDecimalSig{}, &builtinValuesStringSig{}, &builtinValuesTimeSig{}, &builtinValuesDurationSig{}, &builtinValuesJSONSig{}, &builtinBitCountSig{}, &builtinGetParamStringSig{}, &builtinLengthSig{}, &builtinASCIISig{}, &builtinConcatSig{}, &builtinConcatWSSig{}, &builtinLeftSig{}, diff --git a/planner/cascades/testdata/transformation_rules_suite_out.json b/planner/cascades/testdata/transformation_rules_suite_out.json index c78557711b199..36fe4b319c1c8 100644 --- a/planner/cascades/testdata/transformation_rules_suite_out.json +++ b/planner/cascades/testdata/transformation_rules_suite_out.json @@ -53,9 +53,9 @@ "SQL": "select b, @i:=@i+1 as ii from (select b, @i:=0 from t as t1) as t2 where @i < 10", "Result": [ "Group#0 Schema:[test.t.b,Column#14]", - " Projection_4 input:[Group#1], test.t.b, setvar(i, cast(plus(cast(getvar(i), double BINARY), 1), var_string(5)))->Column#14", + " Projection_4 input:[Group#1], test.t.b, setvar(i, plus(getvar(i), 1))->Column#14", "Group#1 Schema:[test.t.b,Column#13]", - " Selection_3 input:[Group#2], lt(cast(getvar(\"i\")), 10)", + " Selection_3 input:[Group#2], lt(getvar(\"i\"), 10)", "Group#2 Schema:[test.t.b,Column#13]", " Projection_2 input:[Group#3], test.t.b, setvar(i, 0)->Column#13", "Group#3 Schema:[test.t.b]", @@ -68,9 +68,9 @@ "SQL": "select b, @i:=@i+1 as ii from (select a, b, @i:=0 from t as t1) as t2 where @i < 10 and a > 10", "Result": [ "Group#0 Schema:[test.t.b,Column#14]", - " Projection_4 input:[Group#1], test.t.b, setvar(i, cast(plus(cast(getvar(i), double BINARY), 1), var_string(5)))->Column#14", + " Projection_4 input:[Group#1], test.t.b, setvar(i, plus(getvar(i), 1))->Column#14", "Group#1 Schema:[test.t.a,test.t.b,Column#13]", - " Selection_6 input:[Group#2], lt(cast(getvar(\"i\")), 10)", + " Selection_6 input:[Group#2], lt(getvar(\"i\"), 10)", "Group#2 Schema:[test.t.a,test.t.b,Column#13]", " Projection_2 input:[Group#3], test.t.a, test.t.b, setvar(i, 0)->Column#13", "Group#3 Schema:[test.t.a,test.t.b]", @@ -495,7 +495,7 @@ "Group#1 Schema:[Column#13,Column#14]", " TopN_7 input:[Group#2], Column#13:desc, offset:0, count:1", "Group#2 Schema:[Column#13,Column#14]", - " Projection_2 input:[Group#3], getvar(i)->Column#13, setvar(i, cast(plus(cast(getvar(i), double BINARY), 1), var_string(5)))->Column#14", + " Projection_2 input:[Group#3], getvar(i)->Column#13, setvar(i, plus(getvar(i), 1))->Column#14", "Group#3 Schema:[test.t.a]", " TiKVSingleGather_9 input:[Group#4], table:t", " TiKVSingleGather_21 input:[Group#5], table:t, index:e_d_c_str_prefix", diff --git a/planner/core/cache.go b/planner/core/cache.go index 28a3e16456a9d..106ab9e84fe9a 100644 --- a/planner/core/cache.go +++ b/planner/core/cache.go @@ -147,23 +147,45 @@ func NewPSTMTPlanCacheKey(sessionVars *variable.SessionVars, pstmtID uint32, sch return key } +// FieldSlice is the slice of the types.FieldType +type FieldSlice []types.FieldType + +// Equal compares FieldSlice with []*types.FieldType +func (s FieldSlice) Equal(tps []*types.FieldType) bool { + if len(s) != len(tps) { + return false + } + for i := range tps { + if !s[i].Equal(tps[i]) { + return false + } + } + return true +} + // PSTMTPlanCacheValue stores the cached Statement and StmtNode. type PSTMTPlanCacheValue struct { Plan Plan OutPutNames []*types.FieldName TblInfo2UnionScan map[*model.TableInfo]bool + UserVarTypes FieldSlice } // NewPSTMTPlanCacheValue creates a SQLCacheValue. -func NewPSTMTPlanCacheValue(plan Plan, names []*types.FieldName, srcMap map[*model.TableInfo]bool) *PSTMTPlanCacheValue { +func NewPSTMTPlanCacheValue(plan Plan, names []*types.FieldName, srcMap map[*model.TableInfo]bool, userVarTps []*types.FieldType) *PSTMTPlanCacheValue { dstMap := make(map[*model.TableInfo]bool) for k, v := range srcMap { dstMap[k] = v } + userVarTypes := make([]types.FieldType, len(userVarTps)) + for i, tp := range userVarTps { + userVarTypes[i] = *tp + } return &PSTMTPlanCacheValue{ Plan: plan, OutPutNames: names, TblInfo2UnionScan: dstMap, + UserVarTypes: userVarTypes, } } diff --git a/planner/core/common_plans.go b/planner/core/common_plans.go index 452fa9f03afec..5d8bd2d6adb3a 100644 --- a/planner/core/common_plans.go +++ b/planner/core/common_plans.go @@ -283,6 +283,14 @@ func (e *Execute) getPhysicalPlan(ctx context.Context, sctx sessionctx.Context, if prepared.UseCache { cacheKey = NewPSTMTPlanCacheKey(sctx.GetSessionVars(), e.ExecID, prepared.SchemaVersion) } + tps := make([]*types.FieldType, len(e.UsingVars)) + for i, param := range e.UsingVars { + name := param.(*expression.ScalarFunction).GetArgs()[0].String() + tps[i] = sctx.GetSessionVars().UserVarTypes[name] + if tps[i] == nil { + tps[i] = types.NewFieldType(mysql.TypeNull) + } + } if prepared.CachedPlan != nil { // Rewriting the expression in the select.where condition will convert its // type from "paramMarker" to "Constant".When Point Select queries are executed, @@ -314,36 +322,42 @@ func (e *Execute) getPhysicalPlan(ctx context.Context, sctx sessionctx.Context, if err := e.checkPreparedPriv(ctx, sctx, preparedStmt, is); err != nil { return err } - cachedVal := cacheValue.(*PSTMTPlanCacheValue) - planValid := true - for tblInfo, unionScan := range cachedVal.TblInfo2UnionScan { - if !unionScan && tableHasDirtyContent(sctx, tblInfo) { - planValid = false - // TODO we can inject UnionScan into cached plan to avoid invalidating it, though - // rebuilding the filters in UnionScan is pretty trivial. - sctx.PreparedPlanCache().Delete(cacheKey) - break - } - } - if planValid { - err := e.rebuildRange(cachedVal.Plan) - if err != nil { - logutil.BgLogger().Debug("rebuild range failed", zap.Error(err)) - goto REBUILD + cachedVals := cacheValue.([]*PSTMTPlanCacheValue) + for _, cachedVal := range cachedVals { + if !cachedVal.UserVarTypes.Equal(tps) { + continue } - err = e.setFoundInPlanCache(sctx, true) - if err != nil { - return err + planValid := true + for tblInfo, unionScan := range cachedVal.TblInfo2UnionScan { + if !unionScan && tableHasDirtyContent(sctx, tblInfo) { + planValid = false + // TODO we can inject UnionScan into cached plan to avoid invalidating it, though + // rebuilding the filters in UnionScan is pretty trivial. + sctx.PreparedPlanCache().Delete(cacheKey) + break + } } - if metrics.ResettablePlanCacheCounterFortTest { - metrics.PlanCacheCounter.WithLabelValues("prepare").Inc() - } else { - planCacheCounter.Inc() + if planValid { + err := e.rebuildRange(cachedVal.Plan) + if err != nil { + logutil.BgLogger().Debug("rebuild range failed", zap.Error(err)) + goto REBUILD + } + err = e.setFoundInPlanCache(sctx, true) + if err != nil { + return err + } + if metrics.ResettablePlanCacheCounterFortTest { + metrics.PlanCacheCounter.WithLabelValues("prepare").Inc() + } else { + planCacheCounter.Inc() + } + e.names = cachedVal.OutPutNames + e.Plan = cachedVal.Plan + stmtCtx.SetPlanDigest(preparedStmt.NormalizedPlan, preparedStmt.PlanDigest) + return nil } - e.names = cachedVal.OutPutNames - e.Plan = cachedVal.Plan - stmtCtx.SetPlanDigest(preparedStmt.NormalizedPlan, preparedStmt.PlanDigest) - return nil + break } } } @@ -362,10 +376,25 @@ REBUILD: e.Plan = p _, isTableDual := p.(*PhysicalTableDual) if !isTableDual && prepared.UseCache { - cached := NewPSTMTPlanCacheValue(p, names, stmtCtx.TblInfo2UnionScan) + cached := NewPSTMTPlanCacheValue(p, names, stmtCtx.TblInfo2UnionScan, tps) preparedStmt.NormalizedPlan, preparedStmt.PlanDigest = NormalizePlan(p) stmtCtx.SetPlanDigest(preparedStmt.NormalizedPlan, preparedStmt.PlanDigest) - sctx.PreparedPlanCache().Put(cacheKey, cached) + if cacheVals, exists := sctx.PreparedPlanCache().Get(cacheKey); exists { + hitVal := false + for i, cacheVal := range cacheVals.([]*PSTMTPlanCacheValue) { + if cacheVal.UserVarTypes.Equal(tps) { + hitVal = true + cacheVals.([]*PSTMTPlanCacheValue)[i] = cached + break + } + } + if !hitVal { + cacheVals = append(cacheVals.([]*PSTMTPlanCacheValue), cached) + } + sctx.PreparedPlanCache().Put(cacheKey, cacheVals) + } else { + sctx.PreparedPlanCache().Put(cacheKey, []*PSTMTPlanCacheValue{cached}) + } } err = e.setFoundInPlanCache(sctx, false) return err diff --git a/planner/core/expression_rewriter.go b/planner/core/expression_rewriter.go index 01fd4acc9c698..18d7de57e80d2 100644 --- a/planner/core/expression_rewriter.go +++ b/planner/core/expression_rewriter.go @@ -1139,17 +1139,27 @@ func (er *expressionRewriter) rewriteVariable(v *ast.VariableExpr) { sessionVars := er.b.ctx.GetSessionVars() if !v.IsSystem { if v.Value != nil { - er.ctxStack[stkLen-1], er.err = er.newFunction(ast.SetVar, - er.ctxStack[stkLen-1].GetType(), + tp := er.ctxStack[stkLen-1].GetType() + er.ctxStack[stkLen-1], er.err = er.newFunction(ast.SetVar, tp, expression.DatumToConstant(types.NewDatum(name), mysql.TypeString), er.ctxStack[stkLen-1]) er.ctxNameStk[stkLen-1] = types.EmptyName + // Store the field type of the variable into SessionVars.UserVarTypes. + // Normally we can infer the type from SessionVars.User, but we need SessionVars.UserVarTypes when + // GetVar has not been executed to fill the SessionVars.Users. + sessionVars.UsersLock.Lock() + sessionVars.UserVarTypes[name] = tp + sessionVars.UsersLock.Unlock() return } - f, err := er.newFunction(ast.GetVar, - // TODO: Here is wrong, the sessionVars should store a name -> Datum map. Will fix it later. - types.NewFieldType(mysql.TypeString), - expression.DatumToConstant(types.NewStringDatum(name), mysql.TypeString)) + sessionVars.UsersLock.RLock() + tp, ok := sessionVars.UserVarTypes[name] + sessionVars.UsersLock.RUnlock() + if !ok { + tp = types.NewFieldType(mysql.TypeVarString) + tp.Flen = mysql.MaxFieldVarCharLength + } + f, err := er.newFunction(ast.GetVar, tp, expression.DatumToConstant(types.NewStringDatum(name), mysql.TypeString)) if err != nil { er.err = err return diff --git a/planner/core/logical_plan_builder.go b/planner/core/logical_plan_builder.go index 8d85008919211..6a253e303611c 100644 --- a/planner/core/logical_plan_builder.go +++ b/planner/core/logical_plan_builder.go @@ -1034,6 +1034,50 @@ func (b *PlanBuilder) buildProjectionField(ctx context.Context, p LogicalPlan, f return newCol, name, nil } +type userVarTypeProcessor struct { + ctx context.Context + plan LogicalPlan + builder *PlanBuilder + mapper map[*ast.AggregateFuncExpr]int + err error +} + +func (p *userVarTypeProcessor) Enter(in ast.Node) (ast.Node, bool) { + v, ok := in.(*ast.VariableExpr) + if !ok { + return in, false + } + if v.IsSystem || v.Value == nil { + return in, true + } + _, p.plan, p.err = p.builder.rewrite(p.ctx, v, p.plan, p.mapper, true) + return in, true +} + +func (p *userVarTypeProcessor) Leave(in ast.Node) (ast.Node, bool) { + return in, p.err == nil +} + +func (b *PlanBuilder) preprocessUserVarTypes(ctx context.Context, p LogicalPlan, fields []*ast.SelectField, mapper map[*ast.AggregateFuncExpr]int) error { + aggMapper := make(map[*ast.AggregateFuncExpr]int) + for agg, i := range mapper { + aggMapper[agg] = i + } + processor := userVarTypeProcessor{ + ctx: ctx, + plan: p, + builder: b, + mapper: aggMapper, + } + for _, field := range fields { + field.Expr.Accept(&processor) + if processor.err != nil { + return processor.err + } + } + return nil +} + // findColFromNaturalUsingJoin is used to recursively find the column from the // underlying natural-using-join. // e.g. For SQL like `select t2.a from t1 join t2 using(a) where t2.a > 0`, the @@ -1055,6 +1099,10 @@ func findColFromNaturalUsingJoin(p LogicalPlan, col *expression.Column) (name *t // buildProjection returns a Projection plan and non-aux columns length. func (b *PlanBuilder) buildProjection(ctx context.Context, p LogicalPlan, fields []*ast.SelectField, mapper map[*ast.AggregateFuncExpr]int, windowMapper map[*ast.WindowFuncExpr]int, considerWindow bool, expandGenerateColumn bool) (LogicalPlan, int, error) { + err := b.preprocessUserVarTypes(ctx, p, fields, mapper) + if err != nil { + return nil, 0, err + } b.optFlag |= flagEliminateProjection b.curClause = fieldList proj := LogicalProjection{Exprs: make([]expression.Expression, 0, len(fields))}.Init(b.ctx, b.getSelectOffset()) diff --git a/planner/core/planbuilder.go b/planner/core/planbuilder.go index d484ca01aae41..52fb454d732e1 100644 --- a/planner/core/planbuilder.go +++ b/planner/core/planbuilder.go @@ -971,7 +971,12 @@ func (b *PlanBuilder) buildPrepare(x *ast.PrepareStmt) Plan { } if x.SQLVar != nil { if v, ok := b.ctx.GetSessionVars().Users[strings.ToLower(x.SQLVar.Name)]; ok { - p.SQLText = v.GetString() + var err error + p.SQLText, err = v.ToString() + if err != nil { + b.ctx.GetSessionVars().StmtCtx.AppendWarning(err) + p.SQLText = "NULL" + } } else { p.SQLText = "NULL" } diff --git a/sessionctx/variable/session.go b/sessionctx/variable/session.go index 04a0298b8d280..ce1efe9701a00 100644 --- a/sessionctx/variable/session.go +++ b/sessionctx/variable/session.go @@ -319,6 +319,9 @@ type SessionVars struct { UsersLock sync.RWMutex // Users are user defined variables. Users map[string]types.Datum + // UserVarTypes stores the FieldType for user variables, it cannot be inferred from Users when Users have not been set yet. + // It is read/write protected by UsersLock. + UserVarTypes map[string]*types.FieldType // systems variables, don't modify it directly, use GetSystemVar/SetSystemVar method. systems map[string]string // SysWarningCount is the system variable "warning_count", because it is on the hot path, so we extract it from the systems @@ -681,6 +684,7 @@ type ConnectionInfo struct { func NewSessionVars() *SessionVars { vars := &SessionVars{ Users: make(map[string]types.Datum), + UserVarTypes: make(map[string]*types.FieldType), systems: make(map[string]string), PreparedStmts: make(map[uint32]interface{}), PreparedStmtNameToID: make(map[string]uint32), From 295e70254ff3076d4ed1c897b9456348d0fed4e1 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Thu, 26 Nov 2020 12:02:21 +0800 Subject: [PATCH 171/229] planner: disallow multi-updates on primary key (#20603) (#21113) Signed-off-by: ti-srebot --- errors.toml | 5 ++++ executor/executor_test.go | 8 +++--- planner/core/errors.go | 1 + planner/core/integration_test.go | 35 +++++++++++++++++++++++ planner/core/logical_plan_builder.go | 16 +++++++++++ planner/core/testdata/plan_suite_in.json | 4 +-- planner/core/testdata/plan_suite_out.json | 4 +-- 7 files changed, 65 insertions(+), 8 deletions(-) diff --git a/errors.toml b/errors.toml index 402c3c85ce207..3a6b1639cc907 100644 --- a/errors.toml +++ b/errors.toml @@ -776,6 +776,11 @@ error = ''' `%-.192s`.`%-.192s` contains view recursion ''' +["planner:1706"] +error = ''' +Primary key/partition key update is not allowed since the table is updated both as '%-.192s' and '%-.192s'. +''' + ["planner:1747"] error = ''' PARTITION () clause on non partitioned table diff --git a/executor/executor_test.go b/executor/executor_test.go index a2b6dba635723..0960158a54c18 100644 --- a/executor/executor_test.go +++ b/executor/executor_test.go @@ -1881,16 +1881,16 @@ func (s *testSuiteP1) TestGeneratedColumnRead(c *C) { result.Check(testkit.Rows(`0 `, `1 3 2 6`, `3 7 12 14`, `8 16 64 32`)) // Test multi-update on generated columns. - tk.MustExec(`UPDATE test_gc_read m, test_gc_read n SET m.a = m.a + 10, n.a = n.a + 10`) + tk.MustExec(`UPDATE test_gc_read m, test_gc_read n SET m.b = m.b + 10, n.b = n.b + 10`) result = tk.MustQuery(`SELECT * FROM test_gc_read ORDER BY a`) - result.Check(testkit.Rows(`10 `, `11 2 13 22 26`, `13 4 17 52 34`, `18 8 26 144 52`)) + result.Check(testkit.Rows(`0 `, `1 12 13 12 26`, `3 14 17 42 34`, `8 18 26 144 52`)) tk.MustExec("drop table if exists t") tk.MustExec("create table t(a int)") - tk.MustExec("insert into t values(18)") + tk.MustExec("insert into t values(8)") tk.MustExec("update test_gc_read set a = a+1 where a in (select a from t)") result = tk.MustQuery("select * from test_gc_read order by a") - result.Check(testkit.Rows(`10 `, `11 2 13 22 26`, `13 4 17 52 34`, `19 8 27 152 54`)) + result.Check(testkit.Rows(`0 `, `1 12 13 12 26`, `3 14 17 42 34`, `9 18 27 162 54`)) // Test different types between generation expression and generated column. tk.MustExec(`CREATE TABLE test_gc_read_cast(a VARCHAR(255), b VARCHAR(255), c INT AS (JSON_EXTRACT(a, b)), d INT AS (JSON_EXTRACT(a, b)) STORED)`) diff --git a/planner/core/errors.go b/planner/core/errors.go index a0f075539a493..c86d4c2c86817 100644 --- a/planner/core/errors.go +++ b/planner/core/errors.go @@ -45,6 +45,7 @@ var ( ErrWrongGroupField = dbterror.ClassOptimizer.NewStd(mysql.ErrWrongGroupField) ErrDupFieldName = dbterror.ClassOptimizer.NewStd(mysql.ErrDupFieldName) ErrNonUpdatableTable = dbterror.ClassOptimizer.NewStd(mysql.ErrNonUpdatableTable) + ErrMultiUpdateKeyConflict = dbterror.ClassOptimizer.NewStd(mysql.ErrMultiUpdateKeyConflict) ErrInternal = dbterror.ClassOptimizer.NewStd(mysql.ErrInternal) ErrNonUniqTable = dbterror.ClassOptimizer.NewStd(mysql.ErrNonuniqTable) ErrWindowInvalidWindowFuncUse = dbterror.ClassOptimizer.NewStd(mysql.ErrWindowInvalidWindowFuncUse) diff --git a/planner/core/integration_test.go b/planner/core/integration_test.go index fcc974bd41d5e..252130949a8d4 100644 --- a/planner/core/integration_test.go +++ b/planner/core/integration_test.go @@ -1523,3 +1523,38 @@ func (s *testIntegrationSuite) TestIssue10448(c *C) { tk.MustExec("insert into t values(1),(2),(3)") tk.MustQuery("select a from (select pk as a from t) t1 where a = 18446744073709551615").Check(testkit.Rows()) } + +func (s *testIntegrationSuite) TestUpdateMultiUpdatePK(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + + tk.MustExec("drop table if exists t") + tk.MustExec("create table t (a int not null primary key)") + tk.MustExec("insert into t values (1)") + tk.MustGetErrMsg(`UPDATE t m, t n SET m.a = m.a + 10, n.a = n.a + 10`, + `[planner:1706]Primary key/partition key update is not allowed since the table is updated both as 'm' and 'n'.`) + + tk.MustExec("drop table if exists t") + tk.MustExec("create table t (a varchar(10) not null primary key)") + tk.MustExec("insert into t values ('abc')") + tk.MustGetErrMsg(`UPDATE t m, t n SET m.a = 'def', n.a = 'xyz'`, + `[planner:1706]Primary key/partition key update is not allowed since the table is updated both as 'm' and 'n'.`) + + tk.MustExec("drop table if exists t") + tk.MustExec("create table t (a int, b int, primary key (a, b))") + tk.MustExec("insert into t values (1, 2)") + tk.MustGetErrMsg(`UPDATE t m, t n SET m.a = m.a + 10, n.b = n.b + 10`, + `[planner:1706]Primary key/partition key update is not allowed since the table is updated both as 'm' and 'n'.`) + + tk.MustExec("drop table if exists t") + tk.MustExec("create table t (a int primary key, b int)") + tk.MustExec("insert into t values (1, 2)") + tk.MustGetErrMsg(`UPDATE t m, t n SET m.a = m.a + 10, n.a = n.a + 10`, + `[planner:1706]Primary key/partition key update is not allowed since the table is updated both as 'm' and 'n'.`) + + tk.MustExec(`UPDATE t m, t n SET m.b = m.b + 10, n.b = n.b + 10`) + tk.MustQuery("SELECT * FROM t").Check(testkit.Rows("1 12")) + + tk.MustExec(`UPDATE t m, t n SET m.a = m.a + 1, n.b = n.b + 10`) + tk.MustQuery("SELECT * FROM t").Check(testkit.Rows("2 12")) +} diff --git a/planner/core/logical_plan_builder.go b/planner/core/logical_plan_builder.go index 6a253e303611c..047f8c541ccdf 100644 --- a/planner/core/logical_plan_builder.go +++ b/planner/core/logical_plan_builder.go @@ -3641,13 +3641,29 @@ func checkUpdateList(ctx sessionctx.Context, tblID2table map[int64]table.Table, if err != nil { return err } + isPKUpdated := make(map[int64]model.CIStr) for _, content := range updt.TblColPosInfos { tbl := tblID2table[content.TblID] flags := assignFlags[content.Start:content.End] + var updatePK bool for i, col := range tbl.WritableCols() { if flags[i] && col.State != model.StatePublic { return ErrUnknownColumn.GenWithStackByArgs(col.Name, clauseMsg[fieldList]) } + // Check for multi-updates on primary key, + // see https://dev.mysql.com/doc/mysql-errors/5.7/en/server-error-reference.html#error_er_multi_update_key_conflict + if !flags[i] { + continue + } + if mysql.HasPriKeyFlag(col.Flag) { + updatePK = true + } + } + if updatePK { + if otherTblName, ok := isPKUpdated[tbl.Meta().ID]; ok { + return ErrMultiUpdateKeyConflict.GenWithStackByArgs(otherTblName.O, updt.names[content.Start].TblName.O) + } + isPKUpdated[tbl.Meta().ID] = updt.names[content.Start].TblName } } return nil diff --git a/planner/core/testdata/plan_suite_in.json b/planner/core/testdata/plan_suite_in.json index b54ea9f07e447..63caf01065252 100644 --- a/planner/core/testdata/plan_suite_in.json +++ b/planner/core/testdata/plan_suite_in.json @@ -247,8 +247,8 @@ // Test join hint for delete and update "delete /*+ TIDB_INLJ(t1, t2) */ t1 from t t1, t t2 where t1.c=t2.c", "delete /*+ TIDB_SMJ(t1, t2) */ from t1 using t t1, t t2 where t1.c=t2.c", - "update /*+ TIDB_SMJ(t1, t2) */ t t1, t t2 set t1.a=1, t2.a=1 where t1.a=t2.a", - "update /*+ TIDB_HJ(t1, t2) */ t t1, t t2 set t1.a=1, t2.a=1 where t1.a=t2.a", + "update /*+ TIDB_SMJ(t1, t2) */ t t1, t t2 set t1.c=1, t2.a=1 where t1.a=t2.a", + "update /*+ TIDB_HJ(t1, t2) */ t t1, t t2 set t1.c=1, t2.a=1 where t1.a=t2.a", // Test complex delete. "delete from t where b < 1 order by d limit 1", // Test simple delete. diff --git a/planner/core/testdata/plan_suite_out.json b/planner/core/testdata/plan_suite_out.json index 3c2141fc141ba..4379fe40a2ed5 100644 --- a/planner/core/testdata/plan_suite_out.json +++ b/planner/core/testdata/plan_suite_out.json @@ -677,12 +677,12 @@ "Hints": "use_index(@`del_1` `test`.`t1` `c_d_e`), use_index(@`del_1` `test`.`t2` `c_d_e`), merge_join(@`del_1` `test`.`t1`)" }, { - "SQL": "update /*+ TIDB_SMJ(t1, t2) */ t t1, t t2 set t1.a=1, t2.a=1 where t1.a=t2.a", + "SQL": "update /*+ TIDB_SMJ(t1, t2) */ t t1, t t2 set t1.c=1, t2.a=1 where t1.a=t2.a", "Best": "MergeInnerJoin{TableReader(Table(t))->TableReader(Table(t))}(test.t.a,test.t.a)->Update", "Hints": "use_index(@`upd_1` `test`.`t1` ), use_index(@`upd_1` `test`.`t2` ), merge_join(@`upd_1` `test`.`t1`)" }, { - "SQL": "update /*+ TIDB_HJ(t1, t2) */ t t1, t t2 set t1.a=1, t2.a=1 where t1.a=t2.a", + "SQL": "update /*+ TIDB_HJ(t1, t2) */ t t1, t t2 set t1.c=1, t2.a=1 where t1.a=t2.a", "Best": "LeftHashJoin{TableReader(Table(t))->TableReader(Table(t))}(test.t.a,test.t.a)->Update", "Hints": "use_index(@`upd_1` `test`.`t1` ), use_index(@`upd_1` `test`.`t2` ), hash_join(@`upd_1` `test`.`t1`)" }, From 709900d6fce763db0c583e86668b75517537e8c0 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Thu, 26 Nov 2020 12:16:22 +0800 Subject: [PATCH 172/229] executor: fix cannot use explain for with the statement queried by explain analyze (#21052) (#21302) Signed-off-by: ti-srebot Signed-off-by: crazycs520 --- executor/explainfor_test.go | 45 ++++++++++++++++++++----------------- session/session.go | 8 +++++-- 2 files changed, 31 insertions(+), 22 deletions(-) diff --git a/executor/explainfor_test.go b/executor/explainfor_test.go index 0f22b6c4e2851..7c1663003f97b 100644 --- a/executor/explainfor_test.go +++ b/executor/explainfor_test.go @@ -82,29 +82,34 @@ func (s *testSuite9) TestExplainFor(c *C) { "└─TableFullScan_4 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo", )) tkRoot.MustExec("set @@tidb_enable_collect_execution_info=1;") - tkRoot.MustQuery("select * from t1;") - tkRootProcess = tkRoot.Se.ShowProcess() - ps = []*util.ProcessInfo{tkRootProcess} - tkRoot.Se.SetSessionManager(&mockSessionManager1{PS: ps}) - tkUser.Se.SetSessionManager(&mockSessionManager1{PS: ps}) - rows := tkRoot.MustQuery(fmt.Sprintf("explain for connection %d", tkRootProcess.ID)).Rows() - c.Assert(len(rows), Equals, 2) - c.Assert(len(rows[0]), Equals, 9) - buf := bytes.NewBuffer(nil) - for i, row := range rows { - if i > 0 { - buf.WriteString("\n") - } - for j, v := range row { - if j > 0 { - buf.WriteString(" ") + check := func() { + tkRootProcess = tkRoot.Se.ShowProcess() + ps = []*util.ProcessInfo{tkRootProcess} + tkRoot.Se.SetSessionManager(&mockSessionManager1{PS: ps}) + tkUser.Se.SetSessionManager(&mockSessionManager1{PS: ps}) + rows := tkRoot.MustQuery(fmt.Sprintf("explain for connection %d", tkRootProcess.ID)).Rows() + c.Assert(len(rows), Equals, 2) + c.Assert(len(rows[0]), Equals, 9) + buf := bytes.NewBuffer(nil) + for i, row := range rows { + if i > 0 { + buf.WriteString("\n") + } + for j, v := range row { + if j > 0 { + buf.WriteString(" ") + } + buf.WriteString(fmt.Sprintf("%v", v)) } - buf.WriteString(fmt.Sprintf("%v", v)) } + c.Assert(buf.String(), Matches, ""+ + "TableReader_5 10000.00 0 root time:.*, loops:1, cop_task:.*num: 1, max:.*, proc_keys: 0, rpc_num: 1, rpc_time: .*data:TableFullScan_4 N/A N/A\n"+ + "└─TableFullScan_4 10000.00 0 cop.* table:t1 time:.*, loops:.*keep order:false, stats:pseudo N/A N/A") } - c.Assert(buf.String(), Matches, ""+ - "TableReader_5 10000.00 0 root time:.*, loops:1, cop_task:.*num: 1, max:.*, proc_keys: 0, rpc_num: 1, rpc_time: .*data:TableFullScan_4 N/A N/A\n"+ - "└─TableFullScan_4 10000.00 0 cop.* table:t1 time:.*, loops:.*keep order:false, stats:pseudo N/A N/A") + tkRoot.MustQuery("select * from t1;") + check() + tkRoot.MustQuery("explain analyze select * from t1;") + check() err := tkUser.ExecToErr(fmt.Sprintf("explain for connection %d", tkRootProcess.ID)) c.Check(core.ErrAccessDenied.Equal(err), IsTrue) err = tkUser.ExecToErr("explain for connection 42") diff --git a/session/session.go b/session/session.go index cf306fd24c7c2..b00a3ddaa21c5 100644 --- a/session/session.go +++ b/session/session.go @@ -1033,12 +1033,16 @@ func (s *session) SetProcessInfo(sql string, t time.Time, command byte, maxExecu if command != mysql.ComSleep || s.GetSessionVars().InTxn() { curTxnStartTS = s.sessionVars.TxnCtx.StartTS } + p := s.currentPlan + if explain, ok := p.(*plannercore.Explain); ok && explain.Analyze && explain.TargetPlan != nil { + p = explain.TargetPlan + } pi := util.ProcessInfo{ ID: s.sessionVars.ConnectionID, DB: s.sessionVars.CurrentDB, Command: command, - Plan: s.currentPlan, - PlanExplainRows: plannercore.GetExplainRowsForPlan(s.currentPlan), + Plan: p, + PlanExplainRows: plannercore.GetExplainRowsForPlan(p), RuntimeStatsColl: s.sessionVars.StmtCtx.RuntimeStatsColl, Time: t, State: s.Status(), From 88c6105c82f88112e82b73ca0746b91e4c9354f9 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Thu, 26 Nov 2020 13:05:51 +0800 Subject: [PATCH 173/229] util: reduce memoryUsageAlarm log (#20562) (#21239) Signed-off-by: ti-srebot --- util/expensivequery/memory_usage_alarm.go | 33 +++++++++++++---------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/util/expensivequery/memory_usage_alarm.go b/util/expensivequery/memory_usage_alarm.go index 6824bc4a230b3..16914542e5fca 100644 --- a/util/expensivequery/memory_usage_alarm.go +++ b/util/expensivequery/memory_usage_alarm.go @@ -92,8 +92,8 @@ func initMemoryUsageAlarmRecord() (record *memoryUsageAlarm) { func (record *memoryUsageAlarm) alarm4ExcessiveMemUsage(sm util.SessionManager) { var memoryUsage uint64 instanceStats := &runtime.MemStats{} + runtime.ReadMemStats(instanceStats) if record.isServerMemoryQuotaSet { - runtime.ReadMemStats(instanceStats) memoryUsage = instanceStats.HeapAlloc } else { memoryUsage, record.err = memory.MemUsed() @@ -110,23 +110,31 @@ func (record *memoryUsageAlarm) alarm4ExcessiveMemUsage(sm util.SessionManager) interval := time.Since(record.lastCheckTime) record.lastCheckTime = time.Now() if interval > 10*time.Second { - record.doRecord(memoryUsage, sm) + record.doRecord(memoryUsage, instanceStats.HeapAlloc, sm) } } } -func (record *memoryUsageAlarm) doRecord(memUsage uint64, sm util.SessionManager) { - logutil.BgLogger().Warn("the TiDB instance now takes a lot of memory, has the risk of OOM", - zap.Bool("is server-momory-quota set", record.isServerMemoryQuotaSet), - zap.Any("memory size", record.serverMemoryQuota), - zap.Any("memory usage", memUsage), - zap.Any("memory-usage-alarm-ratio", config.GetGlobalConfig().Performance.MemoryUsageAlarmRatio), - ) +func (record *memoryUsageAlarm) doRecord(memUsage uint64, instanceMemoryUsage uint64, sm util.SessionManager) { + fields := make([]zap.Field, 0, 6) + fields = append(fields, zap.Bool("is server-memory-quota set", record.isServerMemoryQuotaSet)) + if record.isServerMemoryQuotaSet { + fields = append(fields, zap.Any("server-memory-quota", record.serverMemoryQuota)) + fields = append(fields, zap.Any("tidb-server memory usage", memUsage)) + } else { + fields = append(fields, zap.Any("system memory total", record.serverMemoryQuota)) + fields = append(fields, zap.Any("system memory usage", memUsage)) + fields = append(fields, zap.Any("tidb-server memory usage", instanceMemoryUsage)) + } + fields = append(fields, zap.Any("memory-usage-alarm-ratio", config.GetGlobalConfig().Performance.MemoryUsageAlarmRatio)) + fields = append(fields, zap.Any("record path", record.tmpDir)) + + logutil.BgLogger().Warn("tidb-server has the risk of OOM. Running SQLs and heap profile will be recorded in record path", fields...) if record.err = disk.CheckAndInitTempDir(); record.err != nil { return } - record.recordSQLAndSummaryTable(sm) + record.recordSQL(sm) record.recordProfile() tryRemove := func(filename *[]string) { @@ -146,7 +154,7 @@ func (record *memoryUsageAlarm) doRecord(memUsage uint64, sm util.SessionManager } } -func (record *memoryUsageAlarm) recordSQLAndSummaryTable(sm util.SessionManager) { +func (record *memoryUsageAlarm) recordSQL(sm util.SessionManager) { processInfo := sm.ShowProcessList() pinfo := make([]*util.ProcessInfo, 0, len(processInfo)) for _, info := range processInfo { @@ -203,8 +211,6 @@ func (record *memoryUsageAlarm) recordSQLAndSummaryTable(sm util.SessionManager) printTop10(func(i, j int) bool { return pinfo[i].Time.Before(pinfo[j].Time) }) - - logutil.BgLogger().Info("record SQLs with the most memory usage or time usage", zap.Any("SQLs file path", fileName)) } func (record *memoryUsageAlarm) recordProfile() { @@ -235,6 +241,5 @@ func (record *memoryUsageAlarm) recordProfile() { logutil.BgLogger().Error(fmt.Sprintf("write %v profile file fail", item.name), zap.Error(err)) return } - logutil.BgLogger().Info(fmt.Sprintf("record %v profile successfully", item.name), zap.Any("Profile file path", fileName)) } } From 4417eb861ff98112358525470e40568b230a7ad8 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Thu, 26 Nov 2020 13:20:21 +0800 Subject: [PATCH 174/229] util: fix wrong calculation to get memory usage. (#21158) (#21161) Signed-off-by: ti-srebot --- util/memory/meminfo.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/util/memory/meminfo.go b/util/memory/meminfo.go index cf989203036a2..2fbe1059484e2 100644 --- a/util/memory/meminfo.go +++ b/util/memory/meminfo.go @@ -26,5 +26,5 @@ func MemTotal() (uint64, error) { // MemUsed returns the total used amount of RAM on this system func MemUsed() (uint64, error) { v, err := mem.VirtualMemory() - return v.Total - (v.Free + v.Buffers + v.Cached), err + return v.Used, err } From 1e73c51515e123e3066fa5abeb14430551d00758 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Thu, 26 Nov 2020 13:34:38 +0800 Subject: [PATCH 175/229] planner, type: fix AggFieldType error when encouter unsigned and sign type (#21062) (#21236) --- expression/constant.go | 8 +++-- planner/core/expression_rewriter_test.go | 36 ++++++++++++++++++++++ types/etc.go | 9 ++++++ types/field_type.go | 29 ++++++++++++++++-- types/field_type_test.go | 38 ++++++++++++++++++++++++ 5 files changed, 115 insertions(+), 5 deletions(-) diff --git a/expression/constant.go b/expression/constant.go index 6ff4ed05dbf4f..3aaa2deaaa2be 100644 --- a/expression/constant.go +++ b/expression/constant.go @@ -28,17 +28,21 @@ import ( // NewOne stands for a number 1. func NewOne() *Constant { + retT := types.NewFieldType(mysql.TypeTiny) + retT.Flag |= mysql.UnsignedFlag // shrink range to avoid integral promotion return &Constant{ Value: types.NewDatum(1), - RetType: types.NewFieldType(mysql.TypeTiny), + RetType: retT, } } // NewZero stands for a number 0. func NewZero() *Constant { + retT := types.NewFieldType(mysql.TypeTiny) + retT.Flag |= mysql.UnsignedFlag // shrink range to avoid integral promotion return &Constant{ Value: types.NewDatum(0), - RetType: types.NewFieldType(mysql.TypeTiny), + RetType: retT, } } diff --git a/planner/core/expression_rewriter_test.go b/planner/core/expression_rewriter_test.go index a2253bf75d154..bab6438e1a60d 100644 --- a/planner/core/expression_rewriter_test.go +++ b/planner/core/expression_rewriter_test.go @@ -292,3 +292,39 @@ func (s *testExpressionRewriterSuite) TestIssue20007(c *C) { testkit.Rows("2 epic wiles 2020-01-02 23:29:51", "3 silly burnell 2020-02-25 07:43:07")) } } + +func (s *testExpressionRewriterSuite) TestIssue9869(c *C) { + defer testleak.AfterTest(c)() + store, dom, err := newStoreWithBootstrap() + c.Assert(err, IsNil) + tk := testkit.NewTestKit(c, store) + defer func() { + dom.Close() + store.Close() + }() + + tk.MustExec("use test;") + tk.MustExec("drop table if exists t1;") + tk.MustExec("create table t1(a int, b bigint unsigned);") + tk.MustExec("insert into t1 (a, b) values (1,4572794622775114594), (2,18196094287899841997),(3,11120436154190595086);") + tk.MustQuery("select (case t1.a when 0 then 0 else t1.b end), cast(t1.b as signed) from t1;").Check( + testkit.Rows("4572794622775114594 4572794622775114594", "18196094287899841997 -250649785809709619", "11120436154190595086 -7326307919518956530")) +} + +func (s *testExpressionRewriterSuite) TestIssue17652(c *C) { + defer testleak.AfterTest(c)() + store, dom, err := newStoreWithBootstrap() + c.Assert(err, IsNil) + tk := testkit.NewTestKit(c, store) + defer func() { + dom.Close() + store.Close() + }() + + tk.MustExec("use test;") + tk.MustExec("drop table if exists t;") + tk.MustExec("create table t(x bigint unsigned);") + tk.MustExec("insert into t values( 9999999703771440633);") + tk.MustQuery("select ifnull(max(x), 0) from t").Check( + testkit.Rows("9999999703771440633")) +} diff --git a/types/etc.go b/types/etc.go index e29c91171e5a7..46839d78419b5 100644 --- a/types/etc.go +++ b/types/etc.go @@ -64,6 +64,15 @@ func IsTypeTime(tp byte) bool { return tp == mysql.TypeDatetime || tp == mysql.TypeDate || tp == mysql.TypeTimestamp } +// IsTypeInteger returns a boolean indicating whether the tp is integer type. +func IsTypeInteger(tp byte) bool { + switch tp { + case mysql.TypeTiny, mysql.TypeShort, mysql.TypeInt24, mysql.TypeLong, mysql.TypeLonglong, mysql.TypeYear: + return true + } + return false +} + // IsTypeNumeric returns a boolean indicating whether the tp is numeric type. func IsTypeNumeric(tp byte) bool { switch tp { diff --git a/types/field_type.go b/types/field_type.go index 767d297f634ff..dbcf7c3632eb7 100644 --- a/types/field_type.go +++ b/types/field_type.go @@ -65,15 +65,38 @@ func NewFieldTypeWithCollation(tp byte, collation string, length int) *FieldType // Aggregation is performed by MergeFieldType function. func AggFieldType(tps []*FieldType) *FieldType { var currType FieldType + isMixedSign := false for i, t := range tps { if i == 0 && currType.Tp == mysql.TypeUnspecified { currType = *t continue } mtp := MergeFieldType(currType.Tp, t.Tp) + isMixedSign = isMixedSign || (mysql.HasUnsignedFlag(currType.Flag) != mysql.HasUnsignedFlag(t.Flag)) currType.Tp = mtp currType.Flag = mergeTypeFlag(currType.Flag, t.Flag) } + // integral promotion when tps contains signed and unsigned + if isMixedSign && IsTypeInteger(currType.Tp) { + bumpRange := false // indicate one of tps bump currType range + for _, t := range tps { + bumpRange = bumpRange || (mysql.HasUnsignedFlag(t.Flag) && (t.Tp == currType.Tp || t.Tp == mysql.TypeBit)) + } + if bumpRange { + switch currType.Tp { + case mysql.TypeTiny: + currType.Tp = mysql.TypeShort + case mysql.TypeShort: + currType.Tp = mysql.TypeInt24 + case mysql.TypeInt24: + currType.Tp = mysql.TypeLong + case mysql.TypeLong: + currType.Tp = mysql.TypeLonglong + case mysql.TypeLonglong: + currType.Tp = mysql.TypeNewDecimal + } + } + } return &currType } @@ -310,10 +333,10 @@ func MergeFieldType(a byte, b byte) byte { } // mergeTypeFlag merges two MySQL type flag to a new one -// currently only NotNullFlag is checked -// todo more flag need to be checked, for example: UnsignedFlag +// currently only NotNullFlag and UnsignedFlag is checked +// todo more flag need to be checked func mergeTypeFlag(a, b uint) uint { - return a & (b&mysql.NotNullFlag | ^mysql.NotNullFlag) + return a & (b&mysql.NotNullFlag | ^mysql.NotNullFlag) & (b&mysql.UnsignedFlag | ^mysql.UnsignedFlag) } func getFieldTypeIndex(tp byte) int { diff --git a/types/field_type_test.go b/types/field_type_test.go index 9b50d65e9a7d9..4d2583ec97d97 100644 --- a/types/field_type_test.go +++ b/types/field_type_test.go @@ -327,6 +327,44 @@ func (s *testFieldTypeSuite) TestAggFieldTypeForTypeFlag(c *C) { c.Assert(aggTp.Flag, Equals, mysql.NotNullFlag) } +func (s testFieldTypeSuite) TestAggFieldTypeForIntegralPromotion(c *C) { + fts := []*FieldType{ + NewFieldType(mysql.TypeTiny), + NewFieldType(mysql.TypeShort), + NewFieldType(mysql.TypeInt24), + NewFieldType(mysql.TypeLong), + NewFieldType(mysql.TypeLonglong), + NewFieldType(mysql.TypeNewDecimal), + } + + for i := 1; i < len(fts)-1; i++ { + tps := fts[i-1 : i+1] + + tps[0].Flag = 0 + tps[1].Flag = 0 + aggTp := AggFieldType(tps) + c.Assert(aggTp.Tp, Equals, fts[i].Tp) + c.Assert(aggTp.Flag, Equals, uint(0)) + + tps[0].Flag = mysql.UnsignedFlag + aggTp = AggFieldType(tps) + c.Assert(aggTp.Tp, Equals, fts[i].Tp) + c.Assert(aggTp.Flag, Equals, uint(0)) + + tps[0].Flag = mysql.UnsignedFlag + tps[1].Flag = mysql.UnsignedFlag + aggTp = AggFieldType(tps) + c.Assert(aggTp.Tp, Equals, fts[i].Tp) + c.Assert(aggTp.Flag, Equals, mysql.UnsignedFlag) + + tps[0].Flag = 0 + tps[1].Flag = mysql.UnsignedFlag + aggTp = AggFieldType(tps) + c.Assert(aggTp.Tp, Equals, fts[i+1].Tp) + c.Assert(aggTp.Flag, Equals, uint(0)) + } +} + func (s *testFieldTypeSuite) TestAggregateEvalType(c *C) { defer testleak.AfterTest(c)() fts := []*FieldType{ From d299e8f3aacda5347bf6bdd7240bec5e0e96fad3 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Thu, 26 Nov 2020 13:50:51 +0800 Subject: [PATCH 176/229] executor: fix sum(double) result if value is +Inf or -Inf (#21058) (#21272) Signed-off-by: ti-srebot --- server/util.go | 3 +++ server/util_test.go | 14 ++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/server/util.go b/server/util.go index 88bcdc35086e2..d041318783e95 100644 --- a/server/util.go +++ b/server/util.go @@ -375,6 +375,9 @@ const ( func appendFormatFloat(in []byte, fVal float64, prec, bitSize int) []byte { absVal := math.Abs(fVal) + if absVal > math.MaxFloat64 || math.IsNaN(absVal) { + return []byte{'0'} + } isEFormat := false if bitSize == 32 { isEFormat = (prec == types.UnspecifiedLength && (float32(absVal) >= expFormatBig || (float32(absVal) != 0 && float32(absVal) < expFormatSmall))) diff --git a/server/util_test.go b/server/util_test.go index a11641c33ffae..8ba8c66a71e6a 100644 --- a/server/util_test.go +++ b/server/util_test.go @@ -14,6 +14,7 @@ package server import ( + "strconv" "time" . "github.com/pingcap/check" @@ -250,6 +251,7 @@ func mustDecodeStr(c *C, b []byte) string { } func (s *testUtilSuite) TestAppendFormatFloat(c *C) { + infVal, _ := strconv.ParseFloat("+Inf", 64) tests := []struct { fVal float64 out string @@ -400,6 +402,18 @@ func (s *testUtilSuite) TestAppendFormatFloat(c *C) { -1, 32, }, + { + infVal, + "0", + -1, + 64, + }, + { + -infVal, + "0", + -1, + 64, + }, } for _, t := range tests { c.Assert(string(appendFormatFloat(nil, t.fVal, t.prec, t.bitSize)), Equals, t.out) From 771845caaf71fab21e3be9470ce130da5af6e70d Mon Sep 17 00:00:00 2001 From: Song Gao Date: Thu, 26 Nov 2020 14:27:54 +0800 Subject: [PATCH 177/229] store, executor: add an OOMAction for copIterator to adaptive control the memory usage (#21297) --- distsql/distsql.go | 12 +- distsql/distsql_test.go | 2 +- executor/analyze.go | 4 +- executor/executor_test.go | 71 ++++++++ kv/kv.go | 2 +- session/session.go | 1 + session/session_test.go | 133 +++++++++++++++ sessionctx/variable/session.go | 6 + sessionctx/variable/sysvar.go | 2 + sessionctx/variable/tidb_vars.go | 4 + store/tikv/coprocessor.go | 284 ++++++++++++++++++++++++++++--- util/mock/client.go | 3 +- 12 files changed, 492 insertions(+), 32 deletions(-) diff --git a/distsql/distsql.go b/distsql/distsql.go index 3b47046d4bedf..862ed5ec1476c 100644 --- a/distsql/distsql.go +++ b/distsql/distsql.go @@ -24,6 +24,7 @@ import ( "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/statistics" "github.com/pingcap/tidb/types" + "github.com/pingcap/tidb/util/memory" "github.com/pingcap/tipb/go-tipb" ) @@ -44,7 +45,8 @@ func Select(ctx context.Context, sctx sessionctx.Context, kvReq *kv.Request, fie if !sctx.GetSessionVars().EnableStreaming { kvReq.Streaming = false } - resp := sctx.GetClient().Send(ctx, kvReq, sctx.GetSessionVars().KVVars) + enabledRateLimitAction := sctx.GetSessionVars().EnabledRateLimitAction + resp := sctx.GetClient().Send(ctx, kvReq, sctx.GetSessionVars().KVVars, sctx.GetSessionVars().StmtCtx.MemTracker, enabledRateLimitAction) if resp == nil { err := errors.New("client returns nil response") return nil, err @@ -104,8 +106,8 @@ func SelectWithRuntimeStats(ctx context.Context, sctx sessionctx.Context, kvReq // Analyze do a analyze request. func Analyze(ctx context.Context, client kv.Client, kvReq *kv.Request, vars *kv.Variables, - isRestrict bool) (SelectResult, error) { - resp := client.Send(ctx, kvReq, vars) + isRestrict bool, sessionMemTracker *memory.Tracker) (SelectResult, error) { + resp := client.Send(ctx, kvReq, vars, sessionMemTracker, false) if resp == nil { return nil, errors.New("client returns nil response") } @@ -125,7 +127,9 @@ func Analyze(ctx context.Context, client kv.Client, kvReq *kv.Request, vars *kv. // Checksum sends a checksum request. func Checksum(ctx context.Context, client kv.Client, kvReq *kv.Request, vars *kv.Variables) (SelectResult, error) { - resp := client.Send(ctx, kvReq, vars) + // FIXME: As BR have dependency of `Checksum` and TiDB also introduced BR as dependency, Currently we can't edit + // Checksum function signature. The two-way dependence should be removed in future. + resp := client.Send(ctx, kvReq, vars, nil, false) if resp == nil { return nil, errors.New("client returns nil response") } diff --git a/distsql/distsql_test.go b/distsql/distsql_test.go index 2d47892f4fc12..53b43c52d8da9 100644 --- a/distsql/distsql_test.go +++ b/distsql/distsql_test.go @@ -324,7 +324,7 @@ func (s *testSuite) TestAnalyze(c *C) { Build() c.Assert(err, IsNil) - response, err := Analyze(context.TODO(), s.sctx.GetClient(), request, kv.DefaultVars, true) + response, err := Analyze(context.TODO(), s.sctx.GetClient(), request, kv.DefaultVars, true, s.sctx.GetSessionVars().StmtCtx.MemTracker) c.Assert(err, IsNil) result, ok := response.(*selectResult) diff --git a/executor/analyze.go b/executor/analyze.go index fbd0d963e6042..636158147659a 100755 --- a/executor/analyze.go +++ b/executor/analyze.go @@ -268,7 +268,7 @@ func (e *AnalyzeIndexExec) fetchAnalyzeResult(ranges []*ranger.Range, isNullRang return err } ctx := context.TODO() - result, err := distsql.Analyze(ctx, e.ctx.GetClient(), kvReq, e.ctx.GetSessionVars().KVVars, e.ctx.GetSessionVars().InRestrictedSQL) + result, err := distsql.Analyze(ctx, e.ctx.GetClient(), kvReq, e.ctx.GetSessionVars().KVVars, e.ctx.GetSessionVars().InRestrictedSQL, e.ctx.GetSessionVars().StmtCtx.MemTracker) if err != nil { return err } @@ -442,7 +442,7 @@ func (e *AnalyzeColumnsExec) buildResp(ranges []*ranger.Range) (distsql.SelectRe return nil, err } ctx := context.TODO() - result, err := distsql.Analyze(ctx, e.ctx.GetClient(), kvReq, e.ctx.GetSessionVars().KVVars, e.ctx.GetSessionVars().InRestrictedSQL) + result, err := distsql.Analyze(ctx, e.ctx.GetClient(), kvReq, e.ctx.GetSessionVars().KVVars, e.ctx.GetSessionVars().InRestrictedSQL, e.ctx.GetSessionVars().StmtCtx.MemTracker) if err != nil { return nil, err } diff --git a/executor/executor_test.go b/executor/executor_test.go index 0960158a54c18..4eec570d7b286 100644 --- a/executor/executor_test.go +++ b/executor/executor_test.go @@ -6277,6 +6277,77 @@ func (s *testSuite) TestIssue13758(c *C) { )) } +func (s *testSerialSuite1) TestCoprocessorOOMTicase(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk.MustExec(`set @@tidb_wait_split_region_finish=1`) + // create table for non keep-order case + tk.MustExec("drop table if exists t5") + tk.MustExec("create table t5(id int)") + tk.MustQuery(`split table t5 between (0) and (10000) regions 10`).Check(testkit.Rows("9 1")) + // create table for keep-order case + tk.MustExec("drop table if exists t6") + tk.MustExec("create table t6(id int, index(id))") + tk.MustQuery(`split table t6 between (0) and (10000) regions 10`).Check(testkit.Rows("10 1")) + tk.MustQuery("split table t6 INDEX id between (0) and (10000) regions 10;").Check(testkit.Rows("10 1")) + count := 10 + for i := 0; i < count; i++ { + tk.MustExec(fmt.Sprintf("insert into t5 (id) values (%v)", i)) + tk.MustExec(fmt.Sprintf("insert into t6 (id) values (%v)", i)) + } + defer config.RestoreFunc()() + config.UpdateGlobal(func(conf *config.Config) { + conf.OOMAction = config.OOMActionLog + }) + testcases := []struct { + name string + sql string + }{ + { + name: "keep Order", + sql: "select id from t6 order by id", + }, + { + name: "non keep Order", + sql: "select id from t5", + }, + } + + f := func() { + for _, testcase := range testcases { + c.Log(testcase.name) + // larger than one copResponse, smaller than 2 copResponse + quota := 2*tikv.MockResponseSizeForTest - 100 + se, err := session.CreateSession4Test(s.store) + c.Check(err, IsNil) + tk.Se = se + tk.MustExec("use test") + tk.MustExec(fmt.Sprintf("set @@tidb_mem_quota_query=%v;", quota)) + var expect []string + for i := 0; i < count; i++ { + expect = append(expect, fmt.Sprintf("%v", i)) + } + tk.MustQuery(testcase.sql).Sort().Check(testkit.Rows(expect...)) + // assert oom action worked by max consumed > memory quota + c.Assert(tk.Se.GetSessionVars().StmtCtx.MemTracker.MaxConsumed(), Greater, int64(quota)) + se.Close() + } + } + + // ticase-4169, trigger oom action twice after workers consuming all the data + failpoint.Enable("github.com/pingcap/tidb/store/tikv/ticase-4169", `return(true)`) + f() + failpoint.Disable("github.com/pingcap/tidb/store/tikv/ticase-4169") + // ticase-4170, trigger oom action twice after iterator receiving all the data. + failpoint.Enable("github.com/pingcap/tidb/store/tikv/ticase-4170", `return(true)`) + f() + failpoint.Disable("github.com/pingcap/tidb/store/tikv/ticase-4170") + // ticase-4171, trigger oom before reading or consuming any data + failpoint.Enable("github.com/pingcap/tidb/store/tikv/ticase-4171", `return(true)`) + f() + failpoint.Disable("github.com/pingcap/tidb/store/tikv/ticase-4171") +} + func (s *testSuite) TestIssue20237(c *C) { tk := testkit.NewTestKit(c, s.store) tk.MustExec("use test") diff --git a/kv/kv.go b/kv/kv.go index 04d45ac7b745f..18d6c04ae1a53 100644 --- a/kv/kv.go +++ b/kv/kv.go @@ -256,7 +256,7 @@ type ReturnedValue struct { // Client is used to send request to KV layer. type Client interface { // Send sends request to KV layer, returns a Response. - Send(ctx context.Context, req *Request, vars *Variables) Response + Send(ctx context.Context, req *Request, vars *Variables, sessionMemTracker *memory.Tracker, enabledRateLimitAction bool) Response // IsRequestTypeSupported checks if reqType and subType is supported. IsRequestTypeSupported(reqType, subType int64) bool diff --git a/session/session.go b/session/session.go index b00a3ddaa21c5..09270e0aeffcd 100644 --- a/session/session.go +++ b/session/session.go @@ -2013,6 +2013,7 @@ var builtinGlobalVariable = []string{ variable.TiDBRedactLog, variable.TiDBEnableTelemetry, variable.TiDBEnableAmendPessimisticTxn, + variable.TiDBEnableRateLimitAction, } var ( diff --git a/session/session_test.go b/session/session_test.go index 5d7e89fb6f4f1..7bd6423f69702 100644 --- a/session/session_test.go +++ b/session/session_test.go @@ -3306,3 +3306,136 @@ func (s *testSessionSuite2) TestSelectLockInShare(c *C) { tk1.MustQuery("select * from t_sel_in_share lock in share mode").Check(testkit.Rows("11")) tk1.MustExec("DROP TABLE t_sel_in_share") } + +func (s *testSessionSuite2) TestSetEnableRateLimitAction(c *C) { + tk := testkit.NewTestKitWithInit(c, s.store) + // assert default value + result := tk.MustQuery("select @@tidb_enable_rate_limit_action;") + result.Check(testkit.Rows("on")) + + // assert set sys variable + tk.MustExec("set global tidb_enable_rate_limit_action= '0';") + tk.Se.Close() + + se, err := session.CreateSession4Test(s.store) + c.Check(err, IsNil) + tk.Se = se + result = tk.MustQuery("select @@tidb_enable_rate_limit_action;") + result.Check(testkit.Rows("0")) +} + +func (s *testSessionSerialSuite) TestCoprocessorOOMAction(c *C) { + //Assert Coprocessor OOMAction + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk.MustExec(`set @@tidb_wait_split_region_finish=1`) + // create table for non keep-order case + tk.MustExec("drop table if exists t5") + tk.MustExec("create table t5(id int)") + tk.MustQuery(`split table t5 between (0) and (10000) regions 10`).Check(testkit.Rows("9 1")) + // create table for keep-order case + tk.MustExec("drop table if exists t6") + tk.MustExec("create table t6(id int, index(id))") + tk.MustQuery(`split table t6 between (0) and (10000) regions 10`).Check(testkit.Rows("10 1")) + tk.MustQuery("split table t6 INDEX id between (0) and (10000) regions 10;").Check(testkit.Rows("10 1")) + count := 10 + for i := 0; i < count; i++ { + tk.MustExec(fmt.Sprintf("insert into t5 (id) values (%v)", i)) + tk.MustExec(fmt.Sprintf("insert into t6 (id) values (%v)", i)) + } + + testcases := []struct { + name string + sql string + }{ + { + name: "keep Order", + sql: "select id from t6 order by id", + }, + { + name: "non keep Order", + sql: "select id from t5", + }, + } + defer config.RestoreFunc()() + config.UpdateGlobal(func(conf *config.Config) { + conf.OOMAction = config.OOMActionCancel + }) + failpoint.Enable("github.com/pingcap/tidb/store/tikv/testRateLimitActionMockConsumeAndAssert", `return(true)`) + defer failpoint.Disable("github.com/pingcap/tidb/store/tikv/testRateLimitActionMockConsumeAndAssert") + + enableOOM := func(tk *testkit.TestKit, name, sql string) { + c.Logf("enable OOM, testcase: %v", name) + // larger than 4 copResponse, smaller than 5 copResponse + quota := 5*tikv.MockResponseSizeForTest - 100 + tk.MustExec("use test") + tk.MustExec("set @@tidb_distsql_scan_concurrency = 10") + tk.MustExec(fmt.Sprintf("set @@tidb_mem_quota_query=%v;", quota)) + var expect []string + for i := 0; i < count; i++ { + expect = append(expect, fmt.Sprintf("%v", i)) + } + tk.MustQuery(sql).Sort().Check(testkit.Rows(expect...)) + // assert oom action worked by max consumed > memory quota + c.Assert(tk.Se.GetSessionVars().StmtCtx.MemTracker.MaxConsumed(), Greater, int64(quota)) + } + + disableOOM := func(tk *testkit.TestKit, name, sql string) { + c.Logf("disable OOM, testcase: %v", name) + quota := 5*tikv.MockResponseSizeForTest - 100 + tk.MustExec("use test") + tk.MustExec("set @@tidb_distsql_scan_concurrency = 10") + tk.MustExec(fmt.Sprintf("set @@tidb_mem_quota_query=%v;", quota)) + err := tk.QueryToErr(sql) + c.Assert(err, NotNil) + c.Assert(err.Error(), Matches, "Out Of Memory Quota.*") + } + + failpoint.Enable("github.com/pingcap/tidb/store/tikv/testRateLimitActionMockWaitMax", `return(true)`) + // assert oom action and switch + for _, testcase := range testcases { + se, err := session.CreateSession4Test(s.store) + c.Check(err, IsNil) + tk.Se = se + enableOOM(tk, testcase.name, testcase.sql) + tk.MustExec("set @@tidb_enable_rate_limit_action = 0") + disableOOM(tk, testcase.name, testcase.sql) + tk.MustExec("set @@tidb_enable_rate_limit_action = 1") + enableOOM(tk, testcase.name, testcase.sql) + se.Close() + } + + globaltk := testkit.NewTestKitWithInit(c, s.store) + globaltk.MustExec("set global tidb_enable_rate_limit_action= 0") + for _, testcase := range testcases { + se, err := session.CreateSession4Test(s.store) + c.Check(err, IsNil) + tk.Se = se + disableOOM(tk, testcase.name, testcase.sql) + se.Close() + } + globaltk.MustExec("set global tidb_enable_rate_limit_action= 1") + for _, testcase := range testcases { + se, err := session.CreateSession4Test(s.store) + c.Check(err, IsNil) + tk.Se = se + enableOOM(tk, testcase.name, testcase.sql) + se.Close() + } + failpoint.Disable("github.com/pingcap/tidb/store/tikv/testRateLimitActionMockWaitMax") + + // assert oom fallback + for _, testcase := range testcases { + c.Log(testcase.name) + se, err := session.CreateSession4Test(s.store) + c.Check(err, IsNil) + tk.Se = se + tk.MustExec("use test") + tk.MustExec("set tidb_distsql_scan_concurrency = 1") + tk.MustExec("set @@tidb_mem_quota_query=1;") + err = tk.QueryToErr(testcase.sql) + c.Assert(err, NotNil) + c.Assert(err.Error(), Matches, "Out Of Memory Quota.*") + se.Close() + } +} diff --git a/sessionctx/variable/session.go b/sessionctx/variable/session.go index ce1efe9701a00..765490914a1bb 100644 --- a/sessionctx/variable/session.go +++ b/sessionctx/variable/session.go @@ -648,6 +648,9 @@ type SessionVars struct { // LastTxnInfo keeps track the info of last committed transaction LastTxnInfo kv.TxnInfo + + // EnabledRateLimitAction indicates whether enabled ratelimit action during coprocessor + EnabledRateLimitAction bool } // PreparedParams contains the parameters of the current prepared statement when executing it. @@ -741,6 +744,7 @@ func NewSessionVars() *SessionVars { SelectLimit: math.MaxUint64, AllowAutoRandExplicitInsert: DefTiDBAllowAutoRandExplicitInsert, EnableAmendPessimisticTxn: DefTiDBEnableAmendPessimisticTxn, + EnabledRateLimitAction: DefTiDBEnableRateLimitAction, } vars.KVVars = kv.NewVariables(&vars.Killed) vars.Concurrency = Concurrency{ @@ -1365,6 +1369,8 @@ func (s *SessionVars) SetSystemVar(name string, val string) error { errors.RedactLogEnabled.Store(s.EnableRedactLog) case TiDBEnableAmendPessimisticTxn: s.EnableAmendPessimisticTxn = TiDBOptOn(val) + case TiDBEnableRateLimitAction: + s.EnabledRateLimitAction = TiDBOptOn(val) } s.systems[name] = val return nil diff --git a/sessionctx/variable/sysvar.go b/sessionctx/variable/sysvar.go index 5db39c673bd08..a1b12a860168d 100644 --- a/sessionctx/variable/sysvar.go +++ b/sessionctx/variable/sysvar.go @@ -680,6 +680,8 @@ var defaultSysVars = []*SysVar{ {ScopeGlobal | ScopeSession, TiDBEnableVectorizedExpression, BoolToIntStr(DefEnableVectorizedExpression)}, {ScopeGlobal | ScopeSession, TiDBEnableFastAnalyze, BoolToIntStr(DefTiDBUseFastAnalyze)}, {ScopeGlobal | ScopeSession, TiDBSkipIsolationLevelCheck, BoolToIntStr(DefTiDBSkipIsolationLevelCheck)}, + + {Scope: ScopeGlobal | ScopeSession, Name: TiDBEnableRateLimitAction, Value: boolToOnOff(DefTiDBEnableRateLimitAction)}, /* The following variable is defined as session scope but is actually server scope. */ {ScopeSession, TiDBGeneralLog, strconv.Itoa(DefTiDBGeneralLog)}, {ScopeSession, TiDBPProfSQLCPU, strconv.Itoa(DefTiDBPProfSQLCPU)}, diff --git a/sessionctx/variable/tidb_vars.go b/sessionctx/variable/tidb_vars.go index 255f82f6413bc..f5cef1aace6f0 100644 --- a/sessionctx/variable/tidb_vars.go +++ b/sessionctx/variable/tidb_vars.go @@ -418,6 +418,9 @@ const ( // TiDBEnableAmendPessimisticTxn indicates if amend pessimistic transactions is enabled. TiDBEnableAmendPessimisticTxn = "tidb_enable_amend_pessimistic_txn" + + // TiDBEnableRateLimitAction indicates whether enabled ratelimit action + TiDBEnableRateLimitAction = "tidb_enable_rate_limit_action" ) // Default TiDB system variable values. @@ -519,6 +522,7 @@ const ( DefTiDBRedactLog = false DefTiDBEnableTelemetry = true DefTiDBEnableAmendPessimisticTxn = false + DefTiDBEnableRateLimitAction = true ) // Process global variables. diff --git a/store/tikv/coprocessor.go b/store/tikv/coprocessor.go index b0aa592c72593..f69b6f03c4f47 100644 --- a/store/tikv/coprocessor.go +++ b/store/tikv/coprocessor.go @@ -59,7 +59,7 @@ type CopClient struct { } // Send builds the request and gets the coprocessor iterator response. -func (c *CopClient) Send(ctx context.Context, req *kv.Request, vars *kv.Variables) kv.Response { +func (c *CopClient) Send(ctx context.Context, req *kv.Request, vars *kv.Variables, sessionMemTracker *memory.Tracker, enabledRateLimitAction bool) kv.Response { if req.StoreType == kv.TiFlash && req.BatchCop { logutil.BgLogger().Debug("send batch requests") return c.sendBatch(ctx, req, vars) @@ -89,15 +89,30 @@ func (c *CopClient) Send(ctx context.Context, req *kv.Request, vars *kv.Variable // Make sure that there is at least one worker. it.concurrency = 1 } + if it.req.KeepOrder { it.sendRate = newRateLimit(2 * it.concurrency) + it.respChan = nil } else { - it.respChan = make(chan *copResponse, it.concurrency) + capacity := it.concurrency + if enabledRateLimitAction { + // The count of cached response in memory is controlled by the capacity of the it.sendRate, not capacity of the respChan. + // As the worker will send finCopResponse after each task being handled, we make the capacity of the respCh equals to + // 2*it.concurrency to avoid deadlock in the unit test caused by the `MustExec` or `Exec` + capacity = it.concurrency * 2 + } + it.respChan = make(chan *copResponse, capacity) + it.sendRate = newRateLimit(it.concurrency) + } + it.actionOnExceed = newRateLimitAction(uint(cap(it.sendRate.token))) + if sessionMemTracker != nil { + sessionMemTracker.FallbackOldAndSetNewAction(it.actionOnExceed) } + if !it.req.Streaming { ctx = context.WithValue(ctx, RPCCancellerCtxKey{}, it.rpcCancel) } - it.open(ctx) + it.open(ctx, enabledRateLimitAction) return it } @@ -383,9 +398,10 @@ type copIterator struct { // If keepOrder, results are stored in copTask.respChan, read them out one by one. tasks []*copTask - curr int - // sendRate controls the sending rate of copIteratorTaskSender, if keepOrder, - // to prevent all tasks being done (aka. all of the responses are buffered) + // curr indicates the curr id of the finished copTask + curr int + + // sendRate controls the sending rate of copIteratorTaskSender sendRate *rateLimit // Otherwise, results are stored in respChan. @@ -406,6 +422,8 @@ type copIterator struct { closed uint32 minCommitTSPushed + + actionOnExceed *rateLimitAction } // copIteratorWorker receives tasks from copIteratorTaskSender, handles tasks and sends the copResponse to respChan. @@ -422,6 +440,8 @@ type copIteratorWorker struct { memTracker *memory.Tracker replicaReadSeed uint32 + + actionOnExceed *rateLimitAction } // copIteratorTaskSender sends tasks to taskCh then wait for the workers to exit. @@ -467,6 +487,9 @@ func (rs *copResponse) MemSize() int64 { if rs.respSize != 0 { return rs.respSize } + if rs == finCopResp { + return 0 + } // ignore rs.err rs.respSize += int64(cap(rs.startKey)) @@ -486,17 +509,38 @@ func (rs *copResponse) RespTime() time.Duration { const minLogCopTaskTime = 300 * time.Millisecond +// When the worker finished `handleTask`, we need to notify the copIterator that there is one task finished. +// For the non-keep-order case, we send a finCopResp into the respCh after `handleTask`. When copIterator recv +// finCopResp from the respCh, it will be aware that there is one task finished. +var finCopResp *copResponse + +func init() { + finCopResp = &copResponse{} +} + // run is a worker function that get a copTask from channel, handle it and // send the result back. func (worker *copIteratorWorker) run(ctx context.Context) { - defer worker.wg.Done() + defer func() { + failpoint.Inject("ticase-4169", func(val failpoint.Value) { + if val.(bool) { + worker.memTracker.Consume(10 * MockResponseSizeForTest) + worker.memTracker.Consume(10 * MockResponseSizeForTest) + } + }) + worker.wg.Done() + }() for task := range worker.taskCh { respCh := worker.respChan if respCh == nil { respCh = task.respChan } - worker.handleTask(ctx, task, respCh) + if worker.respChan != nil { + // When a task is finished by the worker, send a finCopResp into channel to notify the copIterator that + // there is a task finished. + worker.sendToRespCh(finCopResp, worker.respChan, false) + } close(task.respChan) if worker.vars != nil && worker.vars.Killed != nil && atomic.LoadUint32(worker.vars.Killed) == 1 { return @@ -510,7 +554,7 @@ func (worker *copIteratorWorker) run(ctx context.Context) { } // open starts workers and sender goroutines. -func (it *copIterator) open(ctx context.Context) { +func (it *copIterator) open(ctx context.Context, enabledRateLimitAction bool) { taskCh := make(chan *copTask, 1) it.wg.Add(it.concurrency) // Start it.concurrency number of workers to handle cop requests. @@ -529,10 +573,9 @@ func (it *copIterator) open(ctx context.Context) { minCommitTSPushed: &it.minCommitTSPushed, Client: it.store.client, }, - - memTracker: it.memTracker, - + memTracker: it.memTracker, replicaReadSeed: it.replicaReadSeed, + actionOnExceed: it.actionOnExceed, } go worker.run(ctx) } @@ -544,23 +587,30 @@ func (it *copIterator) open(ctx context.Context) { sendRate: it.sendRate, } taskSender.respChan = it.respChan + // enabledRateLimit decides whether enabled ratelimit action + it.actionOnExceed.setEnabled(enabledRateLimitAction) + failpoint.Inject("ticase-4171", func(val failpoint.Value) { + if val.(bool) { + it.memTracker.Consume(10 * MockResponseSizeForTest) + it.memTracker.Consume(10 * MockResponseSizeForTest) + } + }) go taskSender.run() } func (sender *copIteratorTaskSender) run() { // Send tasks to feed the worker goroutines. for _, t := range sender.tasks { - // If keepOrder, we must control the sending rate to prevent all tasks + // we control the sending rate to prevent all tasks // being done (aka. all of the responses are buffered) by copIteratorWorker. - // We keep the number of inflight tasks within the number of concurrency * 2. + // We keep the number of inflight tasks within the number of 2 * concurrency when Keep Order is true. + // If KeepOrder is false, the number equals the concurrency. // It sends one more task if a task has been finished in copIterator.Next. - if sender.sendRate != nil { - exit := sender.sendRate.getToken(sender.finishCh) - if exit { - break - } + exit := sender.sendRate.getToken(sender.finishCh) + if exit { + break } - exit := sender.sendToTaskCh(t) + exit = sender.sendToTaskCh(t) if exit { break } @@ -581,7 +631,15 @@ func (it *copIterator) recvFromRespCh(ctx context.Context, respCh <-chan *copRes select { case resp, ok = <-respCh: if it.memTracker != nil && resp != nil { - it.memTracker.Consume(-int64(resp.MemSize())) + consumed := resp.MemSize() + failpoint.Inject("testRateLimitActionMockConsumeAndAssert", func(val failpoint.Value) { + if val.(bool) { + if resp != finCopResp { + consumed = MockResponseSizeForTest + } + } + }) + it.memTracker.Consume(-consumed) } return case <-it.finishCh: @@ -616,7 +674,15 @@ func (sender *copIteratorTaskSender) sendToTaskCh(t *copTask) (exit bool) { func (worker *copIteratorWorker) sendToRespCh(resp *copResponse, respCh chan<- *copResponse, checkOOM bool) (exit bool) { if worker.memTracker != nil && checkOOM { - worker.memTracker.Consume(int64(resp.MemSize())) + consumed := resp.MemSize() + failpoint.Inject("testRateLimitActionMockConsumeAndAssert", func(val failpoint.Value) { + if val.(bool) { + if resp != finCopResp { + consumed = MockResponseSizeForTest + } + } + }) + worker.memTracker.Consume(consumed) } select { case respCh <- resp: @@ -626,6 +692,9 @@ func (worker *copIteratorWorker) sendToRespCh(resp *copResponse, respCh chan<- * return } +// MockResponseSizeForTest mock the response size +const MockResponseSizeForTest = 100 * 1024 * 1024 + // Next returns next coprocessor result. // NOTE: Use nil to indicate finish, so if the returned ResultSubset is not nil, reader should continue to call Next(). func (it *copIterator) Next(ctx context.Context) (kv.ResultSubset, error) { @@ -634,18 +703,47 @@ func (it *copIterator) Next(ctx context.Context) (kv.ResultSubset, error) { ok bool closed bool ) + defer func() { + if resp == nil { + failpoint.Inject("ticase-4170", func(val failpoint.Value) { + if val.(bool) { + it.memTracker.Consume(10 * MockResponseSizeForTest) + it.memTracker.Consume(10 * MockResponseSizeForTest) + } + }) + } + }() + // wait unit at least 5 copResponse received. + failpoint.Inject("testRateLimitActionMockWaitMax", func(val failpoint.Value) { + if val.(bool) { + // we only need to trigger oom at least once. + if len(it.tasks) > 9 { + for it.memTracker.MaxConsumed() < 5*MockResponseSizeForTest { + time.Sleep(10 * time.Millisecond) + } + } + } + }) // If data order matters, response should be returned in the same order as copTask slice. // Otherwise all responses are returned from a single channel. if it.respChan != nil { // Get next fetched resp from chan resp, ok, closed = it.recvFromRespCh(ctx, it.respChan) if !ok || closed { + it.actionOnExceed.close() return nil, nil } + if resp == finCopResp { + it.actionOnExceed.destroyTokenIfNeeded(func() { + it.sendRate.putToken() + }) + return it.Next(ctx) + } } else { for { if it.curr >= len(it.tasks) { // Resp will be nil if iterator is finishCh. + it.actionOnExceed.close() return nil, nil } task := it.tasks[it.curr] @@ -657,10 +755,12 @@ func (it *copIterator) Next(ctx context.Context) (kv.ResultSubset, error) { if ok { break } + it.actionOnExceed.destroyTokenIfNeeded(func() { + it.sendRate.putToken() + }) // Switch to next task. it.tasks[it.curr] = nil it.curr++ - it.sendRate.putToken() } } @@ -1153,6 +1253,7 @@ func (it *copIterator) Close() error { close(it.finishCh) } it.rpcCancel.CancelAll() + it.actionOnExceed.close() it.wg.Wait() return nil } @@ -1194,3 +1295,140 @@ func (it copErrorResponse) Next(ctx context.Context) (kv.ResultSubset, error) { func (it copErrorResponse) Close() error { return nil } + +// rateLimitAction an OOM Action which is used to control the token if OOM triggered. The token number should be +// set on initial. Each time the Action is triggered, one token would be destroyed. If the count of the token is less +// than 2, the action would be delegated to the fallback action. +type rateLimitAction struct { + // enabled indicates whether the rateLimitAction is permitted to Action. 1 means permitted, 0 denied. + enabled uint32 + fallbackAction memory.ActionOnExceed + // totalTokenNum indicates the total token at initial + totalTokenNum uint + cond struct { + sync.Mutex + // exceeded indicates whether have encountered OOM situation. + exceeded bool + // remainingTokenNum indicates the count of tokens which still exists + remainingTokenNum uint + once sync.Once + // triggerCountForTest indicates the total count of the rateLimitAction's Action being executed + triggerCountForTest uint + } +} + +func newRateLimitAction(totalTokenNumber uint) *rateLimitAction { + return &rateLimitAction{ + totalTokenNum: totalTokenNumber, + cond: struct { + sync.Mutex + exceeded bool + remainingTokenNum uint + once sync.Once + triggerCountForTest uint + }{ + Mutex: sync.Mutex{}, + exceeded: false, + remainingTokenNum: totalTokenNumber, + once: sync.Once{}, + }, + } +} + +// Action implements ActionOnExceed.Action +func (e *rateLimitAction) Action(t *memory.Tracker) { + if !e.isEnabled() { + if e.fallbackAction != nil { + e.fallbackAction.Action(t) + } + return + } + e.conditionLock() + defer e.conditionUnlock() + e.cond.once.Do(func() { + if e.cond.remainingTokenNum < 2 { + e.setEnabled(false) + logutil.BgLogger().Info("memory exceeds quota, rateLimitAction delegate to fallback action", + zap.Uint("total token count", e.totalTokenNum)) + if e.fallbackAction != nil { + e.fallbackAction.Action(t) + } + return + } + failpoint.Inject("testRateLimitActionMockConsumeAndAssert", func(val failpoint.Value) { + if val.(bool) { + if e.cond.triggerCountForTest+e.cond.remainingTokenNum != e.totalTokenNum { + panic("triggerCount + remainingTokenNum not equal to totalTokenNum") + } + } + }) + logutil.BgLogger().Info("memory exceeds quota, destroy one token now.", + zap.Int64("consumed", t.BytesConsumed()), + zap.Int64("quota", t.GetBytesLimit()), + zap.Uint("total token count", e.totalTokenNum), + zap.Uint("remaining token count", e.cond.remainingTokenNum)) + e.cond.exceeded = true + e.cond.triggerCountForTest++ + }) +} + +// SetLogHook implements ActionOnExceed.SetLogHook +func (e *rateLimitAction) SetLogHook(hook func(uint64)) { + +} + +// SetFallback implements ActionOnExceed.SetFallback +func (e *rateLimitAction) SetFallback(a memory.ActionOnExceed) { + e.fallbackAction = a +} + +// destroyTokenIfNeeded will check the `exceed` flag after copWorker finished one task. +// If the exceed flag is true and there is no token been destroyed before, one token will be destroyed, +// or the token would be return back. +func (e *rateLimitAction) destroyTokenIfNeeded(returnToken func()) { + if !e.isEnabled() { + returnToken() + return + } + e.conditionLock() + defer e.conditionUnlock() + if !e.cond.exceeded { + returnToken() + return + } + // If actionOnExceed has been triggered and there is no token have been destroyed before, + // destroy one token. + e.cond.remainingTokenNum = e.cond.remainingTokenNum - 1 + e.cond.exceeded = false + e.cond.once = sync.Once{} +} + +func (e *rateLimitAction) conditionLock() { + e.cond.Lock() +} + +func (e *rateLimitAction) conditionUnlock() { + e.cond.Unlock() +} + +func (e *rateLimitAction) close() { + if !e.isEnabled() { + return + } + e.setEnabled(false) + e.conditionLock() + defer e.conditionUnlock() + e.cond.exceeded = false +} + +func (e *rateLimitAction) setEnabled(enabled bool) { + newValue := uint32(0) + if enabled { + newValue = uint32(1) + } + atomic.StoreUint32(&e.enabled, newValue) +} + +func (e *rateLimitAction) isEnabled() bool { + return atomic.LoadUint32(&e.enabled) > 0 +} diff --git a/util/mock/client.go b/util/mock/client.go index 46496df7f3aca..56ec53336d2e4 100644 --- a/util/mock/client.go +++ b/util/mock/client.go @@ -17,6 +17,7 @@ import ( "context" "github.com/pingcap/tidb/kv" + "github.com/pingcap/tidb/util/memory" ) // Client implement kv.Client interface, mocked from "CopClient" defined in @@ -27,6 +28,6 @@ type Client struct { } // Send implement kv.Client interface. -func (c *Client) Send(ctx context.Context, req *kv.Request, kv *kv.Variables) kv.Response { +func (c *Client) Send(ctx context.Context, req *kv.Request, kv *kv.Variables, sessionMemTracker *memory.Tracker, enabledRateLimit bool) kv.Response { return c.MockResponse } From f4a6a0cf718d9c686254c16b5eeb0f7e45b061ce Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Thu, 26 Nov 2020 14:43:21 +0800 Subject: [PATCH 178/229] util: support getting the environment memory in container. (#20805) (#21240) Signed-off-by: ti-srebot --- util/memory/meminfo.go | 83 ++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 80 insertions(+), 3 deletions(-) diff --git a/util/memory/meminfo.go b/util/memory/meminfo.go index 2fbe1059484e2..d08ccec9d4c50 100644 --- a/util/memory/meminfo.go +++ b/util/memory/meminfo.go @@ -14,17 +14,94 @@ package memory import ( + "io/ioutil" + "strconv" + "strings" + "github.com/shirou/gopsutil/mem" ) // MemTotal returns the total amount of RAM on this system -func MemTotal() (uint64, error) { +var MemTotal func() (uint64, error) + +// MemUsed returns the total used amount of RAM on this system +var MemUsed func() (uint64, error) + +// MemTotalNormal returns the total amount of RAM on this system in non-container environment. +func MemTotalNormal() (uint64, error) { v, err := mem.VirtualMemory() return v.Total, err } -// MemUsed returns the total used amount of RAM on this system -func MemUsed() (uint64, error) { +// MemUsedNormal returns the total used amount of RAM on this system in non-container environment. +func MemUsedNormal() (uint64, error) { v, err := mem.VirtualMemory() return v.Used, err } + +const ( + cGroupMemLimitPath = "/sys/fs/cgroup/memory/memory.limit_in_bytes" + cGroupMemUsagePath = "/sys/fs/cgroup/memory/memory.usage_in_bytes" + selfCGroupPath = "/proc/self/cgroup" +) + +// MemTotalCGroup returns the total amount of RAM on this system in container environment. +func MemTotalCGroup() (uint64, error) { + return readUint(cGroupMemLimitPath) +} + +// MemUsedCGroup returns the total used amount of RAM on this system in container environment. +func MemUsedCGroup() (uint64, error) { + return readUint(cGroupMemUsagePath) +} + +func init() { + if inContainer() { + MemTotal = MemTotalCGroup + MemUsed = MemUsedCGroup + } else { + MemTotal = MemTotalNormal + MemUsed = MemUsedNormal + } +} + +func inContainer() bool { + v, err := ioutil.ReadFile(selfCGroupPath) + if err != nil { + return false + } + if strings.Contains(string(v), "docker") || + strings.Contains(string(v), "kubepods") || + strings.Contains(string(v), "containerd") { + return true + } + return false +} + +// refer to https://github.com/containerd/cgroups/blob/318312a373405e5e91134d8063d04d59768a1bff/utils.go#L251 +func parseUint(s string, base, bitSize int) (uint64, error) { + v, err := strconv.ParseUint(s, base, bitSize) + if err != nil { + intValue, intErr := strconv.ParseInt(s, base, bitSize) + // 1. Handle negative values greater than MinInt64 (and) + // 2. Handle negative values lesser than MinInt64 + if intErr == nil && intValue < 0 { + return 0, nil + } else if intErr != nil && + intErr.(*strconv.NumError).Err == strconv.ErrRange && + intValue < 0 { + return 0, nil + } + return 0, err + } + return v, nil +} + +// refer to https://github.com/containerd/cgroups/blob/318312a373405e5e91134d8063d04d59768a1bff/utils.go#L243 +func readUint(path string) (uint64, error) { + v, err := ioutil.ReadFile(path) + if err != nil { + return 0, err + } + return parseUint(strings.TrimSpace(string(v)), 10, 64) +} From 36c5136f237230f7473dbe65b89d18af78a9d76a Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Thu, 26 Nov 2020 14:57:24 +0800 Subject: [PATCH 179/229] util: avoid to create tmp directory if memory-alarm is closed. (#20851) (#21312) Signed-off-by: ti-srebot --- util/disk/tempDir.go | 21 ++++++++++++--------- util/expensivequery/memory_usage_alarm.go | 6 ++++-- 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/util/disk/tempDir.go b/util/disk/tempDir.go index 1b05d4c47bf1a..2d42d21d82d39 100644 --- a/util/disk/tempDir.go +++ b/util/disk/tempDir.go @@ -81,15 +81,6 @@ func InitializeTempDir() error { return err } - // Create dir for MemoryUsageAlarmRecord. - _, err = os.Stat(filepath.Join(tempDir, "record")) - if err != nil && !os.IsExist(err) { - err = os.MkdirAll(filepath.Join(tempDir, "record"), 0755) - if err != nil { - return err - } - } - subDirs, err := ioutil.ReadDir(tempDir) if err != nil { return err @@ -122,3 +113,15 @@ func CleanUp() { terror.Log(errors.Trace(err)) } } + +// CheckAndCreateDir check whether the directory is existed. If not, then create it. +func CheckAndCreateDir(path string) error { + _, err := os.Stat(path) + if err != nil && !os.IsExist(err) { + err = os.MkdirAll(path, 0755) + if err != nil { + return err + } + } + return nil +} diff --git a/util/expensivequery/memory_usage_alarm.go b/util/expensivequery/memory_usage_alarm.go index 16914542e5fca..d8f86b80eeee5 100644 --- a/util/expensivequery/memory_usage_alarm.go +++ b/util/expensivequery/memory_usage_alarm.go @@ -65,6 +65,9 @@ func initMemoryUsageAlarmRecord() (record *memoryUsageAlarm) { } record.lastCheckTime = time.Time{} record.tmpDir = filepath.Join(config.GetGlobalConfig().TempStoragePath, "record") + if record.err = disk.CheckAndCreateDir(record.tmpDir); record.err != nil { + return + } record.lastProfileFileName = make([][]string, 2) // Read last records files, err := ioutil.ReadDir(record.tmpDir) @@ -131,7 +134,7 @@ func (record *memoryUsageAlarm) doRecord(memUsage uint64, instanceMemoryUsage ui logutil.BgLogger().Warn("tidb-server has the risk of OOM. Running SQLs and heap profile will be recorded in record path", fields...) - if record.err = disk.CheckAndInitTempDir(); record.err != nil { + if record.err = disk.CheckAndCreateDir(record.tmpDir); record.err != nil { return } record.recordSQL(sm) @@ -143,7 +146,6 @@ func (record *memoryUsageAlarm) doRecord(memUsage uint64, instanceMemoryUsage ui err := os.Remove((*filename)[0]) if err != nil { logutil.BgLogger().Error("remove temp files failed", zap.Error(err)) - return } *filename = (*filename)[1:] } From 1adabf3ad2bfee2651c3d73ba804f6ce2df9e329 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Thu, 26 Nov 2020 15:28:20 +0800 Subject: [PATCH 180/229] ddl: forbid invalid usage of window function in the generated column (#20855) (#20889) Signed-off-by: ti-srebot Signed-off-by: wjhuang2016 --- ddl/db_test.go | 12 ++++++++++++ ddl/error.go | 1 + ddl/generated_column.go | 7 +++++++ 3 files changed, 20 insertions(+) diff --git a/ddl/db_test.go b/ddl/db_test.go index 879692f8696d7..f7867d3b067f1 100644 --- a/ddl/db_test.go +++ b/ddl/db_test.go @@ -4931,6 +4931,18 @@ func init() { domain.SchemaOutOfDateRetryTimes = int32(50) } +func (s *testDBSuite4) TestGeneratedColumnWindowFunction(c *C) { + config.UpdateGlobal(func(conf *config.Config) { + conf.Experimental.AllowsExpressionIndex = true + }) + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test_db") + tk.MustExec("DROP TABLE IF EXISTS t") + tk.MustGetErrCode("CREATE TABLE t (a INT , b INT as (ROW_NUMBER() OVER (ORDER BY a)))", errno.ErrWindowInvalidWindowFuncUse) + tk.MustExec("CREATE TABLE t (a INT)") + tk.MustGetErrCode("ALTER TABLE t ADD index idx ((ROW_NUMBER() OVER (ORDER BY a)))", errno.ErrWindowInvalidWindowFuncUse) +} + // Test issue #20529. func (s *testSerialDBSuite) TestColumnTypeChangeIgnoreDisplayLength(c *C) { tk := testkit.NewTestKit(c, s.store) diff --git a/ddl/error.go b/ddl/error.go index 7fe666f81127d..9d27ab50e2d74 100644 --- a/ddl/error.go +++ b/ddl/error.go @@ -99,6 +99,7 @@ var ( errUnsupportedCreatePartition = dbterror.ClassDDL.NewStdErr(mysql.ErrUnsupportedDDLOperation, parser_mysql.Message(fmt.Sprintf(mysql.MySQLErrName[mysql.ErrUnsupportedDDLOperation].Raw, "partition type, treat as normal table"), nil)) errTablePartitionDisabled = dbterror.ClassDDL.NewStdErr(mysql.ErrUnsupportedDDLOperation, parser_mysql.Message("Partitions are ignored because Table Partition is disabled, please set 'tidb_enable_table_partition' if you need to need to enable it", nil)) errUnsupportedIndexType = dbterror.ClassDDL.NewStdErr(mysql.ErrUnsupportedDDLOperation, parser_mysql.Message(fmt.Sprintf(mysql.MySQLErrName[mysql.ErrUnsupportedDDLOperation].Raw, "index type"), nil)) + errWindowInvalidWindowFuncUse = dbterror.ClassDDL.NewStd(mysql.ErrWindowInvalidWindowFuncUse) // ErrDupKeyName returns for duplicated key name ErrDupKeyName = dbterror.ClassDDL.NewStd(mysql.ErrDupKeyName) diff --git a/ddl/generated_column.go b/ddl/generated_column.go index a7badbea426b4..915ae5e8e1252 100644 --- a/ddl/generated_column.go +++ b/ddl/generated_column.go @@ -228,6 +228,7 @@ func checkModifyGeneratedColumn(tbl table.Table, oldCol, newCol *table.Column, n type illegalFunctionChecker struct { hasIllegalFunc bool hasAggFunc bool + hasWindowFunc bool } func (c *illegalFunctionChecker) Enter(inNode ast.Node) (outNode ast.Node, skipChildren bool) { @@ -247,6 +248,9 @@ func (c *illegalFunctionChecker) Enter(inNode ast.Node) (outNode ast.Node, skipC // Aggregate function is not allowed c.hasAggFunc = true return inNode, true + case *ast.WindowFuncExpr: + c.hasWindowFunc = true + return inNode, true } return inNode, false } @@ -267,6 +271,9 @@ func checkIllegalFn4GeneratedColumn(colName string, expr ast.ExprNode) error { if c.hasAggFunc { return ErrInvalidGroupFuncUse } + if c.hasWindowFunc { + return errWindowInvalidWindowFuncUse + } return nil } From 38c3753c9e1acd42cd94de69391b02f35928ad1d Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Thu, 26 Nov 2020 15:44:22 +0800 Subject: [PATCH 181/229] session: add encoded plan cache to avoid repeated encode plan when recording slow-log and statement (#21139) (#21209) Signed-off-by: ti-srebot Signed-off-by: crazycs520 --- executor/adapter.go | 19 +++++++++++++++---- infoschema/tables_test.go | 10 ++++++++++ sessionctx/stmtctx/stmtctx.go | 11 +++++++++++ 3 files changed, 36 insertions(+), 4 deletions(-) diff --git a/executor/adapter.go b/executor/adapter.go index 6569b6fe8621d..830690a653666 100644 --- a/executor/adapter.go +++ b/executor/adapter.go @@ -889,7 +889,7 @@ func (a *ExecStmt) LogSlowQuery(txnTS uint64, succ bool, hasMoreResults bool) { MemMax: memMax, DiskMax: diskMax, Succ: succ, - Plan: getPlanTree(a.Plan), + Plan: getPlanTree(a.Ctx, a.Plan), PlanDigest: planDigest, Prepared: a.isPreparedStmt, HasMoreResults: hasMoreResults, @@ -940,12 +940,12 @@ func (a *ExecStmt) LogSlowQuery(txnTS uint64, succ bool, hasMoreResults bool) { } // getPlanTree will try to get the select plan tree if the plan is select or the select plan of delete/update/insert statement. -func getPlanTree(p plannercore.Plan) string { +func getPlanTree(sctx sessionctx.Context, p plannercore.Plan) string { cfg := config.GetGlobalConfig() if atomic.LoadUint32(&cfg.Log.RecordPlanInSlowLog) == 0 { return "" } - planTree := plannercore.EncodePlan(p) + planTree := getEncodedPlan(sctx, p) if len(planTree) == 0 { return planTree } @@ -963,6 +963,17 @@ func getPlanDigest(sctx sessionctx.Context, p plannercore.Plan) (normalized, pla return } +// getEncodedPlan uses to get encoded plan. +func getEncodedPlan(sctx sessionctx.Context, p plannercore.Plan) (encodedPlan string) { + encodedPlan = sctx.GetSessionVars().StmtCtx.GetEncodedPlan() + if len(encodedPlan) > 0 { + return + } + encodedPlan = plannercore.EncodePlan(p) + sctx.GetSessionVars().StmtCtx.SetEncodedPlan(encodedPlan) + return +} + // SummaryStmt collects statements for information_schema.statements_summary func (a *ExecStmt) SummaryStmt(succ bool) { sessVars := a.Ctx.GetSessionVars() @@ -997,7 +1008,7 @@ func (a *ExecStmt) SummaryStmt(succ bool) { // No need to encode every time, so encode lazily. planGenerator := func() string { - return plannercore.EncodePlan(a.Plan) + return getEncodedPlan(a.Ctx, a.Plan) } // Generating plan digest is slow, only generate it once if it's 'Point_Get'. // If it's a point get, different SQLs leads to different plans, so SQL digest diff --git a/infoschema/tables_test.go b/infoschema/tables_test.go index 8282a460e7bbf..68c9a0060c03f 100644 --- a/infoschema/tables_test.go +++ b/infoschema/tables_test.go @@ -948,6 +948,13 @@ func (s *testTableSuite) TestStmtSummaryTable(c *C) { // Point get another database. tk.MustQuery("select variable_value from mysql.tidb where variable_name = 'system_tz'") + // Test for Encode plan cache. + p1 := tk.Se.GetSessionVars().StmtCtx.GetEncodedPlan() + c.Assert(len(p1) > 0, IsTrue) + rows := tk.MustQuery("select tidb_decode_plan('" + p1 + "');").Rows() + c.Assert(len(rows), Equals, 1) + c.Assert(len(rows[0]), Equals, 1) + c.Assert(rows[0][0], Matches, ".*\n.*Point_Get.*table.tidb, index.PRIMARY.VARIABLE_NAME.*") tk.MustQuery(`select table_names from information_schema.statements_summary where digest_text like 'select variable_value%' and schema_name='test'`, @@ -955,6 +962,9 @@ func (s *testTableSuite) TestStmtSummaryTable(c *C) { // Test `create database`. tk.MustExec("create database if not exists test") + // Test for Encode plan cache. + p2 := tk.Se.GetSessionVars().StmtCtx.GetEncodedPlan() + c.Assert(p2, Equals, "") tk.MustQuery(`select table_names from information_schema.statements_summary where digest_text like 'create database%' and schema_name='test'`, diff --git a/sessionctx/stmtctx/stmtctx.go b/sessionctx/stmtctx/stmtctx.go index 6705b65286f0b..ff4c20bd5b77b 100644 --- a/sessionctx/stmtctx/stmtctx.go +++ b/sessionctx/stmtctx/stmtctx.go @@ -145,6 +145,7 @@ type StatementContext struct { // planNormalized use for cache the normalized plan, avoid duplicate builds. planNormalized string planDigest string + encodedPlan string Tables []TableEntry PointExec bool // for point update cached execution, Constant expression need to set "paramMarker" lockWaitStartTime int64 // LockWaitStartTime stores the pessimistic lock wait start time @@ -216,6 +217,16 @@ func (sc *StatementContext) SetPlanDigest(normalized, planDigest string) { sc.planNormalized, sc.planDigest = normalized, planDigest } +// GetEncodedPlan gets the encoded plan, it is used to avoid repeated encode. +func (sc *StatementContext) GetEncodedPlan() string { + return sc.encodedPlan +} + +// SetEncodedPlan sets the encoded plan, it is used to avoid repeated encode. +func (sc *StatementContext) SetEncodedPlan(encodedPlan string) { + sc.encodedPlan = encodedPlan +} + // TableEntry presents table in db. type TableEntry struct { DB string From 7e06ff56da5b0c872f74d4ba3a320c3c3ead996f Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Thu, 26 Nov 2020 16:25:51 +0800 Subject: [PATCH 182/229] planner: fix incorrect results when using a prefix index with OR condition (#21251) (#21287) Signed-off-by: ti-srebot --- util/ranger/detacher.go | 4 ++ util/ranger/ranger_test.go | 36 +++++++++++++++ util/ranger/testdata/ranger_suite_in.json | 9 ++++ util/ranger/testdata/ranger_suite_out.json | 53 ++++++++++++++++++++++ 4 files changed, 102 insertions(+) diff --git a/util/ranger/detacher.go b/util/ranger/detacher.go index fd08210bfa108..8b1f6f696fa3c 100644 --- a/util/ranger/detacher.go +++ b/util/ranger/detacher.go @@ -317,6 +317,10 @@ func detachDNFCondAndBuildRangeForIndex(sctx sessionctx.Context, condition *expr } } + // Take prefix index into consideration. + if hasPrefix(lengths) { + fixPrefixColRange(totalRanges, lengths, newTpSlice) + } totalRanges, err := UnionRanges(sc, totalRanges) if err != nil { return nil, nil, false, errors.Trace(err) diff --git a/util/ranger/ranger_test.go b/util/ranger/ranger_test.go index 27f26c1cb46f1..c9a7e374a11c5 100644 --- a/util/ranger/ranger_test.go +++ b/util/ranger/ranger_test.go @@ -1200,6 +1200,42 @@ func (s *testRangerSuite) TestIndexStringIsTrueRange(c *C) { } } +func (s *testRangerSuite) TestPrefixIndexMultiColDNF(c *C) { + defer testleak.AfterTest(c)() + dom, store, err := newDomainStoreWithBootstrap(c) + defer func() { + dom.Close() + store.Close() + }() + c.Assert(err, IsNil) + testKit := testkit.NewTestKit(c, store) + testKit.MustExec("use test;") + testKit.MustExec("drop table if exists t2;") + testKit.MustExec("create table t2 (id int unsigned not null auto_increment primary key, t text, index(t(3)));") + testKit.MustExec("insert into t2 (t) values ('aaaa'),('a');") + + var input []string + var output []struct { + SQL string + Plan []string + Result []string + } + s.testData.GetTestCases(c, &input, &output) + inputLen := len(input) + for i, tt := range input { + s.testData.OnRecord(func() { + output[i].SQL = tt + output[i].Plan = s.testData.ConvertRowsToStrings(testKit.MustQuery("explain " + tt).Rows()) + output[i].Result = s.testData.ConvertRowsToStrings(testKit.MustQuery(tt).Rows()) + }) + testKit.MustQuery("explain " + tt).Check(testkit.Rows(output[i].Plan...)) + testKit.MustQuery(tt).Check(testkit.Rows(output[i].Result...)) + if i+1 == inputLen/2 { + testKit.MustExec("analyze table t2;") + } + } +} + func (s *testRangerSuite) TestIndexRangeForYear(c *C) { defer testleak.AfterTest(c)() dom, store, err := newDomainStoreWithBootstrap(c) diff --git a/util/ranger/testdata/ranger_suite_in.json b/util/ranger/testdata/ranger_suite_in.json index 5f6acf9731c5d..e3ef63d0c9814 100644 --- a/util/ranger/testdata/ranger_suite_in.json +++ b/util/ranger/testdata/ranger_suite_in.json @@ -17,5 +17,14 @@ "explain select * from t0 where c0 and c0 in ('123','456','789')", "explain SELECT * FROM t0 WHERE ('a' != t0.c0) AND t0.c0;" ] + }, + { + "name": "TestPrefixIndexMultiColDNF", + "cases": [ + "select * from t2 where t='aaaa';", + "select * from t2 where t='aaaa' or t = 'a';", + "select * from t2 where t='aaaa';", + "select * from t2 where t='aaaa' or t = 'a';" + ] } ] diff --git a/util/ranger/testdata/ranger_suite_out.json b/util/ranger/testdata/ranger_suite_out.json index 38adc21a07390..e683c790f3c8f 100644 --- a/util/ranger/testdata/ranger_suite_out.json +++ b/util/ranger/testdata/ranger_suite_out.json @@ -86,5 +86,58 @@ ] } ] + }, + { + "Name": "TestPrefixIndexMultiColDNF", + "Cases": [ + { + "SQL": "select * from t2 where t='aaaa';", + "Plan": [ + "IndexLookUp_11 10.00 root ", + "├─IndexRangeScan_8(Build) 10.00 cop[tikv] table:t2, index:t(t) range:[\"aaa\",\"aaa\"], keep order:false, stats:pseudo", + "└─Selection_10(Probe) 10.00 cop[tikv] eq(test.t2.t, \"aaaa\")", + " └─TableRowIDScan_9 10.00 cop[tikv] table:t2 keep order:false, stats:pseudo" + ], + "Result": [ + "1 aaaa" + ] + }, + { + "SQL": "select * from t2 where t='aaaa' or t = 'a';", + "Plan": [ + "IndexLookUp_11 16.00 root ", + "├─IndexRangeScan_8(Build) 20.00 cop[tikv] table:t2, index:t(t) range:[\"a\",\"a\"], [\"aaa\",\"aaa\"], keep order:false, stats:pseudo", + "└─Selection_10(Probe) 16.00 cop[tikv] or(eq(test.t2.t, \"aaaa\"), eq(test.t2.t, \"a\"))", + " └─TableRowIDScan_9 20.00 cop[tikv] table:t2 keep order:false, stats:pseudo" + ], + "Result": [ + "1 aaaa", + "2 a" + ] + }, + { + "SQL": "select * from t2 where t='aaaa';", + "Plan": [ + "TableReader_7 1.00 root data:Selection_6", + "└─Selection_6 1.00 cop[tikv] eq(test.t2.t, \"aaaa\")", + " └─TableRangeScan_5 2.00 cop[tikv] table:t2 range:[0,+inf], keep order:false" + ], + "Result": [ + "1 aaaa" + ] + }, + { + "SQL": "select * from t2 where t='aaaa' or t = 'a';", + "Plan": [ + "TableReader_7 1.60 root data:Selection_6", + "└─Selection_6 1.60 cop[tikv] or(eq(test.t2.t, \"aaaa\"), eq(test.t2.t, \"a\"))", + " └─TableRangeScan_5 2.00 cop[tikv] table:t2 range:[0,+inf], keep order:false" + ], + "Result": [ + "1 aaaa", + "2 a" + ] + } + ] } ] From 88b64368ebfd1a646f5275cb45007defb7a054ad Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Thu, 26 Nov 2020 17:02:31 +0800 Subject: [PATCH 183/229] log: desensitize of dispatching error and parsing error (#21141) (#21171) Signed-off-by: ti-srebot --- server/conn.go | 13 ++++++++++--- session/session.go | 6 +++++- util/misc.go | 2 +- 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/server/conn.go b/server/conn.go index 0fa7821f56892..55d3a14707f2c 100644 --- a/server/conn.go +++ b/server/conn.go @@ -796,7 +796,7 @@ func (cc *clientConn) Run(ctx context.Context) { zap.String("status", cc.SessionStatusToString()), zap.Stringer("sql", getLastStmtInConn{cc}), zap.String("txn_mode", txnMode), - zap.String("err", errStrForLog(err)), + zap.String("err", errStrForLog(err, cc.ctx.GetSessionVars().EnableRedactLog)), ) err1 := cc.writeError(ctx, err) terror.Log(err1) @@ -830,7 +830,14 @@ func queryStrForLog(query string) string { return query } -func errStrForLog(err error) string { +func errStrForLog(err error, enableRedactLog bool) string { + if enableRedactLog { + // currently, only ErrParse is considered when enableRedactLog because it may contain sensitive information like + // password or accesskey + if parser.ErrParse.Equal(err) { + return "fail to parse SQL and can't redact when enable log redaction" + } + } if kv.ErrKeyExists.Equal(err) || parser.ErrParse.Equal(err) { // Do not log stack for duplicated entry error. return err.Error() @@ -1758,7 +1765,7 @@ func (cc getLastStmtInConn) String() string { case mysql.ComQuery, mysql.ComStmtPrepare: sql := string(hack.String(data)) if cc.ctx.GetSessionVars().EnableRedactLog { - sql, _ = parser.NormalizeDigest(sql) + sql = parser.Normalize(sql) } return queryStrForLog(sql) case mysql.ComStmtExecute, mysql.ComStmtFetch: diff --git a/session/session.go b/session/session.go index 09270e0aeffcd..e39d601719ee0 100644 --- a/session/session.go +++ b/session/session.go @@ -1146,7 +1146,11 @@ func (s *session) execute(ctx context.Context, sql string) (recordSets []sqlexec // Only print log message when this SQL is from the user. // Mute the warning for internal SQLs. if !s.sessionVars.InRestrictedSQL { - logutil.Logger(ctx).Warn("parse SQL failed", zap.Error(err), zap.String("SQL", sql)) + if s.sessionVars.EnableRedactLog { + logutil.Logger(ctx).Debug("parse SQL failed", zap.Error(err), zap.String("SQL", sql)) + } else { + logutil.Logger(ctx).Warn("parse SQL failed", zap.Error(err), zap.String("SQL", sql)) + } } return nil, util.SyntaxError(err) } diff --git a/util/misc.go b/util/misc.go index 40c580e9f72e2..e4216dd42fc59 100644 --- a/util/misc.go +++ b/util/misc.go @@ -164,7 +164,7 @@ func SyntaxError(err error) error { if err == nil { return nil } - logutil.BgLogger().Error("syntax error", zap.Error(err)) + logutil.BgLogger().Debug("syntax error", zap.Error(err)) // If the error is already a terror with stack, pass it through. if errors.HasStack(err) { From 63b2673ca9726ab74bf3497c036ed6d9483aed5e Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Thu, 26 Nov 2020 17:18:51 +0800 Subject: [PATCH 184/229] util: redact log for expensive sqls (#20852) (#20919) Signed-off-by: ti-srebot --- session/session.go | 1 + util/expensivequery/expensivequerey_test.go | 5 +++++ util/expensivequery/expensivequery.go | 4 ++++ util/processinfo.go | 1 + 4 files changed, 11 insertions(+) diff --git a/session/session.go b/session/session.go index e39d601719ee0..4043cbd0ebbab 100644 --- a/session/session.go +++ b/session/session.go @@ -1051,6 +1051,7 @@ func (s *session) SetProcessInfo(sql string, t time.Time, command byte, maxExecu StmtCtx: s.sessionVars.StmtCtx, StatsInfo: plannercore.GetStatsInfo, MaxExecutionTime: maxExecutionTime, + RedactSQL: s.sessionVars.EnableRedactLog, } _, pi.Digest = s.sessionVars.StmtCtx.SQLDigest() s.currentPlan = nil diff --git a/util/expensivequery/expensivequerey_test.go b/util/expensivequery/expensivequerey_test.go index 066db5873ab1a..0d38a0f2282e8 100644 --- a/util/expensivequery/expensivequerey_test.go +++ b/util/expensivequery/expensivequerey_test.go @@ -53,6 +53,7 @@ func (s *testSuite) TestLogFormat(c *C) { StmtCtx: &stmtctx.StatementContext{ MemTracker: mem, }, + RedactSQL: false, } costTime := time.Second * 233 logFields := genLogFields(costTime, info) @@ -71,4 +72,8 @@ func (s *testSuite) TestLogFormat(c *C) { c.Assert(logFields[5].String, Equals, "2013265920 Bytes (1.875 GB)") c.Assert(logFields[6].Key, Equals, "sql") c.Assert(logFields[6].String, Equals, "select * from table where a > 1") + + info.RedactSQL = true + logFields = genLogFields(costTime, info) + c.Assert(logFields[6].String, Equals, "select * from table where a > ?") } diff --git a/util/expensivequery/expensivequery.go b/util/expensivequery/expensivequery.go index c77a3f99ddc86..8022cb564033a 100644 --- a/util/expensivequery/expensivequery.go +++ b/util/expensivequery/expensivequery.go @@ -21,6 +21,7 @@ import ( "time" "github.com/pingcap/log" + "github.com/pingcap/parser" "github.com/pingcap/tidb/sessionctx/variable" "github.com/pingcap/tidb/util" "github.com/pingcap/tidb/util/logutil" @@ -159,6 +160,9 @@ func genLogFields(costTime time.Duration, info *util.ProcessInfo) []zap.Field { var sql string if len(info.Info) > 0 { sql = info.Info + if info.RedactSQL { + sql = parser.Normalize(sql) + } } if len(sql) > logSQLLen { sql = fmt.Sprintf("%s len(%d)", sql[:logSQLLen], len(sql)) diff --git a/util/processinfo.go b/util/processinfo.go index 3dec1c8a617ac..64dccc4234279 100644 --- a/util/processinfo.go +++ b/util/processinfo.go @@ -46,6 +46,7 @@ type ProcessInfo struct { State uint16 Command byte ExceedExpensiveTimeThresh bool + RedactSQL bool } // ToRowForShow returns []interface{} for the row data of "SHOW [FULL] PROCESSLIST". From 62f5dcef431121fe01b0ab5bd2c89d1a1dbcb618 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Thu, 26 Nov 2020 19:00:12 +0800 Subject: [PATCH 185/229] planner: make index-hash-join and index-merge-join consider collation (#21201) (#21219) --- expression/integration_test.go | 22 +++++++++++++++ planner/core/exhaust_physical_plans.go | 30 ++++++++++++++------- planner/core/exhaust_physical_plans_test.go | 2 +- 3 files changed, 43 insertions(+), 11 deletions(-) diff --git a/expression/integration_test.go b/expression/integration_test.go index 586333f97ef42..c8e33d58d131f 100755 --- a/expression/integration_test.go +++ b/expression/integration_test.go @@ -7286,3 +7286,25 @@ func (s *testIntegrationSuite) TestIssue11645(c *C) { tk.MustQuery(`SELECT DATE_ADD('0001-01-02 00:00:00', INTERVAL -25 HOUR);`).Check(testkit.Rows("0000-00-00 23:00:00")) tk.MustQuery(`SELECT DATE_ADD('0001-01-02 00:00:00', INTERVAL -8785 HOUR);`).Check(testkit.Rows("0000-00-00 23:00:00")) } + +func (s *testIntegrationSerialSuite) TestCollationIndexJoin(c *C) { + collate.SetNewCollationEnabledForTest(true) + defer collate.SetNewCollationEnabledForTest(false) + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t1, t2") + tk.MustExec("create table t1(a int, b char(10), key(b)) collate utf8mb4_general_ci") + tk.MustExec("create table t2(a int, b char(10), key(b)) collate ascii_bin") + tk.MustExec("insert into t1 values (1, 'a')") + tk.MustExec("insert into t2 values (1, 'A')") + + tk.MustQuery("select /*+ inl_join(t1) */ t1.b, t2.b from t1 join t2 where t1.b=t2.b").Check(testkit.Rows("a A")) + tk.MustQuery("select /*+ hash_join(t1) */ t1.b, t2.b from t1 join t2 where t1.b=t2.b").Check(testkit.Rows("a A")) + tk.MustQuery("select /*+ merge_join(t1) */ t1.b, t2.b from t1 join t2 where t1.b=t2.b").Check(testkit.Rows("a A")) + tk.MustQuery("select /*+ inl_hash_join(t1) */ t1.b, t2.b from t1 join t2 where t1.b=t2.b").Check(testkit.Rows("a A")) + tk.MustQuery("select /*+ inl_hash_join(t2) */ t1.b, t2.b from t1 join t2 where t1.b=t2.b").Check(testkit.Rows("a A")) + tk.MustQuery("show warnings").Check(testkit.Rows("Warning 1815 Optimizer Hint /*+ INL_HASH_JOIN(t2) */ is inapplicable")) + tk.MustQuery("select /*+ inl_merge_join(t1) */ t1.b, t2.b from t1 join t2 where t1.b=t2.b").Check(testkit.Rows("a A")) + tk.MustQuery("select /*+ inl_merge_join(t2) */ t1.b, t2.b from t1 join t2 where t1.b=t2.b").Check(testkit.Rows("a A")) + tk.MustQuery("show warnings").Check(testkit.Rows("Warning 1815 Optimizer Hint /*+ INL_MERGE_JOIN(t2) */ is inapplicable")) +} diff --git a/planner/core/exhaust_physical_plans.go b/planner/core/exhaust_physical_plans.go index c59470dbe3030..9fca18acba398 100644 --- a/planner/core/exhaust_physical_plans.go +++ b/planner/core/exhaust_physical_plans.go @@ -424,6 +424,16 @@ func (p *LogicalJoin) constructIndexJoin( continue } } + // Correct the collation used by hash. + for i := range outerHashKeys { + // Make compiler happy. + if len(innerHashKeys) == 0 { + return nil + } + chs, coll := expression.DeriveCollationFromExprs(nil, outerHashKeys[i], innerHashKeys[i]) + outerHashKeys[i].GetType().Charset, outerHashKeys[i].GetType().Collate = chs, coll + innerHashKeys[i].GetType().Charset, innerHashKeys[i].GetType().Collate = chs, coll + } baseJoin := basePhysicalJoin{ InnerChildIdx: 1 - outerIdx, LeftConditions: p.LeftConditions, @@ -685,7 +695,7 @@ func (p *LogicalJoin) buildIndexJoinInner2IndexScan( if path.IsTablePath { continue } - emptyRange, err := helper.analyzeLookUpFilters(path, ds, innerJoinKeys) + emptyRange, err := helper.analyzeLookUpFilters(path, ds, innerJoinKeys, outerJoinKeys) if emptyRange { return nil } @@ -1144,16 +1154,16 @@ loopOtherConds: // It's clearly that the column c cannot be used to access data. So we need to remove it and reset the IdxOff2KeyOff to // [0 -1 -1]. // So that we can use t1.a=t2.a and t1.b > t2.b-10 and t1.b < t2.b+10 to build ranges then access data. -func (ijHelper *indexJoinBuildHelper) removeUselessEqAndInFunc( - idxCols []*expression.Column, - notKeyEqAndIn []expression.Expression) ( - usefulEqAndIn, uselessOnes []expression.Expression, -) { +func (ijHelper *indexJoinBuildHelper) removeUselessEqAndInFunc(idxCols []*expression.Column, notKeyEqAndIn []expression.Expression, outerJoinKeys []*expression.Column) (usefulEqAndIn, uselessOnes []expression.Expression) { ijHelper.curPossibleUsedKeys = make([]*expression.Column, 0, len(idxCols)) for idxColPos, notKeyColPos := 0, 0; idxColPos < len(idxCols); idxColPos++ { if ijHelper.curIdxOff2KeyOff[idxColPos] != -1 { - ijHelper.curPossibleUsedKeys = append(ijHelper.curPossibleUsedKeys, idxCols[idxColPos]) - continue + // Check collation is the new collation is enabled. + _, coll := expression.DeriveCollationFromExprs(nil, idxCols[idxColPos], outerJoinKeys[ijHelper.curIdxOff2KeyOff[idxColPos]]) + if !collate.NewCollationEnabled() || collate.CompatibleCollate(idxCols[idxColPos].GetType().Collate, coll) { + ijHelper.curPossibleUsedKeys = append(ijHelper.curPossibleUsedKeys, idxCols[idxColPos]) + continue + } } if notKeyColPos < len(notKeyEqAndIn) && ijHelper.curNotUsedIndexCols[notKeyColPos].Equal(nil, idxCols[idxColPos]) { notKeyColPos++ @@ -1170,7 +1180,7 @@ func (ijHelper *indexJoinBuildHelper) removeUselessEqAndInFunc( return notKeyEqAndIn, nil } -func (ijHelper *indexJoinBuildHelper) analyzeLookUpFilters(path *util.AccessPath, innerPlan *DataSource, innerJoinKeys []*expression.Column) (emptyRange bool, err error) { +func (ijHelper *indexJoinBuildHelper) analyzeLookUpFilters(path *util.AccessPath, innerPlan *DataSource, innerJoinKeys []*expression.Column, outerJoinKeys []*expression.Column) (emptyRange bool, err error) { if len(path.IdxCols) == 0 { return false, nil } @@ -1178,7 +1188,7 @@ func (ijHelper *indexJoinBuildHelper) analyzeLookUpFilters(path *util.AccessPath ijHelper.resetContextForIndex(innerJoinKeys, path.IdxCols, path.IdxColLens) notKeyEqAndIn, remained, rangeFilterCandidates := ijHelper.findUsefulEqAndInFilters(innerPlan) var remainedEqAndIn []expression.Expression - notKeyEqAndIn, remainedEqAndIn = ijHelper.removeUselessEqAndInFunc(path.IdxCols, notKeyEqAndIn) + notKeyEqAndIn, remainedEqAndIn = ijHelper.removeUselessEqAndInFunc(path.IdxCols, notKeyEqAndIn, outerJoinKeys) matchedKeyCnt := len(ijHelper.curPossibleUsedKeys) // If no join key is matched while join keys actually are not empty. We don't choose index join for now. if matchedKeyCnt <= 0 && len(innerJoinKeys) > 0 { diff --git a/planner/core/exhaust_physical_plans_test.go b/planner/core/exhaust_physical_plans_test.go index c3569527df786..3b7bc02c7ff64 100644 --- a/planner/core/exhaust_physical_plans_test.go +++ b/planner/core/exhaust_physical_plans_test.go @@ -245,7 +245,7 @@ func (s *testUnitTestSuit) TestIndexJoinAnalyzeLookUpFilters(c *C) { c.Assert(err, IsNil) joinNode.OtherConditions = others helper := &indexJoinBuildHelper{join: joinNode, lastColManager: nil} - _, err = helper.analyzeLookUpFilters(path, dataSourceNode, tt.innerKeys) + _, err = helper.analyzeLookUpFilters(path, dataSourceNode, tt.innerKeys, tt.innerKeys) c.Assert(err, IsNil) c.Assert(fmt.Sprintf("%v", helper.chosenAccess), Equals, tt.accesses) c.Assert(fmt.Sprintf("%v", helper.chosenRanges), Equals, tt.ranges, Commentf("test case: #%v", i)) From 1f90ac8329cab68c9428087e0c5f24f31b6ea17f Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Thu, 26 Nov 2020 19:32:50 +0800 Subject: [PATCH 186/229] *: implement priority control for OOM Action (#21170) (#21298) Signed-off-by: ti-srebot --- executor/executor.go | 7 ++++-- executor/executor_test.go | 33 ++++++++++++++++++++++++ store/tikv/coprocessor.go | 18 ++++++------- util/chunk/row_container.go | 33 +++++++++++------------- util/memory/action.go | 42 ++++++++++++++++++++++++++++--- util/memory/tracker.go | 27 ++++++++++++++++++-- util/memory/tracker_test.go | 50 +++++++++++++++++++++++++++++++------ 7 files changed, 167 insertions(+), 43 deletions(-) diff --git a/executor/executor.go b/executor/executor.go index d2189079de177..b072ce1c2fc02 100644 --- a/executor/executor.go +++ b/executor/executor.go @@ -103,6 +103,7 @@ type baseExecutor struct { // globalPanicOnExceed panics when GlobalDisTracker storage usage exceeds storage quota. type globalPanicOnExceed struct { + memory.BaseOOMAction mutex sync.Mutex // For synchronization. } @@ -116,8 +117,10 @@ func (a *globalPanicOnExceed) Action(t *memory.Tracker) { panic(globalPanicStorageExceed) } -// SetFallback sets a fallback action. -func (a *globalPanicOnExceed) SetFallback(memory.ActionOnExceed) {} +// GetPriority get the priority of the Action +func (a *globalPanicOnExceed) GetPriority() int64 { + return memory.DefPanicPriority +} const ( // globalPanicStorageExceed represents the panic message when out of storage quota. diff --git a/executor/executor_test.go b/executor/executor_test.go index 4eec570d7b286..8d0a51ff791dc 100644 --- a/executor/executor_test.go +++ b/executor/executor_test.go @@ -70,6 +70,7 @@ import ( "github.com/pingcap/tidb/util/codec" "github.com/pingcap/tidb/util/gcutil" "github.com/pingcap/tidb/util/logutil" + "github.com/pingcap/tidb/util/memory" "github.com/pingcap/tidb/util/mock" "github.com/pingcap/tidb/util/rowcodec" "github.com/pingcap/tidb/util/testkit" @@ -6381,3 +6382,35 @@ func (s *testSuite) TestIssue20305(c *C) { tk.MustExec("INSERT INTO `t3` VALUES (2069, 70), (2010, 11), (2155, 2156), (2069, 69)") tk.MustQuery("SELECT * FROM `t3` where y <= a").Check(testkit.Rows("2155 2156")) } + +func (s *testSuite) TestOOMActionPriority(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t0") + tk.MustExec("drop table if exists t1") + tk.MustExec("drop table if exists t2") + tk.MustExec("drop table if exists t3") + tk.MustExec("drop table if exists t4") + tk.MustExec("create table t0(a int)") + tk.MustExec("insert into t0 values(1)") + tk.MustExec("create table t1(a int)") + tk.MustExec("insert into t1 values(1)") + tk.MustExec("create table t2(a int)") + tk.MustExec("insert into t2 values(1)") + tk.MustExec("create table t3(a int)") + tk.MustExec("insert into t3 values(1)") + tk.MustExec("create table t4(a int)") + tk.MustExec("insert into t4 values(1)") + tk.MustQuery("select * from t0 join t1 join t2 join t3 join t4 order by t0.a").Check(testkit.Rows("1 1 1 1 1")) + action := tk.Se.GetSessionVars().StmtCtx.MemTracker.GetFallbackForTest() + // check the first 5 actions is rate limit. + for i := 0; i < 5; i++ { + c.Assert(action.GetPriority(), Equals, int64(memory.DefRateLimitPriority)) + action = action.GetFallback() + } + for action.GetFallback() != nil { + c.Assert(action.GetPriority(), Equals, int64(memory.DefSpillPriority)) + action = action.GetFallback() + } + c.Assert(action.GetPriority(), Equals, int64(memory.DefLogPriority)) +} diff --git a/store/tikv/coprocessor.go b/store/tikv/coprocessor.go index f69b6f03c4f47..11077346c0c53 100644 --- a/store/tikv/coprocessor.go +++ b/store/tikv/coprocessor.go @@ -1300,9 +1300,9 @@ func (it copErrorResponse) Close() error { // set on initial. Each time the Action is triggered, one token would be destroyed. If the count of the token is less // than 2, the action would be delegated to the fallback action. type rateLimitAction struct { + memory.BaseOOMAction // enabled indicates whether the rateLimitAction is permitted to Action. 1 means permitted, 0 denied. - enabled uint32 - fallbackAction memory.ActionOnExceed + enabled uint32 // totalTokenNum indicates the total token at initial totalTokenNum uint cond struct { @@ -1338,8 +1338,8 @@ func newRateLimitAction(totalTokenNumber uint) *rateLimitAction { // Action implements ActionOnExceed.Action func (e *rateLimitAction) Action(t *memory.Tracker) { if !e.isEnabled() { - if e.fallbackAction != nil { - e.fallbackAction.Action(t) + if fallback := e.GetFallback(); fallback != nil { + fallback.Action(t) } return } @@ -1350,8 +1350,8 @@ func (e *rateLimitAction) Action(t *memory.Tracker) { e.setEnabled(false) logutil.BgLogger().Info("memory exceeds quota, rateLimitAction delegate to fallback action", zap.Uint("total token count", e.totalTokenNum)) - if e.fallbackAction != nil { - e.fallbackAction.Action(t) + if fallback := e.GetFallback(); fallback != nil { + fallback.Action(t) } return } @@ -1377,9 +1377,9 @@ func (e *rateLimitAction) SetLogHook(hook func(uint64)) { } -// SetFallback implements ActionOnExceed.SetFallback -func (e *rateLimitAction) SetFallback(a memory.ActionOnExceed) { - e.fallbackAction = a +// GetPriority get the priority of the Action. +func (e *rateLimitAction) GetPriority() int64 { + return memory.DefRateLimitPriority } // destroyTokenIfNeeded will check the `exceed` flag after copWorker finished one task. diff --git a/util/chunk/row_container.go b/util/chunk/row_container.go index 6ff4d4300ff99..475e3110949ed 100644 --- a/util/chunk/row_container.go +++ b/util/chunk/row_container.go @@ -259,11 +259,11 @@ func (c *RowContainer) ActionSpillForTest() *SpillDiskAction { // the memory quota of a query is exceeded, SpillDiskAction.Action is // triggered. type SpillDiskAction struct { - c *RowContainer - fallbackAction memory.ActionOnExceed - m sync.Mutex - once sync.Once - cond spillStatusCond + memory.BaseOOMAction + c *RowContainer + m sync.Mutex + once sync.Once + cond spillStatusCond // test function only used for test sync. testSyncInputFunc func() @@ -333,8 +333,8 @@ func (a *SpillDiskAction) Action(t *memory.Tracker) { if !t.CheckExceed() { return } - if a.fallbackAction != nil { - a.fallbackAction.Action(t) + if fallback := a.GetFallback(); fallback != nil { + fallback.Action(t) } } @@ -346,14 +346,14 @@ func (a *SpillDiskAction) Reset() { a.once = sync.Once{} } -// SetFallback sets the fallback action. -func (a *SpillDiskAction) SetFallback(fallback memory.ActionOnExceed) { - a.fallbackAction = fallback -} - // SetLogHook sets the hook, it does nothing just to form the memory.ActionOnExceed interface. func (a *SpillDiskAction) SetLogHook(hook func(uint64)) {} +// GetPriority get the priority of the Action. +func (a *SpillDiskAction) GetPriority() int64 { + return memory.DefSpillPriority +} + // WaitForTest waits all goroutine have gone. func (a *SpillDiskAction) WaitForTest() { a.testWg.Wait() @@ -528,16 +528,11 @@ func (a *SortAndSpillDiskAction) Action(t *memory.Tracker) { if !t.CheckExceed() { return } - if a.fallbackAction != nil { - a.fallbackAction.Action(t) + if fallback := a.GetFallback(); fallback != nil { + fallback.Action(t) } } -// SetFallback sets the fallback action. -func (a *SortAndSpillDiskAction) SetFallback(fallback memory.ActionOnExceed) { - a.fallbackAction = fallback -} - // SetLogHook sets the hook, it does nothing just to form the memory.ActionOnExceed interface. func (a *SortAndSpillDiskAction) SetLogHook(hook func(uint64)) {} diff --git a/util/memory/action.go b/util/memory/action.go index d78d4994272a9..4f12a5d90f139 100644 --- a/util/memory/action.go +++ b/util/memory/action.go @@ -35,10 +35,39 @@ type ActionOnExceed interface { // SetFallback sets a fallback action which will be triggered if itself has // already been triggered. SetFallback(a ActionOnExceed) + // GetFallback get the fallback action of the Action. + GetFallback() ActionOnExceed + // GetPriority get the priority of the Action. + GetPriority() int64 } +// BaseOOMAction manages the fallback action for all Action. +type BaseOOMAction struct { + fallbackAction ActionOnExceed +} + +// SetFallback sets a fallback action which will be triggered if itself has +// already been triggered. +func (b *BaseOOMAction) SetFallback(a ActionOnExceed) { + b.fallbackAction = a +} + +// GetFallback get the fallback action of the Action. +func (b *BaseOOMAction) GetFallback() ActionOnExceed { + return b.fallbackAction +} + +// Default OOM Action priority. +const ( + DefPanicPriority = iota + DefLogPriority + DefSpillPriority + DefRateLimitPriority +) + // LogOnExceed logs a warning only once when memory usage exceeds memory quota. type LogOnExceed struct { + BaseOOMAction mutex sync.Mutex // For synchronization. acted bool ConnID uint64 @@ -65,11 +94,14 @@ func (a *LogOnExceed) Action(t *Tracker) { } } -// SetFallback sets a fallback action. -func (a *LogOnExceed) SetFallback(ActionOnExceed) {} +// GetPriority get the priority of the Action +func (a *LogOnExceed) GetPriority() int64 { + return DefLogPriority +} // PanicOnExceed panics when memory usage exceeds memory quota. type PanicOnExceed struct { + BaseOOMAction mutex sync.Mutex // For synchronization. acted bool ConnID uint64 @@ -96,8 +128,10 @@ func (a *PanicOnExceed) Action(t *Tracker) { panic(PanicMemoryExceed + fmt.Sprintf("[conn_id=%d]", a.ConnID)) } -// SetFallback sets a fallback action. -func (a *PanicOnExceed) SetFallback(ActionOnExceed) {} +// GetPriority get the priority of the Action +func (a *PanicOnExceed) GetPriority() int64 { + return DefPanicPriority +} var ( errMemExceedThreshold = dbterror.ClassUtil.NewStd(errno.ErrMemExceedThreshold) diff --git a/util/memory/tracker.go b/util/memory/tracker.go index 9b08a6b2e173e..55692e6a80bfd 100644 --- a/util/memory/tracker.go +++ b/util/memory/tracker.go @@ -118,8 +118,31 @@ func (t *Tracker) SetActionOnExceed(a ActionOnExceed) { func (t *Tracker) FallbackOldAndSetNewAction(a ActionOnExceed) { t.actionMu.Lock() defer t.actionMu.Unlock() - a.SetFallback(t.actionMu.actionOnExceed) - t.actionMu.actionOnExceed = a + t.actionMu.actionOnExceed = reArrangeFallback(t.actionMu.actionOnExceed, a) +} + +// GetFallbackForTest get the oom action used by test. +func (t *Tracker) GetFallbackForTest() ActionOnExceed { + t.actionMu.Lock() + defer t.actionMu.Unlock() + return t.actionMu.actionOnExceed +} + +// reArrangeFallback merge two action chains and rearrange them by priority in descending order. +func reArrangeFallback(a ActionOnExceed, b ActionOnExceed) ActionOnExceed { + if a == nil { + return b + } + if b == nil { + return a + } + if a.GetPriority() < b.GetPriority() { + a, b = b, a + a.SetFallback(b) + } else { + a.SetFallback(reArrangeFallback(a.GetFallback(), b)) + } + return a } // SetLabel sets the label of a Tracker. diff --git a/util/memory/tracker_test.go b/util/memory/tracker_test.go index 6e595c4c9f8ea..2fa6516a590bb 100644 --- a/util/memory/tracker_test.go +++ b/util/memory/tracker_test.go @@ -106,31 +106,32 @@ func (s *testSuite) TestOOMAction(c *C) { c.Assert(action1.called, IsFalse) c.Assert(action2.called, IsFalse) tracker.Consume(10000) - c.Assert(action1.called, IsFalse) - c.Assert(action2.called, IsTrue) + c.Assert(action1.called, IsTrue) + c.Assert(action2.called, IsFalse) tracker.Consume(10000) c.Assert(action1.called, IsTrue) c.Assert(action2.called, IsTrue) } type mockAction struct { + BaseOOMAction called bool - fallback ActionOnExceed + priority int64 } func (a *mockAction) SetLogHook(hook func(uint64)) { } func (a *mockAction) Action(t *Tracker) { - if a.called && a.fallback != nil { - a.fallback.Action(t) + if a.called && a.fallbackAction != nil { + a.fallbackAction.Action(t) return } a.called = true } -func (a *mockAction) SetFallback(fallback ActionOnExceed) { - a.fallback = fallback +func (a *mockAction) GetPriority() int64 { + return a.priority } func (s *testSuite) TestAttachTo(c *C) { @@ -341,3 +342,38 @@ func BenchmarkConsume(b *testing.B) { func (s *testSuite) TestErrorCode(c *C) { c.Assert(int(terror.ToSQLError(errMemExceedThreshold).Code), Equals, errno.ErrMemExceedThreshold) } + +func (s *testSuite) TestOOMActionPriority(c *C) { + tracker := NewTracker(1, 100) + // make sure no panic here. + tracker.Consume(10000) + + tracker = NewTracker(1, 1) + tracker.actionMu.actionOnExceed = nil + n := 100 + actions := make([]*mockAction, n) + for i := 0; i < n; i++ { + actions[i] = &mockAction{priority: int64(i)} + } + + randomShuffle := make([]int, n) + for i := 0; i < n; i++ { + randomShuffle[i] = i + pos := rand.Int() % (i + 1) + randomShuffle[i], randomShuffle[pos] = randomShuffle[pos], randomShuffle[i] + } + + for i := 0; i < n; i++ { + tracker.FallbackOldAndSetNewAction(actions[randomShuffle[i]]) + } + for i := n - 1; i >= 0; i-- { + tracker.Consume(100) + for j := n - 1; j >= 0; j-- { + if j >= i { + c.Assert(actions[j].called, IsTrue) + } else { + c.Assert(actions[j].called, IsFalse) + } + } + } +} From f567009856541ce7ac69a95095b3e48fb6e7634d Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Thu, 26 Nov 2020 19:55:52 +0800 Subject: [PATCH 187/229] executor: fix issue of explain for connection can't show the last query plan (#21242) (#21315) Signed-off-by: ti-srebot --- server/server_test.go | 22 ++++++++++++++++++++++ server/tidb_test.go | 4 ++++ session/session.go | 10 ++++++++++ 3 files changed, 36 insertions(+) diff --git a/server/server_test.go b/server/server_test.go index 98b301c9fdf22..c78f08e238f2c 100644 --- a/server/server_test.go +++ b/server/server_test.go @@ -925,6 +925,28 @@ func (cli *testServerClient) runTestConcurrentUpdate(c *C) { }) } +func (cli *testServerClient) runTestExplainForConn(c *C) { + cli.runTestsOnNewDB(c, nil, "explain_for_conn", func(dbt *DBTest) { + dbt.mustExec("drop table if exists t") + dbt.mustExec("create table t (a int key, b int)") + dbt.mustExec("insert t values (1, 1)") + rows := dbt.mustQuery("select connection_id();") + c.Assert(rows.Next(), IsTrue) + var connID int64 + err := rows.Scan(&connID) + c.Assert(err, IsNil) + c.Assert(rows.Close(), IsNil) + dbt.mustQuery("select * from t where a=1") + rows = dbt.mustQuery("explain for connection " + strconv.Itoa(int(connID))) + c.Assert(rows.Next(), IsTrue) + row := make([]string, 9) + err = rows.Scan(&row[0], &row[1], &row[2], &row[3], &row[4], &row[5], &row[6], &row[7], &row[8]) + c.Assert(err, IsNil) + c.Assert(strings.Join(row, ","), Matches, "Point_Get_1,1.00,1,root,table:t,time.*loop.*handle:1.*") + c.Assert(rows.Close(), IsNil) + }) +} + func (cli *testServerClient) runTestErrorCode(c *C) { cli.runTestsOnNewDB(c, nil, "ErrorCode", func(dbt *DBTest) { dbt.mustExec("create table test (c int PRIMARY KEY);") diff --git a/server/tidb_test.go b/server/tidb_test.go index 6277e3c2bd4c2..9b5bdf5d3d0af 100644 --- a/server/tidb_test.go +++ b/server/tidb_test.go @@ -146,6 +146,10 @@ func (ts *tidbTestSerialSuite) TestLoadData(c *C) { ts.runTestLoadDataForSlowLog(c, ts.server) } +func (ts *tidbTestSerialSuite) TestExplainFor(c *C) { + ts.runTestExplainForConn(c) +} + func (ts *tidbTestSerialSuite) TestStmtCount(c *C) { ts.runTestStmtCount(c) } diff --git a/session/session.go b/session/session.go index 4043cbd0ebbab..22716b9d47407 100644 --- a/session/session.go +++ b/session/session.go @@ -1053,6 +1053,16 @@ func (s *session) SetProcessInfo(sql string, t time.Time, command byte, maxExecu MaxExecutionTime: maxExecutionTime, RedactSQL: s.sessionVars.EnableRedactLog, } + if p == nil { + // Store the last valid plan when the current plan is nil. + // This is for `explain for connection` statement has the ability to query the last valid plan. + oldPi := s.ShowProcess() + if oldPi != nil && oldPi.Plan != nil && len(oldPi.PlanExplainRows) > 0 { + pi.Plan = oldPi.Plan + pi.PlanExplainRows = oldPi.PlanExplainRows + pi.RuntimeStatsColl = oldPi.RuntimeStatsColl + } + } _, pi.Digest = s.sessionVars.StmtCtx.SQLDigest() s.currentPlan = nil if s.sessionVars.User != nil { From 2522e43bc59866e91e370688890e6affcc5cf593 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Thu, 26 Nov 2020 23:06:42 +0800 Subject: [PATCH 188/229] config, session: keep the default value of mem-quo ... (#21305) (#21327) --- config/config.go | 7 +++ session/bootstrap.go | 30 +++++++++++++ session/bootstrap_test.go | 94 +++++++++++++++++++++++++++++++++++++++ session/session.go | 44 +++++++++++++++++- 4 files changed, 174 insertions(+), 1 deletion(-) diff --git a/config/config.go b/config/config.go index 67ec120dd18af..ded71b33d7b9d 100644 --- a/config/config.go +++ b/config/config.go @@ -738,6 +738,10 @@ func isAllDeprecatedConfigItems(items []string) bool { return true } +// IsMemoryQuotaQuerySetByUser indicates whether the config item mem-quota-query +// is set by the user. +var IsMemoryQuotaQuerySetByUser bool + // InitializeConfig initialize the global config handler. // The function enforceCmdArgs is used to merge the config file with command arguments: // For example, if you start TiDB by the command "./tidb-server --port=3000", the port number should be @@ -793,6 +797,9 @@ func (c *Config) Load(confFile string) error { if c.TokenLimit == 0 { c.TokenLimit = 1000 } + if metaData.IsDefined("mem-quota-query") { + IsMemoryQuotaQuerySetByUser = true + } if len(c.ServerVersion) > 0 { mysql.ServerVersion = c.ServerVersion } diff --git a/session/bootstrap.go b/session/bootstrap.go index 149a8a7355e72..532762585a94e 100644 --- a/session/bootstrap.go +++ b/session/bootstrap.go @@ -334,6 +334,9 @@ const ( tidbSystemTZ = "system_tz" // The variable name in mysql.tidb table and it will indicate if the new collations are enabled in the TiDB cluster. tidbNewCollationEnabled = "new_collation_enabled" + // The variable name in mysql.tidb table and it records the default value of + // mem-quota-query when upgrade from v3.0.x to v4.0.9+. + tidbDefMemoryQuotaQuery = "default_memory_quota_query" // Const for TiDB server version 2. version2 = 2 version3 = 3 @@ -391,6 +394,8 @@ const ( version47 = 47 // version48 change mysql.stats_histograms cm_sketch column from blob to blob(6291456) version48 = 48 + // version49 writes a variable `mem_quota_query` to mysql.tidb if it's a cluster upgraded from v3.0.x to v4.0.9. + version49 = 49 ) var ( @@ -442,6 +447,7 @@ var ( upgradeToVer46, upgradeToVer47, upgradeToVer48, + upgradeToVer49, } ) @@ -1080,6 +1086,30 @@ func upgradeToVer48(s Session, ver int64) { doReentrantDDL(s, "ALTER TABLE mysql.stats_histograms MODIFY cm_sketch BLOB(6291456)") } +func upgradeToVer49(s Session, ver int64) { + if ver >= version49 { + return + } + // The mem-query-quota default value is 32GB by default in v3.0, and 1GB by + // default in v4.0. + // If a cluster is upgraded from v3.0.x (bootstrapVer <= version38) to + // v4.0.9+, we'll write the default value to mysql.tidb. Thus we can get the + // default value of mem-quota-query, and promise the compatibility even if + // the tidb-server restarts. + // If it's a newly deployed cluster, we do not need to write the value into + // mysql.tidb, since no compatibility problem will happen. + if ver <= version38 { + writeMemoryQuotaQuery(s) + } +} + +func writeMemoryQuotaQuery(s Session) { + comment := "memory_quota_query is 32GB by default in v3.0.x, 1GB by default in v4.0.x" + sql := fmt.Sprintf(`INSERT HIGH_PRIORITY INTO %s.%s VALUES ("%s", '%d', '%s') ON DUPLICATE KEY UPDATE VARIABLE_VALUE='%d'`, + mysql.SystemDB, mysql.TiDBTable, tidbDefMemoryQuotaQuery, 32<<30, comment, 32<<30) + mustExecute(s, sql) +} + // updateBootstrapVer updates bootstrap version variable in mysql.TiDB table. func updateBootstrapVer(s Session) { // Update bootstrap version. diff --git a/session/bootstrap_test.go b/session/bootstrap_test.go index f03e66300ffb8..34d7896c1aa4b 100644 --- a/session/bootstrap_test.go +++ b/session/bootstrap_test.go @@ -271,6 +271,100 @@ func (s *testBootstrapSuite) TestUpgrade(c *C) { c.Assert(r.Close(), IsNil) } +func (s *testBootstrapSuite) TestIssue20900_1(c *C) { + ctx := context.Background() + defer testleak.AfterTest(c)() + store, _ := newStoreWithBootstrap(c, s.dbName) + defer store.Close() + + // test issue 20900, upgrade from v3.0 to v4.0.9+ + seV3 := newSession(c, store, s.dbName) + txn, err := store.Begin() + c.Assert(err, IsNil) + m := meta.NewMeta(txn) + err = m.FinishBootstrap(int64(38)) + c.Assert(err, IsNil) + err = txn.Commit(context.Background()) + c.Assert(err, IsNil) + mustExecSQL(c, seV3, "update mysql.tidb set variable_value=38 where variable_name='tidb_server_version'") + mustExecSQL(c, seV3, "delete from mysql.tidb where variable_name='default_memory_quota_query'") + mustExecSQL(c, seV3, "commit") + unsetStoreBootstrapped(store.UUID()) + ver, err := getBootstrapVersion(seV3) + c.Assert(err, IsNil) + c.Assert(ver, Equals, int64(38)) + + domV4, err := BootstrapSession(store) + c.Assert(err, IsNil) + defer domV4.Close() + seV4 := newSession(c, store, s.dbName) + ver, err = getBootstrapVersion(seV4) + c.Assert(err, IsNil) + c.Assert(ver, Equals, int64(currentBootstrapVersion)) + r := mustExecSQL(c, seV4, "select @@tidb_mem_quota_query") + req := r.NewChunk() + r.Next(ctx, req) + c.Assert(req.GetRow(0).GetString(0), Equals, "34359738368") + r = mustExecSQL(c, seV4, "select variable_value from mysql.tidb where variable_name='default_memory_quota_query'") + req = r.NewChunk() + r.Next(ctx, req) + c.Assert(req.GetRow(0).GetString(0), Equals, "34359738368") + c.Assert(seV4.GetSessionVars().MemQuotaQuery, Equals, int64(34359738368)) + + mustExecSQL(c, seV4, `update mysql.tidb set variable_value = '123' where variable_name='default_memory_quota_query'`) + r = mustExecSQL(c, seV4, "select variable_value from mysql.tidb where variable_name='default_memory_quota_query'") + req = r.NewChunk() + r.Next(ctx, req) + c.Assert(req.GetRow(0).GetString(0), Equals, "123") + se2 := newSession(c, store, s.dbName) + r = mustExecSQL(c, se2, "select @@tidb_mem_quota_query") + req = r.NewChunk() + r.Next(ctx, req) + c.Assert(req.GetRow(0).GetString(0), Equals, "34359738368") + c.Assert(se2.GetSessionVars().MemQuotaQuery, Equals, int64(34359738368)) +} + +func (s *testBootstrapSuite) TestIssue20900_2(c *C) { + ctx := context.Background() + defer testleak.AfterTest(c)() + store, _ := newStoreWithBootstrap(c, s.dbName) + defer store.Close() + + // test issue 20900, upgrade from v4.0.8 to v4.0.9+ + seV3 := newSession(c, store, s.dbName) + txn, err := store.Begin() + c.Assert(err, IsNil) + m := meta.NewMeta(txn) + err = m.FinishBootstrap(int64(48)) + c.Assert(err, IsNil) + err = txn.Commit(context.Background()) + c.Assert(err, IsNil) + mustExecSQL(c, seV3, "update mysql.tidb set variable_value=48 where variable_name='tidb_server_version'") + mustExecSQL(c, seV3, "delete from mysql.tidb where variable_name='default_memory_quota_query'") + mustExecSQL(c, seV3, "commit") + unsetStoreBootstrapped(store.UUID()) + ver, err := getBootstrapVersion(seV3) + c.Assert(err, IsNil) + c.Assert(ver, Equals, int64(48)) + + domV4, err := BootstrapSession(store) + c.Assert(err, IsNil) + defer domV4.Close() + seV4 := newSession(c, store, s.dbName) + ver, err = getBootstrapVersion(seV4) + c.Assert(err, IsNil) + c.Assert(ver, Equals, int64(currentBootstrapVersion)) + r := mustExecSQL(c, seV4, "select @@tidb_mem_quota_query") + req := r.NewChunk() + r.Next(ctx, req) + c.Assert(req.GetRow(0).GetString(0), Equals, "1073741824") + c.Assert(seV4.GetSessionVars().MemQuotaQuery, Equals, int64(1073741824)) + r = mustExecSQL(c, seV4, "select variable_value from mysql.tidb where variable_name='default_memory_quota_query'") + req = r.NewChunk() + r.Next(ctx, req) + c.Assert(req.NumRows(), Equals, 0) +} + func (s *testBootstrapSuite) TestANSISQLMode(c *C) { defer testleak.AfterTest(c)() store, dom := newStoreWithBootstrap(c, s.dbName) diff --git a/session/session.go b/session/session.go index 22716b9d47407..db25129236438 100644 --- a/session/session.go +++ b/session/session.go @@ -44,6 +44,7 @@ import ( "github.com/pingcap/tidb/bindinfo" "github.com/pingcap/tidb/config" "github.com/pingcap/tidb/domain" + "github.com/pingcap/tidb/errno" "github.com/pingcap/tidb/executor" "github.com/pingcap/tidb/infoschema" "github.com/pingcap/tidb/kv" @@ -65,6 +66,7 @@ import ( "github.com/pingcap/tidb/util" "github.com/pingcap/tidb/util/chunk" "github.com/pingcap/tidb/util/collate" + "github.com/pingcap/tidb/util/dbterror" "github.com/pingcap/tidb/util/execdetails" "github.com/pingcap/tidb/util/kvcache" "github.com/pingcap/tidb/util/logutil" @@ -1671,6 +1673,30 @@ func loadCollationParameter(se *session) (bool, error) { return false, nil } +// loadDefMemQuotaQuery loads the default value of mem-quota-query. +// We'll read a tuple if the cluster is upgraded from v3.0.x to v4.0.9+. +// An empty result will be returned if it's a newly deployed cluster whose +// version is v4.0.9. +// See the comment upon the function `upgradeToVer49` for details. +func loadDefMemQuotaQuery(se *session) (int64, error) { + defMemQuotaQuery, err := loadParameter(se, tidbDefMemoryQuotaQuery) + if err != nil { + if err == errResultIsEmpty { + return 1 << 30, nil + } + return 1 << 30, err + } + if quota, err := strconv.Atoi(defMemQuotaQuery); err != nil || quota != 32<<30 { + logutil.BgLogger().Warn("Unexpected value of 'default_memory_quota_query' in 'mysql.tidb', use '34359738368' instead", + zap.String("value", defMemQuotaQuery)) + } + return 32 << 30, nil +} + +var ( + errResultIsEmpty = dbterror.ClassExecutor.NewStd(errno.ErrResultIsEmpty) +) + // loadParameter loads read-only parameter from mysql.tidb func loadParameter(se *session, name string) (string, error) { sql := "select variable_value from mysql.tidb where variable_name = '" + name + "'" @@ -1688,6 +1714,9 @@ func loadParameter(se *session, name string) (string, error) { if err := rss[0].Next(context.Background(), req); err != nil { return "", err } + if req.NumRows() == 0 { + return "", errResultIsEmpty + } return req.GetRow(0).GetString(0), nil } @@ -1736,6 +1765,19 @@ func BootstrapSession(store kv.Storage) (*domain.Domain, error) { collate.EnableNewCollations() } + if !config.IsMemoryQuotaQuerySetByUser { + newMemoryQuotaQuery, err := loadDefMemQuotaQuery(se) + if err != nil { + return nil, err + } + if newMemoryQuotaQuery != cfg.MemQuotaQuery { + newCfg := *(config.GetGlobalConfig()) + newCfg.MemQuotaQuery = newMemoryQuotaQuery + config.StoreGlobalConfig(&newCfg) + variable.SysVars[variable.TIDBMemQuotaQuery].Value = strconv.FormatInt(newCfg.MemQuotaQuery, 10) + } + } + dom := domain.GetDomain(se) dom.InitExpensiveQueryHandle() @@ -1888,7 +1930,7 @@ func CreateSessionWithDomain(store kv.Storage, dom *domain.Domain) (*session, er const ( notBootstrapped = 0 - currentBootstrapVersion = version48 + currentBootstrapVersion = version49 ) func getStoreBootstrapVersion(store kv.Storage) int64 { From 86582a3191b7279ef983bd5b94dc871b320cdd0a Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Fri, 27 Nov 2020 09:51:52 +0800 Subject: [PATCH 189/229] executor: fix bug when parsing the slow logs if the logNum is small (#20959) (#21211) Signed-off-by: ti-srebot Signed-off-by: crazycs520 --- executor/slow_query.go | 2 +- executor/slow_query_test.go | 44 +++++++++++++++++++++++++------------ 2 files changed, 31 insertions(+), 15 deletions(-) diff --git a/executor/slow_query.go b/executor/slow_query.go index 066120c12f80a..d31a1e2ff9d32 100755 --- a/executor/slow_query.go +++ b/executor/slow_query.go @@ -267,7 +267,7 @@ func (e *slowQueryRetriever) getBatchLog(reader *bufio.Reader, offset *offset, n line = string(hack.String(lineByte)) log = append(log, line) if strings.HasSuffix(line, variable.SlowLogSQLSuffixStr) { - if strings.HasPrefix(line, "use") { + if strings.HasPrefix(line, "use") || strings.HasPrefix(line, variable.SlowLogRowPrefixStr) { continue } break diff --git a/executor/slow_query_test.go b/executor/slow_query_test.go index 061e01309d06e..a4fec998f47cc 100644 --- a/executor/slow_query_test.go +++ b/executor/slow_query_test.go @@ -33,10 +33,10 @@ import ( "github.com/pingcap/tidb/util/mock" ) -func parseLog(retriever *slowQueryRetriever, sctx sessionctx.Context, reader *bufio.Reader) ([][]types.Datum, error) { +func parseLog(retriever *slowQueryRetriever, sctx sessionctx.Context, reader *bufio.Reader, logNum int) ([][]types.Datum, error) { retriever.parsedSlowLogCh = make(chan parsedSlowLog, 100) ctx := context.Background() - retriever.parseSlowLog(ctx, sctx, reader, 64) + retriever.parseSlowLog(ctx, sctx, reader, logNum) slowLog := <-retriever.parsedSlowLogCh rows, err := slowLog.rows, slowLog.err if err == io.EOF { @@ -45,11 +45,11 @@ func parseLog(retriever *slowQueryRetriever, sctx sessionctx.Context, reader *bu return rows, err } -func parseSlowLog(sctx sessionctx.Context, reader *bufio.Reader) ([][]types.Datum, error) { +func parseSlowLog(sctx sessionctx.Context, reader *bufio.Reader, logNum int) ([][]types.Datum, error) { retriever := &slowQueryRetriever{} // Ignore the error is ok for test. terror.Log(retriever.initialize(sctx)) - rows, err := parseLog(retriever, sctx, reader) + rows, err := parseLog(retriever, sctx, reader, logNum) return rows, err } @@ -82,7 +82,7 @@ select * from t;` c.Assert(err, IsNil) sctx := mock.NewContext() sctx.GetSessionVars().TimeZone = loc - _, err = parseSlowLog(sctx, reader) + _, err = parseSlowLog(sctx, reader, 64) c.Assert(err, NotNil) c.Assert(err.Error(), Equals, "panic test") } @@ -116,7 +116,7 @@ select * from t;` c.Assert(err, IsNil) ctx := mock.NewContext() ctx.GetSessionVars().TimeZone = loc - rows, err := parseSlowLog(ctx, reader) + rows, err := parseSlowLog(ctx, reader, 64) c.Assert(err, IsNil) c.Assert(len(rows), Equals, 1) recordString := "" @@ -137,6 +137,22 @@ select * from t;` `update t set i = 1;,select * from t;` c.Assert(recordString, Equals, expectRecordString) + // Issue 20928 + reader = bufio.NewReader(bytes.NewBufferString(slowLogStr)) + rows, err = parseSlowLog(ctx, reader, 1) + c.Assert(err, IsNil) + c.Assert(len(rows), Equals, 1) + recordString = "" + for i, value := range rows[0] { + str, err := value.ToString() + c.Assert(err, IsNil) + if i > 0 { + recordString += "," + } + recordString += str + } + c.Assert(expectRecordString, Equals, recordString) + // fix sql contain '# ' bug slowLog := bytes.NewBufferString( `# Time: 2019-04-28T15:24:04.309074+08:00 @@ -152,7 +168,7 @@ select a# from t; select * from t; `) reader = bufio.NewReader(slowLog) - _, err = parseSlowLog(ctx, reader) + _, err = parseSlowLog(ctx, reader, 64) c.Assert(err, IsNil) // test for time format compatibility. @@ -163,7 +179,7 @@ select * from t; select * from t; `) reader = bufio.NewReader(slowLog) - rows, err = parseSlowLog(ctx, reader) + rows, err = parseSlowLog(ctx, reader, 64) c.Assert(err, IsNil) c.Assert(len(rows) == 2, IsTrue) t0Str, err := rows[0][0].ToString() @@ -180,7 +196,7 @@ select * from t; select * from t; `) reader = bufio.NewReader(slowLog) - _, err = parseSlowLog(ctx, reader) + _, err = parseSlowLog(ctx, reader, 64) c.Assert(err, IsNil) warnings := ctx.GetSessionVars().StmtCtx.GetWarnings() c.Assert(warnings, HasLen, 1) @@ -204,13 +220,13 @@ select * from t; sql := strings.Repeat("x", int(variable.MaxOfMaxAllowedPacket+1)) slowLog.WriteString(sql) reader := bufio.NewReader(slowLog) - _, err = parseSlowLog(ctx, reader) + _, err = parseSlowLog(ctx, reader, 64) c.Assert(err, NotNil) c.Assert(err.Error(), Equals, "single line length exceeds limit: 65536") variable.MaxOfMaxAllowedPacket = originValue reader = bufio.NewReader(slowLog) - _, err = parseSlowLog(ctx, reader) + _, err = parseSlowLog(ctx, reader, 64) c.Assert(err, IsNil) } @@ -261,7 +277,7 @@ select * from t;`) c.Assert(err, IsNil) ctx := mock.NewContext() ctx.GetSessionVars().TimeZone = loc - _, err = parseSlowLog(ctx, scanner) + _, err = parseSlowLog(ctx, scanner, 64) c.Assert(err, IsNil) // Test parser error. @@ -271,7 +287,7 @@ select * from t;`) `) scanner = bufio.NewReader(slowLog) - _, err = parseSlowLog(ctx, scanner) + _, err = parseSlowLog(ctx, scanner, 64) c.Assert(err, IsNil) warnings := ctx.GetSessionVars().StmtCtx.GetWarnings() c.Assert(warnings, HasLen, 1) @@ -430,7 +446,7 @@ select 7;` c.Assert(retriever.files, HasLen, len(cas.files), comment) if len(retriever.files) > 0 { reader := bufio.NewReader(retriever.files[0].file) - rows, err := parseLog(retriever, sctx, reader) + rows, err := parseLog(retriever, sctx, reader, 64) c.Assert(err, IsNil) c.Assert(len(rows), Equals, len(cas.querys), comment) for i, row := range rows { From 0bcb1b549c46da756852867b815ef038d5f78d82 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Fri, 27 Nov 2020 15:21:07 +0800 Subject: [PATCH 190/229] errno: show column name in redacted duplicate entry error (#21261) (#21303) Signed-off-by: ti-srebot --- errno/errname.go | 2 +- executor/executor_test.go | 2 +- util/dbterror/terror_test.go | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/errno/errname.go b/errno/errname.go index cd74abd8cd227..c3cfcae269aac 100644 --- a/errno/errname.go +++ b/errno/errname.go @@ -82,7 +82,7 @@ var MySQLErrName = map[uint16]*mysql.ErrMessage{ ErrTooLongIdent: mysql.Message("Identifier name '%-.100s' is too long", nil), ErrDupFieldName: mysql.Message("Duplicate column name '%-.192s'", nil), ErrDupKeyName: mysql.Message("Duplicate key name '%-.192s'", nil), - ErrDupEntry: mysql.Message("Duplicate entry '%-.64s' for key '%-.192s'", []int{0, 1}), + ErrDupEntry: mysql.Message("Duplicate entry '%-.64s' for key '%-.192s'", []int{0}), ErrWrongFieldSpec: mysql.Message("Incorrect column specifier for column '%-.192s'", nil), ErrParse: mysql.Message("%s %s", nil), ErrEmptyQuery: mysql.Message("Query was empty", nil), diff --git a/executor/executor_test.go b/executor/executor_test.go index 8d0a51ff791dc..4d1258924bd3a 100644 --- a/executor/executor_test.go +++ b/executor/executor_test.go @@ -6156,7 +6156,7 @@ func (s *testSerialSuite1) TestPrevStmtDesensitization(c *C) { tk.MustExec("begin") tk.MustExec("insert into t values (1),(2)") c.Assert(tk.Se.GetSessionVars().PrevStmt.String(), Equals, "insert into t values ( ? ) , ( ? )") - c.Assert(tk.ExecToErr("insert into t values (1)").Error(), Equals, `[kv:1062]Duplicate entry '?' for key '?'`) + c.Assert(tk.ExecToErr("insert into t values (1)").Error(), Equals, `[kv:1062]Duplicate entry '?' for key 'a'`) } func (s *testSuite) TestIssue19372(c *C) { diff --git a/util/dbterror/terror_test.go b/util/dbterror/terror_test.go index ba66e26727d0a..d00ce61e17ec6 100644 --- a/util/dbterror/terror_test.go +++ b/util/dbterror/terror_test.go @@ -36,8 +36,8 @@ func (s *testkSuite) TestErrorRedact(c *C) { defer func() { errors.RedactLogEnabled.Store(original) }() class := ErrClass{} - err := class.NewStd(errno.ErrDupEntry).GenWithStackByArgs("sensitive", "data") + err := class.NewStd(errno.ErrDupEntry).GenWithStackByArgs("sensitive_data", "no_sensitive") c.Assert(strings.Contains(err.Error(), "?"), IsTrue) - c.Assert(strings.Contains(err.Error(), "sensitive"), IsFalse) - c.Assert(strings.Contains(err.Error(), "data"), IsFalse) + c.Assert(strings.Contains(err.Error(), "no_sensitive"), IsTrue) + c.Assert(strings.Contains(err.Error(), "sensitive_data"), IsFalse) } From 5ba8f67b3bb04aa0753bf84726921a1cce33fd73 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Mon, 30 Nov 2020 15:33:00 +0800 Subject: [PATCH 191/229] planner: generate proper hint for IndexHashJoin / IndexMergeJoin (#21020) --- planner/core/hints.go | 5 +++++ planner/core/physical_plan_test.go | 17 +++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/planner/core/hints.go b/planner/core/hints.go index 86019b204c334..dc7dc370f8dc3 100644 --- a/planner/core/hints.go +++ b/planner/core/hints.go @@ -45,6 +45,11 @@ func getTableName(tblName model.CIStr, asName *model.CIStr) model.CIStr { } func extractTableAsName(p PhysicalPlan) (*model.CIStr, *model.CIStr) { + _, isProj := p.(*PhysicalProjection) + _, isUnionScan := p.(*PhysicalUnionScan) + if isProj || isUnionScan { + return extractTableAsName(p.Children()[0]) + } if len(p.Children()) > 1 { return nil, nil } diff --git a/planner/core/physical_plan_test.go b/planner/core/physical_plan_test.go index 744da3bf62d62..4f3fa07e0cc27 100644 --- a/planner/core/physical_plan_test.go +++ b/planner/core/physical_plan_test.go @@ -784,6 +784,23 @@ func (s *testPlanSuite) TestAggregationHints(c *C) { } } +func (s *testPlanSuite) TestExplainJoinHints(c *C) { + defer testleak.AfterTest(c)() + store, dom, err := newStoreWithBootstrap() + c.Assert(err, IsNil) + defer func() { + dom.Close() + store.Close() + }() + tk := testkit.NewTestKit(c, store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t") + tk.MustExec("create table t(a int, b int, c int, key(b), key(c))") + tk.MustQuery("explain format='hint' select /*+ inl_hash_join(t2) */ * from t t1 inner join t t2 on t1.b = t2.b and t1.c = 1").Check(testkit.Rows( + "use_index(@`sel_1` `test`.`t1` `c`), use_index(@`sel_1` `test`.`t2` `b`), inl_hash_join(@`sel_1` `test`.`t2`), inl_hash_join(`t2`)", + )) +} + func (s *testPlanSuite) TestAggToCopHint(c *C) { defer testleak.AfterTest(c)() store, dom, err := newStoreWithBootstrap() From eab4476de54ecb7d4450d3ffa1861612741ea5f2 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Mon, 30 Nov 2020 16:52:39 +0800 Subject: [PATCH 192/229] planner: fix index merge doesn't take effect when using prefix key (#20425) (#21003) --- planner/core/integration_test.go | 65 ++++++++++++++++++++++++++++++-- planner/core/stats.go | 34 ++++++++++------- 2 files changed, 81 insertions(+), 18 deletions(-) diff --git a/planner/core/integration_test.go b/planner/core/integration_test.go index 252130949a8d4..5be43dcaa8779 100644 --- a/planner/core/integration_test.go +++ b/planner/core/integration_test.go @@ -1144,14 +1144,71 @@ func (s *testIntegrationSerialSuite) TestIssue16837(c *C) { tk.MustExec("drop table if exists t") tk.MustExec("create table t(a int,b int,c int,d int,e int,unique key idx_ab(a,b),unique key(c),unique key(d))") tk.MustQuery("explain select /*+ use_index_merge(t,c,idx_ab) */ * from t where a = 1 or (e = 1 and c = 1)").Check(testkit.Rows( - "TableReader_7 8000.00 root data:Selection_6", - "└─Selection_6 8000.00 cop[tikv] or(eq(test.t.a, 1), and(eq(test.t.e, 1), eq(test.t.c, 1)))", - " └─TableFullScan_5 10000.00 cop[tikv] table:t keep order:false, stats:pseudo")) - tk.MustQuery("show warnings").Check(testkit.Rows("Warning 1105 IndexMerge is inapplicable or disabled")) + "IndexMerge_9 0.01 root ", + "├─IndexRangeScan_5(Build) 10.00 cop[tikv] table:t, index:idx_ab(a, b) range:[1,1], keep order:false, stats:pseudo", + "├─IndexRangeScan_6(Build) 1.00 cop[tikv] table:t, index:c(c) range:[1,1], keep order:false, stats:pseudo", + "└─Selection_8(Probe) 0.01 cop[tikv] eq(test.t.e, 1)", + " └─TableRowIDScan_7 11.00 cop[tikv] table:t keep order:false, stats:pseudo")) + tk.MustQuery("show warnings").Check(testkit.Rows()) tk.MustExec("insert into t values (2, 1, 1, 1, 2)") tk.MustQuery("select /*+ use_index_merge(t,c,idx_ab) */ * from t where a = 1 or (e = 1 and c = 1)").Check(testkit.Rows()) } +func (s *testIntegrationSerialSuite) TestIndexMerge(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t") + tk.MustExec("create table t (a int, b int, unique key(a), unique key(b))") + tk.MustQuery("desc select /*+ use_index_merge(t) */ * from t where a =1 or (b=1 and b+2>1)").Check(testkit.Rows( + "IndexMerge_9 1.80 root ", + "├─IndexRangeScan_5(Build) 1.00 cop[tikv] table:t, index:a(a) range:[1,1], keep order:false, stats:pseudo", + "├─Selection_7(Build) 0.80 cop[tikv] gt(plus(test.t.b, 2), 1)", + "│ └─IndexRangeScan_6 1.00 cop[tikv] table:t, index:b(b) range:[1,1], keep order:false, stats:pseudo", + "└─TableRowIDScan_8(Probe) 1.80 cop[tikv] table:t keep order:false, stats:pseudo")) + tk.MustQuery("show warnings").Check(testkit.Rows()) + + tk.MustQuery("desc select /*+ use_index_merge(t) */ * from t where a =1 or (b=1 and length(b)=1)").Check(testkit.Rows( + "IndexMerge_9 1.80 root ", + "├─IndexRangeScan_5(Build) 1.00 cop[tikv] table:t, index:a(a) range:[1,1], keep order:false, stats:pseudo", + "├─Selection_7(Build) 0.80 cop[tikv] eq(length(cast(test.t.b)), 1)", + "│ └─IndexRangeScan_6 1.00 cop[tikv] table:t, index:b(b) range:[1,1], keep order:false, stats:pseudo", + "└─TableRowIDScan_8(Probe) 1.80 cop[tikv] table:t keep order:false, stats:pseudo")) + tk.MustQuery("show warnings").Check(testkit.Rows()) + + tk.MustQuery("desc select /*+ use_index_merge(t) */ * from t where (a=1 and length(a)=1) or (b=1 and length(b)=1)").Check(testkit.Rows( + "IndexMerge_10 1.60 root ", + "├─Selection_6(Build) 0.80 cop[tikv] eq(length(cast(test.t.a)), 1)", + "│ └─IndexRangeScan_5 1.00 cop[tikv] table:t, index:a(a) range:[1,1], keep order:false, stats:pseudo", + "├─Selection_8(Build) 0.80 cop[tikv] eq(length(cast(test.t.b)), 1)", + "│ └─IndexRangeScan_7 1.00 cop[tikv] table:t, index:b(b) range:[1,1], keep order:false, stats:pseudo", + "└─TableRowIDScan_9(Probe) 1.60 cop[tikv] table:t keep order:false, stats:pseudo")) + tk.MustQuery("show warnings").Check(testkit.Rows()) + + tk.MustQuery("desc select /*+ use_index_merge(t) */ * from t where (a=1 and length(b)=1) or (b=1 and length(a)=1)").Check(testkit.Rows( + "IndexMerge_9 1.60 root ", + "├─IndexRangeScan_5(Build) 1.00 cop[tikv] table:t, index:a(a) range:[1,1], keep order:false, stats:pseudo", + "├─IndexRangeScan_6(Build) 1.00 cop[tikv] table:t, index:b(b) range:[1,1], keep order:false, stats:pseudo", + "└─Selection_8(Probe) 1.60 cop[tikv] eq(length(cast(test.t.a)), 1), eq(length(cast(test.t.b)), 1)", + " └─TableRowIDScan_7 2.00 cop[tikv] table:t keep order:false, stats:pseudo")) + tk.MustQuery("show warnings").Check(testkit.Rows()) +} + +func (s *testIntegrationSerialSuite) TestIssue16407(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t") + tk.MustExec("create table t(a int,b char(100),key(a),key(b(10)))") + tk.MustQuery("explain select /*+ use_index_merge(t) */ * from t where a=10 or b='x'").Check(testkit.Rows( + "IndexMerge_9 0.02 root ", + "├─IndexRangeScan_5(Build) 10.00 cop[tikv] table:t, index:a(a) range:[10,10], keep order:false, stats:pseudo", + "├─IndexRangeScan_6(Build) 10.00 cop[tikv] table:t, index:b(b) range:[\"x\",\"x\"], keep order:false, stats:pseudo", + "└─Selection_8(Probe) 0.02 cop[tikv] eq(test.t.b, \"x\")", + " └─TableRowIDScan_7 20.00 cop[tikv] table:t keep order:false, stats:pseudo")) + tk.MustQuery("show warnings").Check(testkit.Rows()) + tk.MustExec("insert into t values (1, 'xx')") + tk.MustQuery("select /*+ use_index_merge(t) */ * from t where a=10 or b='x'").Check(testkit.Rows()) +} + func (s *testIntegrationSuite) TestStreamAggProp(c *C) { tk := testkit.NewTestKit(c, s.store) diff --git a/planner/core/stats.go b/planner/core/stats.go index b5c5d87539f7c..919f7c768b4af 100644 --- a/planner/core/stats.go +++ b/planner/core/stats.go @@ -338,9 +338,18 @@ func (ds *DataSource) generateIndexMergeOrPaths() { } if len(partialPaths) > 1 { possiblePath := ds.buildIndexMergeOrPath(partialPaths, i) - if possiblePath != nil { - ds.possibleAccessPaths = append(ds.possibleAccessPaths, possiblePath) + accessConds := make([]expression.Expression, 0, len(partialPaths)) + for _, p := range partialPaths { + accessConds = append(accessConds, p.AccessConds...) } + accessDNF := expression.ComposeDNFCondition(ds.ctx, accessConds...) + sel, _, err := ds.tableStats.HistColl.Selectivity(ds.ctx, []expression.Expression{accessDNF}, nil) + if err != nil { + logutil.BgLogger().Debug("something wrong happened, use the default selectivity", zap.Error(err)) + sel = SelectionFactor + } + possiblePath.CountAfterAccess = sel * ds.tableStats.RowCount + ds.possibleAccessPaths = append(ds.possibleAccessPaths, possiblePath) } } } @@ -378,12 +387,8 @@ func (ds *DataSource) accessPathsForConds(conditions []expression.Expression, us logutil.BgLogger().Debug("can not derive statistics of a path", zap.Error(err)) continue } - if len(path.TableFilters) > 0 || len(path.AccessConds) == 0 { - // If AccessConds is empty or tableFilter is not empty, we ignore the access path. - // Now these conditions are too strict. - // For example, a sql `select * from t where a > 1 or (b < 2 and c > 3)` and table `t` with indexes - // on a and b separately. we can generate a `IndexMergePath` with table filter `a > 1 or (b < 2 and c > 3)`. - // TODO: solve the above case + if len(path.AccessConds) == 0 { + // If AccessConds is empty, we ignore the access path. continue } // If we have point or empty range, just remove other possible paths. @@ -407,12 +412,8 @@ func (ds *DataSource) accessPathsForConds(conditions []expression.Expression, us continue } noIntervalRanges := ds.deriveIndexPathStats(path, conditions, true) - if len(path.TableFilters) > 0 || len(path.AccessConds) == 0 { - // If AccessConds is empty or tableFilter is not empty, we ignore the access path. - // Now these conditions are too strict. - // For example, a sql `select * from t where a > 1 or (b < 2 and c > 3)` and table `t` with indexes - // on a and b separately. we can generate a `IndexMergePath` with table filter `a > 1 or (b < 2 and c > 3)`. - // TODO: solve the above case + if len(path.AccessConds) == 0 { + // If AccessConds is empty, we ignore the access path. continue } // If we have empty range, or point range on unique index, just remove other possible paths. @@ -459,6 +460,11 @@ func (ds *DataSource) buildIndexMergeOrPath(partialPaths []*util.AccessPath, cur indexMergePath := &util.AccessPath{PartialIndexPaths: partialPaths} indexMergePath.TableFilters = append(indexMergePath.TableFilters, ds.pushedDownConds[:current]...) indexMergePath.TableFilters = append(indexMergePath.TableFilters, ds.pushedDownConds[current+1:]...) + for _, path := range partialPaths { + if len(path.TableFilters) > 0 { + indexMergePath.TableFilters = append(indexMergePath.TableFilters, path.TableFilters...) + } + } return indexMergePath } From b1363f9a8084b8421fad6f810fc3ab24e59a2a50 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Mon, 30 Nov 2020 17:06:50 +0800 Subject: [PATCH 193/229] planner: reimplement DEFAULT function to make the behavior consistent with MySQL when looking up the corresponding column (#19709) (#21316) --- expression/simple_rewriter.go | 2 +- go.mod | 2 +- go.sum | 4 +-- planner/core/expression_rewriter.go | 32 ++++++++++++++++-------- planner/core/expression_rewriter_test.go | 17 ++++++++++++- planner/core/logical_plan_builder.go | 9 +++++++ planner/core/planbuilder.go | 4 +++ 7 files changed, 55 insertions(+), 15 deletions(-) diff --git a/expression/simple_rewriter.go b/expression/simple_rewriter.go index dd2be59e7e4e9..e28df4eacf143 100644 --- a/expression/simple_rewriter.go +++ b/expression/simple_rewriter.go @@ -175,7 +175,7 @@ func FindFieldName(names types.NameSlice, astCol *ast.ColumnName) (int, error) { if idx == -1 { idx = i } else { - return -1, errNonUniq.GenWithStackByArgs(name.String(), "field list") + return -1, errNonUniq.GenWithStackByArgs(astCol.String(), "field list") } } } diff --git a/go.mod b/go.mod index 7d951388728a3..ade0964d69338 100644 --- a/go.mod +++ b/go.mod @@ -34,7 +34,7 @@ require ( github.com/pingcap/goleveldb v0.0.0-20191226122134-f82aafb29989 github.com/pingcap/kvproto v0.0.0-20200907074027-32a3a0accf7d github.com/pingcap/log v0.0.0-20201112100606-8f1e84a3abc8 - github.com/pingcap/parser v0.0.0-20201123083041-dfb0acc7c2fa + github.com/pingcap/parser v0.0.0-20201130080042-c3ddfec58248 github.com/pingcap/sysutil v0.0.0-20200715082929-4c47bcac246a github.com/pingcap/tidb-tools v4.0.6-0.20200828085514-03575b185007+incompatible github.com/pingcap/tipb v0.0.0-20200618092958-4fad48b4c8c3 diff --git a/go.sum b/go.sum index 9d91c455edef9..4ffeedf7b247e 100644 --- a/go.sum +++ b/go.sum @@ -445,8 +445,8 @@ github.com/pingcap/parser v0.0.0-20200623164729-3a18f1e5dceb/go.mod h1:vQdbJqobJ github.com/pingcap/parser v0.0.0-20200803072748-fdf66528323d/go.mod h1:vQdbJqobJAgFyiRNNtXahpMoGWwPEuWciVEK5A20NS0= github.com/pingcap/parser v0.0.0-20200901062802-475ea5e2e0a7/go.mod h1:vQdbJqobJAgFyiRNNtXahpMoGWwPEuWciVEK5A20NS0= github.com/pingcap/parser v0.0.0-20200921063432-e220cfcfd026/go.mod h1:dMMvhqeowLnAsDWspyalgxXoRUnP09cZ7wAnpt2e/S8= -github.com/pingcap/parser v0.0.0-20201123083041-dfb0acc7c2fa h1:HFoeh5c1SCVo492d4mOuud3cxmtTUcenx65ttNzs6O4= -github.com/pingcap/parser v0.0.0-20201123083041-dfb0acc7c2fa/go.mod h1:GbEr2PgY72/4XqPZzmzstlOU/+il/wrjeTNFs6ihsSE= +github.com/pingcap/parser v0.0.0-20201130080042-c3ddfec58248 h1:EdMvJd+frXT7xQPCB+CHkQS6F+Wb0ivBx4iw2vKrD0Y= +github.com/pingcap/parser v0.0.0-20201130080042-c3ddfec58248/go.mod h1:GbEr2PgY72/4XqPZzmzstlOU/+il/wrjeTNFs6ihsSE= github.com/pingcap/pd/v4 v4.0.0-rc.1.0.20200422143320-428acd53eba2/go.mod h1:s+utZtXDznOiL24VK0qGmtoHjjXNsscJx3m1n8cC56s= github.com/pingcap/pd/v4 v4.0.0-rc.2.0.20200520083007-2c251bd8f181/go.mod h1:q4HTx/bA8aKBa4S7L+SQKHvjRPXCRV0tA0yRw0qkZSA= github.com/pingcap/pd/v4 v4.0.5-0.20200817114353-e465cafe8a91/go.mod h1:m9OEkKoPMQWjrbJ9pqjjeCqzqxraZrPEuWa1OI6Wcek= diff --git a/planner/core/expression_rewriter.go b/planner/core/expression_rewriter.go index 18d7de57e80d2..5ae9a20ebd4aa 100644 --- a/planner/core/expression_rewriter.go +++ b/planner/core/expression_rewriter.go @@ -1712,25 +1712,38 @@ func findFieldNameFromNaturalUsingJoin(p LogicalPlan, v *ast.ColumnName) (col *e } func (er *expressionRewriter) evalDefaultExpr(v *ast.DefaultExpr) { - stkLen := len(er.ctxStack) - name := er.ctxNameStk[stkLen-1] - switch er.ctxStack[stkLen-1].(type) { - case *expression.Column: - case *expression.CorrelatedColumn: - default: - idx, err := expression.FindFieldName(er.names, v.Name) + var name *types.FieldName + // Here we will find the corresponding column for default function. At the same time, we need to consider the issue + // of subquery and name space. + // For example, we have two tables t1(a int default 1, b int) and t2(a int default -1, c int). Consider the following SQL: + // select a from t1 where a > (select default(a) from t2) + // Refer to the behavior of MySQL, we need to find column a in table t2. If table t2 does not have column a, then find it + // in table t1. If there are none, return an error message. + // Based on the above description, we need to look in er.b.allNames from back to front. + for i := len(er.b.allNames) - 1; i >= 0; i-- { + idx, err := expression.FindFieldName(er.b.allNames[i], v.Name) if err != nil { er.err = err return } - if er.err != nil { + if idx >= 0 { + name = er.b.allNames[i][idx] + break + } + } + if name == nil { + idx, err := expression.FindFieldName(er.names, v.Name) + if err != nil { + er.err = err return } if idx < 0 { - er.err = ErrUnknownColumn.GenWithStackByArgs(v.Name.OrigColName(), "field_list") + er.err = ErrUnknownColumn.GenWithStackByArgs(v.Name.OrigColName(), "field list") return } + name = er.names[idx] } + dbName := name.DBName if dbName.O == "" { // if database name is not specified, use current database name @@ -1778,7 +1791,6 @@ func (er *expressionRewriter) evalDefaultExpr(v *ast.DefaultExpr) { if er.err != nil { return } - er.ctxStackPop(1) er.ctxStackAppend(val, types.EmptyName) } diff --git a/planner/core/expression_rewriter_test.go b/planner/core/expression_rewriter_test.go index bab6438e1a60d..2f2801697fe0f 100644 --- a/planner/core/expression_rewriter_test.go +++ b/planner/core/expression_rewriter_test.go @@ -99,7 +99,7 @@ func (s *testExpressionRewriterSuite) TestDefaultFunction(c *C) { tk.MustExec("create table t2(a varchar(10), b varchar(10))") tk.MustExec("insert into t2 values ('1', '1')") err = tk.ExecToErr("select default(a) from t1, t2") - c.Assert(err.Error(), Equals, "[planner:1052]Column 'a' in field list is ambiguous") + c.Assert(err.Error(), Equals, "[expression:1052]Column 'a' in field list is ambiguous") tk.MustQuery("select default(t1.a) from t1, t2").Check(testkit.Rows("def")) tk.MustExec(`create table t3( @@ -130,6 +130,21 @@ func (s *testExpressionRewriterSuite) TestDefaultFunction(c *C) { tk.MustExec("update t1 set c = c + default(c)") tk.MustQuery("select c from t1").Check(testkit.Rows("11")) + + tk.MustExec("create table t6(a int default -1, b int)") + tk.MustExec(`insert into t6 values (0, 0), (1, 1), (2, 2)`) + tk.MustExec("create table t7(a int default 1, b int)") + tk.MustExec(`insert into t7 values (0, 0), (1, 1), (2, 2)`) + + tk.MustQuery(`select a from t6 where a > (select default(a) from t7 where t6.a = t7.a)`).Check(testkit.Rows("2")) + tk.MustQuery(`select a, default(a) from t6 where a > (select default(a) from t7 where t6.a = t7.a)`).Check(testkit.Rows("2 -1")) + + tk.MustExec("create table t8(a int default 1, b int default -1)") + tk.MustExec(`insert into t8 values (0, 0), (1, 1)`) + + tk.MustQuery(`select a, a from t8 order by default(a)`).Check(testkit.Rows("0 0", "1 1")) + tk.MustQuery(`select a from t8 order by default(b)`).Check(testkit.Rows("0", "1")) + tk.MustQuery(`select a from t8 order by default(b) * a`).Check(testkit.Rows("1", "0")) } func (s *testExpressionRewriterSuite) TestCompareSubquery(c *C) { diff --git a/planner/core/logical_plan_builder.go b/planner/core/logical_plan_builder.go index 047f8c541ccdf..5d397e6fd8abb 100644 --- a/planner/core/logical_plan_builder.go +++ b/planner/core/logical_plan_builder.go @@ -2704,6 +2704,15 @@ func (b *PlanBuilder) buildSelect(ctx context.Context, sel *ast.SelectStmt) (p L return nil, err } + // b.allNames will be used in evalDefaultExpr(). Default function is special because it needs to find the + // corresponding column name, but does not need the value in the column. + // For example, select a from t order by default(b), the column b will not be in select fields. Also because + // buildSort is after buildProjection, so we need get OutputNames before BuildProjection and store in allNames. + // Otherwise, we will get select fields instead of all OutputNames, so that we can't find the column b in the + // above example. + b.allNames = append(b.allNames, p.OutputNames()) + defer func() { b.allNames = b.allNames[:len(b.allNames)-1] }() + if sel.Where != nil { p, err = b.buildSelection(ctx, p, sel.Where, nil) if err != nil { diff --git a/planner/core/planbuilder.go b/planner/core/planbuilder.go index 52fb454d732e1..c412d2b36a09e 100644 --- a/planner/core/planbuilder.go +++ b/planner/core/planbuilder.go @@ -448,6 +448,10 @@ type PlanBuilder struct { buildingViewStack set.StringSet // renamingViewName is the name of the view which is being renamed. renamingViewName string + + // evalDefaultExpr needs this information to find the corresponding column. + // It stores the OutputNames before buildProjection. + allNames [][]*types.FieldName } type handleColHelper struct { From 179db7037fa7528470f4dc1f3e072c227dde6352 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Mon, 30 Nov 2020 17:50:28 +0800 Subject: [PATCH 194/229] *: support to modify config server-memory-quota-ratio dynamically (#20927) (#21313) --- session/session.go | 1 + session/session_test.go | 17 ++++++++++++ sessionctx/variable/session.go | 9 +++++++ sessionctx/variable/sysvar.go | 1 + sessionctx/variable/tidb_vars.go | 5 ++++ sessionctx/variable/varsutil.go | 2 ++ tidb-server/main.go | 1 + util/expensivequery/expensivequery.go | 4 ++- util/expensivequery/memory_usage_alarm.go | 32 ++++++++++++++--------- 9 files changed, 58 insertions(+), 14 deletions(-) diff --git a/session/session.go b/session/session.go index db25129236438..8fd4006063d52 100644 --- a/session/session.go +++ b/session/session.go @@ -2071,6 +2071,7 @@ var builtinGlobalVariable = []string{ variable.TiDBEnableTelemetry, variable.TiDBEnableAmendPessimisticTxn, variable.TiDBEnableRateLimitAction, + variable.TiDBMemoryUsageAlarmRatio, } var ( diff --git a/session/session_test.go b/session/session_test.go index 7bd6423f69702..18fcda3a9121d 100644 --- a/session/session_test.go +++ b/session/session_test.go @@ -3295,6 +3295,23 @@ func (s *testBackupRestoreSuite) TestBackupAndRestore(c *C) { } } +func (s *testSessionSuite2) TestMemoryUsageAlarmVariable(c *C) { + tk := testkit.NewTestKitWithInit(c, s.store) + + tk.MustExec("set @@session.tidb_memory_usage_alarm_ratio=1") + tk.MustQuery("select @@session.tidb_memory_usage_alarm_ratio").Check(testkit.Rows("1")) + tk.MustExec("set @@session.tidb_memory_usage_alarm_ratio=0") + tk.MustQuery("select @@session.tidb_memory_usage_alarm_ratio").Check(testkit.Rows("0")) + tk.MustExec("set @@session.tidb_memory_usage_alarm_ratio=0.7") + tk.MustQuery("select @@session.tidb_memory_usage_alarm_ratio").Check(testkit.Rows("0.7")) + err := tk.ExecToErr("set @@session.tidb_memory_usage_alarm_ratio=1.1") + c.Assert(err.Error(), Equals, "[variable:1231]Variable 'tidb_memory_usage_alarm_ratio' can't be set to the value of '1.1'") + err = tk.ExecToErr("set @@session.tidb_memory_usage_alarm_ratio=-1") + c.Assert(err.Error(), Equals, "[variable:1231]Variable 'tidb_memory_usage_alarm_ratio' can't be set to the value of '-1'") + err = tk.ExecToErr("set @@global.tidb_memory_usage_alarm_ratio=0.8") + c.Assert(err.Error(), Equals, "Variable 'tidb_memory_usage_alarm_ratio' is a SESSION variable and can't be used with SET GLOBAL") +} + func (s *testSessionSuite2) TestSelectLockInShare(c *C) { tk1 := testkit.NewTestKitWithInit(c, s.store) tk1.MustExec("DROP TABLE IF EXISTS t_sel_in_share") diff --git a/sessionctx/variable/session.go b/sessionctx/variable/session.go index 765490914a1bb..05de9ef3b8d56 100644 --- a/sessionctx/variable/session.go +++ b/sessionctx/variable/session.go @@ -1371,6 +1371,15 @@ func (s *SessionVars) SetSystemVar(name string, val string) error { s.EnableAmendPessimisticTxn = TiDBOptOn(val) case TiDBEnableRateLimitAction: s.EnabledRateLimitAction = TiDBOptOn(val) + case TiDBMemoryUsageAlarmRatio: + floatVal, err := strconv.ParseFloat(val, 64) + if err != nil { + return ErrWrongTypeForVar.GenWithStackByArgs(TiDBMemoryUsageAlarmRatio) + } + if floatVal < 0 || floatVal > 1 { + return ErrWrongValueForVar.GenWithStackByArgs(TiDBMemoryUsageAlarmRatio, val) + } + MemoryUsageAlarmRatio.Store(floatVal) } s.systems[name] = val return nil diff --git a/sessionctx/variable/sysvar.go b/sessionctx/variable/sysvar.go index a1b12a860168d..1aa72e1a533bd 100644 --- a/sessionctx/variable/sysvar.go +++ b/sessionctx/variable/sysvar.go @@ -701,6 +701,7 @@ var defaultSysVars = []*SysVar{ {ScopeSession, TiDBWaitSplitRegionTimeout, strconv.Itoa(DefWaitSplitRegionTimeout)}, {ScopeSession, TiDBLowResolutionTSO, "0"}, {ScopeSession, TiDBExpensiveQueryTimeThreshold, strconv.Itoa(DefTiDBExpensiveQueryTimeThreshold)}, + {ScopeSession, TiDBMemoryUsageAlarmRatio, strconv.FormatFloat(config.GetGlobalConfig().Performance.MemoryUsageAlarmRatio, 'f', -1, 64)}, {ScopeGlobal | ScopeSession, TiDBEnableNoopFuncs, BoolToIntStr(DefTiDBEnableNoopFuncs)}, {ScopeSession, TiDBReplicaRead, "leader"}, {ScopeSession, TiDBAllowRemoveAutoInc, BoolToIntStr(DefTiDBAllowRemoveAutoInc)}, diff --git a/sessionctx/variable/tidb_vars.go b/sessionctx/variable/tidb_vars.go index f5cef1aace6f0..98877daca6152 100644 --- a/sessionctx/variable/tidb_vars.go +++ b/sessionctx/variable/tidb_vars.go @@ -17,6 +17,7 @@ import ( "os" "github.com/pingcap/parser/mysql" + "github.com/pingcap/tidb/config" "github.com/uber-go/atomic" ) @@ -421,6 +422,9 @@ const ( // TiDBEnableRateLimitAction indicates whether enabled ratelimit action TiDBEnableRateLimitAction = "tidb_enable_rate_limit_action" + + // TiDBMemoryUsageAlarmRatio indicates the alarm threshold when memory usage of the tidb-server exceeds. + TiDBMemoryUsageAlarmRatio = "tidb_memory_usage_alarm_ratio" ) // Default TiDB system variable values. @@ -545,4 +549,5 @@ var ( ExpensiveQueryTimeThreshold uint64 = DefTiDBExpensiveQueryTimeThreshold MinExpensiveQueryTimeThreshold uint64 = 10 //10s CapturePlanBaseline = serverGlobalVariable{globalVal: "0"} + MemoryUsageAlarmRatio = atomic.NewFloat64(config.GetGlobalConfig().Performance.MemoryUsageAlarmRatio) ) diff --git a/sessionctx/variable/varsutil.go b/sessionctx/variable/varsutil.go index f2c8cc466a4ca..acd70bd14ef56 100644 --- a/sessionctx/variable/varsutil.go +++ b/sessionctx/variable/varsutil.go @@ -132,6 +132,8 @@ func GetSessionOnlySysVars(s *SessionVars, key string) (string, bool, error) { return val, true, nil case TiDBExpensiveQueryTimeThreshold: return fmt.Sprintf("%d", atomic.LoadUint64(&ExpensiveQueryTimeThreshold)), true, nil + case TiDBMemoryUsageAlarmRatio: + return fmt.Sprintf("%g", MemoryUsageAlarmRatio.Load()), true, nil case TiDBConfig: conf := config.GetGlobalConfig() j, err := json.MarshalIndent(conf, "", "\t") diff --git a/tidb-server/main.go b/tidb-server/main.go index 2b5b5241ca495..0f0ee521cb00d 100644 --- a/tidb-server/main.go +++ b/tidb-server/main.go @@ -545,6 +545,7 @@ func setGlobalVars() { variable.SysVars[variable.DataDir].Value = cfg.Path variable.SysVars[variable.TiDBSlowQueryFile].Value = cfg.Log.SlowQueryFile variable.SysVars[variable.TiDBIsolationReadEngines].Value = strings.Join(cfg.IsolationRead.Engines, ", ") + variable.MemoryUsageAlarmRatio.Store(cfg.Performance.MemoryUsageAlarmRatio) // For CI environment we default enable prepare-plan-cache. plannercore.SetPreparedPlanCache(config.CheckTableBeforeDrop || cfg.PreparedPlanCache.Enabled) diff --git a/util/expensivequery/expensivequery.go b/util/expensivequery/expensivequery.go index 8022cb564033a..56010728faa0e 100644 --- a/util/expensivequery/expensivequery.go +++ b/util/expensivequery/expensivequery.go @@ -55,7 +55,7 @@ func (eqh *Handle) Run() { ticker := time.NewTicker(tickInterval) defer ticker.Stop() sm := eqh.sm.Load().(util.SessionManager) - record := initMemoryUsageAlarmRecord() + record := &memoryUsageAlarm{} for { select { case <-ticker.C: @@ -75,6 +75,8 @@ func (eqh *Handle) Run() { } } threshold = atomic.LoadUint64(&variable.ExpensiveQueryTimeThreshold) + + record.memoryUsageAlarmRatio = variable.MemoryUsageAlarmRatio.Load() if record.err == nil { record.alarm4ExcessiveMemUsage(sm) } diff --git a/util/expensivequery/memory_usage_alarm.go b/util/expensivequery/memory_usage_alarm.go index d8f86b80eeee5..fbe9b6c5ff438 100644 --- a/util/expensivequery/memory_usage_alarm.go +++ b/util/expensivequery/memory_usage_alarm.go @@ -24,7 +24,6 @@ import ( "strings" "time" - "github.com/pingcap/errors" "github.com/pingcap/tidb/config" "github.com/pingcap/tidb/util" "github.com/pingcap/tidb/util/disk" @@ -36,8 +35,10 @@ import ( type memoryUsageAlarm struct { err error + initialized bool isServerMemoryQuotaSet bool serverMemoryQuota uint64 + memoryUsageAlarmRatio float64 lastCheckTime time.Time tmpDir string @@ -45,17 +46,11 @@ type memoryUsageAlarm struct { lastProfileFileName [][]string // heap, goroutine } -func initMemoryUsageAlarmRecord() (record *memoryUsageAlarm) { - record = &memoryUsageAlarm{} - if alert := config.GetGlobalConfig().Performance.MemoryUsageAlarmRatio; alert == 0 || alert == 1 { - record.err = errors.New("close memory usage alarm recorder") - return - } +func (record *memoryUsageAlarm) initMemoryUsageAlarmRecord() { if quota := config.GetGlobalConfig().Performance.ServerMemoryQuota; quota != 0 { record.serverMemoryQuota = quota record.isServerMemoryQuotaSet = true } else { - // TODO: Get the memory info in container directly. record.serverMemoryQuota, record.err = memory.MemTotal() if record.err != nil { logutil.BgLogger().Error("get system total memory fail", zap.Error(record.err)) @@ -72,7 +67,8 @@ func initMemoryUsageAlarmRecord() (record *memoryUsageAlarm) { // Read last records files, err := ioutil.ReadDir(record.tmpDir) if err != nil { - return record + record.err = err + return } for _, f := range files { name := filepath.Join(record.tmpDir, f.Name()) @@ -86,13 +82,23 @@ func initMemoryUsageAlarmRecord() (record *memoryUsageAlarm) { record.lastProfileFileName[1] = append(record.lastProfileFileName[1], name) } } - - return record + record.initialized = true + return } // If Performance.ServerMemoryQuota is set, use `ServerMemoryQuota * MemoryUsageAlarmRatio` to check oom risk. // If Performance.ServerMemoryQuota is not set, use `system total memory size * MemoryUsageAlarmRatio` to check oom risk. func (record *memoryUsageAlarm) alarm4ExcessiveMemUsage(sm util.SessionManager) { + if record.memoryUsageAlarmRatio <= 0.0 || record.memoryUsageAlarmRatio >= 1.0 { + return + } + if !record.initialized { + record.initMemoryUsageAlarmRecord() + if record.err != nil { + return + } + } + var memoryUsage uint64 instanceStats := &runtime.MemStats{} runtime.ReadMemStats(instanceStats) @@ -107,7 +113,7 @@ func (record *memoryUsageAlarm) alarm4ExcessiveMemUsage(sm util.SessionManager) } // TODO: Consider NextGC to record SQLs. - if float64(memoryUsage) > float64(record.serverMemoryQuota)*config.GetGlobalConfig().Performance.MemoryUsageAlarmRatio { + if float64(memoryUsage) > float64(record.serverMemoryQuota)*record.memoryUsageAlarmRatio { // At least ten seconds between two recordings that memory usage is less than threshold (default 80% system memory). // If the memory is still exceeded, only records once. interval := time.Since(record.lastCheckTime) @@ -129,7 +135,7 @@ func (record *memoryUsageAlarm) doRecord(memUsage uint64, instanceMemoryUsage ui fields = append(fields, zap.Any("system memory usage", memUsage)) fields = append(fields, zap.Any("tidb-server memory usage", instanceMemoryUsage)) } - fields = append(fields, zap.Any("memory-usage-alarm-ratio", config.GetGlobalConfig().Performance.MemoryUsageAlarmRatio)) + fields = append(fields, zap.Any("memory-usage-alarm-ratio", record.memoryUsageAlarmRatio)) fields = append(fields, zap.Any("record path", record.tmpDir)) logutil.BgLogger().Warn("tidb-server has the risk of OOM. Running SQLs and heap profile will be recorded in record path", fields...) From 7c806de44a7cb5cace2737d293ce4d24e1c532f3 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Mon, 30 Nov 2020 19:02:24 +0800 Subject: [PATCH 195/229] *: update go.mod for sysutil (#21373) (#21376) * cherry pick #21373 to release-4.0 Signed-off-by: ti-srebot * resolve conflict Signed-off-by: crazycs520 Co-authored-by: crazycs --- go.mod | 2 +- go.sum | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/go.mod b/go.mod index ade0964d69338..d77a4e9666f09 100644 --- a/go.mod +++ b/go.mod @@ -35,7 +35,7 @@ require ( github.com/pingcap/kvproto v0.0.0-20200907074027-32a3a0accf7d github.com/pingcap/log v0.0.0-20201112100606-8f1e84a3abc8 github.com/pingcap/parser v0.0.0-20201130080042-c3ddfec58248 - github.com/pingcap/sysutil v0.0.0-20200715082929-4c47bcac246a + github.com/pingcap/sysutil v0.0.0-20201130064824-f0c8aa6a6966 github.com/pingcap/tidb-tools v4.0.6-0.20200828085514-03575b185007+incompatible github.com/pingcap/tipb v0.0.0-20200618092958-4fad48b4c8c3 github.com/prometheus/client_golang v1.5.1 diff --git a/go.sum b/go.sum index 4ffeedf7b247e..3c8dc530d8d20 100644 --- a/go.sum +++ b/go.sum @@ -454,6 +454,8 @@ github.com/pingcap/sysutil v0.0.0-20200206130906-2bfa6dc40bcd/go.mod h1:EB/852NM github.com/pingcap/sysutil v0.0.0-20200408114249-ed3bd6f7fdb1/go.mod h1:EB/852NMQ+aRKioCpToQ94Wl7fktV+FNnxf3CX/TTXI= github.com/pingcap/sysutil v0.0.0-20200715082929-4c47bcac246a h1:i2RElJ2aykSqZKeY+3SK18NHhajil8cQdG77wHe+P1Y= github.com/pingcap/sysutil v0.0.0-20200715082929-4c47bcac246a/go.mod h1:EB/852NMQ+aRKioCpToQ94Wl7fktV+FNnxf3CX/TTXI= +github.com/pingcap/sysutil v0.0.0-20201130064824-f0c8aa6a6966 h1:JI0wOAb8aQML0vAVLHcxTEEC0VIwrk6gtw3WjbHvJLA= +github.com/pingcap/sysutil v0.0.0-20201130064824-f0c8aa6a6966/go.mod h1:EB/852NMQ+aRKioCpToQ94Wl7fktV+FNnxf3CX/TTXI= github.com/pingcap/tidb v1.1.0-beta.0.20200424154252-5ede18f10eed/go.mod h1:m2VDlJDbUeHPCXAfKPajqLmB1uLvWpkKk3zALNqDYdw= github.com/pingcap/tidb v1.1.0-beta.0.20200509133407-a9dc72cf2558/go.mod h1:cXNbVSQAkwwmjFQmEnEPI00Z2/Y/KOhouttUPERiInE= github.com/pingcap/tidb v1.1.0-beta.0.20200606093724-b5b4da0e6a90/go.mod h1:aaBBi3OJmYjENWY31YYOY8K6UoZZYgjZVZH56D0QIdE= From b793298b58ff738d2bc928add18ee0cb87084046 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Mon, 30 Nov 2020 19:45:52 +0800 Subject: [PATCH 196/229] cherry pick #20686 to release-4.0 (#21101) Co-authored-by: Kenan Yao --- bindinfo/bind_test.go | 239 +++++++++++++++++++++ bindinfo/handle.go | 42 +++- executor/compiler.go | 27 ++- planner/core/hints.go | 6 + planner/core/preprocess.go | 49 ++++- planner/core/preprocess_test.go | 2 +- planner/core/testdata/plan_suite_out.json | 2 +- planner/optimize.go | 34 ++- session/session_test.go | 4 +- util/hint/hint_processor.go | 63 ++++-- util/stmtsummary/statement_summary.go | 6 +- util/stmtsummary/statement_summary_test.go | 10 +- 12 files changed, 437 insertions(+), 47 deletions(-) diff --git a/bindinfo/bind_test.go b/bindinfo/bind_test.go index 29e953fffd3d3..1660373d9fbcc 100644 --- a/bindinfo/bind_test.go +++ b/bindinfo/bind_test.go @@ -186,6 +186,33 @@ func (s *testSuite) TestBindParse(c *C) { sql = `CREATE GLOBAL BINDING FOR select * from t where i BETWEEN "a" and "b" USING select * from t use index(index_t) where i BETWEEN "a\nb\rc\td\0e" and 'x'` tk.MustExec(sql) tk.MustExec(`DROP global binding for select * from t use index(idx) where i BETWEEN "a\nb\rc\td\0e" and "x"`) + + // Test Update / Delete. + tk.MustExec("create table t1(a int, b int, c int, key(b), key(c))") + tk.MustExec("create table t2(a int, b int, c int, key(b), key(c))") + tk.MustExec("create binding for delete from t1 where b = 1 and c > 1 using delete /*+ use_index(t1, c) */ from t1 where b = 1 and c > 1") + tk.MustExec("drop binding for delete from t1 where b = 1 and c > 1 using delete /*+ use_index(t1, c) */ from t1 where b = 1 and c > 1") + tk.MustExec("create binding for delete t1, t2 from t1 inner join t2 on t1.b = t2.b where t1.c = 1 using delete /*+ hash_join(t1, t2), use_index(t1, c) */ t1, t2 from t1 inner join t2 on t1.b = t2.b where t1.c = 1") + tk.MustExec("drop binding for delete t1, t2 from t1 inner join t2 on t1.b = t2.b where t1.c = 1 using delete /*+ hash_join(t1, t2), use_index(t1, c) */ t1, t2 from t1 inner join t2 on t1.b = t2.b where t1.c = 1") + tk.MustExec("create binding for update t1 set a = 1 where b = 1 and c > 1 using update /*+ use_index(t1, c) */ t1 set a = 1 where b = 1 and c > 1") + tk.MustExec("drop binding for update t1 set a = 1 where b = 1 and c > 1 using update /*+ use_index(t1, c) */ t1 set a = 1 where b = 1 and c > 1") + tk.MustExec("create binding for update t1, t2 set t1.a = 1 where t1.b = t2.b using update /*+ inl_join(t1) */ t1, t2 set t1.a = 1 where t1.b = t2.b") + tk.MustExec("drop binding for update t1, t2 set t1.a = 1 where t1.b = t2.b using update /*+ inl_join(t1) */ t1, t2 set t1.a = 1 where t1.b = t2.b") + // Test Insert / Replace. + tk.MustExec("create binding for insert into t1 select * from t2 where t2.b = 1 and t2.c > 1 using insert into t1 select /*+ use_index(t2,c) */ * from t2 where t2.b = 1 and t2.c > 1") + tk.MustExec("drop binding for insert into t1 select * from t2 where t2.b = 1 and t2.c > 1 using insert into t1 select /*+ use_index(t2,c) */ * from t2 where t2.b = 1 and t2.c > 1") + tk.MustExec("create binding for replace into t1 select * from t2 where t2.b = 1 and t2.c > 1 using replace into t1 select /*+ use_index(t2,c) */ * from t2 where t2.b = 1 and t2.c > 1") + tk.MustExec("drop binding for replace into t1 select * from t2 where t2.b = 1 and t2.c > 1 using replace into t1 select /*+ use_index(t2,c) */ * from t2 where t2.b = 1 and t2.c > 1") + err = tk.ExecToErr("create binding for insert into t1 values(1,1,1) using insert into t1 values(1,1,1)") + c.Assert(err.Error(), Equals, "create binding only supports INSERT / REPLACE INTO SELECT") + err = tk.ExecToErr("create binding for replace into t1 values(1,1,1) using replace into t1 values(1,1,1)") + c.Assert(err.Error(), Equals, "create binding only supports INSERT / REPLACE INTO SELECT") + + // Test errors. + tk.MustExec(`drop table if exists t1`) + tk.MustExec("create table t1(i int, s varchar(20))") + _, err = tk.Exec("create global binding for select * from t using select * from t1 use index for join(index_t)") + c.Assert(err, NotNil, Commentf("err %v", err)) } func (s *testSuite) TestGlobalBinding(c *C) { @@ -471,6 +498,60 @@ func (s *testSuite) TestBindingSymbolList(c *C) { c.Check(bind.UpdateTime, NotNil) } +func (s *testSuite) TestDMLSQLBind(c *C) { + tk := testkit.NewTestKit(c, s.store) + s.cleanBindingEnv(tk) + tk.MustExec("use test") + tk.MustExec("drop table if exists t") + tk.MustExec("create table t1(a int, b int, c int, key idx_b(b), key idx_c(c))") + tk.MustExec("create table t2(a int, b int, c int, key idx_b(b), key idx_c(c))") + + tk.MustExec("delete from t1 where b = 1 and c > 1") + c.Assert(tk.Se.GetSessionVars().StmtCtx.IndexNames[0], Equals, "t1:idx_b") + c.Assert(tk.MustUseIndex("delete from t1 where b = 1 and c > 1", "idx_b(b)"), IsTrue) + tk.MustExec("create global binding for delete from t1 where b = 1 and c > 1 using delete /*+ use_index(t1,idx_c) */ from t1 where b = 1 and c > 1") + tk.MustExec("delete from t1 where b = 1 and c > 1") + c.Assert(tk.Se.GetSessionVars().StmtCtx.IndexNames[0], Equals, "t1:idx_c") + c.Assert(tk.MustUseIndex("delete from t1 where b = 1 and c > 1", "idx_c(c)"), IsTrue) + + c.Assert(tk.HasPlan("delete t1, t2 from t1 inner join t2 on t1.b = t2.b", "HashJoin"), IsTrue) + tk.MustExec("create global binding for delete t1, t2 from t1 inner join t2 on t1.b = t2.b using delete /*+ inl_join(t1) */ t1, t2 from t1 inner join t2 on t1.b = t2.b") + c.Assert(tk.HasPlan("delete t1, t2 from t1 inner join t2 on t1.b = t2.b", "IndexJoin"), IsTrue) + + tk.MustExec("update t1 set a = 1 where b = 1 and c > 1") + c.Assert(tk.Se.GetSessionVars().StmtCtx.IndexNames[0], Equals, "t1:idx_b") + c.Assert(tk.MustUseIndex("update t1 set a = 1 where b = 1 and c > 1", "idx_b(b)"), IsTrue) + tk.MustExec("create global binding for update t1 set a = 1 where b = 1 and c > 1 using update /*+ use_index(t1,idx_c) */ t1 set a = 1 where b = 1 and c > 1") + tk.MustExec("delete from t1 where b = 1 and c > 1") + c.Assert(tk.Se.GetSessionVars().StmtCtx.IndexNames[0], Equals, "t1:idx_c") + c.Assert(tk.MustUseIndex("update t1 set a = 1 where b = 1 and c > 1", "idx_c(c)"), IsTrue) + + c.Assert(tk.HasPlan("update t1, t2 set t1.a = 1 where t1.b = t2.b", "HashJoin"), IsTrue) + tk.MustExec("create global binding for update t1, t2 set t1.a = 1 where t1.b = t2.b using update /*+ inl_join(t1) */ t1, t2 set t1.a = 1 where t1.b = t2.b") + c.Assert(tk.HasPlan("update t1, t2 set t1.a = 1 where t1.b = t2.b", "IndexJoin"), IsTrue) + + tk.MustExec("insert into t1 select * from t2 where t2.b = 2 and t2.c > 2") + c.Assert(tk.Se.GetSessionVars().StmtCtx.IndexNames[0], Equals, "t2:idx_b") + c.Assert(tk.MustUseIndex("insert into t1 select * from t2 where t2.b = 2 and t2.c > 2", "idx_b(b)"), IsTrue) + tk.MustExec("create global binding for insert into t1 select * from t2 where t2.b = 1 and t2.c > 1 using insert /*+ use_index(t2,idx_c) */ into t1 select * from t2 where t2.b = 1 and t2.c > 1") + tk.MustExec("insert into t1 select * from t2 where t2.b = 2 and t2.c > 2") + c.Assert(tk.Se.GetSessionVars().StmtCtx.IndexNames[0], Equals, "t2:idx_b") + c.Assert(tk.MustUseIndex("insert into t1 select * from t2 where t2.b = 2 and t2.c > 2", "idx_b(b)"), IsTrue) + tk.MustExec("drop global binding for insert into t1 select * from t2 where t2.b = 1 and t2.c > 1") + tk.MustExec("create global binding for insert into t1 select * from t2 where t2.b = 1 and t2.c > 1 using insert into t1 select /*+ use_index(t2,idx_c) */ * from t2 where t2.b = 1 and t2.c > 1") + tk.MustExec("insert into t1 select * from t2 where t2.b = 2 and t2.c > 2") + c.Assert(tk.Se.GetSessionVars().StmtCtx.IndexNames[0], Equals, "t2:idx_c") + c.Assert(tk.MustUseIndex("insert into t1 select * from t2 where t2.b = 2 and t2.c > 2", "idx_c(c)"), IsTrue) + + tk.MustExec("replace into t1 select * from t2 where t2.b = 2 and t2.c > 2") + c.Assert(tk.Se.GetSessionVars().StmtCtx.IndexNames[0], Equals, "t2:idx_b") + c.Assert(tk.MustUseIndex("replace into t1 select * from t2 where t2.b = 2 and t2.c > 2", "idx_b(b)"), IsTrue) + tk.MustExec("create global binding for replace into t1 select * from t2 where t2.b = 1 and t2.c > 1 using replace into t1 select /*+ use_index(t2,idx_c) */ * from t2 where t2.b = 1 and t2.c > 1") + tk.MustExec("replace into t1 select * from t2 where t2.b = 2 and t2.c > 2") + c.Assert(tk.Se.GetSessionVars().StmtCtx.IndexNames[0], Equals, "t2:idx_c") + c.Assert(tk.MustUseIndex("replace into t1 select * from t2 where t2.b = 2 and t2.c > 2", "idx_c(c)"), IsTrue) +} + func (s *testSuite) TestErrorBind(c *C) { tk := testkit.NewTestKit(c, s.store) s.cleanBindingEnv(tk) @@ -530,6 +611,104 @@ func (s *testSuite) TestPreparedStmt(c *C) { tk.MustExec("drop binding for select * from t") tk.MustExec("execute stmt1") c.Assert(len(tk.Se.GetSessionVars().StmtCtx.IndexNames), Equals, 0) + + tk.MustExec("drop table t") + tk.MustExec("create table t(a int, b int, c int, index idx_b(b), index idx_c(c))") + tk.MustExec("set @p = 1") + + tk.MustExec("prepare stmt from 'delete from t where b = ? and c > ?'") + tk.MustExec("execute stmt using @p,@p") + c.Assert(len(tk.Se.GetSessionVars().StmtCtx.IndexNames), Equals, 1) + c.Assert(tk.Se.GetSessionVars().StmtCtx.IndexNames[0], Equals, "t:idx_b") + tk.MustExec("create binding for delete from t where b = 2 and c > 2 using delete /*+ use_index(t,idx_c) */ from t where b = 2 and c > 2") + tk.MustExec("execute stmt using @p,@p") + c.Assert(len(tk.Se.GetSessionVars().StmtCtx.IndexNames), Equals, 1) + c.Assert(tk.Se.GetSessionVars().StmtCtx.IndexNames[0], Equals, "t:idx_c") + + tk.MustExec("prepare stmt from 'update t set a = 1 where b = ? and c > ?'") + tk.MustExec("execute stmt using @p,@p") + c.Assert(len(tk.Se.GetSessionVars().StmtCtx.IndexNames), Equals, 1) + c.Assert(tk.Se.GetSessionVars().StmtCtx.IndexNames[0], Equals, "t:idx_b") + tk.MustExec("create binding for update t set a = 2 where b = 2 and c > 2 using update /*+ use_index(t,idx_c) */ t set a = 2 where b = 2 and c > 2") + tk.MustExec("execute stmt using @p,@p") + c.Assert(len(tk.Se.GetSessionVars().StmtCtx.IndexNames), Equals, 1) + c.Assert(tk.Se.GetSessionVars().StmtCtx.IndexNames[0], Equals, "t:idx_c") + + tk.MustExec("drop table if exists t1") + tk.MustExec("create table t1 like t") + tk.MustExec("prepare stmt from 'insert into t1 select * from t where t.b = ? and t.c > ?'") + tk.MustExec("execute stmt using @p,@p") + c.Assert(len(tk.Se.GetSessionVars().StmtCtx.IndexNames), Equals, 1) + c.Assert(tk.Se.GetSessionVars().StmtCtx.IndexNames[0], Equals, "t:idx_b") + tk.MustExec("create binding for insert into t1 select * from t where t.b = 2 and t.c > 2 using insert into t1 select /*+ use_index(t,idx_c) */ * from t where t.b = 2 and t.c > 2") + tk.MustExec("execute stmt using @p,@p") + c.Assert(len(tk.Se.GetSessionVars().StmtCtx.IndexNames), Equals, 1) + c.Assert(tk.Se.GetSessionVars().StmtCtx.IndexNames[0], Equals, "t:idx_c") + + tk.MustExec("prepare stmt from 'replace into t1 select * from t where t.b = ? and t.c > ?'") + tk.MustExec("execute stmt using @p,@p") + c.Assert(len(tk.Se.GetSessionVars().StmtCtx.IndexNames), Equals, 1) + c.Assert(tk.Se.GetSessionVars().StmtCtx.IndexNames[0], Equals, "t:idx_b") + tk.MustExec("create binding for replace into t1 select * from t where t.b = 2 and t.c > 2 using replace into t1 select /*+ use_index(t,idx_c) */ * from t where t.b = 2 and t.c > 2") + tk.MustExec("execute stmt using @p,@p") + c.Assert(len(tk.Se.GetSessionVars().StmtCtx.IndexNames), Equals, 1) + c.Assert(tk.Se.GetSessionVars().StmtCtx.IndexNames[0], Equals, "t:idx_c") +} + +func (s *testSuite) TestDMLCapturePlanBaseline(c *C) { + tk := testkit.NewTestKit(c, s.store) + s.cleanBindingEnv(tk) + stmtsummary.StmtSummaryByDigestMap.Clear() + tk.MustExec(" set @@tidb_capture_plan_baselines = on") + defer func() { + tk.MustExec(" set @@tidb_capture_plan_baselines = off") + }() + tk.MustExec("use test") + tk.MustExec("drop table if exists t") + tk.MustExec("create table t(a int, b int, c int, key idx_b(b), key idx_c(c))") + tk.MustExec("create table t1 like t") + s.domain.BindHandle().CaptureBaselines() + tk.MustQuery("show global bindings").Check(testkit.Rows()) + tk.MustExec("delete from t where b = 1 and c > 1") + tk.MustExec("delete from t where b = 1 and c > 1") + tk.MustExec("update t set a = 1 where b = 1 and c > 1") + tk.MustExec("update t set a = 1 where b = 1 and c > 1") + tk.MustExec("insert into t1 select * from t where t.b = 1 and t.c > 1") + tk.MustExec("insert into t1 select * from t where t.b = 1 and t.c > 1") + tk.MustExec("replace into t1 select * from t where t.b = 1 and t.c > 1") + tk.MustExec("replace into t1 select * from t where t.b = 1 and t.c > 1") + tk.MustExec("insert into t1 values(1,1,1)") + tk.MustExec("insert into t1 values(1,1,1)") + tk.MustExec("replace into t1 values(1,1,1)") + tk.MustExec("replace into t1 values(1,1,1)") + tk.MustExec("admin capture bindings") + rows := tk.MustQuery("show global bindings").Rows() + c.Assert(len(rows), Equals, 0) + + c.Assert(tk.Se.Auth(&auth.UserIdentity{Username: "root", Hostname: "%"}, nil, nil), IsTrue) + tk.MustExec("delete from t where b = 1 and c > 1") + tk.MustExec("delete from t where b = 1 and c > 1") + tk.MustExec("update t set a = 1 where b = 1 and c > 1") + tk.MustExec("update t set a = 1 where b = 1 and c > 1") + tk.MustExec("insert into t1 select * from t where t.b = 1 and t.c > 1") + tk.MustExec("insert into t1 select * from t where t.b = 1 and t.c > 1") + tk.MustExec("replace into t1 select * from t where t.b = 1 and t.c > 1") + tk.MustExec("replace into t1 select * from t where t.b = 1 and t.c > 1") + tk.MustExec("insert into t1 values(1,1,1)") + tk.MustExec("insert into t1 values(1,1,1)") + tk.MustExec("replace into t1 values(1,1,1)") + tk.MustExec("replace into t1 values(1,1,1)") + tk.MustExec("admin capture bindings") + rows = tk.MustQuery("show global bindings").Sort().Rows() + c.Assert(len(rows), Equals, 4) + c.Assert(rows[0][0], Equals, "delete from t where b = ? and c > ?") + c.Assert(rows[0][1], Equals, "DELETE /*+ use_index(@`del_1` `test`.`t` `idx_b`)*/ FROM `t` WHERE `b`=1 AND `c`>1") + c.Assert(rows[1][0], Equals, "insert into t1 select * from t where t . b = ? and t . c > ?") + c.Assert(rows[1][1], Equals, "INSERT INTO `t1` SELECT /*+ use_index(@`sel_1` `test`.`t` `idx_b`)*/ * FROM `t` WHERE `t`.`b`=1 AND `t`.`c`>1") + c.Assert(rows[2][0], Equals, "replace into t1 select * from t where t . b = ? and t . c > ?") + c.Assert(rows[2][1], Equals, "REPLACE INTO `t1` SELECT /*+ use_index(@`sel_1` `test`.`t` `idx_b`)*/ * FROM `t` WHERE `t`.`b`=1 AND `t`.`c`>1") + c.Assert(rows[3][0], Equals, "update t set a = ? where b = ? and c > ?") + c.Assert(rows[3][1], Equals, "UPDATE /*+ use_index(@`upd_1` `test`.`t` `idx_b`)*/ `t` SET `a`=1 WHERE `b`=1 AND `c`>1") } func (s *testSuite) TestCapturePlanBaseline(c *C) { @@ -631,6 +810,66 @@ func (s *testSuite) TestDropSingleBindings(c *C) { c.Assert(len(rows), Equals, 0) } +func (s *testSuite) TestDMLEvolveBaselines(c *C) { + tk := testkit.NewTestKit(c, s.store) + s.cleanBindingEnv(tk) + tk.MustExec("use test") + tk.MustExec("drop table if exists t") + tk.MustExec("create table t(a int, b int, c int, index idx_b(b), index idx_c(c))") + tk.MustExec("insert into t values (1,1,1), (2,2,2), (3,3,3), (4,4,4), (5,5,5)") + tk.MustExec("analyze table t") + tk.MustExec("set @@tidb_evolve_plan_baselines=1") + + tk.MustExec("create global binding for delete from t where b = 1 and c > 1 using delete /*+ use_index(t,idx_c) */ from t where b = 1 and c > 1") + rows := tk.MustQuery("show global bindings").Rows() + c.Assert(len(rows), Equals, 1) + tk.MustExec("delete /*+ use_index(t,idx_b) */ from t where b = 2 and c > 1") + c.Assert(tk.Se.GetSessionVars().StmtCtx.IndexNames[0], Equals, "t:idx_c") + tk.MustExec("admin flush bindings") + rows = tk.MustQuery("show global bindings").Rows() + c.Assert(len(rows), Equals, 1) + tk.MustExec("admin evolve bindings") + rows = tk.MustQuery("show global bindings").Rows() + c.Assert(len(rows), Equals, 1) + + tk.MustExec("create global binding for update t set a = 1 where b = 1 and c > 1 using update /*+ use_index(t,idx_c) */ t set a = 1 where b = 1 and c > 1") + rows = tk.MustQuery("show global bindings").Rows() + c.Assert(len(rows), Equals, 2) + tk.MustExec("update /*+ use_index(t,idx_b) */ t set a = 2 where b = 2 and c > 1") + c.Assert(tk.Se.GetSessionVars().StmtCtx.IndexNames[0], Equals, "t:idx_c") + tk.MustExec("admin flush bindings") + rows = tk.MustQuery("show global bindings").Rows() + c.Assert(len(rows), Equals, 2) + tk.MustExec("admin evolve bindings") + rows = tk.MustQuery("show global bindings").Rows() + c.Assert(len(rows), Equals, 2) + + tk.MustExec("create table t1 like t") + tk.MustExec("create global binding for insert into t1 select * from t where t.b = 1 and t.c > 1 using insert into t1 select /*+ use_index(t,idx_c) */ * from t where t.b = 1 and t.c > 1") + rows = tk.MustQuery("show global bindings").Rows() + c.Assert(len(rows), Equals, 3) + tk.MustExec("insert into t1 select /*+ use_index(t,idx_b) */ * from t where t.b = 2 and t.c > 2") + c.Assert(tk.Se.GetSessionVars().StmtCtx.IndexNames[0], Equals, "t:idx_c") + tk.MustExec("admin flush bindings") + rows = tk.MustQuery("show global bindings").Rows() + c.Assert(len(rows), Equals, 3) + tk.MustExec("admin evolve bindings") + rows = tk.MustQuery("show global bindings").Rows() + c.Assert(len(rows), Equals, 3) + + tk.MustExec("create global binding for replace into t1 select * from t where t.b = 1 and t.c > 1 using replace into t1 select /*+ use_index(t,idx_c) */ * from t where t.b = 1 and t.c > 1") + rows = tk.MustQuery("show global bindings").Rows() + c.Assert(len(rows), Equals, 4) + tk.MustExec("replace into t1 select /*+ use_index(t,idx_b) */ * from t where t.b = 2 and t.c > 2") + c.Assert(tk.Se.GetSessionVars().StmtCtx.IndexNames[0], Equals, "t:idx_c") + tk.MustExec("admin flush bindings") + rows = tk.MustQuery("show global bindings").Rows() + c.Assert(len(rows), Equals, 4) + tk.MustExec("admin evolve bindings") + rows = tk.MustQuery("show global bindings").Rows() + c.Assert(len(rows), Equals, 4) +} + func (s *testSuite) TestAddEvolveTasks(c *C) { tk := testkit.NewTestKit(c, s.store) s.cleanBindingEnv(tk) diff --git a/bindinfo/handle.go b/bindinfo/handle.go index 62bcc64b43e5f..6f5de7d282648 100644 --- a/bindinfo/handle.go +++ b/bindinfo/handle.go @@ -596,16 +596,19 @@ func (h *BindHandle) logicalDeleteBindInfoSQL(originalSQL, db string, updateTs t // CaptureBaselines is used to automatically capture plan baselines. func (h *BindHandle) CaptureBaselines() { parser4Capture := parser.New() - schemas, sqls := stmtsummary.StmtSummaryByDigestMap.GetMoreThanOnceSelect() + schemas, sqls := stmtsummary.StmtSummaryByDigestMap.GetMoreThanOnceBindableStmt() for i := range sqls { stmt, err := parser4Capture.ParseOneStmt(sqls[i], "", "") if err != nil { logutil.BgLogger().Debug("parse SQL failed", zap.String("SQL", sqls[i]), zap.Error(err)) continue } - normalizedSQL, digiest := parser.NormalizeDigest(sqls[i]) + if insertStmt, ok := stmt.(*ast.InsertStmt); ok && insertStmt.Select == nil { + continue + } + normalizedSQL, digest := parser.NormalizeDigest(sqls[i]) dbName := utilparser.GetDefaultDB(stmt, schemas[i]) - if r := h.GetBindRecord(digiest, normalizedSQL, dbName); r != nil && r.HasUsingBinding() { + if r := h.GetBindRecord(digest, normalizedSQL, dbName); r != nil && r.HasUsingBinding() { continue } h.sctx.Lock() @@ -682,10 +685,35 @@ func GenerateBindSQL(ctx context.Context, stmtNode ast.StmtNode, planHint string logutil.Logger(ctx).Warn("Restore SQL failed", zap.Error(err)) } bindSQL := sb.String() - selectIdx := strings.Index(bindSQL, "SELECT") - // Remove possible `explain` prefix. - bindSQL = bindSQL[selectIdx:] - return strings.Replace(bindSQL, "SELECT", fmt.Sprintf("SELECT /*+ %s*/", planHint), 1) + switch n := stmtNode.(type) { + case *ast.DeleteStmt: + deleteIdx := strings.Index(bindSQL, "DELETE") + // Remove possible `explain` prefix. + bindSQL = bindSQL[deleteIdx:] + return strings.Replace(bindSQL, "DELETE", fmt.Sprintf("DELETE /*+ %s*/", planHint), 1) + case *ast.UpdateStmt: + updateIdx := strings.Index(bindSQL, "UPDATE") + // Remove possible `explain` prefix. + bindSQL = bindSQL[updateIdx:] + return strings.Replace(bindSQL, "UPDATE", fmt.Sprintf("UPDATE /*+ %s*/", planHint), 1) + case *ast.SelectStmt: + selectIdx := strings.Index(bindSQL, "SELECT") + // Remove possible `explain` prefix. + bindSQL = bindSQL[selectIdx:] + return strings.Replace(bindSQL, "SELECT", fmt.Sprintf("SELECT /*+ %s*/", planHint), 1) + case *ast.InsertStmt: + insertIdx := int(0) + if n.IsReplace { + insertIdx = strings.Index(bindSQL, "REPLACE") + } else { + insertIdx = strings.Index(bindSQL, "INSERT") + } + // Remove possible `explain` prefix. + bindSQL = bindSQL[insertIdx:] + return strings.Replace(bindSQL, "SELECT", fmt.Sprintf("SELECT /*+ %s*/", planHint), 1) + } + logutil.Logger(ctx).Warn("Unexpected statement type") + return "" } type paramMarkerChecker struct { diff --git a/executor/compiler.go b/executor/compiler.go index 3a1b2b85ed894..3ea8d5542e6b4 100644 --- a/executor/compiler.go +++ b/executor/compiler.go @@ -218,17 +218,36 @@ func getStmtDbLabel(stmtNode ast.StmtNode) map[string]struct{} { } } case *ast.CreateBindingStmt: + var resNode ast.ResultSetNode if x.OriginSel != nil { - originSelect := x.OriginSel.(*ast.SelectStmt) - dbLabels := getDbFromResultNode(originSelect.From.TableRefs) + switch n := x.OriginSel.(type) { + case *ast.SelectStmt: + resNode = n.From.TableRefs + case *ast.DeleteStmt: + resNode = n.TableRefs.TableRefs + case *ast.UpdateStmt: + resNode = n.TableRefs.TableRefs + case *ast.InsertStmt: + resNode = n.Table.TableRefs + } + dbLabels := getDbFromResultNode(resNode) for _, db := range dbLabels { dbLabelSet[db] = struct{}{} } } if len(dbLabelSet) == 0 && x.HintedSel != nil { - hintedSelect := x.HintedSel.(*ast.SelectStmt) - dbLabels := getDbFromResultNode(hintedSelect.From.TableRefs) + switch n := x.HintedSel.(type) { + case *ast.SelectStmt: + resNode = n.From.TableRefs + case *ast.DeleteStmt: + resNode = n.TableRefs.TableRefs + case *ast.UpdateStmt: + resNode = n.TableRefs.TableRefs + case *ast.InsertStmt: + resNode = n.Table.TableRefs + } + dbLabels := getDbFromResultNode(resNode) for _, db := range dbLabels { dbLabelSet[db] = struct{}{} } diff --git a/planner/core/hints.go b/planner/core/hints.go index dc7dc370f8dc3..e9c3e32d8c5ac 100644 --- a/planner/core/hints.go +++ b/planner/core/hints.go @@ -31,6 +31,9 @@ func GenHintsFromPhysicalPlan(p Plan) []*ast.TableOptimizerHint { hints = genHintsFromPhysicalPlan(pp.SelectPlan, utilhint.TypeUpdate) case *Delete: hints = genHintsFromPhysicalPlan(pp.SelectPlan, utilhint.TypeDelete) + // For Insert, we only generate hints that would be used in select query block. + case *Insert: + hints = genHintsFromPhysicalPlan(pp.SelectPlan, utilhint.TypeSelect) case PhysicalPlan: hints = genHintsFromPhysicalPlan(pp, utilhint.TypeSelect) } @@ -104,6 +107,9 @@ func getJoinHints(sctx sessionctx.Context, joinType string, parentOffset int, no } func genHintsFromPhysicalPlan(p PhysicalPlan, nodeType utilhint.NodeType) (res []*ast.TableOptimizerHint) { + if p == nil { + return res + } for _, child := range p.Children() { res = append(res, genHintsFromPhysicalPlan(child, nodeType)...) } diff --git a/planner/core/preprocess.go b/planner/core/preprocess.go index 3f4bc1a3b8796..fa58bee249fdb 100644 --- a/planner/core/preprocess.go +++ b/planner/core/preprocess.go @@ -207,10 +207,53 @@ func EraseLastSemicolon(stmt ast.StmtNode) { } } -func (p *preprocessor) checkBindGrammar(originSel, hintedSel ast.StmtNode) { - originSQL := parser.Normalize(originSel.(*ast.SelectStmt).Text()) - hintedSQL := parser.Normalize(hintedSel.(*ast.SelectStmt).Text()) +const ( + // TypeInvalid for unexpected types. + TypeInvalid byte = iota + // TypeSelect for SelectStmt. + TypeSelect + // TypeDelete for DeleteStmt. + TypeDelete + // TypeUpdate for UpdateStmt. + TypeUpdate + // TypeInsert for InsertStmt. + TypeInsert +) + +func bindableStmtType(node ast.StmtNode) byte { + switch node.(type) { + case *ast.SelectStmt: + return TypeSelect + case *ast.DeleteStmt: + return TypeDelete + case *ast.UpdateStmt: + return TypeUpdate + case *ast.InsertStmt: + return TypeInsert + } + return TypeInvalid +} +func (p *preprocessor) checkBindGrammar(originNode, hintedNode ast.StmtNode) { + origTp := bindableStmtType(originNode) + hintedTp := bindableStmtType(hintedNode) + if origTp == TypeInvalid || hintedTp == TypeInvalid { + p.err = errors.Errorf("create binding doesn't support this type of query") + return + } + if origTp != hintedTp { + p.err = errors.Errorf("hinted sql and original sql have different query types") + return + } + if origTp == TypeInsert { + origInsert, hintedInsert := originNode.(*ast.InsertStmt), hintedNode.(*ast.InsertStmt) + if origInsert.Select == nil || hintedInsert.Select == nil { + p.err = errors.Errorf("create binding only supports INSERT / REPLACE INTO SELECT") + return + } + } + originSQL := parser.Normalize(originNode.Text()) + hintedSQL := parser.Normalize(hintedNode.Text()) if originSQL != hintedSQL { p.err = errors.Errorf("hinted sql and origin sql don't match when hinted sql erase the hint info, after erase hint info, originSQL:%s, hintedSQL:%s", originSQL, hintedSQL) } diff --git a/planner/core/preprocess_test.go b/planner/core/preprocess_test.go index 082c4e296f0d3..cc8ce72e2516b 100644 --- a/planner/core/preprocess_test.go +++ b/planner/core/preprocess_test.go @@ -58,7 +58,7 @@ func (s *testValidatorSuite) SetUpTest(c *C) { func (s *testValidatorSuite) runSQL(c *C, sql string, inPrepare bool, terr error) { stmts, err1 := session.Parse(s.ctx, sql) - c.Assert(err1, IsNil) + c.Assert(err1, IsNil, Commentf("sql: %s", sql)) c.Assert(stmts, HasLen, 1) stmt := stmts[0] var opts []core.PreprocessOpt diff --git a/planner/core/testdata/plan_suite_out.json b/planner/core/testdata/plan_suite_out.json index 4379fe40a2ed5..21faa82b7adc8 100644 --- a/planner/core/testdata/plan_suite_out.json +++ b/planner/core/testdata/plan_suite_out.json @@ -704,7 +704,7 @@ { "SQL": "insert into t select * from t where b < 1 order by d limit 1", "Best": "TableReader(Table(t)->Sel([lt(test.t.b, 1)])->TopN([test.t.d],0,1))->TopN([test.t.d],0,1)->Insert", - "Hints": "" + "Hints": "use_index(@`sel_1` `test`.`t` )" }, { "SQL": "insert into t (a, b, c, e, f, g) values(0,0,0,0,0,0)", diff --git a/planner/optimize.go b/planner/optimize.go index 311657c81da69..cc6ac50cfd25d 100644 --- a/planner/optimize.go +++ b/planner/optimize.go @@ -178,10 +178,12 @@ func Optimize(ctx context.Context, sctx sessionctx.Context, node ast.Node, is in bestPlanAmongHints = plan } } - // 1. If there is already a evolution task, we do not need to handle it again. - // 2. If the origin binding contain `read_from_storage` hint, we should ignore the evolve task. - // 3. If the best plan contain TiFlash hint, we should ignore the evolve task. - if sctx.GetSessionVars().EvolvePlanBaselines && binding == nil && + // 1. If it is a select query. + // 2. If there is already a evolution task, we do not need to handle it again. + // 3. If the origin binding contain `read_from_storage` hint, we should ignore the evolve task. + // 4. If the best plan contain TiFlash hint, we should ignore the evolve task. + if _, ok := stmtNode.(*ast.SelectStmt); ok && + sctx.GetSessionVars().EvolvePlanBaselines && binding == nil && !originHints.ContainTableHint(plannercore.HintReadFromStorage) && !bindRecord.Bindings[0].Hint.ContainTableHint(plannercore.HintReadFromStorage) { handleEvolveTasks(ctx, sctx, bindRecord, stmtNode, bestPlanHintStr) @@ -249,19 +251,33 @@ func optimize(ctx context.Context, sctx sessionctx.Context, node ast.Node, is in return finalPlan, names, cost, err } -func extractSelectAndNormalizeDigest(stmtNode ast.StmtNode) (*ast.SelectStmt, string, string) { +func extractSelectAndNormalizeDigest(stmtNode ast.StmtNode) (ast.StmtNode, string, string) { switch x := stmtNode.(type) { case *ast.ExplainStmt: switch x.Stmt.(type) { - case *ast.SelectStmt: + case *ast.SelectStmt, *ast.DeleteStmt, *ast.UpdateStmt, *ast.InsertStmt: plannercore.EraseLastSemicolon(x) normalizeExplainSQL := parser.Normalize(x.Text()) - idx := strings.Index(normalizeExplainSQL, "select") + idx := int(0) + switch n := x.Stmt.(type) { + case *ast.SelectStmt: + idx = strings.Index(normalizeExplainSQL, "select") + case *ast.DeleteStmt: + idx = strings.Index(normalizeExplainSQL, "delete") + case *ast.UpdateStmt: + idx = strings.Index(normalizeExplainSQL, "update") + case *ast.InsertStmt: + if n.IsReplace { + idx = strings.Index(normalizeExplainSQL, "replace") + } else { + idx = strings.Index(normalizeExplainSQL, "insert") + } + } normalizeSQL := normalizeExplainSQL[idx:] hash := parser.DigestNormalized(normalizeSQL) - return x.Stmt.(*ast.SelectStmt), normalizeSQL, hash + return x.Stmt, normalizeSQL, hash } - case *ast.SelectStmt: + case *ast.SelectStmt, *ast.DeleteStmt, *ast.UpdateStmt, *ast.InsertStmt: plannercore.EraseLastSemicolon(x) normalizedSQL, hash := parser.NormalizeDigest(x.Text()) return x, normalizedSQL, hash diff --git a/session/session_test.go b/session/session_test.go index 18fcda3a9121d..84ae4fd1d8fed 100644 --- a/session/session_test.go +++ b/session/session_test.go @@ -1778,12 +1778,12 @@ func (s *testSessionSuite3) TestUnique(c *C) { c.Assert(err, NotNil) // Check error type and error message c.Assert(terror.ErrorEqual(err, kv.ErrKeyExists), IsTrue, Commentf("err %v", err)) - c.Assert(err.Error(), Equals, "previous statement: insert into test(id, val) values(1, 1);: [kv:1062]Duplicate entry '1' for key 'PRIMARY'") + c.Assert(err.Error(), Equals, "previous statement: insert into test(id, val) values(1, 1): [kv:1062]Duplicate entry '1' for key 'PRIMARY'") _, err = tk1.Exec("commit") c.Assert(err, NotNil) c.Assert(terror.ErrorEqual(err, kv.ErrKeyExists), IsTrue, Commentf("err %v", err)) - c.Assert(err.Error(), Equals, "previous statement: insert into test(id, val) values(2, 2);: [kv:1062]Duplicate entry '2' for key 'val'") + c.Assert(err.Error(), Equals, "previous statement: insert into test(id, val) values(2, 2): [kv:1062]Duplicate entry '2' for key 'val'") // Test for https://github.com/pingcap/tidb/issues/463 tk.MustExec("drop table test;") diff --git a/util/hint/hint_processor.go b/util/hint/hint_processor.go index 86804acee6ab1..b0a1854dbd0a0 100644 --- a/util/hint/hint_processor.go +++ b/util/hint/hint_processor.go @@ -62,6 +62,18 @@ func (hs *HintsSet) ContainTableHint(hint string) bool { return false } +// setTableHints4StmtNode sets table hints for select/update/delete. +func setTableHints4StmtNode(node ast.Node, hints []*ast.TableOptimizerHint) { + switch x := node.(type) { + case *ast.SelectStmt: + x.TableHints = hints + case *ast.UpdateStmt: + x.TableHints = hints + case *ast.DeleteStmt: + x.TableHints = hints + } +} + // ExtractTableHintsFromStmtNode extracts table hints from this node. func ExtractTableHintsFromStmtNode(node ast.Node, sctx sessionctx.Context) []*ast.TableOptimizerHint { switch x := node.(type) { @@ -177,25 +189,32 @@ func (hs *HintsSet) Restore() (string, error) { type hintProcessor struct { *HintsSet // bindHint2Ast indicates the behavior of the processor, `true` for bind hint to ast, `false` for extract hint from ast. - bindHint2Ast bool - tableCounter int - indexCounter int + bindHint2Ast bool + tableCounter int + indexCounter int + selectCounter int } func (hp *hintProcessor) Enter(in ast.Node) (ast.Node, bool) { switch v := in.(type) { - case *ast.SelectStmt: + case *ast.SelectStmt, *ast.UpdateStmt, *ast.DeleteStmt: if hp.bindHint2Ast { if hp.tableCounter < len(hp.tableHints) { - v.TableHints = hp.tableHints[hp.tableCounter] + setTableHints4StmtNode(in, hp.tableHints[hp.tableCounter]) } else { - v.TableHints = nil + setTableHints4StmtNode(in, nil) } hp.tableCounter++ } else { - hp.tableHints = append(hp.tableHints, v.TableHints) + hp.tableHints = append(hp.tableHints, ExtractTableHintsFromStmtNode(in, nil)) + } + if _, ok := in.(*ast.SelectStmt); ok { + hp.selectCounter++ } case *ast.TableName: + if hp.selectCounter == 0 { + return in, false + } if hp.bindHint2Ast { if hp.indexCounter < len(hp.indexHints) { v.IndexHints = hp.indexHints[hp.indexCounter] @@ -211,6 +230,9 @@ func (hp *hintProcessor) Enter(in ast.Node) (ast.Node, bool) { } func (hp *hintProcessor) Leave(in ast.Node) (ast.Node, bool) { + if _, ok := in.(*ast.SelectStmt); ok { + hp.selectCounter-- + } return in, true } @@ -240,18 +262,19 @@ func ParseHintsSet(p *parser.Parser, sql, charset, collation, db string) (*Hints hs := CollectHint(stmtNodes[0]) processor := &BlockHintProcessor{} stmtNodes[0].Accept(processor) + hintNodeType := nodeType4Stmt(stmtNodes[0]) for i, tblHints := range hs.tableHints { newHints := make([]*ast.TableOptimizerHint, 0, len(tblHints)) for _, tblHint := range tblHints { if tblHint.HintName.L == hintQBName { continue } - offset := processor.GetHintOffset(tblHint.QBName, TypeSelect, i+1) - if offset < 0 || !processor.checkTableQBName(tblHint.Tables, TypeSelect) { + offset := processor.GetHintOffset(tblHint.QBName, hintNodeType, i+1) + if offset < 0 || !processor.checkTableQBName(tblHint.Tables, hintNodeType) { hintStr := RestoreTableOptimizerHint(tblHint) return nil, nil, errors.New(fmt.Sprintf("Unknown query block name in hint %s", hintStr)) } - tblHint.QBName = GenerateQBName(TypeSelect, offset) + tblHint.QBName = GenerateQBName(hintNodeType, offset) for i, tbl := range tblHint.Tables { if tbl.DBName.String() == "" { tblHint.Tables[i].DBName = model.NewCIStr(db) @@ -360,8 +383,24 @@ const ( TypeDelete // TypeSelect for SELECT. TypeSelect + // TypeInvalid for unexpected statements. + TypeInvalid ) +// nodeType4Stmt returns the NodeType for a statement. The type is used for SQL bind. +func nodeType4Stmt(node ast.StmtNode) NodeType { + switch node.(type) { + // This type is used by SQL bind, we only handle SQL bind for INSERT INTO SELECT, so we treat InsertStmt as TypeSelect. + case *ast.SelectStmt, *ast.InsertStmt: + return TypeSelect + case *ast.UpdateStmt: + return TypeUpdate + case *ast.DeleteStmt: + return TypeDelete + } + return TypeInvalid +} + // getBlockName finds the offset of query block name. It use 0 as offset for top level update or delete, // -1 for invalid block name. func (p *BlockHintProcessor) getBlockOffset(blockName model.CIStr, nodeType NodeType) int { @@ -428,9 +467,9 @@ func (p *BlockHintProcessor) GetCurrentStmtHints(hints []*ast.TableOptimizerHint // GenerateQBName builds QBName from offset. func GenerateQBName(nodeType NodeType, blockOffset int) model.CIStr { - if nodeType == TypeDelete && blockOffset == 0 { + if nodeType == TypeDelete && (blockOffset == 0 || blockOffset == 1) { return model.NewCIStr(defaultDeleteBlockName) - } else if nodeType == TypeUpdate && blockOffset == 0 { + } else if nodeType == TypeUpdate && (blockOffset == 0 || blockOffset == 1) { return model.NewCIStr(defaultUpdateBlockName) } return model.NewCIStr(fmt.Sprintf("%s%d", defaultSelectBlockPrefix, blockOffset)) diff --git a/util/stmtsummary/statement_summary.go b/util/stmtsummary/statement_summary.go index eefab1456156e..943d0bdb299fb 100644 --- a/util/stmtsummary/statement_summary.go +++ b/util/stmtsummary/statement_summary.go @@ -338,8 +338,8 @@ func (ssMap *stmtSummaryByDigestMap) ToHistoryDatum(user *auth.UserIdentity, isS return rows } -// GetMoreThanOnceSelect gets users' select SQLs that occurred more than once. -func (ssMap *stmtSummaryByDigestMap) GetMoreThanOnceSelect() ([]string, []string) { +// GetMoreThanOnceBindableStmt gets users' select/update/delete SQLs that occurred more than once. +func (ssMap *stmtSummaryByDigestMap) GetMoreThanOnceBindableStmt() ([]string, []string) { ssMap.Lock() values := ssMap.summaryMap.Values() ssMap.Unlock() @@ -351,7 +351,7 @@ func (ssMap *stmtSummaryByDigestMap) GetMoreThanOnceSelect() ([]string, []string func() { ssbd.Lock() defer ssbd.Unlock() - if ssbd.initialized && ssbd.stmtType == "Select" { + if ssbd.initialized && (ssbd.stmtType == "Select" || ssbd.stmtType == "Delete" || ssbd.stmtType == "Update" || ssbd.stmtType == "Insert" || ssbd.stmtType == "Replace") { if ssbd.history.Len() > 0 { ssElement := ssbd.history.Back().Value.(*stmtSummaryByDigestElement) ssElement.Lock() diff --git a/util/stmtsummary/statement_summary_test.go b/util/stmtsummary/statement_summary_test.go index a1b3eb5ac6186..75afc6231c5df 100644 --- a/util/stmtsummary/statement_summary_test.go +++ b/util/stmtsummary/statement_summary_test.go @@ -886,8 +886,8 @@ func (s *testStmtSummarySuite) TestEnableSummaryParallel(c *C) { c.Assert(s.ssMap.Enabled(), IsTrue) } -// Test GetMoreThanOnceSelect. -func (s *testStmtSummarySuite) TestGetMoreThanOnceSelect(c *C) { +// Test GetMoreThanOnceBindableStmt. +func (s *testStmtSummarySuite) TestGetMoreThanOnceBindableStmt(c *C) { s.ssMap.Clear() stmtExecInfo1 := generateAnyExecInfo() @@ -895,7 +895,7 @@ func (s *testStmtSummarySuite) TestGetMoreThanOnceSelect(c *C) { stmtExecInfo1.NormalizedSQL = "insert ?" stmtExecInfo1.StmtCtx.StmtType = "Insert" s.ssMap.AddStatement(stmtExecInfo1) - schemas, sqls := s.ssMap.GetMoreThanOnceSelect() + schemas, sqls := s.ssMap.GetMoreThanOnceBindableStmt() c.Assert(len(schemas), Equals, 0) c.Assert(len(sqls), Equals, 0) @@ -903,12 +903,12 @@ func (s *testStmtSummarySuite) TestGetMoreThanOnceSelect(c *C) { stmtExecInfo1.Digest = "digest1" stmtExecInfo1.StmtCtx.StmtType = "Select" s.ssMap.AddStatement(stmtExecInfo1) - schemas, sqls = s.ssMap.GetMoreThanOnceSelect() + schemas, sqls = s.ssMap.GetMoreThanOnceBindableStmt() c.Assert(len(schemas), Equals, 0) c.Assert(len(sqls), Equals, 0) s.ssMap.AddStatement(stmtExecInfo1) - schemas, sqls = s.ssMap.GetMoreThanOnceSelect() + schemas, sqls = s.ssMap.GetMoreThanOnceBindableStmt() c.Assert(len(schemas), Equals, 1) c.Assert(len(sqls), Equals, 1) } From 71e6f25d8fc613231357770ec93894ee82827e8b Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Mon, 30 Nov 2020 20:28:25 +0800 Subject: [PATCH 197/229] util/hint: fix ineffective index hint for delete / update in SQL Bind (#21104) (#21390) Co-authored-by: Kenan Yao --- bindinfo/bind_test.go | 15 +++++++++++++++ util/hint/hint_processor.go | 20 ++++++++++---------- 2 files changed, 25 insertions(+), 10 deletions(-) diff --git a/bindinfo/bind_test.go b/bindinfo/bind_test.go index 1660373d9fbcc..d55d42e30f70f 100644 --- a/bindinfo/bind_test.go +++ b/bindinfo/bind_test.go @@ -1450,3 +1450,18 @@ func (s *testSuite) TestIssue19836(c *C) { ) tk.MustQuery("explain for connection " + strconv.FormatUint(tk.Se.ShowProcess().ID, 10)).Check(explainResult) } + +func (s *testSuite) TestDMLIndexHintBind(c *C) { + tk := testkit.NewTestKit(c, s.store) + s.cleanBindingEnv(tk) + tk.MustExec("use test") + tk.MustExec("create table t(a int, b int, c int, key idx_b(b), key idx_c(c))") + + tk.MustExec("delete from t where b = 1 and c > 1") + c.Assert(tk.Se.GetSessionVars().StmtCtx.IndexNames[0], Equals, "t:idx_b") + c.Assert(tk.MustUseIndex("delete from t where b = 1 and c > 1", "idx_b(b)"), IsTrue) + tk.MustExec("create global binding for delete from t where b = 1 and c > 1 using delete from t use index(idx_c) where b = 1 and c > 1") + tk.MustExec("delete from t where b = 1 and c > 1") + c.Assert(tk.Se.GetSessionVars().StmtCtx.IndexNames[0], Equals, "t:idx_c") + c.Assert(tk.MustUseIndex("delete from t where b = 1 and c > 1", "idx_c(c)"), IsTrue) +} diff --git a/util/hint/hint_processor.go b/util/hint/hint_processor.go index b0a1854dbd0a0..62e1e734f99fc 100644 --- a/util/hint/hint_processor.go +++ b/util/hint/hint_processor.go @@ -189,10 +189,10 @@ func (hs *HintsSet) Restore() (string, error) { type hintProcessor struct { *HintsSet // bindHint2Ast indicates the behavior of the processor, `true` for bind hint to ast, `false` for extract hint from ast. - bindHint2Ast bool - tableCounter int - indexCounter int - selectCounter int + bindHint2Ast bool + tableCounter int + indexCounter int + blockCounter int } func (hp *hintProcessor) Enter(in ast.Node) (ast.Node, bool) { @@ -208,11 +208,10 @@ func (hp *hintProcessor) Enter(in ast.Node) (ast.Node, bool) { } else { hp.tableHints = append(hp.tableHints, ExtractTableHintsFromStmtNode(in, nil)) } - if _, ok := in.(*ast.SelectStmt); ok { - hp.selectCounter++ - } + hp.blockCounter++ case *ast.TableName: - if hp.selectCounter == 0 { + // Insert cases. + if hp.blockCounter == 0 { return in, false } if hp.bindHint2Ast { @@ -230,8 +229,9 @@ func (hp *hintProcessor) Enter(in ast.Node) (ast.Node, bool) { } func (hp *hintProcessor) Leave(in ast.Node) (ast.Node, bool) { - if _, ok := in.(*ast.SelectStmt); ok { - hp.selectCounter-- + switch in.(type) { + case *ast.SelectStmt, *ast.UpdateStmt, *ast.DeleteStmt: + hp.blockCounter-- } return in, true } From 93313cca33b28356831dfc7219fded2af49f933e Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Mon, 30 Nov 2020 21:18:28 +0800 Subject: [PATCH 198/229] expression: fix builtin IF truncation of type len (#20743) (#21144) Signed-off-by: ti-srebot --- expression/builtin_control.go | 13 +++++++++++-- expression/expr_to_pb_test.go | 4 ++-- expression/integration_test.go | 10 ++++++++++ 3 files changed, 23 insertions(+), 4 deletions(-) diff --git a/expression/builtin_control.go b/expression/builtin_control.go index 8e376147479a7..69b61323bc535 100644 --- a/expression/builtin_control.go +++ b/expression/builtin_control.go @@ -54,6 +54,14 @@ var ( _ builtinFunc = &builtinIfJSONSig{} ) +func maxlen(lhsFlen, rhsFlen int) int { + // -1 indicates that the length is unknown, such as the case for expressions. + if lhsFlen < 0 || rhsFlen < 0 { + return mysql.MaxRealWidth + } + return mathutil.Max(lhsFlen, rhsFlen) +} + // InferType4ControlFuncs infer result type for builtin IF, IFNULL, NULLIF, LEAD and LAG. func InferType4ControlFuncs(lhs, rhs *types.FieldType) *types.FieldType { resultFieldType := &types.FieldType{} @@ -111,9 +119,10 @@ func InferType4ControlFuncs(lhs, rhs *types.FieldType) *types.FieldType { if lhs.Decimal != types.UnspecifiedLength { rhsFlen -= rhs.Decimal } - resultFieldType.Flen = mathutil.Max(lhsFlen, rhsFlen) + resultFieldType.Decimal + 1 + flen := maxlen(lhsFlen, rhsFlen) + resultFieldType.Decimal + 1 // account for -1 len fields + resultFieldType.Flen = mathutil.Min(flen, mysql.MaxDecimalWidth) // make sure it doesn't overflow } else { - resultFieldType.Flen = mathutil.Max(lhs.Flen, rhs.Flen) + resultFieldType.Flen = maxlen(lhs.Flen, rhs.Flen) } } // Fix decimal for int and string. diff --git a/expression/expr_to_pb_test.go b/expression/expr_to_pb_test.go index 2517f0856f72a..395061224ca88 100644 --- a/expression/expr_to_pb_test.go +++ b/expression/expr_to_pb_test.go @@ -559,8 +559,8 @@ func (s *testEvaluatorSuite) TestControlFunc2Pb(c *C) { c.Assert(err, IsNil) jsons := []string{ "{\"tp\":10000,\"children\":[{\"tp\":201,\"val\":\"gAAAAAAAAAE=\",\"sig\":0,\"field_type\":{\"tp\":3,\"flag\":0,\"flen\":-1,\"decimal\":-1,\"collate\":63,\"charset\":\"\"}},{\"tp\":201,\"val\":\"gAAAAAAAAAI=\",\"sig\":0,\"field_type\":{\"tp\":3,\"flag\":0,\"flen\":-1,\"decimal\":-1,\"collate\":63,\"charset\":\"\"}},{\"tp\":201,\"val\":\"gAAAAAAAAAM=\",\"sig\":0,\"field_type\":{\"tp\":3,\"flag\":0,\"flen\":-1,\"decimal\":-1,\"collate\":63,\"charset\":\"\"}}],\"sig\":4208,\"field_type\":{\"tp\":3,\"flag\":128,\"flen\":-1,\"decimal\":0,\"collate\":63,\"charset\":\"\"}}", - "{\"tp\":10000,\"children\":[{\"tp\":201,\"val\":\"gAAAAAAAAAE=\",\"sig\":0,\"field_type\":{\"tp\":3,\"flag\":0,\"flen\":-1,\"decimal\":-1,\"collate\":63,\"charset\":\"\"}},{\"tp\":201,\"val\":\"gAAAAAAAAAI=\",\"sig\":0,\"field_type\":{\"tp\":3,\"flag\":0,\"flen\":-1,\"decimal\":-1,\"collate\":63,\"charset\":\"\"}},{\"tp\":201,\"val\":\"gAAAAAAAAAM=\",\"sig\":0,\"field_type\":{\"tp\":3,\"flag\":0,\"flen\":-1,\"decimal\":-1,\"collate\":63,\"charset\":\"\"}}],\"sig\":4107,\"field_type\":{\"tp\":3,\"flag\":128,\"flen\":-1,\"decimal\":0,\"collate\":63,\"charset\":\"binary\"}}", - "{\"tp\":10000,\"children\":[{\"tp\":201,\"val\":\"gAAAAAAAAAE=\",\"sig\":0,\"field_type\":{\"tp\":3,\"flag\":0,\"flen\":-1,\"decimal\":-1,\"collate\":63,\"charset\":\"\"}},{\"tp\":201,\"val\":\"gAAAAAAAAAI=\",\"sig\":0,\"field_type\":{\"tp\":3,\"flag\":0,\"flen\":-1,\"decimal\":-1,\"collate\":63,\"charset\":\"\"}}],\"sig\":4101,\"field_type\":{\"tp\":3,\"flag\":128,\"flen\":-1,\"decimal\":0,\"collate\":63,\"charset\":\"binary\"}}", + "{\"tp\":10000,\"children\":[{\"tp\":201,\"val\":\"gAAAAAAAAAE=\",\"sig\":0,\"field_type\":{\"tp\":3,\"flag\":0,\"flen\":-1,\"decimal\":-1,\"collate\":63,\"charset\":\"\"}},{\"tp\":201,\"val\":\"gAAAAAAAAAI=\",\"sig\":0,\"field_type\":{\"tp\":3,\"flag\":0,\"flen\":-1,\"decimal\":-1,\"collate\":63,\"charset\":\"\"}},{\"tp\":201,\"val\":\"gAAAAAAAAAM=\",\"sig\":0,\"field_type\":{\"tp\":3,\"flag\":0,\"flen\":-1,\"decimal\":-1,\"collate\":63,\"charset\":\"\"}}],\"sig\":4107,\"field_type\":{\"tp\":3,\"flag\":128,\"flen\":24,\"decimal\":0,\"collate\":63,\"charset\":\"binary\"}}", + "{\"tp\":10000,\"children\":[{\"tp\":201,\"val\":\"gAAAAAAAAAE=\",\"sig\":0,\"field_type\":{\"tp\":3,\"flag\":0,\"flen\":-1,\"decimal\":-1,\"collate\":63,\"charset\":\"\"}},{\"tp\":201,\"val\":\"gAAAAAAAAAI=\",\"sig\":0,\"field_type\":{\"tp\":3,\"flag\":0,\"flen\":-1,\"decimal\":-1,\"collate\":63,\"charset\":\"\"}}],\"sig\":4101,\"field_type\":{\"tp\":3,\"flag\":128,\"flen\":24,\"decimal\":0,\"collate\":63,\"charset\":\"binary\"}}", "null", } for i, pbExpr := range pbExprs { diff --git a/expression/integration_test.go b/expression/integration_test.go index c8e33d58d131f..2251c105a7a8f 100755 --- a/expression/integration_test.go +++ b/expression/integration_test.go @@ -7263,6 +7263,16 @@ func (s *testIntegrationSuite) TestIssue20180(c *C) { tk.MustQuery("select * from t where a > 1 and a = \"b\";").Check(testkit.Rows("b")) } +func (s *testIntegrationSuite) TestIssue20730(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk.MustExec("DROP TABLE IF EXISTS tmp;") + tk.MustExec("CREATE TABLE tmp (id int(11) NOT NULL,value int(1) NOT NULL,PRIMARY KEY (id))") + tk.MustExec("INSERT INTO tmp VALUES (1, 1),(2,2),(3,3),(4,4),(5,5)") + tk.MustExec("SET @sum := 10") + tk.MustQuery("SELECT @sum := IF(@sum=20,4,@sum + tmp.value) sum FROM tmp ORDER BY tmp.id").Check(testkit.Rows("11", "13", "16", "20", "4")) +} + func (s *testIntegrationSuite) TestIssue20860(c *C) { tk := testkit.NewTestKit(c, s.store) tk.MustExec("use test") From 4f049e5f25c327bf6c2f2c2cd8df9d842d2bdc32 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Mon, 30 Nov 2020 22:42:21 +0800 Subject: [PATCH 199/229] *: close transaction for all auto-committed SQLs (#21395) --- executor/simple_test.go | 10 ++++++++++ session/tidb.go | 2 +- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/executor/simple_test.go b/executor/simple_test.go index 2fba543b49309..d5c631d5b2458 100644 --- a/executor/simple_test.go +++ b/executor/simple_test.go @@ -57,6 +57,16 @@ func (s *testSuite3) TestDo(c *C) { tk := testkit.NewTestKit(c, s.store) tk.MustExec("do 1, @a:=1") tk.MustQuery("select @a").Check(testkit.Rows("1")) + + tk.MustExec("use test") + tk.MustExec("create table t (i int)") + tk.MustExec("insert into t values (1)") + tk2 := testkit.NewTestKit(c, s.store) + tk2.MustExec("use test") + tk.MustQuery("select * from t").Check(testkit.Rows("1")) + tk.MustExec("do @a := (select * from t where i = 1)") + tk2.MustExec("insert into t values (2)") + tk.MustQuery("select * from t").Check(testkit.Rows("1", "2")) } func (s *testSuite3) TestSetRoleAllCorner(c *C) { diff --git a/session/tidb.go b/session/tidb.go index 275f354f1c5f6..bfa883d84e58e 100644 --- a/session/tidb.go +++ b/session/tidb.go @@ -325,7 +325,6 @@ func runStmt(ctx context.Context, sctx sessionctx.Context, s sqlexec.Statement) } else { logutil.BgLogger().Error("get txn failed", zap.Error(err1)) } - err = finishStmt(ctx, se, err, s) } if rs != nil { @@ -336,6 +335,7 @@ func runStmt(ctx context.Context, sctx sessionctx.Context, s sqlexec.Statement) }, err } + err = finishStmt(ctx, se, err, s) if se.hasQuerySpecial() { // The special query will be handled later in handleQuerySpecial, // then should call the ExecStmt.FinishExecuteStmt to finish this statement. From 8a2b35f9a586fafcb8d4627168b3af4946abdf08 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Tue, 1 Dec 2020 11:13:46 +0800 Subject: [PATCH 200/229] expression, planner: fix decimal results for aggregate functions (#20017) (#20984) * cherry pick #20017 to release-4.0 Signed-off-by: ti-srebot * resolve conflicts Co-authored-by: dy <34701401+dyzsr@users.noreply.github.com> Co-authored-by: dongyan Co-authored-by: Yuanjia Zhang Co-authored-by: Yiding Cui --- executor/aggfuncs/aggfuncs.go | 4 +++ executor/aggfuncs/builder.go | 25 +++++++++++++ executor/aggfuncs/func_avg.go | 19 ++-------- executor/aggfuncs/func_first_row.go | 4 +++ executor/aggfuncs/func_max_min.go | 4 +++ executor/aggfuncs/func_sum.go | 4 +++ executor/aggregate_test.go | 38 ++++++++++++++++++++ expression/aggregation/base_func.go | 12 +++++++ planner/core/rule_inject_extra_projection.go | 1 + 9 files changed, 94 insertions(+), 17 deletions(-) diff --git a/executor/aggfuncs/aggfuncs.go b/executor/aggfuncs/aggfuncs.go index 7a4ad385f190c..a3054a255db1c 100644 --- a/executor/aggfuncs/aggfuncs.go +++ b/executor/aggfuncs/aggfuncs.go @@ -156,6 +156,10 @@ type baseAggFunc struct { // ordinal stores the ordinal of the columns in the output chunk, which is // used to append the final result of this function. ordinal int + + // frac stores digits of the fractional part of decimals, + // which makes the decimal be the result of type inferring. + frac int } func (*baseAggFunc) MergePartialResult(sctx sessionctx.Context, src, dst PartialResult) error { diff --git a/executor/aggfuncs/builder.go b/executor/aggfuncs/builder.go index 2b884ac3f00ed..6d4ca69fd56bf 100644 --- a/executor/aggfuncs/builder.go +++ b/executor/aggfuncs/builder.go @@ -17,6 +17,7 @@ import ( "fmt" "strconv" + "github.com/cznic/mathutil" "github.com/pingcap/parser/ast" "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/expression" @@ -242,6 +243,11 @@ func buildSum(ctx sessionctx.Context, aggFuncDesc *aggregation.AggFuncDesc, ordi ordinal: ordinal, }, } + frac := base.args[0].GetType().Decimal + if frac == -1 { + frac = mysql.MaxDecimalScale + } + base.frac = mathutil.Min(frac, mysql.MaxDecimalScale) switch aggFuncDesc.Mode { case aggregation.DedupMode: return nil @@ -270,6 +276,15 @@ func buildAvg(aggFuncDesc *aggregation.AggFuncDesc, ordinal int) AggFunc { args: aggFuncDesc.Args, ordinal: ordinal, } + frac := base.args[0].GetType().Decimal + if len(base.args) == 2 { + frac = base.args[1].GetType().Decimal + } + if frac == -1 { + frac = mysql.MaxDecimalScale + } + base.frac = mathutil.Min(frac, mysql.MaxDecimalScale) + switch aggFuncDesc.Mode { // Build avg functions which consume the original data and remove the // duplicated input of the same group. @@ -311,6 +326,11 @@ func buildFirstRow(aggFuncDesc *aggregation.AggFuncDesc, ordinal int) AggFunc { args: aggFuncDesc.Args, ordinal: ordinal, } + frac := base.args[0].GetType().Decimal + if frac == -1 { + frac = mysql.MaxDecimalScale + } + base.frac = mathutil.Min(frac, mysql.MaxDecimalScale) evalType, fieldType := aggFuncDesc.RetTp.EvalType(), aggFuncDesc.RetTp if fieldType.Tp == mysql.TypeBit { @@ -360,6 +380,11 @@ func buildMaxMin(aggFuncDesc *aggregation.AggFuncDesc, ordinal int, isMax bool) }, isMax: isMax, } + frac := base.args[0].GetType().Decimal + if frac == -1 { + frac = mysql.MaxDecimalScale + } + base.frac = mathutil.Min(frac, mysql.MaxDecimalScale) evalType, fieldType := aggFuncDesc.RetTp.EvalType(), aggFuncDesc.RetTp if fieldType.Tp == mysql.TypeBit { diff --git a/executor/aggfuncs/func_avg.go b/executor/aggfuncs/func_avg.go index 98155050c9958..01f7f1d774c53 100644 --- a/executor/aggfuncs/func_avg.go +++ b/executor/aggfuncs/func_avg.go @@ -14,8 +14,6 @@ package aggfuncs import ( - "github.com/cznic/mathutil" - "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/chunk" @@ -60,15 +58,7 @@ func (e *baseAvgDecimal) AppendFinalResult2Chunk(sctx sessionctx.Context, pr Par if err != nil { return err } - // Make the decimal be the result of type inferring. - frac := e.args[0].GetType().Decimal - if len(e.args) == 2 { - frac = e.args[1].GetType().Decimal - } - if frac == -1 { - frac = mysql.MaxDecimalScale - } - err = finalResult.Round(finalResult, mathutil.Min(frac, mysql.MaxDecimalScale), types.ModeHalfEven) + err = finalResult.Round(finalResult, e.frac, types.ModeHalfEven) if err != nil { return err } @@ -216,12 +206,7 @@ func (e *avgOriginal4DistinctDecimal) AppendFinalResult2Chunk(sctx sessionctx.Co if err != nil { return err } - // Make the decimal be the result of type inferring. - frac := e.args[0].GetType().Decimal - if frac == -1 { - frac = mysql.MaxDecimalScale - } - err = finalResult.Round(finalResult, mathutil.Min(frac, mysql.MaxDecimalScale), types.ModeHalfEven) + err = finalResult.Round(finalResult, e.frac, types.ModeHalfEven) if err != nil { return err } diff --git a/executor/aggfuncs/func_first_row.go b/executor/aggfuncs/func_first_row.go index e963c5e12ccf2..b80d3713ce6b5 100644 --- a/executor/aggfuncs/func_first_row.go +++ b/executor/aggfuncs/func_first_row.go @@ -444,6 +444,10 @@ func (e *firstRow4Decimal) AppendFinalResult2Chunk(sctx sessionctx.Context, pr P chk.AppendNull(e.ordinal) return nil } + err := p.val.Round(&p.val, e.frac, types.ModeHalfEven) + if err != nil { + return err + } chk.AppendMyDecimal(e.ordinal, &p.val) return nil } diff --git a/executor/aggfuncs/func_max_min.go b/executor/aggfuncs/func_max_min.go index a271887a442a4..7a4756a4cb936 100644 --- a/executor/aggfuncs/func_max_min.go +++ b/executor/aggfuncs/func_max_min.go @@ -361,6 +361,10 @@ func (e *maxMin4Decimal) AppendFinalResult2Chunk(sctx sessionctx.Context, pr Par chk.AppendNull(e.ordinal) return nil } + err := p.val.Round(&p.val, e.frac, types.ModeHalfEven) + if err != nil { + return err + } chk.AppendMyDecimal(e.ordinal, &p.val) return nil } diff --git a/executor/aggfuncs/func_sum.go b/executor/aggfuncs/func_sum.go index 26888c0cdca10..a4b96f4859ee9 100644 --- a/executor/aggfuncs/func_sum.go +++ b/executor/aggfuncs/func_sum.go @@ -153,6 +153,10 @@ func (e *sum4Decimal) AppendFinalResult2Chunk(sctx sessionctx.Context, pr Partia chk.AppendNull(e.ordinal) return nil } + err := p.val.Round(&p.val, e.frac, types.ModeHalfEven) + if err != nil { + return err + } chk.AppendMyDecimal(e.ordinal, &p.val) return nil } diff --git a/executor/aggregate_test.go b/executor/aggregate_test.go index 0d9b6b15d82fd..ad48bc68ae314 100644 --- a/executor/aggregate_test.go +++ b/executor/aggregate_test.go @@ -1117,3 +1117,41 @@ func (s *testSuiteAgg) TestIssue15958(c *C) { tk.MustQuery(`select sum(y) from t`).Check(testkit.Rows("6070")) tk.MustQuery(`select avg(y) from t`).Check(testkit.Rows("2023.3333")) } + +func (s *testSuiteAgg) TestIssue17216(c *C) { + tk := testkit.NewTestKitWithInit(c, s.store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t1") + tk.MustExec(`CREATE TABLE t1 ( + pk int(11) NOT NULL, + col1 decimal(40,20) DEFAULT NULL + )`) + tk.MustExec(`INSERT INTO t1 VALUES (2084,0.02040000000000000000),(35324,0.02190000000000000000),(43760,0.00510000000000000000),(46084,0.01400000000000000000),(46312,0.00560000000000000000),(61632,0.02730000000000000000),(94676,0.00660000000000000000),(102244,0.01810000000000000000),(113144,0.02140000000000000000),(157024,0.02750000000000000000),(157144,0.01750000000000000000),(182076,0.02370000000000000000),(188696,0.02330000000000000000),(833,0.00390000000000000000),(6701,0.00230000000000000000),(8533,0.01690000000000000000),(13801,0.01360000000000000000),(20797,0.00680000000000000000),(36677,0.00550000000000000000),(46305,0.01290000000000000000),(76113,0.00430000000000000000),(76753,0.02400000000000000000),(92393,0.01720000000000000000),(111733,0.02690000000000000000),(152757,0.00250000000000000000),(162393,0.02760000000000000000),(167169,0.00440000000000000000),(168097,0.01360000000000000000),(180309,0.01720000000000000000),(19918,0.02620000000000000000),(58674,0.01820000000000000000),(67454,0.01510000000000000000),(70870,0.02880000000000000000),(89614,0.02530000000000000000),(106742,0.00180000000000000000),(107886,0.01580000000000000000),(147506,0.02230000000000000000),(148366,0.01340000000000000000),(167258,0.01860000000000000000),(194438,0.00500000000000000000),(10307,0.02850000000000000000),(14539,0.02210000000000000000),(27703,0.00050000000000000000),(32495,0.00680000000000000000),(39235,0.01450000000000000000),(52379,0.01640000000000000000),(54551,0.01910000000000000000),(85659,0.02330000000000000000),(104483,0.02670000000000000000),(109911,0.02040000000000000000),(114523,0.02110000000000000000),(119495,0.02120000000000000000),(137603,0.01910000000000000000),(154031,0.02580000000000000000);`) + tk.MustQuery("SELECT count(distinct col1) FROM t1").Check(testkit.Rows("48")) +} + +func (s *testSuiteAgg) TestIssue19426(c *C) { + tk := testkit.NewTestKitWithInit(c, s.store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t") + tk.MustExec("create table t(a int primary key, b int)") + tk.MustExec("insert into t values (1, 11), (4, 44), (2, 22), (3, 33)") + tk.MustQuery("select sum(case when a <= 0 or a > 1000 then 0.0 else b end) from t"). + Check(testkit.Rows("110.0")) + tk.MustQuery("select avg(case when a <= 0 or a > 1000 then 0.0 else b end) from t"). + Check(testkit.Rows("27.50000")) + tk.MustQuery("select distinct (case when a <= 0 or a > 1000 then 0.0 else b end) v from t order by v"). + Check(testkit.Rows("11.0", "22.0", "33.0", "44.0")) + tk.MustQuery("select group_concat(case when a <= 0 or a > 1000 then 0.0 else b end order by -a) from t"). + Check(testkit.Rows("44.0,33.0,22.0,11.0")) + tk.MustQuery("select group_concat(a, b, case when a <= 0 or a > 1000 then 0.0 else b end order by -a) from t"). + Check(testkit.Rows("44444.0,33333.0,22222.0,11111.0")) + tk.MustQuery("select group_concat(distinct case when a <= 0 or a > 1000 then 0.0 else b end order by -a) from t"). + Check(testkit.Rows("44.0,33.0,22.0,11.0")) + tk.MustQuery("select max(case when a <= 0 or a > 1000 then 0.0 else b end) from t"). + Check(testkit.Rows("44.0")) + tk.MustQuery("select min(case when a <= 0 or a > 1000 then 0.0 else b end) from t"). + Check(testkit.Rows("11.0")) + tk.MustQuery("select a, b, sum(case when a < 1000 then b else 0.0 end) over (order by a) from t"). + Check(testkit.Rows("1 11 11.0", "2 22 33.0", "3 33 66.0", "4 44 110.0")) +} diff --git a/expression/aggregation/base_func.go b/expression/aggregation/base_func.go index c6cd1d9034a11..d514677ec26f5 100644 --- a/expression/aggregation/base_func.go +++ b/expression/aggregation/base_func.go @@ -346,6 +346,18 @@ var noNeedCastAggFuncs = map[string]struct{}{ ast.AggFuncJsonObjectAgg: {}, } +// WrapCastAsDecimalForAggArgs wraps the args of some specific aggregate functions +// with a cast as decimal function. See issue #19426 +func (a *baseFuncDesc) WrapCastAsDecimalForAggArgs(ctx sessionctx.Context) { + if a.Name == ast.AggFuncGroupConcat { + for i := 0; i < len(a.Args)-1; i++ { + if tp := a.Args[i].GetType(); tp.Tp == mysql.TypeNewDecimal { + a.Args[i] = expression.BuildCastFunction(ctx, a.Args[i], tp) + } + } + } +} + // WrapCastForAggArgs wraps the args of an aggregate function with a cast function. func (a *baseFuncDesc) WrapCastForAggArgs(ctx sessionctx.Context) { if len(a.Args) == 0 { diff --git a/planner/core/rule_inject_extra_projection.go b/planner/core/rule_inject_extra_projection.go index 2716c4fffa328..583d4d89256ff 100644 --- a/planner/core/rule_inject_extra_projection.go +++ b/planner/core/rule_inject_extra_projection.go @@ -65,6 +65,7 @@ func (pe *projInjector) inject(plan PhysicalPlan) PhysicalPlan { // since the types of the args are already the expected. func wrapCastForAggFuncs(sctx sessionctx.Context, aggFuncs []*aggregation.AggFuncDesc) { for i := range aggFuncs { + aggFuncs[i].WrapCastAsDecimalForAggArgs(sctx) if aggFuncs[i].Mode != aggregation.FinalMode && aggFuncs[i].Mode != aggregation.Partial2Mode { aggFuncs[i].WrapCastForAggArgs(sctx) } From 57c1148a46f81d1834e0fb3735db5fcdd6033ad7 Mon Sep 17 00:00:00 2001 From: lei yu Date: Tue, 1 Dec 2020 11:29:28 +0800 Subject: [PATCH 201/229] disable cast decimal as string push down to TiFlash (#21387) Co-authored-by: jebter Co-authored-by: ti-srebot <66930949+ti-srebot@users.noreply.github.com> --- expression/expr_to_pb_test.go | 7 ++++--- expression/expression.go | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/expression/expr_to_pb_test.go b/expression/expr_to_pb_test.go index 395061224ca88..e65d393a3fb92 100644 --- a/expression/expr_to_pb_test.go +++ b/expression/expr_to_pb_test.go @@ -689,10 +689,11 @@ func (s *testEvaluatorSuite) TestExprPushDownToFlash(c *C) { c.Assert(err, IsNil) exprs = append(exprs, function) + // TODO: Wait for TiFlash to fix CastDecimalAsString // CastDecimalAsString - function, err = NewFunction(mock.NewContext(), ast.Cast, types.NewFieldType(mysql.TypeString), decimalColumn) - c.Assert(err, IsNil) - exprs = append(exprs, function) + // function, err = NewFunction(mock.NewContext(), ast.Cast, types.NewFieldType(mysql.TypeString), decimalColumn) + // c.Assert(err, IsNil) + // exprs = append(exprs, function) // CastStringAsString function, err = NewFunction(mock.NewContext(), ast.Cast, types.NewFieldType(mysql.TypeString), stringColumn) diff --git a/expression/expression.go b/expression/expression.go index 35d4c6568a5fc..f8abe0a7a78c2 100644 --- a/expression/expression.go +++ b/expression/expression.go @@ -1180,7 +1180,7 @@ func scalarExprSupportedByFlash(function *ScalarFunction) bool { case tipb.ScalarFuncSig_CastIntAsInt, tipb.ScalarFuncSig_CastIntAsDecimal, tipb.ScalarFuncSig_CastIntAsString, tipb.ScalarFuncSig_CastIntAsTime, tipb.ScalarFuncSig_CastRealAsInt, tipb.ScalarFuncSig_CastRealAsDecimal, tipb.ScalarFuncSig_CastRealAsString, tipb.ScalarFuncSig_CastRealAsTime, tipb.ScalarFuncSig_CastStringAsInt, tipb.ScalarFuncSig_CastStringAsDecimal, tipb.ScalarFuncSig_CastStringAsString, tipb.ScalarFuncSig_CastStringAsTime, - tipb.ScalarFuncSig_CastDecimalAsInt, tipb.ScalarFuncSig_CastDecimalAsDecimal, tipb.ScalarFuncSig_CastDecimalAsString, tipb.ScalarFuncSig_CastDecimalAsTime, + tipb.ScalarFuncSig_CastDecimalAsInt, tipb.ScalarFuncSig_CastDecimalAsDecimal, tipb.ScalarFuncSig_CastDecimalAsTime, tipb.ScalarFuncSig_CastTimeAsInt, tipb.ScalarFuncSig_CastTimeAsDecimal, tipb.ScalarFuncSig_CastTimeAsTime: return true default: From 1d1280f271a95e11a539b0f7d4c4410c02816018 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Tue, 1 Dec 2020 13:04:48 +0800 Subject: [PATCH 202/229] executor: fix the display of large unsigned handle when show table regions (#21026) (#21224) Signed-off-by: ti-srebot --- executor/show_test.go | 22 ++++++++++++++++++ executor/split.go | 54 ++++++++++++++++++++++++++++--------------- 2 files changed, 57 insertions(+), 19 deletions(-) diff --git a/executor/show_test.go b/executor/show_test.go index eab48ac635125..1c3501b2e9be8 100644 --- a/executor/show_test.go +++ b/executor/show_test.go @@ -16,6 +16,7 @@ package executor_test import ( "context" "fmt" + "strings" . "github.com/pingcap/check" "github.com/pingcap/errors" @@ -891,6 +892,27 @@ func (s *testAutoRandomSuite) TestAutoRandomBase(c *C) { )) } +func (s *testAutoRandomSuite) TestAutoRandomWithLargeSignedShowTableRegions(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("create database if not exists auto_random_db;") + defer tk.MustExec("drop database if exists auto_random_db;") + tk.MustExec("use auto_random_db;") + tk.MustExec("drop table if exists t;") + + testutil.ConfigTestUtils.SetupAutoRandomTestConfig() + defer testutil.ConfigTestUtils.RestoreAutoRandomTestConfig() + tk.MustExec("create table t (a bigint unsigned auto_random primary key);") + tk.MustExec("set @@global.tidb_scatter_region=1;") + // 18446744073709541615 is MaxUint64 - 10000. + // 18446744073709551615 is the MaxUint64. + tk.MustQuery("split table t between (18446744073709541615) and (18446744073709551615) regions 2;"). + Check(testkit.Rows("1 1")) + startKey := tk.MustQuery("show table t regions;").Rows()[1][1].(string) + idx := strings.Index(startKey, "_r_") + c.Assert(idx == -1, IsFalse) + c.Assert(startKey[idx+3] == '-', IsFalse, Commentf("actual key: %s", startKey)) +} + func (s *testSuite5) TestShowEscape(c *C) { tk := testkit.NewTestKit(c, s.store) diff --git a/executor/split.go b/executor/split.go index f2d84bb6c668d..20f1aa09ede53 100755 --- a/executor/split.go +++ b/executor/split.go @@ -581,6 +581,11 @@ func getPhysicalTableRegions(physicalTableID int64, tableInfo *model.TableInfo, if uniqueRegionMap == nil { uniqueRegionMap = make(map[uint64]struct{}) } + // This is used to decode the int handle properly. + var hasUnsignedIntHandle bool + if pkInfo := tableInfo.GetPkColInfo(); pkInfo != nil { + hasUnsignedIntHandle = mysql.HasUnsignedFlag(pkInfo.Flag) + } // for record startKey, endKey := tablecodec.GetTableHandleKeyRange(physicalTableID) regionCache := tikvStore.GetRegionCache() @@ -590,7 +595,7 @@ func getPhysicalTableRegions(physicalTableID int64, tableInfo *model.TableInfo, } recordPrefix := tablecodec.GenTableRecordPrefix(physicalTableID) tablePrefix := tablecodec.GenTablePrefix(physicalTableID) - recordRegions, err := getRegionMeta(tikvStore, recordRegionMetas, uniqueRegionMap, tablePrefix, recordPrefix, nil, physicalTableID, 0) + recordRegions, err := getRegionMeta(tikvStore, recordRegionMetas, uniqueRegionMap, tablePrefix, recordPrefix, nil, physicalTableID, 0, hasUnsignedIntHandle) if err != nil { return nil, err } @@ -607,7 +612,7 @@ func getPhysicalTableRegions(physicalTableID int64, tableInfo *model.TableInfo, return nil, err } indexPrefix := tablecodec.EncodeTableIndexPrefix(physicalTableID, index.ID) - indexRegions, err := getRegionMeta(tikvStore, regionMetas, uniqueRegionMap, tablePrefix, recordPrefix, indexPrefix, physicalTableID, index.ID) + indexRegions, err := getRegionMeta(tikvStore, regionMetas, uniqueRegionMap, tablePrefix, recordPrefix, indexPrefix, physicalTableID, index.ID, hasUnsignedIntHandle) if err != nil { return nil, err } @@ -634,7 +639,7 @@ func getPhysicalIndexRegions(physicalTableID int64, indexInfo *model.IndexInfo, recordPrefix := tablecodec.GenTableRecordPrefix(physicalTableID) tablePrefix := tablecodec.GenTablePrefix(physicalTableID) indexPrefix := tablecodec.EncodeTableIndexPrefix(physicalTableID, indexInfo.ID) - indexRegions, err := getRegionMeta(tikvStore, regions, uniqueRegionMap, tablePrefix, recordPrefix, indexPrefix, physicalTableID, indexInfo.ID) + indexRegions, err := getRegionMeta(tikvStore, regions, uniqueRegionMap, tablePrefix, recordPrefix, indexPrefix, physicalTableID, indexInfo.ID, false) if err != nil { return nil, err } @@ -656,13 +661,15 @@ func checkRegionsStatus(store kv.SplittableStore, regions []regionMeta) error { return nil } -func decodeRegionsKey(regions []regionMeta, tablePrefix, recordPrefix, indexPrefix []byte, physicalTableID, indexID int64) { +func decodeRegionsKey(regions []regionMeta, tablePrefix, recordPrefix, indexPrefix []byte, + physicalTableID, indexID int64, hasUnsignedIntHandle bool) { d := ®ionKeyDecoder{ - physicalTableID: physicalTableID, - tablePrefix: tablePrefix, - recordPrefix: recordPrefix, - indexPrefix: indexPrefix, - indexID: indexID, + physicalTableID: physicalTableID, + tablePrefix: tablePrefix, + recordPrefix: recordPrefix, + indexPrefix: indexPrefix, + indexID: indexID, + hasUnsignedIntHandle: hasUnsignedIntHandle, } for i := range regions { regions[i].start = d.decodeRegionKey(regions[i].region.StartKey) @@ -671,11 +678,12 @@ func decodeRegionsKey(regions []regionMeta, tablePrefix, recordPrefix, indexPref } type regionKeyDecoder struct { - physicalTableID int64 - tablePrefix []byte - recordPrefix []byte - indexPrefix []byte - indexID int64 + physicalTableID int64 + tablePrefix []byte + recordPrefix []byte + indexPrefix []byte + indexID int64 + hasUnsignedIntHandle bool } func (d *regionKeyDecoder) decodeRegionKey(key []byte) string { @@ -685,9 +693,15 @@ func (d *regionKeyDecoder) decodeRegionKey(key []byte) string { if len(d.recordPrefix) == len(key) { return fmt.Sprintf("t_%d_r", d.physicalTableID) } - _, handle, err := codec.DecodeInt(key[len(d.recordPrefix):]) - if err == nil { - return fmt.Sprintf("t_%d_r_%d", d.physicalTableID, handle) + isIntHandle := len(key)-len(d.recordPrefix) == 8 + if isIntHandle { + _, handle, err := codec.DecodeInt(key[len(d.recordPrefix):]) + if err == nil { + if d.hasUnsignedIntHandle { + return fmt.Sprintf("t_%d_r_%d", d.physicalTableID, uint64(handle)) + } + return fmt.Sprintf("t_%d_r_%d", d.physicalTableID, handle) + } } } if len(d.tablePrefix) > 0 && bytes.HasPrefix(key, d.tablePrefix) { @@ -715,7 +729,9 @@ func (d *regionKeyDecoder) decodeRegionKey(key []byte) string { return fmt.Sprintf("%x", key) } -func getRegionMeta(tikvStore tikv.Storage, regionMetas []*tikv.Region, uniqueRegionMap map[uint64]struct{}, tablePrefix, recordPrefix, indexPrefix []byte, physicalTableID, indexID int64) ([]regionMeta, error) { +func getRegionMeta(tikvStore tikv.Storage, regionMetas []*tikv.Region, uniqueRegionMap map[uint64]struct{}, + tablePrefix, recordPrefix, indexPrefix []byte, physicalTableID, indexID int64, + hasUnsignedIntHandle bool) ([]regionMeta, error) { regions := make([]regionMeta, 0, len(regionMetas)) for _, r := range regionMetas { if _, ok := uniqueRegionMap[r.GetID()]; ok { @@ -732,7 +748,7 @@ func getRegionMeta(tikvStore tikv.Storage, regionMetas []*tikv.Region, uniqueReg if err != nil { return regions, err } - decodeRegionsKey(regions, tablePrefix, recordPrefix, indexPrefix, physicalTableID, indexID) + decodeRegionsKey(regions, tablePrefix, recordPrefix, indexPrefix, physicalTableID, indexID, hasUnsignedIntHandle) return regions, nil } From e47f8fce9bd240b6f20b62d6707219bfa7ca91ec Mon Sep 17 00:00:00 2001 From: cfzjywxk Date: Tue, 1 Dec 2020 13:22:58 +0800 Subject: [PATCH 203/229] test: stablize test case (#21336) --- session/pessimistic_test.go | 3 ++- store/tikv/2pc.go | 5 +++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/session/pessimistic_test.go b/session/pessimistic_test.go index a7c7ab1feb69f..589ebd56519a4 100644 --- a/session/pessimistic_test.go +++ b/session/pessimistic_test.go @@ -1815,7 +1815,8 @@ func (s *testPessimisticSuite) TestAmendForUniqueIndex(c *C) { err := tk2.ExecToErr("alter table t add unique index uk(c);") finishCh <- err }() - time.Sleep(100 * time.Millisecond) + // This sleep should not be too short to avoid schema version change after amend. + time.Sleep(350 * time.Millisecond) tk.MustExec("commit") err = <-finishCh c.Assert(err, IsNil) diff --git a/store/tikv/2pc.go b/store/tikv/2pc.go index fc1a3c2207f23..4a5fe18b125c1 100644 --- a/store/tikv/2pc.go +++ b/store/tikv/2pc.go @@ -1406,6 +1406,11 @@ func (c *twoPhaseCommitter) execute(ctx context.Context) (err error) { // If schema check failed between commitTS and newCommitTs, report schema change error. _, _, err = c.checkSchemaValid(ctx, newCommitTS, relatedSchemaChange.LatestInfoSchema, false) if err != nil { + logutil.Logger(ctx).Info("schema check after amend failed, it means the schema version changed again", + zap.Uint64("startTS", c.startTS), + zap.Uint64("amendTS", c.commitTS), + zap.Int64("amendedSchemaVersion", relatedSchemaChange.LatestInfoSchema.SchemaMetaVersion()), + zap.Uint64("newCommitTS", newCommitTS)) return errors.Trace(err) } commitTS = newCommitTS From 590558cb786f1a8a6c9aea1839d97705ef4bf82f Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Tue, 1 Dec 2020 14:55:18 +0800 Subject: [PATCH 204/229] session: fix mysql_list_fields leaking table info (#19554) (#21407) Signed-off-by: ti-srebot --- privilege/privileges/privileges_test.go | 10 ++++++++++ session/session.go | 13 +++++++++++++ 2 files changed, 23 insertions(+) diff --git a/privilege/privileges/privileges_test.go b/privilege/privileges/privileges_test.go index baa5aca1047bf..812e39be1b2aa 100644 --- a/privilege/privileges/privileges_test.go +++ b/privilege/privileges/privileges_test.go @@ -1082,6 +1082,16 @@ func (s *testPrivilegeSuite) TestUserTableConsistency(c *C) { tk.MustQuery(buf.String()).Check(testkit.Rows(res.String())) } +func (s *testPrivilegeSuite) TestFieldList(c *C) { // Issue #14237 List fields RPC + se := newSession(c, s.store, s.dbName) + mustExec(c, se, `CREATE USER 'tableaccess'@'localhost'`) + mustExec(c, se, `CREATE TABLE fieldlistt1 (a int)`) + c.Assert(se.Auth(&auth.UserIdentity{Username: "tableaccess", Hostname: "localhost"}, nil, nil), IsTrue) + _, err := se.FieldList("fieldlistt1") + message := "SELECT command denied to user 'tableaccess'@'localhost' for table 'fieldlistt1'" + c.Assert(strings.Contains(err.Error(), message), IsTrue) +} + func mustExec(c *C, se session.Session, sql string) { _, err := se.Execute(context.Background(), sql) c.Assert(err, IsNil) diff --git a/session/session.go b/session/session.go index 8fd4006063d52..11c51d376b767 100644 --- a/session/session.go +++ b/session/session.go @@ -360,6 +360,19 @@ func (s *session) FieldList(tableName string) ([]*ast.ResultField, error) { is := infoschema.GetInfoSchema(s) dbName := model.NewCIStr(s.GetSessionVars().CurrentDB) tName := model.NewCIStr(tableName) + pm := privilege.GetPrivilegeManager(s) + if pm != nil && s.sessionVars.User != nil { + if !pm.RequestVerification(s.sessionVars.ActiveRoles, dbName.O, tName.O, "", mysql.AllPrivMask) { + user := s.sessionVars.User + u := user.Username + h := user.Hostname + if len(user.AuthUsername) > 0 && len(user.AuthHostname) > 0 { + u = user.AuthUsername + h = user.AuthHostname + } + return nil, plannercore.ErrTableaccessDenied.GenWithStackByArgs("SELECT", u, h, tableName) + } + } table, err := is.TableByName(dbName, tName) if err != nil { return nil, err From f533a79253ff2b3b2d5077a259f1b28c7a1a313a Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Tue, 1 Dec 2020 17:10:48 +0800 Subject: [PATCH 205/229] expression: fix the `in` function get the wrong result if args is time type (#21293) (#21406) Signed-off-by: ti-srebot --- expression/builtin_other.go | 8 ++++---- expression/builtin_other_vec_generated.go | 2 +- expression/generator/other_vec.go | 6 ++++++ expression/integration_test.go | 9 +++++++++ 4 files changed, 20 insertions(+), 5 deletions(-) diff --git a/expression/builtin_other.go b/expression/builtin_other.go index 17642d186e161..67feff8cc2a96 100644 --- a/expression/builtin_other.go +++ b/expression/builtin_other.go @@ -472,12 +472,12 @@ func (b *builtinInDecimalSig) evalInt(row chunk.Row) (int64, bool, error) { // builtinInTimeSig see https://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html#function_in type builtinInTimeSig struct { baseInSig - hashSet map[types.Time]struct{} + hashSet map[types.CoreTime]struct{} } func (b *builtinInTimeSig) buildHashMapForConstArgs(ctx sessionctx.Context) error { b.nonConstArgs = []Expression{b.args[0]} - b.hashSet = make(map[types.Time]struct{}, len(b.args)-1) + b.hashSet = make(map[types.CoreTime]struct{}, len(b.args)-1) for i := 1; i < len(b.args); i++ { if b.args[i].ConstItem(b.ctx.GetSessionVars().StmtCtx) { val, isNull, err := b.args[i].EvalTime(ctx, chunk.Row{}) @@ -488,7 +488,7 @@ func (b *builtinInTimeSig) buildHashMapForConstArgs(ctx sessionctx.Context) erro b.hasNull = true continue } - b.hashSet[val] = struct{}{} + b.hashSet[val.CoreTime()] = struct{}{} } else { b.nonConstArgs = append(b.nonConstArgs, b.args[i]) } @@ -517,7 +517,7 @@ func (b *builtinInTimeSig) evalInt(row chunk.Row) (int64, bool, error) { args := b.args if len(b.hashSet) != 0 { args = b.nonConstArgs - if _, ok := b.hashSet[arg0]; ok { + if _, ok := b.hashSet[arg0.CoreTime()]; ok { return 1, false, nil } } diff --git a/expression/builtin_other_vec_generated.go b/expression/builtin_other_vec_generated.go index b19676230f6a7..e44f2f6759ca0 100644 --- a/expression/builtin_other_vec_generated.go +++ b/expression/builtin_other_vec_generated.go @@ -408,7 +408,7 @@ func (b *builtinInTimeSig) vecEvalInt(input *chunk.Chunk, result *chunk.Column) continue } arg0 := args0[i] - if _, ok := b.hashSet[arg0]; ok { + if _, ok := b.hashSet[arg0.CoreTime()]; ok { r64s[i] = 1 result.SetNull(i, false) } diff --git a/expression/generator/other_vec.go b/expression/generator/other_vec.go index 6c510b5912664..e04c629a53c3b 100644 --- a/expression/generator/other_vec.go +++ b/expression/generator/other_vec.go @@ -120,6 +120,7 @@ var builtinInTmpl = template.Must(template.New("builtinInTmpl").Parse(` {{ $InputString := (eq .Input.TypeName "String") }} {{ $InputFixed := ( .Input.Fixed ) }} {{ $UseHashKey := ( or (eq .Input.TypeName "Decimal") (eq .Input.TypeName "JSON") )}} +{{ $InputTime := (eq .Input.TypeName "Time") }} func (b *{{.SigName}}) vecEvalInt(input *chunk.Chunk, result *chunk.Column) error { n := input.NumRows() {{- template "BufAllocator" . }} @@ -188,6 +189,11 @@ func (b *{{.SigName}}) vecEvalInt(input *chunk.Chunk, result *chunk.Column) erro r64s[i] = 1 result.SetNull(i, false) } + {{- else if $InputTime }} + if _, ok := b.hashSet[arg0.CoreTime()]; ok { + r64s[i] = 1 + result.SetNull(i, false) + } {{- else }} if _, ok := b.hashSet[arg0]; ok { r64s[i] = 1 diff --git a/expression/integration_test.go b/expression/integration_test.go index 2251c105a7a8f..d047ae5ae8521 100755 --- a/expression/integration_test.go +++ b/expression/integration_test.go @@ -7282,6 +7282,15 @@ func (s *testIntegrationSuite) TestIssue20860(c *C) { c.Assert(tk.ExecToErr("update t set d = adddate(d, interval 1 day) where id < 10"), NotNil) } +func (s *testIntegrationSerialSuite) TestIssue21290(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t1;") + tk.MustExec("create table t1(a date);") + tk.MustExec("insert into t1 values (20100202);") + tk.MustQuery("select a in ('2020-02-02', 20100202) from t1;").Check(testkit.Rows("1")) +} + func (s *testIntegrationSuite) TestIssue11645(c *C) { defer s.cleanEnv(c) tk := testkit.NewTestKit(c, s.store) From 2862cd727b4a29c5623f99453fb8d6e7b448004d Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Wed, 2 Dec 2020 15:55:51 +0800 Subject: [PATCH 206/229] cherry pick #21396 to release-4.0 (#21432) --- metrics/grafana/tidb.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/metrics/grafana/tidb.json b/metrics/grafana/tidb.json index 6b12aae30fde5..25722461ea235 100644 --- a/metrics/grafana/tidb.json +++ b/metrics/grafana/tidb.json @@ -729,7 +729,7 @@ "steppedLine": false, "targets": [ { - "expr": "histogram_quantile(0.99, sum(rate(tidb_server_conn_idle_duration_seconds_bucket{in_txn='1'}[1m])) by (le,in_txn,instance))", + "expr": "histogram_quantile(0.99, sum(rate(tidb_server_conn_idle_duration_seconds_bucket{in_txn='1'}[1m])) by (le,in_txn))", "format": "time_series", "interval": "", "intervalFactor": 2, @@ -737,7 +737,7 @@ "refId": "A" }, { - "expr": "histogram_quantile(0.99, sum(rate(tidb_server_conn_idle_duration_seconds_bucket{in_txn='0'}[1m])) by (le,in_txn,instance))", + "expr": "histogram_quantile(0.99, sum(rate(tidb_server_conn_idle_duration_seconds_bucket{in_txn='0'}[1m])) by (le,in_txn))", "format": "time_series", "interval": "", "intervalFactor": 2, @@ -745,7 +745,7 @@ "refId": "B" }, { - "expr": "histogram_quantile(0.90, sum(rate(tidb_server_conn_idle_duration_seconds_bucket{in_txn='1'}[1m])) by (le,in_txn,instance))", + "expr": "histogram_quantile(0.90, sum(rate(tidb_server_conn_idle_duration_seconds_bucket{in_txn='1'}[1m])) by (le,in_txn))", "format": "time_series", "interval": "", "intervalFactor": 2, @@ -753,7 +753,7 @@ "refId": "C" }, { - "expr": "histogram_quantile(0.90, sum(rate(tidb_server_conn_idle_duration_seconds_bucket{in_txn='0'}[1m])) by (le,in_txn,instance))", + "expr": "histogram_quantile(0.90, sum(rate(tidb_server_conn_idle_duration_seconds_bucket{in_txn='0'}[1m])) by (le,in_txn))", "format": "time_series", "interval": "", "intervalFactor": 2, @@ -761,7 +761,7 @@ "refId": "D" }, { - "expr": "histogram_quantile(0.80, sum(rate(tidb_server_conn_idle_duration_seconds_bucket{in_txn='1'}[1m])) by (le,in_txn,instance))", + "expr": "histogram_quantile(0.80, sum(rate(tidb_server_conn_idle_duration_seconds_bucket{in_txn='1'}[1m])) by (le,in_txn))", "format": "time_series", "interval": "", "intervalFactor": 2, @@ -769,7 +769,7 @@ "refId": "E" }, { - "expr": "histogram_quantile(0.80, sum(rate(tidb_server_conn_idle_duration_seconds_bucket{in_txn='0'}[1m])) by (le,in_txn,instance))", + "expr": "histogram_quantile(0.80, sum(rate(tidb_server_conn_idle_duration_seconds_bucket{in_txn='0'}[1m])) by (le,in_txn))", "format": "time_series", "interval": "", "intervalFactor": 2, From d2552961a52719982eb8f78f44fa52b06235ba20 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Fri, 4 Dec 2020 20:15:48 +0800 Subject: [PATCH 207/229] *: fix cancel query slow_query doesn't release resource and tiny optimize (#21456) (#21496) Signed-off-by: ti-srebot Signed-off-by: crazycs520 --- executor/benchmark_test.go | 35 +++++++++++++++++ executor/slow_query.go | 78 +++++++++++++++++++++++++------------ executor/slow_query_test.go | 4 +- 3 files changed, 91 insertions(+), 26 deletions(-) diff --git a/executor/benchmark_test.go b/executor/benchmark_test.go index 040f8c5153775..32439a2eed1b2 100644 --- a/executor/benchmark_test.go +++ b/executor/benchmark_test.go @@ -17,7 +17,9 @@ import ( "context" "encoding/base64" "fmt" + "io/ioutil" "math/rand" + "os" "sort" "strings" "sync" @@ -1675,3 +1677,36 @@ func BenchmarkSortExec(b *testing.B) { }) } } + +func BenchmarkReadLastLinesOfHugeLine(b *testing.B) { + // step 1. initial a huge line log file + hugeLine := make([]byte, 1024*1024*10) + for i := range hugeLine { + hugeLine[i] = 'a' + byte(i%26) + } + fileName := "tidb.log" + err := ioutil.WriteFile(fileName, hugeLine, 0644) + if err != nil { + b.Fatal(err) + } + file, err := os.OpenFile(fileName, os.O_RDONLY, os.ModePerm) + if err != nil { + b.Fatal(err) + } + defer func() { + file.Close() + os.Remove(fileName) + }() + stat, _ := file.Stat() + filesize := stat.Size() + b.ResetTimer() + for i := 0; i < b.N; i++ { + _, n, err := readLastLines(context.Background(), file, filesize) + if err != nil { + b.Fatal(err) + } + if n != len(hugeLine) { + b.Fatalf("len %v, expected: %v", n, len(hugeLine)) + } + } +} diff --git a/executor/slow_query.go b/executor/slow_query.go index d31a1e2ff9d32..de8fa81089fa1 100755 --- a/executor/slow_query.go +++ b/executor/slow_query.go @@ -68,7 +68,7 @@ type slowQueryRetriever struct { func (e *slowQueryRetriever) retrieve(ctx context.Context, sctx sessionctx.Context) ([][]types.Datum, error) { if !e.initialized { - err := e.initialize(sctx) + err := e.initialize(ctx, sctx) if err != nil { return nil, err } @@ -95,7 +95,7 @@ func (e *slowQueryRetriever) retrieve(ctx context.Context, sctx sessionctx.Conte return retRows, nil } -func (e *slowQueryRetriever) initialize(sctx sessionctx.Context) error { +func (e *slowQueryRetriever) initialize(ctx context.Context, sctx sessionctx.Context) error { var err error var hasProcessPriv bool if pm := privilege.GetPrivilegeManager(sctx); pm != nil { @@ -112,7 +112,7 @@ func (e *slowQueryRetriever) initialize(sctx sessionctx.Context) error { e.checker.endTime = types.NewTime(types.FromGoTime(e.extractor.EndTime), mysql.TypeDatetime, types.MaxFsp) } e.initialized = true - e.files, err = e.getAllFiles(sctx, sctx.GetSessionVars().SlowQueryFile) + e.files, err = e.getAllFiles(ctx, sctx, sctx.GetSessionVars().SlowQueryFile) return err } @@ -243,12 +243,15 @@ type offset struct { length int } -func (e *slowQueryRetriever) getBatchLog(reader *bufio.Reader, offset *offset, num int) ([]string, error) { +func (e *slowQueryRetriever) getBatchLog(ctx context.Context, reader *bufio.Reader, offset *offset, num int) ([]string, error) { var line string log := make([]string, 0, num) var err error for i := 0; i < num; i++ { for { + if isCtxDone(ctx) { + return nil, ctx.Err() + } e.fileLine++ lineByte, err := getOneLine(reader) if err != nil { @@ -290,9 +293,9 @@ func (e *slowQueryRetriever) parseSlowLog(ctx context.Context, sctx sessionctx.C defer close(ch) for { startTime := time.Now() - log, err := e.getBatchLog(reader, &offset, logNum) + log, err := e.getBatchLog(ctx, reader, &offset, logNum) if err != nil { - e.parsedSlowLogCh <- parsedSlowLog{nil, err} + e.sendParsedSlowLogCh(ctx, parsedSlowLog{nil, err}) break } if len(log) == 0 { @@ -306,8 +309,8 @@ func (e *slowQueryRetriever) parseSlowLog(ctx context.Context, sctx sessionctx.C ch <- 1 go func() { defer wg.Done() - result, err := e.parseLog(sctx, log, start) - e.parsedSlowLogCh <- parsedSlowLog{result, err} + result, err := e.parseLog(ctx, sctx, log, start) + e.sendParsedSlowLogCh(ctx, parsedSlowLog{result, err}) <-ch }() offset.offset = e.fileLine @@ -321,6 +324,14 @@ func (e *slowQueryRetriever) parseSlowLog(ctx context.Context, sctx sessionctx.C wg.Wait() } +func (e *slowQueryRetriever) sendParsedSlowLogCh(ctx context.Context, re parsedSlowLog) { + select { + case e.parsedSlowLogCh <- re: + case <-ctx.Done(): + return + } +} + func getLineIndex(offset offset, index int) int { var fileLine int if offset.length <= index { @@ -331,7 +342,7 @@ func getLineIndex(offset offset, index int) int { return fileLine } -func (e *slowQueryRetriever) parseLog(ctx sessionctx.Context, log []string, offset offset) (data [][]types.Datum, err error) { +func (e *slowQueryRetriever) parseLog(ctx context.Context, sctx sessionctx.Context, log []string, offset offset) (data [][]types.Datum, err error) { start := time.Now() defer func() { if r := recover(); r != nil { @@ -347,15 +358,18 @@ func (e *slowQueryRetriever) parseLog(ctx sessionctx.Context, log []string, offs } }) var st *slowQueryTuple - tz := ctx.GetSessionVars().Location() + tz := sctx.GetSessionVars().Location() startFlag := false for index, line := range log { + if isCtxDone(ctx) { + return nil, ctx.Err() + } fileLine := getLineIndex(offset, index) if !startFlag && strings.HasPrefix(line, variable.SlowLogStartPrefixStr) { st = &slowQueryTuple{} valid, err := st.setFieldValue(tz, variable.SlowLogTimeStr, line[len(variable.SlowLogStartPrefixStr):], fileLine, e.checker) if err != nil { - ctx.GetSessionVars().StmtCtx.AppendWarning(err) + sctx.GetSessionVars().StmtCtx.AppendWarning(err) continue } if valid { @@ -372,7 +386,7 @@ func (e *slowQueryRetriever) parseLog(ctx sessionctx.Context, log []string, offs value := line[len(variable.SlowLogUserAndHostStr+variable.SlowLogSpaceMarkStr):] valid, err := st.setFieldValue(tz, variable.SlowLogUserAndHostStr, value, fileLine, e.checker) if err != nil { - ctx.GetSessionVars().StmtCtx.AppendWarning(err) + sctx.GetSessionVars().StmtCtx.AppendWarning(err) continue } if !valid { @@ -381,7 +395,7 @@ func (e *slowQueryRetriever) parseLog(ctx sessionctx.Context, log []string, offs } else if strings.HasPrefix(line, variable.SlowLogCopBackoffPrefix) { valid, err := st.setFieldValue(tz, variable.SlowLogBackoffDetail, line, fileLine, e.checker) if err != nil { - ctx.GetSessionVars().StmtCtx.AppendWarning(err) + sctx.GetSessionVars().StmtCtx.AppendWarning(err) continue } if !valid { @@ -396,7 +410,7 @@ func (e *slowQueryRetriever) parseLog(ctx sessionctx.Context, log []string, offs } valid, err := st.setFieldValue(tz, field, fieldValues[i+1], fileLine, e.checker) if err != nil { - ctx.GetSessionVars().StmtCtx.AppendWarning(err) + sctx.GetSessionVars().StmtCtx.AppendWarning(err) continue } if !valid { @@ -414,7 +428,7 @@ func (e *slowQueryRetriever) parseLog(ctx sessionctx.Context, log []string, offs // Get the sql string, and mark the start flag to false. _, err := st.setFieldValue(tz, variable.SlowLogQuerySQLStr, string(hack.Slice(line)), fileLine, e.checker) if err != nil { - ctx.GetSessionVars().StmtCtx.AppendWarning(err) + sctx.GetSessionVars().StmtCtx.AppendWarning(err) continue } if e.checker.hasPrivilege(st.user) { @@ -768,7 +782,7 @@ type logFile struct { } // getAllFiles is used to get all slow-log needed to parse, it is exported for test. -func (e *slowQueryRetriever) getAllFiles(sctx sessionctx.Context, logFilePath string) ([]logFile, error) { +func (e *slowQueryRetriever) getAllFiles(ctx context.Context, sctx sessionctx.Context, logFilePath string) ([]logFile, error) { totalFileNum := 0 if e.stats != nil { startTime := time.Now() @@ -811,6 +825,9 @@ func (e *slowQueryRetriever) getAllFiles(sctx sessionctx.Context, logFilePath st if !strings.HasPrefix(path, prefix) { return nil } + if isCtxDone(ctx) { + return ctx.Err() + } totalFileNum++ file, err := os.OpenFile(path, os.O_RDONLY, os.ModePerm) if err != nil { @@ -823,7 +840,7 @@ func (e *slowQueryRetriever) getAllFiles(sctx sessionctx.Context, logFilePath st } }() // Get the file start time. - fileStartTime, err := e.getFileStartTime(file) + fileStartTime, err := e.getFileStartTime(ctx, file) if err != nil { return handleErr(err) } @@ -833,7 +850,7 @@ func (e *slowQueryRetriever) getAllFiles(sctx sessionctx.Context, logFilePath st } // Get the file end time. - fileEndTime, err := e.getFileEndTime(file) + fileEndTime, err := e.getFileEndTime(ctx, file) if err != nil { return handleErr(err) } @@ -866,7 +883,7 @@ func (e *slowQueryRetriever) getAllFiles(sctx sessionctx.Context, logFilePath st return logFiles, err } -func (e *slowQueryRetriever) getFileStartTime(file *os.File) (time.Time, error) { +func (e *slowQueryRetriever) getFileStartTime(ctx context.Context, file *os.File) (time.Time, error) { var t time.Time _, err := file.Seek(0, io.SeekStart) if err != nil { @@ -887,6 +904,9 @@ func (e *slowQueryRetriever) getFileStartTime(file *os.File) (time.Time, error) if maxNum <= 0 { break } + if isCtxDone(ctx) { + return t, ctx.Err() + } } return t, errors.Errorf("malform slow query file %v", file.Name()) } @@ -937,7 +957,7 @@ func (s *slowQueryRuntimeStats) Tp() int { return execdetails.TpSlowQueryRuntimeStat } -func (e *slowQueryRetriever) getFileEndTime(file *os.File) (time.Time, error) { +func (e *slowQueryRetriever) getFileEndTime(ctx context.Context, file *os.File) (time.Time, error) { var t time.Time var tried int stat, err := file.Stat() @@ -947,7 +967,7 @@ func (e *slowQueryRetriever) getFileEndTime(file *os.File) (time.Time, error) { endCursor := stat.Size() maxLineNum := 128 for { - lines, readBytes, err := readLastLines(file, endCursor) + lines, readBytes, err := readLastLines(ctx, file, endCursor) if err != nil { return t, err } @@ -965,24 +985,31 @@ func (e *slowQueryRetriever) getFileEndTime(file *os.File) (time.Time, error) { if tried >= maxLineNum { break } + if isCtxDone(ctx) { + return t, ctx.Err() + } } return t, errors.Errorf("invalid slow query file %v", file.Name()) } +const maxReadCacheSize = 1024 * 1024 * 64 + // Read lines from the end of a file // endCursor initial value should be the filesize -func readLastLines(file *os.File, endCursor int64) ([]string, int, error) { +func readLastLines(ctx context.Context, file *os.File, endCursor int64) ([]string, int, error) { var lines []byte var firstNonNewlinePos int var cursor = endCursor + var size int64 = 2048 for { // stop if we are at the beginning // check it in the start to avoid read beyond the size if cursor <= 0 { break } - - var size int64 = 4096 + if size < maxReadCacheSize { + size = size * 2 + } if cursor < size { size = cursor } @@ -1014,6 +1041,9 @@ func readLastLines(file *os.File, endCursor int64) ([]string, int, error) { if firstNonNewlinePos > 0 { break } + if isCtxDone(ctx) { + return nil, 0, ctx.Err() + } } finalStr := string(lines[firstNonNewlinePos:]) return strings.Split(strings.ReplaceAll(finalStr, "\r\n", "\n"), "\n"), len(finalStr), nil diff --git a/executor/slow_query_test.go b/executor/slow_query_test.go index a4fec998f47cc..64c63a08e5f94 100644 --- a/executor/slow_query_test.go +++ b/executor/slow_query_test.go @@ -48,7 +48,7 @@ func parseLog(retriever *slowQueryRetriever, sctx sessionctx.Context, reader *bu func parseSlowLog(sctx sessionctx.Context, reader *bufio.Reader, logNum int) ([][]types.Datum, error) { retriever := &slowQueryRetriever{} // Ignore the error is ok for test. - terror.Log(retriever.initialize(sctx)) + terror.Log(retriever.initialize(context.Background(), sctx)) rows, err := parseLog(retriever, sctx, reader, logNum) return rows, err } @@ -440,7 +440,7 @@ select 7;` } retriever := &slowQueryRetriever{extractor: extractor} - err := retriever.initialize(sctx) + err := retriever.initialize(context.Background(), sctx) c.Assert(err, IsNil) comment := Commentf("case id: %v", i) c.Assert(retriever.files, HasLen, len(cas.files), comment) From 189ef5e66b5dea5fb8ee2bfa2353b83797b5b629 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Mon, 7 Dec 2020 18:33:12 +0800 Subject: [PATCH 208/229] expression: set flen to -1 when cast float to string (#21530) --- executor/executor_test.go | 11 +++++++++++ expression/builtin_cast.go | 4 ++++ expression/typeinfer_test.go | 12 ++++++------ 3 files changed, 21 insertions(+), 6 deletions(-) diff --git a/executor/executor_test.go b/executor/executor_test.go index 4d1258924bd3a..39067c4064115 100644 --- a/executor/executor_test.go +++ b/executor/executor_test.go @@ -6414,3 +6414,14 @@ func (s *testSuite) TestOOMActionPriority(c *C) { } c.Assert(action.GetPriority(), Equals, int64(memory.DefLogPriority)) } + +func (s *testSuite) Test17780(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t0") + tk.MustExec("create table t0 (c0 double)") + tk.MustExec("insert into t0 values (1e30)") + tk.MustExec("update t0 set c0=0 where t0.c0 like 0") + // the update should not affect c0 + tk.MustQuery("select count(*) from t0 where c0 = 0").Check(testkit.Rows("0")) +} diff --git a/expression/builtin_cast.go b/expression/builtin_cast.go index d0b8537b0c115..a7bd79ebaacb9 100644 --- a/expression/builtin_cast.go +++ b/expression/builtin_cast.go @@ -1872,6 +1872,10 @@ func WrapWithCastAsString(ctx sessionctx.Context, expr Expression) Expression { if exprTp.EvalType() == types.ETInt { argLen = mysql.MaxIntWidth } + // because we can't control the length of cast(float as char) for now, we can't determine the argLen + if exprTp.Tp == mysql.TypeFloat || exprTp.Tp == mysql.TypeDouble { + argLen = -1 + } tp := types.NewFieldType(mysql.TypeVarString) tp.Charset, tp.Collate = charset.GetDefaultCharsetAndCollate() tp.Flen, tp.Decimal = argLen, types.UnspecifiedLength diff --git a/expression/typeinfer_test.go b/expression/typeinfer_test.go index b1c2be753779b..382e7a4047ebf 100644 --- a/expression/typeinfer_test.go +++ b/expression/typeinfer_test.go @@ -279,8 +279,8 @@ func (s *testInferTypeSuite) createTestCase4StrFuncs() []typeInferTestCase { {"elt(c_int_d, c_char, c_char, c_char)", mysql.TypeVarString, charset.CharsetUTF8MB4, 0, 20, types.UnspecifiedLength}, {"elt(c_int_d, c_char, c_char, c_binary)", mysql.TypeVarString, charset.CharsetBin, mysql.BinaryFlag, 20, types.UnspecifiedLength}, {"elt(c_int_d, c_char, c_int_d)", mysql.TypeVarString, charset.CharsetUTF8MB4, 0, 20, types.UnspecifiedLength}, - {"elt(c_int_d, c_char, c_double_d, c_int_d)", mysql.TypeVarString, charset.CharsetUTF8MB4, 0, 22, types.UnspecifiedLength}, - {"elt(c_int_d, c_char, c_double_d, c_int_d, c_binary)", mysql.TypeVarString, charset.CharsetBin, mysql.BinaryFlag, 22, types.UnspecifiedLength}, + {"elt(c_int_d, c_char, c_double_d, c_int_d)", mysql.TypeVarString, charset.CharsetUTF8MB4, 0, 20, types.UnspecifiedLength}, + {"elt(c_int_d, c_char, c_double_d, c_int_d, c_binary)", mysql.TypeVarString, charset.CharsetBin, mysql.BinaryFlag, 20, types.UnspecifiedLength}, {"locate(c_char, c_char)", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxIntWidth, 0}, {"locate(c_binary, c_binary)", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxIntWidth, 0}, @@ -405,8 +405,8 @@ func (s *testInferTypeSuite) createTestCase4StrFuncs() []typeInferTestCase { {"reverse(c_int_d )", mysql.TypeVarString, charset.CharsetUTF8MB4, 0, 20, types.UnspecifiedLength}, {"reverse(c_bigint_d )", mysql.TypeVarString, charset.CharsetUTF8MB4, 0, 20, types.UnspecifiedLength}, - {"reverse(c_float_d )", mysql.TypeVarString, charset.CharsetUTF8MB4, 0, 12, types.UnspecifiedLength}, - {"reverse(c_double_d )", mysql.TypeVarString, charset.CharsetUTF8MB4, 0, 22, types.UnspecifiedLength}, + {"reverse(c_float_d )", mysql.TypeVarString, charset.CharsetUTF8MB4, 0, -1, types.UnspecifiedLength}, + {"reverse(c_double_d )", mysql.TypeVarString, charset.CharsetUTF8MB4, 0, -1, types.UnspecifiedLength}, {"reverse(c_decimal )", mysql.TypeVarString, charset.CharsetUTF8MB4, 0, 8, types.UnspecifiedLength}, {"reverse(c_char )", mysql.TypeVarString, charset.CharsetUTF8MB4, 0, 20, types.UnspecifiedLength}, {"reverse(c_varchar )", mysql.TypeVarString, charset.CharsetUTF8MB4, 0, 20, types.UnspecifiedLength}, @@ -456,8 +456,8 @@ func (s *testInferTypeSuite) createTestCase4StrFuncs() []typeInferTestCase { {"quote(c_int_d )", mysql.TypeVarString, charset.CharsetUTF8MB4, 0, 42, types.UnspecifiedLength}, {"quote(c_bigint_d )", mysql.TypeVarString, charset.CharsetUTF8MB4, 0, 42, types.UnspecifiedLength}, - {"quote(c_float_d )", mysql.TypeVarString, charset.CharsetUTF8MB4, 0, 26, types.UnspecifiedLength}, - {"quote(c_double_d )", mysql.TypeVarString, charset.CharsetUTF8MB4, 0, 46, types.UnspecifiedLength}, + {"quote(c_float_d )", mysql.TypeVarString, charset.CharsetUTF8MB4, 0, 0, types.UnspecifiedLength}, + {"quote(c_double_d )", mysql.TypeVarString, charset.CharsetUTF8MB4, 0, 0, types.UnspecifiedLength}, {"convert(c_double_d using utf8mb4)", mysql.TypeLongBlob, charset.CharsetUTF8MB4, 0, mysql.MaxBlobWidth, types.UnspecifiedLength}, {"convert(c_binary using utf8mb4)", mysql.TypeLongBlob, charset.CharsetUTF8MB4, 0, mysql.MaxBlobWidth, types.UnspecifiedLength}, From b24975d13b0c76b021b1060879fa6bb9be51d3d3 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Tue, 8 Dec 2020 15:12:51 +0800 Subject: [PATCH 209/229] executor: do not read from lock cache when snapshot read (#21529) (#21539) --- executor/batch_point_get.go | 6 +++++- executor/point_get.go | 10 ++++++---- executor/update_test.go | 24 ++++++++++++++++++++++++ 3 files changed, 35 insertions(+), 5 deletions(-) diff --git a/executor/batch_point_get.go b/executor/batch_point_get.go index 934dfdb1be892..165cb5bb078b3 100644 --- a/executor/batch_point_get.go +++ b/executor/batch_point_get.go @@ -157,7 +157,11 @@ func (e *BatchPointGetExec) initialize(ctx context.Context) error { snapshot.SetOption(kv.TaskID, e.ctx.GetSessionVars().StmtCtx.TaskID) var batchGetter kv.BatchGetter = snapshot if sessVars.InTxn() { - batchGetter = kv.NewBufferBatchGetter(txn.GetMemBuffer(), &PessimisticLockCacheGetter{txnCtx: txnCtx}, snapshot) + if e.lock { + batchGetter = kv.NewBufferBatchGetter(txn.GetMemBuffer(), &PessimisticLockCacheGetter{txnCtx: txnCtx}, snapshot) + } else { + batchGetter = kv.NewBufferBatchGetter(txn.GetMemBuffer(), nil, snapshot) + } } var handleVals map[string][]byte diff --git a/executor/point_get.go b/executor/point_get.go index 4f48ff4e0784e..d1d0b8e11c574 100644 --- a/executor/point_get.go +++ b/executor/point_get.go @@ -304,10 +304,12 @@ func (e *PointGetExecutor) get(ctx context.Context, key kv.Key) ([]byte, error) return nil, err } // key does not exist in mem buffer, check the lock cache - var ok bool - val, ok = e.ctx.GetSessionVars().TxnCtx.GetKeyInPessimisticLockCache(key) - if ok { - return val, nil + if e.lock { + var ok bool + val, ok = e.ctx.GetSessionVars().TxnCtx.GetKeyInPessimisticLockCache(key) + if ok { + return val, nil + } } // fallthrough to snapshot get. } diff --git a/executor/update_test.go b/executor/update_test.go index 257ebb2a9ae28..1e6559dcf9ccd 100644 --- a/executor/update_test.go +++ b/executor/update_test.go @@ -235,3 +235,27 @@ func (s *testUpdateSuite) TestUpdateMultiDatabaseTable(c *C) { tk.MustExec("create table test2.t(a int, b int generated always as (a+1) virtual)") tk.MustExec("update t, test2.t set test.t.a=1") } + +func (s *testPointGetSuite) TestIssue21447(c *C) { + tk1, tk2 := testkit.NewTestKit(c, s.store), testkit.NewTestKit(c, s.store) + tk1.MustExec("use test") + tk2.MustExec("use test") + + tk1.MustExec("drop table if exists t1") + tk1.MustExec("create table t1(id int primary key, name varchar(40))") + tk1.MustExec("insert into t1 values(1, 'abc')") + + tk1.MustExec("begin pessimistic") + tk2.MustExec("begin pessimistic") + tk2.MustExec("update t1 set name='xyz' where id=1") + tk2.CheckExecResult(1, 0) + tk2.MustQuery("select * from t1 where id = 1").Check(testkit.Rows("1 xyz")) + tk2.MustExec("commit") + tk1.MustExec("update t1 set name='xyz' where id=1") + tk1.CheckExecResult(0, 0) + tk1.MustQuery("select * from t1 where id = 1").Check(testkit.Rows("1 abc")) + tk1.MustQuery("select * from t1 where id = 1 for update").Check(testkit.Rows("1 xyz")) + tk1.MustQuery("select * from t1 where id in (1, 2)").Check(testkit.Rows("1 abc")) + tk1.MustQuery("select * from t1 where id in (1, 2) for update").Check(testkit.Rows("1 xyz")) + tk1.MustExec("commit") +} From 46b0a4665b4dec5049c695f977d75fbcfc29a781 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Tue, 8 Dec 2020 18:12:23 +0800 Subject: [PATCH 210/229] coprocessor: Support changing maxRanges (#21542) (#21548) * cherry pick #21542 to release-4.0 Signed-off-by: ti-srebot * Update config.toml.example * Update go.sum Co-authored-by: Wenxuan --- config/config.go | 3 ++ config/config.toml.example | 2 ++ store/tikv/coprocessor.go | 4 +-- store/tikv/coprocessor_cache.go | 20 ++++++++++++-- store/tikv/coprocessor_cache_test.go | 41 ++++++++++++++++++++-------- 5 files changed, 54 insertions(+), 16 deletions(-) diff --git a/config/config.go b/config/config.go index ded71b33d7b9d..8fba743a81721 100644 --- a/config/config.go +++ b/config/config.go @@ -489,6 +489,8 @@ type CoprocessorCache struct { Enable bool `toml:"enable" json:"enable"` // The capacity in MB of the cache. CapacityMB float64 `toml:"capacity-mb" json:"capacity-mb"` + // Only cache requests that containing small number of ranges. May to be changed in future. + AdmissionMaxRanges uint64 `toml:"admission-max-ranges" json:"admission-max-ranges"` // Only cache requests whose result set is small. AdmissionMaxResultMB float64 `toml:"admission-max-result-mb" json:"admission-max-result-mb"` // Only cache requests takes notable time to process. @@ -665,6 +667,7 @@ var defaultConf = Config{ CoprCache: CoprocessorCache{ Enable: false, CapacityMB: 1000, + AdmissionMaxRanges: 500, AdmissionMaxResultMB: 10, AdmissionMinProcessMs: 5, }, diff --git a/config/config.toml.example b/config/config.toml.example index 359dc4a5abab6..15d9157665b98 100644 --- a/config/config.toml.example +++ b/config/config.toml.example @@ -386,6 +386,8 @@ enable = false # The capacity in MB of the cache. capacity-mb = 1000.0 +# Only cache small requests. Zero means no limits for requests. +admission-max-ranges = 500 # Only cache requests whose result set is small. admission-max-result-mb = 10.0 # Only cache requests takes notable time to process. diff --git a/store/tikv/coprocessor.go b/store/tikv/coprocessor.go index 11077346c0c53..af72f56d95e93 100644 --- a/store/tikv/coprocessor.go +++ b/store/tikv/coprocessor.go @@ -849,7 +849,7 @@ func (worker *copIteratorWorker) handleTaskOnce(bo *Backoffer, task *copTask, ch // If there are many ranges, it is very likely to be a TableLookupRequest. They are not worth to cache since // computing is not the main cost. Ignore such requests directly to avoid slowly building the cache key. - if task.cmdType == tikvrpc.CmdCop && worker.store.coprCache != nil && worker.req.Cacheable && len(copReq.Ranges) < 10 { + if task.cmdType == tikvrpc.CmdCop && worker.store.coprCache != nil && worker.req.Cacheable && worker.store.coprCache.CheckRequestAdmission(len(copReq.Ranges)) { cKey, err := coprCacheBuildKey(&copReq) if err == nil { cacheKey = cKey @@ -1169,7 +1169,7 @@ func (worker *copIteratorWorker) handleCopResponse(bo *Backoffer, rpcCtx *RPCCon } else { // Cache not hit or cache hit but not valid: update the cache if the response can be cached. if cacheKey != nil && resp.pbResp.CanBeCached && resp.pbResp.CacheLastVersion > 0 { - if worker.store.coprCache.CheckAdmission(resp.pbResp.Data.Size(), resp.detail.ProcessTime) { + if worker.store.coprCache.CheckResponseAdmission(resp.pbResp.Data.Size(), resp.detail.ProcessTime) { data := make([]byte, len(resp.pbResp.Data)) copy(data, resp.pbResp.Data) diff --git a/store/tikv/coprocessor_cache.go b/store/tikv/coprocessor_cache.go index 771f75b96ec47..1dc258428c307 100644 --- a/store/tikv/coprocessor_cache.go +++ b/store/tikv/coprocessor_cache.go @@ -29,6 +29,7 @@ import ( type coprCache struct { cache *ristretto.Cache + admissionMaxRanges int admissionMaxSize int admissionMinProcessTime time.Duration } @@ -81,6 +82,7 @@ func newCoprCache(config *config.CoprocessorCache) (*coprCache, error) { } c := coprCache{ cache: cache, + admissionMaxRanges: int(config.AdmissionMaxRanges), admissionMaxSize: int(maxEntityInBytes), admissionMinProcessTime: time.Duration(config.AdmissionMinProcessMs) * time.Millisecond, } @@ -158,8 +160,19 @@ func (c *coprCache) Get(key []byte) *coprCacheValue { return typedValue } -// CheckAdmission checks whether an item is worth caching. -func (c *coprCache) CheckAdmission(dataSize int, processTime time.Duration) bool { +// CheckRequestAdmission checks whether a response item is worth caching. +func (c *coprCache) CheckRequestAdmission(ranges int) bool { + if c == nil { + return false + } + if c.admissionMaxRanges != 0 && ranges > c.admissionMaxRanges { + return false + } + return true +} + +// CheckResponseAdmission checks whether a response item is worth caching. +func (c *coprCache) CheckResponseAdmission(dataSize int, processTime time.Duration) bool { if c == nil { return false } @@ -173,7 +186,8 @@ func (c *coprCache) CheckAdmission(dataSize int, processTime time.Duration) bool } // Set inserts an item to the cache. -// It is recommended to call `CheckAdmission` before inserting the item to the cache. +// It is recommended to call `CheckRequestAdmission` and `CheckResponseAdmission` before inserting +// the item to the cache. func (c *coprCache) Set(key []byte, value *coprCacheValue) bool { if c == nil { return false diff --git a/store/tikv/coprocessor_cache_test.go b/store/tikv/coprocessor_cache_test.go index 98b094a6e2168..d5ab05c605d7b 100644 --- a/store/tikv/coprocessor_cache_test.go +++ b/store/tikv/coprocessor_cache_test.go @@ -83,7 +83,7 @@ func (s *testCoprocessorSuite) TestDisable(c *C) { v2 := cache.Get([]byte("foo")) c.Assert(v2, IsNil) - v = cache.CheckAdmission(1024, time.Second*5) + v = cache.CheckResponseAdmission(1024, time.Second*5) c.Assert(v, Equals, false) cache, err = newCoprCache(&config.CoprocessorCache{Enable: true, CapacityMB: 0, AdmissionMaxResultMB: 1}) @@ -104,34 +104,53 @@ func (s *testCoprocessorSuite) TestAdmission(c *C) { c.Assert(err, IsNil) c.Assert(cache, NotNil) - v := cache.CheckAdmission(0, 0) + v := cache.CheckRequestAdmission(0) + c.Assert(v, Equals, true) + + v = cache.CheckRequestAdmission(1000) + c.Assert(v, Equals, true) + + v = cache.CheckResponseAdmission(0, 0) c.Assert(v, Equals, false) - v = cache.CheckAdmission(0, 4*time.Millisecond) + v = cache.CheckResponseAdmission(0, 4*time.Millisecond) c.Assert(v, Equals, false) - v = cache.CheckAdmission(0, 5*time.Millisecond) + v = cache.CheckResponseAdmission(0, 5*time.Millisecond) c.Assert(v, Equals, false) - v = cache.CheckAdmission(1, 0) + v = cache.CheckResponseAdmission(1, 0) c.Assert(v, Equals, false) - v = cache.CheckAdmission(1, 4*time.Millisecond) + v = cache.CheckResponseAdmission(1, 4*time.Millisecond) c.Assert(v, Equals, false) - v = cache.CheckAdmission(1, 5*time.Millisecond) + v = cache.CheckResponseAdmission(1, 5*time.Millisecond) c.Assert(v, Equals, true) - v = cache.CheckAdmission(1024, 5*time.Millisecond) + v = cache.CheckResponseAdmission(1024, 5*time.Millisecond) c.Assert(v, Equals, true) - v = cache.CheckAdmission(1024*1024, 5*time.Millisecond) + v = cache.CheckResponseAdmission(1024*1024, 5*time.Millisecond) c.Assert(v, Equals, true) - v = cache.CheckAdmission(1024*1024+1, 5*time.Millisecond) + v = cache.CheckResponseAdmission(1024*1024+1, 5*time.Millisecond) c.Assert(v, Equals, false) - v = cache.CheckAdmission(1024*1024+1, 4*time.Millisecond) + v = cache.CheckResponseAdmission(1024*1024+1, 4*time.Millisecond) + c.Assert(v, Equals, false) + + cache, err = newCoprCache(&config.CoprocessorCache{Enable: true, AdmissionMaxRanges: 5, AdmissionMinProcessMs: 5, AdmissionMaxResultMB: 1, CapacityMB: 1}) + c.Assert(err, IsNil) + c.Assert(cache, NotNil) + + v = cache.CheckRequestAdmission(0) + c.Assert(v, Equals, true) + + v = cache.CheckRequestAdmission(5) + c.Assert(v, Equals, true) + + v = cache.CheckRequestAdmission(6) c.Assert(v, Equals, false) } From c3468f1eb9f6110168877e977f1a4ef8a15df7cb Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Wed, 9 Dec 2020 15:50:53 +0800 Subject: [PATCH 211/229] executor: open childExec during execution for UnionExec (#21561) (#21598) --- executor/executor.go | 43 +++++++++++++++++++++++++++++++++++---- executor/executor_test.go | 30 +++++++++++++++++++++++++++ store/tikv/snapshot.go | 4 ++++ 3 files changed, 73 insertions(+), 4 deletions(-) diff --git a/executor/executor.go b/executor/executor.go index b072ce1c2fc02..8109ffcc16a15 100644 --- a/executor/executor.go +++ b/executor/executor.go @@ -28,6 +28,7 @@ import ( "github.com/cznic/mathutil" "github.com/opentracing/opentracing-go" "github.com/pingcap/errors" + "github.com/pingcap/failpoint" "github.com/pingcap/parser/ast" "github.com/pingcap/parser/auth" "github.com/pingcap/parser/model" @@ -1426,6 +1427,12 @@ type UnionExec struct { results []*chunk.Chunk wg sync.WaitGroup initialized bool + mu struct { + *sync.Mutex + maxOpenedChildID int + } + + childInFlightForTest int32 } // unionWorkerResult stores the result for a union worker. @@ -1445,12 +1452,11 @@ func (e *UnionExec) waitAllFinished() { // Open implements the Executor Open interface. func (e *UnionExec) Open(ctx context.Context) error { - if err := e.baseExecutor.Open(ctx); err != nil { - return err - } e.stopFetchData.Store(false) e.initialized = false e.finished = make(chan struct{}) + e.mu.Mutex = &sync.Mutex{} + e.mu.maxOpenedChildID = -1 return nil } @@ -1496,6 +1502,19 @@ func (e *UnionExec) resultPuller(ctx context.Context, workerID int) { e.wg.Done() }() for childID := range e.childIDChan { + e.mu.Lock() + if childID > e.mu.maxOpenedChildID { + e.mu.maxOpenedChildID = childID + } + e.mu.Unlock() + if err := e.children[childID].Open(ctx); err != nil { + result.err = err + e.stopFetchData.Store(true) + e.resultPool <- result + } + failpoint.Inject("issue21441", func() { + atomic.AddInt32(&e.childInFlightForTest, 1) + }) for { if e.stopFetchData.Load().(bool) { return @@ -1510,12 +1529,20 @@ func (e *UnionExec) resultPuller(ctx context.Context, workerID int) { e.resourcePools[workerID] <- result.chk break } + failpoint.Inject("issue21441", func() { + if int(atomic.LoadInt32(&e.childInFlightForTest)) > e.concurrency { + panic("the count of child in flight is larger than e.concurrency unexpectedly") + } + }) e.resultPool <- result if result.err != nil { e.stopFetchData.Store(true) return } } + failpoint.Inject("issue21441", func() { + atomic.AddInt32(&e.childInFlightForTest, -1) + }) } } @@ -1554,7 +1581,15 @@ func (e *UnionExec) Close() error { for range e.childIDChan { } } - return e.baseExecutor.Close() + // We do not need to acquire the e.mu.Lock since all the resultPuller can be + // promised to exit when reaching here (e.childIDChan been closed). + var firstErr error + for i := 0; i <= e.mu.maxOpenedChildID; i++ { + if err := e.children[i].Close(); err != nil && firstErr == nil { + firstErr = err + } + } + return firstErr } // ResetContextOfStmt resets the StmtContext and session variables. diff --git a/executor/executor_test.go b/executor/executor_test.go index 39067c4064115..0d21d69fd877f 100644 --- a/executor/executor_test.go +++ b/executor/executor_test.go @@ -6415,6 +6415,36 @@ func (s *testSuite) TestOOMActionPriority(c *C) { c.Assert(action.GetPriority(), Equals, int64(memory.DefLogPriority)) } +func (s *testSuite) TestIssue21441(c *C) { + failpoint.Enable("github.com/pingcap/tidb/executor/issue21441", `return`) + defer failpoint.Disable("github.com/pingcap/tidb/executor/issue21441") + + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t") + tk.MustExec("create table t(a int)") + tk.MustExec(`insert into t values(1),(2),(3)`) + tk.Se.GetSessionVars().InitChunkSize = 1 + tk.Se.GetSessionVars().MaxChunkSize = 1 + sql := ` +select a from t union all +select a from t union all +select a from t union all +select a from t union all +select a from t union all +select a from t union all +select a from t union all +select a from t` + tk.MustQuery(sql).Sort().Check(testkit.Rows( + "1", "1", "1", "1", "1", "1", "1", "1", + "2", "2", "2", "2", "2", "2", "2", "2", + "3", "3", "3", "3", "3", "3", "3", "3", + )) + + tk.MustQuery("select a from (" + sql + ") t order by a limit 4").Check(testkit.Rows("1", "1", "1", "1")) + tk.MustQuery("select a from (" + sql + ") t order by a limit 7, 4").Check(testkit.Rows("1", "2", "2", "2")) +} + func (s *testSuite) Test17780(c *C) { tk := testkit.NewTestKit(c, s.store) tk.MustExec("use test") diff --git a/store/tikv/snapshot.go b/store/tikv/snapshot.go index 553981e4b6e7a..05d0a3afbc196 100644 --- a/store/tikv/snapshot.go +++ b/store/tikv/snapshot.go @@ -470,11 +470,15 @@ func (s *tikvSnapshot) IterReverse(k kv.Key) (kv.Iterator, error) { func (s *tikvSnapshot) SetOption(opt kv.Option, val interface{}) { switch opt { case kv.ReplicaRead: + s.mu.Lock() s.replicaRead = val.(kv.ReplicaReadType) + s.mu.Unlock() case kv.Priority: s.priority = kvPriorityToCommandPri(val.(int)) case kv.TaskID: + s.mu.Lock() s.taskID = val.(uint64) + s.mu.Unlock() case kv.CollectRuntimeStats: s.mu.Lock() s.mu.stats = val.(*SnapshotRuntimeStats) From 0176f7ce07aee7b5c140ca202c94a6e9993a1908 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Wed, 9 Dec 2020 20:06:05 +0800 Subject: [PATCH 212/229] store: add RLock when reading tikvSnapshot.mu.stats (#21606) (#21613) --- store/tikv/snapshot.go | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/store/tikv/snapshot.go b/store/tikv/snapshot.go index 05d0a3afbc196..f2b22c5a2f94d 100644 --- a/store/tikv/snapshot.go +++ b/store/tikv/snapshot.go @@ -264,12 +264,14 @@ func (s *tikvSnapshot) batchGetSingleRegion(bo *Backoffer, batch batchKeys, coll minCommitTSPushed: &s.minCommitTSPushed, Client: s.store.client, } + s.mu.RLock() if s.mu.stats != nil { cli.Stats = make(map[tikvrpc.CmdType]*RPCRuntimeStats) defer func() { s.mergeRegionRequestStats(cli.Stats) }() } + s.mu.RUnlock() pending := batch.keys for { @@ -391,12 +393,14 @@ func (s *tikvSnapshot) get(ctx context.Context, bo *Backoffer, k kv.Key) ([]byte Client: s.store.client, resolveLite: true, } + s.mu.RLock() if s.mu.stats != nil { cli.Stats = make(map[tikvrpc.CmdType]*RPCRuntimeStats) defer func() { s.mergeRegionRequestStats(cli.Stats) }() } + s.mu.RUnlock() req := tikvrpc.NewReplicaReadRequest(tikvrpc.CmdGet, &pb.GetRequest{ @@ -602,9 +606,12 @@ func prettyWriteKey(buf *bytes.Buffer, key []byte) { } func (s *tikvSnapshot) recordBackoffInfo(bo *Backoffer) { + s.mu.RLock() if s.mu.stats == nil || bo.totalSleep == 0 { + s.mu.RUnlock() return } + s.mu.RUnlock() s.mu.Lock() defer s.mu.Unlock() if s.mu.stats == nil { From a62d379557ba4cb0267f983ad7211e15e7776e23 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Thu, 10 Dec 2020 13:44:51 +0800 Subject: [PATCH 213/229] store: use RLock when reading snapshot.replicaRead snapshot.taskID (#21627) (#21632) Signed-off-by: ti-srebot --- go.mod | 2 +- store/tikv/scan.go | 6 ++++-- store/tikv/snapshot.go | 31 +++++++++++++++++-------------- 3 files changed, 22 insertions(+), 17 deletions(-) diff --git a/go.mod b/go.mod index d77a4e9666f09..61cfe39e1a1b6 100644 --- a/go.mod +++ b/go.mod @@ -35,7 +35,7 @@ require ( github.com/pingcap/kvproto v0.0.0-20200907074027-32a3a0accf7d github.com/pingcap/log v0.0.0-20201112100606-8f1e84a3abc8 github.com/pingcap/parser v0.0.0-20201130080042-c3ddfec58248 - github.com/pingcap/sysutil v0.0.0-20201130064824-f0c8aa6a6966 + github.com/pingcap/sysutil v0.0.0-20201130064824-f0c8aa6a6966 github.com/pingcap/tidb-tools v4.0.6-0.20200828085514-03575b185007+incompatible github.com/pingcap/tipb v0.0.0-20200618092958-4fad48b4c8c3 github.com/prometheus/client_golang v1.5.1 diff --git a/store/tikv/scan.go b/store/tikv/scan.go index e6afc8c081031..56b6ed4f30462 100644 --- a/store/tikv/scan.go +++ b/store/tikv/scan.go @@ -199,11 +199,13 @@ func (s *Scanner) getData(bo *Backoffer) error { sreq.EndKey = reqStartKey sreq.Reverse = true } - req := tikvrpc.NewReplicaReadRequest(tikvrpc.CmdScan, sreq, s.snapshot.replicaRead, &s.snapshot.replicaReadSeed, pb.Context{ + s.snapshot.mu.RLock() + req := tikvrpc.NewReplicaReadRequest(tikvrpc.CmdScan, sreq, s.snapshot.mu.replicaRead, &s.snapshot.replicaReadSeed, pb.Context{ Priority: s.snapshot.priority, NotFillCache: s.snapshot.notFillCache, - TaskId: s.snapshot.taskID, + TaskId: s.snapshot.mu.taskID, }) + s.snapshot.mu.RUnlock() resp, err := sender.SendReq(bo, req, loc.Region, ReadTimeoutMedium) if err != nil { return errors.Trace(err) diff --git a/store/tikv/snapshot.go b/store/tikv/snapshot.go index f2b22c5a2f94d..15fb0d07cc9b6 100644 --- a/store/tikv/snapshot.go +++ b/store/tikv/snapshot.go @@ -59,9 +59,7 @@ type tikvSnapshot struct { syncLog bool keyOnly bool vars *kv.Variables - replicaRead kv.ReplicaReadType replicaReadSeed uint32 - taskID uint64 minCommitTSPushed // Cache the result of BatchGet. @@ -73,9 +71,11 @@ type tikvSnapshot struct { // It's OK as long as there are no zero-byte values in the protocol. mu struct { sync.RWMutex - cached map[string][]byte - cachedSize int - stats *SnapshotRuntimeStats + cached map[string][]byte + cachedSize int + stats *SnapshotRuntimeStats + replicaRead kv.ReplicaReadType + taskID uint64 } } @@ -275,14 +275,16 @@ func (s *tikvSnapshot) batchGetSingleRegion(bo *Backoffer, batch batchKeys, coll pending := batch.keys for { + s.mu.RLock() req := tikvrpc.NewReplicaReadRequest(tikvrpc.CmdBatchGet, &pb.BatchGetRequest{ Keys: pending, Version: s.version.Ver, - }, s.replicaRead, &s.replicaReadSeed, pb.Context{ + }, s.mu.replicaRead, &s.replicaReadSeed, pb.Context{ Priority: s.priority, NotFillCache: s.notFillCache, - TaskId: s.taskID, + TaskId: s.mu.taskID, }) + s.mu.RUnlock() resp, _, _, err := cli.SendReqCtx(bo, req, batch.region, ReadTimeoutMedium, kv.TiKV, "") @@ -400,17 +402,16 @@ func (s *tikvSnapshot) get(ctx context.Context, bo *Backoffer, k kv.Key) ([]byte s.mergeRegionRequestStats(cli.Stats) }() } - s.mu.RUnlock() - req := tikvrpc.NewReplicaReadRequest(tikvrpc.CmdGet, &pb.GetRequest{ Key: k, Version: s.version.Ver, - }, s.replicaRead, &s.replicaReadSeed, pb.Context{ + }, s.mu.replicaRead, &s.replicaReadSeed, pb.Context{ Priority: s.priority, NotFillCache: s.notFillCache, - TaskId: s.taskID, + TaskId: s.mu.taskID, }) + s.mu.RUnlock() for { loc, err := s.store.regionCache.LocateKey(bo, k) if err != nil { @@ -475,13 +476,13 @@ func (s *tikvSnapshot) SetOption(opt kv.Option, val interface{}) { switch opt { case kv.ReplicaRead: s.mu.Lock() - s.replicaRead = val.(kv.ReplicaReadType) + s.mu.replicaRead = val.(kv.ReplicaReadType) s.mu.Unlock() case kv.Priority: s.priority = kvPriorityToCommandPri(val.(int)) case kv.TaskID: s.mu.Lock() - s.taskID = val.(uint64) + s.mu.taskID = val.(uint64) s.mu.Unlock() case kv.CollectRuntimeStats: s.mu.Lock() @@ -494,7 +495,9 @@ func (s *tikvSnapshot) SetOption(opt kv.Option, val interface{}) { func (s *tikvSnapshot) DelOption(opt kv.Option) { switch opt { case kv.ReplicaRead: - s.replicaRead = kv.ReplicaReadLeader + s.mu.Lock() + s.mu.replicaRead = kv.ReplicaReadLeader + s.mu.Unlock() case kv.CollectRuntimeStats: s.mu.Lock() s.mu.stats = nil From 27ecc338536a8ce58f2c2813ca543c5262fe5b23 Mon Sep 17 00:00:00 2001 From: cfzjywxk Date: Thu, 10 Dec 2020 20:09:53 +0800 Subject: [PATCH 214/229] txn: fix the possible regression for retry (#21571) Signed-off-by: lysu --- executor/executor_test.go | 28 ++++++++++++++++++++++++++++ session/session.go | 22 +++++++++++++++++----- 2 files changed, 45 insertions(+), 5 deletions(-) diff --git a/executor/executor_test.go b/executor/executor_test.go index 0d21d69fd877f..884cc65db4c5a 100644 --- a/executor/executor_test.go +++ b/executor/executor_test.go @@ -6455,3 +6455,31 @@ func (s *testSuite) Test17780(c *C) { // the update should not affect c0 tk.MustQuery("select count(*) from t0 where c0 = 0").Check(testkit.Rows("0")) } + +func (s *testSuite) TestTxnRetry(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk2 := testkit.NewTestKit(c, s.store) + tk.MustExec("use test;") + tk2.MustExec("use test;") + tk.MustExec("drop table if exists t;") + tk.MustExec("create table t (a int);") + tk.MustExec("insert into t values (1)") + tk.MustExec("set @@tidb_disable_txn_auto_retry=0;") + tk.MustExec("set autocommit=0;") + tk.MustQuery("select * from t;").Check(testkit.Rows("1")) + tk.MustExec("SET SQL_SELECT_LIMIT=DEFAULT;") + + tk2.MustExec("update t set a=2") + + tk.MustExec("update t set a=3") + tk.MustExec("commit") + tk.MustQuery("select * from t").Check(testkit.Rows("3")) + + // Check retry will activate the txn immediately. + tk.MustExec("set @var=10") + tk.MustExec("update t set a=@var") + tk2.MustExec("update t set a=2") + tk.MustExec("set @var=7") + tk.MustExec("commit") + tk.MustQuery("select * from t").Check(testkit.Rows("10")) +} diff --git a/session/session.go b/session/session.go index 11c51d376b767..798a08a125148 100644 --- a/session/session.go +++ b/session/session.go @@ -656,9 +656,19 @@ func (s *session) retry(ctx context.Context, maxCnt uint) (err error) { orgStartTS := sessVars.TxnCtx.StartTS label := s.getSQLLabel() for { - err = s.NewTxn(ctx) - if err != nil { - return err + if len(nh.history) > 1 { + err = s.NewTxn(ctx) + if err != nil { + return err + } + pessTxnConf := config.GetGlobalConfig().PessimisticTxn + if pessTxnConf.Enable { + if s.sessionVars.TxnMode == ast.Pessimistic { + s.sessionVars.TxnCtx.IsPessimistic = true + } + } + } else { + s.PrepareTxnCtx(ctx) } s.sessionVars.RetryInfo.ResetOffset() for i, sr := range nh.history { @@ -682,7 +692,8 @@ func (s *session) retry(ctx context.Context, maxCnt uint) (err error) { zap.Int64("schemaVersion", schemaVersion), zap.Uint("retryCnt", retryCnt), zap.Int("queryNum", i), - zap.String("sql", sql)) + zap.String("sql", sql), + zap.Bool("isPessimistic", s.GetSessionVars().TxnCtx.IsPessimistic)) } else { logutil.Logger(ctx).Warn("retrying", zap.Int64("schemaVersion", schemaVersion), @@ -704,7 +715,8 @@ func (s *session) retry(ctx context.Context, maxCnt uint) (err error) { } logutil.Logger(ctx).Warn("transaction association", zap.Uint64("retrying txnStartTS", s.GetSessionVars().TxnCtx.StartTS), - zap.Uint64("original txnStartTS", orgStartTS)) + zap.Uint64("original txnStartTS", orgStartTS), + zap.Bool("isPessimistic", s.GetSessionVars().TxnCtx.IsPessimistic)) failpoint.Inject("preCommitHook", func() { hook, ok := ctx.Value("__preCommitHook").(func()) if ok { From 641e229ff138d555194e9269e54a073418c23200 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Fri, 11 Dec 2020 16:59:06 +0800 Subject: [PATCH 215/229] server: fix float fmt returned to mysql client (#21660) (#21667) --- expression/integration_test.go | 4 ++++ server/util.go | 4 ++-- server/util_test.go | 14 +++++++++++++- 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/expression/integration_test.go b/expression/integration_test.go index d047ae5ae8521..21f7165daa2d2 100755 --- a/expression/integration_test.go +++ b/expression/integration_test.go @@ -554,6 +554,10 @@ func (s *testIntegrationSuite2) TestMathBuiltin(c *C) { result.Check(testkit.Rows("123 123.5 123.46 123.456 123.4560 120 100 0 0")) result = tk.MustQuery("SELECT ROUND(123456E-3, 0), ROUND(123456E-3, 1), ROUND(123456E-3, 2), ROUND(123456E-3, 3), ROUND(123456E-3, 4), ROUND(123456E-3, -1), ROUND(123456E-3, -2), ROUND(123456E-3, -3), ROUND(123456E-3, -4);") result.Check(testkit.Rows("123 123.5 123.46 123.456 123.456 120 100 0 0")) // TODO: Column 5 should be 123.4560 + result = tk.MustQuery("SELECT ROUND(1e14, 1), ROUND(1e15, 1), ROUND(1e308, 1)") + result.Check(testkit.Rows("100000000000000 1000000000000000 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000")) + result = tk.MustQuery("SELECT ROUND(1e-14, 1), ROUND(1e-15, 1), ROUND(1e-308, 1)") + result.Check(testkit.Rows("0 0 0")) // for truncate result = tk.MustQuery("SELECT truncate(123, -2), truncate(123, 2), truncate(123, 1), truncate(123, -1);") diff --git a/server/util.go b/server/util.go index d041318783e95..c50d8f2c934da 100644 --- a/server/util.go +++ b/server/util.go @@ -380,9 +380,9 @@ func appendFormatFloat(in []byte, fVal float64, prec, bitSize int) []byte { } isEFormat := false if bitSize == 32 { - isEFormat = (prec == types.UnspecifiedLength && (float32(absVal) >= expFormatBig || (float32(absVal) != 0 && float32(absVal) < expFormatSmall))) + isEFormat = float32(absVal) >= expFormatBig || (float32(absVal) != 0 && float32(absVal) < expFormatSmall) } else { - isEFormat = (prec == types.UnspecifiedLength && (absVal >= expFormatBig || (absVal != 0 && absVal < expFormatSmall))) + isEFormat = absVal >= expFormatBig || (absVal != 0 && absVal < expFormatSmall) } var out []byte diff --git a/server/util_test.go b/server/util_test.go index 8ba8c66a71e6a..e873ab255b0c4 100644 --- a/server/util_test.go +++ b/server/util_test.go @@ -332,7 +332,7 @@ func (s *testUtilSuite) TestAppendFormatFloat(c *C) { }, { 0.0000000000000009, - "0.000", + "9e-16", 3, 64, }, @@ -414,6 +414,18 @@ func (s *testUtilSuite) TestAppendFormatFloat(c *C) { -1, 64, }, + { + 1e14, + "100000000000000", + -1, + 64, + }, + { + 1e308, + "1e308", + -1, + 64, + }, } for _, t := range tests { c.Assert(string(appendFormatFloat(nil, t.fVal, t.prec, t.bitSize)), Equals, t.out) From bd684a11f7d23420f6a33555c6a47b17999aa51a Mon Sep 17 00:00:00 2001 From: HuaiyuXu <391585975@qq.com> Date: Fri, 11 Dec 2020 17:19:28 +0800 Subject: [PATCH 216/229] Revert "server: fix float fmt returned to mysql client (#21660) (#21667)" (#21675) This reverts commit 641e229ff138d555194e9269e54a073418c23200. --- expression/integration_test.go | 4 ---- server/util.go | 4 ++-- server/util_test.go | 14 +------------- 3 files changed, 3 insertions(+), 19 deletions(-) diff --git a/expression/integration_test.go b/expression/integration_test.go index 21f7165daa2d2..d047ae5ae8521 100755 --- a/expression/integration_test.go +++ b/expression/integration_test.go @@ -554,10 +554,6 @@ func (s *testIntegrationSuite2) TestMathBuiltin(c *C) { result.Check(testkit.Rows("123 123.5 123.46 123.456 123.4560 120 100 0 0")) result = tk.MustQuery("SELECT ROUND(123456E-3, 0), ROUND(123456E-3, 1), ROUND(123456E-3, 2), ROUND(123456E-3, 3), ROUND(123456E-3, 4), ROUND(123456E-3, -1), ROUND(123456E-3, -2), ROUND(123456E-3, -3), ROUND(123456E-3, -4);") result.Check(testkit.Rows("123 123.5 123.46 123.456 123.456 120 100 0 0")) // TODO: Column 5 should be 123.4560 - result = tk.MustQuery("SELECT ROUND(1e14, 1), ROUND(1e15, 1), ROUND(1e308, 1)") - result.Check(testkit.Rows("100000000000000 1000000000000000 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000")) - result = tk.MustQuery("SELECT ROUND(1e-14, 1), ROUND(1e-15, 1), ROUND(1e-308, 1)") - result.Check(testkit.Rows("0 0 0")) // for truncate result = tk.MustQuery("SELECT truncate(123, -2), truncate(123, 2), truncate(123, 1), truncate(123, -1);") diff --git a/server/util.go b/server/util.go index c50d8f2c934da..d041318783e95 100644 --- a/server/util.go +++ b/server/util.go @@ -380,9 +380,9 @@ func appendFormatFloat(in []byte, fVal float64, prec, bitSize int) []byte { } isEFormat := false if bitSize == 32 { - isEFormat = float32(absVal) >= expFormatBig || (float32(absVal) != 0 && float32(absVal) < expFormatSmall) + isEFormat = (prec == types.UnspecifiedLength && (float32(absVal) >= expFormatBig || (float32(absVal) != 0 && float32(absVal) < expFormatSmall))) } else { - isEFormat = absVal >= expFormatBig || (absVal != 0 && absVal < expFormatSmall) + isEFormat = (prec == types.UnspecifiedLength && (absVal >= expFormatBig || (absVal != 0 && absVal < expFormatSmall))) } var out []byte diff --git a/server/util_test.go b/server/util_test.go index e873ab255b0c4..8ba8c66a71e6a 100644 --- a/server/util_test.go +++ b/server/util_test.go @@ -332,7 +332,7 @@ func (s *testUtilSuite) TestAppendFormatFloat(c *C) { }, { 0.0000000000000009, - "9e-16", + "0.000", 3, 64, }, @@ -414,18 +414,6 @@ func (s *testUtilSuite) TestAppendFormatFloat(c *C) { -1, 64, }, - { - 1e14, - "100000000000000", - -1, - 64, - }, - { - 1e308, - "1e308", - -1, - 64, - }, } for _, t := range tests { c.Assert(string(appendFormatFloat(nil, t.fVal, t.prec, t.bitSize)), Equals, t.out) From ce2f365189d3841628bbd2dc1b27b2f1a15ac49c Mon Sep 17 00:00:00 2001 From: cfzjywxk Date: Mon, 14 Dec 2020 23:23:24 +0800 Subject: [PATCH 217/229] txn: fix the resolved txn status cache for pessimistic txn (#21689) --- session/pessimistic_test.go | 72 +++++++++++++++++++++++- store/mockstore/mocktikv/mvcc_leveldb.go | 10 ++++ store/tikv/2pc.go | 12 ++++ store/tikv/2pc_test.go | 2 +- store/tikv/lock_resolver.go | 25 ++++++-- store/tikv/lock_test.go | 8 +-- store/tikv/txn.go | 12 +++- 7 files changed, 128 insertions(+), 13 deletions(-) diff --git a/session/pessimistic_test.go b/session/pessimistic_test.go index 589ebd56519a4..de081b7b5a26f 100644 --- a/session/pessimistic_test.go +++ b/session/pessimistic_test.go @@ -23,8 +23,10 @@ import ( . "github.com/pingcap/check" "github.com/pingcap/errors" "github.com/pingcap/failpoint" + "github.com/pingcap/parser/model" "github.com/pingcap/parser/mysql" "github.com/pingcap/parser/terror" + "github.com/pingcap/tidb/domain" "github.com/pingcap/tidb/kv" "github.com/pingcap/tidb/session" "github.com/pingcap/tidb/sessionctx/variable" @@ -548,7 +550,7 @@ func (s *testPessimisticSuite) TestAsyncRollBackNoWait(c *C) { // even though async rollback for pessimistic lock may rollback later locked key if get ts failed from pd // the txn correctness should be ensured c.Assert(failpoint.Enable("github.com/pingcap/tidb/executor/ExecStmtGetTsError", "return"), IsNil) - c.Assert(failpoint.Enable("github.com/pingcap/tidb/store/tikv/AsyncRollBackSleep", "return"), IsNil) + c.Assert(failpoint.Enable("github.com/pingcap/tidb/store/tikv/AsyncRollBackSleep", "return(100)"), IsNil) tk.MustExec("begin pessimistic") tk.MustExec("select * from tk where c1 > 0 for update nowait") tk2.MustExec("begin pessimistic") @@ -1833,3 +1835,71 @@ func (s *testPessimisticSuite) TestAmendForUniqueIndex(c *C) { tk.MustExec("commit") tk2.MustExec("admin check table t") } + +func (s *testPessimisticSuite) TestResolveStalePessimisticPrimaryLock(c *C) { + c.Assert(failpoint.Enable("github.com/pingcap/tidb/store/tikv/beforeCommitSecondaries", "return(\"skip\")"), IsNil) + c.Assert(failpoint.Enable("github.com/pingcap/tidb/store/tikv/AsyncRollBackSleep", "return(20000)"), IsNil) + defer func() { + c.Assert(failpoint.Disable("github.com/pingcap/tidb/store/tikv/beforeCommitSecondaries"), IsNil) + c.Assert(failpoint.Disable("github.com/pingcap/tidb/store/tikv/AsyncRollBackSleep"), IsNil) + }() + tk := testkit.NewTestKitWithInit(c, s.store) + tk2 := testkit.NewTestKitWithInit(c, s.store) + tk3 := testkit.NewTestKitWithInit(c, s.store) + tk.MustExec("drop database if exists test") + tk.MustExec("create database test") + tk.MustExec("use test") + tk2.MustExec("use test") + tk3.MustExec("use test") + + tk3.MustExec("drop table if exists t1") + tk3.MustExec("create table t1(c1 int key, c2 int, c3 int, unique key uk(c2), key k1(c3), key k2(c2, c3));") + tk3.MustExec("insert into t1 values(1, 1, 1);") + tk3.MustExec("insert into t1 values(2, 2, 2);") + tk3.MustExec("insert into t1 values(3, 3, 3);") + tk3.MustExec("insert into t1 values(101, 101, 101);") + tk3.MustExec("insert into t1 values(201, 201, 201);") + tk3.MustExec("insert into t1 values(301, 301, 301);") + tk3.MustExec("insert into t1 values(401, 401, 401);") + tk3.MustExec("insert into t1 values(402, 402, 402);") + tk3.MustExec("insert into t1 values(501, 501, 501);") + tbl, err := domain.GetDomain(tk3.Se).InfoSchema().TableByName(model.NewCIStr("test"), model.NewCIStr("t1")) + c.Assert(err, IsNil) + tblID := tbl.Meta().ID + ukIdxID := tbl.Indices()[0].Meta().ID + k1IdxID := tbl.Indices()[1].Meta().ID + k2IdxID := tbl.Indices()[2].Meta().ID + s.cluster.SplitTable(s.mvccStore, tblID, 8) + s.cluster.SplitIndex(s.mvccStore, tblID, ukIdxID, 8) + s.cluster.SplitIndex(s.mvccStore, tblID, k1IdxID, 8) + s.cluster.SplitIndex(s.mvccStore, tblID, k2IdxID, 8) + + tk.MustExec("set innodb_lock_wait_timeout = 1") + tk.MustExec("begin pessimistic") + tk3.MustExec("begin pessimistic") + tk3.MustQuery("select * from t1 where c1 = 501 for update nowait").Check(testkit.Rows("501 501 501")) + err = tk.ExecToErr("update t1 set c1 = c1 + 10, c2 = c2 + 10;") + c.Assert(err, NotNil) + tk3.MustExec("rollback") + + tk2.MustExec("begin pessimistic") + tk2.MustExec("delete from t1 where c1 = 1") + tk2.MustExec("commit") + + // tk will get abort error. + err = tk.ExecToErr("update t1 set c1 = c1 + 10, c2 = c2 + 10 where c1 in(1)") + c.Assert(err, NotNil) + + tk.MustExec("update t1 set c1 = c1 + 10, c2 = c2 + 10 where c1 > 1;") + tk.MustExec("commit") + + tk2.MustExec("begin pessimistic") + tk2.MustExec("update t1 set c3 = c3 + 7 where c1 in (3, 101, 201, 301, 401, 402, 501)") + tk2.MustExec("commit") + + tk.MustExec("rollback") + tk2.MustExec("rollback") + tk3.MustExec("rollback") + + c.Assert(tk2.ExecToErr("admin check table t1"), IsNil) +} diff --git a/store/mockstore/mocktikv/mvcc_leveldb.go b/store/mockstore/mocktikv/mvcc_leveldb.go index e1f191009f806..a3fad080ad7b9 100644 --- a/store/mockstore/mocktikv/mvcc_leveldb.go +++ b/store/mockstore/mocktikv/mvcc_leveldb.go @@ -1151,6 +1151,10 @@ func (mvcc *MVCCLevelDB) CheckTxnStatus(primaryKey []byte, lockTS, callerStartTS // If the lock has already outdated, clean up it. if uint64(oracle.ExtractPhysical(lock.startTS))+lock.ttl < uint64(oracle.ExtractPhysical(currentTS)) { + logutil.BgLogger().Info("rollback expired lock and write rollback record", + zap.Stringer("primary key", kv.Key(primaryKey)), + zap.Uint64("lock startTS", dec.lock.startTS), + zap.Stringer("lock op", dec.lock.op)) if err = rollbackLock(batch, primaryKey, lockTS); err != nil { err = errors.Trace(err) return @@ -1333,6 +1337,12 @@ func (mvcc *MVCCLevelDB) ResolveLock(startKey, endKey []byte, startTS, commitTS mvcc.mu.Lock() defer mvcc.mu.Unlock() + if len(startKey) > 0 { + startKey = []byte{} + } + if len(endKey) > 0 { + endKey = []byte{} + } iter, currKey, err := newScanIterator(mvcc.db, startKey, endKey) defer iter.Release() if err != nil { diff --git a/store/tikv/2pc.go b/store/tikv/2pc.go index 4a5fe18b125c1..0bf6d7c1abf0f 100644 --- a/store/tikv/2pc.go +++ b/store/tikv/2pc.go @@ -652,6 +652,16 @@ func (c *twoPhaseCommitter) doActionOnGroupMutations(bo *Backoffer, action twoPh // by test suites. secondaryBo := NewBackofferWithVars(context.Background(), CommitMaxBackoff, c.txn.vars) go func() { + failpoint.Inject("beforeCommitSecondaries", func(v failpoint.Value) { + if s, ok := v.(string); !ok { + logutil.Logger(bo.ctx).Info("[failpoint] sleep 2s before commit secondary keys", + zap.Uint64("connID", c.connID), zap.Uint64("startTS", c.startTS)) + time.Sleep(2 * time.Second) + } else if s == "skip" { + failpoint.Return() + } + }) + e := c.doActionOnBatches(secondaryBo, action, batches) if e != nil { logutil.BgLogger().Debug("2PC async doActionOnBatches", @@ -1218,8 +1228,10 @@ func (actionCommit) handleSingleBatch(c *twoPhaseCommitter, bo *Backoffer, batch } logutil.Logger(bo.ctx).Error("2PC failed commit key after primary key committed", zap.Error(err), + zap.Stringer("primaryKey", kv.Key(c.primaryKey)), zap.Uint64("txnStartTS", c.startTS), zap.Uint64("commitTS", c.commitTS), + zap.Uint64("forUpdateTS", c.forUpdateTS), zap.Strings("keys", hexBatchKeys(batch.mutations.keys))) return errors.Trace(err) } diff --git a/store/tikv/2pc_test.go b/store/tikv/2pc_test.go index da87a42551ef4..00b509e6c920e 100644 --- a/store/tikv/2pc_test.go +++ b/store/tikv/2pc_test.go @@ -629,7 +629,7 @@ func (s *testCommitterSuite) TestPessimisticTTL(c *C) { lr := newLockResolver(s.store) bo := NewBackofferWithVars(context.Background(), getMaxBackoff, nil) - status, err := lr.getTxnStatus(bo, txn.startTS, key2, 0, txn.startTS, true) + status, err := lr.getTxnStatus(bo, txn.startTS, key2, 0, txn.startTS, true, nil) c.Assert(err, IsNil) c.Assert(status.ttl, GreaterEqual, lockInfo.LockTtl) diff --git a/store/tikv/lock_resolver.go b/store/tikv/lock_resolver.go index 384e2c987de12..c221608d79ce5 100644 --- a/store/tikv/lock_resolver.go +++ b/store/tikv/lock_resolver.go @@ -225,7 +225,7 @@ func (lr *LockResolver) BatchResolveLocks(bo *Backoffer, locks []*Lock, loc Regi tikvLockResolverCountWithExpired.Inc() // Use currentTS = math.MaxUint64 means rollback the txn, no matter the lock is expired or not! - status, err := lr.getTxnStatus(bo, l.TxnID, l.Primary, callerStartTS, math.MaxUint64, true) + status, err := lr.getTxnStatus(bo, l.TxnID, l.Primary, callerStartTS, math.MaxUint64, true, l) if err != nil { return false, err } @@ -430,7 +430,7 @@ func (lr *LockResolver) GetTxnStatus(txnID uint64, callerStartTS uint64, primary if err != nil { return status, err } - return lr.getTxnStatus(bo, txnID, primary, callerStartTS, currentTS, true) + return lr.getTxnStatus(bo, txnID, primary, callerStartTS, currentTS, true, nil) } func (lr *LockResolver) getTxnStatusFromLock(bo *Backoffer, l *Lock, callerStartTS uint64) (TxnStatus, error) { @@ -455,7 +455,7 @@ func (lr *LockResolver) getTxnStatusFromLock(bo *Backoffer, l *Lock, callerStart time.Sleep(100 * time.Millisecond) }) for { - status, err = lr.getTxnStatus(bo, l.TxnID, l.Primary, callerStartTS, currentTS, rollbackIfNotExist) + status, err = lr.getTxnStatus(bo, l.TxnID, l.Primary, callerStartTS, currentTS, rollbackIfNotExist, l) if err == nil { return status, nil } @@ -507,7 +507,8 @@ func (e txnNotFoundErr) Error() string { // getTxnStatus sends the CheckTxnStatus request to the TiKV server. // When rollbackIfNotExist is false, the caller should be careful with the txnNotFoundErr error. -func (lr *LockResolver) getTxnStatus(bo *Backoffer, txnID uint64, primary []byte, callerStartTS, currentTS uint64, rollbackIfNotExist bool) (TxnStatus, error) { +func (lr *LockResolver) getTxnStatus(bo *Backoffer, txnID uint64, primary []byte, callerStartTS, currentTS uint64, + rollbackIfNotExist bool, lockInfo *Lock) (TxnStatus, error) { if s, ok := lr.getResolved(txnID); ok { return s, nil } @@ -576,7 +577,21 @@ func (lr *LockResolver) getTxnStatus(bo *Backoffer, txnID uint64, primary []byte } status.commitTS = cmdResp.CommitVersion - lr.saveResolved(txnID, status) + // If the transaction is still valid with ttl greater than zero, do nothing. + // If its status is certain: + // If transaction is already committed, the result could be cached. + // Otherwise: + // If l.LockType is pessimistic lock type: + // - if its primary lock is pessimistic too, the check txn status result should not be cached. + // - if its primary lock is prewrite lock type, the check txn status could be cached, todo. + // If l.lockType is prewrite lock type: + // - always cache the check txn status result. + // For prewrite locks, their primary keys should ALWAYS be the correct one and will NOT change. + if status.ttl == 0 { + if status.IsCommitted() || (lockInfo != nil && lockInfo.LockType != kvrpcpb.Op_PessimisticLock) { + lr.saveResolved(txnID, status) + } + } } return status, nil } diff --git a/store/tikv/lock_test.go b/store/tikv/lock_test.go index a8d217254ca3d..38dd0399e05be 100644 --- a/store/tikv/lock_test.go +++ b/store/tikv/lock_test.go @@ -284,7 +284,7 @@ func (s *testLockSuite) TestCheckTxnStatus(c *C) { bo := NewBackofferWithVars(context.Background(), PrewriteMaxBackoff, nil) resolver := newLockResolver(s.store) // Call getTxnStatus to check the lock status. - status, err := resolver.getTxnStatus(bo, txn.StartTS(), []byte("key"), currentTS, currentTS, true) + status, err := resolver.getTxnStatus(bo, txn.StartTS(), []byte("key"), currentTS, currentTS, true, nil) c.Assert(err, IsNil) c.Assert(status.IsCommitted(), IsFalse) c.Assert(status.ttl, Greater, uint64(0)) @@ -306,7 +306,7 @@ func (s *testLockSuite) TestCheckTxnStatus(c *C) { // Then call getTxnStatus again and check the lock status. currentTS, err = oracle.GetTimestamp(context.Background()) c.Assert(err, IsNil) - status, err = newLockResolver(s.store).getTxnStatus(bo, txn.StartTS(), []byte("key"), currentTS, 0, true) + status, err = newLockResolver(s.store).getTxnStatus(bo, txn.StartTS(), []byte("key"), currentTS, 0, true, nil) c.Assert(err, IsNil) c.Assert(status.ttl, Equals, uint64(0)) c.Assert(status.commitTS, Equals, uint64(0)) @@ -314,7 +314,7 @@ func (s *testLockSuite) TestCheckTxnStatus(c *C) { // Call getTxnStatus on a committed transaction. startTS, commitTS := s.putKV(c, []byte("a"), []byte("a")) - status, err = newLockResolver(s.store).getTxnStatus(bo, startTS, []byte("a"), currentTS, currentTS, true) + status, err = newLockResolver(s.store).getTxnStatus(bo, startTS, []byte("a"), currentTS, currentTS, true, nil) c.Assert(err, IsNil) c.Assert(status.ttl, Equals, uint64(0)) c.Assert(status.commitTS, Equals, commitTS) @@ -342,7 +342,7 @@ func (s *testLockSuite) TestCheckTxnStatusNoWait(c *C) { resolver := newLockResolver(s.store) // Call getTxnStatus for the TxnNotFound case. - _, err = resolver.getTxnStatus(bo, txn.StartTS(), []byte("key"), currentTS, currentTS, false) + _, err = resolver.getTxnStatus(bo, txn.StartTS(), []byte("key"), currentTS, currentTS, false, nil) c.Assert(err, NotNil) _, ok := errors.Cause(err).(txnNotFoundErr) c.Assert(ok, IsTrue) diff --git a/store/tikv/txn.go b/store/tikv/txn.go index ce737fbb54b11..585c4be60bca0 100644 --- a/store/tikv/txn.go +++ b/store/tikv/txn.go @@ -561,8 +561,16 @@ func (txn *tikvTxn) asyncPessimisticRollback(ctx context.Context, keys [][]byte) wg := new(sync.WaitGroup) wg.Add(1) go func() { - failpoint.Inject("AsyncRollBackSleep", func() { - time.Sleep(100 * time.Millisecond) + failpoint.Inject("AsyncRollBackSleep", func(sleepTimeMS failpoint.Value) { + if tmp, ok := sleepTimeMS.(int); ok { + if tmp < 10000 { + logutil.Logger(ctx).Info("[failpoint] sleep before trigger asyncPessimisticRollback", zap.Int("sleep ms", tmp)) + time.Sleep(time.Duration(tmp) * time.Millisecond) + } else { + logutil.Logger(ctx).Info("[failpoint] async rollback return") + failpoint.Return() + } + } }) err := committer.pessimisticRollbackMutations(NewBackofferWithVars(ctx, pessimisticRollbackMaxBackoff, txn.vars), CommitterMutations{keys: keys}) if err != nil { From 2fd59c8ae97f1eebd3bdfd2fab09b7069fd36c49 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Tue, 15 Dec 2020 17:29:25 +0800 Subject: [PATCH 218/229] store/tikv: batch cop avoids to retry too many times. (#21499) (#21807) Signed-off-by: ti-srebot --- store/tikv/batch_coprocessor.go | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/store/tikv/batch_coprocessor.go b/store/tikv/batch_coprocessor.go index 59db552d4a0de..56b1b1fed9f3e 100644 --- a/store/tikv/batch_coprocessor.go +++ b/store/tikv/batch_coprocessor.go @@ -126,12 +126,10 @@ func buildBatchCopTasks(bo *Backoffer, cache *RegionCache, ranges *copRanges, re // of date and already be cleaned up. We should retry and generate new tasks. if rpcCtx == nil { needRetry = true - err = bo.Backoff(BoRegionMiss, errors.New("Cannot find region or TiFlash peer")) - logutil.BgLogger().Info("retry for TiFlash peer or region missing", zap.Uint64("region id", task.region.GetID())) - if err != nil { - return nil, errors.Trace(err) - } - break + logutil.BgLogger().Info("retry for TiFlash peer with region missing", zap.Uint64("region id", task.region.GetID())) + // Probably all the regions are invalid. Make the loop continue and mark all the regions invalid. + // Then `splitRegion` will reloads these regions. + continue } if batchCop, ok := storeTaskMap[rpcCtx.Addr]; ok { batchCop.copTasks = append(batchCop.copTasks, copTaskAndRPCContext{task: task, ctx: rpcCtx}) @@ -145,6 +143,11 @@ func buildBatchCopTasks(bo *Backoffer, cache *RegionCache, ranges *copRanges, re } } if needRetry { + // Backoff once for each retry. + err = bo.Backoff(BoRegionMiss, errors.New("Cannot find region with TiFlash peer")) + if err != nil { + return nil, errors.Trace(err) + } continue } for _, task := range storeTaskMap { From 8af4c308d54cd3555e784b6fdd95b8d2c098fa84 Mon Sep 17 00:00:00 2001 From: 3pointer Date: Tue, 15 Dec 2020 19:06:20 +0800 Subject: [PATCH 219/229] backup: update br to release-4.0 (#21819) * backup: update br to release-4.0 * fix ci --- go.mod | 28 +++++++++++++- go.sum | 118 +++------------------------------------------------------ 2 files changed, 31 insertions(+), 115 deletions(-) diff --git a/go.mod b/go.mod index 61cfe39e1a1b6..05e6466c299f6 100644 --- a/go.mod +++ b/go.mod @@ -4,12 +4,19 @@ require ( cloud.google.com/go v0.51.0 // indirect github.com/BurntSushi/toml v0.3.1 github.com/Jeffail/gabs/v2 v2.5.1 + github.com/aws/aws-sdk-go v1.30.24 // indirect github.com/blacktear23/go-proxyprotocol v0.0.0-20180807104634-af7a81e8dd0d + github.com/cheggaaa/pb/v3 v3.0.4 // indirect + github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd // indirect + github.com/coreos/go-semver v0.3.0 // indirect + github.com/coreos/go-systemd v0.0.0-20190719114852-fd7a80b32e1f // indirect github.com/cznic/mathutil v0.0.0-20181122101859-297441e03548 github.com/cznic/sortutil v0.0.0-20181122101858-f5f958428db8 github.com/danjacques/gofslock v0.0.0-20191023191349-0a45f885bc37 github.com/dgraph-io/ristretto v0.0.2 github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2 + github.com/dustin/go-humanize v1.0.0 // indirect + github.com/fsouza/fake-gcs-server v1.17.0 // indirect github.com/go-sql-driver/mysql v1.5.0 github.com/gogo/protobuf v1.3.1 github.com/golang/protobuf v1.3.4 @@ -20,19 +27,26 @@ require ( github.com/gorilla/mux v1.7.4 github.com/gorilla/websocket v1.4.1 // indirect github.com/grpc-ecosystem/go-grpc-middleware v1.1.0 + github.com/grpc-ecosystem/grpc-gateway v1.14.3 // indirect github.com/iancoleman/strcase v0.0.0-20191112232945-16388991a334 github.com/klauspost/cpuid v1.2.1 + github.com/kr/pretty v0.2.0 // indirect + github.com/mattn/go-colorable v0.1.7 // indirect + github.com/mattn/go-runewidth v0.0.9 // indirect + github.com/montanaflynn/stats v0.5.0 // indirect github.com/ngaut/pools v0.0.0-20180318154953-b7bc8c42aac7 github.com/ngaut/sync2 v0.0.0-20141008032647-7a24ed77b2ef + github.com/onsi/ginkgo v1.11.0 // indirect + github.com/onsi/gomega v1.8.1 // indirect github.com/opentracing/basictracer-go v1.0.0 github.com/opentracing/opentracing-go v1.1.0 - github.com/pingcap/br v0.0.0-20200921112226-ee2e962f5e4b + github.com/pingcap/br v4.0.9-0.20201215065036-804aa9087197+incompatible github.com/pingcap/check v0.0.0-20200212061837-5e12011dc712 github.com/pingcap/errors v0.11.5-0.20201029093017-5a7df2af2ac7 github.com/pingcap/failpoint v0.0.0-20200702092429-9f69995143ce github.com/pingcap/fn v0.0.0-20200306044125-d5540d389059 github.com/pingcap/goleveldb v0.0.0-20191226122134-f82aafb29989 - github.com/pingcap/kvproto v0.0.0-20200907074027-32a3a0accf7d + github.com/pingcap/kvproto v0.0.0-20201126113434-70db5fb4b0dc github.com/pingcap/log v0.0.0-20201112100606-8f1e84a3abc8 github.com/pingcap/parser v0.0.0-20201130080042-c3ddfec58248 github.com/pingcap/sysutil v0.0.0-20201130064824-f0c8aa6a6966 @@ -45,14 +59,21 @@ require ( github.com/sirupsen/logrus v1.6.0 github.com/soheilhy/cmux v0.1.4 github.com/spaolacci/murmur3 v1.1.0 + github.com/spf13/cobra v1.0.0 // indirect + github.com/spf13/pflag v1.0.5 // indirect + github.com/syndtr/goleveldb v1.0.1-0.20190625010220-02440ea7a285 // indirect github.com/tiancaiamao/appdash v0.0.0-20181126055449-889f96f722a2 github.com/tikv/pd v1.1.0-beta.0.20200921100508-9ee41c4144f3 github.com/uber-go/atomic v1.4.0 github.com/uber/jaeger-client-go v2.22.1+incompatible + github.com/uber/jaeger-lib v2.2.0+incompatible // indirect + go.etcd.io/bbolt v1.3.5 // indirect go.etcd.io/etcd v0.5.0-alpha.5.0.20191023171146-3cf2f69b5738 go.uber.org/atomic v1.7.0 go.uber.org/automaxprocs v1.2.0 + go.uber.org/multierr v1.6.0 // indirect go.uber.org/zap v1.16.0 + golang.org/x/lint v0.0.0-20200302205851-738671d3881b // indirect golang.org/x/net v0.0.0-20200813134508-3edf25e44fcc golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d // indirect golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208 @@ -60,9 +81,12 @@ require ( golang.org/x/text v0.3.4 golang.org/x/time v0.0.0-20191024005414-555d28b269f0 // indirect golang.org/x/tools v0.0.0-20200820010801-b793a1359eac + golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect + google.golang.org/api v0.15.1 // indirect google.golang.org/genproto v0.0.0-20200108215221-bd8f9a0ef82f // indirect google.golang.org/grpc v1.26.0 gopkg.in/natefinch/lumberjack.v2 v2.0.0 + gopkg.in/yaml.v2 v2.3.0 // indirect honnef.co/go/tools v0.0.1-2020.1.6 // indirect sigs.k8s.io/yaml v1.2.0 // indirect sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0 diff --git a/go.sum b/go.sum index 3c8dc530d8d20..0ea4866e94b70 100644 --- a/go.sum +++ b/go.sum @@ -17,7 +17,6 @@ cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2k cloud.google.com/go/pubsub v1.1.0 h1:9/vpR43S4aJaROxqQHQ3nH9lfyKKV0dC3vOmnw8ebQQ= cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= -cloud.google.com/go/storage v1.4.0/go.mod h1:ZusYJWlOshgSBGbt6K3GnB3MT3H1xs2id9+TCl4fDBA= cloud.google.com/go/storage v1.5.0 h1:RPUcBvDeYgQFMfQu1eBMq6piD1SXmLH+vK3qjewZPus= cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= @@ -45,7 +44,6 @@ github.com/antihax/optional v0.0.0-20180407024304-ca021399b1a6/go.mod h1:V8iCPQY github.com/appleboy/gin-jwt/v2 v2.6.3/go.mod h1:MfPYA4ogzvOcVkRwAxT7quHOtQmVKDpTwxyUrC2DNw0= github.com/appleboy/gofight/v2 v2.1.2/go.mod h1:frW+U1QZEdDgixycTj4CygQ48yLTUhplt43+Wczp3rw= github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= -github.com/aws/aws-sdk-go v1.26.1/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go v1.30.24 h1:y3JPD51VuEmVqN3BEDVm4amGpDma2cKJcDPuAU1OR58= github.com/aws/aws-sdk-go v1.30.24/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZveU8YkpAk0= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= @@ -63,11 +61,9 @@ github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/cheggaaa/pb/v3 v3.0.1/go.mod h1:SqqeMF/pMOIu3xgGoxtPYhMNQP258xE4x/XRTYua+KU= github.com/cheggaaa/pb/v3 v3.0.4 h1:QZEPYOj2ix6d5oEg63fbHmpolrnNiwjUsk+h74Yt4bM= github.com/cheggaaa/pb/v3 v3.0.4/go.mod h1:7rgWxLrAUcFMkvJuv09+DYi7mMUYi8nO9iOWcvGJPfw= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= -github.com/chzyer/readline v0.0.0-20171208011716-f6d7a1f6fbf3/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= @@ -77,12 +73,10 @@ github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd h1:qMd81Ts1T github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= -github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-semver v0.3.0 h1:wkHLiw0WNATZnSG7epLsujiMCgPAc9xhjJ4tgnAxmfM= github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/go-systemd v0.0.0-20181031085051-9002847aa142/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd v0.0.0-20190719114852-fd7a80b32e1f h1:JOrtw2xFKzlg+cbHpyrpLDmnN1HqhBfnX7WDiW7eG2c= github.com/coreos/go-systemd v0.0.0-20190719114852-fd7a80b32e1f/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= @@ -90,7 +84,6 @@ github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfc github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f h1:lBNOc5arjvs8E5mO2tbpBpLoyyu8B6e44T7hJy6potg= github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/corona10/goimagehash v1.0.2/go.mod h1:/l9umBhvcHQXVtQO1V6Gp1yD20STawkhRnnX0D1bvVI= -github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= @@ -108,8 +101,6 @@ github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/denisenkom/go-mssqldb v0.0.0-20191124224453-732737034ffd/go.mod h1:xbL0rPBG9cCiLr28tMa8zpbdarY27NDyej4t/EjAShU= -github.com/dgraph-io/ristretto v0.0.1 h1:cJwdnj42uV8Jg4+KLrYovLiCgIfz9wtWm6E6KA+1tLs= -github.com/dgraph-io/ristretto v0.0.1/go.mod h1:T40EBc7CJke8TkpiYfGGKAeFjSaxuFXhuXRyumBd6RE= github.com/dgraph-io/ristretto v0.0.2 h1:a5WaUrDa0qm0YrAAS1tUykT5El3kt62KNZZeMxQn3po= github.com/dgraph-io/ristretto v0.0.2/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM= @@ -120,11 +111,9 @@ github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8 github.com/docker/go-units v0.4.0 h1:3uh0PgVws3nIA0Q+MwDC8yjEPf9zjRfZZWXZYDct3Tw= github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -github.com/dustin/go-humanize v0.0.0-20180421182945-02af3965c54e/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/eknkc/amber v0.0.0-20171010120322-cdade1c07385/go.mod h1:0vRUJqYpeSZifjYj7uP3BG/gKcuzL9xWVV/Y+cK33KM= -github.com/elazarl/go-bindata-assetfs v1.0.0/go.mod h1:v+YaWX3bdea5J/mo8dSETolEo7R71Vk1u8bnjau5yw4= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= @@ -136,11 +125,9 @@ github.com/fatih/structtag v1.2.0/go.mod h1:mBJUNpUnHmRKrKlQQlmCrh5PuhftFbNv8Ys4 github.com/fogleman/gg v1.3.0/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/fsouza/fake-gcs-server v1.15.0/go.mod h1:HNxAJ/+FY/XSsxuwz8iIYdp2GtMmPbJ8WQjjGMxd6Qk= github.com/fsouza/fake-gcs-server v1.17.0 h1:OeH75kBZcZa3ZE+zz/mFdJ2btt9FgqfjI7gIh9+5fvk= github.com/fsouza/fake-gcs-server v1.17.0/go.mod h1:D1rTE4YCyHFNa99oyJJ5HyclvN/0uQR+pM/VdlL83bw= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/ghodss/yaml v1.0.1-0.20190212211648-25d852aebe32/go.mod h1:GIjDIg/heH5DOkXY3YJ/wNhfHsQHoXGjl8G8amsYQ1I= github.com/gin-contrib/gzip v0.0.1/go.mod h1:fGBJBCdt6qCZuCAOwWuFhBB4OOq9EFqlo5dEaFhhu5w= github.com/gin-contrib/sse v0.0.0-20170109093832-22d885f9ecc7/go.mod h1:VJ0WA2NBN22VlZ2dKZQPAPnyWw5XTlK1KymzLKsr59s= github.com/gin-contrib/sse v0.0.0-20190301062529-5545eab6dad3/go.mod h1:VJ0WA2NBN22VlZ2dKZQPAPnyWw5XTlK1KymzLKsr59s= @@ -148,7 +135,6 @@ github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm github.com/gin-gonic/gin v1.3.0/go.mod h1:7cKuhb5qV2ggCFctp2fJQ+ErvciLZrIeoOSOm6mUr7Y= github.com/gin-gonic/gin v1.4.0/go.mod h1:OW2EZn3DO8Ln9oIKOvM++LBO+5UPHJJDH72/q/3rZdM= github.com/gin-gonic/gin v1.5.0/go.mod h1:Nd6IXA8m5kNZdNEHMBd93KT+mdY3+bewLgRvmCsR2Do= -github.com/go-bindata/go-bindata/v3 v3.1.3/go.mod h1:1/zrpXsLD8YDIbhZRqXzm1Ghc7NhEvIN9+Z6R5/xH4I= github.com/go-chi/chi v4.0.2+incompatible/go.mod h1:eB3wogJHnLi3x/kFX2A+IbTBlXxmMeXJVKy9tTv1XzQ= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= @@ -168,16 +154,12 @@ github.com/go-openapi/jsonreference v0.19.2/go.mod h1:jMjeRr2HHw6nAVajTXJ4eiUwoh github.com/go-openapi/jsonreference v0.19.3/go.mod h1:rjx6GuL8TTa9VaixXglHmQmIL98+wF9xc8zWvFonSJ8= github.com/go-openapi/spec v0.19.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI= github.com/go-openapi/spec v0.19.4/go.mod h1:FpwSN1ksY1eteniUU7X0N/BgJ7a4WvBFVA8Lj9mJglo= -github.com/go-openapi/spec v0.19.7/go.mod h1:Hm2Jr4jv8G1ciIAo+frC/Ft+rR2kQDh8JHKHb3gWUSk= github.com/go-openapi/swag v0.17.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg= github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= -github.com/go-openapi/swag v0.19.8/go.mod h1:ao+8BpOPyKdpQz3AOJfbeEVpLmWAvlT1IfTe5McPyhY= github.com/go-playground/locales v0.12.1/go.mod h1:IUMDtCfWo/w/mtMfIE/IG2K+Ey3ygWanZIBtBW0W2TM= -github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= github.com/go-playground/overalls v0.0.0-20180201144345-22ec1a223b7c/go.mod h1:UqxAgEOt89sCiXlrc/ycnx00LVvUO/eS8tMUkWX4R7w= github.com/go-playground/universal-translator v0.16.0/go.mod h1:1AnU7NaIRDWWzGEKwgtJRd2xk99HeFyHw3yid4rvQIY= -github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-sql-driver/mysql v1.5.0 h1:ozyZYNQW3x3HtqT1jira07DN2PArx2v7/mN66gGcHOs= github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= @@ -193,13 +175,13 @@ github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGw github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20181024230925-c65c006176ff/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7 h1:5ZkaAPbicIKTF2I64qf5Fh8Aa83Q/dnOafMYV0OMwjA= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.3.1 h1:qGJ6qTW+x6xX/my+8YUVl4WNpX9B7+/l2tRsHGZ7f2s= github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= github.com/golang/protobuf v0.0.0-20180814211427-aa810b61a9c7/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= @@ -207,7 +189,6 @@ github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5y github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.4 h1:87PNWwrRvUSnqS4dlcBU/ftvOIBep4sYuBLlh6rX2wk= github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.1 h1:Qgr9rKW7uDUkrbSmQeiDsGa8SjGyCOGtuasMWwvp2P4= github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= @@ -223,7 +204,6 @@ github.com/google/martian v2.1.0+incompatible h1:/CP5g8u/VJHijgedC/Legn3BAbAaWPg github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20190930153522-6ce02741cba3/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200407044318-7d83b28da2e9 h1:K+lX49/3eURCE1IjlaZN//u6c+9nfDAMnyQ9E2dsJbY= github.com/google/pprof v0.0.0-20200407044318-7d83b28da2e9/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= @@ -241,7 +221,6 @@ github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2z github.com/gorilla/mux v1.7.4 h1:VuZ8uybHlWmqV03+zRzdwKL4tUnIp1MAQtp1mIFE1bc= github.com/gorilla/mux v1.7.4/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= -github.com/gorilla/websocket v1.2.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.1 h1:q7AeDBpnBk8AogcD4DSag/Ukw/KV+YhzLj2bP5HvKCM= github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= @@ -272,7 +251,6 @@ github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJS github.com/jinzhu/gorm v1.9.12/go.mod h1:vhTjlKSJUTWNtcbQtrMBFCxy7eXTzeCAzfL5fBZT/Qs= github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc= github.com/jinzhu/now v1.0.1/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= -github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmespath/go-jmespath v0.3.0 h1:OS12ieG61fsCg5+qLJ+SsW9NicxNkg3b25OyT2yCeUc= github.com/jmespath/go-jmespath v0.3.0/go.mod h1:9QtRXoHjLGCJ5IBSaohpXITPlowMeeYCZ7fLUTSywik= github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= @@ -290,16 +268,12 @@ github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/X github.com/juju/ratelimit v1.0.1 h1:+7AIFJVQ0EQgq/K9+0Krm7m530Du7tIz0METWzN0RgY= github.com/juju/ratelimit v1.0.1/go.mod h1:qapgC/Gy+xNh9UxzV13HGGl/6UXNN+ct+vwSgWNm/qk= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= -github.com/kevinburke/go-bindata v3.18.0+incompatible/go.mod h1:/pEEZ72flUW2p0yi30bslSp9YqD9pysLxunQDdb2CPM= github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/klauspost/cpuid v0.0.0-20170728055534-ae7887de9fa5/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= -github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= github.com/klauspost/cpuid v1.2.1 h1:vJi+O/nMdFt0vqm8NZBI6wzALWdA2X+egi0ogNyrC/w= github.com/klauspost/cpuid v1.2.1/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.3 h1:CE8S1cTafDpPvMhIxNJKvHsGVBgn1xWYf1NbHQhywc8= github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= @@ -311,13 +285,11 @@ github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA= github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/leodido/go-urn v1.1.0/go.mod h1:+cyI34gQWZcE1eQU7NVgKkkzdXDQHr1dBMtdAPozLkw= -github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= github.com/lib/pq v1.1.1/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.7.1/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= @@ -332,7 +304,6 @@ github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOA github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= -github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.7 h1:Ei8KR0497xHyKJPAv59M1dkC+rOZCMBJ+t3fZ+twI54= github.com/mattn/go-runewidth v0.0.7/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mattn/go-runewidth v0.0.9 h1:Lm995f3rfxdpd6TSmuVCHVb/QhupuXlYr8sCI/QdE+0= @@ -352,7 +323,6 @@ github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lN github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/montanaflynn/stats v0.0.0-20151014174947-eeaced052adb/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc= -github.com/montanaflynn/stats v0.0.0-20180911141734-db72e6cae808/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc= github.com/montanaflynn/stats v0.5.0 h1:2EkzeTSqBB4V4bJwWrt5gIIrZmpJBcoIRGS2kWLgzmk= github.com/montanaflynn/stats v0.5.0/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= @@ -383,18 +353,9 @@ github.com/pelletier/go-toml v1.3.0/go.mod h1:PN7xzY2wHTK0K9p34ErDQMlFxa51Fk0OUr github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5/go.mod h1:jvVRKCrJTQWu0XVbaOlby/2lO20uSCHEMzzplHXte1o= github.com/phf/go-queue v0.0.0-20170504031614-9abe38d0371d h1:U+PMnTlV2tu7RuMK5etusZG3Cf+rpow5hqQByeCzJ2g= github.com/phf/go-queue v0.0.0-20170504031614-9abe38d0371d/go.mod h1:lXfE4PvvTW5xOjO6Mba8zDPyw8M93B6AQ7frTGnMlA8= -github.com/pingcap-incubator/tidb-dashboard v0.0.0-20200407064406-b2b8ad403d01/go.mod h1:77fCh8d3oKzC5ceOJWeZXAS/mLzVgdZ7rKniwmOyFuo= -github.com/pingcap-incubator/tidb-dashboard v0.0.0-20200514075710-eecc9a4525b5/go.mod h1:8q+yDx0STBPri8xS4A2duS1dAf+xO0cMtjwe0t6MWJk= -github.com/pingcap-incubator/tidb-dashboard v0.0.0-20200807020752-01f0abe88e93/go.mod h1:9yaAM77sPfa5/f6sdxr3jSkKfIz463KRHyiFHiGjdes= github.com/pingcap-incubator/tidb-dashboard v0.0.0-20200908071351-a715a95c7de2/go.mod h1:X3r7/4Wr9fSC5KlsfezBh/5noeWGEJNQuSvjgS2rvdI= -github.com/pingcap/br v0.0.0-20200426093517-dd11ae28b885/go.mod h1:4w3meMnk7HDNpNgjuRAxavruTeKJvUiXxoEWTjzXPnA= -github.com/pingcap/br v0.0.0-20200521085655-53201addd4ad/go.mod h1:SlSUHWY7QUoooiYxOKuJ8kUh2KjI29ogBh89YXz2dLA= -github.com/pingcap/br v0.0.0-20200623060633-439a1c2b2bfd/go.mod h1:NGee2H9vXLunFIBXGb3uFsWRpw3BBo822sY4dyXepqo= -github.com/pingcap/br v0.0.0-20200716021245-f1df51c11469/go.mod h1:Ft2Vuvj6XJkbjQvflDOesJTy+9bui0saz0UonIgipAw= -github.com/pingcap/br v0.0.0-20200805095214-09dcc7534821/go.mod h1:JVsPK6Ibo2RBkTC2l1bzcRBVuHte/tJRERgay5gsBb8= -github.com/pingcap/br v0.0.0-20200907090854-8a4cd9e0abd1/go.mod h1:nCJjSVtB6bUTdXlPhZ1vnNavqJ+Ea3JZAELu2IP2B7w= -github.com/pingcap/br v0.0.0-20200921112226-ee2e962f5e4b h1:qSh2uuXXuFnXRgL1vU3AvXbzg8Nn9IyFbUheCsRB7SQ= -github.com/pingcap/br v0.0.0-20200921112226-ee2e962f5e4b/go.mod h1:q/Fg9CsYlK3wGPioVqcosmce2dKS505GVnyJcqQuNpw= +github.com/pingcap/br v4.0.9-0.20201215065036-804aa9087197+incompatible h1:Ceeu3/hX1LSdKpcaI8Sc6STOAxurxa9tDo0mqHmQ/Yc= +github.com/pingcap/br v4.0.9-0.20201215065036-804aa9087197+incompatible/go.mod h1:ymVmo50lQydxib0tmK5hHk4oteB7hZ0IMCArunwy3UQ= github.com/pingcap/check v0.0.0-20190102082844-67f458068fc8/go.mod h1:B1+S9LNcuMyLH/4HMTViQOJevkGiik3wW2AN9zb2fNQ= github.com/pingcap/check v0.0.0-20191107115940-caf2b9e6ccf4/go.mod h1:PYMCGwN0JHjoqGr3HrZoD+b8Tgx8bKnArhSq8YVzUMc= github.com/pingcap/check v0.0.0-20191216031241-8a5a85928f12/go.mod h1:PYMCGwN0JHjoqGr3HrZoD+b8Tgx8bKnArhSq8YVzUMc= @@ -405,74 +366,35 @@ github.com/pingcap/errors v0.11.0/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTw github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8= github.com/pingcap/errors v0.11.5-0.20190809092503-95897b64e011/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8= github.com/pingcap/errors v0.11.5-0.20200902104258-eba4f1d8f6de/go.mod h1:g4vx//d6VakjJ0mk7iLBlKA8LFavV/sAVINT/1PFxeQ= -github.com/pingcap/errors v0.11.5-0.20200917111840-a15ef68f753d/go.mod h1:g4vx//d6VakjJ0mk7iLBlKA8LFavV/sAVINT/1PFxeQ= github.com/pingcap/errors v0.11.5-0.20201029093017-5a7df2af2ac7 h1:wQKuKP2HUtej2gSvx1cZmY4DENUH6tlOxRkfvPT8EBU= github.com/pingcap/errors v0.11.5-0.20201029093017-5a7df2af2ac7/go.mod h1:G7x87le1poQzLB/TqvTJI2ILrSgobnq4Ut7luOwvfvI= github.com/pingcap/failpoint v0.0.0-20191029060244-12f4ac2fd11d/go.mod h1:DNS3Qg7bEDhU6EXNHF+XSv/PGznQaMJ5FWvctpm6pQI= -github.com/pingcap/failpoint v0.0.0-20200210140405-f8f9fb234798/go.mod h1:DNS3Qg7bEDhU6EXNHF+XSv/PGznQaMJ5FWvctpm6pQI= -github.com/pingcap/failpoint v0.0.0-20200506114213-c17f16071c53/go.mod h1:w4PEZ5y16LeofeeGwdgZB4ddv9bLyDuIX+ljstgKZyk= -github.com/pingcap/failpoint v0.0.0-20200603062251-b230c36c413c/go.mod h1:w4PEZ5y16LeofeeGwdgZB4ddv9bLyDuIX+ljstgKZyk= github.com/pingcap/failpoint v0.0.0-20200702092429-9f69995143ce h1:Y1kCxlCtlPTMtVcOkjUcuQKh+YrluSo7+7YMCQSzy30= github.com/pingcap/failpoint v0.0.0-20200702092429-9f69995143ce/go.mod h1:w4PEZ5y16LeofeeGwdgZB4ddv9bLyDuIX+ljstgKZyk= -github.com/pingcap/fn v0.0.0-20191016082858-07623b84a47d/go.mod h1:fMRU1BA1y+r89AxUoaAar4JjrhUkVDt0o0Np6V8XbDQ= github.com/pingcap/fn v0.0.0-20200306044125-d5540d389059 h1:Pe2LbxRmbTfAoKJ65bZLmhahmvHm7n9DUxGRQT00208= github.com/pingcap/fn v0.0.0-20200306044125-d5540d389059/go.mod h1:fMRU1BA1y+r89AxUoaAar4JjrhUkVDt0o0Np6V8XbDQ= github.com/pingcap/goleveldb v0.0.0-20191226122134-f82aafb29989 h1:surzm05a8C9dN8dIUmo4Be2+pMRb6f55i+UIYrluu2E= github.com/pingcap/goleveldb v0.0.0-20191226122134-f82aafb29989/go.mod h1:O17XtbryoCJhkKGbT62+L2OlrniwqiGLSqrmdHCMzZw= github.com/pingcap/kvproto v0.0.0-20191211054548-3c6b38ea5107/go.mod h1:WWLmULLO7l8IOcQG+t+ItJ3fEcrL5FxF0Wu+HrMy26w= -github.com/pingcap/kvproto v0.0.0-20200214064158-62d31900d88e/go.mod h1:IOdRDPLyda8GX2hE/jO7gqaCV/PNFh8BZQCQZXfIOqI= github.com/pingcap/kvproto v0.0.0-20200411081810-b85805c9476c/go.mod h1:IOdRDPLyda8GX2hE/jO7gqaCV/PNFh8BZQCQZXfIOqI= -github.com/pingcap/kvproto v0.0.0-20200417092353-efbe03bcffbd/go.mod h1:IOdRDPLyda8GX2hE/jO7gqaCV/PNFh8BZQCQZXfIOqI= -github.com/pingcap/kvproto v0.0.0-20200420075417-e0c6e8842f22/go.mod h1:IOdRDPLyda8GX2hE/jO7gqaCV/PNFh8BZQCQZXfIOqI= -github.com/pingcap/kvproto v0.0.0-20200423020121-038e31959c2a/go.mod h1:IOdRDPLyda8GX2hE/jO7gqaCV/PNFh8BZQCQZXfIOqI= -github.com/pingcap/kvproto v0.0.0-20200424032552-6650270c39c3/go.mod h1:IOdRDPLyda8GX2hE/jO7gqaCV/PNFh8BZQCQZXfIOqI= -github.com/pingcap/kvproto v0.0.0-20200518112156-d4aeb467de29/go.mod h1:IOdRDPLyda8GX2hE/jO7gqaCV/PNFh8BZQCQZXfIOqI= -github.com/pingcap/kvproto v0.0.0-20200706115936-1e0910aabe6c/go.mod h1:IOdRDPLyda8GX2hE/jO7gqaCV/PNFh8BZQCQZXfIOqI= -github.com/pingcap/kvproto v0.0.0-20200818080353-7aaed8998596/go.mod h1:IOdRDPLyda8GX2hE/jO7gqaCV/PNFh8BZQCQZXfIOqI= github.com/pingcap/kvproto v0.0.0-20200907074027-32a3a0accf7d h1:gvJScINTd/HFasp82W1paGTfbYe2Bnzn8QBOJXckLwY= github.com/pingcap/kvproto v0.0.0-20200907074027-32a3a0accf7d/go.mod h1:IOdRDPLyda8GX2hE/jO7gqaCV/PNFh8BZQCQZXfIOqI= +github.com/pingcap/kvproto v0.0.0-20201126113434-70db5fb4b0dc h1:BtszN3YR5EScxiGGTD3tAf4CQE90bczkOY0lLa07EJA= +github.com/pingcap/kvproto v0.0.0-20201126113434-70db5fb4b0dc/go.mod h1:IOdRDPLyda8GX2hE/jO7gqaCV/PNFh8BZQCQZXfIOqI= github.com/pingcap/log v0.0.0-20191012051959-b742a5d432e9/go.mod h1:4rbK1p9ILyIfb6hU7OG2CiWSqMXnp3JMbiaVJ6mvoY8= github.com/pingcap/log v0.0.0-20200117041106-d28c14d3b1cd/go.mod h1:4rbK1p9ILyIfb6hU7OG2CiWSqMXnp3JMbiaVJ6mvoY8= github.com/pingcap/log v0.0.0-20200511115504-543df19646ad/go.mod h1:4rbK1p9ILyIfb6hU7OG2CiWSqMXnp3JMbiaVJ6mvoY8= -github.com/pingcap/log v0.0.0-20200828042413-fce0951f1463 h1:Jboj+s4jSCp5E1WDgmRUv5rIFKFHaaSWuSZ4wMwXIcc= -github.com/pingcap/log v0.0.0-20200828042413-fce0951f1463/go.mod h1:4rbK1p9ILyIfb6hU7OG2CiWSqMXnp3JMbiaVJ6mvoY8= github.com/pingcap/log v0.0.0-20201112100606-8f1e84a3abc8 h1:M+DNpOu/I3uDmwee6vcnoPd6GgSMqND4gxvDQ/W584U= github.com/pingcap/log v0.0.0-20201112100606-8f1e84a3abc8/go.mod h1:4rbK1p9ILyIfb6hU7OG2CiWSqMXnp3JMbiaVJ6mvoY8= -github.com/pingcap/parser v0.0.0-20200424075042-8222d8b724a4/go.mod h1:9v0Edh8IbgjGYW2ArJr19E+bvL8zKahsFp+ixWeId+4= -github.com/pingcap/parser v0.0.0-20200507022230-f3bf29096657/go.mod h1:9v0Edh8IbgjGYW2ArJr19E+bvL8zKahsFp+ixWeId+4= -github.com/pingcap/parser v0.0.0-20200603032439-c4ecb4508d2f/go.mod h1:9v0Edh8IbgjGYW2ArJr19E+bvL8zKahsFp+ixWeId+4= -github.com/pingcap/parser v0.0.0-20200623164729-3a18f1e5dceb/go.mod h1:vQdbJqobJAgFyiRNNtXahpMoGWwPEuWciVEK5A20NS0= -github.com/pingcap/parser v0.0.0-20200803072748-fdf66528323d/go.mod h1:vQdbJqobJAgFyiRNNtXahpMoGWwPEuWciVEK5A20NS0= -github.com/pingcap/parser v0.0.0-20200901062802-475ea5e2e0a7/go.mod h1:vQdbJqobJAgFyiRNNtXahpMoGWwPEuWciVEK5A20NS0= -github.com/pingcap/parser v0.0.0-20200921063432-e220cfcfd026/go.mod h1:dMMvhqeowLnAsDWspyalgxXoRUnP09cZ7wAnpt2e/S8= github.com/pingcap/parser v0.0.0-20201130080042-c3ddfec58248 h1:EdMvJd+frXT7xQPCB+CHkQS6F+Wb0ivBx4iw2vKrD0Y= github.com/pingcap/parser v0.0.0-20201130080042-c3ddfec58248/go.mod h1:GbEr2PgY72/4XqPZzmzstlOU/+il/wrjeTNFs6ihsSE= -github.com/pingcap/pd/v4 v4.0.0-rc.1.0.20200422143320-428acd53eba2/go.mod h1:s+utZtXDznOiL24VK0qGmtoHjjXNsscJx3m1n8cC56s= -github.com/pingcap/pd/v4 v4.0.0-rc.2.0.20200520083007-2c251bd8f181/go.mod h1:q4HTx/bA8aKBa4S7L+SQKHvjRPXCRV0tA0yRw0qkZSA= -github.com/pingcap/pd/v4 v4.0.5-0.20200817114353-e465cafe8a91/go.mod h1:m9OEkKoPMQWjrbJ9pqjjeCqzqxraZrPEuWa1OI6Wcek= github.com/pingcap/sysutil v0.0.0-20200206130906-2bfa6dc40bcd/go.mod h1:EB/852NMQ+aRKioCpToQ94Wl7fktV+FNnxf3CX/TTXI= -github.com/pingcap/sysutil v0.0.0-20200408114249-ed3bd6f7fdb1/go.mod h1:EB/852NMQ+aRKioCpToQ94Wl7fktV+FNnxf3CX/TTXI= github.com/pingcap/sysutil v0.0.0-20200715082929-4c47bcac246a h1:i2RElJ2aykSqZKeY+3SK18NHhajil8cQdG77wHe+P1Y= github.com/pingcap/sysutil v0.0.0-20200715082929-4c47bcac246a/go.mod h1:EB/852NMQ+aRKioCpToQ94Wl7fktV+FNnxf3CX/TTXI= github.com/pingcap/sysutil v0.0.0-20201130064824-f0c8aa6a6966 h1:JI0wOAb8aQML0vAVLHcxTEEC0VIwrk6gtw3WjbHvJLA= github.com/pingcap/sysutil v0.0.0-20201130064824-f0c8aa6a6966/go.mod h1:EB/852NMQ+aRKioCpToQ94Wl7fktV+FNnxf3CX/TTXI= -github.com/pingcap/tidb v1.1.0-beta.0.20200424154252-5ede18f10eed/go.mod h1:m2VDlJDbUeHPCXAfKPajqLmB1uLvWpkKk3zALNqDYdw= -github.com/pingcap/tidb v1.1.0-beta.0.20200509133407-a9dc72cf2558/go.mod h1:cXNbVSQAkwwmjFQmEnEPI00Z2/Y/KOhouttUPERiInE= -github.com/pingcap/tidb v1.1.0-beta.0.20200606093724-b5b4da0e6a90/go.mod h1:aaBBi3OJmYjENWY31YYOY8K6UoZZYgjZVZH56D0QIdE= -github.com/pingcap/tidb v1.1.0-beta.0.20200715100003-b4da443a3c4c/go.mod h1:TplKBs1sevRvK11aT7ro0ntTCalyh1fMaWACp03dQf4= -github.com/pingcap/tidb v1.1.0-beta.0.20200716023258-b10faca6ff89/go.mod h1:hDlQ5BJ4rLLCOUlvXqW3skyYEjyymzeTA3eXpNEDx38= -github.com/pingcap/tidb v1.1.0-beta.0.20200820092836-c5b7658b0896/go.mod h1:IAStISSVhEI9Gp/sE4w6Ms0WxpdBJ9qNTczNyskvd5A= -github.com/pingcap/tidb v1.1.0-beta.0.20200921100526-29e8c0913100/go.mod h1:iLesxD6gb1IAt/hIH8+4YZk6yIGn6mRxB/iCDG8Tk9U= -github.com/pingcap/tidb-tools v4.0.0-beta.1.0.20200306084441-875bd09aa3d5+incompatible/go.mod h1:XGdcy9+yqlDSEMTpOXnwf3hiTeqrV6MN/u1se9N8yIM= -github.com/pingcap/tidb-tools v4.0.0-rc.1.0.20200421113014-507d2bb3a15e+incompatible/go.mod h1:XGdcy9+yqlDSEMTpOXnwf3hiTeqrV6MN/u1se9N8yIM= -github.com/pingcap/tidb-tools v4.0.0-rc.1.0.20200514040632-f76b3e428e19+incompatible/go.mod h1:XGdcy9+yqlDSEMTpOXnwf3hiTeqrV6MN/u1se9N8yIM= -github.com/pingcap/tidb-tools v4.0.0-rc.2.0.20200521050818-6dd445d83fe0+incompatible/go.mod h1:XGdcy9+yqlDSEMTpOXnwf3hiTeqrV6MN/u1se9N8yIM= -github.com/pingcap/tidb-tools v4.0.1-0.20200530144555-cdec43635625+incompatible/go.mod h1:XGdcy9+yqlDSEMTpOXnwf3hiTeqrV6MN/u1se9N8yIM= github.com/pingcap/tidb-tools v4.0.6-0.20200828085514-03575b185007+incompatible h1:1GY6Qu5pT7JZ4QwkPcz+daXKhkDgKY1F6qKxifSp+tI= github.com/pingcap/tidb-tools v4.0.6-0.20200828085514-03575b185007+incompatible/go.mod h1:XGdcy9+yqlDSEMTpOXnwf3hiTeqrV6MN/u1se9N8yIM= -github.com/pingcap/tipb v0.0.0-20190428032612-535e1abaa330/go.mod h1:RtkHW8WbcNxj8lsbzjaILci01CtYnYbIkQhjyZWrWVI= -github.com/pingcap/tipb v0.0.0-20200417094153-7316d94df1ee/go.mod h1:RtkHW8WbcNxj8lsbzjaILci01CtYnYbIkQhjyZWrWVI= -github.com/pingcap/tipb v0.0.0-20200522051215-f31a15d98fce/go.mod h1:RtkHW8WbcNxj8lsbzjaILci01CtYnYbIkQhjyZWrWVI= github.com/pingcap/tipb v0.0.0-20200618092958-4fad48b4c8c3 h1:ESL3eIt1kUt8IMvR1011ejZlAyDcOzw89ARvVHvpD5k= github.com/pingcap/tipb v0.0.0-20200618092958-4fad48b4c8c3/go.mod h1:RtkHW8WbcNxj8lsbzjaILci01CtYnYbIkQhjyZWrWVI= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -508,7 +430,6 @@ github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6So github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= -github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/sasha-s/go-deadlock v0.2.0/go.mod h1:StQn567HiB1fF2yJ44N9au7wOhrPS3iZqiDbRupzT10= github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= @@ -523,7 +444,6 @@ github.com/shurcooL/httpfs v0.0.0-20190707220628-8d4bc4ba7749/go.mod h1:ZY1cvUeJ github.com/shurcooL/httpgzip v0.0.0-20190720172056-320755c1c1b0 h1:mj/nMDAwTBiaCqMEs4cYCqF7pO6Np7vhy1D1wcQGz+E= github.com/shurcooL/httpgzip v0.0.0-20190720172056-320755c1c1b0/go.mod h1:919LwcH0M7/W4fcZ0/jy0qGght1GIhqyS/EgWGH2j5Q= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= -github.com/shurcooL/vfsgen v0.0.0-20181020040650-a97a25d856ca/go.mod h1:TrYk7fJVaAttu97ZZKrO9UbRa8izdowaMIZcxYMbVaw= github.com/shurcooL/vfsgen v0.0.0-20181202132449-6a9ea43bcacd h1:ug7PpSOB5RBPK1Kg6qskGBoP3Vnj/aNYFTznWvlkGo0= github.com/shurcooL/vfsgen v0.0.0-20181202132449-6a9ea43bcacd/go.mod h1:TrYk7fJVaAttu97ZZKrO9UbRa8izdowaMIZcxYMbVaw= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= @@ -538,7 +458,6 @@ github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2 github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= -github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= github.com/spf13/cobra v1.0.0 h1:6m/oheQuQ13N9ks4hubMG6BnvwOeaJrqSPLahSnczz8= github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= @@ -546,7 +465,6 @@ github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnIn github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= @@ -558,12 +476,9 @@ github.com/stretchr/testify v1.5.1 h1:nOGnQDM7FYENwehXlg/kFVnos3rEvtKTjRvOWSzb6H github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/swaggo/files v0.0.0-20190704085106-630677cd5c14/go.mod h1:gxQT6pBGRuIGunNf/+tSOB5OHvguWi8Tbt82WOkf35E= github.com/swaggo/gin-swagger v1.2.0/go.mod h1:qlH2+W7zXGZkczuL+r2nEBR2JTT+/lX05Nn6vPhc7OI= -github.com/swaggo/http-swagger v0.0.0-20200103000832-0e9263c4b516/go.mod h1:O1lAbCgAAX/KZ80LM/OXwtWFI/5TvZlwxSg8Cq08PV0= github.com/swaggo/http-swagger v0.0.0-20200308142732-58ac5e232fba/go.mod h1:O1lAbCgAAX/KZ80LM/OXwtWFI/5TvZlwxSg8Cq08PV0= github.com/swaggo/swag v1.5.1/go.mod h1:1Bl9F/ZBpVWh22nY0zmYyASPO1lI/zIwRDrpZU+tv8Y= github.com/swaggo/swag v1.6.3/go.mod h1:wcc83tB4Mb2aNiL/HP4MFeQdpHUrca+Rp/DRNgWAUio= -github.com/swaggo/swag v1.6.5/go.mod h1:Y7ZLSS0d0DdxhWGVhQdu+Bu1QhaF5k0RD7FKdiAykeY= -github.com/swaggo/swag v1.6.6-0.20200323071853-8e21f4cefeea/go.mod h1:xDhTyuFIujYiN3DKWC/H/83xcfHp+UE/IzWWampG7Zc= github.com/swaggo/swag v1.6.6-0.20200529100950-7c765ddd0476/go.mod h1:xDhTyuFIujYiN3DKWC/H/83xcfHp+UE/IzWWampG7Zc= github.com/syndtr/goleveldb v0.0.0-20180815032940-ae2bd5eed72d/go.mod h1:Z4AUp2Km+PwemOoO/VB5AOx9XSsIItzFjoJlOSiYmn0= github.com/syndtr/goleveldb v1.0.1-0.20190625010220-02440ea7a285 h1:uSDYjYejelKyceA6DiCsngFof9jAyeaSyX9XC5a1a7Q= @@ -573,32 +488,25 @@ github.com/tiancaiamao/appdash v0.0.0-20181126055449-889f96f722a2/go.mod h1:2PfK github.com/tidwall/gjson v1.3.5/go.mod h1:P256ACg0Mn+j1RXIDXoss50DeIABTYK1PULOJHhxOls= github.com/tidwall/match v1.0.1/go.mod h1:LujAq0jyVjBy028G1WhWfIzbpQfMO8bBZ6Tyb0+pL9E= github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= -github.com/tikv/pd v1.1.0-beta.0.20200907080620-6830f5bb92a2/go.mod h1:6OYi62ks7nFIBtWWpOjnngr5LNos4Hvi1BzArCWAlBc= github.com/tikv/pd v1.1.0-beta.0.20200921100508-9ee41c4144f3 h1:T2ecr5rhDLSL1Qz1ji4znQ/XyZLPM728lCLm7plx8Kg= github.com/tikv/pd v1.1.0-beta.0.20200921100508-9ee41c4144f3/go.mod h1:Yj52KUebQf2r3JG6pSRZ22E+lSrZZPNFbs4zjZEkEvY= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/tmc/grpc-websocket-proxy v0.0.0-20171017195756-830351dc03c6/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5 h1:LnC5Kc/wtumK+WB441p7ynQJzVuNRJiqddSIE3IlSEQ= github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/uber-go/atomic v1.3.2/go.mod h1:/Ct5t2lcmbJ4OSe/waGBoaVvVqtO0bmtfVNex1PFV8g= github.com/uber-go/atomic v1.4.0 h1:yOuPqEq4ovnhEjpHmfFwsqBXDYbQeT6Nb0bwD6XnD5o= github.com/uber-go/atomic v1.4.0/go.mod h1:/Ct5t2lcmbJ4OSe/waGBoaVvVqtO0bmtfVNex1PFV8g= -github.com/uber/jaeger-client-go v2.15.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk= github.com/uber/jaeger-client-go v2.22.1+incompatible h1:NHcubEkVbahf9t3p75TOCR83gdUHXjRJvjoBh1yACsM= github.com/uber/jaeger-client-go v2.22.1+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk= -github.com/uber/jaeger-lib v1.5.0/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U= github.com/uber/jaeger-lib v2.2.0+incompatible h1:MxZXOiR2JuoANZ3J6DE/U0kSFv/eJ/GfSYVCjK7dyaw= github.com/uber/jaeger-lib v2.2.0+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U= github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= github.com/ugorji/go v1.1.5-pre/go.mod h1:FwP/aQVg39TXzItUBMwnWp9T9gPQnXw4Poh4/oBQZ/0= github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= github.com/ugorji/go/codec v0.0.0-20181022190402-e5e69e061d4f/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= -github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= github.com/ugorji/go/codec v1.1.5-pre/go.mod h1:tULtS6Gy1AE1yCENaw4Vb//HLH5njI2tfCQDUqRd8fI= github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= github.com/unrolled/render v0.0.0-20171102162132-65450fb6b2d3/go.mod h1:tu82oB5W2ykJRVioYsB+IQKcft7ryBr7w12qMBUPyXg= github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= -github.com/urfave/cli v1.22.2/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= github.com/urfave/cli/v2 v2.1.1/go.mod h1:SE9GqnLQmjVa0iPEY0f1w3ygNIYcIJ0OKPMoW2caLfQ= github.com/urfave/negroni v0.3.0/go.mod h1:Meg73S6kFm/4PpbYdq35yYWoCZ9mS/YSx+lKnmiohz4= github.com/vmihailenco/msgpack/v4 v4.3.11/go.mod h1:gborTTJjAo/GWTqqRjrLCn9pgNN+NXzzngzBKDPIqw4= @@ -608,7 +516,6 @@ github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2 h1:eY9dn8+vbi4tKz5 github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= github.com/yookoala/realpath v1.0.0/go.mod h1:gJJMA9wuX7AcqLy1+ffPatSCySA1FQ2S8Ya9AIoYBpE= -github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= @@ -646,12 +553,10 @@ go.uber.org/zap v1.9.1/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.12.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= -go.uber.org/zap v1.14.1/go.mod h1:Mb2vm2krFEG5DV0W9qcHBYFtp/Wku1cvYaqPsS/WYfc= go.uber.org/zap v1.15.0/go.mod h1:Mb2vm2krFEG5DV0W9qcHBYFtp/Wku1cvYaqPsS/WYfc= go.uber.org/zap v1.16.0 h1:uFRZXykJGK9lLY4HtgSw44DnIcAM+kRBP7x5m+NpAOM= go.uber.org/zap v1.16.0/go.mod h1:MA8QOfq0BHJwdXa996Y4dYkAqRKB8/1K1QMMZVaNZjQ= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= @@ -659,7 +564,6 @@ golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191205180655-e7c4368fe9dd/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200204104054-c9f3fb736b72/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= @@ -717,7 +621,6 @@ golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200813134508-3edf25e44fcc h1:zK/HqS5bZxDptfPJNq8v7vJfXtkU7r9TLIoSr1bXaP4= @@ -741,7 +644,6 @@ golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181228144115-9a3f9b0469bb/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -772,7 +674,6 @@ golang.org/x/sys v0.0.0-20200819171115-d785dc25833f/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.4 h1:0YWbFKbhXG/wIiuHDSKpS0Iy7FSA+u45VtBMfQcFTTc= golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -809,15 +710,11 @@ golang.org/x/tools v0.0.0-20191114200427-caa0b0f7d508/go.mod h1:b+2E5dAYhXwXZwtn golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200225230052-807dcd883420/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200325010219-a49f79bcc224/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= -golang.org/x/tools v0.0.0-20200325203130-f53864d0dba1/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= golang.org/x/tools v0.0.0-20200410194907-79a7a3126eef/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200521211927-2b542361a4fc/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200527183253-8e7acdbce89d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200820010801-b793a1359eac h1:DugppSxw0LSF8lcjaODPJZoDzq0ElTGskTst3ZaBkHI= golang.org/x/tools v0.0.0-20200820010801-b793a1359eac/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= @@ -883,7 +780,6 @@ gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMy gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE= gopkg.in/go-playground/validator.v8 v8.18.2/go.mod h1:RX2a/7Ha8BgOhfk7j780h4/u/RRjR0eouCJSH80/M2Y= gopkg.in/go-playground/validator.v9 v9.29.1/go.mod h1:+c9/zcJMFNgbLvly1L1V+PpxWdVbfP1avr/N00E2vyQ= -gopkg.in/go-playground/validator.v9 v9.31.0/go.mod h1:+c9/zcJMFNgbLvly1L1V+PpxWdVbfP1avr/N00E2vyQ= gopkg.in/natefinch/lumberjack.v2 v2.0.0 h1:1Lc07Kr7qY4U2YPouBjpCLxpiyxIVoxqXgkXLknAOE8= gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= @@ -904,9 +800,6 @@ honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= -honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -honnef.co/go/tools v0.0.1-2020.1.5/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.6 h1:W18jzjh8mfPez+AwGLxmOImucz/IFjpNlrKVnaj2YVc= honnef.co/go/tools v0.0.1-2020.1.6/go.mod h1:pyyisuGw24ruLjrr1ddx39WE0y9OooInRzEYLhQB2YY= k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I= @@ -914,7 +807,6 @@ rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8 sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= sigs.k8s.io/yaml v1.2.0 h1:kr/MCeFWJWTwyaHoR9c8EjH9OumOmoF9YGiZd7lFm/Q= sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= -sourcegraph.com/sourcegraph/appdash v0.0.0-20180531100431-4c381bd170b4/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0 h1:ucqkfpjg9WzSUubAO62csmucvxl4/JeW3F4I4909XkM= sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= sourcegraph.com/sourcegraph/appdash-data v0.0.0-20151005221446-73f23eafcf67 h1:e1sMhtVq9AfcEy8AXNb8eSg6gbzfdpYhoNqnPJa+GzI= From 69f05ea55e8409152a7721b2dd8822af011355ea Mon Sep 17 00:00:00 2001 From: bb7133 Date: Sat, 19 Dec 2020 09:20:03 +0800 Subject: [PATCH 220/229] planner: the issue that incorrect result is returned for indeterministic function when executing a prepared point-get update. (#21883) --- executor/seqtest/prepared_test.go | 30 +++++++++++++++++++++++++++--- planner/core/common_plans.go | 20 +++++++++++--------- 2 files changed, 38 insertions(+), 12 deletions(-) diff --git a/executor/seqtest/prepared_test.go b/executor/seqtest/prepared_test.go index 3a7b6dbe47c5b..d01f596d2b68b 100644 --- a/executor/seqtest/prepared_test.go +++ b/executor/seqtest/prepared_test.go @@ -532,19 +532,19 @@ func (s *seqTestSuite) TestPreparedUpdate(c *C) { if flag { counter.Write(pb) hit := pb.GetCounter().GetValue() - c.Check(hit, Equals, float64(2)) + c.Check(hit, Equals, float64(0)) } tk.MustExec(`set @a=2,@b=200; execute stmt_update using @b,@a;`) if flag { counter.Write(pb) hit := pb.GetCounter().GetValue() - c.Check(hit, Equals, float64(3)) + c.Check(hit, Equals, float64(1)) } tk.MustExec(`set @a=3,@b=300; execute stmt_update using @b,@a;`) if flag { counter.Write(pb) hit := pb.GetCounter().GetValue() - c.Check(hit, Equals, float64(4)) + c.Check(hit, Equals, float64(2)) } result := tk.MustQuery("select id, c1 from prepare_test where id = ?", 1) @@ -556,6 +556,30 @@ func (s *seqTestSuite) TestPreparedUpdate(c *C) { } } +func (s *seqTestSuite) TestIssue21884(c *C) { + orgEnable := plannercore.PreparedPlanCacheEnabled() + defer func() { + plannercore.SetPreparedPlanCache(orgEnable) + }() + plannercore.SetPreparedPlanCache(false) + + tk := testkit.NewTestKit(c, s.store) + + tk.MustExec("use test") + tk.MustExec("drop table if exists prepare_test") + tk.MustExec("create table prepare_test(a bigint primary key, status bigint, last_update_time datetime)") + tk.MustExec("insert into prepare_test values (100, 0, '2020-12-18 20:00:00')") + tk.MustExec("prepare stmt from 'update prepare_test set status = ?, last_update_time = now() where a = 100'") + tk.MustExec("set @status = 1") + tk.MustExec("execute stmt using @status") + updateTime := tk.MustQuery("select last_update_time from prepare_test").Rows()[0][0] + // Sleep 1 second to make sure `last_update_time` is updated. + time.Sleep(1 * time.Second) + tk.MustExec("execute stmt using @status") + newUpdateTime := tk.MustQuery("select last_update_time from prepare_test").Rows()[0][0] + c.Assert(updateTime == newUpdateTime, IsFalse) +} + func (s *seqTestSuite) TestPreparedDelete(c *C) { orgEnable := plannercore.PreparedPlanCacheEnabled() defer func() { diff --git a/planner/core/common_plans.go b/planner/core/common_plans.go index 5d8bd2d6adb3a..da426594422bb 100644 --- a/planner/core/common_plans.go +++ b/planner/core/common_plans.go @@ -418,15 +418,17 @@ func (e *Execute) tryCachePointPlan(ctx context.Context, sctx sessionctx.Context return err } case *Update: - ok, err = IsPointUpdateByAutoCommit(sctx, p) - if err != nil { - return err - } - if ok { - // make constant expression store paramMarker - sctx.GetSessionVars().StmtCtx.PointExec = true - p, names, err = OptimizeAstNode(ctx, sctx, prepared.Stmt, is) - } + // Temporarily turn off the cache for UPDATE to solve #21884. + + //ok, err = IsPointUpdateByAutoCommit(sctx, p) + //if err != nil { + // return err + //} + //if ok { + // // make constant expression store paramMarker + // sctx.GetSessionVars().StmtCtx.PointExec = true + // p, names, err = OptimizeAstNode(ctx, sctx, prepared.Stmt, is) + //} } if ok { // just cache point plan now From fc442cbf27583c9c1bf13104954b286208a71e51 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Tue, 22 Dec 2020 10:42:32 +0800 Subject: [PATCH 221/229] makefile: add testpkg target for Makefile to test single package (#18962) (#21402) Signed-off-by: ti-srebot --- Makefile | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/Makefile b/Makefile index bc901e8f1f2ff..4b83ddeff33f3 100644 --- a/Makefile +++ b/Makefile @@ -321,3 +321,13 @@ vectorized-bench: -bench=BenchmarkVectorizedBuiltin$(VB_FILE)Func \ -run=BenchmarkVectorizedBuiltin$(VB_FILE)Func \ -args "$(VB_FUNC)" + +testpkg: failpoint-enable +ifeq ("$(pkg)", "") + @echo "Require pkg parameter" +else + @echo "Running unit test for github.com/pingcap/tidb/$(pkg)" + @export log_level=fatal; export TZ='Asia/Shanghai'; \ + $(GOTEST) -ldflags '$(TEST_LDFLAGS)' -cover github.com/pingcap/tidb/$(pkg) -check.p true -check.timeout 4s || { $(FAILPOINT_DISABLE); exit 1; } +endif + @$(FAILPOINT_DISABLE) From 39da88186a2d5fa4621ec0f2b1456f3f1beb19ed Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Tue, 22 Dec 2020 11:02:40 +0800 Subject: [PATCH 222/229] *: update the tools dependence (#21370) (#21375) Signed-off-by: ti-srebot --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 05e6466c299f6..5298a9caa008b 100644 --- a/go.mod +++ b/go.mod @@ -50,7 +50,7 @@ require ( github.com/pingcap/log v0.0.0-20201112100606-8f1e84a3abc8 github.com/pingcap/parser v0.0.0-20201130080042-c3ddfec58248 github.com/pingcap/sysutil v0.0.0-20201130064824-f0c8aa6a6966 - github.com/pingcap/tidb-tools v4.0.6-0.20200828085514-03575b185007+incompatible + github.com/pingcap/tidb-tools v4.0.9-0.20201127090955-2707c97b3853+incompatible github.com/pingcap/tipb v0.0.0-20200618092958-4fad48b4c8c3 github.com/prometheus/client_golang v1.5.1 github.com/prometheus/client_model v0.2.0 diff --git a/go.sum b/go.sum index 0ea4866e94b70..86c82ef9366b6 100644 --- a/go.sum +++ b/go.sum @@ -393,8 +393,8 @@ github.com/pingcap/sysutil v0.0.0-20200715082929-4c47bcac246a h1:i2RElJ2aykSqZKe github.com/pingcap/sysutil v0.0.0-20200715082929-4c47bcac246a/go.mod h1:EB/852NMQ+aRKioCpToQ94Wl7fktV+FNnxf3CX/TTXI= github.com/pingcap/sysutil v0.0.0-20201130064824-f0c8aa6a6966 h1:JI0wOAb8aQML0vAVLHcxTEEC0VIwrk6gtw3WjbHvJLA= github.com/pingcap/sysutil v0.0.0-20201130064824-f0c8aa6a6966/go.mod h1:EB/852NMQ+aRKioCpToQ94Wl7fktV+FNnxf3CX/TTXI= -github.com/pingcap/tidb-tools v4.0.6-0.20200828085514-03575b185007+incompatible h1:1GY6Qu5pT7JZ4QwkPcz+daXKhkDgKY1F6qKxifSp+tI= -github.com/pingcap/tidb-tools v4.0.6-0.20200828085514-03575b185007+incompatible/go.mod h1:XGdcy9+yqlDSEMTpOXnwf3hiTeqrV6MN/u1se9N8yIM= +github.com/pingcap/tidb-tools v4.0.9-0.20201127090955-2707c97b3853+incompatible h1:ceznmu/lLseGHP/jKyOa/3u/5H3wtLLLqkH2V3ssSjg= +github.com/pingcap/tidb-tools v4.0.9-0.20201127090955-2707c97b3853+incompatible/go.mod h1:XGdcy9+yqlDSEMTpOXnwf3hiTeqrV6MN/u1se9N8yIM= github.com/pingcap/tipb v0.0.0-20200618092958-4fad48b4c8c3 h1:ESL3eIt1kUt8IMvR1011ejZlAyDcOzw89ARvVHvpD5k= github.com/pingcap/tipb v0.0.0-20200618092958-4fad48b4c8c3/go.mod h1:RtkHW8WbcNxj8lsbzjaILci01CtYnYbIkQhjyZWrWVI= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= From b5c341a09d42029f2e7359e40aa28fdab39cd6ff Mon Sep 17 00:00:00 2001 From: cfzjywxk Date: Tue, 22 Dec 2020 11:54:11 +0800 Subject: [PATCH 223/229] txn: support pessimistic retry for amend pessimistic lock (#21615) --- session/pessimistic_test.go | 39 +++++++++++++++++++++++++++++++++++++ store/tikv/2pc.go | 39 +++++++++++++++++++++++++++++++------ 2 files changed, 72 insertions(+), 6 deletions(-) diff --git a/session/pessimistic_test.go b/session/pessimistic_test.go index de081b7b5a26f..189e047eda770 100644 --- a/session/pessimistic_test.go +++ b/session/pessimistic_test.go @@ -1834,6 +1834,45 @@ func (s *testPessimisticSuite) TestAmendForUniqueIndex(c *C) { tk.MustExec("insert into t values (3, 2) on duplicate key update id = values(id) and c = values(c)") tk.MustExec("commit") tk2.MustExec("admin check table t") + + // Test pessimistic retry for unique index amend. + tk2.MustExec("drop table if exists t;") + tk2.MustExec("create table t (id int key, c int);") + tk2.MustExec("insert into t (id, c) values (1, 1), (2, 2);") + tk.MustExec("begin pessimistic") + tk2.MustExec("alter table t add unique index uk(c)") + tk.MustExec("insert into t values(3, 5)") + tk.MustExec("update t set c = 4 where c = 2") + errCh := make(chan error, 1) + go func() { + var err error + err = tk2.ExecToErr("begin pessimistic") + if err != nil { + errCh <- err + return + } + err = tk2.ExecToErr("insert into t values(5, 5)") + if err != nil { + errCh <- err + return + } + err = tk2.ExecToErr("delete from t where id = 5") + if err != nil { + errCh <- err + return + } + // let commit in tk start. + errCh <- err + time.Sleep(time.Millisecond * 100) + err = tk2.ExecToErr("commit") + errCh <- err + }() + err = <-errCh + c.Assert(err, Equals, nil) + tk.MustExec("commit") + tk2.MustExec("admin check table t") + err = <-errCh + c.Assert(err, Equals, nil) } func (s *testPessimisticSuite) TestResolveStalePessimisticPrimaryLock(c *C) { diff --git a/store/tikv/2pc.go b/store/tikv/2pc.go index 0bf6d7c1abf0f..0e4168bfd1a2d 100644 --- a/store/tikv/2pc.go +++ b/store/tikv/2pc.go @@ -1535,17 +1535,44 @@ func (c *twoPhaseCommitter) tryAmendTxn(ctx context.Context, startInfoSchema Sch c.doingAmend = true defer func() { c.doingAmend = false }() if keysNeedToLock.len() > 0 { - pessimisticLockBo := NewBackofferWithVars(ctx, pessimisticLockMaxBackoff, c.txn.vars) lCtx := &kv.LockCtx{ - ForUpdateTS: c.forUpdateTS, - LockWaitTime: kv.LockNoWait, + Killed: c.lockCtx.Killed, + ForUpdateTS: c.forUpdateTS, + LockWaitTime: c.lockCtx.LockWaitTime, + WaitStartTime: time.Now(), + } + tryTimes := uint(0) + retryLimit := config.GetGlobalConfig().PessimisticTxn.MaxRetryCount + for tryTimes < retryLimit { + pessimisticLockBo := NewBackofferWithVars(ctx, pessimisticLockMaxBackoff, c.txn.vars) + err = c.pessimisticLockMutations(pessimisticLockBo, lCtx, keysNeedToLock) + if err != nil { + // KeysNeedToLock won't change, so don't async rollback pessimistic locks here for write conflict. + if terror.ErrorEqual(kv.ErrWriteConflict, err) { + newForUpdateTSVer, err := c.store.CurrentVersion() + if err != nil { + return false, errors.Trace(err) + } + lCtx.ForUpdateTS = newForUpdateTSVer.Ver + c.forUpdateTS = newForUpdateTSVer.Ver + logutil.Logger(ctx).Info("amend pessimistic lock pessimistic retry lock", + zap.Uint("tryTimes", tryTimes), zap.Uint64("startTS", c.startTS), + zap.Uint64("newForUpdateTS", c.forUpdateTS)) + tryTimes++ + continue + } + logutil.Logger(ctx).Warn("amend pessimistic lock has failed", zap.Error(err), zap.Uint64("txnStartTS", c.startTS)) + return false, err + } + logutil.Logger(ctx).Info("amend pessimistic lock finished", zap.Uint64("startTS", c.startTS), + zap.Uint64("forUpdateTS", c.forUpdateTS), zap.Int("keys", keysNeedToLock.len())) + break } - err = c.pessimisticLockMutations(pessimisticLockBo, lCtx, keysNeedToLock) if err != nil { - logutil.Logger(ctx).Warn("amend pessimistic lock has failed", zap.Error(err), zap.Uint64("txnStartTS", c.startTS)) + logutil.Logger(ctx).Warn("amend pessimistic lock failed after retry", + zap.Uint("tryTimes", tryTimes), zap.Uint64("startTS", c.startTS)) return false, err } - logutil.Logger(ctx).Info("amend pessimistic lock", zap.Uint64("startTS", c.startTS), zap.Uint64("forUpdateTS", c.forUpdateTS)) } prewriteBo := NewBackofferWithVars(ctx, PrewriteMaxBackoff, c.txn.vars) err = c.prewriteMutations(prewriteBo, *addMutations) From a6f26437f5b3f00036de0b3bfbca42167d41bd8f Mon Sep 17 00:00:00 2001 From: you06 Date: Tue, 22 Dec 2020 14:11:31 +0800 Subject: [PATCH 224/229] planner: check index valid while forUpdateRead (#21596) Signed-off-by: you06 --- planner/core/logical_plan_builder.go | 11 +- planner/core/logical_plans.go | 6 ++ planner/core/planbuilder.go | 94 ++++++++++++++-- planner/core/point_get_plan.go | 40 ++++++- planner/core/rule_partition_processor.go | 2 +- session/pessimistic_test.go | 130 +++++++++++++++++++++++ 6 files changed, 267 insertions(+), 16 deletions(-) diff --git a/planner/core/logical_plan_builder.go b/planner/core/logical_plan_builder.go index 5d397e6fd8abb..3f9cdcaaedc56 100644 --- a/planner/core/logical_plan_builder.go +++ b/planner/core/logical_plan_builder.go @@ -2657,6 +2657,11 @@ func (b *PlanBuilder) buildSelect(ctx context.Context, sel *ast.SelectStmt) (p L gbyCols []expression.Expression ) + // set for update read to true before building result set node + if isForUpdateReadSelectLock(sel.LockTp) { + b.isForUpdateRead = true + } + if sel.From != nil { p, err = b.buildResultSetNode(ctx, sel.From.TableRefs) if err != nil { @@ -2924,7 +2929,7 @@ func (b *PlanBuilder) buildDataSource(ctx context.Context, tn *ast.TableName, as if tblName.L == "" { tblName = tn.Name } - possiblePaths, err := getPossibleAccessPaths(b.ctx, b.TableHints(), tn.IndexHints, tbl, dbName, tblName) + possiblePaths, err := getPossibleAccessPaths(b.ctx, b.TableHints(), tn.IndexHints, tbl, dbName, tblName, b.isForUpdateRead, b.is.SchemaMetaVersion()) if err != nil { return nil, err } @@ -3020,6 +3025,8 @@ func (b *PlanBuilder) buildDataSource(ctx context.Context, tn *ast.TableName, as partitionNames: tn.PartitionNames, TblCols: make([]*expression.Column, 0, len(columns)), preferPartitions: make(map[int][]model.CIStr), + is: b.is, + isForUpdateRead: b.isForUpdateRead, }.Init(b.ctx, b.getSelectOffset()) var handleCol *expression.Column @@ -3533,6 +3540,7 @@ func (b *PlanBuilder) buildUpdate(ctx context.Context, update *ast.UpdateStmt) ( } b.inUpdateStmt = true + b.isForUpdateRead = true p, err := b.buildResultSetNode(ctx, update.TableRefs.TableRefs) if err != nil { @@ -3841,6 +3849,7 @@ func (b *PlanBuilder) buildDelete(ctx context.Context, delete *ast.DeleteStmt) ( }() b.inDeleteStmt = true + b.isForUpdateRead = true p, err := b.buildResultSetNode(ctx, delete.TableRefs.TableRefs) if err != nil { diff --git a/planner/core/logical_plans.go b/planner/core/logical_plans.go index 4cad55402ce8c..912262a15b8e4 100644 --- a/planner/core/logical_plans.go +++ b/planner/core/logical_plans.go @@ -22,6 +22,7 @@ import ( "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/expression" "github.com/pingcap/tidb/expression/aggregation" + "github.com/pingcap/tidb/infoschema" "github.com/pingcap/tidb/planner/property" "github.com/pingcap/tidb/planner/util" "github.com/pingcap/tidb/statistics" @@ -507,6 +508,11 @@ type DataSource struct { preferStoreType int // preferPartitions store the map, the key represents store type, the value represents the partition name list. preferPartitions map[int][]model.CIStr + is infoschema.InfoSchema + // isForUpdateRead should be true in either of the following situations + // 1. use `inside insert`, `update`, `delete` or `select for update` statement + // 2. isolation level is RC + isForUpdateRead bool } // ExtractCorrelatedCols implements LogicalPlan interface. diff --git a/planner/core/planbuilder.go b/planner/core/planbuilder.go index c412d2b36a09e..0dd569594ad8f 100644 --- a/planner/core/planbuilder.go +++ b/planner/core/planbuilder.go @@ -30,6 +30,7 @@ import ( "github.com/pingcap/parser/opcode" "github.com/pingcap/tidb/config" "github.com/pingcap/tidb/ddl" + "github.com/pingcap/tidb/domain" "github.com/pingcap/tidb/expression" "github.com/pingcap/tidb/infoschema" "github.com/pingcap/tidb/kv" @@ -42,7 +43,7 @@ import ( "github.com/pingcap/tidb/store/tikv" "github.com/pingcap/tidb/table" "github.com/pingcap/tidb/types" - "github.com/pingcap/tidb/types/parser_driver" + driver "github.com/pingcap/tidb/types/parser_driver" util2 "github.com/pingcap/tidb/util" "github.com/pingcap/tidb/util/chunk" "github.com/pingcap/tidb/util/execdetails" @@ -452,6 +453,11 @@ type PlanBuilder struct { // evalDefaultExpr needs this information to find the corresponding column. // It stores the OutputNames before buildProjection. allNames [][]*types.FieldName + + // isForUpdateRead should be true in either of the following situations + // 1. use `inside insert`, `update`, `delete` or `select for update` statement + // 2. isolation level is RC + isForUpdateRead bool } type handleColHelper struct { @@ -550,11 +556,12 @@ func NewPlanBuilder(sctx sessionctx.Context, is infoschema.InfoSchema, processor sctx.GetSessionVars().PlannerSelectBlockAsName = make([]ast.HintTable, processor.MaxSelectStmtOffset()+1) } return &PlanBuilder{ - ctx: sctx, - is: is, - colMapper: make(map[*ast.ColumnNameExpr]int), - handleHelper: &handleColHelper{id2HandleMapStack: make([]map[int64][]*expression.Column, 0)}, - hintProcessor: processor, + ctx: sctx, + is: is, + colMapper: make(map[*ast.ColumnNameExpr]int), + handleHelper: &handleColHelper{id2HandleMapStack: make([]map[int64][]*expression.Column, 0)}, + hintProcessor: processor, + isForUpdateRead: sctx.GetSessionVars().IsPessimisticReadConsistency(), } } @@ -817,20 +824,61 @@ func genTiFlashPath(tblInfo *model.TableInfo, isGlobalRead bool) *util.AccessPat return tiFlashPath } -func getPossibleAccessPaths(ctx sessionctx.Context, tableHints *tableHintInfo, indexHints []*ast.IndexHint, tbl table.Table, dbName, tblName model.CIStr) ([]*util.AccessPath, error) { +func isForUpdateReadSelectLock(lock ast.SelectLockType) bool { + return lock == ast.SelectLockForUpdate || lock == ast.SelectLockForUpdateNoWait +} + +func getLatestIndexInfo(ctx sessionctx.Context, id int64, startVer int64) (map[int64]*model.IndexInfo, bool, error) { + dom := domain.GetDomain(ctx) + if dom == nil { + return nil, false, errors.New("domain not found for ctx") + } + is := dom.InfoSchema() + if is.SchemaMetaVersion() == startVer { + return nil, false, nil + } + latestIndexes := make(map[int64]*model.IndexInfo) + latestTbl, exist := is.TableByID(id) + if exist { + latestTblInfo := latestTbl.Meta() + for _, index := range latestTblInfo.Indices { + latestIndexes[index.ID] = index + } + } + return latestIndexes, true, nil +} + +func getPossibleAccessPaths(ctx sessionctx.Context, tableHints *tableHintInfo, indexHints []*ast.IndexHint, tbl table.Table, dbName, tblName model.CIStr, check bool, startVer int64) ([]*util.AccessPath, error) { tblInfo := tbl.Meta() publicPaths := make([]*util.AccessPath, 0, len(tblInfo.Indices)+2) tp := kv.TiKV if tbl.Type().IsClusterTable() { tp = kv.TiDB } + publicPaths = append(publicPaths, &util.AccessPath{IsTablePath: true, StoreType: tp}) if tblInfo.TiFlashReplica != nil && tblInfo.TiFlashReplica.Available { publicPaths = append(publicPaths, genTiFlashPath(tblInfo, false)) publicPaths = append(publicPaths, genTiFlashPath(tblInfo, true)) } + + check = check && ctx.GetSessionVars().ConnectionID > 0 + var latestIndexes map[int64]*model.IndexInfo + var err error + for _, index := range tblInfo.Indices { if index.State == model.StatePublic { + if check && latestIndexes == nil { + latestIndexes, check, err = getLatestIndexInfo(ctx, tblInfo.ID, 0) + if err != nil { + return nil, err + } + } + if check { + if latestIndex, ok := latestIndexes[index.ID]; !ok || latestIndex.State != model.StatePublic { + continue + } + } publicPaths = append(publicPaths, &util.AccessPath{Index: index}) } } @@ -1218,13 +1266,40 @@ func (b *PlanBuilder) buildPhysicalIndexLookUpReaders(ctx context.Context, dbNam // get index information indexInfos := make([]*model.IndexInfo, 0, len(tblInfo.Indices)) indexLookUpReaders := make([]Plan, 0, len(tblInfo.Indices)) + + check := b.isForUpdateRead && b.ctx.GetSessionVars().ConnectionID > 0 + var latestIndexes map[int64]*model.IndexInfo + var err error + for _, idx := range indices { idxInfo := idx.Meta() if idxInfo.State != model.StatePublic { - logutil.Logger(context.Background()).Info("build physical index lookup reader, the index isn't public", - zap.String("index", idxInfo.Name.O), zap.Stringer("state", idxInfo.State), zap.String("table", tblInfo.Name.O)) + logutil.Logger(ctx).Info("build physical index lookup reader, the index isn't public", + zap.String("index", idxInfo.Name.O), + zap.Stringer("state", idxInfo.State), + zap.String("table", tblInfo.Name.O)) continue } + if check && latestIndexes == nil { + latestIndexes, check, err = getLatestIndexInfo(b.ctx, tblInfo.ID, b.is.SchemaMetaVersion()) + if err != nil { + return nil, nil, err + } + } + if check { + if latestIndex, ok := latestIndexes[idxInfo.ID]; !ok || latestIndex.State != model.StatePublic { + forUpdateState := model.StateNone + if ok { + forUpdateState = latestIndex.State + } + logutil.Logger(ctx).Info("build physical index lookup reader, the index isn't public in forUpdateRead", + zap.String("index", idxInfo.Name.O), + zap.Stringer("state", idxInfo.State), + zap.Stringer("forUpdateRead state", forUpdateState), + zap.String("table", tblInfo.Name.O)) + continue + } + } indexInfos = append(indexInfos, idxInfo) // For partition tables. if pi := tbl.Meta().GetPartitionInfo(); pi != nil { @@ -2408,6 +2483,7 @@ func (b *PlanBuilder) buildValuesListOfInsert(ctx context.Context, insert *ast.I } func (b *PlanBuilder) buildSelectPlanOfInsert(ctx context.Context, insert *ast.InsertStmt, insertPlan *Insert) error { + b.isForUpdateRead = true affectedValuesCols, err := b.getAffectCols(insert, insertPlan) if err != nil { return err diff --git a/planner/core/point_get_plan.go b/planner/core/point_get_plan.go index ba1ea4e82a78c..cade68b9e8876 100644 --- a/planner/core/point_get_plan.go +++ b/planner/core/point_get_plan.go @@ -35,10 +35,12 @@ import ( "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/sessionctx/stmtctx" "github.com/pingcap/tidb/types" - "github.com/pingcap/tidb/types/parser_driver" + driver "github.com/pingcap/tidb/types/parser_driver" + "github.com/pingcap/tidb/util/logutil" "github.com/pingcap/tidb/util/math" "github.com/pingcap/tidb/util/plancodec" "github.com/pingcap/tipb/go-tipb" + "go.uber.org/zap" ) // PointGetPlan is a fast plan for simple point get. @@ -389,7 +391,7 @@ func TryFastPlan(ctx sessionctx.Context, node ast.Node) (p Plan) { p = fp return } - if fp := tryPointGetPlan(ctx, x); fp != nil { + if fp := tryPointGetPlan(ctx, x, isForUpdateReadSelectLock(x.LockTp)); fp != nil { if checkFastPlanPrivilege(ctx, fp.dbName, fp.TblInfo.Name.L, mysql.SelectPriv) != nil { return nil } @@ -688,7 +690,7 @@ func tryWhereIn2BatchPointGet(ctx sessionctx.Context, selStmt *ast.SelectStmt) * // 2. It must be a single table select. // 3. All the columns must be public and generated. // 4. The condition is an access path that the range is a unique key. -func tryPointGetPlan(ctx sessionctx.Context, selStmt *ast.SelectStmt) *PointGetPlan { +func tryPointGetPlan(ctx sessionctx.Context, selStmt *ast.SelectStmt, check bool) *PointGetPlan { if selStmt.Having != nil { return nil } else if selStmt.Limit != nil { @@ -767,6 +769,10 @@ func tryPointGetPlan(ctx sessionctx.Context, selStmt *ast.SelectStmt) *PointGetP return p } + check = check && ctx.GetSessionVars().ConnectionID > 0 + var latestIndexes map[int64]*model.IndexInfo + var err error + for _, idxInfo := range tbl.Indices { if !idxInfo.Unique { continue @@ -775,6 +781,18 @@ func tryPointGetPlan(ctx sessionctx.Context, selStmt *ast.SelectStmt) *PointGetP continue } if isTableDual { + if check && latestIndexes == nil { + latestIndexes, check, err = getLatestIndexInfo(ctx, tbl.ID, 0) + if err != nil { + logutil.BgLogger().Warn("get information schema failed", zap.Error(err)) + return nil + } + } + if check { + if latestIndex, ok := latestIndexes[idxInfo.ID]; !ok || latestIndex.State != model.StatePublic { + continue + } + } p := newPointGetPlan(ctx, tblName.Schema.O, schema, tbl, names) p.IsTableDual = true return p @@ -784,6 +802,18 @@ func tryPointGetPlan(ctx sessionctx.Context, selStmt *ast.SelectStmt) *PointGetP if idxValues == nil { continue } + if check && latestIndexes == nil { + latestIndexes, check, err = getLatestIndexInfo(ctx, tbl.ID, 0) + if err != nil { + logutil.BgLogger().Warn("get information schema failed", zap.Error(err)) + return nil + } + } + if check { + if latestIndex, ok := latestIndexes[idxInfo.ID]; !ok || latestIndex.State != model.StatePublic { + continue + } + } p := newPointGetPlan(ctx, dbName, schema, tbl, names) p.IndexInfo = idxInfo p.IndexValues = idxValues @@ -1096,7 +1126,7 @@ func tryUpdatePointPlan(ctx sessionctx.Context, updateStmt *ast.UpdateStmt) Plan OrderBy: updateStmt.Order, Limit: updateStmt.Limit, } - pointGet := tryPointGetPlan(ctx, selStmt) + pointGet := tryPointGetPlan(ctx, selStmt, true) if pointGet != nil { if pointGet.IsTableDual { return PhysicalTableDual{ @@ -1188,7 +1218,7 @@ func tryDeletePointPlan(ctx sessionctx.Context, delStmt *ast.DeleteStmt) Plan { OrderBy: delStmt.Order, Limit: delStmt.Limit, } - if pointGet := tryPointGetPlan(ctx, selStmt); pointGet != nil { + if pointGet := tryPointGetPlan(ctx, selStmt, true); pointGet != nil { if pointGet.IsTableDual { return PhysicalTableDual{ names: pointGet.outputNames, diff --git a/planner/core/rule_partition_processor.go b/planner/core/rule_partition_processor.go index 865bb92f0695c..12b7d53ab9f80 100644 --- a/planner/core/rule_partition_processor.go +++ b/planner/core/rule_partition_processor.go @@ -700,7 +700,7 @@ func pruneUseBinarySearch(lessThan lessThanDataInt, data dataForPrune, unsigned func (s *partitionProcessor) resolveAccessPaths(ds *DataSource) error { possiblePaths, err := getPossibleAccessPaths( ds.ctx, &tableHintInfo{indexMergeHintList: ds.indexMergeHints, indexHintList: ds.IndexHints}, - ds.astIndexHints, ds.table, ds.DBName, ds.tableInfo.Name) + ds.astIndexHints, ds.table, ds.DBName, ds.tableInfo.Name, ds.isForUpdateRead, ds.is.SchemaMetaVersion()) if err != nil { return err } diff --git a/session/pessimistic_test.go b/session/pessimistic_test.go index 189e047eda770..316daaea643dc 100644 --- a/session/pessimistic_test.go +++ b/session/pessimistic_test.go @@ -1942,3 +1942,133 @@ func (s *testPessimisticSuite) TestResolveStalePessimisticPrimaryLock(c *C) { c.Assert(tk2.ExecToErr("admin check table t1"), IsNil) } + +func (s *testPessimisticSuite) TestIssue21498(c *C) { + tk := testkit.NewTestKitWithInit(c, s.store) + tk2 := testkit.NewTestKitWithInit(c, s.store) + tk.MustExec("set tidb_enable_amend_pessimistic_txn = 1") + + for _, partition := range []bool{false, true} { + //RC test + tk.MustExec("drop table if exists t") + createTable := "create table t (id int primary key, v int, index iv (v))" + if partition { + createTable += " partition by range (id) (partition p0 values less than (0),partition p1 values less than (1),partition p2 values less than (2),partition p3 values less than (3),partition pn values less than MAXVALUE)" + } + tk.MustExec(createTable) + tk.MustExec("insert into t values (1, 10), (2, 20), (3, 30), (4, 40)") + + tk.MustExec("set tx_isolation = 'READ-COMMITTED'") + tk.MustExec("begin pessimistic") + tk.MustQuery("select * from t where v = 10").Check(testkit.Rows("1 10")) + + tk2.MustExec("alter table t drop index iv") + tk2.MustExec("update t set v = 11 where id = 1") + + tk.MustQuery("select * from t where v = 10").Check(testkit.Rows()) + tk.MustQuery("select * from t where v = 11").Check(testkit.Rows("1 11")) + tk.MustQuery("select * from t where id = 1").Check(testkit.Rows("1 11")) + tk.MustExec("admin check table t") + tk.MustExec("commit") + + tk.MustExec("drop table if exists t") + createTable = "create table t (id int primary key, v int, index iv (v), v2 int)" + if partition { + createTable += " partition by range (id) (partition p0 values less than (0),partition p1 values less than (1),partition p2 values less than (2),partition p3 values less than (3),partition pn values less than MAXVALUE)" + } + tk.MustExec(createTable) + tk.MustExec("insert into t values (1, 10, 100), (2, 20, 200), (3, 30, 300), (4, 40, 400)") + + tk.MustExec("begin pessimistic") + tk.MustQuery("select * from t use index (iv) where v = 10").Check(testkit.Rows("1 10 100")) + tk2.MustExec("alter table t drop index iv") + tk2.MustExec("update t set v = 11 where id = 1") + err := tk.ExecToErr("select * from t use index (iv) where v = 10") + c.Assert(err.Error(), Equals, "[planner:1176]Key 'iv' doesn't exist in table 't'") + tk.MustQuery("select * from t where v = 10").Check(testkit.Rows()) + tk2.MustExec("update t set id = 5 where id = 1") + err = tk.ExecToErr("select * from t use index (iv) where v = 10") // select with + c.Assert(err.Error(), Equals, "[planner:1176]Key 'iv' doesn't exist in table 't'") + tk.MustQuery("select * from t where v = 10").Check(testkit.Rows()) + if !partition { + // amend transaction does not support partition table + tk.MustExec("insert into t(id, v, v2) select 6, v + 20, v2 + 200 from t where id = 4") // insert ... select with index unchanged + } + err = tk.ExecToErr("insert into t(id, v, v2) select 7, v + 30, v2 + 300 from t use index (iv) where id = 4") // insert ... select with index changed + c.Assert(err.Error(), Equals, "[planner:1176]Key 'iv' doesn't exist in table 't'") + tk.MustExec("admin check table t") // check consistency inside txn + tk.MustExec("commit") + if !partition { + tk.MustQuery("select * from t").Check(testkit.Rows("2 20 200", "3 30 300", "4 40 400", "5 11 100", "6 60 600")) + } + tk.MustExec("admin check table t") // check consistency out of txn + + //RR test for non partition + if partition { + continue + } + + tk.MustExec("set tx_isolation = 'REPEATABLE-READ'") + tk2.MustExec("alter table t add unique index iv(v)") + tk.MustExec("begin pessimistic") + tk2.MustExec("alter table t drop index iv") + tk2.MustExec("update t set v = 21 where v = 20") + tk2.MustExec("update t set v = 31 where v = 30") + tk.MustExec("update t set v = 22 where v = 21") // fast path + tk.CheckExecResult(1, 0) + tk.MustExec("update t set v = 23 where v = 22") + tk.CheckExecResult(1, 0) + tk.MustExec("update t set v = 32 where v >= 31 and v < 40") // common path + tk.CheckExecResult(1, 0) + tk.MustExec("commit") + tk.MustQuery("select * from t").Check(testkit.Rows("2 23 200", "3 32 300", "4 40 400", "5 11 100", "6 60 600")) + + tk2.MustExec("alter table t add unique index iv(v)") + tk.MustExec("begin pessimistic") + tk2.MustExec("alter table t drop index iv") + tk2.MustExec("update t set v = 24 where v = 23") + tk2.MustExec("update t set v = 41 where v = 40") + // fast path + tk.MustQuery("select * from t where v = 23").Check(testkit.Rows("2 23 200")) + tk.MustQuery("select * from t where v = 24").Check(testkit.Rows()) + tk.MustQuery("select * from t where v = 23 for update").Check(testkit.Rows()) + tk.MustQuery("select * from t where v = 24 for update").Check(testkit.Rows("2 24 200")) + // test index look up + tk.MustQuery("select * from t s, t t1 where s.v = 23 and s.id = t1.id").Check(testkit.Rows("2 23 200 2 23 200")) + tk.MustQuery("select * from t s, t t1 where s.v = 24 and s.id = t1.id").Check(testkit.Rows()) + tk.MustQuery("select * from t s, t t1 where s.v = 23 and s.id = t1.id for update").Check(testkit.Rows()) + tk.MustQuery("select * from t s, t t1 where s.v = 24 and s.id = t1.id for update").Check(testkit.Rows("2 24 200 2 24 200")) + tk.MustExec("delete from t where v = 24") + tk.CheckExecResult(1, 0) + // common path + tk.MustQuery("select * from t where v >= 41 and v < 50").Check(testkit.Rows()) + tk.MustQuery("select * from t where v >= 41 and v < 50 for update").Check(testkit.Rows("4 41 400")) + tk.MustExec("delete from t where v >= 41 and v < 50") + tk.CheckExecResult(1, 0) + tk.MustExec("commit") + tk.MustQuery("select * from t").Check(testkit.Rows("3 32 300", "5 11 100", "6 60 600")) + + tk2.MustExec("alter table t add unique index iv(v)") + tk.MustExec("begin pessimistic") + tk2.MustExec("alter table t drop index iv") + tk2.MustExec("update t set v = 33 where v = 32") + tk.MustExec("insert into t(id, v, v2) select 3 * id, 3 * v, 3 * v2 from t where v = 33") + tk.CheckExecResult(1, 0) + tk.MustExec("commit") + tk.MustQuery("select * from t").Check(testkit.Rows("3 33 300", "5 11 100", "6 60 600", "9 99 900")) + + tk2.MustExec("alter table t add unique index iv(v)") + tk2.MustExec("drop table if exists t1") + tk2.MustExec("create table t1(id int primary key, v int, index iv (v), v2 int)") + tk.MustExec("begin pessimistic") + tk2.MustExec("alter table t drop index iv") + tk2.MustExec("update t set v = 34 where v = 33") + tk2.MustExec("update t set v = 12 where v = 11") + tk.MustExec("insert into t1(id, v, v2) select * from t where v = 33") + tk.CheckExecResult(0, 0) + tk.MustExec("insert into t1(id, v, v2) select * from t where v = 12") + tk.CheckExecResult(1, 0) + tk.MustExec("commit") + tk.MustQuery("select * from t1").Check(testkit.Rows("5 12 100")) + } +} From 6304fe6e1227d90bbd71dbaaad9fb2f8557011a3 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Tue, 22 Dec 2020 19:17:02 +0800 Subject: [PATCH 225/229] cherry pick #20675 to release-4.0 (#21467) Signed-off-by: ti-srebot Co-authored-by: Kenan Yao --- executor/prepared.go | 2 +- executor/show.go | 2 +- planner/core/expression_rewriter.go | 3 ++- planner/core/hints.go | 3 +++ planner/core/indexmerge_test.go | 2 +- planner/core/logical_plan_test.go | 20 +++++++++---------- .../core/memtable_predicate_extractor_test.go | 2 +- planner/core/optimizer.go | 2 +- planner/core/plan_test.go | 10 ++++++++++ planner/core/planbuilder.go | 8 +++++--- planner/core/planbuilder_test.go | 4 ++-- planner/core/prepare_test.go | 2 +- planner/optimize.go | 4 ++-- 13 files changed, 40 insertions(+), 24 deletions(-) diff --git a/executor/prepared.go b/executor/prepared.go index 4bde0554d7384..c1e23c86317a7 100644 --- a/executor/prepared.go +++ b/executor/prepared.go @@ -189,7 +189,7 @@ func (e *PrepareExec) Next(ctx context.Context, req *chunk.Chunk) error { var p plannercore.Plan e.ctx.GetSessionVars().PlanID = 0 e.ctx.GetSessionVars().PlanColumnID = 0 - destBuilder := plannercore.NewPlanBuilder(e.ctx, e.is, &hint.BlockHintProcessor{}) + destBuilder, _ := plannercore.NewPlanBuilder(e.ctx, e.is, &hint.BlockHintProcessor{}) p, err = destBuilder.Build(ctx, stmt) if err != nil { return err diff --git a/executor/show.go b/executor/show.go index 0c040503b187a..bb856ac7657e0 100644 --- a/executor/show.go +++ b/executor/show.go @@ -458,7 +458,7 @@ func (e *ShowExec) fetchShowColumns(ctx context.Context) error { if tb.Meta().IsView() { // Because view's undertable's column could change or recreate, so view's column type may change overtime. // To avoid this situation we need to generate a logical plan and extract current column types from Schema. - planBuilder := plannercore.NewPlanBuilder(e.ctx, e.is, &hint.BlockHintProcessor{}) + planBuilder, _ := plannercore.NewPlanBuilder(e.ctx, e.is, &hint.BlockHintProcessor{}) viewLogicalPlan, err := planBuilder.BuildDataSourceFromView(ctx, e.DBName, tb.Meta()) if err != nil { return err diff --git a/planner/core/expression_rewriter.go b/planner/core/expression_rewriter.go index 5ae9a20ebd4aa..7bf9a54c226ce 100644 --- a/planner/core/expression_rewriter.go +++ b/planner/core/expression_rewriter.go @@ -59,7 +59,7 @@ func rewriteAstExpr(sctx sessionctx.Context, expr ast.ExprNode, schema *expressi if sctx.GetSessionVars().TxnCtx.InfoSchema != nil { is = sctx.GetSessionVars().TxnCtx.InfoSchema.(infoschema.InfoSchema) } - b := NewPlanBuilder(sctx, is, &hint.BlockHintProcessor{}) + b, savedBlockNames := NewPlanBuilder(sctx, is, &hint.BlockHintProcessor{}) fakePlan := LogicalTableDual{}.Init(sctx, 0) if schema != nil { fakePlan.schema = schema @@ -69,6 +69,7 @@ func rewriteAstExpr(sctx sessionctx.Context, expr ast.ExprNode, schema *expressi if err != nil { return nil, err } + sctx.GetSessionVars().PlannerSelectBlockAsName = savedBlockNames return newExpr, nil } diff --git a/planner/core/hints.go b/planner/core/hints.go index e9c3e32d8c5ac..898b7d44ddb2b 100644 --- a/planner/core/hints.go +++ b/planner/core/hints.go @@ -80,6 +80,9 @@ func extractTableAsName(p PhysicalPlan) (*model.CIStr, *model.CIStr) { } func getJoinHints(sctx sessionctx.Context, joinType string, parentOffset int, nodeType utilhint.NodeType, children ...PhysicalPlan) (res []*ast.TableOptimizerHint) { + if parentOffset == -1 { + return res + } for _, child := range children { blockOffset := child.SelectBlockOffset() if blockOffset == -1 { diff --git a/planner/core/indexmerge_test.go b/planner/core/indexmerge_test.go index 06616f3d26507..ade6e15bd428e 100644 --- a/planner/core/indexmerge_test.go +++ b/planner/core/indexmerge_test.go @@ -91,7 +91,7 @@ func (s *testIndexMergeSuite) TestIndexMergePathGeneration(c *C) { stmt, err := s.ParseOneStmt(tc, "", "") c.Assert(err, IsNil, comment) Preprocess(s.ctx, stmt, s.is) - builder := NewPlanBuilder(MockContext(), s.is, &hint.BlockHintProcessor{}) + builder, _ := NewPlanBuilder(MockContext(), s.is, &hint.BlockHintProcessor{}) p, err := builder.Build(ctx, stmt) if err != nil { s.testdata.OnRecord(func() { diff --git a/planner/core/logical_plan_test.go b/planner/core/logical_plan_test.go index 6d5891c658c16..c0deeb5bd99e7 100644 --- a/planner/core/logical_plan_test.go +++ b/planner/core/logical_plan_test.go @@ -1131,7 +1131,7 @@ func (s *testPlanSuite) TestVisitInfo(c *C) { stmt, err := s.ParseOneStmt(tt.sql, "", "") c.Assert(err, IsNil, comment) Preprocess(s.ctx, stmt, s.is) - builder := NewPlanBuilder(MockContext(), s.is, &hint.BlockHintProcessor{}) + builder, _ := NewPlanBuilder(MockContext(), s.is, &hint.BlockHintProcessor{}) builder.ctx.GetSessionVars().HashJoinConcurrency = 1 _, err = builder.Build(context.TODO(), stmt) c.Assert(err, IsNil, comment) @@ -1211,7 +1211,7 @@ func (s *testPlanSuite) TestUnion(c *C) { stmt, err := s.ParseOneStmt(tt, "", "") c.Assert(err, IsNil, comment) Preprocess(s.ctx, stmt, s.is) - builder := NewPlanBuilder(MockContext(), s.is, &hint.BlockHintProcessor{}) + builder, _ := NewPlanBuilder(MockContext(), s.is, &hint.BlockHintProcessor{}) plan, err := builder.Build(ctx, stmt) s.testData.OnRecord(func() { output[i].Err = err != nil @@ -1243,7 +1243,7 @@ func (s *testPlanSuite) TestTopNPushDown(c *C) { stmt, err := s.ParseOneStmt(tt, "", "") c.Assert(err, IsNil, comment) Preprocess(s.ctx, stmt, s.is) - builder := NewPlanBuilder(MockContext(), s.is, &hint.BlockHintProcessor{}) + builder, _ := NewPlanBuilder(MockContext(), s.is, &hint.BlockHintProcessor{}) p, err := builder.Build(ctx, stmt) c.Assert(err, IsNil) p, err = logicalOptimize(ctx, builder.optFlag, p.(LogicalPlan)) @@ -1317,7 +1317,7 @@ func (s *testPlanSuite) TestOuterJoinEliminator(c *C) { stmt, err := s.ParseOneStmt(tt, "", "") c.Assert(err, IsNil, comment) Preprocess(s.ctx, stmt, s.is) - builder := NewPlanBuilder(MockContext(), s.is, &hint.BlockHintProcessor{}) + builder, _ := NewPlanBuilder(MockContext(), s.is, &hint.BlockHintProcessor{}) p, err := builder.Build(ctx, stmt) c.Assert(err, IsNil) p, err = logicalOptimize(ctx, builder.optFlag, p.(LogicalPlan)) @@ -1353,7 +1353,7 @@ func (s *testPlanSuite) TestSelectView(c *C) { stmt, err := s.ParseOneStmt(tt.sql, "", "") c.Assert(err, IsNil, comment) Preprocess(s.ctx, stmt, s.is) - builder := NewPlanBuilder(MockContext(), s.is, &hint.BlockHintProcessor{}) + builder, _ := NewPlanBuilder(MockContext(), s.is, &hint.BlockHintProcessor{}) p, err := builder.Build(ctx, stmt) c.Assert(err, IsNil) p, err = logicalOptimize(ctx, builder.optFlag, p.(LogicalPlan)) @@ -1434,7 +1434,7 @@ func (s *testPlanSuite) optimize(ctx context.Context, sql string) (PhysicalPlan, return nil, nil, err } } - builder := NewPlanBuilder(sctx, s.is, &hint.BlockHintProcessor{}) + builder, _ := NewPlanBuilder(sctx, s.is, &hint.BlockHintProcessor{}) p, err := builder.Build(ctx, stmt) if err != nil { return nil, nil, err @@ -1516,7 +1516,7 @@ func (s *testPlanSuite) TestSkylinePruning(c *C) { stmt, err := s.ParseOneStmt(tt.sql, "", "") c.Assert(err, IsNil, comment) Preprocess(s.ctx, stmt, s.is) - builder := NewPlanBuilder(MockContext(), s.is, &hint.BlockHintProcessor{}) + builder, _ := NewPlanBuilder(MockContext(), s.is, &hint.BlockHintProcessor{}) p, err := builder.Build(ctx, stmt) if err != nil { c.Assert(err.Error(), Equals, tt.result, comment) @@ -1617,7 +1617,7 @@ func (s *testPlanSuite) TestUpdateEQCond(c *C) { stmt, err := s.ParseOneStmt(tt.sql, "", "") c.Assert(err, IsNil, comment) Preprocess(s.ctx, stmt, s.is) - builder := NewPlanBuilder(MockContext(), s.is, &hint.BlockHintProcessor{}) + builder, _ := NewPlanBuilder(MockContext(), s.is, &hint.BlockHintProcessor{}) p, err := builder.Build(ctx, stmt) c.Assert(err, IsNil) p, err = logicalOptimize(ctx, builder.optFlag, p.(LogicalPlan)) @@ -1633,7 +1633,7 @@ func (s *testPlanSuite) TestConflictedJoinTypeHints(c *C) { stmt, err := s.ParseOneStmt(sql, "", "") c.Assert(err, IsNil) Preprocess(s.ctx, stmt, s.is) - builder := NewPlanBuilder(MockContext(), s.is, &hint.BlockHintProcessor{}) + builder, _ := NewPlanBuilder(MockContext(), s.is, &hint.BlockHintProcessor{}) p, err := builder.Build(ctx, stmt) c.Assert(err, IsNil) p, err = logicalOptimize(ctx, builder.optFlag, p.(LogicalPlan)) @@ -1653,7 +1653,7 @@ func (s *testPlanSuite) TestSimplyOuterJoinWithOnlyOuterExpr(c *C) { stmt, err := s.ParseOneStmt(sql, "", "") c.Assert(err, IsNil) Preprocess(s.ctx, stmt, s.is) - builder := NewPlanBuilder(MockContext(), s.is, &hint.BlockHintProcessor{}) + builder, _ := NewPlanBuilder(MockContext(), s.is, &hint.BlockHintProcessor{}) p, err := builder.Build(ctx, stmt) c.Assert(err, IsNil) p, err = logicalOptimize(ctx, builder.optFlag, p.(LogicalPlan)) diff --git a/planner/core/memtable_predicate_extractor_test.go b/planner/core/memtable_predicate_extractor_test.go index 8f176d99d4218..5c56d7d1a8968 100644 --- a/planner/core/memtable_predicate_extractor_test.go +++ b/planner/core/memtable_predicate_extractor_test.go @@ -62,7 +62,7 @@ func (s *extractorSuite) getLogicalMemTable(c *C, se session.Session, parser *pa c.Assert(err, IsNil) ctx := context.Background() - builder := plannercore.NewPlanBuilder(se, s.dom.InfoSchema(), &hint.BlockHintProcessor{}) + builder, _ := plannercore.NewPlanBuilder(se, s.dom.InfoSchema(), &hint.BlockHintProcessor{}) plan, err := builder.Build(ctx, stmt) c.Assert(err, IsNil) diff --git a/planner/core/optimizer.go b/planner/core/optimizer.go index c8f5da5503111..481547945b0f3 100644 --- a/planner/core/optimizer.go +++ b/planner/core/optimizer.go @@ -83,7 +83,7 @@ type logicalOptRule interface { func BuildLogicalPlan(ctx context.Context, sctx sessionctx.Context, node ast.Node, is infoschema.InfoSchema) (Plan, types.NameSlice, error) { sctx.GetSessionVars().PlanID = 0 sctx.GetSessionVars().PlanColumnID = 0 - builder := NewPlanBuilder(sctx, is, &utilhint.BlockHintProcessor{}) + builder, _ := NewPlanBuilder(sctx, is, &utilhint.BlockHintProcessor{}) p, err := builder.Build(ctx, node) if err != nil { return nil, nil, err diff --git a/planner/core/plan_test.go b/planner/core/plan_test.go index d6655de7f32fe..8f19bdee8efc1 100644 --- a/planner/core/plan_test.go +++ b/planner/core/plan_test.go @@ -374,6 +374,16 @@ func compareStringSlice(c *C, ss1, ss2 []string) { } } +func (s *testPlanNormalize) TestExplainFormatHint(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t") + tk.MustExec("create table t (c1 int not null, c2 int not null, key idx_c2(c2)) partition by range (c2) (partition p0 values less than (10), partition p1 values less than (20))") + + tk.MustQuery("explain format='hint' select /*+ use_index(@`sel_2` `test`.`t2` `idx_c2`), hash_agg(@`sel_2`), use_index(@`sel_1` `test`.`t1` `idx_c2`), hash_agg(@`sel_1`) */ count(1) from t t1 where c2 in (select c2 from t t2 where t2.c2 < 15 and t2.c2 > 12)").Check(testkit.Rows( + "use_index(@`sel_2` `test`.`t2` `idx_c2`), hash_agg(@`sel_2`), use_index(@`sel_1` `test`.`t1` `idx_c2`), hash_agg(@`sel_1`)")) +} + func (s *testPlanNormalize) TestDecodePlanPerformance(c *C) { tk := testkit.NewTestKit(c, s.store) tk.MustExec("use test") diff --git a/planner/core/planbuilder.go b/planner/core/planbuilder.go index 0dd569594ad8f..1f07c23f61fd5 100644 --- a/planner/core/planbuilder.go +++ b/planner/core/planbuilder.go @@ -548,8 +548,10 @@ func (b *PlanBuilder) popSelectOffset() { b.selectOffset = b.selectOffset[:len(b.selectOffset)-1] } -// NewPlanBuilder creates a new PlanBuilder. -func NewPlanBuilder(sctx sessionctx.Context, is infoschema.InfoSchema, processor *hint.BlockHintProcessor) *PlanBuilder { +// NewPlanBuilder creates a new PlanBuilder. Return the original PlannerSelectBlockAsName as well, callers decide if +// PlannerSelectBlockAsName should be restored after using this builder. +func NewPlanBuilder(sctx sessionctx.Context, is infoschema.InfoSchema, processor *hint.BlockHintProcessor) (*PlanBuilder, []ast.HintTable) { + savedBlockNames := sctx.GetSessionVars().PlannerSelectBlockAsName if processor == nil { sctx.GetSessionVars().PlannerSelectBlockAsName = nil } else { @@ -562,7 +564,7 @@ func NewPlanBuilder(sctx sessionctx.Context, is infoschema.InfoSchema, processor handleHelper: &handleColHelper{id2HandleMapStack: make([]map[int64][]*expression.Column, 0)}, hintProcessor: processor, isForUpdateRead: sctx.GetSessionVars().IsPessimisticReadConsistency(), - } + }, savedBlockNames } // Build builds the ast node to a Plan. diff --git a/planner/core/planbuilder_test.go b/planner/core/planbuilder_test.go index c3e9a16dfdf55..100aa956921fd 100644 --- a/planner/core/planbuilder_test.go +++ b/planner/core/planbuilder_test.go @@ -101,7 +101,7 @@ func (s *testPlanBuilderSuite) TestGetPathByIndexName(c *C) { } func (s *testPlanBuilderSuite) TestRewriterPool(c *C) { - builder := NewPlanBuilder(MockContext(), nil, &hint.BlockHintProcessor{}) + builder, _ := NewPlanBuilder(MockContext(), nil, &hint.BlockHintProcessor{}) // Make sure PlanBuilder.getExpressionRewriter() provides clean rewriter from pool. // First, pick one rewriter from the pool and make it dirty. @@ -155,7 +155,7 @@ func (s *testPlanBuilderSuite) TestDisableFold(c *C) { stmt := st.(*ast.SelectStmt) expr := stmt.Fields.Fields[0].Expr - builder := NewPlanBuilder(ctx, nil, &hint.BlockHintProcessor{}) + builder, _ := NewPlanBuilder(ctx, nil, &hint.BlockHintProcessor{}) builder.rewriterCounter++ rewriter := builder.getExpressionRewriter(context.TODO(), nil) c.Assert(rewriter, NotNil) diff --git a/planner/core/prepare_test.go b/planner/core/prepare_test.go index 993c091159617..abb485737f658 100644 --- a/planner/core/prepare_test.go +++ b/planner/core/prepare_test.go @@ -207,7 +207,7 @@ func (s *testPlanSerialSuite) TestPrepareCacheDeferredFunction(c *C) { stmt, err := s.ParseOneStmt(sql1, "", "") c.Check(err, IsNil) is := tk.Se.GetSessionVars().TxnCtx.InfoSchema.(infoschema.InfoSchema) - builder := core.NewPlanBuilder(tk.Se, is, &hint.BlockHintProcessor{}) + builder, _ := core.NewPlanBuilder(tk.Se, is, &hint.BlockHintProcessor{}) p, err := builder.Build(ctx, stmt) c.Check(err, IsNil) execPlan, ok := p.(*core.Execute) diff --git a/planner/optimize.go b/planner/optimize.go index cc6ac50cfd25d..249ab980445f7 100644 --- a/planner/optimize.go +++ b/planner/optimize.go @@ -202,7 +202,7 @@ func optimize(ctx context.Context, sctx sessionctx.Context, node ast.Node, is in sctx.GetSessionVars().PlanColumnID = 0 hintProcessor := &hint.BlockHintProcessor{Ctx: sctx} node.Accept(hintProcessor) - builder := plannercore.NewPlanBuilder(sctx, is, hintProcessor) + builder, _ := plannercore.NewPlanBuilder(sctx, is, hintProcessor) // reset fields about rewrite sctx.GetSessionVars().RewritePhaseInfo.Reset() @@ -366,7 +366,7 @@ func OptimizeExecStmt(ctx context.Context, sctx sessionctx.Context, execAst *ast.ExecuteStmt, is infoschema.InfoSchema) (plannercore.Plan, error) { defer trace.StartRegion(ctx, "Optimize").End() var err error - builder := plannercore.NewPlanBuilder(sctx, is, nil) + builder, _ := plannercore.NewPlanBuilder(sctx, is, nil) p, err := builder.Build(ctx, execAst) if err != nil { return nil, err From a0a70da6362ed52bf76da3d3518e5d5511e9b6c4 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Wed, 23 Dec 2020 15:04:30 +0800 Subject: [PATCH 226/229] tikv: distinguish server timeout and server busy error for TiKV and TiFlash (#21109) (#21926) Signed-off-by: ti-srebot --- errno/errcode.go | 5 ++++- errno/errname.go | 2 ++ errors.toml | 10 ++++++++++ store/tikv/backoff.go | 27 +++++++++++++++++++-------- store/tikv/coprocessor.go | 10 +++++++++- store/tikv/error.go | 2 ++ store/tikv/region_request.go | 12 ++++++++++-- 7 files changed, 56 insertions(+), 12 deletions(-) diff --git a/errno/errcode.go b/errno/errcode.go index e3fafe2dd3e44..bce9ab08b5582 100644 --- a/errno/errcode.go +++ b/errno/errcode.go @@ -1078,7 +1078,7 @@ const ( ErrLockExpire = 8229 ErrAddColumnWithSequenceAsDefault = 8230 - // TiKV/PD errors. + // TiKV/PD/TiFlash errors. ErrPDServerTimeout = 9001 ErrTiKVServerTimeout = 9002 ErrTiKVServerBusy = 9003 @@ -1089,4 +1089,7 @@ const ( ErrTiKVStoreLimit = 9008 ErrPrometheusAddrIsNotSet = 9009 ErrTiKVStaleCommand = 9010 + + ErrTiFlashServerTimeout = 9012 + ErrTiFlashServerBusy = 9013 ) diff --git a/errno/errname.go b/errno/errname.go index c3cfcae269aac..dadb1d13f7352 100644 --- a/errno/errname.go +++ b/errno/errname.go @@ -1085,6 +1085,8 @@ var MySQLErrName = map[uint16]*mysql.ErrMessage{ ErrPDServerTimeout: mysql.Message("PD server timeout", nil), ErrTiKVServerTimeout: mysql.Message("TiKV server timeout", nil), ErrTiKVServerBusy: mysql.Message("TiKV server is busy", nil), + ErrTiFlashServerTimeout: mysql.Message("TiFlash server timeout", nil), + ErrTiFlashServerBusy: mysql.Message("TiFlash server is busy", nil), ErrResolveLockTimeout: mysql.Message("Resolve lock timeout", nil), ErrRegionUnavailable: mysql.Message("Region is unavailable", nil), ErrGCTooEarly: mysql.Message("GC life time is shorter than transaction duration, transaction starts at %v, GC safe point is %v", nil), diff --git a/errors.toml b/errors.toml index 3a6b1639cc907..ffd9527e5fba7 100644 --- a/errors.toml +++ b/errors.toml @@ -1246,6 +1246,16 @@ error = ''' TiKV server reports stale command ''' +["tikv:9012"] +error = ''' +TiFlash server timeout +''' + +["tikv:9013"] +error = ''' +TiFlash server is busy +''' + ["types:1074"] error = ''' Column length too big for column '%-.192s' (max = %d); use BLOB or TEXT instead diff --git a/store/tikv/backoff.go b/store/tikv/backoff.go index a17f77ae5b2c1..7992ba581a358 100644 --- a/store/tikv/backoff.go +++ b/store/tikv/backoff.go @@ -57,7 +57,8 @@ var ( func (t backoffType) metric() prometheus.Observer { switch t { - case boTiKVRPC: + // TODO: distinguish tikv and tiflash in metrics + case boTiKVRPC, boTiFlashRPC: return tikvBackoffHistogramRPC case BoTxnLock: return tikvBackoffHistogramLock @@ -67,7 +68,7 @@ func (t backoffType) metric() prometheus.Observer { return tikvBackoffHistogramPD case BoRegionMiss: return tikvBackoffHistogramRegionMiss - case boServerBusy: + case boTiKVServerBusy, boTiFlashServerBusy: return tikvBackoffHistogramServerBusy case boStaleCmd: return tikvBackoffHistogramStaleCmd @@ -128,11 +129,13 @@ type backoffType int // Back off types. const ( boTiKVRPC backoffType = iota + boTiFlashRPC BoTxnLock boTxnLockFast BoPDRPC BoRegionMiss - boServerBusy + boTiKVServerBusy + boTiFlashServerBusy boTxnNotFound boStaleCmd ) @@ -142,7 +145,7 @@ func (t backoffType) createFn(vars *kv.Variables) func(context.Context, int) int vars.Hook(t.String(), vars) } switch t { - case boTiKVRPC: + case boTiKVRPC, boTiFlashRPC: return NewBackoffFn(100, 2000, EqualJitter) case BoTxnLock: return NewBackoffFn(200, 3000, EqualJitter) @@ -155,7 +158,7 @@ func (t backoffType) createFn(vars *kv.Variables) func(context.Context, int) int return NewBackoffFn(2, 500, NoJitter) case boTxnNotFound: return NewBackoffFn(2, 500, NoJitter) - case boServerBusy: + case boTiKVServerBusy, boTiFlashServerBusy: return NewBackoffFn(2000, 10000, EqualJitter) case boStaleCmd: return NewBackoffFn(2, 1000, NoJitter) @@ -167,6 +170,8 @@ func (t backoffType) String() string { switch t { case boTiKVRPC: return "tikvRPC" + case boTiFlashRPC: + return "tiflashRPC" case BoTxnLock: return "txnLock" case boTxnLockFast: @@ -175,8 +180,10 @@ func (t backoffType) String() string { return "pdRPC" case BoRegionMiss: return "regionMiss" - case boServerBusy: - return "serverBusy" + case boTiKVServerBusy: + return "tikvServerBusy" + case boTiFlashServerBusy: + return "tiflashServerBusy" case boStaleCmd: return "staleCommand" case boTxnNotFound: @@ -189,14 +196,18 @@ func (t backoffType) TError() error { switch t { case boTiKVRPC: return ErrTiKVServerTimeout + case boTiFlashRPC: + return ErrTiFlashServerTimeout case BoTxnLock, boTxnLockFast, boTxnNotFound: return ErrResolveLockTimeout case BoPDRPC: return ErrPDServerTimeout case BoRegionMiss: return ErrRegionUnavailable - case boServerBusy: + case boTiKVServerBusy: return ErrTiKVServerBusy + case boTiFlashServerBusy: + return ErrTiFlashServerBusy case boStaleCmd: return ErrTiKVStaleCommand } diff --git a/store/tikv/coprocessor.go b/store/tikv/coprocessor.go index af72f56d95e93..9022e877d53d6 100644 --- a/store/tikv/coprocessor.go +++ b/store/tikv/coprocessor.go @@ -1062,7 +1062,11 @@ func (worker *copIteratorWorker) handleCopStreamResult(bo *Backoffer, rpcCtx *RP return nil, nil } - if err1 := bo.Backoff(boTiKVRPC, errors.Errorf("recv stream response error: %v, task: %s", err, task)); err1 != nil { + boRPCType := boTiKVRPC + if task.storeType == kv.TiFlash { + boRPCType = boTiFlashRPC + } + if err1 := bo.Backoff(boRPCType, errors.Errorf("recv stream response error: %v, task: %s", err, task)); err1 != nil { return nil, errors.Trace(err) } @@ -1202,6 +1206,10 @@ func (worker *copIteratorWorker) handleTiDBSendReqErr(err error, task *copTask, errCode = errno.ErrTiKVServerTimeout errMsg = "TiDB server timeout, address is " + task.storeAddr } + if terror.ErrorEqual(err, ErrTiFlashServerTimeout) { + errCode = errno.ErrTiFlashServerTimeout + errMsg = "TiDB server timeout, address is " + task.storeAddr + } selResp := tipb.SelectResponse{ Warnings: []*tipb.Error{ { diff --git a/store/tikv/error.go b/store/tikv/error.go index 1bbd5c4a1787b..4d57e29f840f8 100644 --- a/store/tikv/error.go +++ b/store/tikv/error.go @@ -34,10 +34,12 @@ const mismatchClusterID = "mismatch cluster id" // MySQL error instances. var ( ErrTiKVServerTimeout = dbterror.ClassTiKV.NewStd(mysql.ErrTiKVServerTimeout) + ErrTiFlashServerTimeout = dbterror.ClassTiKV.NewStd(mysql.ErrTiFlashServerTimeout) ErrResolveLockTimeout = dbterror.ClassTiKV.NewStd(mysql.ErrResolveLockTimeout) ErrPDServerTimeout = dbterror.ClassTiKV.NewStd(mysql.ErrPDServerTimeout) ErrRegionUnavailable = dbterror.ClassTiKV.NewStd(mysql.ErrRegionUnavailable) ErrTiKVServerBusy = dbterror.ClassTiKV.NewStd(mysql.ErrTiKVServerBusy) + ErrTiFlashServerBusy = dbterror.ClassTiKV.NewStd(mysql.ErrTiFlashServerBusy) ErrTiKVStaleCommand = dbterror.ClassTiKV.NewStd(mysql.ErrTiKVStaleCommand) ErrGCTooEarly = dbterror.ClassTiKV.NewStd(mysql.ErrGCTooEarly) ErrQueryInterrupted = dbterror.ClassTiKV.NewStd(mysql.ErrQueryInterrupted) diff --git a/store/tikv/region_request.go b/store/tikv/region_request.go index 8d563870f1e18..cc51fb2c35bf2 100644 --- a/store/tikv/region_request.go +++ b/store/tikv/region_request.go @@ -508,7 +508,11 @@ func (s *RegionRequestSender) onSendFail(bo *Backoffer, ctx *RPCContext, err err // When a store is not available, the leader of related region should be elected quickly. // TODO: the number of retry time should be limited:since region may be unavailable // when some unrecoverable disaster happened. - err = bo.Backoff(boTiKVRPC, errors.Errorf("send tikv request error: %v, ctx: %v, try next peer later", err, ctx)) + if ctx.Store != nil && ctx.Store.storeType == kv.TiFlash { + err = bo.Backoff(boTiFlashRPC, errors.Errorf("send tiflash request error: %v, ctx: %v, try next peer later", err, ctx)) + } else { + err = bo.Backoff(boTiKVRPC, errors.Errorf("send tikv request error: %v, ctx: %v, try next peer later", err, ctx)) + } return errors.Trace(err) } @@ -592,7 +596,11 @@ func (s *RegionRequestSender) onRegionError(bo *Backoffer, ctx *RPCContext, seed logutil.BgLogger().Warn("tikv reports `ServerIsBusy` retry later", zap.String("reason", regionErr.GetServerIsBusy().GetReason()), zap.Stringer("ctx", ctx)) - err = bo.Backoff(boServerBusy, errors.Errorf("server is busy, ctx: %v", ctx)) + if ctx != nil && ctx.Store != nil && ctx.Store.storeType == kv.TiFlash { + err = bo.Backoff(boTiFlashServerBusy, errors.Errorf("server is busy, ctx: %v", ctx)) + } else { + err = bo.Backoff(boTiKVServerBusy, errors.Errorf("server is busy, ctx: %v", ctx)) + } if err != nil { return false, errors.Trace(err) } From 7800681280b12f8ea9cacfcd33064babb1792cf7 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Wed, 23 Dec 2020 15:35:35 +0800 Subject: [PATCH 227/229] cherry pick #21213 to release-4.0 (#21380) Signed-off-by: ti-srebot Co-authored-by: Kenan Yao --- planner/core/integration_test.go | 11 +++++++++++ planner/core/logical_plan_builder.go | 6 +++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/planner/core/integration_test.go b/planner/core/integration_test.go index 5be43dcaa8779..cb847486a49a0 100644 --- a/planner/core/integration_test.go +++ b/planner/core/integration_test.go @@ -1571,6 +1571,17 @@ func (s *testIntegrationSerialSuite) TestIssue20710(c *C) { } } +func (s *testIntegrationSuite) TestQueryBlockTableAliasInHint(c *C) { + tk := testkit.NewTestKit(c, s.store) + + tk.MustExec("use test") + c.Assert(tk.HasPlan("select /*+ HASH_JOIN(@sel_1 t2) */ * FROM (select 1) t1 NATURAL LEFT JOIN (select 2) t2", "HashJoin"), IsTrue) + tk.MustQuery("select /*+ HASH_JOIN(@sel_1 t2) */ * FROM (select 1) t1 NATURAL LEFT JOIN (select 2) t2").Check(testkit.Rows( + "1 2", + )) + c.Assert(tk.Se.GetSessionVars().StmtCtx.GetWarnings(), HasLen, 0) +} + func (s *testIntegrationSuite) TestIssue10448(c *C) { tk := testkit.NewTestKit(c, s.store) tk.MustExec("use test") diff --git a/planner/core/logical_plan_builder.go b/planner/core/logical_plan_builder.go index 3f9cdcaaedc56..e9d7fddc4d243 100644 --- a/planner/core/logical_plan_builder.go +++ b/planner/core/logical_plan_builder.go @@ -484,7 +484,11 @@ func extractTableAlias(p Plan, parentOffset int) *hintTableInfo { if blockOffset != parentOffset && blockAsNames != nil && blockAsNames[blockOffset].TableName.L != "" { blockOffset = parentOffset } - return &hintTableInfo{dbName: firstName.DBName, tblName: firstName.TblName, selectOffset: blockOffset} + dbName := firstName.DBName + if dbName.L == "" { + dbName = model.NewCIStr(p.SCtx().GetSessionVars().CurrentDB) + } + return &hintTableInfo{dbName: dbName, tblName: firstName.TblName, selectOffset: blockOffset} } return nil } From 8325a6536c28b271e50619bec7c4d17db313d53c Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Wed, 23 Dec 2020 16:03:07 +0800 Subject: [PATCH 228/229] cherry pick #21349 to release-4.0 (#21466) Signed-off-by: ti-srebot Co-authored-by: Kenan Yao --- bindinfo/bind_test.go | 29 +++++++++++++++++++++++++++++ bindinfo/handle.go | 22 ++++++++++++++-------- 2 files changed, 43 insertions(+), 8 deletions(-) diff --git a/bindinfo/bind_test.go b/bindinfo/bind_test.go index d55d42e30f70f..825df5bdf77dc 100644 --- a/bindinfo/bind_test.go +++ b/bindinfo/bind_test.go @@ -1451,6 +1451,35 @@ func (s *testSuite) TestIssue19836(c *C) { tk.MustQuery("explain for connection " + strconv.FormatUint(tk.Se.ShowProcess().ID, 10)).Check(explainResult) } +func (s *testSuite) TestReCreateBind(c *C) { + tk := testkit.NewTestKit(c, s.store) + s.cleanBindingEnv(tk) + tk.MustExec("use test") + tk.MustExec("drop table if exists t") + tk.MustExec("create table t(a int, b int, index idx(a))") + + tk.MustQuery("select * from mysql.bind_info").Check(testkit.Rows()) + tk.MustQuery("show global bindings").Check(testkit.Rows()) + + tk.MustExec("create global binding for select * from t using select * from t") + tk.MustQuery("select original_sql, status from mysql.bind_info").Check(testkit.Rows( + "select * from t using", + )) + rows := tk.MustQuery("show global bindings").Rows() + c.Assert(len(rows), Equals, 1) + c.Assert(rows[0][0], Equals, "select * from t") + c.Assert(rows[0][3], Equals, "using") + + tk.MustExec("create global binding for select * from t using select * from t") + tk.MustQuery("select original_sql, status from mysql.bind_info").Check(testkit.Rows( + "select * from t using", + )) + rows = tk.MustQuery("show global bindings").Rows() + c.Assert(len(rows), Equals, 1) + c.Assert(rows[0][0], Equals, "select * from t") + c.Assert(rows[0][3], Equals, "using") +} + func (s *testSuite) TestDMLIndexHintBind(c *C) { tk := testkit.NewTestKit(c, s.store) s.cleanBindingEnv(tk) diff --git a/bindinfo/handle.go b/bindinfo/handle.go index 6f5de7d282648..1e24607ee3c84 100644 --- a/bindinfo/handle.go +++ b/bindinfo/handle.go @@ -213,17 +213,22 @@ func (h *BindHandle) CreateBindRecord(sctx sessionctx.Context, record *BindRecor h.bindInfo.Unlock() }() - txn, err1 := h.sctx.Context.Txn(true) - if err1 != nil { - return err1 + var txn kv.Transaction + txn, err = h.sctx.Context.Txn(true) + if err != nil { + return err } now := types.NewTime(types.FromGoTime(oracle.GetTimeFromTS(txn.StartTS())), mysql.TypeTimestamp, 3) if oldRecord != nil { for _, binding := range oldRecord.Bindings { - _, err1 = exec.ExecuteInternal(context.TODO(), h.logicalDeleteBindInfoSQL(record.OriginalSQL, record.Db, now, binding.BindSQL)) + // Binding recreation should physically delete previous bindings, since marking them as deleted may + // cause unexpected binding caches if there are concurrent CREATE BINDING on multiple tidb instances, + // because the record with `using` status is not guaranteed to have larger update_time than those records + // with `deleted` status. + _, err = exec.ExecuteInternal(context.TODO(), h.deleteBindInfoSQL(record.OriginalSQL, record.Db, binding.BindSQL)) if err != nil { - return err1 + return err } } } @@ -290,9 +295,10 @@ func (h *BindHandle) AddBindRecord(sctx sessionctx.Context, record *BindRecord) h.bindInfo.Unlock() }() - txn, err1 := h.sctx.Context.Txn(true) - if err1 != nil { - return err1 + var txn kv.Transaction + txn, err = h.sctx.Context.Txn(true) + if err != nil { + return err } if duplicateBinding != nil { From 7cf3cb1f61d6f76dd1b4bc77d60158803bda912d Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Wed, 23 Dec 2020 16:28:00 +0800 Subject: [PATCH 229/229] cherry pick #21855 to release-4.0 (#21862) --- executor/adapter.go | 4 ++++ executor/executor_test.go | 25 +++++++++++++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/executor/adapter.go b/executor/adapter.go index 830690a653666..ee90eb4f3fb6b 100644 --- a/executor/adapter.go +++ b/executor/adapter.go @@ -992,6 +992,10 @@ func (a *ExecStmt) SummaryStmt(succ bool) { return } stmtCtx := sessVars.StmtCtx + // Make sure StmtType is filled even if succ is false. + if stmtCtx.StmtType == "" { + stmtCtx.StmtType = GetStmtLabel(a.StmtNode) + } normalizedSQL, digest := stmtCtx.SQLDigest() costTime := time.Since(sessVars.StartTime) + sessVars.DurationParse diff --git a/executor/executor_test.go b/executor/executor_test.go index 884cc65db4c5a..eaf38fc8010fd 100644 --- a/executor/executor_test.go +++ b/executor/executor_test.go @@ -35,6 +35,7 @@ import ( "github.com/pingcap/failpoint" pb "github.com/pingcap/kvproto/pkg/kvrpcpb" "github.com/pingcap/parser" + "github.com/pingcap/parser/auth" "github.com/pingcap/parser/model" "github.com/pingcap/parser/mysql" "github.com/pingcap/parser/terror" @@ -4823,6 +4824,30 @@ func (s *testSuiteP2) TestUnsignedFeedback(c *C) { c.Assert(result.Rows()[2][6], Equals, "range:[0,+inf], keep order:false") } +func (s *testSuite) TestSummaryFailedUpdate(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t") + tk.MustExec("create table t(a int, b int as(-a))") + tk.MustExec("insert into t(a) values(1), (3), (7)") + sm := &mockSessionManager1{ + PS: make([]*util.ProcessInfo, 0), + } + tk.Se.SetSessionManager(sm) + s.domain.ExpensiveQueryHandle().SetSessionManager(sm) + defer config.RestoreFunc()() + config.UpdateGlobal(func(conf *config.Config) { + conf.OOMAction = config.OOMActionCancel + }) + c.Assert(tk.Se.Auth(&auth.UserIdentity{Username: "root", Hostname: "%"}, nil, nil), IsTrue) + tk.MustExec("set @@tidb_mem_quota_query=1") + err := tk.ExecToErr("update t set t.a = t.a - 1 where t.a in (select a from t where a < 4)") + c.Assert(err, NotNil) + c.Assert(err.Error(), Matches, "Out Of Memory Quota!.*") + tk.MustExec("set @@tidb_mem_quota_query=1000000000") + tk.MustQuery("select stmt_type from information_schema.statements_summary where digest_text = 'update t set t . a = t . a - ? where t . a in ( select a from t where a < ? )'").Check(testkit.Rows("Update")) +} + func (s *testSuite) TestOOMPanicAction(c *C) { tk := testkit.NewTestKit(c, s.store) tk.MustExec("use test")

    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

    iu=j_CpBxU55Q!+N+m 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�w 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≻R4(OuuCo_(wkYNG`0ZqK5ACgtlC_1YBVSzbO?xA*3d-uoZ2nfg`z{>VM^ zO(`8?C^^Pv`lhcbp6YLV?)5w9aj!{dyL`fUO}g7b@AIZ49XRwL+Z-3!&~DUk|<;Qe(qBsq+ap;gePM48{cAuz|0y%bJW69_>u*Prp3^ zOFKStJE80h$MGPZFwjZ@qu|0Zx}COj|3mnXt#G_inkhB;Y$f#Dq_)Fbr`EA$Odh3U_*ya_U%b$X$5NGQTU?iQ}P zWHjUM6G7ntDO6Vy@oYJVeK{Vr8tdtg4H%ZHWG1CV`o%zEFBu*?G>VB|as2q-HV8+v zAac@VD>q4Bm%>z`?7R{-?;K1?uoaD684Q ze{CD9+kN$Khy6cSQNNS&D@tu%c$<3h{|cdYihAwt|Jk}jKM(&yHmmoTHy1BHeEA8> zPDKixxop+(r!1Z^f6jh9l8wfC&HGM@Gh?Gc(laGZF8i_BbC)^l$7b;^Q~uaY-=%D; zWIl@89mF%a7lm7YXNUjfLAVW!D?xfm`Mg)$=CQRNx8rNn?P(*BqF-g1RH1$0ZZtB> z?Ws+eUp83CI)!gBS_U{FY>px^5YL9irPe&5ZR2$NY~;RccAtBw@1QjQZn%BUqn>%Z z5ITsWUITI6AGZa0R4zVJzi$k9=ExuKFI*qmUlH4fCeZ7JKV6>aZx8Ud_Zj}K!QYPZ zw-fyBq_w^%PUA)HGH0D(yl%yJSbb+cDE=Yqc3ARtOZIep%f83(n>F!cQ>tdYF5YjE zBjE!tvKn?Lgz_TUd%qet`rBO#VTfkxU013dh*X+UB4WV zR>w152Ns9Ea6N{##Cu+GU7X27%JZ=`sYr~Pz;2mok>GJ)(ZTno{5_M^;~?g`0U1ao za{)Aq?2=c$4;0@l?-?A34xmzT(I)hJvM0lii;SekjT%c4E2884`P`&v-$@a%7?h_m z3JbH90?N&)e0waMYJG4GxJ=&C>M?Wdd(j>$Y76qPiQDa9&Qd%=+>qT7^=H9lXbiKM z+-V#0L18O}LyC?tZ9_vI6Hf7whwsNqDOqW(|H8K~^r2Frce;*~=V!L8zI@t6W^w)oqGR>R&Gp`G!5;`P2_h?AIf zvbcqP;t~A>@PX25iu@KEo>W;lT??2IBAhbd4XHoC4+}h@Bpx|c{5DHtM*W01(5)R# zC_{5-``-F~w{S0NeB8zjK2QDM6z_?l@nJ8czKxQ2Qjd>hkT-5qkgsp&(fYnQh5y<( zS<78>K5BgnBrqZszK=1~*eLEX{oP(FP~jZscz=c4i05UmN90_8of{k4nAjgHXWY3o zUVs%Dt-R~mIfYL9EV7(8F|FwKyeZ9q}hUNUR)c2>%q13MTMCxlP+jg_# z?EJ}Y*SlQtLn(fiVE}@<1Mnj%wvW_TmDFGA7q}sA`xk0iptnFbqR2X$>zMWPgtbT2tqVF&C^zid&rrt*x zq}1k*S=5iG3Cr?}P#ib`GCR%0nsXd_O=NOP- zlpz&9$GO)CJ;!ZE?Ah3Z!&b?w3<)%NuwuSi0y2On6*IbPw*<%w@-}1+ic+#YpkuCZ&A-a1IHJoCRbcV-T4FeK~b-#9@5X}-N1h|5crce{zLnH>+aia-CVNb zpry;cuypp)gCR;g?Tgx)g&gXo8$^K7EtlXa zgRaZqH_2ZVh6X))YuV*g*IQ2b05xA|DWya=DL|s4m_=AO3B@H5oliZ3As?Q?tSmui zi2pe<7=QmXy z;I)PNQb=jRi*MD>cl-b8{mGMbza8qQ$FDkR$+G=US+(M1?St1jBz)QZ z3N5=Ib{p4uj&p$seTT<0Q?$mKy#!FQgp*_ShPfMEaj0e0g(_;E7H%k~4E_>9JVqOO zWRzq+Wljas5db8b2)`LrfipaUUL5SKltUwPW^kX}gQIUV6#8Q!G@kN5lv;moeXbCC zi!$$d-Jdt6^!*J4ak)3m)$bREH6HP%=pMWtzR_0MmAm?uk!FoG|B%I}uk-=m0mtty zguWxb4%P3BRV!95J9WXF!*sxyuY=!W`O@KW{{R|57~zu>3|F zCgt}mx`U8Ap;}AsbZ5P%7DX)^q15ukNpEASS-V387GgaBhyj6XnqH-3O_nGIX$g~(yYEQ9MI}p3a!@*?u*kSMrim)I-xDad#$i}SR2$k?xjjV%DcEPaYDh=D2Fx*5&lEKb;!<8#}7#Ud) z_kOWN>}AYlh$r#jMa)qQ-D3C?2AS7IyD{DkM-pB#-lFo>dR!KBN>X%FF2lj+`PV=~ zWeFd~{?Jur$w-3NEH+Ec>`O!!;(EP#BqM59hif8fCf*R~bZUAwk+Jj5xi2#u(KWLO z_POk=4F4P&m>sMOjE}}(9Q~X6dlX~a@OL;&kDe!Le3`|-UNl< z!U2=d#^5@?!8O#@ub)$YnDSRjZM=IgfQh6WN>Q)nK|a{kztz`0_I|w&ZZ&lJNBC{j zcn>hgAifu`)Q%)l=#}Qy9P_$#cS!lVlsjZBbU_#(@Eg+l zHz7vGdfdQqJF(7!lJl?9eM!noEO{~d)6kqKkWazM@NA->Z4<=Lwqlo7!pM;49iS~s zMG~{s0_GR+?NS+3~P@$OArxyCv9dOLlC{V9Jsn;E(*+*ESw zj7nc~;%p*P$}nv z1u#VqYDgQD1bwj)x;g$sr3LL{i3*DzQWR$~E+z%+E1Keyh|1#YEFaMQT@t5eYf7k85;VW9tsyj)qLu3D-+dov$ z>(d2i{I~V#v|6(dx49pCtfLS>%CB~xwm)!;)$UVcNgk+Tl8n&)bD<;ci>yq zKOF3D@78aAr*~iSkG-njtnl9~_`p$5?31s___MMhn<8!M%!HGCL}W_YohtO!pt4C- z77>y8J@hR?`Xs?4-uZUN2753Q%l_KTHRP|eGdTiAVtiliBiUp|WP7R4&3Hev+O}FL z&U2YM&mWBu|2te)!8$5!-y>G+HJRToqpwN1on`Qm@EFni2RnY3)o=q3)L0*$xDod~ zgh!(CgRrwH4B!p1ZNJEP`bW;4FG^0yGG6pbfA)5=OT6wG+r831yiM#9PkW;q!rivh zEQ|-d)P3If*hTL5oCiF4uNM`@-JbW?Y{xC(!MnZKZTKX|#HR`P>(dLAn445ajd4yX zR^4`d!yk{gMVB)p3B*twW{neam3gK#drgotmb1cKDa>YEM>5r7w~~1%%~S!|JV|h( zEwa0m@Knm;0vIE0foFk@a43gD0-_T9K;dHD2y!Z|?WK*!iyU zskY~lqd^`@q+tK+c?ok}VT9ceUa(;W;R$MY8K4R`ZQvoFbku z1obEx6PuJ@kKY>p)c5N#T>^&ieSryvZ5SaxM(=|k9)p4+HQ4okeBT;pwDHqH#;int zwYqa&Se7_%tYY7%sqb7F?CTr=I3}xw=RNW*_y7a(rW$x|@!~Vl7@CK>#JBXwG0gpxv?!1ae@Z z<4$^w7{7ZUZ9R@X_J=H?t`+~PIBOP+a~*qi-Hu@ta~UGv>#`Laowpa2L;Y`5`9JmN ztip<|!{fen`}?vDcMdnb9n&pfmXMAJ*6>j@!JUB?O=e<-r%1N-Wbp2OkFef%QhtVKG7x3pLNIPa6lyy<_Jb~M5k|XN_I82#|}1H zmGP;uz1)><>pi+@5DTbi9Eg3wfHBNCcJ^_(PJXki^vT4$etJ*i_@wAMJa%MqAFm3G zwRS}37wuqBt6frPs#mWmQV7r`Yh zqp`RrIue6~sr=eZH>9q!v$@PZo+hA+F3fVryV=+|FD1%b3d;`bmb#Lm+!|UF~)PG2Ml2Vg9X1`Jh z{erTcqF%{>&$7n5e_aq)A1tS#);;6s5iM4b#aA(J)PnNnFJ7rk4t}WE@Dey8sCLN; zMUAuQi;Hl0pu;ZzfwHt*t2PD7Sc=MSb(>0eHNk%qWiji_HRq>i+Oo|IS&>b}Uio zMzcu_al)f)sD-YB_RnGsLTUlN1~;dnn0l(B;CNBkNasnQ4IXbC@@j*#n!t zG1VMre^Op*FlBe!^~y*{sGKp~YGe6IB6lefwNIXbsMc>rCEy>sU#>IcqR{G3>VC8O zRo!n+prhPK{VvK=l%U_(_5UDmA?4o`^*Vj4mXGF~qvfUx?$_@d|E}fLrvg6h*blW_ z`{8nHO%NRxLxF(4X8CZ>mjHUIUU2m5usqAw>+Spv_9fQ!cIpN@g493g++g2ogzkt; z5tXZ4=NdR?o&UI&NWbHfk`$)N3k`9MbyOmjCMSfMOUTzDFhhe>RrK6kv5naM`+egg35kJrzA`9Fv4IP0n3LV2E2n=hulMm|K!LlpH|Zs_NH z>`J}gJgE2EUeeEf`Hj2bM0U|rd}qb%6LETKnpW}f0ep{&_H>Q>)!3EJhq5ce{(a<&V#P` zH&?z`>mmhfe~gMbP^g?9i4jn>>I`aKj>cl3O|c7S45Vj9GTkW}!^pvc&*?m7gwYsM zk`a|SQ$|UzS#!cgKwp*394k2|1<$k(G7MxcB!Em3@s)NxbF@`r-Dyx${e0G)yx9*> z_Z5S1MwM-b)0zcVCVky}N4@5rsGslL?S&ydbS3rGl&?{0&-Whc;&t!^6!qHFub=1K zHoZ@l_1^!GP3M2rLr++Qq3)F0Lclz~Nlo$7V3%Iw?CX!?qh6P}9kTCrS=}MCp({ZJ zRX=c@b0PyQ-NyAeo2(lgX6vh+?9+z(rW&E@uC;Yo>Faz!wYcxLQ(Php497o0$d@Eh z3Gu5Dg4<(gqr ziI4K1`1vCAY;+L&BZ)Sh2+aGfvdzZYGUV^#d17Qo5>*M6pvp%{ak1U|fa`Dr&n}It z9jFLE5K_1EJegYkmC!nzfrm+r$*>R}rEJsNPtwn8>Kns$svl5)i1K?%?RmXHz3lb3;ahxlZ9^Cb3WVU=DYfqE5n;25%L9}Ri~ZO*V(ODhL$WnX<1iajc@2f zKdg}u4U0_2FIutW1pj0LkM2#Hbgt|>blIxqaQ+{S#5UtH!}yvJdNbOO1nx0w7*7%= z?&PM4xzEWXtcvzlX>)E9NEi#J6uO+@r>>&o(9*o41EI=UZkFeOJfn^qN9d)dAC`Jy z0ZckVHST;?MhBCqXUVQZ=@X?gJWCT@}Xbz{^;idziT;Q>I-^b z8yDMl_wTP%tPk1>xadS>&pd4LX`f$wnr{aTVC8F^YmLyaV@=}pK=|eN2bSpT>HOC) z-e4Z}V<`(Mwf_DY>gQ9kL0-`suD!-%`QiP2`KpzNp0>;4rRdT3KGc|7J~YfjSr&Rc zRu!X3lT;g_DCTPNNgxhHh$1Dwc`!zD5c9 zt^LAI_%z-rghu^G_uDI9)Z=sNC$t~%@!#oncVpmBncAZ5Rg?d#{Dss$ch$<;f;`*} zJG)g*7qv*wTeW!A;;z0^MkcD=sw7;AIbb@fe$;^U(}oA0NN`lwI!*|E{B zvzM&3jdk|haew!Q>F>_;w*&rmljZNuG5p=cwYD0N_amLu?~wOKZ#2A{jM9z9oSTd% z%o`00`hgpbuA2<|MgtxU>W;s4Z!(?>`$EkBhIYmdW)bRRT-MpC*P`|Rj@Cu$k^|ym zVP%^0M7x-8TGQUL+>2S~!UXqUDW`(MhkCW*QRnAf<~?06P8S)Xf?K^^IzN=r+ex!E+UO=U$w|rAqwY)4k;`!3*Xql+7aLzulaw-h zHM6v*a9;rnWJL#7g`}*wGIC^oSmA>WS!%GoDW~pyrw|63Xq(`#Nqh{JvlB_J2_LdW zyaMK}lxuxjH3ES{N?UUfvW^?^4hb$h2w({9&GJ(3&Rz#l(czK6G~^>)lzvAD zZgZhcrHa%B8*+m{bRDxu@y2f?y8wJxVPWj1ft7g$aV{*9$^+bx3tw~DH4bT$%K-$trY_7^MHz3X+y9LNmaS^0P`DD(`cgSN& zVYk4T8|e|_jf2Aj%&(bhsy-{a8gj9-0G}lB*}2h%n3X>~H?9axL0htYbQ@tI#Y~|g znrm%tIkeSlIRq;Gy1E6CnFSYCCCAIOuM)?mN;&_o@^2f#&xMntOH(B1jrzS?=t~Td zdgCS&ayXZmDq&;ub?hj8pcwwTh@`Prp)69Hh^M{^B{%xfG*?RjB8a;$`A-D=Msq*VHfQ^{n`= zmS_IWf^io0t0}KgYU_f0AO4LG$n8Z@uL~a5>%vO`@8p{o>UCjr;75A*9=%=+{MU5> zL(Zzj$aS@8d*sBv+q69Lqumyb<$xFbd0Ej1oFBVa(FeSwSp z{8aJ%MebTJ|9!Z*PK-+=5#SPeAJIkrjMU1=-z=mm=CP7laR!y;jnAr!ww^iabp2 zE8eNZ)^^n<(7c{NAL#1*RhPA;%Y3M7#2hIFM;_(~u7N8(*(VErSe5$)*EvA$&!xy8 zTJq8{z)%y&axuuFqSKsilmF# zWLqXyjF#GE+g|Ce6#mpWni-!4^J2V^Dq7su$YZfi^l1{?cUFOMmy&?E9d&M!1jNFL z349w4Tyy*YwzG~>XKM!t&O{E>K*myu1WINa_JZMG$oglJw$tHB^`EprEl=a#f=nM` z5{)uO8H^4>2A<9R?#=R4mq?NptCB1lS#MT6BAzykoCO_8a#pICJxF{WTG~2MDov>C ztBlVdV7U0moJ08C5G8!r2#_fuTcASxRiI2%Z^oIE6PuaP`Dajha}o9U1CP-x-*26_+P zdF7w~E@d&b&r!~%)aHqAQvWICF^YOE5AsDeKBwjJzXW(Q|3fxb5LeN;C+>8FFIme@ zL$d@5|Jh3Ys|P~2#@WyJ(;w=O%Er)(i9wP1ZQOc1o);4zin|X2jD{ma>-Kp}^NQVF z6V0mR%4*dP@Q+<|R24lD7vsQNp|U7z%zmu93bfW3T=2l^pdFwvs^JtqOZ`mBHI$nE zR}w|Sfr_CIDC)KCUOivVm3p2$;8Fd4TQFa~YVL-!+r^%>>;2clD;hSL@5mCJu?m8xNDT3=kZ6uZ!?A^89oX1n0aK)K%VM!Y!?^PL_?|P59G-b*RG(421zJml z4hJMe6s=I1BK@)M%RJyBkXih(o=RpJ>$wI8E7$Pog(7N(<)r=p$dN5Bhm|pn&tFSM zO2@>HVI~JMrf~?7>QGB-X{fH;kh1DjAUTrNej`3f@IJv@$85v@4#9Y`43W=aPIJu$ zs~bb;Va7PCU7ShudJ=C`FC>U{M9oqlW7%0b15q*>eU$7%hrw7{bysR z-uoZ2=?%uy)c-o30K8yInc-W}RNxqiZhvB|RVi-Q@)ry$%$~2JbAWs44Be6J6UD0% z&NYd=imDWooN72`wYiNvM$DR*CETy!#N8!&DU7zSqnC1wGa3OoO%Wy$lEmDa0_i8+ z46eB0<0)`~-DydtJQXZ9G%9;}o5P-#hrY7v#gbW2W(1d{Nro5kW1IFvB78N7ZQ6FO zZr7J+uSVMAblNo~i=ht61WK)4kEi}K$}<%8+Pz(iQ+I9GV$iN*|7*LRrkqbFfO{F) zwi}ICbi~ak{D_;LtNaE&$Tw47B7z2fB8iNDU&48S2JRF#O*|DRX3Xk#o5S+`ttv+A3^8t1-bfn*cq0kA`&!C)7sm+7mr5+C#L;Fzt*VDRP z8-sqk;N)G~dHbGu1xKs{C&I>0Z{23xpvh|fqIYZAsZRT-v0i~p9wsIOOm*5$iaD72 zx|At?Sayd0P-)xh}B(`X92H8rZ8B+@j@#54~>8NHZ6ovIH}o z^6h?Ei2y4oXZT{kJbys_Q_onlLQkazMg9Fr=fPwi1S`ID$O}OnV#RFcQD$5owXzR* z^3J4tcT!Oq$!u?qXQ29pmJ`&P;!kO6urST#@T)VIp+J*fjU!>%o0L(12w93tGaL?p z3`)~fk_3#DM#T01EjB6In*`MtjgZ%sUztZA`lp(+X6Y8#dXa9|Z_r+iL8IJ3{XWWT zl-hWj7%7JShjKMVy%q*|=XF8++p80I9Zwtg#6J%A1MNnkE$3cuU}OB6ai}ju_zj6X zg-fi<_lSXe6gwnx7Jf16LrBO(=zS33Eq_lsuO{Q5Z;Q0B@%03@-fywVMdgJF@5+R{ zA|WnKs1}c**#HE(Fd@%N$mf&pb4mH-ggl3-Eok>RaUMB@_@#4?w?*LW3P%wCB`&iXCMd<^eh35i-?r-6H_AP zj3coyF3LXHPbOg}f&2#DViz7rVcx9Od{JLXYI$jk+;?uv~!2q z=C^Yk=?F9RkU@RZrNKN$J09t`WGHk8^pF6RkJ?v|eUSU~|E)xAKV}$PjjP$IG4P~bNmhk6(yBRe0z}%~GI4vlBUltMYXd{;z0+h9zsoq}(Ml2G*-&i!%MDe6r5>|x<*6DWI%>Ao& zx(5(2VV|LWw z#JoFV-6gBd46NrPZ7|9_LjqLon(OLYL=F*b+nXX^w{MFWnsOhrm2!azl)>$rd5EAfS>sZ;Go{haR42*U&Gzna z=Kip^KCZ6mnxs54f3_Ne%9h=Y0)ynjJe!n7Cq?g7VW}~Aa~xwIRzN>FCwiCyDW1wS z(8fBK)rHOsuQZTD3(I#GdK5pze<%yGqEglGiOEEafZ&Wob9@rdsOSWuH%6X0AxjS5 z$FRXt5d0_mq?K~u4pT;%uuXbah*6xdx+x`rrTwkqyB_AecEBve@c|Q%9D^vfVZ?vv zZwLRYEKWV#br`q|G;F?=dgy8mBb!O3(`_k5jX88Q4M!Ok`eM3X-39jywe-l(nF)7! zZy3#xb5^4Sw_qWQ@SLJvxI(LX%3t9Bax_g$&B$|n+%G5g_>HVjW~3iKuWku)%%viA=QZk_#Tx=;97y7se7Ue@@cf9c&NdY66P z_o$!px=ielmM>lXP#cjy8+s`_1u-#in(+H?%UI86oIhpita&KegP022!!4|>5ll6Q zFg}f6i9>!P77^r$%c0W2ah5h=;vX56PTOdn`0-J(scOxpa4s)8CVL>`Q*Qp6qd z?y98ezF|bgNHYjbyKU&08hR>v8KIX>sfxm1E9cEXB)ZGD8u($DWUaQCm4Q@FIj;D= z`v0(m`iuW6nS({;&MH~0ND7=msrAah1AIVn#;Wfq&B8~UE#N{&LH{|1oQo5P*B*!r z+Mh|3(sd%A>5sR2gUJIRIvL34Q>2O#&C#3+i#i1miW;2PnbslZO@?)}3CPj-tp9M? zOubt7igY_2PNc*k+RU+xI+t+X~%~n?d%Y)hy~Fg+;d6Jcm{mo|E?(_!SF( zp#}nLM}yGFchZz_r!J^@-%N(o8j;Q5b0paMv;Yy#r~9$uFj3HCk$-1gDI>D<)9Yjryn^Rxl)FXM^qOZ`~N3QBGKyh8n!LNT9p{HD56FDsONN$Q!+JBr){5)&jlXW&{>%_@QpwF)}ZZ;FQnC{JH?Fq_siE0D&E*Ck~Tx7;Ze)HRU5#1Lx#j zzIB2_Xfd`LWzZqTLimUg@3A_-{iBZUdfsppGnvtpjTm)aB%1&pN>&?mRVT`cin5@r ztr4G-PwA;cK+gipH}U~Ska?u#I?Bi*t&>e{fY{_7F$x0;Xirz~4-`kadHpM~{lOi2 zQ8yNj*t)IYGC+t+|p##f0EzT{qBMy z^Rzm^>t5bNtd6V`{_bJ(0|w+8=V{|?W8OK&72&gu zQRf)(vkgY>tk9)P?#aa45@Zxd&D195mIH}9Xh5;3LZ9g9rP&Sx3T+XLoI z=NM@I=>UMfGe*Tc!aTIc5r^_X>)*(YdNGIo6bb(|XTFFnO6AD%Z1U-SKb!kO7KeN- zbL`WjL-P>~D&O%|mgn zt8XV%(1?onus!c|?CQR0SWWR`$aY_{t9(ojxo{hyS4S{gwUbt)j%6*+fNV5p+Bs3G zj%qA7RGXtsxpJk{*V=9lG#nc1h~{w9oo@MjAG3f-pJmN6uLu)w3010zdS)cRp?+WY zr)~6;h4hmr>O-NYE9ggc#n2;^+B|k-Losw|OEJ{lru);gH|u`XxQ(|;&QWbMO~SFT*%=clQKpqT~hV0CTUAoyDM27pRJZV>NSk6GikTCvBhdSdAx zvtnB<+qVdxzTO_U!9H@mo!DS+H&e!`j}v?9{cqE1h|mRvh4w7uCq&BJA9XTI^=bpDAPk>+;t1#^XP zQ*O4;Oh%7^csWa;w#fF_WxH4OhDktgPgXNQCYlG|)Sa^GTbtvJ%n3wUpa!)jljx^u z;-5f~r$-NvIKZlks{P4g1K9GkQ+9ht#m^ayuxkm4;a5FRz&i)T;iuz^e2|NDd)bIG@Vh#@jH_ht4*|tsp0rr$?VRg`Bt*& z-^uuW#qM7eo%@RNuHrQDHPhQy%!@H~RKss)$Gw}4{U=-hZZ`g(Z0!B4{j*}n&x=P| zjrSGD{i1l}eZ|D4Vp%LqD0}v*!O4tiS&Cs+hcQvX513%;h4Eg&s6KAoRAkk=s@Qa8 zF*!x{!p(oV0q8R)&NDh1MdzKV)9*^<@>dv~XmZK4Do5nI^JFUd9JPI%Mda-U z?&8U=ygBcmhVu`c*9T^zS()P4B|Ab6y%+MDsCIvQ>}g2j&sN zo#xKu@k}~qYGO)uDm0oit5<@H4_{$6Uar4&t=V(1JGakB&OUyQJSaQIJV?x)beMYt zM-DxHzMPi@&mlGn7+mC6%*<7$ywXg59VtA1gPFP2^fs90dea$Hzq!l)2{ZY7GyGOw zK9P5DEGB$)9jYw#hkUN^vL?&1`L~qwVoE+Jnnve=0_my09gOn`rQDz9)fBC!`w!nU zh0CiAOQEmSy05~IFif+JVh%S&J-#@^1URrAS0Nfyp3FEjOb&jKcp~L=nw|d4u2vTn zbdrRoI}v8xQCRqJg!DcRd4W7^u^9vj0tJa(Ly5r6=LaF$CU%1slD7b9+GRbNfN`M! z>oioonFQP_17Nb9qE#S3)N!&&Kb(=k1pn5^KjmQF;3ly^6l2wDyx=ujG47~J$dN+C z)oxy|SL%DpKHHz}$hd z9JoGs0EcdyAePwiA(=&y1xv}nu)4cqFR%mG0Vb(hqm75C_J}J)y~fwu2GkH*jUgs&zPT^$BcfBC1!&bVLkyDYXWOK zGvd1YMvie4kt}L}aDNwtdc4z!g8u9h4;YD_G+7^^a(A2QY>eaSL*cgxYCh4+U;hYAs#oXUVT&byQ1;*hVzKyYns-YZ27B+$U^eI5KGo@V?Av)vN1`*^!Q|gj?JjmTcAFyK)6?gU+PClcQL-;P%Ip)PCJng# z`wkor9c8xP91#6pZw4B_WLKs=)8=u$;gVFe0LI-UHIw@(9ZtRGKC0#Qgs@&A)vO^?NCIJgV(3HC~!mf4Q3-W`vfv3z5|t=Mp3IeyIv^70ERffZLC3 z0?Qt-#bU2w(XPQwssi*e9jZovw=KBNfsSE4bpiEHQckAS^wiU-f1C0>ih7;68;?%y zdV^aHZC$VJCqs(pp4YFa)l^^#{;5sIb#QSh`FQ@X%u zD;wr&xDM3}L+?>xHqyZ9#+KZ=+9IUryZX61pO1Dv@qZ-W)2~gx(a$5)sqH}OXgzi1 z_v~k1dmhJ8-$2>gps#;!N$;Jzce|fG6rj&8R(XcD8o$z>w)1^Y+Y{wk82yqlg6EKU znFGU%!R$KnS~U>gmsNops37ZIzF$JCke|V?A~QmKnqf)h%ti*F5ed)bC7B= zZGympP@SVBm=lVr3_Y|70p3EcZY7#a!m+bAZf2lFk-WlQ=-0qj-40IIFut#w`d*aD zlv+C+LVXG4{Qk; zkAbP&6$t{MdPJkLz!69KfBJcC<(_KuNTsJ3>ZOdP)W+vR>NirhQ2bYrKXakf_aDmZ z{nWsYH20hO{m}UA>>e>f1G?{z`j9{*t!~${gZm1*>ipO0&VP}3%pc9aHA6qD!-8R_ zY@&xruhZ-%a1+K9Sr*asY{4#J0b-KB$VfzDLp`E9n7!&%a4>l`(|A=BmoKn7GS0;a zTTMVtUAJ3~=q9@)hh~CVn4pP(#V$0N3>{F9A*i&GPH->~XVLeWE=jWR6G4{G8E2f{e?6X9L0aE!S z7?r(zh{_Zn@*8_yW_QS<4^hDw3`AulI3*T(f~Kv%uVOt&?#bw%OQhxgQ%R9A%0HC6 zXG`uMO5&N4yuIT7sKOEXOlcR&t{f~iFmfR!W@sD*6-J^RChTg4g62?WQb~#)8fXeI zVFiK!U=G8tV1y1+b@}Zu_xHN}R*%y2$~_#tn)C755RPI*r6n1M9(br*KigSTW|-IOxN*1+Hv3F%WJSTz=`=EvbiO!?VksHO#k`xvZ3%z?3O1ea+P)9T7As$Ng6Wz8Q-(H@6B@T zE%K0?WsI*7cb^`N)8fapvmU3zaqg>)ANXu}`$CGm#+l_J(Sos6W5X`AS`$ zRRf9xGh@oPEAIQdH=QCJ(M^{}>9vsh6Kd?5|{Vt$gCImPCL+XE{B*zZ5pZpBT8Cnqh1=p3%Ec`ER=Xt*)0w z)U&VoqRZ#}Hf7m`X5&sk4G^b5moo$qWlp8OZ|JFNlSsu|Bb7hYInP0VWqeQu^0K<( z62K9&nz0%*iSnfA^e>tVo$iJ%Wy}HdUY3!6mA!XKWhvh-%QwsN(K>f)o%1ih9xi*i z+7pW7rd5`(49bAw)B(f_P)_r^O|x#Dr?P$IfQ%8%jQ>`^8N>Z-;(yZ<_dp z@x{;#%5#+3xQb0gC!T~ZHd*(J&=&3YwC>UVs%J0I?>F{ooZq`=>*H&JJYydvx+*8r zoMp?FkMu#+q}VP$o#yNnO276Awnm&}gfnZ#uH-Du8@&r-S9!)p?=Mk*_mJc74)C`Z znf`9A;qP)+d1{*bh3SX7Cw!SM_qr_XkSj9`OzN>gVIe7#kVi+%D?uBJ5lV+`6%cME((;^T6}f`oB~Yf3Auv zEB611c*Iy+hb{f`x>JPn=ThMfYua=5ar;056Wms!2d}Pgx~U$C;$iirEu!bV^1fDQ z+(lWpzh+opHKJcHTi+`8Txo>A3{0_a-kO8nz`W@3ovqtfZ^|6BtG?r^tZ{jH(%rH1}iaDho@S|Lf4zTs7hG+OE*!`xz& z-ZD%G@}`@(2Fyh=y04L1Ag?thn3;#_a=#GHeL_BMR5n=7`z3N7mh$j94YvlZC1zW* zFEr!th%??6@?~+@^YsA*=1UcMNu76bopVv0TwRwD#)WkSVSS};_Lu7lPzXI!^$hR5 zit}y-KjiGc8Tqpq=L%jqMy;m4#aY4aCJ6%m(c#lf7YZ(dCkz7|yiV*1Y)4Ekqa&w5 zqe`F`ZNz*R$QQ3d)Eq4&0JX2Cb4SO=D43o&`jFP#YEMOkMsJFu5rQ zO?Z$y@|`YR3Elo2#L}uIn6|TFoHGDK z!}(~g9mkCWY$dH6IBuG&)K@glZ-XRm9PWb@l76Oe7-@)2G&qUmN;&R8&m98+TEK{{ z;{KfQC_5z;ae##sUJCBwD7YyRgm^c6f9ej<_MC9uAwveV3b3uIr^OTSTUWK7%d;9f z(pv85=3C0@rgg-yaY(DzaStHHUZ*Vrmn%GM{44kg=tMIl?@c@V;8AdhV8m|AkE^&L zeRI7dE=4)|hA#^eQaX?7FsiZC(gybf+a9HZMG^^!OM%XMNiVDtZ^N`O^1pds<#!=u zjjH8u=&ZwDf`b{h1%7}F;cE-jso~}Stk_%BmyB`&r$D1PndJ=zOicWX#McGJb^Q-} zi{_?Tt&L*P8!+aitD-V3HN9clXv#j*3)50F6EEBLVDmrBe{oT&PT%qE5UZdJ^Xo)0+4+AjN+w0JQ2e_gm>gYA2xJ%yC(8sJYf+ zX94dt07i;J(=csd!@^j@ql}mCG%&Z1uVx$BHXYE~*|L-WQQtBumXkQwY>&5{L5TWc zgqRtP@eaT;%m}0&>#lUo?k=>sW|;@Jv?dR4->&6>P5TVnBmYG`wr??1pw#r`gQ#z! zJW5e7+7XGIxZ}69oV_ii-!}$%(4YDkIk6@O%vAv=WXB3(j)zwKB`d}bOgMP)iWQ4K zt>o@)#v?iu?_BeF!`Nn!?OrY96V?-OC+@aF-)aK>72912zP;GlU8S@ z+8L={Y7p8JX>GQ{qiuw7Sks0CJQ7W)R4&6}TO9!?qzu638)0(cIKwdyJBA`c${4Nq zr!yjL;d@m=8t6K{p~OM{r=3Z)9}!-C551D-=G%n#qt7F{2`tRSwRVQ*MrOL7at2)J z*(UJc0NNtvw+*YyJdpNW{)T=YQ>PG%q8gajxzul>{ESk29-o-X^O{x+EvBf~=7N^T zZVKYQH@u>shyNj)cLP0qsDXF0H>&4Rlf#B(v!#o_pu7aW!^5YII&C`XfUwPO65lg# z6UHWSl)pXM-#(`g9e$h7efWs!Lu2j~>xH{PY%oKAX+m8|Mug}!8_Y)8Al=c3rH~M+ zu1y%Y7a@`qvpO>He`Nj~J2fl%Gik4}J(utHHbvEcI2mWYl)XP`>evJkZqjK5OqiF4 zP9FO~)jg-)7O^QuPgOY|a5pVM_K0|+Sj+mO%~3lu#(x)8k;2$Mqn){aHKBWm6hjte zo-(=@a1sP`7p98l-XxTJGc zj;#Ves4CoCDJL`_x%&~9D4A>W*6iZ$yfaakdmT3xJVHZF>CB%CJ-zC|sR zEV~hc{}N^nR=H#{NAv?{AxC!>t_sx;RV-9LHZf1MiN5f$ksh}kgC$sT5sMD|<*`Ds zto*o*seFDs;EPcW`FsLz-d?%cv2Lcgv1;N+`)KqISN7PoY9gxx5C3I@$f~o2J(eex zmPgy|66BJ4P2H*c=~nt*pdo~IQa7igS5N|ffSIK}nzG@xKrdgf_a72Jx{Ezgg^+@B z1~y3~=_)k^3>@2U42YG<#(@Oglz@I9}K`QvqF-e zR@?vX+xogUa!nKbI|+q;N&P9x-zl~6m6?H`gR+>SUYmnFH#L6YBLiN+;1r?Ip7D2T zNbNRqhSGShCK62fW=_3>NuoDO76VV6`2Kxe^nMzWI>43%CbV&)MGd)#MQ3KC?6H6@ADaba& zk-F$PPOI5Sz9;{TWB9o_c)qxf;5GFf-EP}x52ZJ@5eFe=5(h!)rPTDsuTY;is~Gw! zMZGpY8>|bL>iOx}H}(6?K|X>lfj#DwJ#pN-_6Kyr#lGSwnzvhz%GWGoyLG$pce&Rr z)ho`m0BqbN;QG(PY5N-^^kB<$rd?sR?;W0mGP8G@(5lfW^w{n4E^0*dig@a4@q)7# zxOGwkigs^0DdWJHNN;UCvLT*bAD0{Apq9*@LL}YHG@VGvu`D1)ej2?_6Lm3BAT=w| zsQ`Bk5-FVD%FUE!y+=-D-BEH4f)($aWQs@zH3bkTu5yF2z~CDPnW8iU*^uyga${Mm z#ZIR4M3|W#chU;~x*}V3;JHW6W3TE(&W9|Cf~e@KGM*CLd}%eF%91j;BO1?Uy#^;{ z!Ni*?^P7g-k%}j>i6({PFAWQ4`yg~VsDJh1ScsODi1rO6mt>mI{0M-hG%z_elcdBr zFG{S;K)Q~Y+@5rAsy^0R2_kLIg{RiI2X;$hkEB7UUDM_3D0c!SD5cd*CnJ=4ktZ-r?FdM9_TP*XmHa zKh_%eAD&OIn_`D1^L{F&HlN8Ee5z2kz6q{th;I@e^)}6~wK4d;b)38A zCrN(Z2z{UTKOFIU6AE@{AIk3W$N&BJ7A!e+@v>Db8I zP$TbKDYg4k$5e@ZSFaPBgY}}eA0fYtxW5I9Plal8(P>}g7wyoG+U(Hg;P;ku?%M0Y zyUoy9ygz%y?``FnDz)?Pz90I%rP!?2I7VnouhF*NE>eI2p?)$`z)pVs!W2hP{;H@E42zGb04KJ>f0%V~RNXzA=;Im|Wc zcl@qC5{#X;Nc)I)NiG(QjIKVPseIbXIg1ymanigl_IhG%%vcw@Q24w1On=wuZ%_8O zXZYJLf1C5ScT0cwb7L)z<2BAtF`kuoNH`&3b}9H)wKd8(_DhzyL?)g+milJuKeRBW zog2oOc5GlwyTl4AqyIO(nv{N-FbSvRXQ?kvwUTF`H4XU!hO?w^^u_cGLjYTT=0*|v zOWSNFsKvi+EkDy5e!A6pwl&NcGd^f$W;~}wzE_W4@D3@;DonACDAgH1Xo&u>!MM30 zcBgGre`!3>ZcU0_))>FMu`u9tvERgnSCc;Y6!FHVXM4 zxF70l(rrtZf8SJiswuU=nJ12nN~g&gMZj)jBA?xBl<00uN6NA8eAzA^)&+Xibr8au zi2|A@i^`z_lfNm9JfNWn8vE&x2ReDun8qS`Ok*N?dvoTF<{5)dB-SZ!ZdOLIyINsN zdbqBA1MDD?P6dW63P8|esnu2J5>umRp6!3_*%mpNH}l_YPjAH$MGW8OhU{4RuLkGk z2B(CbK-TZA-rd~*-ea<={j@=@Z49q#Oss8`Z^_z!UD;quuiI%${h+P&hizt`Gm6#b zwzk$yZRUW}FV{9e)%H%k^IpAAg86~zUD`sd?0=f&j%Mdqt?qAHoj01D9nDgf#Zekq~LH)|sTGB2J+eu)L&3VFHffhJdxkC?-DUzgbkF z%J=;Lc7Q#r^A=dn`JFnhRzWTOq84+0CB=Jn9cimo8I*vPvd}m3b4^yW)1=_3X>0GI zlT#W6jslhlztod%xzTCB{E4+6Tx^W!;|6@Vi1i*=TF%`VshWl&Rj6>@ewKUnpJ@p7 zA=T&1PQ6o2tJ3LoINeT{)h)Z4EPl{~$Y0rF3a+K%aHSb$fPZOw{YmdQ1aj_|-DJ4757fTr-Up9E~*b%P~x}-U>ruKnkdDxMq|@%W4RukD%um{y(xo?2|Q;6 z$l!Rjn5~aJhMh*tHwIYQ7ce8VUZ{KUj$ zhtwalQ8t^xhfH*4)-yS+Xh`)KbCSlaQpEI{le1gq#8Ph>>2m7$eT=?LvUf^4>t+VB zQSv)ORCWX5M@A-YIiRmd?vLX*R~%BRJ&1{ho7- z95~|SnDx+PQimmHd4_rde!p)%8%;s>pqEB|Y-HzTU1B5f=xH%%qT=!Vvb^8u&@TH6 zCP%~i!GSnp6V3o&=MAp|8|fbq+gv}`o{%URGiGc_Q4lI%$BN+~a1fhp2b)GVS|FrJ zS5T~PV)bJGz~N7+t{&2d1gfF>JiYSf(JC2 z#T`>HiA>1!>bV%P8VlbmGX~0FJNZ^=fF<9%wAB1#nd?tw=4GYkrKQr3hsCdF;bdYk zRIqcigFJW&U_3#pU7XuY`e4k$O5ee*l%?7m;(t*c68xzi~8&WcUSS`tNkh{Z;jW*t@aI?xdUf#5Ujb=XfXU&CE?I<@0Ir?gY+ z(>})(g;>}+xxF0wZwsO1V+eRdgIUGe$rf^&c%b|-Vi1#>Spi|Ex#D&~QU!rcQXDw~ z@pWtt@|`i7%baZaA$hV`umKnga9qH0bMpw>K7^1qDvq2z%-|v=QIS@Oi2^?WVU-V` zfCaPw11MxwQWltck}K{MupK}2t`WhX)r(X7d8;*>T!{Dg0n~Upxh;|ZD zal#4ky##y?VAmmMiF$33_xUFbuICm*_$9RujlZxAD$c_eEm+*VsUXsQv80*dOjLQ%bpuU130_UO|Oa{u;ncn%_BLzy|%4BS@czrD;x>?L$IzxlH=m?&NU8|S{Q%)GTM z%>k+qu2UiSryJ;`$S&ky#RPweBJUUvq6NWWfyKnlvJjG1$1s2z1Hb6;K+rob4GHeE zaYi79kWL96v&>Cxl*7mY6%GeNSza6$!g(j?Qd53>)zE&-v@NFwddp%60}}^6;?UmY z&{!lJ3ep(#I0-*&W!foPNnn;Yz~Wyn!=MWx64d!tzB%1-*)yFgoWzP?X{OmzEx&ml zqQ4|W1Srfvg`_hs`p@eBVGk371VKB)9n3>y@1F&zdH1&{?<~PwxkHSP{*m?i>Fpo}!zO1j*-=@56>u^TBy+L~ z@JPu5!+@lt`jpgqQR$0L!81jN(idgwZPfeZJjRYiG`6l-x4LmnlT=TMTr5gg^>n4h zI8Z3-KMdX%M;C8WXY~tU4obX+*P~&2j%D)@EgBR z@K^QQy$_4`NxrUXXNAzx zm%>v$R@A3^7(5StH9XTuPYO@3#N#xi>eKKW7b(R1u>e({Haxo&@J0H|RPuqnggmM( zK?@49uoa=#q$~cl35#SFsv7JG_Gyx zP#rX<;p;f-QjD`M@7qtoXq#KgLQ=pJsldjrPLC(IhS>Z;@rr>P!Hn#4`Jh>g^GwMY zs%-Mk!a-biAlxwGh=jn;k#edBWIgH|g`I&tya44J0FMBaJPR+2k>3NVmkW8e_Z=a> z-uv5F^pVyB!E52}5I`{f0OIwd6xIC}egz2tf`KduRc6ig<5v)g zA*9>zsf0sU>7Zu`V;Y{h@C!^)#uTGame~$k-V3iupEuX1BRe%t*D==(95<2wnqet) zLLq2fC&G#m)e5tMIwvxB3cN>r$bJga@^R9*fELEb_`_~G5#-baa{Z_H5+$Z~7_^Z2 zrc>%rSu+<~rh6#*8XAOOo#kSjY)8N02UPHs&Hw-WFq=G$ zXKFmEdHIk7v&+?t+>dI=kH=HeCGo~qq}G|UP(BJ!50H3`MwD*?)XDR}-7(Rx2VCOb zkePRn_u_RM)9A!{&;#$hTNgN<{Zt60oRSYK2K zK08e*K2Jiq4saMi)%R4C9|8DgI4 z7U3&kg)zWbEDzI;bK-8o+HscvOzf7pWZHvyXgO5XLL{4t^8G+PZw9dwc-Is-|KEW`e<3@_IVQq*+vLiU0l8Yp181+wS z*h8L=$~R0D{Okgs5|SCup}Y(5AwcnS>}u@60cQi)H84%^uWpLCUodMhKUWXkZ}Xm* z&d)~X#I>lssdaHn8*}E8#^)4w>5W|1d@TH*-nUy`GtJk{;@8Y6ubZ*gOxNpXfIkV4 z&(0}=G%S4QZ1df-Vd>H6)(s(O<)fQ6APV>^XS?1!8!O>UHkcQ0NO2q{80^2Hq=G{o zT%q8U9Dq%W$zUH+%E9k1p!?w*g>GkQNIHz^QV-;M;gF6H8*+KVJb<9rhZxXZxmJ)# zwdtB4XKs=8me(gSN$_DW>c{-U*md03VA}z#2Pi%qxdvzWT4LlA0K0ZPChGaXda+J< zx>ejeuMl#s>j3&$Q|t1!6;0CHL9!spH!&ZqZrjkZVsTR|d|c0BK7|n;uLb6+J zY&QaV-(t{i|2IE+l>tQ4Ih!J_%Fds3lbjbD#Hc{^c?A8z@(LxY)+j7s)Y7M`8 z$$7@Pq4Qkl)@lcBG|w`%V_#2P+ z)vUNS!<==B_8;nOr)G<#g)Y&YOVRoHD-7#il&-)D14|31e}eKR&3ubabB$Yx10tq% z7FvxP;t}M*KoA83F_a7lan=tBdfnZ=3gsKt8%&=7qMeqdiv7vnQAlQ=+20#`p zhDFR~)*fFD`->pn8L*$`z@TB|;FyCrUl9u->JUPNChRej@plZvQhA>e^ak9)e8jK| z;+L5z+RuNfP<}okHs1_|sI=4LsTV(-45pS-!71U zJK{Z7kP~LVh`(_m%B_nA!>mR&{u+s+*e9|K=L3WU^W~JptekkvpEH?Z!>JLDEf&iu z6~m(j9t$i4@-vjS!=ig7#k%bfh>A6U1=yt{W~EkTEQXw)1rxT{Jy&amTb-MRT{-SJ zBBVuWi5=B$)qE!jYP5=2AZHfJHz8!XQAEduvswDJE*GNtuy71F8qlup#P%KQ!5mnZ zpsMHh0$FD7P5lBsz6K7G@_%hgKJ}vf6yR3?H7@^v^6P-N0qk1+6S3YR<= zQ}o}C@&kZ}0gCC#&U6Cw0K( zP)MHz%}p&V1V9f0aokUl^kKvOe8KRDM*jBoS{OSgz~ZH8^vdJ%v<(-tAWego2h@XA z6D%MYzXlEquowu`>vkdHmY0QYL&Ur=)Aqn^#|J^9BZ4s7IXmlY3*^4I z|8Il)!=CH*HD5vGwlY;bbKtG0S`9sH3#Kik$8KHMq~@$h``4f>b3s@3zFh_j4^+h8 zq-7sp82jYH=@=|Lr3cpm!S~0+iZjAA;YL&5NEt@W zVlp7>y&d%tH6rA9D8B=EAE4?z>#P{r4tN~Et~zN4+9>zWL>Kk!mgk`#wT9nEi+Or* zy^&#kIZm`73M$Kvv`$rg%z*Z|_79B?XcPJC>+~Odck+QjKG;lW;5a8t#@K#Fki79Q z2!P`QMt~kt`NARrxrO;`xlP>HV9vBZi z*pIS=;BphYNc%1#o>7l=gg(^@Yf*H^sA~p}5in^NVIA;oxO340c%eUtgkor^Y4(Yn z&7}Ph(JyCosMbLUc9bsw+yYST(~olLI>g-tuxp33JJic@-mmg~Z4v8-#GD~^AwF`G z8>NaWBp+dGC+@1>v3Pys`ec`cP4{hK%$@s3K8{b}>(c0JruDjcF@4SSy>6O(k!tV{ zipjsX&`O*i$8vnhV`Z}+m=I57F^OMV|@q2vl z`Q62}V0kBKiS=8P8E^qyqD7kX zqb+ce2;RFTX+VOJ6ka$G4Jto9<`87IW}jD}1Ii-ilUgbNKz}u_0U^(!{1V`g0M*al zXXOo$kpOnx{zFkOrMGT>YH&TB%y?_OmoZ;~^nTUWI=Q-9jr&M-ak6&fWbJ-&6&?2y zuiNiZb;AzEgS6*ZpJAv$QBZ(s(u1`H;@%N5F1>byG|2k3gKo7BzX9cYJ95Yma94VU z2T*X8dk5;(XYF+iE?H8)n7a@!Z);KYL2!&}ZdN^;*;6~O zMmvqu&Q5ATVU$PoP1B9gx~T{WCc=FCFd=e17y^tSq-Pl&k5IDgA=6(~&yjNB?9_bq zy)K(9#rx9$vOfCPQ2r($D)qQ(-4c}YI=LSxuT1(t^WBrAe!xDCJns}>%yPysn>sAVZ4~WT?~mE+zFvkfmALqLf`3Ik2!!U>#o_OJEz} zbY|leksDfR)|udSD%nk{>jb}hK&u)bFQfcdz`FodAJ<0swF6$9E#|}ix5T|q+Rqx~ zInV>C4@NqIy}d@C&}c7WWR4rOoLn-hcdI1!Ies5N6HOkM!@N48@a~t9TA!l^BJ1~nF4kUw*D-g zv|B6i1RbwctH*%PYeqdD-pr(LuHef~)LFIjCn&qmjgbIA@ue8$qXE@YPuY_%_!4|W zw0pzW4E>$--bd7RAt)-UuuNDs?54ht-XX%f87zs|#m=u_a6o+eTmw@q_K-DDSZYZ< z9%4tZ9^gk^3lL@uQ4DaDUYr6$)I*n?CRkb~cIF+c3b?L8%_nM$RpX(uzNm{@C;kcL z{{Xb}QgX5yNEYj6=2Mq_240J>*qMwTU*vVeeFYO_Quaut zrUf<>Se0yGustpA2up{9r+lp#w2^RvMNRMq!eJB+Ef95@lr37S|WTqmtE$9|k_k6)u=X}+R2q{5%5?~5I z$+I~q9}iITs=6z?f0BPqt!G0JZ#;JaBKs>2MyhKtv-mM@ZgNf~PkRc`zp+40PL}BA zum|H&L`)|zYp~BXCejWQ^xXyAio)kn{sZ7OfTHiutb75^{z>_z^jKZ;oMe)|L3yTS zp0^~O^(ByEC5srH%i+?9bkXLVBYA>Qvz;WIu%Ir4SvspWpDT*fC< z>!VJY2WtO#r+_&plP%GcC0i_Pbl~X4wmwm{9>5W54CFW%(l6<22X1veJ>N&ZjrZ3B zl$`p@&!dDs6-As_A(xb$RngZlbUqq%9uqzf$Z8@Ra+7m9c|Mz+aYuA*fwgXd?C0M| z?b|1!JPU9XK&`WyQN9)M1b|(}VM1%J z{D^Jioo4hdbM~DkPgMRQD2`ZT!8-cOEZg$^B5Q)?_SuhR6+EKyv|_=6^|6>s16aIZ z{{y8m)4@P~ash%c;8;Ts_N72bfe3_y8(UWR^5P%%=RVtCAkx@GDXhb6rO&U#;et=q z7pB&0C!pK}SO-vi+Jy2?0lx#Vt2-q4)aw)X9y!185Ajkz)L$iS$-M%r3br@p?Z^1k zLthgLix^W_Y;vYv_#ka{uZ?x$-H&4sxR=Bpq=oK+*rpgL7m8y9$<>)0W#LxYiq2(4 z5ab{3C)@-C!x@r5F>eyAFqoRc2lvig4e^J(90+N=GW7iD zNPJ0C_M|Nu`7F&MAm~5Q@7HOM{#T9P3h(C`q^_fpn&`3{wct&fk7p72Hj;_#Mp6-E z6REgKGjG%aH))IDmO2MVMW((Ttl1q*urB7E`omc8zL@WxSoFTwaX2hm_&ub%7*}>1 z-J7F-D`w`F?9DMh&T&sOzaJ|@`~>idEr3`MI2`D}@`ue_>^Kto8(v*FjqJvu9|MWD zU6`{(a%uJ%J94Gt2oAGIV;Vq;^C(WXU{jCxaU1{=%LeADfH2jtXy?!pboGQ@1LNQL zY~6!dkblz+YY1ON%w%gY{JWTKPhD6~vaGCzQ51?sJrQ4aSyo{%3w};VYo&QL_`UId zpHr6Q&dy@qyw_1gq+e#SFbq-i+tiw?-3FsLjs=xqxs9k0<|5I0Fk>Gj`bFKvDLKCi zdJ;P`qeLs>JA=g0g5CkpqUNQXZz69hpc2;`oN2%eyBu@_1pDRtgy@;TXY(y{Mz&!`XkL%!XYe8w&L;MB+OBJw|Guq_Z0|BqZ&>MEP~VTL9Hwu1jFE2PCBYC2=8V z>b^*OO@+kmq8Dss-rxuE*W9n;j>$@2JP#t6#eFD2Du6<71yZf323sWB zs~2@-`h(v?n!b;+`%>(40Fn>ZG?X_25;uwdy4R6*yGp^2UO8V&R+5IHa(B@9%ZT@( zh9Si4AB23J$ffKA{+cCZ?FTw}bL`3BRzCD`RTb+ghZjo8mKeG?*eg)s3}&Veg% zSpoWdW!k!#?faplfMwTYLK?UWV3lKQ<|4LcW>>qUw+pnW>t>Yi2mAw|=zaAH#HGCk zYg;Kt4NJ81{B@$8lk_&XHnV^WecE?VdO@Ro+QnHfU~<3IS&JRL_At%+;WXnaY8`I> zz;Iup8P~bA!(9(i@5fZT*-Phpka-hsIr=!)8W>qa`n|sV>ELc2x!qp-XGDd4TdQ?y zcN?=GaB3e%Sgg57Y%#*Wyufp`R;z6|u52n|XVz!@J1P=r8D}iijxx{iicgOUoe`Ut zb4KC3f-_3y6`xUw&&Hor`2v$P|%Me^T5k9RCSxxuJ?ogriY zcKIrBat8m#*6z@2J7akCp__m5qE-8eQESy2wcC8PpV8Xqb^f?=$v-bg&0e5~=hwFS z;Wl)T_~(jmGHaLMc-{AD?Ul&($3HORFVote&{}`3x7J9 ze#BM#p{j(aiUuSXhikuMS7^1Hk=)=|Z80=U-eZ>@?!}Qc4eb)T968QH-?l>+g+n+A zH0a;IXy{2C#0}WyO~KGhTId!UddeGG5n3DVn;QD29=gK}eT#arRA6Dh`M*2dp?{g7 zm%O2ud?6Qp&lh@thF+rCTb$4x>>GQ{Q`QyRL~7t%v! z=s!m2_ZENrFL#JWKhFvMR1X#L2Q>5tpDesaL)Rl!G)^NSy<`$SjXYzTZv^Cbexikb zWd4lKF2jl6P(`>TRE&ho1>smICmfbv@q`(wQ@xRBH1#9$Ga4EfIuqp|Qg2=q!G4pE zGfPj<&`+G`+eXL^?bbqnL01ITug**c7^={(p?KqsLa%;}jwSD*8{k?oH7 z*tgZwJpNY(#i{84j66Ih%>PqmtR5LXWob00XwTy{g!u$@hW!JJ4X9@VIS}2VCjU=8 zK}~R+&c`S$1BC|G;4DAZKIxV%!lq>ApdZ8E?e}jEr1ty&-Tyn^5VWRohWA1K-Ug@a zz&Lz^g-l>v5Jxlf55r1FyBmQ~n_tbBEfxDFcs1vjN4hJmY zK9iIDNDQY|&=*Nce$%(#GU#RB8Pc;P2NcJl3jlxFsdVNa1wTq}2vH=Qcm>Xt4(TN< z=?=cnyf0O2hA0cp!p6?`#t$ZAk~~puh0n)Gsu0wNzQ|&R+>7zT z3`01MZ=4HYcLo*mK2EDKbF428WyxQfjb9pP9E|WX`-d_d$qs1;dvd%Csy#6%TGTsr zPd(jtN&Lb%I2cXz<@omx#Yu`457>QqZGX=nY z!{xtL3&ll|y;YBcchHD%TRSS_ArWgi?b z7?xG)TbXyp2=>esJ0veBU%(hVN%p}zx&M;bo%LQO_Lp_vPU%rrCj6ug&;elkHAHyO zTk!dXfJ{615W5lgPiSpp_T`k%c6}Sn`Ntq+%6zE9gtiN7FQMqhMlu9%D(oxcW;RJ| z7WDK1m+~`kz7rz{pXeulzs#GYCxmASz<%S$jZ6;@)xq*_FpV{A;LY$FgKtQpa*UIJ z4>nWDF(O&GPfj2LuHqb^q^}*gtK|mws>yz``%{zb0VsZ5htL1p5F(vY@22cnL-;i) z4x2L7GM_e{LQhiRV_s+wdm_pv0{oK1<$_Pa>r&?#rlNc}pdP^V*&x?E73Gb9%K_}F zm-$_~|10z>%6`m0#LMgZw1X)6q_P^yrY$1qfCW8M7tJQ_x=-wd|FI7xM%`ynMZ5kR zKU8Rx@{DW*tY^lh1PtJ?ADirK3w9?}$fGAx7v@mQl^~=}TSyNj1G0X*K=)|(gM~H8 zR3gw7Rq?aqnf;*t3c=r{+f#a%ucQ2vznbKy0M*Wy;@Ne8{q{q7E<}2h^YcR$RpK2w zUHi&5PrK@L*rgz9KG=hXF2kEc^*9-j^z2Ea$9H{<%x!m(!vKn&Y&@#~9AF&Bn!)s_ z9C?xU6Wg35J1vTIW&n1U!#_4p4N>KO>tk*qm{0c^LV?CD=%G9mz#;u}b--)QhtIZqE3%<${nD(cs8^XT$317DJ-T@qg(@Qo%vGw==K zDQn3diFe^Gsd|nEU+dwKp2<^&uf9w0bw?V$(degX_>w$j`1&Ni^6t^)YZ|^mJROku zwgca2j{C#g=AP4d?of_)eM|7u`Cba&Xz+6ozBG;ouMzk*0^ex%(?R&sI9e_7?MbWO zX!Oq$TGzC;ozpsmp?wnH(pyKDpM&wG7+Qa=;O9=@8%=%=#+SxWHYjklOT2ZrrRq5v zd_AeTbw%4bC$zIQ+YsggZ*ZF&|7mzfqrVP=H^pS&?UHz_Zy#Mg4}*6QvwI}oyMT8z zW0J68J)N5JA$w6Y4}EiubKE1V}sWTeEq;TntaW~m&w>_iFfIpqsv$5T3F(h zMy74aU@dD-(kJourQsb7{tkmzv6$nn-!AyP@UGG2^DuY^vASL2?FHUZl?xlzt%m>h z+U9k`ieD1EUetHS4^ntXgU|It@D5@#>5_PRfOjjAVR6O3&F}R0+T{-BChHi1mAmrXNG+C z^)tL=Ghhoq(eW}qe-F^}bD^hG`a|WnygxdGhAv45yzpo#j;OG}W=yMOR3Pv|)Q*!r zNl)E9DZXqyFPq#5xCNl-xeeuhK$rBJ?w5W$yn|9iCkZSiMu!zyBF=AEq5L5mi*lF6aI`B?f?9 z{Wl4`<@cuQdF8DZ`3~TEfWmteK7SDJGyOcGLEl6!L_ z1*4%^o}d?vfDFLgZ;CX0SJ1N~jh-joHOX^;Ujr09ui*2412X9u_(V5PGlWGmpiR*~ zI{lHW3(+Z4{gL(mV7Ki5_owh(1ij?X`c3jUK=ErnK0gYO+28g^zvrR-jpJL{(smBP z$!i4YXSV`UC-L>9;rkuRy8-_KDEoxg1N|&uA%I;kN`K`Ea@;SK=UeJze7TnIWcUZB z$Cq0IA(R~b?C`+__p@LLZTC}m4>L~8+ilN&+m7zGSG{eQ6Jy@3(b?aNM(>KQx-(j? z%oK=>#H`T(cH|GH3PVS%q}vm>;Cnafr`q`_*ohu|$0R!ditkV1^EUyReD9L+d`93qUqVR@wURq>q@zdb zI1&K+)BNXRUzDaXylsI*p*DW>WK2pNw;3 zSuDFJ5(v}TqHrYV&#i(#y=ippM%f%Ni3_0U_$QtjKOU+#9%eq^9dZyIaz22WU z-g6Tgk_zkWV9_xB_Ha};WK7g~&pi~b=25L#^xVYlqW()!uR7LHxYkGfL+nlG;`2)Z zpJn7>ROjH5%K_dhY1$oS`{KPeN1HEO06z8;8UMQ_{#|MK@5=U*$BP~EBtZ3x|KM}? z12M8K<6Op&{y7A{T93|w$w%~vL_;2nYw4Ztx&uwkEk*mXdBNNTr}T4hBk3D_B%Q5B z()`_aEgwm1-nPdRWB%`IYJXc3-Bq*Z4>gD<&lVwhh9Bv6hRy?Hhm58`Y8F_6(Gbvd~e7_6zQ}SfE`FHBNEHWFAIS=fW^Wg}5m(@nx42h@wrzt!O zQ9c#W1W^2LL-}UFj{xjyknsb0J`n3Sb#9zsjUx^6cqiAk z7=ssR*HMaJ5?B9Sg1^p=(Ue!|mf+-2

    1zYWU*u~RYB+G`0 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 im2Z!>>d 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%0DiTfTJFc2Yx?r>%@_xrd+-P$nF!b;l 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%0A=^&7hE>Nr%;^t45`+T4Zl1Rh;> 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

  2. 1ZBMp)QMB7-IFv?7c{_3td zipj7GGR4-d9i+fs_8K}3_Cd(7y9|AU0w9CT)#hpB@tpxqTR1X?Q$*Np)L7sQ?G_2a z`NVp;E?4uT#C>M47fioo^q3^P2rqTS6UM>v2N0+|JK2w`zM#)j1PXShiojT&x?g)W zosc#Y_yi!b8eU1KM6RtRow(2oBZ`^2leg5pfKEkdD(^T#WVtcNm|KiE7Y|8%sD2AJ z2oKzgV+3x*UkVNNS#0#hY?Vjb~57Zh?PfmzV?}pI%&FHkr+#BZC zD;xHunGO3#nAz`SzPWb+faeLar@m^!{-3ras3WmjQIgniF-(m>ih5)4}`}E^yULT zs%=>O(eZ(|ASCe;PWm+!WpV-1?j3A%gXC$_g1kQl;0vi0W>kW(=%WPO6H41SSsC_BN1R0~`p9yOL+PC6gmCD_|Pfr+<@Tj<|EamMjlV~m>PKpJWdilIzBNGPj36VuHD(<;wgopg+- zQ*_eCe3?s~UjOjt0JDVgJ0k4_Km)bfe3?tFWS-@63d{Yi)XG`OYo%5Pvpj0F_()sU zf_=fyLVKuImgihID5Q$=Pb!Qa*cz1oriNbx5Fo_dp~)3yKbWFJ7vrm$vv*z@^jGVLI4WZrjgHgzOKT|p7O8`fAI@9NE?A-ii7{V6l2am zz&$8;CnlLQM!sA$7GJYyZl~obtikUjf0A5vBp4Bf}&$+m|$PI>F3a~ou9-TgXpk;DZ#ei{W*rc8N))h4y9~W z@5MNH;5$dHX%J(FFB4$?+u4sV85hUc;i&l+8hrZB&q0H!t%q&pti($xht&~hCD5Mw zvq0O3&>72`Sj1#{UZ(WUWK1V{9N7-lP^M5Qm5`djX5ZvQdjwKT3_{YlCosc@38j~_ zfh?a@j8wc{+?82C2}2*uXl2rl37ndhEth;tC?HgupJ}raru;kPx;(Q<8tGN{nX4Ay zaV2vyjkxhyNke^lnT^YW^cZ9F8mC>s^=_sFxCpAQa1?khw34tO#YIU;!(l3JFGyo< zpe-=jkn_xZxvK1SXdY)8$Q9K=wh3k#f3!T^&-dby*{V4@7a>^~q>Clb$Hi~2{qLLh zA?!vPm_)*qN%w*wq!*1;Xta0=0Oc&itNcgkL&QqYOCbF|wmGW1jkv3`=YNPj4X1t7 z)_xK9euhWU`1|%V_@|rj3NJz6aBM+_S&NUITk|uw3bu&9tiJc`KNgsBO_w`ffIXh5 z%gBRyS&ofCmA+h7Z7m+Pz6O%QhsSnBGFjyFX zp1@$~Q?@ce9qcjEpWX=tu{k*K_N(tfp|R&wZvZ3O*aB03+d#a}aPb}<`IT<+0^)c< z8$44X1qDzqhofTdjw|#Gk7>9QcC%TXm=RY_;<~3*KTGxHjCA`|GS>LI3LY`NrZs zmsAa5#nC07i=2JJ*5Uz@t?8%2X$p(-%XCwwMp z31#43%-YFdg&#*fU_WwZPJZ>C@-FPYVwst@e%fGG%r&!d$`M{;P~V*Izh1w3j;^o^ zPLrl6+7as7V>-c(M|Px<-^t`$TKI6YWvzaVfjdR~A9Le5dk?I=)l-%0#b#)L1$l!` ztaLhv?q`$lrO658ZJen@R}>LyGmIV4cvoUKw_4r#E$}xMp8^_r%dzomZTZRhxj7Zb zn=ROs@uBkujQi~?f@>>~YWr)rJrV>s7SL^gDr}HX$RV7lh8sxxc+_2~>q7OZg!lo~$}>&b z`UjAXR3N2v03-)sXWJzCrNFgMdKcPxH->6WZwo6>ghBQXrVgb&+TJ8)>Twm(So#XL zm@H0qPG$nG*uhKtDOu6^W7P`2}V=w zpMA1-?)#G&CcL=BLkNE8Ek*_R`9Q6bvBA&Aa=CB+*dUIWs#FWY3)wxu%heq%m8&xx z_MXb~BIT~INrAzpPrD2s24?$$+2b>>VAigTGwQ8UL$A;3fP&iwrkg=56hLT_?PW`q z40$O&hz}UBKtdoUvTV3qpiyUt`0~~mHKX$YB=>g>;tfZ~7+ha+pstc<{pt#w9i1D) zL84D0Dl8ZeR%=WM#zbyzL5cJNVm-xPvZ2lq%h$h=av(HG+(ZxoEI~xqce666=p`H_ z9EV@)c2VD|C>~6#%J;&e|FiJsME&h6>v82(Q*{s&}E=@-Td>_u3`*E7w^*830 z!EvGNa3gTLhs|{;;6KpWn3D{rJ!$5M3&$IQ?+`#%-PY+WBd{BHFqb!;3ElRu{?2u} zfd8}3X5s+?id~~>_b#LH3;^r{KG+oWh=hEcRfzB){H5?c_qOienkfS-8;N!CV!&6kH zzvxQE0^m3=D=A>d<>LIyzhbnCO9_IoJ2*PWTr=848@Tn+`Miqh0fHQzks7Z22UNCH zodkfO;{w?7%pzV%P!2V7RTC~a7IPfTV-vUOLB8}bc8^^+jx_jg7@z0>MDCvnroC&Y z{49wS)PSXRbwF(G^}0qkSReLEGTF;e7}`j~XL(*;t;u}R<86}pt4D>*4-iyPq)jrf zQ*|!Ub=oHLqpDI*T`59lsK-KG7A5y|Rhb*%9a@+|awquoeD~F{pefW;VozWt6{oW& zl)_$U(ZYilXx?ow@MDC+xd;P4`!|1A5o$iIOs*^qN^2ZwIK1f*vinRkI3~Y+wkF-? zW-Auu+hps_`PiLmn>+Tmz|9Jiu@O^Ak$nnE<*O@gv-dFk%sqjdgjH>^cjwot#_w6f zVek7W3|-2SAm(R`cJ0E!qz`&IFQZLH9bvK;b3GrpON5*ZEFFkcG<-4@F^V(2Aq%Bk&p;0wkn%2GPN z{doJOTqE-a3Yv26C|5ZXW&r@zB5lVODW{4b?-t_eoy%E-%HN>3UQg)CBzO~cTIb;o zdpr}3Id`FY)d(C5atCgF*4fA_GtXa$Hxmo-X5tuYa96W-_`Ab=u(&_i0uxw5PGDmp z7dHdC(dd$%h1eqj3qlK}8^+?E zc!5+&(odHCASMS88q$9gc@IN@-TG=zmLoKL7OPAJ5r`edQ=ATEV^1w!XRS!a+%oiA zaWbhBKKCVrF6TW|*%q;?)?`A66(L7DVq_iGkqj6~(L}Wg?b9ZWbY&b6ZTS95HsqEm zp`UITdI=36)Lx_d1Vj+H>t_U3b9BZDe`~@3it8VLZx)G?L{Am^TS)+Ll#oof`33L9>xum(&L@xho32zh`|a|}XVfl%mpB_Kx`)uTuN{{c?~^jALl zUxA(!1Nym`V6H3NySWe!rnCFJ^hUie$#)qN5?i4}qG~?#~jdUD~@vBA*sF-Oi9+!yILXF$Yp?Ww8)u_1^ zH^^~zW~vUa=FK=#z0AFP1`hsPT#zRxtxn<5Jb6>!HzUlmMkaE$sAfY*CEG(!Y@d6I3koU>^6{&Q#(Dq(GDyvL7{t zkeJF@c9kiFimAxcd}4)~6zI^G^6HuA%d-WM59N~n1~2U)GG+1qlZa#j5uX+OPAqqG zqA~05ig~jCy!vg$JV|E-hVp2{T2Bv!b5Diy{!tFjoX^vCxtMqBb8HdAH-~~hIRw@w z*oY^Gr58#!zH2YNSA8ONkaFX({80JO#m2-8(RAI2;2c!;TCaz?FnuD~VFU(0W zNyH(MSe@=tp%?*RP)*;U-NIb%Z^a^953K9X-F9rk%Se?bsAG5hO)0m9LcY+>ZGW zyvbBmP+HJohsg4ew&<+=&0KOJqG18158X4W-X$Tbem3q{iwAVms9MStYXrI)zp#X( z)+h{E7D8d!$}WBU2(crKsW{9&9)dUeH+S$4VekSL(?WZ~reX^fn?07y7Tlle8hYiM zDCz$j?vXbUrfMuQ#K4&17#M#furwSvtLAdO{idiH<)jK&dB5OX!>F?0j&l56~!wI`W;VXe!-(X6e&5eA;*IC7TWaM%dX$%wAH z9S(wi)6h8zgAk%5E@%lyF`bt1QR#H6gLV2pnp#yHGQ zzoPAhe;=~FFqYwxundel9mWug15;o!h%g3tfyXnzCIBzI59WaGQo--nBo1JVv_?Qft&2u^AV6o2@!CKf7(WQ-+s_8pW&L(gE#OX02#5O;sWB+jG-Te8USkh^ z=~w)i>!=b-oY5k@3vrnMrXas8{Y`?v>2R;H;mIPB#~!mjpy1QVS1Em@Lg4q%@(%8g z4in!r{BNPU4|>r8s;|A_{|~61i(PL(b;%7$QT^gONl+al+p^I^Wc%a~(b*Oi8Y!Gq zs1td~A6ntW4;*;iEq>B0lYp(YRF<4ai)dP1Z~Typz&aX5k8qBrkDUtyIbcND|ivpHbGuSTqG!n;^cdJ>$!aIWM#RgfW4dXVsyKNle!c*&mQFgwar9d(Mz8lB4>c ztZz?jMc+^)iz*1~QJM0qPV;gDJJE##Nyj=0)NVPer>Dd&xDQt4Yg{7_?uLK!FLCYu zmRTvmaER-e;|ml}z-z5Ed?<^o3k4DtYaL$3aRpZw8kJ*3LsaSzY<0BM5@=!%?v4ds_(u0c zeWRS}mY}cxlwD$BeSn3U0GAW$NH=03ycS~xCrVYn?@WD*AgIa>*fxh3($R-3*u~w^ zuneXImv*ELHH~3H^OvMkE92lle`6g&cQEPtD^g;%goW1o8|^^KQfv@!!=)muB?l13 z_@@oy{aDSf%x3Q3z6*>h15dTY&k`J<#FG8 z9sB}3z^-Z`PJ=UR+x4tWAMEQ{sZL7p<1}0zlu*Anl{@#X!6{(eG$UAi1bcUE_B$qS zfEjg9YW}zl`MFCCYZU7UE^URJWO3x|hn&pv3$yfYAfs&qYVxZ#Om7#+-C$IGi|vt) zr$tipa~p79R|ha-aCelxUp%7eJAGbK`gWOpaQg17kUWP+-`82FIepPB()WQ@2cz$^ zSN&G{e)@Kc^j)St$J6(DBr5u1Sb(gy2O1memDCNwOH}Iop$-1Va3Ez(erPQhuPA&0 z?!~0kZ8Rzu;XJ-tikTmG{oKieameB(S)AO`8K0R@OFRU3H^FZLYnUmUn1U>oyrd-% z;@JTRkLBzcOd6n{q*84}L`o)KYFGd-n0x850xy`2dGG2DTL{lN_R;yQn_;n-qnVte zdMS@~CPhI|uN=J~MaJ+D0~MGzLttsKmi9RB90O3PHGpD-~r zIE$fZ=Ig*P|7Mw?(V*$zbhG+m2_TuX83Y5WE|~`U=dO{qc*qO(PzMK`rfQliHC zr{qD9EcV<e^kLt+masVVX=y`o zg+50b@73r-P^w1bLD2UC$ z^g#b|NeYZ3syi3%F2o(PPDckawEI0^s}{g{Dxt{#PFVwFnunH@CgC9sU`sqCodypv zs}ezt001uE0F#3tC4z^{Lr|>V)@!weFuFWOu`VQr0lU)f47L9HmIEl(Pt8n-KVr1I zNd?Um>r1L&62&T*3`G^IG}=tD-lWRMDAoq2#V2MFWVU!<#i}YzRIEKzrH80k=Rr|J zvF@InM6qs|CU}WctU`{K6>D><-mBOeNLN&KcBTF{#rn~*SjD=IZ?0mk<6EL)eFllm z6zl!WDT+0BQ)%12b>Uvro*0Iy|K^cL)NBg+)jogiPgt9f*_0L%Eg9kOWDkWh6;Q`E zy`_TP49~zzQdOq*z_9*IHm0l{@ic?&WfWsPi3jIR~5OW_BbzWJ+pr41^&hFtD`t@@yr@yP6p!LaPSjM_37|O46g2SkKZ-k zizH>tJ-@*AAGb8T3-M?$8(}a;{;PlAg5X{J7cF?(r#pfN+WSP`Qs8cxDvZ_Q)a!DU z=kQGPOcrWxnr9NJmN)aFgPG=?3x2CzOkjyKJZM4~dyE$`9yYm_~ITT+x= zRCaKbouKj@9?HHcO^UJ;6v~dc{9q{CI^wsYtV>;sDEsM6`5ce3ZAero3oQ*l$<+z# z*niiVi2lZ)wlw?#Qf9(Hy$q7P5&JJUgu`-j+vdo3aWb&pUmKMHco`rAwNV*ZYRvgN zib?sWr2Kj~A>{QzzC!r75j|B~X7rUIkuJ0hh&;AD4O)Upn9@A?q_Pb*5=H8BF?YTv6Y4{_?%Y+&tau}r#)kHRdY4_iw8RNcNk}}5W zQ-m?{ke|vVsT-r6%Cnb1BaiFGpl6QdR<`8Mczd!m@Te4yb!j+zRk}X2oo-4_ny^eu zOB8QZmQ--|jW@?^l+LD=Ax(xZ#x|6jST(ny3~s?4G9wVnUWjK*gMC!gzuzc9)AzKq37)3 zv6ws@$I`@qD^YE}Pm5sM7pu=L?9WRlf=Qm3wm73hv0{!3WsD&;KCL*;pXOcEk@z1YU?UU#_vm6eFv;d&RyBi!Z}O z{{eig*q47DpXcK_&I@n`5{yON%lDmTRPIKH%lDmbRDOpC=kmkg?lv=y#LP@QzOBml z4Wh?)^wiJcTWLLO6#j2@vz(2UgEAg0T<1Zy30!b_<}&6fJ@8kEX%6grDTN5Zm{O@_ zXGzEA90l;oZ*4uQOw|I%O=9kf^RMua8dSP1@&H=%mSqVV=Ge$serxKeve{GyISfi7 zZ1JtMF)9Z`BEz!q71B|S_HyKs@W!p5WFVtZNNr{1m&~!OlZ?wVu7AnhrhtgU0a&kcSGcM z0-47_0InPtT#gcSso7t?Nt;@tq=d@I79K@4owR1ChRb0s)z||c0G=NNd7?6#Ag_N? z_|7K2vxx63;yX|9JxuV86C|)YW>iH4cx=dLsQcVwr5tv&&6Y3-Y-HoLa+r3zSM0%o zLX2}=DW`^Z0C^R4Lm@Ckq-u59ZQ$DJra6H3WzERrf`@4am;H<*3i|#WX>T^IFs;;b zPSta_PKP5AcD-n8!4CHbg4iWQCxmHvHcld-;ct1M9`lqD2^-h>Bw%5bK7w$>xZy21WqXOYN^=g@Gc=@Ka+ycRwgHErue^ z&%?+hCbHx_41^Tcv6kFThV>7&zNlX-u234YSL01qDd*0?lli75a7SFrFl$J_N)2Hr z;YFr3wE=5RGZw=c{P|1LnJ@T*&SayM)0rHi%VcK?h)$SUI3fc@7ONspCoe)y6_iJd z3EMiOM`=i(TEfpRBi;M? z+kHG>7cBVI0ZlVT8;dRgikg6;a`X^Sxi?=}xw>qdzt%xfAa}*gwu`~Pp2(Vj)p60q z)&;nGb`~(zG()HV3pJ;0K+U_1D-qMVKk^UMee-z??8)B6OSo`ONYWlU5**vJmF(F` zPS2w9XI1u+OG@OtiN#!8sMwK5u?jt_cGX(?7sgou)43>6%zUtfOe8qhT%M0KUUSJS z7Zc)3*CIF~rL0|f|7@dj2bUbM0$F)79-u$R_H7DJWW7zeD|hXTqrhCaDma$f8*u31AaKx&^l@-a%x4-suJ&c*+r)1CyRRMBH)1sI`o;;R{*2bAkQZJ7Fs#%m81LS}E1%?(;_LM^x>l~HvcDFX2;f+EErc>WniWj9G$ z+xO?bO%#l^tNUOsrO@k#0;%kc0le>)aJr1v&UD24UfWZoA~hX3T4+(J)~QfEl(l9) zyky$%{83F$FkCpt(9;t`pFc5Tb={wK0&2sV@Leax*#F9Gr!V8V>u8bxj;KlrQfWb`SWfwn@I{ukJuhJn^B?z~Ld)wroX)h0?aVwj4+Ywj^s-m}{r28B+a z7(=0jv7Pd%PL1iPDKzDeF`bf}(y0#7PDzPoojT?aJH^uWH7_Jk=<~Rf8jd7@FmN)c z8!}1$|Ej?|dNKo9h02c1o)gQBd3I0TS6F;H2nYnkpfq3KK-9IQgYN6xi7|bppkgWr zZajXROTbKNB9R-<%sDgyva~(<`Gmf{)i;)KxO@*B7VS)eXq8^?5>6jzD6F`XrL3-x zx7R&+quA{Uvq?7!|KN5*vNt1H@p*^V4VJc_d5+z{;aEl$f*oQR@#)sF{W*xLcyxl} z$#BAvKpf}|T1-~g_uJ|Id~e*>D6Yr&{$tG zm2fF^gR)q8aMhefTC7wDpjZQGkXxT;+_!?^SLx8Mq8TO9nJU=vZ(H2Y6cyZCCAfjB z5-_;Z4}!1K>s2zBPE)3=DvQ1))|(zH$AObfV)|ZMYsxZwP_56S*AuFu}78vi|6p<5Z%s5 z6YcMFo)-H1+PD~I&tL_L+2{8vSN;96jqdNS<74_OAEm$dUE}swiZ|=;V`m>)e_7hL zpOXH@jI1s6(Y=IxF_tHI_i<<~Ji*KP;@B-t;tNQ$|FmE?vaO{nGXgNj;|pAcwj&{Tf*ZB3aem&^D-x#>KtXKIE$qadS zO?S(?bI!4k4(8$5t>MkP%Z>+UdWLaqwmNA2j0x2NaJXv*4O1 z76qpWrg)N-m3Gw0S;!7QsFn7^`)riH(j3Wus<=O~4;CMXsh%%+? z=;NnwN76g?-=0vuOlUr|X5WF=$Q|}qb3yM`ph~m;i$gZJBRkfgz=2zEK8}^-nIRzk zJ&C?>JBltKPd&h*9l-t$0c>1FBvp=P7bRKu6%z@2iq3E}G6?M24Pbe5ce`ZU`lUm* zEsSMPw#^0b;>}IB(TTTXQ0L$0YB3@D?#>f_HwolDu{% z^MR*L&{g=-1f@Wvu}>)ml0N3KUl1#v3TaJ4&U!YHV~>7}EVL@J+|EfLc3iAf($_)YO8lC_8&_U+|XA+%f zq4h{je0wJ+YY%nU*Ih(GbgH#~u0+}8WSO|~#+(W&`{0g3!dyU@;XBf`liVMgZGBfqDCmOO?Ds19E`G+_K7Gji_T9lZrX%D~a?rdjpv~(UfincMB;T zE8;ZcrCB@W63!2KGvXbuQ3-)id29rXII34p4RZo4PAv%z($a;Nc8B~J5VF}G;h2fT z^GNdCRa1lE`&nPrhSKhw@~ioeUWf;V3V`@RP~6+fL+%3Zx?SUN7b4r>Fu;JHwy^eO zd<2)LZRx|23{e9Dqz+$n>(K+1d~_2zQYUZL{x7V%8vBYM80!z>RU_)a);`3uA(&>0&!Q;ppBOhx;qJMPzqOX>kJy%Iw-Q-#LL0ILrSg~{>D_@U>h;3HDp37Z2 z8d&Td%w03HeJvq`g3DP}*2O$YfT+Npy{3V=JB^3yB41$nV>`jfV$slt*i9@u4$(@q z`p~Y(!-Oi!%!O{@GC_`e+U(mn+*7N8O!~YvyvFQx#0+6Jf=>ydT7Y|IBHS}#;FkVR z@lzY<&_Z}~j3r+VoN}5O+GVc)(yagXcr)b(IM~X%nibeY14Ju)BY1s5U1Tx(_^R&X zE-dnbLDQuIR*41R*JzWg{_ly*PTGIvDvzRIK@19#_J8tJ>H8FjbqoDIJ+a@|~ezQZOS=#*hiyY=le+`iA$6LEjWp-xN{b6tPSR7L`(_DONJQSkC#$)d)U?6}9#C{O0>T4h}xbPYQ_$dfLmbI!eP!m|dm}b_-VJa$piOAZn!A+;?%Fr%&w(1fp z@^=h6ufrJ+b>Myb!IQZXbC*Kj?})xPZ#$SgE>Zjh{Y~2u`~=E~ZAbeFDv+?FD`Lyg zGQL628#2V}|Juc&$!&(7fwfu;@n0jfd#PM#3S+6(JN<`0etPA4lNV;y?`_W+D^*o* z7+#EQp16jgH?rb@%%OSekD0C1_E^O9I=YSPxm;M}rSaHQg~EkotV}Rg)-rqRt>|EH zboD^|F_J44ar#;;9Q23FNCoT}s3ObsRa2y(?6pRT#FZ{6bK1c!Svjk&T7*^=EII!-|JbtW??H!Bppy;>H)#koaP2U+rN zrX8px$A?mO1kj4)l)#*wQDRyJ*rl{L(+KuP=@mm#2c9mkb9wPwRQnCyMp|)QxF^=A zhIGkOG;M_cKqemn)c*TXO0i{;c{2GS*|-o|3WlrLmp9n(OgU--29>LqzA6C*i@DJz zyc=>#oZKKgLj^72&yfb++;G3rrPG`Rb3lmhI3tciGA3()4UESjQrxv1?4roSTP8+H zk3El+0HA=@MW8H}9|(bQEJjuZd%-9-|FjuQC3wiNk0jEh_poqsXvfcal|a&A$%8C| zTky7GNXLOUa4ZL)7|TUCTp*)t%m@hX-*KARg=TP`30K|ZD6QCLrVe(Rm@=8w7ayp4 zK%8N7(_0)Hgntx?QO`sJmC2w#%qC)}sM;c1Da zz3e_c0Mj45w3tY~oS;b-Z1oJ^)z@ zVSDC=L7}<;bVBa>86$C4ky-m+Ex`!PH5@|3Kk`N?PFt75`{aQ6oe^VDur3>0@sHz7 z8w=LRGPRFs&BSY5-x?HOpl=<~x9$1RZn^JFUK;7ckpYNvffMc~>!G7?zrdhdF{E=- zHvEGT+yK7Y{^{?C9NUTiVqql;6UN80$S(;b;t--O$J)0q9sSV4Gi!%P(9YM;)IF%8 zC$6CaG<)L!Cs7CQ=!wA)E4AC8iru0e=l=@~WnxRE)v=ou@|=6!aQ{sLP`h>JUcnuEG)dGY3D^K1tlaJ*QGlX%ARf>aRQrreZ=Bnweez6r#~Q zSxh%h@WcP*cm~ymUc}Gw!w=z$Jz_HWW;GC^wOKQHlqHtnjy$SNa6SJ+qb5vq?Ebsf zK4US*VGMz%d2bsslJ||!K;s{}LY&eXL!SkwCSNmHzJO1ed;(m==|wJ0@LEK@0{8Cn zyk++3UeLc9H6btTI@A<-+BYt5Z@jt8}swFV(^FrK6IS?Ap zqp(0SQf%e>J3xK_4`|r~&_9a`8;AwpQf7+dYqRhFk!%vJNE(E9u~OV6c*oQT}H#f+GDJ~Q@Q4V+F^Rxvdfhm#%3e=PFd87u6l-2FS(BB1=ns za7Knp(P>o=Y-(kqZG3P;66}LuWKmD@Ofsj0KKfR-;b^XupMtWW^ zzj@okCf5eGn)MMJM7gCD0@HQM=HVWiNYs1qel*^7v+O}pLn_3X))0`T*Hfy!7cxIR z-!!Y%VW6P%TNKbJbPouQ$!@Rv6NKcz>uXbI0Co^0$=EX{sm+BxL1AMQj&;+pQJ;Mw zVh$+mkYJ9%(s2L}2^MdM4AaiABT6Cil6@w@<1vX*0Zzd0jmo})_L>ByfsO&^us-U} zJbr^co$EdC!{LwtM*YiZJ^@XhOE3T{)t~ZniK|TexuV{9IQEeT>oJIr+^g0pZF`7b zFj?V2=s&(H=Fgdj6Nw=Z^?S4D6|_=mS@X=+DlKzfL8?m2m}g?5$9(DY3UCt~owB}p zX4`oM;0MB^z3QPg^?Q)F9r8+6I7N_xoE_#BbTnQI^g1`RW`ZQ7%`1QhkFE)@?=(Z$ zS6L-|PFSNs(Dw2ID09L6`tY%o1K_NPDL_c9)nI?C?E)yFEUUXs164R-K&q~V}ehSDV9_kXLIIiz$_;mdd$=94T=s16) z^dIJcrdb}(tiOiOpowL9&vx3nIJT{GR9jcybilUub#Ae(>aKg=hd{}^FZ>eFVLw<5 zrYysgFl7Qi&ZPa3u)e6~+D7G%;*vq|ZF&C`qw4Q`3+^?HssNv?i{Uod)7F^NS1gz* zDLg`GTE1mAMo-)Kjj+0O$hR)V)g~7=a&L$+XAjB_t{&5YNk1S7XWM-w%>;TCRi^l@ zf*+!LD^hVcS(hVB>z4H3fOq?2o!F>)iz2de5Uc^btu@ENrPa+eV7cDpn^3lxA)bZwjqN`$1pjToUPA$EKItK@ou#K`~-TJSn zGZ1uKj;5%v3c!Yi%MfV)HI~gIpDINL6-?XqGq{~kAZWUk=&2@9kJa9y_ec>~5w%fg z@Ft~YKE^>cW6SW*vs_2b=o4zz`yo|R??lYEpbHL5kjqN1Ba5-P;UX3;2kmuaCso^(73!@3Imsyq-zHh2@lW8$5^-z zZ=lw(aLUL#T*m*095J$-AF%X|4>)3E5#PR{;D>$)e~s+mqeqx_o)q<-yj?4v0RtUE zU~Rh>S*ft6)WwLpH2pOeW>xzE!KlRo?&5Q7PtZT5%CF8Jg`nU)A86R$pnS-FZdIx5632z~)0{vCGm= z!h_xF*F7?DWvuX=K-kd<7#=a5h=y~dQ#r_9KSusa9a*dc4cvV!L8UE9%kM;1eC0R_ zH>V}24E6*C$+{9(hAg|e?~2s+Cq$zvoV&?YT&M2hLRJhWDuRN;;wY?#LM)DrVmOj` zOvFFIDY?LeSxcsUo^*wg9B39sA598c(C`i7xiAv4Px=Fhnhl0e7;o|wJ&S1npc(#$ zDlj8b^aM_{l{t+HRui+3rvf9JOU%ZPH8DF~(43g9M!Uo;N7wilYf)Hfi`y$=${ZEM zT!CjYZcx zK*vVSZN!@pBrG3IHlxm8S)=R0LptmC$Qm6oL4WnbEP1c;1n)DgjySyEkF)l+z*G9Y zX;sSydBZu|-Ua_f@5W)<4d?VR(;95Sb6j+Yk;EnWxns?eWHMIqhwNIli~GS-&40+html zVd3-e+un_))#XzB!!GelJHR07Xv`nOx?-xpD$duOSF=1PaX3kkrwI1IRRSnl|7j~u z?j6Ssz_U6DFdxuFL$fY^dEP_g*E|;zRrSExkO9n%c{nRsHNST~CjWv=s|#wrTOKO} z@5cO>Xg#_W(HjAfP)T%N@3$@hnWO@L?*=Y{Sd&;Nv=`CVX45;-)m1-n@*StyF!zcG`NdCgf#2!^VqZ!-@d9K15dwp|Myp^*!99F?q=x#vUf>yE96{64-y8R9 z1BU-%EK3RlmUjTd1}UoHK%)YK;%PtT^{mLEZR@}=h1JC@un8Ur!`^rpj#Mz<_CCOH zMm!7-Z}_=92N;A%JQ`9vNCbvQdzFJI{@%Zk#(-fXV8C2_Z-z1dU0Sd)?BT+&Ps0FD z3GvWHvqx)x?~Ue?H*f5mHUw2-hSi-RUh8fDzdL-OjFe?Ny}v~UdY=L*d-Fp-`Rl)Jl^<&K*MHdx zW%DOC(&rRN*_A)>8~T$1DPLnd9^5ty06SePc>(M6-07xgX!WF5J^ACl8DaH1)ofe_ zM8Ph7jV0LPyUy{MpXlQ=+mP|$KnmbuXE`arv@YUVnmANoHVO^5QnA{Fee)rV*j6eA zySyfx^TuER|HO@4>GyM~HDxo;@JVTaQ~SJ=zd*V2=*CoNOnWDVU&b-$A81wTLQec8 zXb4iDLn%ZACU!#3|BxufL66omeCUn%Xm7XGP(dh}r`;I0wfN z(e((SSmGQUgI*hR&P9pH@<8Y-h(!1jn%ca6T!}!qE#3pXgM35ydAjHMNl9q981Dh_ zC2oi_oKH%DgmEk&KD`5#7lxM}SBoeu7d{m)xM~Gn)$nR=(}6BR_#stsc$U2HRL-{^ zv*C%eyg#khriJBwy0#BA3HhUZHe<-YF2tzz7IwoVvxf`7RTw|=lKQw#Nb2K4)gbA3 zAey0%AO!YwVpr-`@)fuV>_WzoF*(#j(ToI9_MW{%ve5{zIwHSpbX`B?QkKLRu1jK8 z1;HS-)#`^j9xuZliOF>$!vmaR)(_iblyZQpr5o0$!NBN=8VL)BX*dJnn_kN78TPN+ z52wZAHRm=9YD}eEPlnDjoqRBoGbNoYD#)2}c>^LgN0|<@wAz%h- z?Ie8~Kg0lOUDVErsR&%ao| z!>hd3m?QQf%=Y?lra5u749)cK;jRAD%-6v&O=izcP<8SJGA8qi2Gbb4)<3Sn#F@~N zu#^di5s$RtOd3iIx7*aikIT*B-ymk|XmkCyJgYePS&CWz*+8@1R{wgNp%S?tPR*zF z(0f+^wio=|eq-2bgscown5x=R_LiBuqO2~jvZ?fV#wB$32Y05JIH(xJ%%;@jnAIRu zaJdgNmxhR4hLz`CQ=VlwMm_W2D)9=~v%OF6+1?k?d$w^KvW^4rkK2S1ts76%Mi=gd zAKO19RL2tDzc%iRq;iXQU|b#VPd3LP24$1P?uAx@MBypm8XPs3Mb!klW{^d&j2eb+ zvHx-X?k0Ny|N9I6(;oLY`+VxnU^kSR1UAE5C|$`)Rb8ncbI!A7PrhjjHZ^Oc z2OF^s_80>Pvj!RCVR^^ki%B(Vd2iaKW*0uY?Z>|;xr?kr`co&MqWFS#)hMuh3CJ4{ z4=keQ@St{kC^-ST!)I0_cD-8H2l>p7LStv6(#Z2M#yB41>Nnc|SR^Cp?~FU2 z<3nf@c*5`Q^on5R=)*v0i$AnEfDso*mCx+w4{d>ua9|*1i@APZ0G_+tWk#?Z)yjv@ zQqAff$CiE8s)BBDJLXh#(VKnvHIVHX5a!aW_6Qd?LYC|u>Jjv_x69)u46XM2c&xGOE&&ri1W}7&xdeXu8Lb_N-@Yd#hzId# zUcqPvJdXzcZUz3XlH-o6C#M^WfD6*}QPu^=I>~CKX2S@~D9`aAU>I>s5rmT?nh9av zCpOPg2AwDdUld`3LCK5LaWD_cT?SXp(itd+70pjkbr-C!UYb#UzK7*FRz&3;n9Kqc z;0d>?=1F$#EyT_v1;7q{jxpGA_hXo-HILTk%%cQ|V10V|Ej~|aC%M>Q>GW^mMoafB z`KQn=o($BmBEA@Ds+SlI~sP57qi?L-e7&Q|XauKwMSjr28x?sSr z>{U+mpg|vnD&6jQv+Rq@@RapXkSQ}m?=ym>VTNzkx~+)geIDc~1!BZGcnBtlz6^;o zVKnNq`{+)AQ}pV-WJXyDaD#>r>m_%D4{;b z9rDC<2sQ{#HrhW`)~WgU10HMakMqIA^I}9iPQGRQEFkZhYAx0AZCTz0bCeoVJ4$d} z0UF~}251M95oSEWspVZ?tum@zBx%TK*Pg5#Upa~)kg=EqDj~RPNzWcixSEZh#+-k% zp*RzAI*0X<_;&>~>hYLqr_Q)WJb64J;@3>NyoQ=9=@0j;7?zR3bD1#lOr6o4ZxHSb z`7)$e4|Jf9vUI9bj8*Ihq_YQ@LZ`yrK5`NU;KjJ%;TJQ6=7RP3Mbij{rr#^L9jubt zAvj>Jw3>#!y>e(843@}z`$(4k&Yl!N$4-GnXsr>4Z)46ws()F;Ik3n7fJ}@J7_7dB zuE7hK8L%0P0=+uU3-mg=d=CJZrF+qvG9B+i6FQ1 zF9fd`>HO0!25H*>xtNPfF_n$)FY0&Z<2$W!O7=AT#+KtdPp44%UQws%1ozP56Z>J&~Q6CmA{Nv__wMFso=-5)SyoqIH`Y*SI@OK?Ne$ z3_$>PVr)PzAB>8Qp0bzWvUz?yOz-Nn7x)7#)DZ~Q2VAa_Qn*W?S2`jbSIR^wD+NZHb6L;pKK9WVx|W~`evB93rFZ(NIT6eZpz)np(z!opReY->f61#Z;CbjIQrar7n@;P!WB2b*P$|2 zq7b9#PdA=I5F9cE2dRWxHvon@jEyA~IFITYpOu>ObKf*T1)xGPBhL@WH>ID8G&TUNcYfoFXfI6VASHIvr-*v15ObR0;fo2 z@c$SV54hIjj(m(^Ma_a74Sp7#XT6U)V^eufROMVYWMPJDP0fHlzYqHlHLIdQvMO0q zHOMQecy=fWb@0}{M9-VG_7@}?i|Qza3-O2@qJ|aZgA;HJObC&%u!R*xZCv%NClErc zlszWxY543pW1yLyZkNe{Pco60X@hp7N3nRM58<#!1_wlrqD6>Ela5D*2XlB2t+J>s)^QdF47OrK7#Y@!%!PsB0pN(o`3|du z=ZR{S0%gia7zVHDXcSro>2NoEL5xBySxQa&;aqwJ5&C>hJ&M&Aa#|ex59S4gnR1Vl zM_V(4(W15<~Z^mWVaCKC^)wR&E(&+=s0 zj~;HxSp5Bk0U%L@R3(?_p| zGBZY)4Dx_{XlwskrGmBDmMWwxfP1Rf0al5}_}Ux8>Ghc4@JWtCtd-eh#JVxNz8!kJBbYiSB^!h7&hX93Diw`zEDD zWL7Bj&B4Y{dXzwCc#*I`@O}6$xHRynZwd3>Q7Gayi$8}aUIA4yzgfwaXBhcF_}pT6 zXY+f%8we?DC%-p*+R6a(H*WDG93;Qz#*tR9)0m+cXvhym!aXpM1z;fTSVa9|o+@WVdq?|oRc$civZtP4L!eGVu5+$*R!dSkuo6@i6O1R4oW7;{go z1olIKlb(`QU^k>I;_o(c-@F$R7v=NU@z=#3mMv z5jliFPld1$2~wCn*PHPCFoWRo6zEf|T0MiG3(hKQUkfNa;ZLx^@Pf1P2Euy6>+uHd z{nO>bm|ybe@EG%TRr1-xEg4+4lQS!l*0c)cSrHbCGYC)$euh&g5W1}hTbmA8DNjBH z?nSE6^A5jJc*@*H3#v>OlvLtDJ zAhg-OS{^spm&@-OJ72OOh-|MtIQn>=Jbq}OseezwuYCgktFhnCfi`QzwdBeDb7Cq7 zcNEaSrG26pkBaC~H14=saB8A^ONCwB+Z$lK(rZ&CyQz`Cu)3qKV$T`3PAoAhUtwpf zHk1`{U@K9UPe_|h_BA?uJ(KD1tBQY&>sxRRL)VU?6Wy6NIA?6>h(4fO%%5rk8srX- zmHId!rBqp!<;}iad1qsSVF3md=@71q5Fk8d+if~?*yEZS((=Mr$qE(cS7?5H!C^%RCTacJPU!k4vp zv3s5eQjNirH~)L@5(wf4>&5tK!nHhYLUeP ztDcAV;3*!GvFxBI9u!%l6y9?g!@d!~{5CP%onl-hpEQ zegiyKS$JgYbts2*>Af3I!Rvf&t*Wd02o$z-q#gGZ!&<-{sNZ)K^Rq!d*sU94jO%m) z1i++9hnw8Ie8_N0XMPPN*kx7*xUPrqEq;C3JNaG+QHM~FHqBJT30M53&78;F;w^ZY1cpetOrkyVn87AEg0I38 zRx}893T{09o)em2Q+s1JkNOW-!+!ST?i|Bfj&v@3G-VjGKZ3E1FE+lQg8TVp1HSYy zX1}Vwe6Gq|k1zCX1)GjDW?S-U#_a3l(-qrrjUGO=l~1hjRAcr4 z`84)@zc{TowPA%@@~xsX{JFmvbGzWHKlsZT#_V6wi-2`Ku4MkmU;oQMfAI4&{3$=? zr__(MI=08W3;FjLbKhpJ-iQs8&{UWqfu8S}Df{UdFhNy+?rx*%15p#&ISaOXQP|+# zUJLQdW%Ux;EKkY{E^3sIuZUYA5b7msba|*r>`vxRxBHBC*62c%;n zV|C%*69D9th8cZ$G;=w+*YfsT7AsCY2mx|Ct%^9YGXxxgZSwMZj~{p3iI1%jxKfo~$KvrEH_ul{+celH6_Dd?<2v z>9fh@j@8>+JngzC;LtzC0m@$k<3cI z+7K44-VE4ZwZJg%cCG3{0}+Z+3J3Q<1_pvjsjvZz*$RshU}=VpL3rq-0K^ae(}7rT zZ2+ZwBv-mUYt6v{o!@JrfaOkVpc6`5Xb~+g6B(<^k#Hmc8JzK$&qSe5P|njUV!7!c z%DKT8qnvF*;V9=CzF1wGp3xj~RC||0^s<8}=jU6yOd`cwVv?6P9SW12{&aFCVfFU5 z5wXgdJS~F&Sbibl#d{$r!(R>xdYmZ6WAj1at*4T-~5JBN>?1V;t7 zTlrz2_=dI$#TfFmJq8qGFr2R((is1qcE&$n42tJTe<+8;Te&FSEr~6Se;*tQiq|}u zr0c*TtG8!hot@*KD*+f0P5=g>_6HOUZ=G7IjsgugFibbN#|M=T@u3+5`51i^%v#9D zd#DKoAaSDfaK)@H^`I)%9SWXuW{pl&1=w8_$Zc>k%2CI`Js4-!Fe3x()x;|JDOShS zFv#N(w6cXu&MA4G#1A9P13hw-D5Q}-;hRS3i)@1kX>@uB>4LPW8pC@TY|`jVe7Za7 z#%rl(hp(aS=zfFSNtKaro%v0(Om(a9dN7Qh(ffm+oq7@C*uqC6z}T6n2S3fc2wQEB z3V*emi8B562e%)G#EzZ9uSw!2Ztp+{WDg{!wh7OTOU%H%v~9wLacS)bqjZ~aZzR$z zqGa$d##)80I^(k#4zaw)U$0(ElFGBGydk9;PuCv_ma%R>g^j5 z4*+pE06w*=h0;t6CgQ5^Y89M$bzmth|!&-SxzK6U5QRzCUo^e&!wfEli8 zT+PHYkQfMUxBo5a+c{yqi|MjC9+@8HOC~b0#9#O##|Gl%cD{%mftMM4$&=Nr+$^x$c0)?R`tR$2DHaA!r9?<#VQdmi) z;1+}?P$l%NJz4@$d6sQp_JQesq2{ytNpU|_t9^kK~ ze^(N9NQS+LWa!;tGF=xBVidAEd^6xhX<$(h`$_(S5!w3}=a2AJ?N4Xj- z5?3N1hj9*o*jmZ(4sKIe!aY?2M?7{RgR8@%AbCrO8T)>OQP$Wm{!R_X53qnHgFXBN z$mj%EwMs@4#)pAq-T3olEUzz*CK-eXtms1qkG<$sB`@jZ#|*5BXJS=cjtzm<@WYUA zZB%X(Y@(FlpxS%)h(m;=OP&S!Cmcik!IP6h93MBB?0In>@pHFIe z%}OFj<3f(>|G7?yUIzIKERxo>e*h5Q@dJ8mRDH!^BIIp{GyuQv)|k?~G0?6}EZulM zOBblp52(@+q@i^88)HgCPCWLliKSOd=_6EWzbgF(((G+Aryz&ZQ)ZyCJmecizuU$J z6N)y(wTg@$`?cmpUrAQ!Rgtovi52^P3f2`+EmXi#>(IcBc`^JnY81^b-eJq?RI4+VfHYd5k2Iwr`KAU}0_c zMM7{GdY!))=5yBAP=)u*KH!4xa+w{7fNLp2-tpg!U`MZdf`B0r)%uQMmrleDzofiU znaDXC^M&Am*LO;-s|3unshmSt-py~sl;%m}_7`s?lXRve`Hc6&+#Jl~%YaG25 zKfr=W?S-NM!x_;~^K8AXLaoQi!cO;}lv7bgqHI*vcl&Svc7jyh8Gv@fJJmuS^sGre z>qCP5&;HN{Hs0<&4=^Lj?QSH5Z{ZMT4R~Is&1BkXDy`LN$Oi=E*u_j;E+giEQslI+ zV8V0sv{(Z!W5PvDxJD(Mz=U&{z`fjd^)YyQ9FCPF&o*-}^Og4LySj39DUR_Oj@?RTdKtDm4A00hGYq+qC6B$$L~pZjURdN?CDOFX zD9iS(gX#9+prvX@wUK|>KXwOLe@0KErmsB3=|7yMo&>%S3Fh)77$zMHb{_i(X$M@1 z$kG^y?Ay^&3L=}9oDAPlEgl5mtV92?q1&h|q?O*m! zkUH}Br2IMc62OD1CZSTmgPIjQgV+w%t?Np$2<9@m?uML6lNHe??Tq7M~up4l)7qMjmO=m)sr*vJo0vk3pwPzGdV7-GZB=eh^W0;SbdOCpSG&VdX29DO}mTunYP` za<@p2)e3&-e(q@lJ;2Appil&|@t6VC!M%vuuVGHT1-iOlD@<_Hv0pW{JtCVs`*Uyc zm7XU7?AQ>1Bf_dnTS2g=w}&L{FEbE$+6p7^sP-9oIq#P~3rGtDaJ>f)-GsbyC<0>! zKqd4Qo<#fm^C=9ay)v-bI0}_JXk|t2VNKF!Rg*pPNc6dTT%TDGsD%X>+npKM%E8^- zsit)0g7$>-bi#?PkJH=x@^bc<9mm&pd~L^9=|y|?qJ3V@uF_Z0c7|-g&WPK9oxtz^ z6aHxX8~Edm+(YG$6OTyBACRO=E>@DHY-ZXjF+0rB?YJH1iSG&h7oS0#|6fm>xij=U zYc#00{i}68ESj%O^ z3;k>|FVzNqJ$6Qe@@{15k>XT&s*7}#BKwM+BI@)EdQwtWxh2suAY#c?KuV6_NSXe86&$Ho;K)<% z;^@^P2S?R8#L-WkfTL}oTpWI;PE1ZOjRsK38ofK7Qrpdn&-MT#JkrF#C6D027%I)2 zm_o?o@96yp`*^Ddh}x^Ucu;e}qZe#|nk69MCOWELTi((Y23^rfTP7LU&0538YiPY56jpGqmTyywnz@p#Nwhm!U1vf*3z=(q2# zalSoUb@%R4TtokJ17>c9HcJB;8bOsss)(^$Rb}`b+y8A0W zB_|=i#c3Of|780E)bH|FL9Bf&!y1%h1s3TEYX*@8jFHA-UP7$oNTn)aDc}!C#L?h` zUQ@%IMlSMaa3H-xVHhlu$J&q=b(bL`nge7J8395vS^Q=kYmrzY{%hpLxX2|SJmtwE z7xRKHIzAlViZr>3dAlJpy5HQY(QGkmDWS%h=B|gkIqm9p2j(whj=ujEK-1907@1Y= zo%qoR4+AAX5^%&4P(#1{=SU-Tkjq|Ncm5kQRn?WD(nWN=5$~2aqppu9@*XNUstgoJOOfKXo#?1ph$x zm@9DJ+x3^?ze`nt4%1v!mwu(A>h8~`s`Io3I$w8HohXDjePhg#!~UB28?rfbB|e{Q zj?XQcCu8t=f> z-eD?l4)a!mrv}buAOx`V`)z8O7<27BUr%uezzr9Wsm^;;_!GbFs8XR#ZX)xUj8qAH-AP)aiuZ6zPqb|Vm4F3a} z!H$Z53&@wyeR@^^&f-Kvm>9f~8Ah+%^V_m0e^4so_GIJ>xH$)wG;S>0mkMPa(xXkn z{QrN_{$#c+6GibemOzVj> z1ahEyL1i&)un>m8zauD3&n4HP9Z^}3%c>{XsO5d)ex*YThyxjxOoGk1BZkVlGTad9 zJ@RM~v{e2e#6h`1)Q%JBB8v*o+23;qBp9aAEtxpb}?Eot2^|ETtF1P_%dkT}J>3l-VhIQ9OeTlTOp6BaNQym4kT| z8G0#u6DZz*PK^R9^W>A}L6Ft?z^1b!_u8iu`WDWgx|bCv_|!QR@^HMW)!by)_2L_; zN^#sH0j+M|1jAa7j+q1$$Q2JQSEE*5m@ZfiE&~@}6Z*)}YOab-ikZT7Vmz6IGsf1~ z{h2ZkP(fY>0K$N0mwEvBNYv(PqNMnLFFE|$20tDVk;(?2BD8S2b-5XW((lV%uhJLk z22h<7ytR)3d!M}ji1Oz_LQc*O%ehbkAS%G0Jj}+H8;4UnEI%Q`pB_J3m{|z;R8~_ zM5GFnIC}-5n-q?a4fBNi6{2_+#KTzES9$}d5=>(FjOD%gZlyQCd0MGS_0Ss#3qsXk z6{E7FNhczKaWa@u^*2#&sI?r2gc_9<@~Ue^Sd_<; zH`7Z;2k-@?MZj&FSU6A4V+~=k4`hRKrJEcX(iv3Gxh1Xb4Ey+%YDOUKK~Zu=grIW$ z!>HWLe3o~~78n7!gM3ESCrk*Qf1**fmQPR#C1&t89Mw1prAp!39puA2DtLaXQCSAg zWFTE#nU~+rkvKkSS8FZAH!Z}wq5`mn(HSiBJLqRJe-Tt>@v`#U`g(Y@V%o~iqRUp{ zC-N%J_e5}ySQ`*H7k`jB`_GB^1Fs5{u!t=0_nUiqv{&Ez1)k-TZ2eSE=TYG?d-!xd zS>8G~QxEr(T4Tk&H@YRC6a0tNkbj<{Gz&Vl^0I^%)a_xe%*& z_=G(vVpIfYWk3jDLXxp)m~cF_SR%*IXx1&ccoG{hu?1X254zkryhx(Ab)+!>E#j9t zHVL*Bf*??`0q=@ACSsgJaB8vS!-aehkWogIaCt|57U3jWU zjp|M$;&co_Wx9(IoZ_)k<;DI4xhFC`3uhMbG}9M1s2RVoG(|5BQ0EVfX7w35rLO{myR4(Grm(XOv19pIW7o_B)`VCqbEF zd@9irRHXC(I zuH+QPNe<@&GAOP2u9@WALuu3;z>Q3Vg+!(9bG8Fuy&9(gD{10pRiTeFP0^?c9WWXye$56V^=p$x9xU?6Av zuGw>CAO-JS9Yt-BK;(g!%l=F3IG1NyT~cV`8Y9=JArCqqgP%Uc_SLGMUAo$k^5l(&x@>XQ03cb(R5$A+L;}Z(WBm@TWAY)OUD33x{c?e}W zT;?TGmabTh25Z35jXm8Cic0~9H;QeFTJ>~7++uElyJ8B2Q_y<{J>jonU%1`{oQ{jl zy&@J@EqC-boG%c?4i0q>e+YR51L20<7-=~Oj?am!rKN(=wj9ZERfFv#NxOc?AEg>@ zhpa;kRW!CA{}GB}JA>R3^ur@$_~4Eb z>W5-RSuhlzrAnHRm!1A3R1wN zdRH?PB-act3eUxjsoXZGDv23T%Lx*!Pao&^N)L#y+Bu~(c0eTqDiexMZ0MAQQW){! zcIPM5P>b0Y4P5%uHu9s@_2~7K&jQHjQYOe)N=t**+%z#!mFvwh9SfSvLcblPTx?$| z`*HY!@tPZpW%8Av7_!SI6d6zu@`bVT$T6yzq3w z5JTjHG=EKeH7yh*TRT94SzMm((nfgN%OAzl8L4EkeE5qH;PKtk37510kgMSAh zV6vNtkx9Lf#QCSWIYhG2eP9Pbh7GYQ3I1Fq*R4U$u z8%cB?JU*H{-gF>j>R}**41|vX5>1VQr~}2bgoe2gmY613t!qqwlPc)> zmOn72Wd}!f*Y6}XZ5w_fw%t2T;YNXIuh|LQd;tX~CP0FGOLTGEdTq6L#@E9<@R^rh zOpx*fBz0_@c4lRA)WS@TVgmyc6FV%ia-c&u$FNHQpa}iKP(KOgXArm5yEVyt=|Z5D z59#{0C%Q!7a9pS}SB%JCrq z|K}_GgA*r#Cox_*L{{-V1h)v#I{0_i1;Hs=`hWSzmHuat&yjwK;wvH=HRX!QRnwBJ zI$GZCi#(V*OTj@Dc~`nE?D#T)!ldh{IfKy}(O_2Cu#M82?p^(nNfD(t`S09v1NbOjYg z0)FLsuQ+|7@sSDGj(5;nz@F!6j6RLMp32GhX9t@SI|UjMJy9J2|Mx6~ISjm_c`zKZ z+8A9riq1)FYu2sO&4r~JrcW_0M$q<0OXuB^}UK0Y%U z3!Uj2MA>l$k?X&ESl^$fRVilyvcAmLqb_3d7yZOSlrlu;0NdUK}WUvcFAtqT8&og7g~$n;@cCUSuY6Wu7Wb^R+Ln=28Z zZ!(VG{443(buE7s$3G3Sf#cV!4@>a_`gUj&$MMgGLElr5QBRQnkI)zUXEwVAZ!-F> zn|?U-b*I8_!Ze8^#s7f5QYq=XM6^hZ<=Fy#XMTJL^u01J(*b$qtOI1D{3fIC-hD#f z2!G<}`@Q<`DSklT(^BK;`}S8Y()V{texao~$YH$Tl?}89IK1{(@~cK@;=M?#v=82Q z2MJ!4>8Q2tw2uEj=H3Lp%Iezt4@e{^;Y1}Gt>{sM2B*ebsEHa)7@uGwaZc50+M-2^ zikd*2An_!?F&vFb9a^uYwY7NbtyZlfDuN*342}p|r>f5}4mby`iT?tHQBKwI;9L-T+X0wAfOt~R&M^Fy_#i*eB zkMQCcS-vwPkfSRs0jAa?3d&2_4$4G{-emcM7C6g`2U;cjkqLwKLlu;(PXARHGtHv& zye_37Z~WRY9M_M-@V-t%UhQ5q@dJh*@9!`inBsHZ1;c*|C8&q|9Ov*0RGRq$zx>G_ zb&cGRz>A2g3)AQHSZ&M*cxH6jZM{U8)uJ9wv1mIxozXHOb$C+Br&Fmk!mbam8?|$WPtNzMdr}Y;} zSREW@gO|^IfQ`80cevqkBKTzlyp-Ou;0D=^UF>0SPgTrQ3vepEl&~c7uRB3GAA#|s z1fK-Qq_l2WGFkVLW7tMl+Z`yd=l|mJ)ZA$>X_v^ox}=agm}R`};V@qXO`re?p8avJ z?BQOQ5Vz#%I! zKbU7=>H@DqF;fK>R5crcfYcchbQ-hH#!9mqc2TfJmCCi9BG`JE*X?8?}Xb5=9o99+Mldp%A?zL*MVHSmE8 z3sk+Ic*s$y&P!-DN|5;*6*z3j|H+J#!npuW=^H@VfsFQs4vdw}|GT80Z1CL&rus>o zmvc(v&xGByG$7mio0ET+YUAE6CdI4bt2&+%6jQV#tXY9X{*R9fm@5oggL*)fLI=eK zLUGjJ;WELhb!CVZvZW=E2DQuupo2tLq0PH5R{w(8!xS$?=7s)V9dxQM7pO)9cxjDj z0fVhGnwV*En<|>Twb+>fURxkG%_}5LjN5ac|6DpOe}(;o5wqYBoxW<*h|;&F!X4#% zR!MhU-~tZw??|Lc%8it3M^xtQ&u%l4qth3MZ^`=_s9F=bYX?aWL#N#64F_`N<;BY0 zxku#ssk*B=c!&$!qwC02on*@O-@M6rg>SezUz(?y<^_Oxn_I#mwUj>XH|rk`3^`zaTR!exz9l8Z2xDs(NUy$vD??_G#DCGG|Y>N_xcy zjp7}2BS#d9H>QD)>=`4353qI21Hy;q7pR-}+F>twxB7m$8p225_?9Xap9EH(wKo&= zEwxS{Ga~!LHkuY!uFL&Ig+i89l zw=QC+Z`ObrIGil3>>1}Md;-E!D`R{rkcjd4AAC=GWA5!NL!bl3wg2O4oNh5>DC>b3fv=Y<|Ep$mnJcfW; z>Rt=hNKu2ixw#A+hRY;{a;K6Lx$#ZI>7bA+*A=zToh`MKwo7EMw$~yUugftoytcq1 zOS=7W_c=XYE9%rqjWyW^E@~wjO@T(!miw=6fJOF`r{Ml&^l$nv`|@AfJo;50C5|5% zB0j|jNRh$6EYMGM4js*qxhP9fNPH%*+dr|+#|IY@mmtkJr{hikM8N2X0YXOmk=a)Z z>WuYg!Y{oFkLyjxFONZIIsXR{qMmrQ0YUcFox*E4Byfn6p#!lb$}-^H623qN!Rw|mYt7@K;a6b8W@HHG5`oh;^ax1nZ(<#}# z-<*$>?1CZ!#dlgW0$+EOpntrTWx_gD2sZf`B#2;H2%x&B1~z1H8=Iu zTuj!5BQ#_PRe&)E1Vh1^ZqFXaXS&YwKPw1UI@U9*OV^dp&-M--OL~^c{p16ckyG_Z zstik11x>7ThlYU`3htQA&1fpHT@2h?^((0$WUnfpNmV&DRpnk`mARbJAZbe$oBPC( zSJYalYirYL?Z+*X%&m1`}3UuM`e}~ghG$XOW z3lj%Q#V^$_9_a%8Hm?xA$bWwkKDsT%N8R|f{T7M<1AQ??c&QU!>O`PvHd(ug{%B8A zW|tzZE4dNb`n6=Wd-1{MAvB6~5Hk#*h>qN-cSd}FPvSnR&-zj$c+s+!H*TxNm3yW1 z#X8kpntM%BibaO*kPR&x*!>01ICRG4L8^-j^ox+xVZEksf_&~^E96*1hJormFn;1= z@&H*tS9NFTLE#ZI0)TUJBVUTD04@)(ZIIV?toWwf!wZg;J+V;k;dn1zLuXW3+>6G_ z?zN{T7qlS*DBu&h|J{6GR`Pi1hD0NM!`lT2e?QU#y(mukm*Zp8c0$&uH70 zf08fNChhRgokDfE6TZ>)AMv~``v!hen#b^0;xaizfS`(Bq^kHmRp^W~q)!?b;OQ1% zCYdnodJwc`S=dSLtk9}|;vR?EAakx8wQc#O21M@u0;2OZ&Fj5|9>5Jb1cQShj)ngGFYmccZ{nX@r|p(v)q&&bhd@$r2gq*vAU>8 ziLEB}B2{R*VAMqdQj6`E*EVeCd&1|a^YsJXYQ!eckqqf}8(eHJP!eUc?!rEoUP4~N z`(nvhX*ANhMpr}+)Q76JffY@S#}Z<*RSp`KoTt~N`7gdJ-rbj*kaq)Kg@+w;&I|NZ zDo?01zs3svRmcIJI>7@^W#9B@FnVcc0~OKIR`C$C5$|?<5%6vxbjH5rPLI~WzT4j> z_N|0RjeW}<`+o5!Jsl>5(G2VhPbTs=&P3gdSCZA499-w0NrHel_$9}|TJ+@~YtPnn z{8@q}h#^w;{C6Bm^ZdPcNax^JJB0E4r};_lq1tJ>RI`o@toS=!@X$0w#6WQI-ZI+vNBr82EQ3BOeij2wG*inGqoEh>7z8}) zWC()1lHM@*I|@{un;a+%S5K;;<&2otNC6#sr~X>DTT=m~!y-t5-I|itOn3Q2_NPk% zF-lsLSI4rznef>MfeBoKBqjNR3-~xy4W=Oh`tSA+)Hga>N8bhvs~w?GP2ko3NrKjDl-CdFL@VD zQ_iWn{L-iC#@K)(d-9`$pW4L=z+WQx0Xv-?{TY9C92GndDXvek0)Ro=b@a5re>mcL znl3ZU;0`nYj<&LdkZJ02V;WI3?1bgn=3|@4wH3#y%2Y;2_hF_f{5{2TyP5tyBGFkHfA^W2CE(wDFnwdoMfuB3M)9yXX&m zSYytfY(;APUA%@iw%eCq?X>ir4S4@&$(`v|%O(B@-(mV6p<2fK&kvrF3exSm*S;#>N#6gv1Jiw{ z8{d-elzkIFNw*#hIxpZlwx#w{qTp@HP39Vg6NZ8p=Q~XtcDJ6dG9< zX|3iSu2$tF`O8*8|G`_Q|8KUSf3da~29Cb75L2Au>^5ZGyx=$n!lOk)g{&)dSQwT>dIe=m3yrNjy@%pIYbUk#v*93xd6^mnKqwKB4_5j4g)5+cG0xA7@g$vX&ZoQ30 zkc4TdMOL9C8c|Xfj;Ql*eA_9c$9WpHr!E5E&kA1rI@DAF&iu373)>VenDVlAy6fK( zcKr>}kV;Zm@{8!HrY&R_E!~v)t!cnsx;oN2OoWQBi?nWQ6dS|$N26}d1C{@h$getH z=q8X8`_JC!{$VoE;_2ufbi?;R_dl=i6W!$?7j&<*w}x(1jG_CF=YLOhPw_{*wFPwN z1uuG``>QvtgxiBIwU*#>R4>S}z((>F-Gm$y%xmj#m6kFvcgUA)+ZbtiQLK>2-u1YE zLu+pCjk15e*9Xd8`n9mZlxP^q>&cyew-3f-aAzWSO`~wa)~SiycfLMAmtxFI&if8b zMblaEUvD^M-PMx?-*zwTbn;+szwD?d#W$N9Cg@}a_WAs}f$gFEB?s&j|`4K?Uj;ZP6gT&avg)aVnlg4PxAFNYV@jF~% zL?ZYFWpC&?qx5+v>N{3KL|PSgdjQ7Fnp;(PC@gu_Q=0ffX+C^Y$dah6)hd|Ct$a=V zich#8^%6$3S{WywwW_?h9}^?+vBlNM*oK9R5fimD=TXHCC`O`)(hr4O5A+M8u8Lb@zO^B z1-YO)KtueJFvg-v|H11vcSY_eOLBM?n*Qdz*<+_irOa9h`;vu8AzdcC-T0MNe9-5UR zIl^U9_#eNjcWaVAa#b)NxGcFih`b3=`qvX#{%#M$yyL>CbPxaTSH_YV@il~@kvP(z zNNhAO1C>WI-O$JtcF^Z@b5AHds)Mac_%3+cE;EKDfVh~lX`0r_@d#m)jyk6z1B*v{8Y7cPwq#h^R}A$VR@RPQo{y zbW%Wz@JYlx%5j^g+jha zu7&La9!V}&q&Kk`W^4?Z5e=WgkJBfk-|5d(Mrp`of$GxSMfbMq)gnGmjW{`KA9EmC zrNad%ZcXH7-}r(-c$0p3$rmyMsW1E-fasX*f_@q8M`phzb<;;ag(heIXsXEb;6m-x zvx8)`pN9EZ7-_C$5&5l2^{Be?N68Q(8CB`%qh%|{| zWtCAL1beavF^xR`UF#C&64@u2H>$p{)#E1z7!J~U<8QkNHq?^tO#X|^ zp6cii{uHW(2a8oNEjrmjEG0Yl&vtDWNS>fIT1gvprTT3`(6i9qEv}HUuBE-UtOxG; z9iY>`zm@`H!EY)u7FA0k;a~n7u*n~;Nn?{>JmqyOF+h_NJD@FK0>hJ2V$>ximS?X_ z2Ndyy%5#TI7JryhGbc>_jcI*lx5_H=FMi3Xtn@H?x&MpcDLWXJ4vn;Gxuj4<*MU1( z%5A`2HR2*yZSN=kW%oge8KOi_dBglc1OF=QIJW`dCtL_7ivzyjIENocjDBYA&nq#-kVxZj9SnoFKwh-&%`4` zU7mmYB$sedhtSLGU0`45fBqaI92xt>VmLz=2#-adly%Ks3|GA=)0-Ngn%v!Mdi;l+Kzs{cSN(=_eb)1@*YKp~t`cBCfjhc76%Wkm4+G~DFRojrN zwv*V(e%P-29L?Er!Li?ACWZJ}e4AI57(NDwtKySE1x7}B2HZhR?Y3L&?{igV;#W$r zgNeTIa8QtHj}RC}%C^;yCb`s^0{?9Bm!xdwL1@e)Vy|145(&zmFR{efC*H|XkfAdb=_ zy!iTHUYM9g5S@7QIVYE|q2#i^bpr?$b@ZWg}&l`w)n*L3+ z6iyQihgWc}?#=AXM48x&jEvmxo zXrU^D@TVo^*yM zp_Vub`9=0SudrCZaH(OYd4&*#*3SOVZyX=^^=)a^B5*27Ur?VBw^R&`r0%a<0-g&c z!-HGMe#qXD&BL8J?@m+~Q}|~yTQ3)uBU~^c+hey)#ci~`@0Yi*&CC-dVqw{{WZ8jv zf%SA)a;jSaiDk8K-WGPZO= zNy8AYZB{v{E#+*i0k*^~P9HcWvKU8)auAQOK5?y*YP6B*%V}o3@GGUgnsr(5n4kWg%Lz)HDX-`a)YZ*eTeFDr(Sad z4}^hT^=|H*uy-kDvt9-Tf|k8FUgNj9YM_^%$T2cqViuW$O05}L7Mc;z_V!4(mQMXO{pp>;xEV}rD4)9Xc75j+IKFMISs)#gaykx?OWs$vCUP`C%L0v*( z@+B0%sf=|Dh|*LB2Yj#%C0{6xvOvG_{KxntR(5)mbkhZ5DhEyWpLpK>V4yp8O&s0D zrlki+$7oC(>d9arY^t)iiadoXWIRA-j(_ftv~fgGeb9Wzok;o-`YL$g&(P%gTu{A7 zP}a{crX2n=_jX(=M1KUxvyy|v-Wgo6*q*<^n3q&>HSEu|JrDyvL&h5Iw9x=+*O7UF zqHpP2(U-2ZYPw8`2| z=GI@eQs2l;LzE!5Nu=D2K-7}k5}U|?W$T73{ZsP$?EIFX1p9TqeE>ji0TGGpt5!*Y z1Pnk}Muw9A!e~gJOi;Sc5sQ-}v1Dt};?HrF4h2YYmUav6#%1O~hd*_Dp-yTSEabV! zXQcHoRh-Db^Bzg2bN(7;i7jL}P^1m0)%B6qo%ETs?RH$Ww;fYb>JgUz*7gN1FZW8v zmq%JZw!0t@8ukAJ6d7kQ)QpT{y2#Kd1B+RvPAAt zymP}9)QGT{oTAnf+4}~C{9y+f-|rlLm}HwkP#A&}TFt=Y@sA14zsSVSU%xc$Tyyu< zu`@@X2|F{nXm9gMN{<0M7wBnQh@D^9-TxAHG8iD_*qi&5K!3%bab=JCA~kO9?az|` zF};FV61Mz60?G##a{lk7(r1cTjyqBT@9eAcrDb>>Talyn+%t8b$li~)et*&nI^Ob6 zrJ;`7!|H?e0ffYIQ9mEIC~V;6)Vl>43cxc|F+MCkDDvy29UrFo*OrfRtc+HV^EGXH z$Hg~lWnyytKg-<1)X2ANPcVOcEDRxTt_?;m>$LFpN%=K-oFcYIS9w#{59>eVVf-6C z+|^553jJ0^VrwWkmZ1F}T@_88KWuniX9Larv4{3%MMh-K?W#9E5`m&^TCGE{^87Ix z3vd^8FlbQqkXW8a7{YXLu{L#>r96MyOFfFzUn(KR-@!{rE2vP13Gbw!pXuyb|KmfJ zGPe*WQBG0xq8$2=N<-7dD#){7dSF`mTdk~6N}pS^^`LQ+eVnQQIHstAjAE>Fi)*PD z!-5>9!Q<*=BKzK7E9`@@_{*%`j{KijOXuYXGxS7ZpOF`fvkub}utV5~`IXZUF9JVY z&iaQ`s6~8sKTc2kfFsDnr)M?(oE6T)f1s~EJnDCnaA?EQPXB2x+x`3hh%j7hQC*me z{!E2+2%f<|azPWPK*@SeMcU3-f)(SALn3&Q7fp`bcf=mXI&Z;EAxm9$nBJ9z?;4U` zVoX181bNnLy|31L%f3F!+iQ*2Z=8_ ziIQDp#DAxs4EWLR__P0yr?fSNV>ZyOQDr>0-(%9C`ThCf{NouyJexCQzqLZLJXP|d zFm$49Ef4%7mLtBt|La@%xsDby+dGu@sB$Vk73iV`84`qhCnJ5`({5vo9BRy4?)UpP zI8}x9fa6r(J-zCiMtvo!55G`GGqxChnln2-8So^SOHCd=II8g9clf8X)IRqUwxybmBrCs z+a$1ZGOMc@3MS6c`$bP3cgk-U{BY4&9mV+7`(FGX-m-6wf^~QIMy&S|yYEnS_M-MYx_1Tfd=NIf8+~&C3U4q;G?v}NAQ=vqR{YR{>hDRAuMF&tz$09u_Zx}?ad+L6n z?&}(U&;4$?zft!KX6&Y)rur-Gt|7+TAMnIb zislA10+1LXOB%=~vR}SBQ0~uMoTl6nK-$aw)6$f3r==dNuc|JRxZ_;}e5~xp z_VhqW3T=2rf!eO2wgao2zONGiCb%UKuRJrtf5Q@|?^lJBl1%8tf@e26gtQ@yI_$R` z1X-VlItN%?%JZ++03?z9$U-$HeE|}|3x+lTrA}-UwA_~6wMeQmcOyS3P^qUUjQ$z7 zK(>hxFilU+2jQmh*oSO5!&Q{JP@qaUKznaQ;J}9 z5bV;4j$qS-zDA)f@IJbyWQzTFAL>Cc@Ll7t37%dr^wTftG;15a)D>`vSfn(ISUYMn zOxl1nfj5(plkZyfU%eR;%;_dU5BUkshswnNx>*7KKc4>m@qf{GIMHn zaPz81dg4DiZHxHNwpV@P{~Pan;Qy=#`@(-s@bo+I&l#Y?|FwVmKKMWFw_Cygbe-3S z#7iT?`%(W$u`J|-+>XsLOcwr^18g#Y!YUWXqgqr-dfe~)4bDVg=K)4$zoQB>#|w$< zLv3;z?ovPi^`GV6cbKDIFJrAGfUPD+rZjBEA-nURL6G{{`j9`M<4}E;$bD~fijEQu zBGk3#iH=4rnA$5ysfUD78x_Xy*j5K&#y64RlN(9gU_Bc(bNz63COTr< z=B_3lTt22MQQnWEFyE~F>Xpjars%j`pChVX6@R?K)}mHC|Ms}O){kv{zCNE?qLJ8q z%u)H=%LaHT>3$u*N0=|>7mDY{spIf-9?;`6G?3p6==X>!N_Fh##e@C zbu?LIb9-uDId-te688)G5uM)F>ta*;)igUOlCZ!WdxkwRTw}Na11p+44g7I{uKgoB zy{}$jZvugz2Ke)1nReU3i){w*XXx$NxnoCqgpurlqM9qYKgjLq0zcM^J&7)=15CGM zxenZQ>epRk0p6XdD!wi^;2BGxj>|58e0Wy!5)Binb;hyX!BiP=Fp%SB5~;HwN}c}N z3tgBvDqV=wv=lb+xI6wOipI3db^Mv+moNgSm@kgbZXnHlt=A5`6&nlmaV&`wDy=fPvky&mG%?EKzOmG$QfAEx1`l&901-! z9xl`fI#UN7_5i3;x4kxWP&{|LziFIw-8l$xr1cPeAJ5)=7ek{%>_caypjGw`_Tf41 z!_OsX@!V{l`9(cGTuA9yS%v%Xe)r+cs&UUAAKqyn7Pt>xbU*i2eYkUv569bwAD?Y7 zmbn@a(}%e|KCHG6SGo_g+=mrBL!W zx-I*KU%Cy8sptiZXbOR_ZXOY|EdR@JZj$^TSNaSqoqgu5R{Fm739fCNpNxqFqLW$v zqVCdzU1?3Ufbk!?($l(2M|zjOq`UMpQw%}NsFc!g{=xcPdRtn*4^?}eqk8oFdT^y4yes)nlx?dA z7wf?d?m=r%$C-LI&ONILo*k=apK0irDEs!mU0Y>(cAtATBKU5Eo?Yyoy%T(wuV+WN zXFCMn_0zL1^Q_CB<~x6*rq3Vafj|B_t}fuJr+vC#q{)y+i6Y9?;TgHs7-g5g2D{1D zU*=w$Yp>lwWT4wFD)CB>F0Vi0kjKeHbbHp6ry)AF6!l7di81_!Y-)_Q=VE1mqcOB& zodyWRm`$bl+4jZ;@&ZTgbo?P`n`C}PUp#)P<-TEdil1erlF8YQB8?!6d zu6}4+R;V!xytV^fK-J%KKQ>qQNcZI|ufrQKulsa7?bKfCZ+HEQ*G>X=QQ7t||IoE_ zlprlqJ4J0-blrdVE2rbk-?1)&Vl%KRs`!t8>%Q99{XegP*M2JyiUh*_0^#md<6LC4 zADO+M1hWtNwaH+ZfIuIT`i~}6>;-5o5=B~;i|RVUuT8_ki|Fmq1(BB7!Fv(;=%}*? z)1qGK@kRCHRj&RB%23_${9j(|m5wP6HYiFbwg@erkp;=~PhS%fn92W+7gAAM_cppn zZ!?K}qe$C>89MLp^BGg;?}KEBq12EU>met8HP+zLJ|S@?V6GXr1X zQMjDOO!q|vY4|DvSK#t^$T=qZo%lNV*&g_kP#8Ar!RE&Mdf}m?FMO@;{hi^VOrO^$N-A_${iC%8Uzw?E%Bg2`5c*9^knG|HHGKk6)zLVHZ`#C*>jqnaqoAE;Q02 zpzyRlUK|WW$DgHvC=)Ph2UV_pFyA~w?#fKnQ6B7r2?W=u2CuDoslj?O!_x=syV1dh znEx875vk?nSX6~&JCE=0;K%p|>!)a>MmINFT~i6n#B`!=;^YF&jKp8|xBZI-8LxNz zRq&MiU;P){b1B>d%$E)fV7~Uu-Y_3zuy7_hrMx%+>MDAj$esXDZXLE&w~*>O-uC;o zQR{&{^rwn~g)NRxdeGlil4iySu~VArq4}PEvc| z-;S<~t!R?Z!l+(V+y5A<0C7V_QsiLnbK01;ZBa z40DMD?YlN2afqS+1>OOuoTkR@NW&DX1uBAuZPCAMOmJ#f;)p#=nycFSSG7&dt15jq zGUp0PC^6boy4|$O!~kIJg(KO%H&|sL9Dv=+6x`0h(G{l(M+bG|D1gqYGVul1enRd) zoRN;cD!Y9M`lEfN|7_+4F$w^e=51mbQk7&e{`LBmO?PBqa{}XxYg{AK&PxrD8LLE0= z=_yYq{bZ~1w2tZbZh6|Rb1QiIc2D8ye;`l(XFt-QK4cIlLV5q!Md&~Oo`#m5B6L*k z_Yt9qn|h1TZJIt$iID&0Rz&E@J-)99y%}U`ndjn^?f;Sp-EeOj7J7B(CXp{1G& zPZy!CFSf!OZw=crYnTYFy@KkV>LEfI@-zMH%<;2g0mUTKn3gLtWs}H$&^S7qNcM^khEZy+~Ce zf4jBAvqm!&uuEm>>ICc>LYY&hTYUCiw*RrO(#5B71QY3b;YkYH5=|M(sR9vI-fMgPq7vns|x@OJV z&X(NUN*74TiUXd2tE}Y70NUJ@wJs~`vZ1_roi~F$2fyt{#;DKR%Rg9uM(_tl^!EyWcjZ^OAvbD>U9Q&U zHg>s8AJ%qXen|FVyZ`b`B>!5I{0w=I%sv{CMCQvSZ!UjAi-7Bt(S1Cy2+$g(#N5of zkos+ux&=jWTV@tD%_Q5cWj8*mY8zirwaxfwWo+p-m9b6)aS3>~{xr>$%wEDRA4RKK zB{N91wfxAQFpKai`d#p7bFpT+CRfBdCq-Hn1#yza7o+)N<=B$0^LetlQe}p_C!34G={Zj9c{Z*3Ik2ZS-&E0CvebD>?9?0$DFX z*2|YS&D=h#K0npo)l^JpO1ci{xTebZnRWzw3UGP*=M@F`6sN_o9O^Iv` zBP&^264Tk+^VNTh=i|d|0{c1I)`?RdJs- z@*-CpP8+H+_EyB$xJAVhQ@X^#J5`oGec=j7mJYnwta8ksC z#o>LCok9A364&~@B&sl7PG#5Xq=?fFvj53`Rz2e1`YMYFOdBLWyrYxLG%aOLzn zCip!(`27*TFrHo&bzcq(-sT6tx%@85leqC+R`9SBzX?83(GR)Q?>oWoYwnf*qTR1i zsrB|~jsIxyyV!nx|L*Qj?hju5PLC4VjqeAlJ(2zN69>R>I79w6w|<4DJ@;ZX?Tz8) zHw;yJ=-bBuHB;Z3d1-2tp0qpz3r`1jriS1<>DZgt2b_xXH1o!Q>T&E6xnts@477(a1asQ!O${Ck66Ed1l_=HMV+UHq9`__Eb7&0t%%hX zGc zBSy51*Kf6!{3UMITgy+s>;gTA{hbFcg`ugl>7s$=40Nnj2kGT$8Xi}H1Gz&_rre=r zUcXIVd@!1GrMd+I6kfeyn7k7URH`t2qi_g=3)CUAb!em+#Fi{RVv&%{T~XZ&tx$yF zL4J_#6(TIGk3FX2pZJr>U_|`=oB3_`$Ik$9Yf)R7{P8``t1|pbdNBtv!X^Z*Ck=b+2KUvX~9v=$=L)zmy2pF;2 zWudr*RrZl_PipO)#&8u*s`^s}!OLhR5z53DI0Du2Co0#zSxsi=Rm-^Lvs{?*H(X+f zY6n-xU#ML6R)3s>>d3e!CM5>%RZVKI*448hADhbesM4X;Z8ZherBBSgk^;~`2+D-ezps;$x6Jp{VzwuqE%f7K3Hl(PpXH6t;!&8C_YX?tC9Jph3;@m(rJ&mGDp2<7I zVmj8Cra@A`oH-`j(OSn_mGQ@u+wd`dk-v^qNn9&`4ZogFaQno6EWCWhU(BVsRQ_G5 ztJ}D0_uHqTtI6q0GxwSHD>7R+h7npTqZnt;Z%O8JV$nE9x)OckA>;VTDJGLN;UgFrI zri)>_pBZ-5Bg%HO9e6Ad!|lGG7;cX&|L%Jn!xE`Yb>QOwn%Fk=!VvD2Dk zqSkM0aG3Mb1c-xRBeQ=-dy)Ho(y!^8gCecjYMfAylAgUTwo`h@K{iXF3`Ln{7x6{Y zkq0zv*EDN;9I>agM~T(bpBHHI@%@NdR1z8H1y{#JT0E|rX31;&5m#gBtiY^@b^e?k z!t_Rl5XAg0QcG}3X64`0+?A^aed6`|q`LIQ z8TD21KNc?FrA*Y6qZ0#m_oT2PPL5Pgp8q@x8KknC_(pu(sENqC?8YHJ#1;`5vy!zT zV&tH)jg{Lps;bR3V@Jzr!w31W;-5A8O=R!>T4=#1%kk^B;8Ss5x(3LCPcAGnpHI+O zDY!|s$ST(*M16z_ZGfSs9xSPhj#*J*?hW={1I6Z;WHn2vK5uwEkj zx(%-RVAu=`h^H~E^1!FlyhhBl91Nfd9_v8mpg53WKpbBfSwwch(b2?wJF8=Z+!^-z znd2LWhudC>u@VE=H)lYhhFp#X{FCIKQ2AYA60|YQ7bHNyRz44#E|r8IO;t^o4&iE7 zyHbQYqUuYJFNj>FD4&uqr5Zi}6N17jq)W&uAV=;4pW9Zo9m95OC*@Tqe&R+-)yP?8 zqN1M{AD=U3E}MO|jR6k~ZAYwe=JU_5$_6>j=(SnJOH+_`Jsw6QVsC<>`L4}=Omrv} zN}Ee0M(*S#ro#h4(n4EfUKO>JZk{nSJc+vsScN~Z2OUDeRIC-dljr}KkdpwAbPMm+ zy5%c`i62Vqc=j+k-fU0i>axs^K&>~gc!Q$kceq#nIHub>-c0Apg{nG{eVLtFF5;l# zO*7aWlei@6pV7}n1i_-LHS%et0{OJgCih1^)zd}P$J|)qPpEXi^h!0x3rBkzvutOT zT77}zhEL_jK%R{!I!o29eXKjica9~z_-3{>DEtYYufo^R|BDV9* z^0nkK7f*zkDfKQMOpmlsp{^PuEnje@(b-1MFH4>YM8pmhtUh_=gdtf?Gy5IWux*n} zbBPx}qG#v*ch|e{^~vHH$+JydWKu&$yx~zr1iMyZ?>p{axotFgAgwlia{${hF~_;G z-vJ&$dY1ou%$=%|6Oufg8*O5@)_;B8*TL0`TrJ`yq*&{(PCZ_d{`ha)wEMsP1uoM| zj82@()a@_XejNXx4*bU{-SgE*bYt^3O;jD3_XE8J-{`_4y|(elizZOp#v{VZItH#B zFc53Ix++mQpqkO|Da0_)H_N8Kr_X9w(UbR5$SRgug`i97f*{CeY%`;nsZ+rcI0Zp$ zC|@HLnObT!t>gO09Od#^ir&t;pcYSJTU$9|byfV)%CFW{TAJSKiHVT|z4*v9hh4T` zdf)$Sh;z!KR=L*?uUIZTKFXYjg-1Y{rhGmplaqfenY0YD+8~3h4hNkhEdjLFe;3c6 zj2Es!jdB&0tIae6QSH)~XXN8+qikz(=I)+0RgIqLdLe_k&3$IjpsqyyxBexB^w1Lq zl!6Y=j}ky+!wnRHyg1?D&W;=Wp9+u<{cTC5B$~kDJ^u$>@(Wu0jaP~Re)BUJARFyr z4A6uArf@UY9I*MFKM}rSnZYCM$uE%TocyRn{!F&z0c8!9XRT_w8?0fDEx|UcJyv#z zL5OISm$!SX%00d1x6*#07=)fmUt_j8MPs@DhbBOO(Ww%RCKB0of7g!evIpb0*W!gY z>VW*{%mGjj_=E9JRQy|@e2W5sTI4lfoTqJ=B3D0RP*mhNXetWy%lhY$U^CKc+3Bk) zqI&49swmNKtZa&2HvG(%d2%T4s%EKr{fm`V+p8b*Y^gn=SRy^NgyA*Nr8*aEP=JIMizlxhEH&<{IB+Z63_|KfdvyAbN z$OHd*wUPVEkqKHwXZ2jq$NM_obLwQD@AGi|_nCFLmU-6ir)$|*s%>hl%1Ynbhbn41 zzF_cHAWO>!JgBzjD0D!o(9t~$P3ri94-Vp>p;%{e!y{qQV_eaoqKOXf9`yYfgrT46 zL|+1A`os5AoX}}HBS;|iB!2iEUgq@+LbJdyJFxnT+AcsTns$~qV9^kTpWwWLt~DxxN(#bS zMUE#RaIwCukspbu?q2Bs&_LB^u-5_sN5OL4EDUa7z;M(MV%LA15ayQf@tDeG>>uxM zN02JSN4fe?D|qNZF#Sb8f`t**!)ba88Unl(`B$DB!ljiVTVMY0(I^+r>(TjQaX0;9 z15BoFjnk~lO+hcgOE~bF3Tk32YL@$NpF%J9$W;El<-romGxUSMo8?>n8}#>!X8xa1 z*|2Ip0J97sn|O>N@^@l{~e>4xyJ_;W)a9oLWZ&qv6a;3zYt=fwA93Db<7E%e6FYvq7#=;2h@ zEoMjLje2&KoCbz-KnR%D0~u_39QE&JXHvCo3=7JXK9Yh$L#72qYHEAAa2i#wX1H{4 zJwC}Nx~1S0e@||;OP_#AUI2@V+3WD$PO^rPIh;ttj~lrPK~cYyhHboRT&kK3r**2P z)}0xG|Cg$vJ518;|9$iwpue-9K;P9sC(fzCUg(%4KOm0dpLr1-c{|nLHpZ=qW3#=s zJ-s$I^e+8$Mp?z8BhEW}>e%>z?JE`?31yi0-+lmtTe>p?dC( z!)O>K&9J}o%FuNSGqB9faa1_ax)LNHK>!tj6ty8}$$HT0?|eKu;7x)mY5r_tY@zSw zYfjNDMDqvE?YhG;bt3qMq6>h2<(zx?+pnE{?$lEzz0b(=+76Z0nDbON(+G=(@5KZK z-NoNmAJ3qVzuOlqMp}QzdoO;d7eAs9QIlr{C*}B`e#EY>0#o&SZ43b{{BSb$!j^;u zwo^GhbF2xUO^UL|p3Tj)oTFeYLGLCNCj9R_;6ReKdt13aNaW7Dj`f&raVLn{om2dR z_#v*sZ@C0^!fsKw$jFuc7$*A>^~9(vt>!H#k#oPR=2NX^ zm?}^r$u|{;efNAS|0vKSjsDBr27071c^@ALPgCgCkf2v0n~@iyn--8B`Q-gz)DuLT zRRq2$7dh&Zxm3dmy-Slz6t``gRAO5t{f;h!?NHo9A((M^O5BH}#C=F0?h=Lh`v^gR zaA>@^Tx^!sUgkr>`s0W8$ zH0--=lb5nhsx4h4%r<3+#PBVMgp3>5&hy{GG)vgFED|(l0vC$J`Fop4{LR|#7Ks_- z)3kuZf$l*L>tbr~7uqJ|A}YC%$5F&@mcPCj#H_ct_o&TFw_?!V^uL44pWRDDOyfmu zQ0bpSnm`&a9?flv7fAy!n>G!~USVygWC;E<6dkl504FFv49>2^hU zh^&WwTnw)7HtNL(7fQzc-D#)eHGep5_OajYW%z>BnBm(;?(?eVatx;y zuGG%0sqzvvd?NqOGHMiBfS2;};3W&aakIN|SR()U-ww|*Gi=Kn;(s2>in4G(Ym^KUlr`Bm1$ z7D2~!_X7RBn|gsh?MY6oEjN|7HAIMVJrOatcWryCwolQ=vCi{n{Vdiwxqb*&k(TRu zluSxb3oToOdAmMZ`BCpy9(sb>=2lP|q%py>d08{|=!rB$Fvo8LU&&L$=2KJ| z$&6BRtkpBU;SvL_>EfEK`YB@LnwID4M{j{G1m|3|M!*s6H}*p7t^zS>vz211kkBxH zUO)d16lwA)URpaHztP-X>yu_8w}zd*XprB#>01!*#uGk=d8X z3T2!L47@ckW8~_MbTrmEK614d0>nDUHB<;oCEWxhrwE?5gd%eY;b+_)@ZyfpQF4tx z4D3rfTn0SVIq5(?1L?Tq^H4fUx}_tt<^X|th+M&0R4UnvTJ4Xlr|^PU=LBu>^6$U~ z&v*IFlun+(m1OS`+bucPdDg6*C53k-yx$UQh|JF6y)C&S^QazbO|Rch**)!U%QKMm zy}JEZwb#zUpExk?eK2YrUh3(trT;;G74S4z~?FG0P8_n=np*#c1^ z0R}$yXc%+?ZWeLg#6=9qFUApPW)DYv7tuR$JY#}mb1GI2D8S1ZTxjT?77{WX6FkrA zs-wJq>%Fz?7#*l`qprWm*cEqgW%<$6G{9BR7*=3TJDd>2s9}l%zm*~Yq{#|5QegzN ziw%NUJyW{m>=6up;v@UJ2~0VBx9%!mA>WJdV!7gTCmby{3gYu@uUvR02I`;EpfzGU z4@dcDi$do_HitJjtLB2sypMe&Wol2*kXz-z7A_Ppg?q#7X*F!Y#prJ}^cb(JL*~JM zRv>t>#rWAzlJ5|Zi5QD%E5ClS;FVytoMc*ujJ9enjASAL@aFipaI#HuCwRozuYY9r z{`M^s{d?I3^ZW%|bUg02jD>Ta1*<8}aTh)K#|B;*`^(VtDY4EAB3IvPTvS_sGkIni^5m`-aXr7a(nX?B6jOx*p0^K-X@1CdL-7aq)&H zaZQLf+yzpUAG%P#3HJ-ztutIf;P*+BG=^)oi^-AJ9TccQEQL;4I}XvqUqUV`OkNla z&A03iW+hE_@J2OFRH~C9=NvEBih(^0|4NEU@H-XP9k$CNPQFaf44!S7z~+G3qvL40F}EiK7}BrU2Rw>)EaKg zjsf)qG`^BhQo0qdHHDMX)V~wdl#Z4 zc)q&h8o!Mxe#I?@J$JWyx_d^=7W`D~;P30dqvl(!X7Ui3zYa*J@cine*1Gxos*!i; zZ;)yRKI&lFJ-o!J*&HP{qkKsb!9xtn5)2DzZuR|%C7c11i}^gOnj}b&)B_(-@5$3u zbr8xLm1~{IM2~es)8HFlQ74R2&@AA0jmQHgbKwNQMk?EZ!#|(8br@;D^2zOGNE5jW z|0YZ!NG@7yhKqSv!4UP^tdV-vA0!*4#58#>{vAkQgDs1@cgyNSCLM~q|Ae^JE~g&y zT*tA*vC3^+X04!TZEIW`lEHlNN&bq2v={*^sW>;fseZ)C5cajEU!Yt<4I=D28Di>V z75!6L4C=jwOSxgW?9QZm&YW9?cBzI5tJ-#`YWoSx*(Q6wIl$mQ z%S?U8V_+10NPoRHc7g+`grhlRntPlkV*Ec%-fPj2+>LjJbn6c98{HK1d;aC`fOT1( zVC{~E;3{<7XB+7YlTIJek3k7m?v&LRP4*$R2|J;;9L3>l#xj#J`O1J!3FB7>-8-$PC zpYbqO_EtpQo5l9SKjB^><{PbwFwmNsMXEm@k9C*$^Rc(~Lx^d5j?TumBWEd)6ywFscHrF7g9fd zQvHRN6RHVx8&)1*-pBuWvvJUxJKc`H@x zcsR&W@219Izt(wupc!H=7Mk!TD#lw8*Jr7dRL+M>$J(Kj_ zvF*PT#?CvSn6L8a{rWrdZo2d5`>krOOa|Io`a8eK#O1POFF9>5>7JmO& z*~0D79Ff*Huwn9Trm-m{GduWv3RYA+Frvtuu))xHMqtsWyAl&rB0f+aRJoRyw<_7T zJ(x1WFJN*=M+rT6-r3YJI(}MK{|BdXKYH$ISpyiw1(l6(mBn~tE%)}RFa{}~YDDr) zGvcG(zFo?1WGMUKI&Jj1a&4c+z@bBPz4vY>ZJFjs-RzG(3GMue)`^yImApvG3r@z* z$(~_trN*f^kSUlS zah&F#XbmkjdMAfiYf9=$WY4qKQfAQBBS}r-IY<5Ttu@>tl`{v7hE&dGpw2YHWKYbj zA=8i^WHt2iaJvcfgFzyU`Jq~|vnmwlWD`Dsf6EEb=v{^kgxnJq<)(EK*_%&t`qIUb z(O_Bri|iPmydT5Vry96{1)|BDcpKZq2>${ulE32*x~&7%Mi^kY?qZ$0MOuEKt2D*K zep!;=i>RqU){GW}4ZSKG{q=yK)^=o2m;W{^-tkbZt`2*FX@#F&iGM;q5;Tj#% zsW(n`2k4>5Wr~#m@)F{oGSV#9X!#r6#W6VHL~{(Tm->$9PvS0Cwq~Ho^{IN6^67^i z&O1#+JFV>&sf7-*mI}4(#rKi>j@u>v5*`8@#F~dt{^iPORb=d=?d|PKpvMqY#yWRy zVEdzKplox$$eeN&Tm06bNNlKSR(A$-(<7Gl&C#(2SxaG)I*TBbGau$f?mGjmbVA{b zxu+G*A_;tg$6Ml!6DswK8b(JXP9b!4XjR(;QcRXd=A4Qeu6Q7rydMmooWa0QS-5X) zYrQ?#lz2FKznW@{RHL2^ChzZ315z?QY6jvw8*=uQVajfiDuGv#Wm-wDG^pu>}wrl6BIosG{3+4q&uM>j{ zI5{shj(6UMIa+8H|8y2#NI>f(wFYYDw7ff+TH*%mHVsM7{cP*`43w|vJXbvoC+COh z;gaaNXVykC*R5GvvYuAbLi`IU1-Im{hne2SHuk(MMh z*?ZIwK9QT!pF)gYZv^m4m*)@ddd=)}T#sAkpqYKK^b8HM@mM`?ZVh@WkbveD5)94p zXZ=x{Pr9gH0Y*86F2E?Y`}UK4s(6Pqsra=6q)D8Lw>kbM|BM=`cxF5O6S+$68mM@1 zIcol`p*iUuTclL{3~S4hR&3y@G`E02$y-c$k|5-q6aSk@8gs4-DUqz#`$YCgt6zQT zPKsex!^I(XvHC3`$r=%B2Hci>7_G|qNkA{4Y62d~>!oNx2c~J%tAFSXH}&du)PLj& z;iyNwDi;DDv6?peAzk4aUj8pzgp7*xY`=7?8DGP11&H z3LDaP5om{j>?tSqY1>Jvru8LLt^ud_PEr{29Z3ow_ZNi;EF9X4dEy)W3y(2dfqJ1s zE=}vs-*1JXu67CzMonisq zClfXtaZ#0I6F06jyJdrKg&|~2?m77@h&xu1_3Tv_2YaTUo|AUq*iO{NaO$FYvUWKV zAP?Ee(4B+YXsX^QEqI|}Rci%HV& zN+`<@L~ALW#zoU2%gKqfj;0LGb|cSXn`T5>O0!Y6?w;I4Mpm^^81%tOQD95?X*d-A z!Z(5ut@;q<9N{9|&n_wMun7Xrk=DnlI8{IK)tjuL+DPjaT+l+47D%qz(6C1cV!MA( zrA%hff#wzJ52<|f3u{#b-o~NIzWo?MloCbQ+TS^Vh$<0!2T{xC>NJVwC03SzT+j@0 z3Wo`F90h6$IK^Fhyx8b7Y{w=0QY>7P36iCP0U>I?^X#1Vpj%)|+gjk{U3iR$I=|4; ztEjJ>$Dor}^Mes7x$rgRUv=U7R7xKgbLIsoo)LD9BGG*CoKSZMfDeRfFHsOH^&I0|OqYr1JdU=Q$BvPFDhg#u)~^N^5r znlgsNVdi`nG6gr%<=vQ4UfoyI}U{bi2T}JW=m|%Ab%|2-J?K zj?(8;pjJ_f>tE{wpZls9Xz>DkmTwWCd;`A(D82SU$A5LkZwylHm!Y}+&MRENZ#PyK z>S-ePh!cfXP_A3Bx`^K#!|FV%TiV56Q)Y-AEv_gJ5$mAKKx`0i@$>E$Mt?J|FO0VI z@l=e4N}E?$Lyx!8*`)v%boNh+U1!$`Zg7=jxSC&>XTS3b3;6BsY*bGZ`Dax-7An#$ zoh|0qvC#ZN)oon#_7T?EW7SzN?5qGYMVrXoXCHTzBa$)C^rAT^VOwaCt~KrcEo1xY z``kXBrt!z1iBTHK;E(AW`rwbhi#~)=rU6vbVjU5}Lb~wGkoqa!sw*Ti`WGu(@l7?R zaxBl5+7s}5g_TfWyOl+bKko(B6+4aJuigL0nBMSviN&ge6^D5fu&^8vb*0*gmDO1r zL%q1Q;lQ`1h-m(xoz^s-G6xvrWxo()fu7UkjrM*b{`V!(SlQiQgONz<1eFB=3+?6TsJCi# z372%|8u!7!5CdDaHkt#q7=itUd%SGvrr0+pkko{4f!;BnT|<8k-6}<(R{XM89&ZpM z3Z>&yhNv=C24?dLLBCuHoE@uU->`efP24lEyL18ryZT)S^IpPLtn8ajBIE^xc`xK% zjW>$#oA_F`s}UIMk7m!9UE=?Uy}c)AvM_w>7^vZ!7a98v5nkx6QaJ({f0~Rw{P^fJ z%KIBT`hbW<73{^g8aJmO4f?x}gMxF_N)@5{=FQI^`RHAdIse6wuX*!ByA7_1%+V1a z&6~fO^@oEabF{B(^XA94?b<2Q>MY%;j`Q)sh%Q;MC~{wMq~%M&4p{Px{nH3bVt@14 zCaouO6#pJ?!`wTqw*h72xph3{{F_c;hVySiVrJLyTz$p=BjzFWOcCJU5&w2db0|HpkpQ@s`1N|zcFcr0- zjbf=v|AjZG{}f79Ncgi1WUZaf>bN^#gw`U}nHaU(C<=?t-v`VYT2GUpFGXx@Cr=p)Y}t12;S`(Hcy zjF4=!{?o=}a7pAo#<0-Fg~?ANOn%`@P+%SJt@@7VgZf(krXq<^%P(;C9Qj!!uY3T1 zK)4-yPES9JobotKgBIXwsj*L2g2SO1TZwDKJOfW6wF5r?@ntTnl2qW+z)(9Ag3 zjIj1(^Jc5PmHl@G^~ZBut@{aagM#Y3UvyK}_5DU{aB?%FL)Ukt_u7{yK5V!<=(=>= zt+WxOR24d;8~3#;za&*2-0in?+oz1XJ`5mm+{J1vLz@>_(i4WEs^gMW9dMW7td)g1 z>d8CTI5-N`lcU0FGQn6&ic<2>R26`6?`d6cMCK$6)jQ5u^rCfXx1cJ=PM^tJfRa7B z)T+8Vc$Z=atE+W|K2MB#>1qcKVI@unY%7Vh{v}n#66~upXzdo@?Ix zOw)@W7=ChR2Ngx`r(+z>7U1WRp7{A(2~Vel6-oLQ4EglqhQk3S-tOusvN|}?$m)pP z-(7`dY^eV?Rk2H|3dsER1;>9CY2CP11Wq6X$obXghfiPyAzsaaGAxDhP3=*EV=~F&y9}FsQN+ zhgYygaOr+LY5ri1dEa*wuGTLuoc&@kv*dT&>sT@8!0->|D)4UM!_a|I1H(}X4c z?ZtQHgtZOOBj(g2s%G8%pT8F@j!LmN%RXU-7^}MPsEbCiX5G|$mO+@Tidn%G<` z0b8S!o)u!$p$3-Nyl15KlHiUo#1XU9{(r$5Bxg*YG%EbLF-{BIK>wZRGN8DGHays$ z+4oA7B6FZeU@>3VerAllrYNF6c zzU3G5ZRbeaANL0pkL0ILcE9h^v=a|cbYFILuYS{g8yso7oQKue0lK42%JW@8NP;sf zje7_P8A7$;r{gAr1Ew*m5$5WCF_&VD-;j|H@koFT8zcCX!4kiyP~>Lb;1XVt z!vzj1{B!XPC95V5a~DfWh&Jw!qQn0ZQnbf&RGTt@Gy&iThifsHtUtqpL6jJ`2Y!df zLHH!dv#2o6G2o3A-g-h$2uvO;vBy#?CC)uaONlt^&Ul!Dn8BA~|G)Zq{pZ2!LYY!d zBW?4Hm&1hwdg0K&s*fV=!*oBhn6T@aoJZ4c9JoD{^kgdl_RENN3v|a;!ANcn$dx`;Ys>3qZUxv&5A3Y;Tg4e6)EOO-nwZx{-E59Zt zq(h;kZ&HG?q%t{YrKx|Kzg@WE3hYJ_!NQBj@`=MRe~7I7y8Hgn@2ZKlZ+X=>rR5WU zC6maMfh>R`J>TC8o1T8XQ@=R4LIP#>aFX1XS?M{u593n*E(0RUP%I9JOj_J}`YvAt z;^y}RV$Q}>A_24X+EO2=a+Hcq`w@4CLT%;{WCW^vJurv1h!`dfD<$)xl$piPn5s+txHc^x*y+`+dq&z; z>c_+)mUp+ZylcrZff%VCL?m&a3Fm`05LNLO@I6w74>BpuWNwf$oVwBm_2s4X(#8L4 zQkvN0r1VjNz>%yOl@KJA!Qb04kXo{MdZ`mqd)owgiSNMV4Q)BOb z1ZUO#Jr}UD1G843b1qX@sjwXhG0G()#B);L&@{~}Ja0z;)ENM>T38Jf>onPqkOj3Q zd+fWtB==_j*(03f?la6<&S+kn{$u~8yGs2}@B0GDed`^y9HuWjJ7ej~mq>!oRVVML z3JC|l38R6RNAXk6=o%lnwrgT*SEThYo&_Vp5<1T~dHj-T&fhf$C+QqzNMyun&C=nUmKP!R!AE#o~LON-z(y<4Oq*; z25gC$t5C-|pi{@uq~*STLTn{9j5&*KHF=kB%ARaxNvS*axun#aK;fCq`LoI``2fp+ zlrVu)=ed^Huf{D(-D2~rv6#Ca&-r&e&W|nnG4a{(NbBiEI2D)4sW_Jq5>!5o{RWc@ z;$(lsJM3hR_7~BxUk$l^VNoCCtx&BafKbjlr z;C@_;+Izl0Q62M!6qR#cSef3OzS&>SN_~1mPX8G{DyRS5&bApfD)_yYu>XE+z+dkE zg8rX)J=;G43H2Yd{%N^$M=f9UMJ<2VT6WHpTDFQ5{`-e8xDRwTI)|9N#+NXGB_3F{ zIDXGM@K686LH}`*kKs<-DV4+~M@A}f<6X)(nW5anb7WVXRAmSY^`j;Zp$Iu~3GI&@ z6cZa5L1GgRxJ6~!)w^xo4Frds6QSVD8ipXTbK*PfoTwR*SDN}CX9oY{vQQuP18EFM zr4mqu{hPsWt`iMTuw4`VgWVh47)LlIpYAb6J|+02{uRF#qOsko#LO6i=nDvQZbT3)2~23%uX%umSl3I+ zWw*$l!=^6av0#n!=8!KF*j~Od0^VBI0;KvGvG3P6MsH%@?4fMAo6)Acw&xqGF`KjI z5tqu^($F!PL|3`K@eONDAwFc>)YmumE(#JJ?;{^4G_KAgzQe$BZiDdA!uK4Hcovbk ztT&vs+pE=ze9zPZnJaIfqB$bZc3h$KonOFRYyK|o!Ve*}F^s0zUa`6UcSgf1Ddz`0 z9RMp|!TCW1a-Am|dKnMe2)^__uZFN=+vl}R_zPndI6!Zf(|4`|^wrrK<&iMRw17Ys z@Nx6hLL243>;Qd34v^abW^T>-beikdd?RqHD+HWZc-tkR94J76nt=r~Zq3i`5TbM4 z8qrg{Vs8t#d{4F7VpI=4_t~!`1yCwRMuHG6xdm-cYC;tFZq66^EiIt9mE3aW}kT@^8m6LS*q#kWM?RGT7!gFx=)iuppa0`(3@~ zXtMK%jwT--08KupZkVQU)|+?K!CJ#Lwm03I_4^f}*zH#tS{Uz#et!sSK#L}0bMqgK z&D-fG$T`*b)KvSu)y`6a%^z*v0h`~nz~ynmr|`O{TC5Sn28Nc9&D$h7e38@Ck8a{M zbHt44IYmaCj@yOWE%$d;w*9Bt)RXvZ&q(__Y9aC29vmCY4-$;lE4VeLOH;62m<06l zuy15RvzIh=W(!pkhyR8(xP|EZKb<&*@v;kwIJg;WJ{~uC=Xll9S!DlRN?`gYD#bA7 zz-Usz?X2=40=1)IOdyS}Pb@3&#zkNA#&KrkrGxb2XN5>N`xDMzq+m+@18@5RB|dz$ zm}zw2B3RQP-Go+xWCnRy9)J9M50~CO&pNi}Xv3b9j9+Ek>T-4%U%$>> zj?&NWcpJ!zQugbNvQIjNoZ0tgh8uI@?@x?JBleA597bIggsgLytMnJ>xlDD#JO3(q zyF?rmD122KW&Ra9Yy*!@&61_}j{4C>J5b=YH+_L%A7dS5=6}mH|Jx7Ibwx&<3+q3^ zom_oBGtlQ||GYx~LZ@1S2tRI%g+^R7=9wEadHEz(3nTUxq_7b)KyzDuWBNR>C$})G zae}#wF{ZAx;1Kc1)&8Ld$+Fb1&C3bQP}Z^db_SAu=ECEFB-gPBBmhVpjd~fiQgz{6 zAu_D@3tgdL4tyG$E_W?W?Q1kBd`HPG77pmA-{m)a0Sz8`LBz(_vl@+oWK!+5dS3|f zekhKqKL`!{Y9{ZCf&+WVI(UV(I|8iYivZi#0Lw6kCg=CEg07W~AsdyEg2l4vjLl~> zLuNW8zu~3pzhKCVS82$H1(SmQl$VT3a#^U~Qx}uB;UBKfpX+50Ua|Emi+J@vi^IFa z#mfpH&<$a6{43DU}iu4 zo2pP-r!LWKD|p_o8Oczel?LxLu;vH(`avGQS9p=~7Gb%5L!hT#C;aEm6|5B?D3#hn z=rl-o23+DZwiSMrRLj&v8OZO-FY0O1@VaL1I1J@2F~OPN&a%^b|H*c&JLW!(Y!rWw4W z2AwZtYi^izl8xEnI6w6ZA=?%gY}Vr5vTZpaT&S@P-o55lndO-5+-kReOP}8GoZ!W_ zels=Rpjz)ABoL3ZFMU+tndgP7sGo4$u?Ff{@~dr=)OJ+gk4(RhEfb0TUG9RUOW)|j z8n@r{IlEa+?g9rFZJ;8PS$-Jo*WSm=SLkJL!Zw2F1+%E*{@K7;NAPz*(}B^BLDA$` z(8_Dd7gLFmfR~2*qqJvsir$UJN4}=%!{G#;r>H{^9}8vO?+0=R2X@95J#c#a-{86 zSUB>?p!6cX?$T7yF(~~QSG&?Xm-p+>J$&D7*7x{3q^W}ZKO0gekujV3mmOP)-}C_e zT}XeV^4as2zUQ8;hL>}njp^AF9Bh%M1R6n3Dt8vyoE&&fn8WzU%M= zB@hxA9ji=TNSyOpOOL)w{qywN3UX`X-lTGZsBv~cyM+SjZ2#6hkvQ*?3YGWKgod8yJiDqLS>JoADn(676@aII6Lf~ z98H8D5o#hO&R+bCM5HDsaW-J0BL8M8BD%!c5m^O{(9lEbZ0q{oo@p#3<70RH#e1NC z|6mT99z8;jdWC|Xs6SE_meH%soPg8%`Tf?XZ1X;H-qp#3`68x zUV6EvM0JY5R9h{sHDEiE_^}?t0a&=MAk?e_=y>=5{N2aTLcvwN#DRc38t)j`bj+h% z@CLRvqe?d(UjR=9V$T>%9&*V~VLI>u^<39Tv zmTG(Yvd+#J=U2!@Dvo*Mw~;M|2Amd4Y#BJKoWBEfLfgQ{4g6#mJ88d(;?=K_wleh^ z`P0Dk>wI^5Z(#awT$|n-m|nppdQTAsnn*t(j9l9l^G-theO5TDo}YJ~bp(HRVinqL zZ@pzvJW~7A&WlKqOumx7lHW|z4dZZf9&VZ$d1P4nWiF-VhNb_)m1((QY4+D|8QcVs zhNU0T!bw+Z3UH2jl{0ixBV{VQaZMwHoz=cK49oO4e0hFjL+UoJT%vjE6fVcSz&U`B zx-Ru?x%=?{aRI*-KG&CTpFS~=CyUP6#?rN|xy)a@k1_4&u#v96&PBxOj05g!Dgeo=aU|I2e?(fWAGQX>-^rP8!XmGl^@7+$OqwPH47kmV+UW1A` zxYA`WdEX*nd(@XT`a7gmExe4Hy^?$rQ2?I_9L+W!C#+Hl3AejuS{daTMh!^iMPIko+v1K0rSg{%SELJxq+TLGEY2OHfJ9`&3(h#j$ zJ$sCvs9e(Wdzzzf?Ijdy9gO*g(3$geR$E4g^!;6M8=f89{wI5hptHw5#}9`TlUfG&GXL{7Y=d9mp!?c^ZdBD2mIrZa>h|GD`Zzcpw+ zHiHhUOU$Z{{;7Pz_?p<1nu)l!1OHS%n#FhuOyFs{0uzaG`>N%p@Q{r&nRVvKI|E+4dAN(J*TOa(N^W7cbe^TN!Ir zi6R=)iAsaUw`@M3>0PHpDOsdUKzo@&qj_0SBa{b-N&zjv6KaI41m#a8_U=g6{*jG=&$wSon zx{E8|J1t%_@3cDJwl630W$F_4GwR{QUUV#b&=6htI{weKK??p^yA(w`2Ja#P*Qk(F zB5gIuANz@(c6x5QWfI1Dle6qKhoCdTVId6~63*gDJb;(t$>*b1P%}zSxv+9SGpHr) z(t%i(r&9MLF#wY~-{djVBg+Qr7AFW*D!-;YIG;~(ZRX3@^S*R#rF3mIT61cKWL0Y- z-q;~R>|vrrKtakx?pEE>{k2Hzo4ab%nK`x@eZ|eMxYmuWR5j?!CEgVZiP_9NIjMf$ zRO~`c+0@pq#$7qcYbQ4b+7A|ttTJYhd_fso??2TIN!y8Aj7Bb6z{y;Li^sQYIgD~c zY{1pZ&$1$c6Ewo}-ULkq6DNtr7^33fjA3sTBsK?>`a8ru!F^)u0glX_(GIejsJ0y^ z`7+*dP%X#Fl-PG-5(UQ`Vo&Va-=#f<|e>Te(X?@;^cdg5V(jJL+ zZX~u|+%#wV46Bod5@R51PhLF|OB07*jaS1!gc!$v<|&ag;1q?kVFa5l1vIsA82xHD zV?*jyVWw(T`X;p`3*a9^AaIB8WQKT~-VI-C)qbTNb(MK-y1gdp8~su=xgok~ZFJ$b zajb8ZX8Ipd>J?l|c*2TEfuC9M#7wG8vl4HjZU05Z7+37ri_YN zjc^?=wUon%`e;8wa)dfAR;M^%qt`@7e-vH#PC<0x7O=HJzvbz-{56_nUAc-@70nZx z*i^m~$19*pR!hXX>?gU=6kLVKGpV{t=MTDVJk(7nB1;b8o)RXC$VS?qL}QJA z@{m%?AuJo<5+qeS{@f=FO-X)_Q{UWxV{;d;<9$_J ze*E;%QcshV%QccRbG6atj6i+}~>uQmpkFD)sq;`2t!~rARS}msg*^^BBrn!6R}vpb)n!)lf*=4EE(rKq)ybfKjxzrG=6w^qS8K(87D1P!;IWI zaHY&DSJpefM9If7#C2Ee2^sahEDzfb2W z3g1G6Z1KYY4cDC#qCwn*tA&cNrEMji{*+G5=MK`_!^D`7fy34?Tg<*+}iepqLXh&{^J+ zNwNI&N-;o#o;M?wB%%;nSm=R>hn7z+fcfCNYxRsFZXb+j;?~xmi^qYEO%S+LG~)*G!9!o|v3g61YLyrncK31GMgxzDhED+cwbJCbYJ|H!^#n z3JK8q+({u?O_1Rg8QwsP{{AOID|4klkb_p>EPERa_D~$+i40m_BwH$+V5ZK>{W6s= z%rp;f+L`%eerhxu5BPd$(~uA&DIM;@E$RtOw*NvGa67*7O2xW2t&T3-jJNkx)GHv&tbHEChbog^kh70Pnd`MxZ!me* zcU0@6_Iam`Fy;*=D_EgAkR!Yl`yUY4$V?6besZQdFcIdBw*OvaAm$SmhsXCazdKlX zsiIKtN@=p`64T8hO~{VhOb@x8X#Tp-Rm8pLo9V?eOGW_9(%pI&d8hPv;efi3mS&bw z%E4{`ndP@@vpJVHU5wJ?DS9hAEGcVWPbLFe`)60x4ydZ zozlTxGu%0|N$~#FH0K00LjA-NlpZeUQ;~mptar_h_ zG+U*pKIK?hyU({ORT%sxU0>;XeDAd#KjpNplZXSfGTZ4VH4~NI}E4<(C#< zfM_^m3fvTasdG^guIhD_tp{8Gpwl2xi;jd-`el*%hnq;vfV`^gZbz)NzR+}+7|V$u z+hFYgtuRSs*6#K_d7-B7C8c&i5v=iUZO9s-m}_)_n6GH+*JE=mriuHb_luo*8jp>m zwsd-woq1)WO<(C(eTJ5KEAXWhawiG#13vtgS0Jj2{Aa_{ASASz88MFR&b6hG zkJ%ar<`&wp@)sSXI!B6ic3s0)lRRwS#>CMb^E&TN8W7Of#A z7Ef1w-iEj%gXUB8WDz8Dn&X3!3gpQTu|_}DA# zJ~5;-9R%(vD}vHprT!Zi?Wltn?^OpBlp+tvP^o5-r8+x~#8Rhi^y1!>@?QN3>YsWW zz?gbcH-5eva*ymu?w<6%_*fVjMw)?70N(&OQ} z3&r6krYEza`rL1YgtI6fH;(VTdE0q8Z|l|=jF&;%Q81JZtC#+p-*-HKjcLKdQ=qYGm&UPUmbWf% zDjp*Zga~ANrgC2r>y_x@Q*zJfi>GM}_1iYO%oq~5yvcAPPkHb$7){Y(Gemw@)P5ZXTLX;=3PFCM$W3*3}Hq2f^0g++}g2<}D>MvT%!bup(Amqe>3 z6gT!A3GCrugV&4w$47h|K);$e&0h`rjOhBa|EaMBP}8s06R-C_{Too9B&anQU}3eE zs%pXu+JvVUg*+Af4m|p8QBVH5_zZZ9w+;bc{D<|6TX#x~yY3#b%~8>%J284!{7^xu z7P~zZce+UTqaD1GSX@M+&e9?hOa_pIkbaMgEgy5S+&>u@)1AHOA9MP#LHt}Vey$gQ z(}hnZ34f?|s}@GuY~9yJWzN7zIMD=H)t#Eb>()s7Ts@20uMV_@PI8xF%0vZFp~Wsf z!@a1q`*aTP08zH$IG#L~`|s9357wPJo$H~CX3dynEUf5bkPZkJqNx`*!2cLmJ?;)plPr0sv{0&$Pk?K9Y4j(`0zy@yRnCc>V@xMJvb_S1E>DjU;}*L7UEmA zK#hx}>pSWh<4myp(X6iq%D-3^vVLB{u7(vkq@bi4l&}Ww6`poNIQo7J!O`dUqo)=1 zNq!3w9DJ8ZKo$DqL4c~9N0Tq6uOP>%$p1Y{-s$%eBcwWC~o9@u| z@qYY(omzyJ!R0d(&X+Xh!-G6iNg{N0Sw}tspZ03Ij$}x)CXF zYJtU=Pmy$1Js)YW(Zy(-qm|K3uS6Gq#+2i;sHfu=P_42$1PhE4T~)QEbDR+=bwbv0 z63w0kd*m-ttJJL&&-3rt zj{X#N1428;K1=9Of4=xZuKpY`Arysv^ylUu?ofaFw+jj*gpSe?AuguzP=7vtTn6V? z9U9_%;%4FechB)yPyH$Nh*Ssmv}z%FEAlfK4~q$-mjzZdOQYcV!1ngCuaV1N~=D6N=}t z;t>E_Az+{8l#bVLuNc9*BD(mWOGM7!6Fq{K=mbcSTD8KMsO;m0>DNy=u*6IIx<0O4NbmFtPaK;Ow~DWY;`Y+VpLYAd$7AaBk9h_(=`e1Gre63N zCBu_=pCKtV3xB0f0ydpOhIx^ny{iE;jc%9qCExJ{!BwpxMRoq^G3r>$#X^D`teFJ` zB=H_gb&nCt2Jp4Q&mYd=8eZW~R|Pqd8wi&M;%vi>8hU6yT9Fu+xK&C9BNLZh;oJur zYZf(vEG@5@TL=>N%HK@MbF51GRhVh4K^0g{zz!)1CE!hepC3rIQ9;GYvc{S^P+~>= z%ib(d`OZz{AtJqv(p#IBgTto`hgtl2HD!;wVw&A7GLzr4Oz2A9>y~@H;FD0xO5N`` z1Cmds+mjIx5@Ux(JC2~-SWz_5ogcaCLG1gOu0KJHy!6ia_XEf`Czl*4z9f>kQO%Q= zPO>oZqya@SYV|Y$<|I5I(g!cr&$+)f7BH`QJh`4C6=GCq26;5|sYa~|V|Y(PuDw-5 zWMhK?9qjh&2!NiuSYsg-PWCs5{#LgV-Fi|_dxh6sqcl|n`>;C#5>l9Q(7eG#%1fTR zMJo!kSs>Tj-bvdOq-^2E^k5Q8Dy!#>W!`@3Hli%EV>+`gaUX-%$(Re@D2R599R_)Z zSq$d#EBGPu@Se7b7%wStp&nfLE?6ko54U1Jp6Z_U+tf+A?G2f5%a<6DS9r-00sCEe zd&quFKpwS$4cS&Hp3dPO@k(8E)q7%c*jVn#E8i6hg|E!ZD-rbW@C-eT2ekAicsJ5^ zi=0`7iUgiqpJyH$z>>Xf57-#}Z8Z5ydzW`;`Ip6NCyTNt%UXCZU8V@)%$QfVO&4{F zwd#IctnZ5AE76JkgZXw6gV3p(M5?3;I^!LK6*}J2p>t1ufC58fUbW+#d~PVpGt;pT zr(Ji{>_kG(@RPOGZTb{%BxzKxzRQ%3vX^Sx-fH}AbZJ2u0Pvo%6)MiJvce5wE5I)m z4ovE&D=2MvO~%(U`e|#K)82cd#Cm6#XKiYfncyca2<;#F4k8xePBuJ^F~lNG%9}Th z$Y{`Q6saSfP?lA0f&@kvCA#p7f0aX-j(HBFokfP&>kZeMEZ~pYx^5{Zeildas&wi+ zdq@nJoDK7NV}~Wi9db~yM+vd=Ld&ND&&TPTK}$M9fK5}6Xk;6{?#-c zO>PaTnmS&7cgKVhy%I&Y6-!+-N0Ud=2vZ9G>I2oI*}z~{?+v*%=*Iu#RtX=EQUBq3 zjr50FitIFCBjTf|JIi{u{fO$cK*1zPQ@D4Jk-6d&eMaUf#dmYmB?0PX|HU^2{>$nA zmh7q{e<63$*Z5x}fzuWy{Zg*9%1{#A+2ZeJcQ*TjGS7VezI*0lKK&2%=RN*(`hQ&n z|GvgrbPsQ&k3SN`x2k1tD`ju-vOr&JXr{`c#g=nLvd|yuDB=i(n!rOw#9|;EBgI>F zP7b)L*Hv*h^D_BgV2@|yMRFG@R40kW)u?kBH)|K!^?!EaR^!5G`gVU0L2vP`tbMcn zEUMVu*FR{;z*`Nxu>f8M#ZV01^K;-W4dI=hffs!zz5v>0T`{U4X3v*WHw^F+$VRy= zkj-k)vW`Q7<(RBD5R426G_t!VyOA}xEWoO#7+e`rBGU94->{u*e1I_nH3&UsX82I? zu_=SZ!{NfEDyLmoO6Y-L1;%h1c1JQP*s!?fX;-bE^A%ZT?{I!(>2Yugsh7j^CRVO$ zTo<_KY2sO{o$+pJh;rCc2mYWioXy} z=@)9^%JqBsG}-@*>nE$Y_zb7hKvB-4f#oNLQpx{n^#8R8d!+4Hb(=gMxxT0(-f?_s zyyL_YEt6e-5zY)4%g0XD6xBt^YfjY5zwyQ{NsRkX_wq*ui0pE5INS1Q+FEgh;N>E{ zyt8}Rj=|(*5z%<3o5EhJ!XQiHjr@52Q;BhVxQ5$lSZ1~!oxdcy^!QS~ql!0QBLy{$ z8)#-=S$cfAK6waDhwm#>2s3{)158*xd^g z3r=zBeXQSal_thb)e}wZsXm@x16`p*kvAI8LoM~ZEHg=4p@&Sd zXiH7#&U{%yLT{4@MqJ_lnvAQ|JaWE7M1T6yuCf_Ak>M;U^_T7l;g4wgczowXPrjfXx3Wx;H} z=-;CKZ!r3)`AT#PTlIcY?w|9j6JrOGe+pky=V}xT&bm%qR-D&#h~8OXkW9rDy7DUF zV^kIlJn~S@PeR3HbUJrs7W{3jkTdNiq2e68GuZ5GbJEuMr`YF8|33SKy+885XO|oN z8{IAch~V>Ue2(d2M&Xxo|PQUO8;N|S--uV=+nAH0i@EOP~_7eYs2u16F$ivyh zSsNeYG}%h79JAc5?N1!@!bEMVd@DUDrk&OwGH+@8UcBQ+#j&ctTspLs`2XqROcHV0 z>U7c8-FQ4dV<9fAtZn;8V?*TOJxF3GhUx2~jpcFea+u76v5skfV~5Q1vE)Can_i19 z>^?4(Q!B zbB>-k<{uMV|Izp;zn0eK`?0EjM%tI@$I&0gIH<$*7$5Z^9U^z-waHJ|MefS~VjeIi zc(a;NHOTJ5Z-jd^>#C@kcUIX!%CV`I_Q60NN!s!ZNuy$h8`o`A?$Qi-NAiH{hU^aq@IZxa#x=JO&H=6OG@)qs{tHUTc|&rJW~IDGfCD{d$p&5Qve_3qK1d zbp>! zELSajlWA>yFJyJ(USmE@ua0^%aReR=>in|SAl6(j)?Dv*YkEe3Bw8Or>op^*egkf73}hj*?{y$)`%51pQCKLF(u*eWv4O zSRqAqUK`-)W{0P)^mK7hWiVxD2PF|9d2C`SE?80)!(m@E6&OvK0&N`R4)M27q<*ye zpXlPfECC!8t^=~SGJUe)Y}7@yDs*7`)MppNJ_W^5?*zgJt0O;ags0Ld@AkhO;emAH%rlHky=ms7i#@I2$6b)50-}k0PL&qUo5B~ix#M_s}m1c zg_52N)Du9JpL_^(d~DIiKJ%6TNBB6E=*xETv3Xwq_-KJg1ALgKM~w!H_J)t|{WTXK zcOJ9@e6&y95k7wM;P&y6l$<2qhjN=?XOk&%~Kvq1BtS6KwzaKLY6)&@ihqd-3xI z2QPdz1Lgx>{uD+(bhzf zHg9#i=yplK!r%gL&ntYQL4l!ASBU6_8#t5Toqx9Vq0W_YQ^$WYS;E*GPr%BC7p9~B zuRI4pfEwBaAqoM(2vO{5-6H?nBm|`A`j7kpynJLFoyCV&Q?}B@&qphOJNJF(PT%X2 zQZXKP3l^{NN9$a$S*}o*ZW-{XFWF#|EPv8D4sQlYc%1Ykn-_#Gp<>bKQVWMMD}7Y& zqV`wvIVRZ0k?~Jttec}%FGsGr9JAIqDVn%Mhu&Qv8^_(md9;isZC#g6bKDy5ZRh2=uFbyY{MT|z=vt%`R~k9l*5 zcm_y-clsbIirwK`0XG3oiAL5O&40xL7Yp^c z5r*N@fu^rvTnGc3i8L_P(0jncl1ENR3_SI0vT3qmD2^U(nCcBaOikpn1%Y+>3}usI z$robD#jzx18TvtF>N!n{2~n*x09%8NyJ4xXfQ{!aet@5u@_o7I>~y(Qr4V2Ba%vGh z#Hf#PUZj1wItgNc@zKPA!-SF8s8y4_;iP1Ri*at~ASqB=;MK6XTBgjw8kQdGAJ%yC zjd*emo0`&p3ADVX99bz0gK({ZAZB9UYknXNBW05fi4^&XZ#x+^h>BC+W3tT74LJcj zlaxuY*3WmJy7ehJjWtO>j$7KnrG;`=`7K;_`ailKW%3YHPgAlz^ht0&@qCF{|K}5H zL%kBc@#;zkeX|LQeuo_!)PDWExLd)1hr_K+xG=Er=%s=P9lAA~#f(}iAzYw7 z@;7M*V2ds#Fvi{fYgA^EHYlM!OLwI8ET9pUaeG+zM>-rBY-XKds_U6Z`D! zOD&~FS+hYDg7dF3EgB_EMDWN0M_EfUg|w*Qu`*v4 z^P9W?Z#YidTnhM*`akvC%o<`7dY_#JtCNRu@;`vMU z$z%}u3dUQZ)VAbjdfZ73k;Mb8JxiUml=e{jBYn7J+CASWJF_vngnDR#M zk}O(lHF>{HO?nRfW9c?IhP2}hMD{`xQo0!%>cfm74cHDjp<&@gwi(akIup0xSW4!D z#*DB?mmyw6)&3J19$7)Lt$X6y-cLA)oNEpQU>W$qqI3XPARB>k4tamDU|oB5&>Msx z&^KLt9ded^F*OfT5azWC8zZ;UOJ{uvB;^bVD(-2BRfps4b=MdQ1ylr#?K z>)_p@*qFqBfzyfe2Inax3b)i?V7{5rCkQ(1suh~6u@Pc>NJqY_&M~BU1gA1ZSiT~?h8-LIY-A>mJGv)eMBhO?h(=qp?|8wqb@t=HNDEjrULDB1Q zO>g{caroiQ832Vo;7{T7y+VT!P;FdZOJ3e%`V)=Bm#OD!{VCEP@)4??k}MHAz^cJz z0-W7>DB_RlPW^(9)_jIMe2~yPv}WG$3Sv(bo12aEVGI|(BU{vQI>-x+m88%tAIKGc zO59PT6#-_0X=NZIO|yi0yljAxovD_WExja{JIY>5_PoWD@5GY?b6<`pUr_A-N+%?< zk+Z6gl+h8H`VxVcrYW}Uv51$^K{*lrQ7=XFH^#M%@n((gQ`;0GkJB-C7-$YOI8yAKaHpy^M6OgsG2??JKf)>OP9F>}6znzCE2y5*F}SO?ZTa}fFBVSe zsOc)2;uQ?4^{TsLk%{Yx2iENTJb}sCD~SX~S{qDLTfC|8i9G^lb*jG+hP-=R4nx94 zq1z`n5-ctd`~c>7Qlh^zlSv33XI;4JwTSlw4@d=6P4$MyrgWV3Qqh!-;iThG+OdtF zVyu$3?}M#kWivkdsd&{ZvB=aHYmR5hPZPin3n9hHNwM87rs6-Pt z4z&}9)bi($9;t~FvDhMY4>%io!)Z>DxEYeuM*7zRBH@9D6VODl?k>SXnWe8Q_80m# z8F5ihCH{A9qkoXGP%i6WmKW<_O1vYW=-kC3G;BIQ_&reay?@uqZKhrs6eeSXP3zP9 zn8?Kv3z1Q#ORtUBoP*`yP#P@xN^@JtRjoPpH=`W`B-oe*9TJLTq{JVway*GWa%v`Y zq5OaBBHC#TsLP8a`jxVXm*2qi`ZhiC@XlEHn7nZ_I34j7WXUa$Mt-+U?~$_~P9kIh zh%;jZ@F6!w<|}ls*A~!}@>l>m3_Ln`QY|t=LBpoCt;O_%EYFT%)pvawtz_FxlpX|2 zHbT?E51rhPe`YCapcZ7ClkLVP)-nwhXx1P3o-ZD!#{20XGC8KT>G zZlwJoV_BD8gc`{WEvzK80M1NDC{SZV=?`ZZn;k>N>>H+Bk^WoYiJ@2m#KISR$?_00 z!4X%TB2R2Mkp#IY>fawbrH3bWA0iNN_ESp(Cg0*e!eysF{#LmAkRH~g&-|lMrX=zH z^dA03Wnt)VWF})kSM0C*W{w_b@;v15U%RY1|G;KJC3<7q5th?f%w2c^;nzspBuNk) zGt+8UURP2ij=HXt57xikBLnOabL}4~<_9bQnrGV5V&(3SvxTbl>~lhH(|gE14V2Lz zy<~E-(H@CYovLd6?6<|#b<$&%$Udv(>0N4*Be7M_N%P@P%$K7WXZ6MmMmHkj3Z!Ola#(HEsyR%b=;{TG3TZb} z9plJIr6E`4(d0<13J!!sv)Dgiv9?v(ydjv-z&^G+h_{3}=Q>DPH>WQrn|P>P3EEpm zxe%sUN_b_TqW83z)VqKMsFxz`qt$I3{T$3fet}0#;TTGbo$if$fr^Vn?C1Rm-re+bFxm6XT-Ny7r`EYK^gcX zS%@c%G3A@CXM*DIVs{p$e&<-<|Iy-r@7MU>;gYD77TKn8`6xq#E*t#2?EZ$}_w{k? zz>(owtNbLFo&KUN&u+Sh=i`vmb1kL9Hg(n{A|CUylWv^btmRA3pu%-Kg0bw@3_D;@QYC*Wgz973-o zWUX_e1v0mitCdvo4B3Y&Xt9V-pwz8Lxpcc}`skw~=70F@(VR`> z^>R2!bP%Z(4fBRn?h*uj_+F%&$lupbom(QUWg^X`EtrE{I3Vh(%gib-OU<&+)e^gvU4#eH z{OR-`x(+ys^^;H~oE2Goiee8J=KpZ(HTij(g%%8*;EmjgWF2x~X21QI?z&Rjdn8|q z{BBkB9tm`0;z!X{ngU z&cD+`FaPjsj$g4jGf)Sp2y}vc7;-sV*NAo4t3rH8SBx1=&(s&7SX_t6qTaWAm$zOf zk;W+|6uuG^TEP&ThHL)LNXw&1+yS&W8lX|)!2C)aUgCeNLVZY|6X$3guAb_n`72$w zRm(2+(wsIW`QYgW(Xs+sR^o3H35z^z;L!sfzQL&;m<$yAPd>5HXoeE(^B&JjEKNR< zG=F_fD3;oD*W+=&?9XC@`+or&JO&$t?sm`k$Hh}ocNM}VxX~Zl2DPpedNVgW=nf`Q z43B#y{%MB`)9B*7$SvkU>fOZRibei7I!xb`>8+2x`ONwE$g~1C^jWQDryKpQw%K`+O&7kFI)yH2R7bRwjz_-QexUx8?^z*WlAA2{ z@liJPN^)b2(0l88cx}w5+O5>~lGv_$MS2i_#=}h7Ci6SptNJXGSWA23f4Ct4VQ_Ix z{&R6}@ZPbiEs?|{{5A)V%DB^stdmfkX)o5Be(-m?m+GM(^0fs|TPn+`EMC|AZ zUG>v3kI}Xp5Zq@$Hw~zUPN?T!lGixQUIWd@R0iJuT0%eq!J{G9V!gF!f;Uh}0U*Ex zZ)Q$Y+~YBYYO~ENR1=izbQ7R5GWs)YJb2{~uhq_7z><&QT zI|J0TPIPO~FhaXx*(IPt#M6(({h$U}mtxTS)`Yw+3-vW9D<6X0Uw z^03=;*n?{gCb8rS_=Uf!iUjqC0%&b#!1 ze!2_PC0ziPV+bQ(&42gSn+`nxx1FH;ml+k<3*TEEzMG|wW=bDH*u{L8#-yA1WQ}x`OAIdgWGky5_ z+-^NKXN0C+Owq<_k`z_l(0a*qQgam(BTSk9_md$vVx+ddT+iuyqf6Z)UC0N)m@;$e zfS>$djpR5`lDG3B#Yk*qs0<%hrMhZpJUufL=S2Z*3~VQS%sEI5oLt+LE{r_ui5b|C4Az*O9HOMgK7-j#5N<~pIt63a6WUMBV;ha93PE@V#r zZa|e^`C`+0k*;)+n6p$kaE?&WKrj9Z&gX$qXCOrI7n0Ok)}m2}zm5(J-Awt^tuhh1 zJ^xp_pc698hP=9MAFczO>SnRO?4TUyx>}I(;7O47T5EaCt74IQ>Dq>Lc~qg5m%|+> zqgHZYc>$bBo`w0|?v*&trK!&;tFKL#9ifdmmmdMHQ->L9g30QC-mCp8i{%vmT~JgwTxgeazCHJp%Oq8R zR#L+l2NkimXHa6?HP!>mwF-kKM{;IZux@K7y@acEVdPwNOORluPU`*5zs1RU&aR_L zskJa#q}D(Y>z58Y#|0U%r36;2u$N01Nqrw27%cgLj!o{k=`A;-j7;ql5r` zO>(W~8mn5iwnP$hj7De(W=|h)6`O-hV>SL1`>&UUY))@5CV zeB|D7_J`+9(oW+eD{#Y_UK6R|CIYFWrr5R+7k*BAXehod@-?f z^^&<>gF(1#zgPIJgARlM;>Di`2&i0|;l*-sDts$bjhB$qy173a{8LG|R7%zT_PN?W zfzRNlW86=Q5p@Q?mh;)^@1BJFyd2eQ8Z@gvJ&xPpSGNRrV6X&dzWBXmE&BAr&)H?F zIwTdlUMhCIe>i!umWNOFm14QgPn0sIF`vSy9KJ)a>p2(hLWwmZD$;jKLXxtMS9L|a zDUe&*wAs2d#GX}FH;+Ur3%GNaS;X-Cz|u!NIc0I`*ed`zvnGjgSL|FbcMRxWi482u zi?sfVhk}fr#><3X?17GJpkta9JhdEPrlso&=o;Rf1B;=UiS-cO|-(OFrVyFLj8*=qfILFA5 zr<$?{oG|^f5a{Q=zY-j1^UN}RB24xP{?_Tcypx!ovw%vmt}MuNt*ig5x?BW^;6MfJ zkgH*~o@B)`;>Q-n^H;DZDO$C3wjUU#yLl`!)a8wJMv-mZ$gII?raW1Fz`M;#YLX(9 zNOtjQk?_r0M40~cXOQw2a9-34_|7QGYm%=} zi=}QS$y?BM>Sj`kz!+R0{MYZr;9))lYYyq_^mVnpuDxMKe#Zv$`(=Yb585NWIm9dc zWPLDvukh%#U!yTt)^EAzQ!Om4$^N!m=C^a)Z~vYB?Tx>O??v5jzsmmhaOSr|_^s3b zjo3n#)9UMUbe5+IK~Bw`ldG>1I$u zttVYa+H`P|isVH;Uwu$Nragu~by$J<2Z69u9wzMbx>p0=?goG5Df_J7AkaKwVo7YKOpVAf5|iKXZ1lONR$ziD8eBJlF| zK(`h_yaJ9H4e?HSk&PPDXhbrLcP8kqu5YYf!fjB%2fj)TVQvj=bRy`8&vRf$@HEU~ zzd;yV821k44Ok~XWF5KMb{a7c^v5-XA^zY(rIyAfQxoKP$Uxe*eJ|K=#3Zt9q>&>? z&hk#j9mkJU7tq8o!q$P|QT-4&3G)hev(tLPW*pfZ_hG2EOsS(P#Lt0JFWobv)V1Uf zHYbBb^Bjsy=WykPU#% zn7RihL0;|1J={hIOoFmBzyVCed#TCRf)lCKu%NjHnS#_mLY&SnW2TKM@L~lr2N)yi z;^o7gIapw$krk}!V-5@hm;(~wY)eJJR#jwVgh9mFYA>L2!0$|u^?V&UAkqb)#HYR$ zn5`D|nCwA-`NV?y^Z^O%Q8ZLT+6$Wr6JJw{urq4k3Ruxo*?uK%kIQeBe2QQ|d<_3z9=iukO^uzi}QOunl zLy6?2?+PEgHJTiW3e0GO*T#n2GaK$XUo|C=;XoEsH5#>7c*c7HIlRKxUJgyn+qYBj zvFmom4*jza+@E=1F%OWz;GgB58IgVFrT_8 zaA*FW5&7k!^j`@%tz@-->>dh_FzL=>Zz1I>#L!OovXULRg&29$rNQPHm77>2Wp-MZ z0^rm2rx|uvI7PD%*~u1zv=P;pd`)}lF-G$Xc?TGZHNP?&Fn->VM_UYRQN+`}JqEE? z7Uo$46H7`_dg5-`6Dt75`eWN1+R^Q1YY23xGsRzL*0NgtD;Y+r3ut$xS9oqfEy-~x z(O61#U+PcZJ=nUW*0Ng7nv)gkjdC|c@w*lUC%F_|jo6B*3W3cMAdFC$aO-9X(Ow8t ztfme>dWErzOu1C9HymWi5#SH=wPLA;phdzez4QXn86~uj(Zh6Vq2B=O46T32Q!dfM zLSH>3|7x~fsILY&B6Vr%D}Dj|USZ_j45vT%*HDyhyiFci!NqX+eyG84A)^2Fgug;G z;<4C~-28{?XcEvsV$`vx05XJ7&#)xVk4ip(lW;2PoY78t8?>Tay$-ziv z09GxV^&PPTIJMDbQWyBjasoK*aXdIGH6VuH&9U$5$RwgXnD9oei}c+NK6R&)v&fBJ z=pRSMq`x7<%3Yq?f$QC(U>Y48PhR6 z$CUNAE#LVTM^E6^qO8ZC(49uIY^JkJD|@yuU=kEM(Q}T9l7l5{TVZaH`N9Mn6=7_s zWMEB?YiQ+qcY1C#xQ78)`;8m}kp8`vw5H1vWnb`rd=Y~H&bzH7afS87fAMTx5fSi4E31wgg zM1H#|IeTPDU_2sPqhuN5!qqTYW!@tF&F@nm{4QzTM2~!5`e;^EjWZ?bX=Y1ROXO$! z>M^fy>R6ZP?w=5MS;s{h9t>#eQ4YQI7K~lw*D!|6x@u)+T{Wt!N?Uc+VCo}7ZS^%8 z8CqS;lB-wv?1a+1D46x%JTdIT8*=V&x=*sAF=wLUonKLhNWYF)2|XF&KdgYUd&erv z2J3GhvbK)Tq@p;58^eaL$Z7ak*Ra|H?kGhfzLM<$jsFEb%=EpS9)2G7P@dDnj9~_P zP7jaOWXAAidN?@j!Jj)5-WZD#2zf)Fz4%>QW1we+@_~ElJy>+G#gS}ok_f1AMwh0j$8w*MmGz2&w&-z zm5Sd!LCbJsD^;%OZ^*kcQnoQ)zI1=3W9j6H#9q9pM5KMYIUc;_qT{tbmap}(zo}MR z`&+`Vs{1KYPtLiNMtETKdhI3!vmnss*cq*?=O5eN^8v2m&e0KVuoClp6c%c`4niXP5ybohjY(xAvUGA2}DRAi)81|M$S|7&mAM--% z3ylYfgPJAA59qgWV#0S#{-igjBi1un*ba75P$G>phfG|hZ(MqSsT?_|W=U}kiZ#R% z|2r>*EUF;M-WIV4oFHb~-ex8v8MoLQGIX81AGI1lO6vwWAsgGC^k7+wfKsF;kfb7A z75gs_a&8^yHEl2O!k2++f!=~cVbd_!=;pv-a6D6KCA~+i`>CnkAxEkTM|G`NM!Ds+ zwaK)ir4@>pdx;>JLd5(WY!(X>ZOS~<=C`X((?#;_7`esmT8W4yKaG#(_19`gZ;X+D zS37EJEPqj~>hnnZ9sFEd^>(EFDlV+4+R^XFtKMO!+{dv^{}WsIIZwYm#VZ?KTlHq7 z?M6lr&)*iW`ZUshvR+MYjE(*@R<$-BnYuBS{FrWZXnK6qJJEb9l`V<19*GRA-Fj7T ztBWR8%MCN?YPoH?Ipdo4i>m&yq{%>3kz0!v*9%2;sb`I8SqO|{sV&AVzq{DK_6xe; zjqOn*=m&bmHG@bEWGIHTtAzW}?(?jAUp3Tjt_K2yI9 zj$!{5j>wF)B6TPuwC)ST?!$T**8P!meq+2z&dr#`7rY|3!dq#wr+(jf3A< z*Ms=%(~XUOQ9KqK_39L_pu_;yE)?ObY8#>OO_?2MpOc+1ip^@;Oc+H- zHwC8bODUo->&2-b3*?CQ68&PowllM@r>ELWMd-ud?P@KCu2UN3{&u-q3b%wy%YND5 z53##`Jo&mmz%E~h+x$mD*Z}lP(3UvD>!+dky{TkRLU+Mp($A;FGcMcJ zn^MXiq*i(UxE|BZEV%4RK~e$hmrA*m!vJN-fG(8-y@GtCjw`y5q zLDkCHZ&j_7Yh+0XHh!SiVo-T%GlJKvKYD-z1C#AP!0EL-X&!lreBTCRW;@GFJ2=8x zMC{;Dbg@33Z~IKdfu)*q)LG5j)IUvyfp$YyG&$T!vwu?W=CzSz);Vkr$xWDJ1%Zhd zaR%xyLK|(1g*vHA)o9f-!Rdd~vlAxQKG>1UDE4pm#IP7koMhSjRsI!M1?GR1e;JpZ z{?7jaTRj*|{d?K_?`bKf=YCj}kO_r&=YPx{*vk6FmAb;PnuR8^-Fgr=B3JFI+g1Dg z=^M4=4&QCexurUC<#%*Ns9WYY^6;@#l`K0Puj~X4Ev`{gH=EPe1W|UBw2Kw#?0IsG zB_~?o8Kfpyen>n_7YY>BkrOjAe|+WENZT|iCh}oooDP<_Tp++cQGP!sKYwE7;z;Xn z=$FE*6I~xXPUE==}bc;Y1>ex>dgLDN&oHfQ=ISd8PAk>r4meu~#NBcY%_sRyws{R^j z|0CKyUbQaLe!DK{a5`yCp;V4q6!V4yl-Ns=Df3)z>9D-}a}*K*1p=s2u8RvvWH%x^ zLO3cwfe`01Q%DOPrB)ilk+(2jCWm1+^j>li`x{CyRibFIe>mDw{gx>3GePY%kY4$3 z0g*aH{r8Ws{_kdd%|M(pjw-O@KZ;sY=ZDnlgY#b8d02)!5ADI76(OcF+_}!U^Pf_h z;?DK3skpN~%bh3Ya%Y#=7>KHKxbs&z+?jCPS)0UX+gcDyEGnq2dS&+Yv8re1ToWJt zMlMtS6{Z~JDA1EBP3{7woU_MvkO*f~?|@bNASlC>pK3T_%C~j#Wtg%knah;b;s?z3 z_L)-1uPHk;M75X_?@&y+CS=N1`u>tkd1D}=eVOuK1|oITzsi)`WmTJqBw^JI+h$bw zn)Yz3NrrYX1^V*~^hhu#hU(d$yq6lXC-wRHyufu? z<*(w>f1f|HGK=m0>;A~#xxZ$gyGPIIcRhDApPl~Y-@ycF(WrO4BiJ8NosCbL`HLE+ z%vE6&{&h=xZp3n4j_h!QtBSz}tf~1Ef4EY+pJ1kuM^Ew!hUp|B>Rqz|>oqoDwZTEi zVHs#)0~XWCUAZx)TlG%b{vmWHH_7-=k!EegQ(3}^KkN#c8+^pX{AIRBonXV-NTQ54 z327e@`Q3)`qu0mSzO4q^JYI57S%tZcd}VuWZ1jd&@9aq^mv+}g=j)$Zut~;zM3Vj=bph>X4 zSM2|+(#^B~RK|Isjij>M3`)>KL+B^ewr+okyG*xx46zU!AYm6Tbi>{~?Kkf5Fdb1q_=%4%wMJ zawY;X-ARYn5;Z11Hlf7A=@ZHmjh zb{szYz_E|{Y+6K2&6Nl%m?w6!cGJK2zc2942a!Dy*b{#Zec^-LhN}wBKIiOODjEpVW5Adk2g00mnA-F9d3X?oQIs$9sc4yeQA?<*rU0Ckg0qe? ze&rl5SQ@Pw_nXGad5u4HH#mH-YD7{uzAAp19!*l~Xnt9XwG!6zngN$4boO>Kbe%g2 z&*mL4`>@V*@w5qi|HFt-~{I zLE9m#er#>MU>`J+I$dIt)12B-o2kQ1eqMYWu=7%R?u*se@N4Vg3KbO%Dbj-;7oX6V zA7Cg(206fe5!IaX{2Q*!Sv57e2d6fujM94NG^l>3`smUAzfbS~I(monUQ+Po>HYYH zz36>|Zv2b%K96@Cy*qxHOYd<%G8!FgA77H*V=`?WmuXA%e*K5m)*JTmZ_@khQ~&Sj zeGiAXh|Pe>f^a57J?Z`FDgVp#K48oa>HX4xFHi3kGkekd9^LpC={<*c9KCP4HkaPD z(~U+`?Bh$)dwiy?shPG!?+xc#TOZlSze(@&ru{F_JNbq59z-|)tMYx+;X9=FJ9%H8 z-mjeBi{6jv#=l5!k9Qose|vQ%&*LDS?*;|{=@kX_40p7w$dLOz-~ML z0Y@VAAF5@#E+vurBc&XGe+Avld60W-$B20&F5UJu{07cf+QQQWZkmqxNQo9^-zuD; z?l_$hT!5c&)CCxIIS#rJNMCa2ynZA;2BB=F2m%);_%|Yz_1mUhi7F zA=8@MS??ND8`)MM{sWC-AV!5d6s$EDQ#*_EDm2fZkBxtit_r=7s^c>zhT`}J*{QbxOhqpI@ zkD|!_z!S)5K*k=GXjISvf(BM4s9>T*CJ55O0m88w(bagdK~Wq%Oa{(1K0p!qCITSfOKv(TCh=9teRt8fRn@C1 zp3wwm;9U}Z_WAZM-IW6q$Or>2G)vREa}$Z!Mk2P^C)|edHExAM?Bdq84Df-zViHKI z5m1&y+i;=#ia{zUN0c5%;x%+Kfi_wr=x;SxeS>IlVO5Q8ZV)IcO)ABqj+oswYj7Lr zA|td!NaJ2Ys}D}KdZrUC2Ns<=tZMid_Z{~}ctOKcs^zdj1ACv{>32O_tSw76n<@su zUKZ|-=L0a5bh(U=}`k0lRx6^ z#+O3B0u+skwPRru1v7=gt8_FDAZX@_lqm*GI?Kk)lvT{hVg+VRI>I;98O(_y!47vE z55QVNIKIoyB;vQCjRNsFe2l4bg+gcxB)0Gjnrd}>Uwe-y+6pGrs@(*YE0aYL)=!sT~KwQAm z%V*_embT`|TFh)pC;v7swtOZ85KsI70jS2lqBD_&ycM4K;FsMQ43>)g09CPH#9rjc zw3yN)@L%?SB*fE5Y%quDgAjDZ^9Jf?^?VWyH?23Vlq1LiC@vx>?BlwqsigpUfmSNBPfkBc+l#p(S#iSHTTOI3dqiUK zKe&^(2E+C0)n&aGV8ssBDy{pC84#(4g9fWW=-o2_C5i^g=@25|TEMOosKcOPRuB*D zk?FYpeQJgd;ZR~dY@hU}nMtK!Gp!$u7lgLD;U35^n7g^t*OoDj3%$96@9x{9j6vzE z+e6Qh8LPC*oe)J9bFkffLq<|$Fnhu%MCa30WATZ{hvX(NeCbZyf@yh{xS@UIDuU=6 z(*FG4QKS)iBe;~kfFeiX(4r^;54nn9jh03Jc@v5-UMBaF`#a8^P?-Cl{pOr9oQLOm zz*Sl4KO>hB6XwCalf>8Z%sVCq+NeG+o`_ThzP=RTZzT9J4@5SVp||n8=Ynfgr^FY- zG9j_rUyNeCS**`R8@CwMU*RW;y6G=n5n0YuUSPi6{t;o2P)>Uap0)PafoMO=uoI+7 ze@c6r4|@t79LxR@e{{#;1N@Q4p>}8}1sKC)q7e+=`cWS)TM#8bN(z1T(p49NTSyPC*a0w(Y?W`h1=scQO zDYai4O1syu%Jlg(ON!8q9yOmmq>k?>CSOoMnKKlp)wDdtQ{DJ_2^}0O;%7fGXWXTb zz!OPuAFI8;F%l4TJAN~QNcO7P(LG7_kJ+ydfaqR?VBP&?%>Dtc-tYN1SCpII?@7Lh zqf)~=o%Mc4P^pe&M*m2c9PJG1$-$Ben++|BIz4RJ29%?5vm>6 zi@F!X5&Mm|yOmZq2+Mov8`Rqw85Jz-bOV;>_Xnw}fWe7OTnq)}bJ~#8-W+B1i?UvY z4w)opQeoUeKyw-{O&8aR;gTDkzZ@BbA{eoGhf%3J&iffkJ&;M!7Pbb99fT&)Zcy1XXP&2cc~ma zIf(m%kO?HaGTE%@x>%;qWV0e7^p%+HLGo$2!=Xs6d=IKYVUZe}LGuG5OSIxtyZq;7 z^S^(ZuhCz?KbOLUKO{F0;wbd`sF?uq-qXWb>CQIzTqcCh4qA>hn?-zxU9oguI3iu72 z0)w5c1(*Aozvn#_ zm0Pl<$-bDu-pa%fTb{7K0luqi=L5l-ep$lHFv{f1VLhmEPb*`_Uy+bkk#o9HeG$P~ z6SMLvZcE1NnS5oIs?}|hl6d$IW|^=N{dz)R@LD}@PjpVuT8=%$skplVC&{MDLFyT) zc@@8(j=lDH#jjkW>TCRx7)xAbZ(RZRXH>um>k55~L%A1+a<4vGI;AI=Gdv1yc%kl$ z&;vRf@6`@co=_Id*=Sg!kryL|BM`@#%Mrt^$vDA&aClw*u8j=k4R-pu7km+18hx)ww3#euNzwe-x?Y(0-=PzkU_BLr2?o@jrUPJmO`#5 zjf!Wed$yr}g#u2?vvLW=yjb=$wZV3dqbl|kmp)H>qbPEkai@lOv$B#vE$`l!lv$Bi zz?Kfwg%Z4?8-7t;$zL-3&%VF%qgY2{W1}0h!C` z9gsun0R3poqyJL?A#`l}rZb#@t)%(%+2?Fkl%eflpsOWtE`|l%gMq+WI5Ip+av)!L zMvpTTCXXse4b3i{7DyfNTsHtCNNR;q{XX+JED4qSlS(HG2+RA(Zuima$f8&-Mort9 zbUU@o<$FA2(2F>O;O0oxhimR6>khJ@Ioaym_8(XUZ}`~m-Pv(UE)sC!lqem_^V2E$ zoA{(NlwMi4`Ryevh@()Q;}1B>2ha*ZAw|aYAfDrby>_%?cRU!ECV|1Qs$iGBI+_n@ zJPnL9CHbkEiX>3MZr-P#eo|$nSuar8W~u{w5J_7n_0Lu(wjiC^iDbGwXJkk*;5k?F zRf%>*C4u$=<(&JwTRAhB(W=rX0y)YF1rRHr$se|^ITjen#trVO89qOekj7YbtN2fP z0~I)1LP{$LgZcoQqxJaA?;Xy9Q+53Awumu3ZX3;qw30*#96*oXpZmY*@dClKSv`LH zd$)u-G2=n>xI$kJ{pTcf07Y#5oo1JAz$*m-?-$P=w0C&!9XH~RYDxJ6^bX7PxvYP- z0Y)8{031Ms9{0=U;d6K2Cw=A+9LRQLe&h0BxL>yNCEPxQi9>TjxgFcm__jx+6dVZT z{6LQRh+HKA7K%e*Kg6~F&D1^k)6OJY0kje`wyW8Vpr_zBXcPU^$V0Fu*dHW&-0Er+`|_<6%p!c2Nh2F~^$mR953()wJB5NS~ zLnw0yS?oFlN7mYd&W4ly8|X~%hh=~N_vBIB9GS9adFfcf8A;E67+Q~X{KEpF+&>Nn zT}Cx8{GpJu&2U~8PuJoQ67sX}*6d7Yk`InXYEs!|nvB5&0(Bl`!j&%liy7LNTzVA# zwkli1&m-6~HVo!0wAj|eYB{W75bBfc9HcLRMmdvl!b`dj(G=6V4bXv+y^ky8+$uzb zR3EbLa*ogXorMqFYjfc7*?5T1y}q4$N8dq7oDlJl?y_Uhn?ALqD-7x3X3c4OQQPv| zizK^>E9MdV%QNwK!BsibS}feb8Y<9d~^&Zca9|i}NLGET)Ohdeln#ixA!|(bAUp-$y{g z+;M+|6qgF_84ma@ulETWnU?23uf0WC88v6?WhGV%bD(?IP?tSt z5$P~SFry+gIiw`SJw7!ZSDcS8R@yk6ffwlwW+3|X8AMUy{Oc^Rhr6<4?1|^k_;TnI zT3&2D9HGvP+?2M7dz^-wH60e2HMb%KBIHONiD=L%NYtkSI>UbY5~MuczHJ2fqHa%_ zE&fS#VcY;(c3Z)1WDnqWbDZb|%b31`Cwl(&x0dE_`-vM<&hDa)tgJZ-z7Epbqw!+C z)2{i_EhX*ASl(;rsNSH0W#GVYM1#uC3P4|j{)qbQnR!QdNtS^TWTF7$M-d4D|D4f=qZaIU$TT%GI$$*$ zZQ`_d+DYfJsdikp9!*sylPu4}dr*<1yg7M(qnfcaW=$U0k`J~xD-? zG^@v#U+>amWnx;^5d&nAYspg>|rd=&sV!jqZ?1MXX(;DmWJp( z6Qp#ODlOZU!`>TI>GY7RG*?aRQHiDVrSy(JPl_(6~ z24M;ihi(OIV4T88vNJdeAVs0vxdQ1Z;AQkC2*=CAgyQ~QgOcoS`S6Hryshhl&+shL znSf&pbLZ=X!;ui_3mb>DedbM>YCnIMl-o5}-7 zLRZ*Zf`85)j*C)_s!u@&_i-3ii-lC|<*30psHOyaI!2_cxp&#;fqO?7E>qw~Pn?Nw z{?ZF2ox3dnI*@JFjKKDb3$k^%Nx;Q}FufILtZ#1}8Vxr==*OqZ=!(A6=x+Oa(~Tjs zaD3@ZHDe(8&|lbd1qxL`(FUR-e+Bmtlfv5s71UC;A}E_Zv6^>_M#&7;Ok^Wt-7D?)D1pZ8bTFtsFc8->fNZ1^)MG6|6~V ziyowHYA|P6*~#pA{jr@C>6JpQSnw*?=x_t$KFObKD>#Gcj_4eEX20}M#; z37PrZt zc!oco-KXpE)zC)Ohl7c56hgUMcZ>bq2zcf){LxegQgNIaPHe*hJoFqs0LD>^Ro45M z6`e%D3}eYV+PE$6$RE3d>0;br6zzXApXGV?6OPRwu+R28HCx^`m_ibmHxp)AH&)`8 zv6+=NxFdt@WW4SkHmerk8i@JrH5YKChP#)RW1DTm68Q#R2kf`>2fX-Ih`Qz7c^Wz3 z44h`&te0~l9cTw4U7(0>XgiR=&s?}w(7{6T6X6&91Gq&ne15W_n6?J78jJ%>GO9ex ztvh3T_(Rf?edyqxpj4z>7##`7MLAeA`)8fbnFj2ntm?{lhz8=T?^!1cSKEwNhxv?| zi*QCV8Ukz#*EqftDbPb3mMKRly~u>nZCJP%$9hT#B*0(g{AI!^f{{uq_>7Ag9GHj) z$t?JV`_a-AKd@P}b^$norUf^7n^B+VYg~?#*I=?pc!#?UVa~)0gR_5{W{G*#wRqB-k3r!2}Yg^u|?@TbK`D z><6D=yfqzn+E_WxNT!nvgo z7*Kr6JA5U>tD$!Iy>oj|en*$WEbmzx{aEA$9Y!^en=`6kAwvNTf^1G1arjwjEffo# zFwH^E%6B2JMhN2;U*pHsJF$Zi2h(6C7OW(m(sOA%VV0Z4AC+ZN;#|hJ7eDKYvgf#; zv}ECSJT?N+i^`|s^n!zVTIc3KFCe?*Tt0i>$&knRXs@3jk8LD6w8f-60+fgF65?UI zmGLYjVV{HIe0AEb!zzFCtRl*pBGXJkH8@pgpsPc;HLniVNnx*RQii}|H<+!{|K506e-oRn@J;7Kke$D zp_4f)OV6i5fyxuqOweVZizbVTO9It;5wuP^4OxSg;k@G)q1P#12USMi0)mFFNP~)g zXLSt^+rM-K(R3H1u7LcAqu-eNxzY#V;Pj_G>sWPmv&K1{#(9PmxeYg`f|9)S+P6># z+r==SHK-B6lm-zBkagfL{5rluaUgeg3I7qLMv5Hz`R)xIq(b+g*QtP;WVf5FhvA{z zEHvVzGM}IWV+)obR-vIry<4}X+ppmG@rH;fz+WF%3IM($Q{-}>WN+^P4zx?)Kmz?u z<#!E{$tTo@&h{HYruIsz*Y#DImb;v z!+rKy#Qvc2qgRvAo}nMTlvhIaK+~peg-8pjV?O)Cj}(J}0*s-=8kAkGa=JGQfKF`= zz)~7XeCz?sx}_H*jq?Ev8w7B+6*QKBpu4e2S*PJKioRhra)ZQ!=eF}s1jY1N+!`Av zukn*WYk;~MxBmjUkv zb-Ly0eHe320D?EfBN)RE^Qrng`8(+*9q2sy*!h-ndneUR1q@2?58RKHU#8llD|HC58SB+w0(4W`D8sBcRTIh zV4iI*HB#6Nx>U!3gC5{KC;+gmx1}o!4%co)*@956sgSE=!5TeLxGdnuYf|l-;5Lnm z>1$kp+}IkSW)N}UEA%e@gnT%yKnHAd%&Fyl^s6|p{bz=sEvM1~=M-g-&Xb0xs%@C# ztcuc|!`#G>Y&zk~Rfoc}CUTJwc?Vqy4>GiSgxHpp_#)4;(?pCJX&~M9QBrtuWDGt; zyTpFVr}AaMm7JhB==&*93XF6>M6rLH5Cglr>`0{>KH4Wg=8Zu z|2Z^61W+!0ffD4PECiAq=MwhD53Oa)Nzb|}sOhUR{|-|_FnVxV#EoMm2Ii70kjTD4 zeMM@*C(UXSUPw;S4^o!MO6&K%AHT6WkfXzrrGG65<*xft8pDyY8X$Htm0M5&8UsW8 zK+PB(`c&;|l;}iEn*ma{Tx!99A=gr%o@IkaG|)=BM8=Pr) zb#fminrw<;QTIGpo*V1+fHp;kJrm^xN0O@;BtIHqk359pgmFY`v(kP)k^|bAIuPFp zoK~748bg9=g)e9@H;G1T6{}oAjf1I+E(2My~JoKrrZUi zc7oAGF^qs(fc8kWg*)!ndp<+C-`K=mhHk(;FFSH1EQ=~<-Ii@%%T@S&(u7^;3=wpe z7bX2+}Y%jZ&jS|6L++GaekWDjwV>6t+MS( zGlhM0+Jua2W7}N;+1W;dEtU3`+CSuc%&f@2IH5nd2d;!kV25oV4cWHFXIMds3B81g zHd8d&Stvj&*JQ*UN4=`CUxNbE_D<|LSJO}*Rf8hMbEFI(jeW% z=sF!x8i)6ZK#3u`GQrCu!MYu(l-SRrS&FeJ8gLawv2iFq97V}QtjnrpzANT9CIgCT z`ySA(fiR$OlW?JW69?c$IMw0+Kz7i0(Q%Gf@T(B*{o0Y7spD!OhoUeHAXQvnSy+)n z&A5PQrENch8E0lxFbleh>3G6SBF%}$)W*p2T+xGB^~xc#(kw_;$91!!ek>~WIjg4W zvR-t=4=%sWPw2{gYRd^-5KF9YtFpiFK^IO%d(}N+Oun+-Bf+cj<2fiyb`|hbEgR%g zYT&<*ztEQ0s&^tNh-VxI*rmM(^ba(OpltjcMNJ_qYVxw_S7V-mLAgei%qoWJAUsHG z$631@L%DzXFU?ji)fP*_fov3Wdqq}Wqcee}M_WJ&T+kC(S3JN8EFubr`8M1QVoyR` z06dz8xA|wD3_XsY=^A?YBcsJGijp?*r|$kNuJd~AXI$lV6!Tl2TPvcz$nxQiFS0+I zzDThFp8r$vJb~X8WJBD1g#FeNN=u8V?l_O)K}Y*RMJAOEO@J%<7*X;^p;mWk#k4t4 zPQRU|m#@Tzq5yYa<3lmURYJh!9H;5|f#pX6ziU7SbRq%2A~yAe_$&6g=z*(bEefDS z5kw`l!NXbaY6{cp_)aE=OBX;QaE6?loL7@*%k%g~ZgqpCXX!}fR0=9f`n9vaf!K}e zsmv+TV{eNe0d%_v8cO5mvcEC~71QTZJu>FJ_ipAVutsb**0n6}ti#!NxW{LHjLb9H z^MWh&)U87Mn$wkHe1cRkQBqBNuugr{)k|mF=cv@k_23zA#EKlRbl~PYqB`*30!Ih- z_Lf_^M#R1?h<^JD-)e2s3;u_i)sG*Qet_)wF&~uvWU#P<9>*2Z8WkyP#Ec_5)=tvEpeQsUT0r3#9+(dmDPCw||FZ;5m54*MP5K{IU=*}S4LZ@b*si3NaoY>G zZ(yI}_O8_B3xRY8z4u>;K6-o zu&03mNmPi1p6Z!N1OIXa4#UO0$3hyyvy0ZsW{O`Xc~9`uS|RZ(Ok&e zr^aD|ArwGtg^ZYDb99dH6)j?)X*w&l?I^iysf*Xvs;&XRcDgXdyEqXL8e|GA4Hqr)9nYvryPrJjYi9!n2K4yxw`vy!H10W{7aT< zAGKtASkDoleN5*&+6NT@3} zrER9gQ(DUDNOR%@8j^_`l1AePS`M`WB0&$#gc2m6jv{JQwg?J8z(&HQYSHbn=LVfq zVc;AbEBm6Zq*E&d=<5Jugm67)M#dZzG{b61N9(m-)q!5n3wIGhb|W(zBKkzk%``k- zYcD<=Qu|k;I=cAF_}CWY2SPnV(?xy-e7NK%u5VO+ZynaW{0;)2`tkK74ynAG_=v&J ziHASxe}{k1ae{v>A2Imr;oQ+iYyI2nIUxSVR5|Z5-e0ghy(Q=mjS>=0rQNchd6vqe zT?e#CPa3KW<(|JmdVL-Rg1DVFL<9F{UaUG*`<6|rqryNuO=YZ*jGkAHl8il_jAkt3 zmi6=o2BU_DRi@xb-9-}@6i>1rLPUe$63Ts7ax>EBI_8ejjIf=NNU-}d4#CFT5We-~ z+lzS1;#(KIMWi#da)%yE1}?V^rscpA*w=aRi$~DM*|+gmz#gD+&Yqcd!r{zz4Xb>PEcTPd?~}!KF&4+ycMJT_~_h^9-!y!iUA zZeG6-b}jm)&QT6Hc2i~=P#ZVNfNU8>^U6M?6hQ+pWfQy;*=%&Y;CYv+~W zdXX+V8p!Q0Gy}hbhJPe1J~xaw@IJ@6rZIRpFQH4rXBy)c@jVc{X@>$&#@FjfSG;{x zqTujGhITv<{7f?^D?UDN5Ojq{DwW_AW}JE)i_e3)XkRm@z~5YaUUWVLg0-*cn-HJJ z=z8&9OYt=zU*U3S^#DE%uJ}CB2SUjVxZ?P-1#gMZv+qoTm20a#AH~oZKiR)s*}Ogu z{WJPlOpKwF@PVO>6{09nW&ERYcO#Za>7r0oo~3AUiev0wJU-k{(@gvCL44To@qZ9{ zuKfy{NK{+kYW)`L!{J7{^9hF^M0CX|2eD=l2oB7Xy{I83M8(_7KN<2 z$kqCfVa<=TW@-KJu;vBs_CS7LmQbJN8T+*#%?yL?F6(t~O29rQX`4va6G4(^G??lGq zV&na6`)`OE;LOlQ*Lc6s9;j2Fw;%aqcVi^orQr$m%CuI3j779+D#_~D?nAINXG7U= z+!T(XG$c*DfGOo1s)Me9)AmxFv=o!IELURC8Oy1*D`zeZWV*A3KUCxGXYHN81I??5 zW*mOwF*J|Ycc+^}mlL;4Es73}91F2aH}@1EHoTUgU&hpbD)~ZKR14LoDSE+gjL&co z#z}Jc0ti(|3uGviqejx}A=Xf;cLpM;87U0Lf`g7m&=fr|&1cp}PB!Z|`OP-ouCcu))L`KKy7=O!120f|_(SSA9(j@p!M;wxLR3gD>a^{jO zBS=f2%crYD|EsFYvM&}ZsH-zs9Gb3;BdSr=>3Qc^bzyxXJN4OKycZn%xaIMWF?E#U zUnb=ZMED1l6&dpo%~Q%blk<5unHj|Xm*w4YgX40e+QTA9ETC$q^P({<(gQ)nMtJk4 z_i4j>vg#XC8$S%@tTL>(K}prdvhVf0Fb;{dZbys6JaHp#I;mWI1xAQw7|K-$Y4HnI ztMKWF=qIG}Tjf69(Pe}l7S2ps=L^=P=c~k9Cl9H)90|!^<9L~MKGS$>SKqhM;BYz| z7$LIF*H=scXQj83po*XY^@`*<|4(`qu~Cv57EC|E44+RB#o8Gzp{7GIFmmr%CsSLv z0PIcTW?$8rwno2<#7nJx{vHS+>=r_t{*H&mif_N3vk${iqb9Ysxi(_FwXH9i4jDz; z@fW+%j-QVi?RfY%B=i?Go=-i1Pn*PTwCn`fFcX_A4~^Ji8r|z~wyt+nkM1~M_tJX& zPTPs!qm45bm9@GZ?^wUij5U0F7*L5!qLFg_i^Ip5`YXj3XHV5yZ>F=>djf(*xXe38 z8&!6#${6U*PFn~*7U%yTKo8&V9l?ZHF5kH&-+)`n|x{&%J0PT z9fde+gs~04x)VAUIy_WJky2O4J{BA8N5oBXEHqkmfiwk@w++xn=q6t6uWnNm_#0lZ zr~C%AXhB@s+@!ypqU3c@9I+q0367Q8kY+7CbX@;7DT?cvQCy$2*ZvAzoB9XF)Hce# zqw^Vy4i7vmRy-_^=b=&ck+e79h)Ki>{)TSzx9V!7=h9Qp(t}%RBNm}!<#e02NKPn* z*aW@y3HD~$ci}t+N+uhMg@p$+l|b#=U@HElNvw797$)6Nasq;PMnpFe?dbm zhQY<9%z#%&4J=~Cu;mCb;$*xjO;9F)W%&W$8eSE79$BvBSswADLi^=kz^3@~zlanj zO28)2yeuzu2pP5jK@FTRuOPNQZVKAza6Jl-03?O#2n(SL`ztZoZF!Q3|1;WR(7N`@6-b=RzY``%;jS%}M?0eW8# zfbZLF&6qXIUrI{qwsy?gdln`ojoCO5p&{KiSPv0A7UF_yxK=mg5h=gnU0wbc+=kqP zH=+WyZeNZ0N5;?m+u8fVh7{kR$zSwlC*UkF81gg0HTJi9ge<+%G1+6NI`0CVoA11s@!fo*C;laR`XAKrbN#QvG@o zzi=hj{{epICgRs29zQ5_bEq91MJ-jKCUz*!J{nU`RP8&9?K_k0JCpID)Mk6pcGd2n zzv43JfhQcWvQn*C5mQ`+%b#<(_i_9$j#Cp3psSKD}!#H!xn}0c%AkiZ_OOU43 zzJf-kh<_087*b?FYHD5En0M6lkr@|O?7h~Q5+V#N%@py7Dq~6)yuQosd(2)&snq{$ zgqCFmre{~|ZEH-~FR`|FB=;Y)=plT}tGCCdbG(Z~Z{7fx@FGirB(2d5(y zaCmvHBKk-2V8ehh8`WzAc+lbDyj9;0=(a)XqVx!&|Md1*tin}rpw<2#d8@t|&}}8_ zoq8^8HSru6L~me1uqC6kV9^t#G7*Me_BUb6f<0nNoN_{h*(ND~jHk0(amGRRd5Vj#rKF1_a#j zD^J2JMs*Kg+5%B`G_9^>q6Uzt;>chS6%2nIDa4Z`6r!Rt-4!L$mDaQ((1pW061gXn zkPZt6M3yqF+XmSjAn?dG`!Oa zT|D6jx1g`DXd(iKCvyNuI8D|UMBZj7IjAoXEdtyg@o-C{aIw5(AKe_>+eEYu+zUBG zE>PMNIZL4LQcugf<`Or~^k#qzsHK8(#TD%&$^O@!2gUuu$i0Xp7ZZd?u9^5PGo6}w zHStWdZ~QNe=yKNqGYS4%E4KRh`&KParl1OEK58H#pc3U`w!1@N2;;~!j6aI8lG1Z0 zOv+)nN=EL)#s$~cgB+0<`D@aooC$kyM%neeNIO4g#e~CP(@2E{=oarifG6J^+Um2vQA?p}x~gX|MdHcj0f|xVHE^ z%9uJ4jSRo8lJ|+mR0fgaJxktmFvX7d0pa?*Iy)t=esfA*T_h!FU6KN;RTs26PCPv$ zX&}gHjrSG!(eC*CoDU|X!#ZYPUJh!qTlJqF%x*n6yejgOSPmExq-0zOB3J&ED$op( zj2M1>a=hq;$YCiIbRv-hK`J3Sq)tg_VGj4~9`7iau@+V#I_EUnv1s@q++1s4_zl!# zGk0qx=*M>EkMr-T6uprufo9qK0Uanv58NJ_Czb0k$Zs^=UT$gXW zyvVG#yO@nD@^PL-^fXL#Qy&Jy_0@Ib2jzw9!Yg~O&fB#u54?ZtBRJoKjh8>jua9)m zon(J>lDMXORDa7v=Ws+`#h$FPC(WGgWsjPn{mFOCVn^2aaYJp48C*1g`oTDqB8;!| z!gyvh9W5X{eK3L|YwdG3gB?2{z9#dB_mIMb`?X~vOD?HEqu^dsXBDkbChNI&Ci8KZ z1CyvJl(7~^U6$wO{av6I9M#Ycph4nI;>9n=Y~1f}Dy-4Z2QjEYwjwsfVtTG7gokUh z!<&HZNN6nwEHU|6RT;}^-sL>|&)CkfWki}Kwj}Tg7fGIQk=UOb^Hal^Qr$<3E#nQ; zmBm`YL}}{SD1vMi6I&%2Ri%LUHhdpI=~b9apHOaKctiS9V}8GsTDsjYM_~yVbg>G; zVSv!d1>smgsF-*-Qum^U_Xsy=d6FcR=YFh4YTlbFIW3aJ>Nx0!;V%lJ+fa@lV)AJ& zOiCLz2{AK4?e0`eYy%*-6Num(w7Nb8AiVItFc^MH97f>Wb~JH*K_5{HsnLP37G}&* zWWLskQS8xp%l8o~?F0+MHfkpflFs6b^kkq{TnoIfBn*5E@Z&oDQqGrc`UT|7%-F48 zfd5Q&mN&{2@P)?`(nnFW&eS&%h|fARBU^v0U~yzFkoS?~#Y}xryfYa*lOdpjN+Ca% z^93xdl_yT*<s;Z_EB%dHz??vhO&}RbVaZ5iJdQaEY5oy zUOL3ubrV=0seoqYy{S^tK4wZcq`apRJnt|e83|GbD)u51Hb9%4gol|h4GDJ5m(c#h z@Joj4F8!BypDon;(2@!YuAK92Tg#hh~K4{LJ6Pe+~#<*g*^CK(W;9%h}xmzuPV$OHIaM6;&IiAz7T2@)k{eOcOL+5(mJxoFnI z1nPdYxoB1n#sRfjWt|$$iUo<)Mzzf3a)_@B(J0UEpK2N zr{w;qcM*i&J~z*blf`5g%Lzwo3F8?6oXU$q-H9wAY$a_=*vw5Ir0z^u;Iy2yO^z zLg5ut50OICz6J~Kib4`GTr@=!k&BlgfYWT}8T0!jkFH;q+H<3#;$+=c(@6ye%%0~5 zYbxqrby30i5{&RJM8BcsgaV{u&Ipunw7OBzcB;2-Q~WB4lHkEbsPC(Kbpg z08*Qtp5S1KKuBh~6@Y?%5Y^bW=Gy~C+H zl#aZ#^nwg@;+|;$SmO-~SX@U7Vn-VDFG#107{regMn9KSVcge0V~D)e+ed^p8T?qF zKc?{GaQ)JXFC+9zGG7P`Fe;Mx@>jm-@)v`BBS{|)W>ubq9-ZmlN=S*3fO`N?pxiFr zPW0i%?v7kcYi@Z?>BeIqv=eKa9o69vC6Tsb>~}|6;c4Hy3Mx4%>iH-7|5jB77h2W$ zm-iZD{98zcz!E_LpO$)R+)5;AVa6oM5*_AkLm;ctwW^FFe5xqVhLWBEaK=0{!oVM z1(^Z~P3IHCHQ`F-5;92+=pemI1KG(ul%_upqUi&d1oP~rab$c*Tfu#YVKY-_OvE9+ zz(cx#=DQ$~P&ugiFV1yohMM(q+)GqCL!y;C)WAzDm2vcpjPq=xqp3h;Kt-V}NDH@s4@*Hg9yUphBDZTQSS#!)l0bV|U+CaPA65N~p_ z1;*Hqd<>mWcj56xB_FT= zu$0=SqM546K?;_vG8+R~f*Ny0zp7S%aA`Jy`v|?pYexvPV}uX5($#;LBu(j^xkgih<)6N=7xOOg1ASQHkDhfb zG0hpwaEJS%E41ssAdMVlSwWOy#r8)FRDLu)75@^Q`$#*r6%Du(dLR>;fQfddu;n@iwssA0v*c6L*6dsXl zUHU(i`hT8V|GUQYza#_gWO@l2K*w&X{0S_d!3MAq2ZEm%*8tu{19&Ue0A7wYfT!$l zK7{HHcB!ry?3n&qxOa_Su*_GU&%tNq7HP|{*J31KujR?T^iXsDV=J1C-_T2!jq5`v zoF)lAQZ2v2Qdi)%&Cp~Soq7v?AS2T9_@IeSlM&OTjB8ymcGGzj7;$<_>wN8jth1cm zV}H<lJ*5JRWDZMh=110rP0N<%A6frw|(UM8J>VXcKQf<+KTmAkcr%JK5Yn z>YYGW>7Dd@l!|*T2XP7t9arx=t=W6PCm~?XY|O_!FUe6eyo_TvGRyLgE!SQP2XN?H z=E?w6ORjPW1sd~Rs-!Br7%TmBaqq!>Sea&HzbyKRy!n9t&=62BJK1<4UqZiF>Rc#! zaU?u?CbtNCYOF>B|7%h2XrMEibU-cSUIjWQadf>Q^|-WPtJWmrk`*-GYRV#k7!Fq_ z0Zh;`xw2)1=mTSvnl7W%6+Jfw!*$}<@RrqLW>luhlib&@1eE@yOF+1Ho_y@nH!2_w z=pdlSXGaA@C`hD$CV83_&=^UM3g{H4MOfYs$Nwn-u_}An4~~FH>}<#)O6)WWX8zeA zb}5$J>jv~(F#!840&K`2w?q)-M6~5O`g~1pw!N????B9ez6L39TXA!O3N4}bV#@nt&x)Y{{g z!rngOTKY|}w=!OnX|~W7406VD@`Qh2y2_&#^G*t|#(R=Nz~FqWT*YYyc#?!$4#orkfPBdJy)CI^%$LBq^I3rcS~g$x#wJstIv(=v8>nf z-h5UR*MMpm56+6>O4AKz!nvwS|NgDUwdYQS&Mb7`bVOif*i%`a>m76|A9b-# zqw~R;QFO8uI&EX<&`=Sb;zLEJz`oHzhvQ%27g`SIHDat5-~FYpsT66C;t`n$<8tse zbGs@rmL*J-5O=*Ve%O~TM#K13Pm#k}&ZP4Dsr-IS24tghRE4$Iire8dw;dgNyANz! za_MO`o^SVbO9HF1;WxJv@ZLYZ0$%XBARGF25Vjw~a~y3|Gs4HMP&Jr4u&_Rqb5SZ6 z&+tHDv^!Z327d4ze0a8J@<}ymV^uO3-?Tzwen@=# zlW_-ZsyxAEm{!EXdMiIaaL0a+Hc3*`qI4f;V7M^0f( zD{4wHjb)h8NR09>#}s1g@TAtMs-ppcpb|OZ`j;aVOej|z=3EFALh~0d=W9S~>KW+#v$ueuoWooNL4W4A=FUzRT)E3vPGi~c6>YA8R+Bk={0`i|{z#G*& z!6J^gi;a0#rdRB1ZA^O+DHXUW_72m!@+6F+ZrdQEsEK&=H|8HRIxn=hv1~ZhpzJI& zd~J+|4azQ8zpa}drSztMZIh|81LxM+0$@G;8eZFmg0 zlpO~Y{6JypdO=|s9+7f1T9pT#KTmJ3*q0(1J0s&uD&xPHaj1Orl&uDk3=9KrlW(5u z`Ry!xqZ=w%a(Ewy39Q_Vbz&_i^8rj%J{Zizd?Qu90WIdUdoP3%FaRTQ{aDsao1TGR zQJ$VWZqm{~`eAbF0B15e$F$0r_5j6Ym0(*obhsNLkk>j<%AHoJ9bcG_5v^oKctq)T z&R3vS=>SxRdz}MN`k?Yq(3zl-#rl!4Q2r23TLcSk`&?LXJs*Hr0D#KI=}0fMRLmIB zJgXx19QbXx|M+dtng;$R_{UaN1~(xplgfB&nA9S&6DGBgPncAB!dA-gbl&tv(ongF z4`bRZED}cJ1L}%IrrWo#1x(B$02_R>JfDb15EC5QffB7dH ztgdSQ^du3iEK3me*$boDXAvEpz2>15)bE}GWVvUSs+22 z{J+gL)}Bo-S_brKpI%8XQ-`gi$9e^5_%$l3i*X{X#O2o~7+Yx<{+Ddi2c+wsE>)MC z!zaG2lXo3BwTUlQ+QJ`HIh(I2w+&BOY6UgI0+id$Z?H#Dz?m7seJd?#lPX72SRj#2u=r{!r40aICMLvxV&nN%X zD3)_mPK=2b4@3f#6k<qs;Z1ld_wfI_;kFE*od~oUi+CECB9BY zS&3Y_lN11n1vw{FDXi41>tp$Xcsh#OnBUD3irRA9#@aT=@2|rdH$rPDXnk6xG4Jfwn0>{( z9zMK=5B1-t!yoORo}5>|$(Pq=8@e`3UVLnXEPOQPm8Q3<|30;Uo24k!S_<8WbScpq zsZPwwDw!VROa*MhbRpIAOLxtOw)eRBfR;r*Y!E9TQb!p|{h!mxhYKid0nohQzqb;fXEt_MQ5D0zZzE#C7)de7R1){EaV#_)}~5dkyx!Kk&0*99O zDX}eSPk$t~{TV)(_g6Mr$Kr0}OHEp($}`2u(^=(F7QBthbDhd_vE)H8B{#r8`o6wfufpd>NkIQ%OKjh&M=JaiPGZW0{a#9c5Db3Y6 zMHlJpwzPSzYc`A62{kwO@hN_#d*9vV(mmZZ-11pe_uvb%J>66lHI_wAW1^bV4Pdos zgbS}wiYHYc2+LU4P-MUTiQ8B%5}s!*-4%uu;j>%gh(~L4Hz?}k?r?o@M z32suf-GA!iC@BF&%9EieDQsBM%O#Mq{cnGYlwx}u7Som8XFMcEXM4mhi;t)6nB}>w zt7iE)xsXr1tU#)^%l%eG@zf@4-;`)`uMkc*i|U1c233sW0LkvBu|;!N*q*9;5%hy} zFD=h285-4P(_Px3t?dUfmKG?M76_^VwmN`l7SBg7|5Ge2w;%b)#ZvYPS4giQt_eGR z%X5T-Wanm(JSv8y?(biyjLJRg-6Y6;&t-oK$r5|_f1*gPvoBi<3wSa9)Y^fUU;&SS z$#>0P#{6BL=XfjTKG3$t!c1BC!K|y=>6N%8I*pY{o7bj12V?EhsZykH1;{#9uAoa81t5zxlA-deEHqVs_!+x%(o^dV-H~aW6Ydg<5vfv6PVgU?5^4? zYv0nL$vLRl!IOcvqyr8m zHo^u0pdeUtEsw!N?U6y?b3TI1k_THOGm`Ve`-0)0IjhF)%uf*U!8zX;)^a5IsCaQe80V_e-omER`CIe<|JQvBIP`}usB9|WFm(XHEH)R z6?fnPJUCCc5=gR-TPIIF-hr!a%lmA-=juf@MtAlX*Q9NFU!ZKp<9~%Rn9c|{)pEMg z2Mz|qUsF2ek-tj^SW2H?P1Ar~UtiDQq!dJGqT%IRcO{dW@P}sop1wg&kI5eX3PGAy zWEVo-B_0Z6Wc!*gm5qlbNs?PMjp|RC6AUUhA>Y19Nq68l*5(z84MO}7XkO6)84bOH zhDCZ4E5}j*phAeI0!|w`W0{kNfwSw}TkQRq=V%;5`r2dM9~<3ki-=O`c8|?b8i;jt z;JQX;3ZXk2BIk;L*+W^w5ZX##C}+cj0uC>Q0K|~i?@l$nb)bEE%8`NTla5U04k@Jq z&dp!5GdAJ7_Oe6^;E2^C38UXxcwo-Gzw}P0pP&^ObSn5!8xGc|v#0gjsr{(PrE10< ztyhi`pr1+@>`f!r0c*6TYmdgxVl=0!t>~)trHKQvF=N|=bC#x@2i7=O_BnTUym3%G zE$>~&6UBD0=Mu>5v@ufPw{OgA(#CL(nMfGt(1R%HI}xcu7hFssRyX=O_Hk)SYZp>Z z`&i=`mb1f~~ zAptF$;$@2$*`in7#`gpn^WaaKJ-Zm5R4}|!yZCuYYP7|GR#ep*Sp=y;^8r+dF;vmAhCpzy62R{5HE9Lg0I^da^(56h6Sl z_*N9VQ6{eG)Od&1NvQxIhh8dKm1-4NDqiUlMFZ@hdRL6HJBJ=r5vNI{aE^ir3gPg zk~2>*8znRwaN$#uP0Tj&rH~857qgXC02f-D;-x8Po^c>;3ZkB;mVQTXK>de;8u}AZ1Jhq+an)+R=N54`goHWJxHe#U zemUj<9AMb~+VkQppH(78uMR*R!Dxm!q6M=6MCP2=k+H^RNiv%q&fS4Gi||v#w%*id~CggHlO6dTXGD4kc`wbF!++r7a@wR zg)i(cSSHi{NUrCNHaw&iQ3h}`;F(bd0h#`454%NMF$V>)tj86OT3on@sp(zDG)jk4 z@L1?eHRj*N6%Bm61Rr-yI8X0M$DlUR+8^8(fq#!}=fR9CFpu=BkLpjaL>#7=S3-yB z^K7a=$C0pXSwtJdonhE^&azy~kCZ{fN5ghp4%_scfP!sOpvWy4OK2fSPBWSV1wsKB zoN+h+K#?|VG@z;i=LF8f)W-4sw|3j@* zV>$W6m!0gA&C+|Dn=B_6A^cS@C*RVMSnHJ*EYs3*pFk;~B|*4)jaQl#Ugq$NmA3bN zQWd`johpT#Kt=69qg(+q)~RwOD^xjY!+H%`){>!$;1>^d$$F zMY3Oi5GY=OHXN_;e;Qw(gD-#B?@)VU_#S(`Tc1x=_})Cfi9U}XcTjv=9}>RjaveLK zzm_MxNKFHfX{m;TFP=$u#|mYdU=`3E@&>P3f0D`c zNwAj72FfILD0j?Q*e#>_Wv;SdXXV=@?r?$BiU|)3B(!cN2{!*2xJTXKxXcjBJwbsR zs=(bYW>SIk5L~b&a6{eT*eF7|AKoC?{S4`#ba+_|yTh39#}%42&0&}12FDf=%AKUZ z-J`%AUl#+{j^O^)61Z1of?xAafjeD+>!H9celG^jAh;`A0(Z3=oZ{VA*9)9Co$JD`1Hsk*tp(mKk=b`mEbUq-H=w{73fxEf_p-N8>+zdbb&j9;6A;)1!6y+ z##R(3*%1od&tAdK;{xX;xayX`O?QJ+YMi3L-J`&LxFkmGkp$PfC2%=S!Tq~fc-KRL zt9F6=o#1}BtOa6!oa!Q0Np`dX_enb;)^@duMuM9a1tR~5>=R)GsEa2=LL<&)8x@Yh}%V`vj_ z4>kptroeSm;1-LkAVx4Fh2W;O1a6QU8~^~jrK5$|6~GmxGsS~Y;6y&zQE=RQpe%ln zyrX>fRk?^&;+~+u6)JFHWuhq`6!t8B9P;UXTTDJ#luu{Y?Cl{Hx#WXO9w?s&+;u?e zK=~L|$G4CcP`>=5C__6_(w^@MV+_rT%147U-Qd_QhjN!(CmaYVa09-KffI4x-x9bz zAr}YGzXDvD0@p=>J66K`grS{9+yh$z_q-b%tPQ}OqQET%dqG>nr!nkA+`BJnf!NF3 z;EoY+pIxbF4L7xO{tc?#G}0tdduF|Km zbR;VQ^SM&GQk8yIm7c9ie}9atG<|;ig~ZaVCzN}EDqW~bzpF|g>v5Il#!UOh#L~Y@ zX^$%1MwQ;CN*8`kNobzat+RV1mOfHSFS}Z}_LfKJZly{;xY<=2&Q_AWy+;Dwo1Q1; zVO9DDRr*t;L1O3J;=;T;OTV62`Wq>Ikt*Fmm0qh#w{7hzEp(S9mVQG@dsXR=FcyHs z=BmE2esnYi}DV>~Hx=2bts7n9BL4MdXQkCBKpsQ{k&uT9|J%MYB z<`VPERB3KFN9lP;gSJe%%~e|3cXeXvPo;E6Rr;^0^m0{t;9ytj4Awm`vGlQ0`s*u& z?!#2+wn(#I8W-z`GO>xK6DGjD#Um2jgifj(^4;Mw^k`}zXNCg#1joIW=h9cj_7M)w zYV`O84pa#iE;HH*X<&;dyMU>Fv#$as`{*ps7#Rj0PGGG8Y|ZePk#7QQyc?LpY{wNs z?Ds$urTe}d#ViG{Q(FSo%?(U>Lr*JU(-p8OZ$^Q604yg8jALx4zW|x+FTR-MB2)Q7 zg#=dSN6DQr*9`?d3m$|va2W%WumzZe^{mBr`-A5&kz(aOEFV#W{U#C`KF8<17}(n{ z;4N|s=i0#ke<9%^CLE&@y3RvFm34|CS0cyZel_*6OL60A3cqP zZF7;Zj3J&@?&Zw!H51BJ!bax!mxIukBr!mB)>%F6u*6M8Y> zYDw^{Sqz?LAORnLdVnHC*KZ%g9IaH2uf9Q!R!q2m7h!lZ|AU0>&my6>O85mHm%WJz zYj;YHMF?cIKVianm2ewtd6x;ts)U}eBjF_^pxT>swb}M;=9tYJ>oGjWsLHNkLY7K+ z2s4HDL?*1{DZ7^EpG+9Tgc6mohze841fNRCdj$ytk$_tKx|V?5n>ldlGhrP626A*| zLU)yLF&eJjo(Ugt_T2LHVM1#rT(1(2CD0wuAfc^F_=ak^nF-JHf+WlHJrhKHhe+-9OlYeT zP9uy64zT8;<9?0b2eD ztUoboK^72jnHUbw2<<&;@`2#a&Tx!|LT-)=j?R%3j zM3e>0$uI3_MD$5|QrXiml%|-EOqh?X#e79AV_}l`YJXb|)Q7Y@pErIOaQAb$DV@tr za81=c<#|+T1O?ZXb~olH$jS;5wcs|=D@F2wuUZ#jWCO5K2Z8y@80 zTiB3xUfI8SPxC9WImI~s9a{ZzOmx*l2d#hm@vOh0>i?wvkq;iU{#&H}8~#lFqZ0WK zOCkp)WBqq@PTR8H*y!0Rdr&KV(YcG;rZp(V3}fgRs>2h54133WI~sXLlds`3>?&Vn ze-i>D-0Nvo876xPIq&Bk>TTtgY?;4)QJrp$B@1qh(n?@dKgm3Zs*s3DoD5MlMY_XD zlzj9gjy|xGoc3pEW)GIup_xNtv%a87^^)u$IUrJ@nXRr!oK2UIOw6Wp&lMvP1e?kw zL{iVDpO4T?yG=Uf+#2LXPLghKp+Yg|Jfk|ugm9Nge@F5EXMLM_Pw zo1W=`e)_my#XfqjYES7n^DIC!=ZBfgTx{RP3g2rNWB-P8$U(`ZM&g0B_tXb3RKT3DmH| zQ!HRi4Z}|FCK%9FK)Mhi;K`azXE1!YCu@d^==~%et9h23PQ8!X+K(xohMAYlYBd&-#LzD}e2}MYW6ut!UZd!c~%eVR<9O6#w zOWI@1SVjpW(jh>?5Fw?42J@i-`G`u1UhtJ-Ca=LAIKT6Rq`P@BaWH48F>M=vK!ON% zeVMP${d-95megK z+46%@gkKzgF^8xWBNPtM7;N#zP#HZ>Ap=Ea<%nO=ZBwu!YE zO=$f+aj-)jZecnZzk`TG4u8cHbb{dzBj0j#TjRNSmMHc>J`fA=3hLlLje$bS3HQx5CiY}nHYznELwFL}oy9L{^Jy-0k3%-zK8fl=ltw7Zp2eGiK9 z6{p|q_DvcE89!?9s#nOk*T|@h84(%Un`%sXnF1lwCU8A*J4wWe3&Tf5NtEd(9)F^U zL;r*mlMG)Tj`D$}NUhkjzbxOFSCAa~rmkXdMOiLRe{01+ES^7$bBNlq4UAqEfLKt$ z#8X>lM#Y}SvUTvwlS7-0iap7tui+q;(w7?E2a`UzPnfh4j~J84NpQ-|B%DK{ay}ZD zvne~@Oa(XW;>W2?N0&pJzQhcSOPiYPPdb*fvkCgbR*a4BQ+IIw6Rb3ic|PgDMkB$f zzEF}oo;N6nUT3{ABMI*ndpqDp2J!S`zHiH zv-2@V_^#D>$_B&533@PG6hB-n;r@4UaheB)cIMz>r+;`{ zOr8?r!sw9LR2sc9U-b>H39`KRqrJX>_fnCe*PARC=z?Bq0P;|%jbmG~9$ByQOO5>K z7^EmYh6CF#g!fj(_gI(tr6QoIk*oTDd7V>-E@vOD6`2-NBwx&2u7oTt|DT`I$!+4t z*^>X}j+HsVnOvPdsJAyOgGR2was0T1XV~l4f-0^Llmc#WAa@+H7BH8wGgvVj{qby{ z$;N1sUVGE)pVew`YBT;>I&$jw-NftQg-Idu;S2=VdygqUr7v8WLIgo}*lc(AP@Ni= z=qZdQY!s?$iA9?&yhnK>^FQbPD2Czdth&P~kcBsz>= zGi265e^cs`*b#H$NmeXxr!=@vaaa>u7{PeQ94)soux%THGN5q$tG5f}O10D`N0j0i zB1%`VtMqLU3)Q$BxNDOWO7WC%?V|S`&J62l$3ou5Q`N(PTzrP=**Irnyz2Sr)uv%b zZPb~c4Yi{-PD(DTUH@vWtuA{$p8tuWGgI*EYLoaZ_;RlaMEL0G5Ow+62zeRthBf}*I;i@}7%dx*3lPdb&ggO>mjE&Nw9>A#E<9XYrEco7a@WH-PDw`|X zFaKe+)JkeqB&Jo@tcQdifCk$~+s}js++i1H0eJtN#x#c*fBFV114a924@X6Ml~pN> z*2t}eFbWlFa~ZdD3xug9L~4Y=Y}O{n?hIjec7z!L(jm;vlv$f>+8OcbYQ7Zdy6mVd zFw>k>#)zblQN@qBi%qAj(_59*RnOiC`zGzk6D-@AJK z?R@dqbA9o3S~<{Im;Yis`FZyvR6Rshr^moKS&^S5?8}Lq<5(u=e}8lhqN3V z;qj#AW@mfI!xbP8@d);8sfet!`lRn0vYUj$weiJ&gSQQZyN(8hqa6yL0$xz42q3&Y zI^^wxZS&W()~xM_Db#g*J?TbxNZ+NXISSj=<&HJ zv!h0eQjveoGe-WGE}P@Fa2~v0SkaH$5VW6-GX!(Ky%79He2>pF4Inu9*)=fo5nqOp zH&ZnI6N#1}>*6Y3OZQ9ty%#qrf&MZeHT}Vl(Z2uSC!X98yldCB!C$$WHdc3`k%!LU z)bjxIhYV1e--dIBvpW+-mDUgBAzr^R|H7S&q(s}bQ6kczj|rA$IMx0&m9*vj3L%gW zbvHd};{dt&|MsIT=O21uiPfL-+pT76$BWAgZqMd^=9$6aCqEqNs_#>~<)86|`G@)T zv$j^wMQ;0<+L9N1EnC9i_2*ys)hzxN>lnYjWx%?5!COBR4mO+L@TW5XH;2QYZz2Cs z4}U5zy0l;2hJoppR|Fiqe)0={(WO@TKn#BE3-S-Ukhq+wR?O(qK~ebjd}9IYZ-S1{ zmnrrAP-8B^r#{#gzW4eI)<6BF>u=x@&6LxuA5^}2(oV%z9aR{;_6_R`_zis$o7lGU zJIa=d^vsoduz=a8x=pG_IIpZ#+08l6#>*6q%ZADPf{?1k(Rs)BEt+0#p1BV6awz|1 zS3XLzXhHw-)29&nlTyugI@6~T^+S=m{$}*S)dkVSOELuM$W{yeWCRiyIz0iJbQ65P zz{PY*wHl^VkS8{ch+cWV0D~3k0i(1RjFN$1U>W;?u^|VHoKm-qUK#bJ)==uBSDS8K zVi$0ji@fwHBYI1v3AEwV4}Ga(^q6CjbkVu5GuN1$LBWL3nS%gEKZ~`^SNmyLD`iCQ z;|NU-cCxVB1$^Me(0G#lMxU&ybV#YG(KS*1oocf&m&s;ee{tUGA%ZM^vL2;pnW8ESTCjH{k0YhsI=ML!x?DSI|fml$<&>p86J@dkpk@_CleLQCR1-*+|*z z@%#_WUee)k-8+RSU&%O=NsZFCm@tDTW?qNewpdZt)GS_4tW>Wpde!At!!b39>Kn$= z7*1+Pew)Zi(I-36b-=&q&@R>S)N#e^ISmOX5*$0<5>{}kLJXdnrG#N9)vt5$CgpaJ zBo*I)ir3Lnm&AgXu4Yu>sd)NwkbvW`GFZY3MZ@O#Jmy9b1h%{scXz)sS}^%t#HoV+ zCL>X-%yKz1=@!5-H>Ww4}-lJkOnJB5dpL4vCbxb3Vv zF?A5-?g3314UX2`2;Cj7J8@w!T6dOiAMQGX7p7x~$M)+0_0wm+mVou!pFiAlQ~T$c zJ}dD`$4FxO>>PU&Ij}ve&-T-;7s5!_E+unMGd(0Y*ak`5+71T z8?^lfV>lBXaavFJM0>O^&2Ed4zg9FVwtX}(RiZ>J zSg3g^m}TgtKp1KVH2D?TmFo7;m}6=CMHPwagDa(EPK_r|M=Pyp+S^OrLSvn99|pgM z6{(wn=4jNEu{GN}E#neq_j;93hZ-VGdr=He)pb85P-iBjC!XwPZE8!Uoo2W)n9MuW zY34ZTj#Ol)HX*sFkV_wU!iBZrW+z#AQjr3e<)hXwnqXAwr7yGgb5V@nB+~P|Nc*A@>8-s;OAtQ2!pfIOZ`5sW`Cll~u&pl@ z@w!9xz=ZXb`U_WTIi=n*u+%T%8%R@Jm-3n-I6OyFIL#zYp+osX$?4-8Y~vwe%W&@? z!1eW^=|^uk)8D{NjW#f`HY6FPsNVk&(;IFg$W&w`@|VknpQ69og|P$S$ELo7ib6($ z=q7S)io$up-iP#}?MQ)WTU^qK_Di2@60Hq_`BT>i5pARLprZZw8YkMo?+1p#wV&aI zq_f1DZO;+y(-H0ZF&RE=hVrWR+hF0lm*Cd;OHvx-AeUtgyg_ju~Co>zQ#*xY^2 zmXV+0j!%C>XcS%_&<#+d>P{tKB0r{T-9;SlE~08uX0l+Xx^%%#lhQRrgnv*WAudJB z>{RF)&TtMbOMa5s#*nzd2Bg9K(x7mTtmrGu*@hDFEp{NA zzYtshF;-X6P%!I3*7?IcH7Hl3ftxv9_3>B}PmklH0@(($nqWI&DTsA9t<#^EZ>MAy z_?<5Nc3lHPZINRxHpOtLE}JW4%j4&;_?sKlvqC0v^i3^exJOgkPh4pWwp5yn z*+~+Y)8v7{I;T6e$DHs`_a){fq$1yP_10~v-YugdXgC!mc6i?oM<0E*(#?l4UDCG3 z>EJt^pr^xYWa3eNyyc8Bp&1T)m8qh0dq%-jb)3*p965)3oeVQWaw7Wko`Y0eqm2o< z?{e>(#6Ykn=iNy9x2w@KfYr~ijyXv%VEw^4HJQ%KN*=mFF%Ye}Fh4!KDdh#32`w1M zF=86Lx&No;{-Sj>&qNXaNAg9UutP=kp8eR}xw()oF^y`{$Ccf$&jeFIW>jSd~tO7(n0%BnN|`IS`e zrE9g|K$;fn+V+?TX*=AZ`n@NTjx71PAG5sipb)uF);K(-i*CGJD@;%enBH+b1GV!S8$mUIM-D4^Qt_C#`%A&br9O7w%A5DpP;H z3Q3XNjMZERlmm@TeGv?a{PSnNQIC%v*r>-Z%Qh_Sx z`Phb{r*)fK{+4l@!Fx<_pdkcf$<p2^YeR|Gv$JB1Al6Y^=*~Jg>HSB$2 z(+<%qGdUfaeS1MH9|$7mu3wB|tq)5g=P`LOzElSClfG2kipa~evJGFM+rACoVL+*C za!Uny>d)lwv8QDWN)HT~71|i)E!JtlRqs{wiG1iJSzcr#ANckz^3lLeX&3?ldKVM{ zvo3^Lm)fc>S;MZL5RV(M?wgmK+L)*wSB@|+VkecDtS1z>DHgrbW;2?EVMi}en~UDE zOW5@}Zr5H$f-xY>#CP;23~A`drUuipk)OHzKhMn{GGqF9I)QTT#E@1_2wQKU*ij_Z zye>-O_!RB9#K1<|vWdw1IbA6u-ymHnW3POOJs?VQ$s4XK6_;9ovj;>;P!&^9AQw$d zR2S_d1u~s}RgIz~`+9vPt1j1jsa*%3*ax5uLtKZ-C0}H=FjuMe_lMF`Y8d1VyHzWL zidnu}wZ6Meo?Ot=^MM&C8P8j`rf`4<+KF`f&ia}lWx~n$O6SX_FR2XvbpfjAOc$4B z_rNZNVOH@@;o48#i0Q588_|ErrBCCw>}nt(374_Gf5v`>tA86^H|=Ye(*25oz2H;k zEV}T^?{y~~5Zun4n^5w)?sm|-mvlEmcgu8V>AJY<48C_fjm(aB_Uc<3FM5X@#8+dA z$1q~f4-BZ?)U>DW4*AiJHYG?GmHd}TRrLCKT0^_j-ooWcQ1IJ((dS7O#KFCP||Doib(Fjv^8bLa1s>utrZf{m*V-{G*;=2V)?J;9G{OqnOIcY=`A~NR9lBdTpt1 zAx71|vJTu>P64A+@=7?Bc@MgS^jakP^a)WMXk^xt^}J}(j&zpO_*dR_-N4|Vqe4x| z7YenBmg4r0KJu>OGuagBqL?|Obe5)rN`Jg-1$G{?NCQLZdQn<8Qc*@0V#7L3tarw5 zMeq~@<{J5UD!7&@kHPo&=?r$50zRMrxA9p`J@8wN_^nd>hSz8KoIRD(EWzicxG_^k z7(TaA+Vrs?7kqAX_&jZ97N4i;Hu)dnbJ&w|lW?qWVy?VA+Crfcg?Bu*?GzxXjRV2# z%Y-L3xgW8O_XW!hdFi67KlIrCb~b;y=%CL=Q7G8nfE@hi*#6eJ9^0T?PSZm;Qo)Wm zhr#>Ybp}6~1mb^@MSMSbUR!ARosl#Cn~t=c9s@G;<6ZlN%{9h)GOx_YUsE_uR}S0# z!1LKv*@Wq$2eplg+7(l~q8;B?6)0Aa!P#`l@x_SYj$sXxvKgr%79UVUQCLG+HetHR zHfm7~567&Aziayp2oiI=I!-m*^X-^xL-*Hm+7PFPV&8^F*M?ue@7wTbHetHxM`0VL zxf;&08WaKQZNmv+4asaq+E7CcF<-+%S3_-BLqj%Ux@b&T!=~M>4R6p9QyXe>+OYOC z--dm%8L0t5%##Xd)V9#B>7u{e!VdWJ^S#5yri*5UHQeB8_?E9>YEBK;gf%>#%}5QE zIao4mrHeYk8Wv;|ri<+_+Apl(tZYVVV1-5hHtZGFa9B2Bx@dA( z!%MpvmcD5<$jvaVG_E*UU>z5AI~Bg;1gswQwsG5ecHWURRZuchh(S@d4@*>E?Fw6u z-y~s%F^9o1XIf5Yi0XTtG_#C<{(esOxXXS=-|Tx0o*nC!7yLLk`_?Y|xB6y(=W`b& z5D(W_7b|pFVhY1qXuHzL(SXI+y)| zzS;K~JiAT(`AKf}BA0!yzS)D%25mcfBQKbioBg?6t?f2Vyq9oy44z$EMFk^svtR47 zyD{2q+rKw>_7Ted`Z+mmpX#z#!4YB`sl>O%1?Ay8Q-Lg`>+1GqJXxnX2 zydgLHimzJRf9kWNiB$V<2G4H0=j@T2{Rb}l6rUXtRrd1+&n}@4-kOoq_7h!pH#b`v z!m=MYcy_JN3vS8HUgEO)uQ&H ztea~)DmUv-EbHFN8dFw$mqrPdULa?Rh2UJ$d(%V?B?^W!&4AFa>Iy#p4)>k9uL(Zj zKBJ?%^;j9at;Y@O3)tgJdi<4tj0cbFahiXe8r-MHZL^QR)MJ-*7+}NT20hNoJ|^{8 zmVLZLkAK$Oaw;khzOTo**~e*mJS_V-Nsns?S-QkW=<%lPe?Fc)}>e;{6#5t$fj7V6jOsIvMH7Z4=P2cZO)Nh7FHA7 znv>!Nr5KS-VYS4AE3+w<2Nx;@153G(#)5`yilxDcN>PwaVP%vDM`Tkh4-Qg_R<`d5 z=1$;_*ra^>e*Vxp$w%Kc#_7mDw<-{ZWq^4KjXQtzE*PMt1P{yuFM9V3b#x9W?Um7F zZLN0cpS#v_|K8;` zzc*P_?Q;J;m6O|)!e8ETkZ0@eraP6WZgRPQDal9{y`e5vI+7ZY`=kEq1?^W z$oWH;b5Uzfy(6R!&hDS{7R&kRj>@Ti-cOVhQH&vqirjMtPbk>OT`ZW~?Ilr^u5i8){g)c2c*5W^ zk&n5Ccpsw#3vsY8bxCl;DeEZ*Kv76|Iq5rFqa99FpLr6}ioOKq$RODE$I_4xk?^6^vhue1q`H998z+K9&7D z?IRpy{Q32;eQsp|Z5otYwpDE#U&w9R!)n?Co?HH-_GS5{A2PA4dBFm_o8am`HU4kg z=lP{yZN@DJsJ5N^)b_t@pI>QV{L-&RW0pl{Q{yj}=VEj-?X!69k7RfL!~L%cFRSa_ z|7u7f`(F*IOBD>q$_+29t9sIJfMp>!X3$_bwNiJ%CEC}SZ^JM?w*uu`}*>` z!GD%|l706JNk?wDO5rx|uNl>+-{=DUIJMUMSj+$;fr=Rq>Fe6)?{x%PhuvprfZAFpAp zGZQ_SN1I}zJg119YcG;h`7rkBMD_Y2IYG=^G1v;8?tFk&Qyu`WjV>PE^Hj%E&AVtS zy1axZ+)#I(lps^?*fk`c+@VZ^lR<2;+rqM@n}cI0D>(8LJf+{M&5WN#7SHu)u^~Jc zI%Y1d=n@Oge#wp1!&teV3eL|r$)hUO3$Te*nL`C+`qIi^Wj)pWof_WQ zPBRV(9A5YphYyH8LB3Pb<1hON=(O-lqB>87Mmr9dze}Y!MevYfY)_8YmQ@6}#%m%W z-szu5SjwSF$$*R+Y`(a@2JgM(T0H|yL#>k6J`%M^A)KgSd@(uc6b-c)whe*{T+cS9 zV9+J5>>E@eNQ=`+91QuH^QS@zK|VxPd9I1_}0%FG|+ z)VA)Xb{3Q+s(-kRbF=w2g9+F`zAUr5^)U4!eQ{y11G&2c;VpRJAyqGesQSzrI+wvo zhf-ZDcfIz;2tHe}QIi8GvGGAsAKBf`%dU&~)3$WUE9*iQ zP+%a34sd~!BBNT+GuyFg3#8UK=O`e;BthOl_Li95#Px=`^eq*6(VMNi086GVILhEnP;i6ONU^w|AqEUy@XF&= zFV0DH-meB*OHl&(JxiJBf^N;mDv~40V64Jm-#=}X@bMVrJ?IG6nEB8;Ihw$_iQ&)S z(38X(uVn7B*C&H%Mnzxo1DLz;(I%U&&s-v|`Q9Orx`aEk!Tsnx+0lDyZ=c9UIYAHF z{Lnmp8uJ`|>T~GxX#0w2yDe=^N51lc8*K*7%qmhYM8K%F#|M3=*4wf2r>vFwcv_B{ zZMw`5tQkN;amuDaz50GXb=@FpL;A3T77Sw-U4fc!KUtv{H3QXGJ{4!ogV# zd6hPuY5RGBgo$wFsWcbvtg0_=+SA^bM(?YMRgRA#EPeMwV-K%?#*@2xbqUWF2ODPP z?BP{u^>i;9{Z#k;E}hwOL^|lYU_iRe#gfu})TD#Bv-Og2p}O@b2Yw=-JXe<2p2vXq z2iyqjLVtxQRA?zR1-ndC#3CCQNUW(>c^EYP$olG#!g3v%TcLvsE9($G zmhpGeHG7#+D zbD2pZ{V$H5mWWbc);-XSR2haK43hKFwGx$J`bfG%92x8`>Ixn!C|Elhv|Vaw8^r%j zPbgdM<{L)j^t7#6sNBgr{mK}BMZeu`rTPg6TIr@)0NAZJOJbxC;WPlwdpew<$72m? z{uHKRqRCP#-|U>IJw7)rT;UgyFa_|M9iUlt!7RCbveYZPe$uW;C{#f{hltZ+d7@0+?G9>>wVf6oCymVY0*zhrnSY zz&D)@9r+B?Pb=G*Lp;ln5{Nx_hv?jC(fpdZO;Jujn_t#t6;E4+urw_z#Ccuj_CPQW z*IsuIgK6#hu#2{|qacbDC!yrwpSe5iHn(oK{J9f$qcABY9USYi0@~+&j7-Duzq(gw zN4uOc+_@cQk&H-52CK<&zraXN!6N=+s9D5+8C>C7y(p`UVp?gGsD9RccN8|Zn*u-~ zsir`caPNncYZBErD|PdCvn@@Y3?Zh#dsFHY)mPfb0|Yr7ek@K}Bo@=033wF=Dh$rN zXNDzvR7F0q zyJL&F&D&EikBy;Hw-u){VL=nTOC_LFjAuIhctYf-$JCNS_B zY|qYxYH>_m^l}{UQ-oeNhGYk=^O?#3G`0AGBX{`}99O;Ad}8w$seT$U=7hRbeqE{- zF{uSoCV15*>pm!)#7{B%Qhbo8K19$oZ$Bwnz}ysA{i@FVyv#=Ne{wOtMQ~r8m}F`9 zTY@*Q`!=?HThaZ4c>1DPtvF`A*1cX&8s^|L4F_CMF!gM7WGW@d&3as<5!fNMlsatt(@;tR^@o@&33WkID)26bEa39_>=f4mA_X zj^*Y8-5kTstX@CCyb&EebAh1DdJl{CrNuk-+6+;c@^OU3(o1sULnaTlPOfi%*@{KTn1d(GokqI3GY=ke z%-j)s!5VwzkDohdFAUE_?BNMS6)5&I>LT+&Ln!+om0EC+mHJoSbCmUjJ%{jHx2MV; zvFC)jBMzEdcM#_5Aj&M*lj8QI%xQa4X4oUGlVl>mD}#^XCcv3POgMQJ1aJ9Q!}Ka0 z8G5#xO0I4XeK7CS6$gj=&`6^(y>W-FVArYAF-Z^#O%|2-#96Kc@f%1!8;$(=d9H&- zW+im2N@^=c%e`WmZls;V$%7?KTMQoNM-TVu;dlPw4n5rJ9~RhkaWLOKvqxl*)c1CN zI)n4dk*22xwyfs*QNKXnUZRHPyARmbxLZ^ zdxcX{W8SkOp4WFU+8_+p*CjVjNsq0alA5-O#M8>+x&yh4K}|{Ru&FL}YOF4GW@#PU zjwaINoWwSKiHlW4>QrMa`_d48sndlmQ74;g2u@BN8%+&kj;5|X z<^tKP5AF8VV2yhfyu&qk!#}*DhZX#E28;GWW1Y+#4)5{w>Ayy=`h|G1Uwl6j+$s;J z=vBLvEYl^4dt#gf9~KA082=H^p_=6{ri-S3Ek+s~;h%oyzM$cYF4$4s1*Tyhx*j9k zTrMVv*~Gkb(Mcux29Ju}ng6D)#7wk&f}<_sy|YbX!2$-}oA?7ISiHJGd>KQH4B49Q;1Fy*2X&-1V1W#w zH)l_;UHoQ&w8`*7w9Sdbx1OBZb@<%6A%zp>o;YOdiRlr;6V+2bRyz->OYS;k{M@GD zg;>ksTPLb3?e(^klN$RF1PL9!t9suIDox`$!xJGgu^C5jPP4Yk1f?OD3J zO_&wW2}=0s40>WTUu&3qN#3vhKK_Mrn+bf-w?_1(3+vQry|pg*BLN7#Hx{f=gFpoV zA2y?8r`)HSN9(59I#LZHQ4J)D!-tXcuFG~UXI~h0EjQLGKF2O4V9$lH3&l@xp>KO| z>~rC8Qo3kgD*vpVs#W$8aps(%^HUG zt|r^Y@~XdEStpjoTMzrZxx{6Cig(fb#*?dSY*$m1&R7Foe1WU1dW`fwQZ9@6!)Ekr z!KJjo0!cy~$$&ZIdg7bOuxX7@WDdvtE|-2UnQQ7aSKWcoTi;-4yU!{`q1zG+w#MiC_X<|UV`)(@w|VQ15Oh9YhBO!P<-2-kGv-EjxrJQa-*BTXuE1d4E+FRbS@zE1?{s@vy)bL%D?PRi zIA~i_E_Nrx9@91LuV}}qJR8<<-z)TursYSk-JM*mE%{()0}B@(P@>k#yr$h0u~L@K z;538A7u5Ec$|qJjwY>F`+PvnK(smG(WipAD;$h7@wjFlHd1udR-gbK1B?af7)4Wyd zC0m`{^n3LgY=<4Ry8;IBkqa<9E($-hO)9r3GisZXVux=~ib)+n;APi53sLitce0B|gcI&ik#tq%ZA>kNQMA ztb}{=z7bFFdPHqvLw>ZqffP3AG*Y2wDI9zd0jl^rnC<4xdeQI6UAZAknKq^*+ zG~v+5d|%wDaP>iEJ8_S=A35ycS{i-GhJ(0ZSFyi15kb`vpXtoD7y+wBiWdqUIBp-3 ziM)$;>|tMIBMBv5GsK?USitBNqgVBARMTC+u`%V+05#grq6=`SF;G~%QI#8_dO1Iq7`7{iytn|-H7v(unI@0UC zc5+er+Qg>e(T?#19%>hzd-06(XE&X9#-ysfkfw2MmlmG;ooM??I@_d*H19C3?eOX6 z%=}LCHse|^Etnl`Uq-on8QT065+8o{dG=ulAAaXP6hzZH)MWIk_EpjL-MO>*Hu0WE zIp85WPqP==S2b-P@?>kvP!RbtFx9m8G@V(~{&CZ(FjS%|4LoA#8m zB6$KZWNPb!CE@*K%BLU^DgJ)Yz!cQcJW+LIO9KU@eQ1!h(zX~WS7~Q(!(d5#g@i*W z=on}ZgN>H%u z8}bcnvLUA|!86~27NUbVDV{7S)6ko78lm1oJvbIZz=8+=+uTS-5ZZsD)Z`K$sY3A; z{!*m*^tMVP*vYLe1+$xvm%nqUqdkV0rQaVnSM+jQ^3TaPYLl21~zp-1e<4LuNORu;~VB|2MjCwEDU~=ts6UIaPB2pHO6|i~8u& z;3$+BQctwIU1F2fqW7zfsgifvWF7q!7jy?I7@b?3*L03g*<3xaHN9;XpoeURESXhA z4En*o_n@$Q<%%Rb*h8g=#zS|BSo`0IHNw%1WxnUVh8#X#e&FB;vBDsyAqHk}PB^FV zj&)4uG%fha3!eR-u>93tjQir4E5hUJqD*FW9XrJ0rs(EyEh%p3zTb&R3RHyqs}9JWs~?%x5sau4udc zWc5mh=wfyh_9+dHIy7tb?ltU(RH&hlcs-P`Q)${S)JN^Vac!+7BmB`)SP<}W@;WQH`&WP^w}O9jn^PNz5R)sNE;-~WpUwDT5HI32!zzky}69VU&mSy%+< z09fuCq@2+9&^#1Dfs?iDf+Tg{EL(9Jy?=HY&&!dDI6qk?mG}G{gD6gph?=D zdg-qb$i|Yk6 z#?!tAEbK!2<}9r&?(O!hAzGv)*ln+mdYA`Slof?*D6%scHVD|k3Z^V}1`D>u-`|N; zKE%|oKXkO<>@z>W&u44s?TDo#Q^rWjP=r8lTRsIx|IkI8OwCrPn^Y<-Ssu=YQ_47? z)6SBOV;Fcxu!wJP@`Ubcbl0Fel#17{!sfogxrZsTq|y=_dzvm(*NZqNjc>YqC-F#jdT!5)mplhbWC(MNE zt%4HEotwekz=XkXzdr{nL% zwYg2UgO38H+R7|WtV-x(N7V&PEhQ}R&1Z0g>#E_ z%Kd^Pa*L%WlozC}SWng(=4ua$jYYF_u~DLoCx-CY8r0z4ZNPpf*zd>Ra~;0H>rBy4 zKhzM9vpfEg(S%V0x9f$~@x{UJ@dsP4_}wd7xGbYYH>P7>F}tadpB?&>V3hK?kp!v}>`=%6XnAm>oN<7vaFRm_aFrguDsZ( zI|i;F+J!+yPoM_f;y$_Qf)S*c8nDSi!orz9aN93dSVY0}Kgn7oVC`QqKo}W#G5$aC z^&6F+lIVkk1yPM3ku8q5eUdl-kc%GB4`;VM9k2Fx*ameGes!JdF(etfwA-p5$5&)x zuHn@Uj{6<04As4Ys{M%787ivK1*fEyEc)}wT?ygVubxwSv*)OR8NJeNNb(~LZqMX? zwQ?rYEl^Ri1|DZ*E){VP*jd9bw{HcB_i`leN8ej<5c}GDPY-dF?P>_y%M>3LTt81H zUOEJfrxy@wP|_Bx$G_1%^2Eud2T#7CGQTW7*t+1CmdUlibt7y zO0|`l$-cy#49kEei=@DV9ou^5`EAp5FF3+#Y410wT5>lj_B_ynvEA z#Rb<HL2=nqb3GH0+0Kb^rl`RK4Cd*^k8E<>+AOShNB1-^|}{B1j^*|x^IUCBFL zyd>?f7{_cRhpw3dr$$l*=V#c1tUM2m{-G2F7|Rb9TkvH9OaR4egfJ+ksd{qpj!=b^ z+@L&&ShQm&do$1Wh-<4l`>cB|Ydc)>811+mjiI+9 z101lxqI}VgQM?Y5*viawT{rIYuP9TT?hv z1*MC=`2*<|nj0$nIIa29i!|5mGHhjV4zd@A8&o8=;&!h3qlEllIo`e7pkWY0SK{Us zy0$%5$whN>01uPeZa@W}?dGQE+(Cc+&4q5VL~z5aA$aMc{hm{yVE!Njh1t&GHpbdE z5L2hZfny<8{$*j(y$99c83+g24UW~M44OS0cM?FtUD6UZO}kE=4zvrr)nn6ERVK&R z4yv3HuR`ZE?W%UtP)Ac&rs!pZ+yd8ZrZ;BA!K%F#Lc=jitj*^@Cr@0W7yHOK^gfpA zQN~!M^B3wS1A&nryKWB2QviEIxQfEBl(?ROcNR}%E->%6-FP>+Or!DDdXv>s%YN;( z)M%#N7VY=DQF)p1N|4x8$ZUm2vKFrDa0X}yx^_Rtr{T>HyH94)*Z|@#hWoH)(RLkg z+x;^&tj0i=<_;Bx#us>)Y9CC0TUWr`LYSaa@ zh%Od}8I@Mn0^jdHv-#vQts-s80Q=9y# z`>Psyi2-bFVsUY;j{JDEHu)F6Fuy=R>Qfy}SZGB!;5Cnz={$EjEs@$vQq`&NsmX{) zcr+$QvcSSF2xJPzxyxR`lnOs+c*B!sp=*a@y_2vIIP%>m$qUL;1H8a#nX+=RWKX|v zpJ5-Lz@Sif^Bgdce6wiigX-ki6WiFwbWa5 zon16{?F%$;7C|S(Y`<`og4p$}5L<5ssp*pMjqzH$ja^T&CduGqK~JK3=jY5MC4o{{ zwFa=Lhg&02Qda4sXT2V8_gH5=k?-{gh(3BeQgy3TE`!+y-=fXv@qQ{s#0(DH*;GvT zEuw}12}bfJ(`a5$f7x`lV@o<3>26_Tah3)-BGpwranS^cqqUI(fH7vf*QH17J}F%b zB8sh%9Nj))_d;86ypDCqnFB?%GkcyDySg=C(1M0naph%#ek;yN1XfR;^V zvEZ&BXu%di2@$A5W1Gad8uQhocx1z?| zHg%u&!Yk2^)nbfv$?@bi`Fldo6z$~iPCdas#UX|yf5-CR(u4Y=@>Nqwvu=23>f)s-lTW{@?+GtT31p= z+ornx_UABjPwRJ=Y?0P$A!=6FZid!xsfa;oJn^-7KxMjRRAEeN>Iu46T=gg?Q?6=qy5(X`Nfk zMbwf@YdEQqQW=}>ST%swyN0Vrm{1h_>5&{-=N4H;kw)vEsO-Y5T#MGUE27VDh6?Ra zo(5M4;eh#E3Atu~V`e&apS6AH9H;x`rlH_`cOqT#^ZmUYd*Ip7z3=UPynNLly^kZG z^j0fW(Oc?$Bz_8Irr~a}1^OSwTnQNsW=xj16R~ z>)VW*{*=><>r@-fP`WQ_hW0~@#K@4TK*u@w&*HAyX$cSiBaeI;__wZ09bY&}dk$sc ze}asls5ZF__=kD;^PprMe5Iq&JQ-eJlmq|qstx#+?n}YHkPMkIec-26!+G2NCO6}_ z$)(g4jOtpiXV<>Ho(_%&(T9S}o&T~M=C|#tSJpT39iV8(*1Ynapbl2GxEz-#M=G-I zR<(d!)Dz+IANKJy4nxB;+ggb(EE0x7G8_L%HUC+`!Lom?@5y}h4?l{unRw7o)SnqV z9^^f`7{IYC>1voO?7Oz`Dysb$j9|VKNK~W!tCSY3xYCVB;MT|$OW`NwPCTN$apg0& z1|M*$JuoFo<`jR;Mt5XHhrcTnE4oKHmFg!}Fud{>!z*{F+r^N^3vb02zqfn*;ojj$ zR+WdIaX44f1&MT=RL8VJHP(+cMmr|y5kqF+z<+{dG(NnaC6(gn076k6E$YP}hSI_+ zzLV?R`DIt>F;!n7jTuiL^33C!Z7NqSUA?gDIPPguIM$vndUoMg(Fg=YnE|Tu6a)I2 z&07sSX}$u~P>rGW)VR7R?H@%{&8+fx>XMjqI@H-VpEDi#?Y7dkQf5peh$)UNIjT2| z;)bdz4fcR1DmyTP2kAjpiO#bqo-|{PK#dD__T%;YkTwYC^}>0JtYo9S$r%QZoC0;1 z3+);n8Wc%C72`ECFK&G@$0!&?>7row~MG0c!YA{78r+`D645gqmxhfmg24``V3Cw-0IFpDE+;WZyWJ zCXPGimgXr}PEFS9ekHN`Gd_sOIo~A<@zn617s6t@e@!3^+*trhAO#;Xz>XEq* zSxY6d1TVYKnG$)JFw+gzKCip!*e}#`I&#wrAHF>4iLkFotTEtYqWb+u3=#KQXZao< zjhR`tR-?dcgBbJHQ0wv zZ%gEuhTYWQ0U!EFv{dHJ*@>Zpq0QSdV!%iXbHRr+GSy#Q@~1SLPgYY+6VsXbf?^8= z1yO)&c2a;8d!_;Iq!Sm{#x?BN z-w-cOsxtekTbjPagkuII3_cu2pyUO0VA7W~s9qEM*LllsHyMWN`4Bns>OJ6k;DW`C z^Nl}X`r=^B0qYpgQL@y?mXqRnnVyZ@gW}}^IUSks{g`D94u3S%3{+wtnfpQ4B2m5k zAyW{x&`!I;D7dsp@0w3DW;?c6a5>2nZbH*0Yn?6``iKmfMtayE?*SPyndNlJHaB9y zxQ_|w^5D*upPO|CL&#-jf}l+2#F9pL1sR6d!9ppwuj`hRQm?XQic5p%?9&ts*#?Vl zvkZ25@PH+H!v@<}m9x^k_7Eq2wTCECkY3pIcdlflA|Abx4|bs^N~ zeG5#FC!QWM*WGcEJHt+mF{Mi%a_uEz0U2);VV(&toiJ$}%C{!VA-Q9b=0*Bp3oxik zG=eW9k$H^`1gH5S#+0R z-@X4UyO8#II%T!B>MQT8zgl$p1Gr(DUOIX zlX7QStFDY^>gpA%R;9>E2=qy)(N)gso^rp~XYgPTk>+gD@VwxR3C@Lq0i5;20hhYc zSKN#n=ZIPS5wxT*eo2SBbFudQXB$3b@@cf=*Ac5=Rz?2`@^ULMyPGb$b9IbT$$i$t zp##NvP$M)W6vn|364(se>E8BfV~t&+`rSX8sPCGnCnwK9U_$4IWSu-SXAk1cP>E_;tFCEYNQDLmuXotiNi|4x zsXkK8Tvg{}L!(UQFw;0^d8xt;UH|!h@f^xffTU^|e(HK4@0K^Wi$|v{HEP^;itEf6 zN*gGX))jIoHW-SwYIVF2v)a5w!V5}b`G5GagKit|OsNP>(o-?isXvdyVjhLVm_SJ{ zDyy*T70Wfl&--@&7~y?8u+gBbT7X?cI!rDMsT_JU!@Z%k##?-;x3X~Bbwxck_-Csl ziOEg-X~u4u5MT3xPxe+IO_D8Pv0!k5MSC5$_?Eb`yq8@(ugt;EUvX?9O;Rjw;Uq?I;QW-EluUH(~xs4y`YxnJdy*EF2Fe8Jj$YFJ|P zD6Qs>wqGY-0=gQyr7g3<{Zjp>oS~BYInfdWuDcB-8jD5-rxdI=4OZCw`y4Hz0*%AL z>{1{Q&I4rw@U>h!gI|97A=P>{)b`k1UNT9#w|T48jGX2L{yA*k2A(s!n&L%JRE6YG zSE`aCQ&p?EdZ<);XE1s*wGJ+6i3gpeq22r#Y)mErLq`CNs*oX2N=*{W3z?D6sKjBL z6Ri5IU@5B^ObJ$AaM`^d^<=g|O?L*@e=-m$oxz+z-%cOoEj_H5?_qV(-r)Mr*JDX8 zMn5^Z4cgp`8og))jG)oIi0j1+y*Qm0nF&mip)4qDy|vp_)-g)S48f;~Tz3Y+rh$-# zwV1m`c@C+V3Vm2e8CjdF0`*`v*Vu^%a0^%aFXh37!fdbY1@Azuo=ZRaiWnlU9CXK8 zb%Vi{j=VfMYfm>F9NNGmdoKQB`8BZIZZCm5K|4n0tjj$KgVG#teS{O&efl!Cl91%zU{l zq0^--ak4n43t}jG4WbLZ)3s3FeKl%OoU2%$=bXX|KS{gliNj!S=GJ(;kRjpW4!(`QK(Roiu7twJYor7{At;XPS4rOOB z37=63MhL$&UBOXe?H6|NBC(;mMjpA9m^dbWc8-_h5|+w{A4g;n#PmLvTDN z@VOD>FyvBn@cZhym9ViMnH6|xvy@PDY8>yU>?&ff$4f=|zz2?d-X|tSG@$#hye27A zhL;DKP4>F`W^r+aHD|sp`0*`O3p<0^*zW-?lbTaY!Ncu#onN+)YjELtGRJ;al#{hE zg}MLpeKvD(J(B6rHO5CVhD^^eIAnzk!{#TSL_5Cf0bObJF7Oc=chIw@LHI#mbu{_{ z5_WdI(66@q>No6x$$|MQ@|Z447RMo>kHDPDrJ7QDv0U1aEoHGn)|4KWE9UxZR;`=l z=sIS6aggGE2kU*W2;FF5lW^Zlg-+2Z%K<5?-cez}kJp%bM{>h1q|1>x8v=I*D?b{9 zH1M!^TO-%uw73^ChYNa$w$vIuudG$qbmXFNOWSMwv|^j6=GpW8jf1e~DKl^}acoEY z#vEH4kAOv4ju_(v)pD3HmZ<*Mo%XTKD$@=|n&Oq5id*}#zBHd8d^vfY3M#N`mU1f0 ze2*nSD};wgi>XVdB>aGaV`>D{H6{4k2C?w+ZnlVQskC{tPG1E@{=?7s08~(MWw3F* zCCf*@#dA2Q930FEw8gEQ>)@=Q&ZE=I12{`CmG zh6YaYr%Fz(ljcLvg3=xRRHmk{FxGRW-lvLYbIDxc9mtSa4ViQGCa09LzlWu)D9J5l zTDO%liA$zxKqhIoHXD;OswiZtLJG@Oxn}%6hP%U< zds~mq4ZHd@y0mRQTmR(Eq0x@t%gm>%Gq)(Tx<1q!BRW5N*zQ2;A_H%LVh5jXqKzIc_yd}9D z=Y5{fZpezC+#Mqu27l~t2TJ+PA7-Week<{Kq`bDlN%@124s0E1szY%E>lVjRrwiSe z5&FX083-^~2?HDw^~+rfTg1l);hjWaZJxsn+SD*(l7GBQ{NI*nYAE%q^_VVt_cAB- z4xuhW`@cfnLX`^~hC=h&oLi7Z-NBzZ)VX0A+>#SMF!hnquy>9IQKN!y_-}h=H3-@T zFEAMCKfEK6H5W&QJJ`xzFVFl|a=RjPxy)cX(mKMA-u(E^kVpX4s7cy8IW!y<&rXxL z-x_dy3;MXxQL6YCMk&+yN%V0#a^P=cj_Su`3+#3C?)YE}RDbL?E30}S)qmx_Xm_;D zP<^gT@r=i?5M)$O7rk+*s3CfB0Kpns0Bfm)llajulo0pKGlBo1_~j za^_{G)7SKxtV0_QqrHB8lWDK!D|$883;I&^Ml%xkCAHRtKXqCQ9c|;gT2Yf8S@CYJ z)*>h&%!6ttWKK3SM{A>v72We4gxzgzJ#Na1ZG4%ot{Vv6LH{;*7j+G$RNsFm7reoh zYUUU8!25#dW~BVaMog;r*Q}tb^|{!yv6O!cd-uO8Uhl8-uYdbXfH$lkcv8#tQr*ji zYuorTbi~81r>R)fyRDq%oE4^goynPDrFl)qL$f(&DsmX^CG1Bm(4*oX3&q$q)N8)S zlMZQ$c9SK~kFu4*4H_r$Idw$K1cejihhbf8{Q`6R?S200a8~3=B zxxXZB-pakO3?FLGFmPu@S|e?grvLi#Zh(fQaMDcT9FVleGcs;lFD;{K^$Xa0ekim$ zp!vOcdOQkkc{Fj0y`Hd3&)5Up4uE`tPGYdCr57FXM8Q`M2;(`vKW*L_PEYXSZ7%MN z3!*MPyo!31^@Q#<&|Ukn9`bs%!d`tk<0OOudYl88|Z5CyHG>guCE% zhSStKCjPXSO(41cbRQ4zafz&$bDqjucH`mF4_0~GTX4yd@v~NF3kJsBcd70k`um^h zffNFI^s?#ryICuy4E=zTzu4pb`YQz}uQ6jH>3hd78$AeIXqQ~9Lh z6)K|iL+brQjUHzBhpBpK;h{5l|1Nn=4v($+%#fs#5!k=_A6)5+z5b5%qTbL&GW@t+ ztJ`5K>(k-TC}qes)JI@K%I1`fh^Ox}}QzTidgAffLb$^JPYR{m<{@6KYd=U~Hj#RWb%MW+ z*o_@>p*r86y=4UdoJ(dnukCxj#4@=!vlJge=m9UU21ntZbq3Eqfjn38eo%RC%*ylL zhNU&d2GX5wfDCyqaC7UX{x%P z0^!sq?et$^kuF-O;-H0Uk=4?Bv|-=(Dr!Gp)UGOOm=)Fihj@}BGw&(eMP>Bz?477B zo9D$)VV)X6lCP63CrQ#L2^z5D5~4hcNUY7zoF+@LW$=tJxnKvEJ`P6j191+cee~l7 z4Xv1d97+o`9_X;<+Wy?Xs=fO9GLuwV|rPvJ#dn@CwmAi+{{KO($GG&@yd zDn3>E>ISQYAO-RC+bPYN5+3gM4~Qc(jr>EYi&>amsW4^nx=@;qTz6=Wo)wOy<%)F^ zT=?x!&mxHxptrkF`ayTnEDjjL8dT$eVV(pU&<&%8MV0DCi^D8LZSJR{4N_PC66I)N zB?Ve*!AlMIeev?Ue|o&MZB$XwtFIT3s3T>IC#B_3?{?2PhjZ^}g4G-R;a^xKwj8Vg zVyq)Tm`09KgiMXf>nMjIa?1-IUN2MD?qb!64P>oT!Sl-YvzizA(dj1CX)jCe{Jsa1 z3{4k%L5OxdEn%Z92dv|PkpALYwKu1fpQw9chhi>Xca?H0K{Ebg zz!ipAB0*Zn&2&S|yt1Dgm(-Q9kN=#qtyJSL?9I$@SpAH!Mu!d|)73b?Y%AzP#oLNZ z0Aj7@*=>-psLal@qreISFk4`;FEF?oxsc#VaY*p~VW=p|+gXPmFuEOGBz?uax1p_$;@1#=a_phwXUS})YI~2WC z$q7`G8hN5s#*_g{rOv*UL6Si#dr-_7-146E@1(_Ois5c z66EFnVW7TvPG8cIGy2RJ(mT@^+yuv*nxik`V(fI$LH|(vR2_U)F&hLDQYv!b;4}nR zG`cuZOmc=7D{s+<2CWbt+(wTe*lLUA`D!I1dBM%&bZ$m=L{c8hz1HsbGUeBfDvKAJ z{F+FiM#vt$_Ds?|XeDVskTX>z{N&`(%Ro9ZdyT-Cj`7G0A#>mZS7H^GH|aHO&;cg>!L)q)>QYZP$AY|2c{(gT#A{-5(@L zB?Xjo@fy2=TWM^Q@V3V!_)L+Bq=!jM^{?uX%k6cx@mGX3MNay>oMMWO(FI!N)I(wA zE6iEkSr-vfRZ@24;8p)VGHBJe*z0W71=*^XeP&fZq|1P+fBJ$|eT^<(T=gqM2d#Rk zz0Ovh^vuovS+44eL95==RsEGORdvy)`KlTZzYlE>`G>vER=sUlbG`A_la+6K-0OZUt`<6RQh_kGoVLcWJD>$fDw)zq?X{ zS6Q4UXRFYAM=`t3_q}I)2A&n{F1IU$u&WC*Xb`Q2XE~oN8Y6PHpezmuM{5W8hgjd` z)rItRU3z5w%01}>d-V;pvTFRxv*4Nu4wmynPGjJ@87#m}2}St@hnj zhFk2{W3>*x*iVc4UbgSA^{(rizl7}*V55$-zQ8PvRHi@iNelOVh2+FHdxc~zpjt|D zeHh-SBaL-#JWr5YYfO!SMb|`46__-`2Klwwy-iA^0GV|wjB2~M?_2F(SBKim&FFLv zN{BUjThTwxHzuAQQpw5Xw6g6bm^%(4nE!)jvFcac!dT-l9BZB|8z121FDl-Rdn5Q=Gb(Mw?=0@@koNV66oR}|HJn+pG#*;jU*91 z(|W+*N$WY(Y|{@6c7T|r0+939=KaP@TcpD~8&cfDK)qcLxv;OZ@#ByuQ;~Zf5QjOQrs<|_`I&q@dqE8WuFIPeFfs!U}qYONO{SYQh&p*T)u^Z&_JY z{3X;Z|Id`wn%Bc3QBwVs)%`RvS6Ox0vsYGsuyyiyS|*=gsI2O;^)S3ZIbhzD7PK;D zHP5RUCO-1DS807|W!23zYo~SRTZt%NQ-5eFQ&tO1eln9y{+U^1wams|5=66hkEOG( zh(Ol#_xw3?v@QC3jlC=??C!;!MeZ!78mgDsW$&aa(u-8lu+QWnvyQAUFK^IE?Y-)? z%0rwgI`I8+np_go1$c9{OO}_3QZ;~y(4gtJIPOz=&j}bbzEv)%GXLG&(6%-8qI&Yq zvZ=b_zw0_37kC!eq0#npjI^vWA1|vTLm8-7#e%t*)(pi zJJ7@j=MH?({k|<0D$RTZ*~yAOAx6D^vDKW=g@(EYhb~jU2E%)Cj}WKVvK5tVV-?9Z zB&{MMR*4T7J@PpqxN>ApP~9ss$GN(HCETr+`;pWmS_ z`lAwF<7ZvP&s;qnCa4|ouMxCY>Etn&)u~CR5qkOe=dU{c72k?~#m8Cx?NeGm{=LJC zgjQ53o%r2cRchCev^>jxP+S;FQB~yE*g}?lL2ul`=F7yo(mNW-tE8}|sY0=7q^zU` ztANx_Z;G~WYgRP!n@5buH|YYA8x1e8nXY0+UEyjjOFVuoNxx5U%h|4=lfFbj(o~L1 z@FbiEQS|QP0ziS4vohX;$T|IF7YA&MtK(v;BlLjb%t3$+=G_5TtncNDKJkf0sbb@Y zyL1L*+ZsDE5dBt2UtauRS2X!lp7m#rCimbVM*+S1VlPir@U^u?B$-H&b|m83=;FE3 zD&X~YF_kuB!%D663^rC^_cGYcVPWY7Wg0(?C)KxJP*y3BT%ez^CVOZCO(QypKef#% zi)n&T^qPp`EUA+F9s`ZAkCmN1WT(IOF`Shl4=aVmrU;Jog`y-(qOR#NstqhCfTBN@ zT*G}|Ec|VS$AU^#msKGbmEPO7M_zVG)F+HnsHSF&#l|aea|BoQ#upf3Ccv~pmil-K ztY{Hc%&xducD=PssMbElqd(3ZNTg)~%y=hR#-%UI*S*VrkI%lyvP%|}UGk~ynpq4FIQ)KKaoU)%OS~rFL|m# z3JD{73P|?^W7bId`xSElD8NK_0i|O4nf2dS7^^i)t?)skq(^GqpuV*Kd* z%oE&%iMwBR>t#R_I|JdAb>9 zhF)EIPJJnwUa}}g+0gWb%Lb+CITslTIJAlqiRl=0JL%TZ^kisyv`b?#m#i*6o&E2^ zc}>Sc%a}{_GnhkaOY&WpoC5k>ctk2pVAoZZ40}KZ;!VkJRmrdJ$2E&Wr0XV0OK-{? zOczUwMTOO=1`VXZv?fXDT(x803T@*qSvW(m=#MEF)BRgz*WD8}2jOO69<8W(X3HeW z^9t7j@MMV62)RrNk_mx0*~7qJkxZG^D85 z8X_Zq`I}*wph_J{1NYd`fa{U(8< z&T@B8m)Q4tPUg%UV~LIxkJlxi^ofkeU$aC6(x1Sa55zz_jJ@HKK^eQV={O8XN2e*P%`o;%m&SHO3-Ooi&)CPh zM4yRYLkhsyVrZvOO8$1Q=iz53Iv%$37h(JvFkQ$3u8EG9|3n7I%l{v3ZvtOsamD>7 zkgE}hHz=uSU7}(eTrj9;qM(U_Tr_A@R8(4H-9kZ)kO<0R@FvJ@c$8Xdt=bl~wzj2J zTSTl{11KPFpjNQ9inX=RH7>ZbRP%m+XXd%N2?6c<{{MV5_gUtdIdk?ob7p4R8$0A> zRnYb;Az4@dBQNhkdbe}dojC4*mp>WxHF&vOrdj=$4AUqIRTXr{H1}E|V;ZJHI+!Nl zd3wBm;w030n>&!u%4efqVV+H>38W#e}&!={)TQdTXEtlk2?Q0%Mto^^a@s!I$^J( zz$GyR|Zu+;_Ee5bOeGZ*kCG*9CLfl(T6_hV)IM@J^lP$N{ z<_|KRy>GRHigE9F?eQtykIzOE(viKM|Gd3zDf^H<#s;3@v!pME$K3x3bFUBH3GW=r z!|VZX$N0w1S2H&)`EH3iidVs(c`XIEU3F@XbWgNqsTlCQ`8Z%tWT-b>iv$N_> zmGbz99FtTfThg`0n{MDHeDrWP4d|yCT4bljkp`GL3kT~|mf`KGFB?uvq)x)=j7@(> z+ifwxBey6YO_UR^-ufZ@&jdtr*!uvI(?Eo{N)=R6rJzhcSwiSUkAiCp!wHYl{kKU# zE(vRN`8#c}0BU0!|E=|6zUD&JTznwFx|-)(&AUc5C(^@h=*XAhUesdGZR^;uH@E41 z%%h22f2Ed%Qe_bP*Wp^%BBlM?12;S0C9JrEqIV#ySqSgIcQBkpJR3|NATpC&Z@43a zS-%V>^=lkF+*ZAu0IY7wWK;CG7Na_0=N>d1trlp>7oqMnBf%VxGClG0^6?&~>RAx` zWRTz_9HT~jeS%x-YEH-v3kF5h;#rNlZCnMB#baZb^n5gD*DdnQV7qZ(2W~g*beq+u z1(emrY!8aXs#i`C15Irz2elZLW`%o25;h(ywy{Pyau2^#K)m@6W__wOyBaO`KgG;n zf}I@UmbNR5&+4t1Kun!TGbk{%FH#_L_t`a|hciEO-SGyL7)CLu*prWKAZR;PILIf{ z#hFv9T4p!uaDg=3Z=3lDes)SUy-_0v(ss#jUVqCQ_EXGGu9FUaf!*Oll|P1utP(>L&_ zOPy{U)3wen_tc*VjAuoqsl}T!JY**Xgy$@BA?WNrg&+Qe79Y#XZI@Ve$P@bOn$uak z1N0Lm@cIL!fXg29)}W;qh$1`h>bFv|Xcl@gIUCrx;{3aqzmvg1x zHj74iX$AViLE)bW*sIbdYEi5EaR7{+#LEgGH0nk9>dbm9+}Tz=axpWKWBm;)`-ZIg zqtI2)hoDOV+nn&EE1e~$Vo4&j!Du>=rMg_R=NI$wz@7Y}t%xBK?KpPhv|MqV?DgSU z8DWiTl+O)Pk~!zPFo+5#x8}xg_;C-P{3ES8wJN23FW1+aN<5!ea<^NlqAJA({tk%I zE$0`HZaK66XdT5fNM&fXuBzpi)EjGbpc7~OL4=$1+Orw2oi8Xa7pJ8D+D ztqr{Can%=Gl{>opAJbpv9J}fC)35(zN2B!um}trd{i22L)34tGAQ7C#S$eNdIXtoS z?L0JRX?`LY%Ch=z3*d%b*c%<>J>T{K!~ZH4l|T3=3@w|EvveClxHQPFmTs;d>u3xG|zPNshG3Tjl{*oXl-cFV7l z0;%Gw;_y2YT`O2xNyHe}5^dJ=VflwsW@s3ydKIceo$pK+`|X?@HvDpRaTI2cGa(&0 zJ3%Gt2#hM=&Je@mBOl9X0@?G@;f)k=n{Fs{vTjtWRU59%`Qzsd_*b$q0`{X?*f-Z9 zD0-r&M;N@kfKS!Gd?)6{yoR{j4^x*2{z$WcxOxz0of{68=ph!$RhYKr5#?)b;ZcG? zt(WC6pY}D*^%ze7&<3#umDYM>GGTT(Sq4Lv*z9esn_AA0Ew~!gy3R((O7BgboiL`& zl@WvV0BbBZ|0tJQ86Gk*YcT6%RvW)Azf=TZ0brzmNLzc%ty(5*Dz23jD}=fsy6(!o zQFr%z5PiK=Mb}VN|NOYZcz>I(oCM;VkJi-p*ZV3g`XL&20qKuj?7@q)hK+&96Hx)! z1OCLuj*L>%V~73Rjf?X|%&|u5@TdNmM$8}k`nAXbEY7L#r&=guC@V^j6R7j-c>N!HHh5Rr%f~Rx9(`8DQzE0IkE5r@WMb=J4_45WP?1`99QJW`!X--+F^To@GCx2nwK^hE8iHO`)fId!n0J7LzwMM zC6`|=Bv>g7mtR03uQz61I#^m6E zRX*g6azpP%c!CGQf4?NHpt8^)qt^}|RRC4t3G)tQU?!D_jV%Y% z^dwU#k)9lzepp?O5K23+2VG8Y;4u?SuOa-r`#4#+!!k zW>=)D9Lp7ywUg!Nx`nL>VvcDTjIAcg_%cUd8f6v@$hT`4E1dI}$klDSw~zwtU#J+B z$_26W{^}HHhkgy$lj=2Z3HYFB!66i7MmV><6%LqtoW5^~?Q7pR4XCBvd4C2k?G))7 zoYIckoBL(l+W6zTu91|+cYGuTjU$@spTEq_!JI;BRoM85Hg#Z}yoV~HK!1XU_QZwL zin*0`Dpf2oh@JlsmIE19Dd8YAoWtC9&+MDslX~s%H~D+}9Hmxf)fDyK7h(r@`el80 z4oC>4pt#z8#jg>1J+nLfD&keE!)qLWo9br-aon!@njB8L>9oHbHIYjeK;)A5lFxnm zx4q>R{?ayVK9TtQC3E>EGe>%vX$8c|;D~nf4^K|%n^g%OUM0CsZo{7em$e6S5ZK{ zwI)HS6FpFG&q>_3UryQJD{o@lJpN+?5*oX8h`|~1!C8e`g*0hqs|qG%JVmGCTr5E7EVawr3GxDW0e_3)10MKdm8T z5PR&K&ZdMfT_g)4UZaBhgzg}kz-6c822Qfm#t!+)i|KECuQD=~&4Dn3*sS6~me{PZ z_ZU9aMV)$W?jgTOwOy}|u0gaB&8)a5qzw5#RS;$oB@-C(Dr|Ie*emDD*}Y1vty&=( zn$#O_u~CMtBh>_NroRXCGr9S4t7>p2 z+B$1CzKe-|p?Etc+F?)Ct;19R(7it|rn^2g#u18%hM86%1= zo~lwkPWm}@0c|llxXcDXw^^Ca8i6QIW$M$6o=LqDshH8J73{E4mHOOtMzBKPqAQ$5 zT4Y<%+sM$KvkJyQL+^8MBO&gG&sk{j?Lg}#RNQGjbNZcDkjPFowapkgOM5)ZNGVEo zTO;I1H|ZC%)O?3mUGuC;SkW*;UX%T@0LOlD$atR~q_LB2fGyWNy!9R`POVAbW7O16 zyOu*BqJ-DEcM*}&=UW*MXhwYv;3!a+!`84*Mu1>HQ;~ovX-nU&^=CnB>Yc@oSzh?g zw#@QTUN_8g_PG+k(Gd*n<+>e4In)XgZZRgg|1kDneZ@phdwpA1e|NWawQU34@6^v* z+>5Ab zZ5$JyZweG{RgDzWbI54dIlQy$?dhs}RB#(zb?`Ytl^x5aTBWO`m{fB{XZ1B*rN*VJ z(x;0VP&RccgR*%*Kx-JJ-yrsz$GRvRgVvPI>vk%a{{m{;7l5Riq#Zsrg70&=)$kR{ z=6id8rLy^k>8@DW?Zu9NZoXh!{`q5%ZuqC@?61i`?~YNyh<~m+1pc|Tv#3nK304$s z8~!=dy~yI9j9O!dZk!>6DLu+6i(T_m--GAQ-?j%EbGzxmSq9j}QSIB8fP<~zH%$W2 zrE(wG%L^@h_rY`~p-tU7ds-!Q%9v%S)4uGiB(^%SY@Gk3%R$CzBw>CzD``FttAFNctbP zxPj0r@3o6wsZ~R^7D+sv>(^czGBj;>$S36GJgRO>%kUP;8$}Cl-+iXz={sDECo4{O z$+<3wQzBg5CI~piue5%T!L52={iPj&W*e}{D%F^H3Vr4^$us}My&maNEp1Dq&(r%$ zSX!dVCd(g7--qrV(ez%tS!wnhSbzPLs^HArQRT~KT$xBNh3#LI{L4;C{>{@Ss^@H; z_qhGYvkE@+kyeH8x}*CwA24CWBM2s?W5zoku^tr`A4nvZV>GvrW;iO# zML3s<_$pKc*;}46=}YA$q}FSLvz+w)Vmn6n{Ao>VcP*Xe7Yz`*4jj`PFxb9_N~eiq zCzW=m-x_|w;*G!6ka&^Hwn2TlAu+=ny+-ogkeIas{@x9VA9JfB;TNk0MAiCgmx$8A zu;SmTS`M_=Ew5Yc@qE_|LuWltw`x%<`3QHr2!m8vxKiPhv=)#Bv3351Ms?V6l$=ly zzWfp=0tE$+^EQ2lEj5c(&Z7!jxLk0&E(scC?bq&xxzuifNrR;5gdY`CjOpxK$4G7Z zbXX^*3d#>U%|t{;s7rPvp9z-^>&UHi*j}#8tyU)DiIIgXMv|4tB#0Q%MruPQJ%@>)}Hko#Z8cUwf20Q$-%ZA z(m3RbKXgLEO~3L;$S45@>eiO)<_?rVc*|6P{XJ>inOLPRI>jp!>YT;bu2dZAtIy9J zKHx(06|2!s4#lyp)Ak3ojKn6L8Mzi9x=`wCWkspVam?aJv4ibOn{BVGs6gWw!&Img zY$)bQ*tJl2-p6_iBg;k?3x$OLU-bG?+Sf|XAF#k`*=O}8qNgoG9<`s?Li>5l0gz%x zQnDG7!{a6)M8~WC5N4wl9bepI=yCPW4n44b)jWaa{IMW*`Hx+w)Fmxw>=9n^iK?>rye8m* zxtIf5bEn@dGq}k>!&{m}nC8o!;!V%WO-p{cbG-Q+zMgg5Rdw~_%?EOo2*$Q2K7TE-bSpblzEzmW{aYe9k5g-yN&nnbi#yMgjbV3AB$pLR zKS}UB9UidekB}i)Z@&+1yZHpUL$NGb_#69D%pl zH&gX&#f5X*78nErW*y%!`O?E0_7()!T-?yFqnK7F~P*-&uVtm8RAmq$J7>YvJddh)2;^zrVyqWXMUc^Ek;tPppmc^JT`MZ2tRF|-lO6Gw@d;<&EKf%7AgMFv?4O?WGf=ZmVEZBGI1pAjCiGWh=&8;&I(byvcZs~Tx{X$Dr zlAGdxj*I;9)0efa@|eHtC)v>BedL6F{x|5WZ25}=BK>U*mNRk(>wZHIl3(_UH=iZ# zvE<5&uDEparIW5nl=p0S1r?Kj>7<6|AzW_!rh`-fJ7Gp7d2N2r=_rTi(=RI^(Q+bu za0==KOQ*3^`0zLi`vsV9Nd>?qPPuWQ1)4upN9C!Z{paaA`ckP-$A)D;W8TN&)bY8t zKr}PEAB)|TjS;FgpsYSr6<`obw+dxhgM!&sT$(nT?Pv73HBcRz9_69g>Tsu1+~~1d zYCa*6w0^d*9X!gos-;I2sX?Pi4LUx-4&aH@`T0r_8l@DWQI;Z5sW)PY9M zi?Vnw$wEyxV-No&^wbIitpYNL{bhrj^Kx-#LdKwnj3EuNio?5lWrnm2Wo0X1`N;C0 zi`BpRBsID(7T<;t&nw*q=BpJJ)Ij=l6i3)gEx(@0kbo2pT~bWkICP0+gV;~zI_!3g ztHI&3_AncV;pGVjS%uJ5mVQ>cqJzXxfs>#jI~cx`VFr!-9A+I_vOfVQbA%I1e)O~L zksfngaRB-=;)-L$R2^LLK}&aBu|f4kTw#?9t@NmFn;yXx|F$|hamB`wuA4A~&CG9? zD+YJwimHe!-mesab{Un*D^2H$7Be-!{<*1E?XeE~uM&_!?4j3pzzDbHe+47VwsyKO zg0CCUYtrM?crJ~1W(0>J&j=1fjuCG9K{t%B+#Ysfgzug#$SnJr&9Bm|5a-q@iS$3D zTr#qdPI5czxJ$0O;-Yx7wriCKGae6Six6Nc=51X?x%3Qa#|6ILBe(EGY zYjhJ79UpfIWZ_>=j+}F#p+thwTU~{)f06*Q;_iq&6YQ0haynt5N;#qUh{LTcyX01) zl%7w2p@mGrwf)2An7(g&&nJ_qmhe%Y;5f10bHsme6}r$N?(|ew#D%MeJL)09;4WP* zWA1U(_M=(HO}y%=2@R(S8x3_0CnwsO7L0t@QpgLhhWxR1d*>$u66UNkA*97j8==8J3N%{`^5!Q5?zx!CZ(``Py3 z3?BRZPn04(8AEvIpqK;NG^%q;Jol5;PG&m;h`s{BJ83Cd09LH3ZVZgt(CGtYNhZoq zERNr#B*V$MISm6@wUIi(AX`M%&M#!P?p@?KYRWVx{E4p2{R+4WOZa06cprxQa5*nLx5=gdm#UA^k?0>?PHk5Z zn%Yi$!qzWM))&clYZUcC+V!WUXzX9bCOzEf7Egxp6)}jJb@9bjJ=z;L z4-ye%3u%iC&VpBVk)CB}enn*_P=>-!*rM_L<3u(1TV>^oa6qhFt2%&1#gg`C7cJ^s z^2r)Y;!K2-XM^^aBH>g+PW506do^t%oXsa>OdvVU=?hJ+adl|HMQ>#nI$EI7?Ys(~ z!5x|xo_!g_(eVPE;zc@G#KnvD)HsFx@eSV#U7}jxetk@86|WRRU9Tc7MR&d=n&D2_ zt=wFwCLLilm_*`~`5U~-UY$Q1VtBpmslN198JY~&Hnp;%1Y1@;=?zdbgV~jnZH)8tnYe2rRY2~knrS$k7Sps zrW9{#ig`on*k;Ym+1N2k?~B$$`GINRXWSzj1^k9%?pv*naRX|UcoDuh)$OS{j*$u~ zzrgAU+Dp;d1j_rUVbnsHg1n&ksSu zsrXbx9UL^_bvMX?TGe)c7Dt=7goV4iy~QDq1jda3n_J9X?noM2L!}-TH9jwVb!K;s zCjM?-+;z9SF;ZOI<{y0>nkI3GDl&r zQoAsl;{}%~GcP=GMmJ>1D6N*F+o{4in`0M5yCgvQf@ON%68jTBwD#xH!=;?2t$0Hq(o3!j%^eDwyYFP7>EU%cSI?ac11;=0t>DpvZj zbeA6tN4ACgLZfp*`g(P==x_G3&s+M*M04l*e8)Rols!OvR3|`&znyG{NypN?1WS0w zv~9bXjUb5c=o-oR_q+K3Q&Yc(vs%lg>XKy#u|bsb0XkmX?Ox=?n+E$Ad&QexR#(j0 z*{QI}GUW7e>)uzg^O=ABAK2L}RE1S+qcy@7@^#zd$%yWZ zOVKlO0Br1(B7B8m4va^x%EZnvjsO0RDEfg~ixf=I9P44Pps@p{HH=pwvbd)s{Nw!O{biVod5 zuA71oU2Iz;bYox>^?gL*hMi!GZ#1AUV1iCMas1K>GVix3w|$F$d}&}{qO$z4T{#5@0*h@ z;yT=89NyzH#@yNSjapy(U3~cx`SQi`<@pnv{zEr?DCCzKtqqOR4TIlxoiA+yO$_TU z@-#9#0>hevZLt+qm1Ng|@aGrcG|$Z*P;~gOHlB#9ugP~&X%l6(^oNFPTnh=fuGaaC zT-E6c4wdsIHz<75w_mJhrHVI}kl1>`Zs4~3rFiqNq(GWqZ1|Rz6^Oo#rcr#{4$U)9 z_xRw|z&e%{Fw)#2zj%?QD6uo{^;9nzl0|jAHJQ-1X&I`QIjTQ6NK_~J(W*%Fr_c*K zi_WA{Qg!-TQ7f{I!v`e7{jYPhd?lKFe$@`h49A}jwO+>f3vXTUHOk=&3`_(e;Hyp| z+6YV$%A)>x7v4JQ5a(klhPzL_&u6%+@Uhx)!XiuWNrfotD=e;yH?LNA!Q#;o78mFN zQ*QU!FMDU%uL~|npSS8Btk!|msfJaEYr(@YLanU3A4Oufs6W8*mX7h;}&b9yk; z2;0Yk>DxV~9hY{&_x}@rUYIp4oZ-($2Di7Xka$Y(q%eExTOSAJZ2a0Z`LVeD>5iJ7|70biT zXQQNV^h&xD|Np$_<&g4M!zX@^{Rw)A0M0Z@Z6S{VMDx z6hgau@qkD^24%xKCfrbloxbkV`Rh!K-@;R}mqF}%SBrHcuAoB(t1%Dm6&$6PrQwNw z@#-E9?+i@Mid|6yEG2v>rp0IZ;jb&V#RuA&)>yk}vF5PpESUc0PO8^9u!H{s zQmSM!Eg$M*%mVQ(H`-a~A|8SJ4Ig=1!*F56?+OF_`9k3W>nb>wT}se#4jLNw^hl85 zXDnKVoNc%DQd7g8o|YhuHTGxwDfpd!pc0dt${r&~SQ6g9W~)5qQbwfJ0;nZ+FQxEy zZ?zvSX(oc%)Qfkv?IT%cv9t6_%7~gE&kl3F z13m_+rW>XX!6kk2+Y%6V5I|ZUIQX-QrqANd_oK7yvc7p_koXs#QrrEv6dsA?Qw=RW5EQ9%cNs~U z5=VEG5IIC3WhDK}l6=NUk#YN=h}LZRXV!#8FqUMG>#y32(sP36_LsQQObFZBKb4D2TI23iIzH6UU3GiSob213MFe&W%kh{b!zNX-1D?uK96& zY5%CcNr440{QQ)Y6TvC83PhqLT}c2f7!8K*o*ed@1LPNw)#a&>%G*8tx<+LF zK{)VARNu3D0-?&R53x(1@Ud#we+h~DFLD%zi8Q&xAhASEl}ZHA(T}-LZR+Z1-=rop z@NV&KHl@##gZq~&Fl}uSONRGzo6a%L&$Qh3m#AeUzf1-&_?Dj!zoO;G_E%@gpQYtx zYIY(jJshcK-xsvi>9Lm46YbX}z94zmh$PPCCShb3-j{UbrDCnZAFgxZReG#Re7aqn zNEPjVjp7ak{rE`^8>Z&t%|%v4EMKoETf_T4_I@Atev#Tk&@2#@DhMs&HrF#;!Gr$R zaY4av{p~yhvfvqi>-^AyC%H`yd#YI7W*thC)6S{bA}c1for*oc^*p^Z{bwq_0T%LR zi*4Hhmsuscf%2So%YWP3{>hMQlGWfU3}X|);Qc%u>Yobq@Pi3>kioDV|4afCzUH2N zQm?+d>Bev+&(dY0b1>{frbMItlmma z9}a~?qeA4Z5E~%Q&PMu8c0SdLrXC&VHDI-+o2-@2og}+5ZnaCvM9gQd3CtdTe065&4t6%prjmfk6<;mm zI{eXO&HH`l6bKixExvcpv*H24@ByowbM#Y1DrddB#29v=Q|LHHQtUnkwt!1a>PRMS zy4_`m%)g-EE<$!@%{Im#>>HoIvfS7D)Akd^`!d4Y)rk(=51d}hCPG+OUx%=y{^^b%oSSP>h>e6!tjI{>XqC->O}h&eVHGb ztDoDXxF&XmTw-gdOM@~AeMjEX|Hrme{(QAJ~0+m;Y61eX&Y>7;*U$;bZFX~uLSur@tfoQ{4Ygd55^G;hu!eN{wgI*d=_@OLlw0Dc&-G@Gn6#>^3;hv0Uqzs-TiAo;B0g+9Jr2J%(m!AxRf9Z!(oyJdfG66PzYEe2Y=V=%w z7dp#_ijW2IDq<4=!2&1btZ*g>WHgz_=i&|F?PCWLsQeja2Oow{6`i(^>sCm@Rjs8R8*GIr^FVw*O}^$ z>U7)1SRJD}>UgfdLD!~lDeUXO8|#4bCaZyN*Kyh>N&DIxFE|Hgh>GK#+3rn@7vhCI z;-q9q(Zvf-jFJk}ODQqk+Xvj==I`wz?(gG1 z(L!H=W~zM3Y8->zb`r+q_j`pZ6{7XBs!fAl96>3yV>^@@3~1BFjxlh_%fNiE%`T_W zDOZS23s63sbg^v$N^00hCll`ELPL*EE|fdsc`er%PgvX}NTpO3z3y~RzEI6B+5F%# zWi{N=q4QAr(Y{#d2i6Bp*(8wUJV@VnfOPXE;)dzYqSFuDEUTNX~x)86JvWuBIXXY1*M^69;7hZ=CJ9z;MuFiJ1Zi8o0PMgq2N zr=R#oH=Pcql@PlQKfZ_--ou&R{^yO|eGUz=YvvSd3#lbJ_bu6(Bsm-W_74wxR>GP= zEArN{y)f*8Qj>pEoJj2rGNS>4m;-U8N8+WDF#L-=F`GS5WAwL1a$k`y0^IPO?>M87 zP06silHOD^!tT&lW)Cisbau%v6JaF&N9tV=+fwW7P9|X|nxF!o#W~?t%@QjbQNpgR z#|(8x{=lX$@fn*q^=eSU>K8WXd4DP;lxnmAv&ce1AguP=Lx8^h~1*koD z)WO_vFLltFuAtzH%d>Z{x=GR##HM~4^(q##y1Z9Iui(emPj8jYmpvaJ&D3ZR(`5~WO=78u@ z|HZ0*Pl{|CvJ7`V0q(oOT#_#QXNgap_k*NMwZ?x3IR3lNx3?Ysn}*BZ9sixhXC3_a zC&zy`|RQNBHGm93K|8y(rWk)3_z4;YmnvE0tPNC3}fn z*)o_!X?ik}AzDO6wIOSFtL(vh~`DlStL3Q_LSGVaER~_u8 zBEddC;cfa}SL==4*ZRqisr6tL0cCYUSqJ9BpA3cHZt22r!Ekl~Fz4)c=bXv@YI8!_ z-vrK?{i2&?%|(o`QRP4)G8?&8@`y{soy}jE$E4vnD8c23P1>W_K9hR4Dw#ND7yQdlAO`ytK-ez;y&KItLkrlt-g9x`PlyT zr&I+e;-{~g{%cblntHzRdn(~anMy9d&+y>p@x0Tz#DMdt@_Vz7Zb|glw!dXnIuz^( zDjAjfZ(`|xc49x|GG3O9ZmBKC887Q!74RS!#oY3zyP9A3T_l{%iOUKpR#+MT^P4%9 z@mro65nue?=+yh8lF#)R^|=-UNKdv=s51ap@QAgkYkxyRQ7a@8ZH@-Xeb!nGQN0p z^Lz1|$-d+*9B~@EV2UG5qF8UtB9wK!8~mb%M@tJ6slO#!&Lb{4WCS%Q$_KL@8L#6_ z0e=(0`2;hUPiM!gaj1y)lAda*D^8Su#PUY)Q?G|C|0`e7&`VI(rDv+o=3z>)A#sJ_N8<_3xyD== zy6xrgcoGcS?yr1=4&|f|<(pBdFROH*(aNe+7#8!k%Jvvbx5#x2hWz|LC2;HdL~5%o zE3OoO=cIKw7%0Dpmu;+&9x}C~)CJVZIB=zctb}$Js678Xrk%vNL4)RtT6v`ai)ohV zD1+4Ia3sE^ozz^FdOF-vqiJe(K6^F%fJ^dKk3oA4$5+z;zKgviiXwllTJxiL1o{&V zZe=xP0!lTN0P~fKsmi1bN~Aq&_$V?sSP4y^WR1_gF{2f$+zg9! zn6r}w>s<>}?qkMO?srYCkg~6l)}vON!05K>Fnu)r?FWx_)8B{Gq0Z+A1hM;m<3l*= zvSeSqu&tcKV2#)?w(F9Se733Z5qq0CkEW&Qy@z>GzNUf01JTHH5`FYrJ||J2-(%+_ zcGd53a}s9ED^zbHYM|OKFz+Rp_fpGeC{Cm>?=p$%Wnp+BOFD%9;I%Qwg0K^%9qA(o~MhTpqKSPk+Y?CSi{nASR!{7mj)OpGYOVsyy5vQonh=*#u%Q1 zAeJY}pP6w;BDp1hQm++x{mIW>wy7=D9`dQRPXKm%#fu+&zOG`<(Ef?khbZ6YRB1vq zKrj@l>!6Y-2wV|=qnR=U-2SWZoTEUH2FzXYBjpHwU~Q#yK(jK@o2KCd(?v9o<7M$i zloS)-kDi6&)H38T`x*AQelqhtGBzdQwf)$mL6ge$yW22>aa4`Kbm<~l_4_!fId)^! zW$KSjTLee96im0Dq8a+(4T#ZL1J*1F_oRLe&`R6x4QCul$26@Paby?zKm5P-FC2|A z6@*^HaID83FvT?!8q2Pa&;OtL@uNRkKjzy{(U0}hr5|Uo2eS2}GlB-Uh7XhWI4`{G z2>NztR^PhOCoQgjWuhPENPmpKJ^hS_jD9eZjLa31hfe+5Tm3sBzBnhjVdKyZ>ZGw- zDUwy@mM%&0G%!Jp+%%T8$LH%fldLi# zKuM1V^D{5}rh0UArbnt2Hbp9sQ$%|ihk?yN%kJH`>9zWe7DCV=HO0Bh9Y=QQzt0CO z$QoXH~-U^UmO1?w}S4UbL+MVv`t`>oBPCXa7F3| z)FhHCK1qE3dSdC9tU`Xfk3w11iQF$)Bn>hZ08O^%#hXtw^Rkt?54E}#uupEGo_XAo z3v}88h<$RHe)`0lo~F;PL6Hw2D0sfU6NUUyK*&?DJ}CGUvg`>({nlqT9&kby8g6pd>2d7b`D z?QBMB0Wac>x~x~JS4Ez(^ks;HbUiF3pi+76$OW-XA)5r{gy)={H946OFctFA0E>^( zTVNxxZGy=lw{X~9|5MLXFIdU+tyaiPgl9(8EZo$%UcZRTn_)&Ep^fz6_7PXqd?43L z>>E7Mr^u0f#6Y`)D|;M1$kn{?xWnMS#WuF?tY3rS1J=9o^|e}K4KEz9KyU>9 zmvM^?A{Ai#%(AlB%~S6TcAU8~9 zUUlVikd1S`LO*R6Fl*IAIt_P1hf%MfNs+h5h^E#C2BcbY&f{OZ$HNPAd0ziaqI}cL zW3*ewz)ho4A0`IA&an_P+2XTxlxjm5OVH2@rvjq4SdJao@T#J`9Ix{3{ zA3^vu%GVWW$uA4z!32pU6_ft8f=wd6~!`zVCL4N^XwFlT9(r zVD|a`AmxO`7uV%hG_qAt@(J;Kaw`SSp+N9m+^qTm-=8yXaIOo71$&bYb^)7u4ejNM zy@}ObF?{F*>akZn5YUPqm5rOIY`)aJRrUu;RR&`L;+P%|h+uC{jlO`bck;?zkzo`$ zamDbwiKkJuqhF70Y59`LrzV0tfT_r<9KZQ?y0i3yKEs24PgJh`=ZJx8(IFt} z3RZp10XmvT!G*v%4miPRj%_?ZRpnF_8!>*Zs;XT2PM?v%-nUe)eQQMO z*%1R@b=B>hRb4F8dVKMg@$DXfVCWNT|5G_|i!1*e^;ZVh(b)8;`QPi&_`fFvZ(AJN zJ3y#7C%qa&0d+2!Ttz^y7XiJVBgU`k3eLdwMBC`vJE|zzS~`5r@MFNS*kZLccfO+} z*E#9I)adKV>!z;MlOv+)W@S~E2jywLq9*~v)g#6~?LbI_kv^%)wQr6XxO$XfS6euZ z2u{ofp;*;qch9)WdUr2^2P0oH`3!uQ9>d44aMgyYwvlRw4`j!ycDgZvI+82k?&$-* zUooe?95bWdja1dfr{(ZCod0JYMfE_D%2Xn=h->v5l^_5A9}? zyZM*htamr-vfr%Ee)G89cyJ!zW?p#vfjDTFMk#Dv{QdWZ;m+}kAU5_^?;^__CDv|` zA6Dv|F|G>3vd6RhWqeZ7oa8?|D>eV`A;wr=wO;4Y`%6 zEfuXFW@R88?vO@8I z3NRz_OW_XN;&x0is%gv*)e6t*O0~tHHb+q!Pc;hFuNILacFJldn>_o`p2+h; z*svdnp9kW*;QJR2-}HAPT|yp^H_u{>16DPZ6X~sYC-l~+kzxxddxm0E0z?Vts)D-0 zaOTN=T-%1xWMdNBpVb8yQpO2I;}+P6Uq5~7PaXUs=^T|zr7@6S^_A@;mlC?MVTIb- zEz{O<sE!Am868ruckjsNFU~AV~r<9c%l61Uv&AV0z%5_=N$dpDf^70dBiUFqpPQ zM1!>obG2oF^X$|KxYN1=ju=i2+!i4_d}JSJH{1(N7y7+`$wr^mh<*%O^oMTN8Xllc zox>OWI@QHD1NO&`Hc~mCZ!M7a4Ht&?)7UiZ*Thj1tBgfPJB5MzYU7Lh#uv-`znbZX zYkPV&PY}v!`T0nW|JqboY2mEV%)#*RN*-1Pj6O%RZmanQm~GCO0b}qr&c=Hga8AXX z=>yJ9=)Lk#n}_n=#eX>a7z}vTV-Wny*vBcQ?tv(yy`8!PBKWLdoB;sC0bqmx zI9ULU6aY+ZycqxSvZfasb|y6PA;?aoH0ZVfg&UvirZBA1ZvJj3n)$8iRTQMMqg2@u zs;rdikFG)=YsBi0MktpD5Os#ZX(L^+L>px#9iUXs}P|DwP zE~EA%>slL+PqdM124u9kgZIvNvf*9e;2k1(j}*Lvf%lj$@TTNr80{U!DIrLQ2+|`3 z>EQIyLXeCkd3`qBw>o{S9_a>P2HCaO{wb6w;F}dO>22xAEG!KFo6f-Z5C4*ZBKg}dOIgiPu`HAxNGf0a%st1mId;L3YF-}rm z`*y`=D;gU&)9eJ@wg;Muyu9)d(snSpbpSgeUkIdB{JC9%x!li zHWES!2cLwy(McY!nFP4Vxu%=|7xS+u3`bn-htAI*>c;EUYICe}eN`r@$wd%{J8%G*)|A ztI|p-t%I8wc4`pKVd*bT51RZbSky8ZV5Sw5Q2^}ic@5{H-}4$u1RFq`2V>J=3KFNZ z^&9op30^;CLhln)7R65u9X0j<8(y1LFxg(nuH35p9*)KMgotyWL~`XPZ9f(Qzg`uF z|E#_;4WPwTtMC@d-AF6x>1$UO4(<=4?}W7t(f&^-`p0J%IDB`fkHd>hD&*1{86jxC z@Rg7|Q6lvWZf)VIpHHt#C;gYN`OKOHUC>6&+n0_QeC67jFFqSbHUdH3Z>lF9*Q$64Jh!qa0?RP)NyiY>LrWBPKBo! zi4YBk0LPRvHzK`H-!mdr=*@|xuY1;$YSL!@A*dx@YjrG%9*sPAaY87QNTig#Yw=mh ztersx7{stQu{(a7${K=F(u5`@W>!p=^}&7H$Q%Qb7aJxjtM-@!avn9HGC``00~^FX zI>M=xto@l`BY26~u<*tAomX2XY*fgRw~pf2Ta2-#YbU+6rJqQvW3_}Jrbcj?8T_#8 zGDz+~Z8Sa*@y|8ln-rS?+D?C${KwI$f5+&;l$*6|!z9KtFa5-!jkc>GT-1GxhZxjD zWmzT~GX_O(4;C&27uum1G31Vrxad|Iu6XZ%!9_T-A3QtBEKnEu-q-nCkX%Cz^l1gH z9ZF+HV#E#I%*5v*;=9s0!}mT^$qfU^2Ye;*`QH*tx15mJpTo*DXbAF1WBwcY3`~gS z#e>zVLb-jvGRQUL*3ukJSvHmpYM88zfH^ERv+r-NCcvQcSZ@sq_dbE8wr;Wu%U4CFgDswWC+5XWC}%=si7Yenz#D zhj1wK;fE+$<*+$b0}htwGYGF^pnQtMah@=hLsm2^B7wF8nl2eWzgsBM#SWb>*Swny zpWb>AW%wN8GkgyA89oDjhEIvl@TpM)wS@qti#ogL=r8^3np7QQXS9|05}mn2fy2aaR5@O`{p$ev!+e{o&%E7aQ7ljNkqVzTiy08Qe`#E(S#&1!}5pGNv;!W4- zvtim{Gk)`xx(2| zAS}MS;%JHBbnQ77pRHV9WM=o=#w`>+R*(R&X@|fT?gi(9!Iz>olK;%D%3Y0P)}ub3 zNMo9FezC_JZNJc!#(bLV`VXbDiw%O8Vb7>-;73Ha>6WGn z*u}c=WZ)&7-(EQBrSw8QBQ<&8M$VUsx8+xovc-;DS~BOu04c*3CVNLY^JaAwbR1sI4= z-PIMi&=+88g1MO4I_HrZdQu?n3Vhoa=t&ma;1#_tNxxy( zL!Q!)SQhPeX|4%)DN>B$#~93XLNI+L50NCeaw)2-J-ya)2T%ZQ?=X4bvT6b{A8|+B zO{3lTHC?NUb-!<0N%SK+w|L8uhkT_MuJ!IaOem(eDcU`KaHl|Lv~d(f4p_b{yA#P5;Mc^}i+) zdUo%_UcEqq4tO*abo8I`jNeb-Vp*8(_Y;uk-6|ZVG7#L2KeSejpnJBBpkD*;#e-B0taPtf+2kI*;`)(@z2ik}rF3wUA+2^`AhpT0||wS#za28&q~ zrQ{S9R*w4a+;d_etea4$ntrF}LG0oYK4iY-pIISu%U=o#icgaBk8zGLrn!#Bzbk5f zjvltEj%d2WXG1XJ+rVS})95dBmo!z-|4(iLWTRd&ZrY?@#!CA!tb_$0v4 zG3py>*K@4xku2Xi`ZX{aZ~nO+fK97G=U$plIlWjHV>z{=Bsr{)N;aIQs@!mWWPe>R zu&O-bVH>*QH%H)x-uOL@VHuIZgwF3gwGG-&r^}m^1*d&KT`S=+-xBiIwawQPK^Gpx z6SqAsWAiCYhUu?aw z1ur`L|4@wZ1YV4ZL)NxY%+XzIyO_3&h3FN<6sjMS8Mwk-0StuWA)5fro%a;t{Qz`o8>U3~)d_i&7}GAehs(BYqHT{Fdv! z8w)bNfu|>Ww=*1_2g-EpL$~(pn(ttnOJuu>WxK3iJn>d-?2O28%2i7RtHhpeh@-B{ zEM!)U$tmeDIg;7J@Fy?$)J#Uk7(mseQsE0dnI8HR>C) zG-a$hvrS=A*?cZ(ZB!2p@!U9>2J_)tO4{UGIw4;cTmgwjmPE%UC{9)`u{6;MVwbHI zS4J{D*UPhCf`(3UtRQHTw)Lm`(95w?1lupH7&-8vK`gq4^ueT`yuKeTB67X|ktK3w zVuFI_jf26sMU2=A?EJBbmNTo_rwp~9dc~BL1*}sdiQdC0XVxTA)htCDulEfzDNL_- zNwl0Xl~cUYL5b4ju+jGJGzx+YToRsEB!?YiPY=)&+DIgH0kq4|qR%Y^F<`MG{j}WN zU@D(r6mV(6yZ3iext6D8dP-u;P5#;4JcEx|-nl-!&YrDFUnL7+v$wFzn($(Kygoft zkFigpg#KkCHHba8#1Y0+au7TESa;i*9^sT+xcZOivTgj$3*{sv-<>LcsuMreNrg7j zj$^6bdJo?$(37C(yDv~bM!7jHKE(Aj5LcD{(%C~&(Xu&??WZ+2bj27w>GXzyoPSB1bxjY#lb)=Soh^3YgW2PX#w zA3P)qC!lS?#AEC-5e4e01s*6E{Tn^r0Rm0(BCjC6ufyRlv#_<5*>$ks4khjozkk`| z_30sC=Fe)(c6#sJdhB$A&u6&9e@6?Lu2c*+fALv+x{0x`6ne*a!1OsMqD%f@hA5tF z%0o8g0MX+v3erjdcq09BA?87X+%ni#LBquK=i2PC`(07vsi6%A4u%;zxN& zx&A6qED0%;tV8yq+l~?F%mKu+K`&IrfNsBh$aG?BpX9LH*9i2p1v+&U(h?CCqHwD*|nRuqpB=`5+9xDVA8*_H_6_9umGUjh*PVxwIbUMHiiNhgExaqL~?!`Z9^v0 z-9*#EBMx_juMiy)QgPK%*`ULg0eh>0tU4d0<9vXzaBj_V&&yNeWQ|z~@Z#QtOSaIh zBVD(;^ryhdPpNQTBAlaFWJu(nTDTKfDwu@GZy$PeyxCS4x5P@OjRfrld)iM?Fa6LB zxWIT&A(LRAenb55sO9BIe5e=}9SI?=um(o^Jnxv#ah{EcQ2%FuJDnSOE}XdaIhELt z@5F>NduT&=1w0tQVSJ*^ds4##oZ_G>;p>3J7)54XG|fbgbQ z_P9PLC)d`M+t}My;e{=mK~~3nYX`o9%zhYe$#~Ctcb?I2p~H6Ie^HgU8B+mg9s(4N z-Ncp|Y|N3OAO7Pr zFGlq1M*Y>ILr{O`JPVQH&9>NAdc;qaCO7q)v4_Y2Hw$QEX|@iq<7;75rd zudn8Qd%0!@Zft83t4!6LPm@#Z`96!ENSISB<_kh7l@v~MF^_K>3~jEpuH2H<{g`-7rS274Vn zVQm(EO*d!h=o+V^KU*y!IM?fF`XL?trae3`<8MkrI?!xb2iIF{1l~zSJ53UvNMeBm zWp!A_RolI;)7r6b@N4Pid=@r-hA3?HhS#ga4tX&9dxp~=$m2w)jQ)Vs*4zBXYuVPj z`3sW;rOz=N+hh#VQdyQr$%-l7`ZFJIEfMH&zl}H{js{TQlDE)E1^Oq{ImPD(Rmgq< z#pm`70=>qqYP`m3)>W;pP{|tLaRnii%z)^Wg#Z4TBMuVgUFHhON@J&%I#g`bQmm*q zByK6#Nk3l`y4V@L?3)wy^R>PScm5Q_-vV=G`#V8K|6Klc^iQG|TU3(?45kzVTjZTX zg~31r{D>{mlGohullR=l6lFpPMDz(Tkp?2W@F^qp)*kWZ7OpOvb^Q3cc=N$}h$uUq zHwrq;AF#lX2!;LlMorOPz1kZG6@sFN|62mNWGIMRIvKX`g$6EsR|r{&*jR5LK)n zgHI=ZL9Aqj%WUu865EGMe5IoJ;@G}i62F1s`dslFKKtS+6$LABJM1DAasG9i+R4EF z_`}aQOt-WDzk~MYf48Ik`>awFKuhdrT>ADGaJfzUGq!F2Z`WG;le=j@K6|hUMYlfd zzBc~&%amga8^&QA?s)=AGWHlHGAHU4;i`s|8Rs?QJi7innZag+d$APOXUzUso=@fz ziAhe|L$fxweP`{uhS9Wfy>EkqeQBfN&TOwa)yJt^6a4V0Cw5rrle0Eg9eNnaSLcXd zf`VWD#Q}f3RUB_VL66NP&xem8lqxqVhiqZ(jw^2szr7Kr`ePUUhCR7vDEw3`enLy= z58Z&hU6hGFf;Z!83$i&t5(bDKRYx4YQ0fg-8Y9ln&8FZTNIySt&9&O>0t$)#KBLF(uGu|vCFZk8b z`imO|H%{$QM@k=0x~b-Zu(ne*@0wyMYq$i2aj9?XpS1lI!qeY}u0JrkMpWp6|7F5M z=k-+JsTy-X^LuJvlbB5AGagC=C&O3FWgF$qRxk<%pJ3K3Ie)Ne(w-_`lV~|Uk@~28 z9a$=c7BZ5pCwa`OFMnqGZ)xKi$G^t83?%uM{+iX8h_Oj(ZW9=&Scu@Nq|008yQkwT z%?mGkkB;sS7PI&ZjkUq$TfXk>^8)oXwa{t&!2eURm(3ea5*aZWZ~%4>QSlJQp-oBHnUuw<P;DldDa+V zu`2HX!+bXil%;RwX@NOg!}ZyVrOW(( zJp+ZqT4ivt(k>}?FGy#gJZ8R~KByt}yoySMq$(n%b2r0I3iUY)xX3J^db3`wV68XU z@0~XBrM_>}Jv}fxJL|~>+%9L>0F+b1)0tmSt#A7QdV^I9vBJU8?v@=vK|4+gv_s(X5=%F-6a=MS(1(O)XB22vOK%Z;0bj)nPs)$`jikBmuWOk{?bfIF z>bUJleV+>Zb#>a2T7`6P;v?R!LMAJ1z5EEy7iiY5xm6sdGKvkm<|@iN8o-<1?={>SOe$$a{lSi{cqu#L@ABi+iwCU+(T4xP;c>U-$_Bl(O?eyi}u+-X2agyDbI zlOhYQ*69GbDT>}WoD;-dg9*YDH{!9Ye zp8g)!;d5^zm$g|#_73@!e>I}J_$snboeDQXE@x1&5{2Pi3Sc5B|I z%mm+{oEB3#3_>L8sHfWUjqw|osu6HmCN3&9-boBxftwQT{Ivf@$1b_+9Tsq*)xrf~ zb5;w3OuW1gNX4t-H(soY2Qpig$!OnymHNgOQgFUtg=sbGKyXPlDKW`})Y?5C7uEv`m~-<50apG9@U@|Mr$+}AS4L1YKc0n)y&NvW%e&%Y*RO!$!mkg- zB^fA;9Xw-wCpD^rvVcCDJ9==_|<<$}Kn7a<Q2gNs zUmF*HYG>~yFTBS@P@I+xg{R2EGrK~u?oT_$MakEP;;;yc@MD~x@O^WLJ`CU1&0YL4 z)(+R{_7;1$HvB%n?4w5NSPfV6!c*SB1fNaP`nL8lKKo8#vQx}Vl7Y%~_6jY`cvg!0 zpzw%GB{oh{XA(7%87W^oh4tQ+pgQGb&3be!T-bk&Q{K62q`xavQNjjzvITe#nIM}~ zymHs^_*wVQ$>VFooz#8Gx?lk-1uO>N*oqD%8?8(J@c@-j>S&y@5SQrhb0zD2FUoEk&iatDrD9YcTsbjl@G#| z@#a@mt&%$^`uCtj2S*(s?MqHa9^hD zC6o)ZCRlsfvvvM#j8)+lO`7jxql8uISMt?chN~86YI;a**!~0e=!!n5Z}~Xc6TaA= zd(A-*sb&x_Hj>(!Hc`0#RmJ((VBTO zPm71{7nVjRQcOqM_=*X!Z3$A695&Yq7DB;dn)-n3nDmtzH3Veorfhz>H{I2=*#;$< zeaXyv+d>172>XQ~A^oy(cLaIEC0USHM37H;=xam1^$*=Z9_99Wma@#@7p-6fd4nKd z#E2jZ@-qN71Nm?dIRHkG?#{32Ep79;P3ZN9~F0B9OflMT|G?3#xgb&|=^|;o))~rf2Gt%)()x zgpH~wGqySkXMd4D>9StZvB;m=X>(3ep>Q1pl=mx7JbVRrREih9D5n{fSRqHe%#E)U z2hbjJ`hZNbEi5f7JzW{29eY$BRKLwxJ&#=$+gH-Ap z1?yBe8dIA)uE9c}he4lP5<$OblEZrb-n54n9BG{FzU=pm2GI6((B~O;;Unmgt4C@z z-nX()Og&bg(1oTqy(mbA*mj~9+qAVKMix?Tewx|rvMUZG>-AoBVsTZk_QuVmc(7_1 zC<+eZl@r&F;cq>7#0W?kJA6Vy4QF*zB6>FZo6_*@_uxG6n-G3Mvd?7!$@LlxEpqw^ zdQKIvV5ZT2S(|LXgfsQqRXL?Lr)#BWnxB4xmU7Y+x&b-rVB5Q5j|B#S59gqUrXs{Y z*v;t+Q4`G*Q2`qpKCzDuck#ueB@}=-HT@?O`hwH!TZw|9LF$TH9XoOUrlJ5g;FAfr zuIUUhn8t@1)}$w>9sqm509)ioFFg}2r^2OYQJWuEI#t*bd+%K1n^)|oXq|pA#07m58LfDAA}Oi>4a9hFeXP$a0Y^nraZM0Z|t(7%O7L zT?iL7akI!8j-sWCN)@a1Zbd}}N;QCD053tTqSpIu)};y}2w2JgdES|G_UtABZ2SGc zkDq3D=ggUT=e^H6@64b>a;Lq33YO>0C^4Ec5B97EPWaETr^Yju(1};zyKVd$nO8T} zYv)f^Bim}p%6&VoJ-gjD$i;^G9109|F>Mh>|L9gTVi7LdVXGPM zt@jafqcm)bpeHM{jVG}>ax~ND>Dw3&1bf?@jy|TZ6yKS6RQ77sYbV1-zxvB}WF^Ta zM>v$I1xK5s4}3KE5;cge0Y=Hbn(dbr)bclaD;BiUhnsEGkSt5M)etU3CZ9?aiAPaT zOc`bdS;;~maFKfI2sUS+2oMSe+#{$0lWfO=?TbsaiAi`V1bZSlG8qJY8P24GxUv)NOSh@Y> z;0sb1zKgG$@Pq{MY_1)f@v30g=S-IX}+OeZ#=cxPty#)^V{_EjR z&BO_L+5va@-@^*#==gdcAPLU5IIQs}bUYo-w;~`o=K=DDPqYY9$QK`sXO_AV`hm;^ z&xb3M!s0X&?^8al9zz!*>RB>6#~YK#SM=l)y|Kyi$g|&OQV875Muk8#aay#~7UTok zNfZtJ)`lL9qoB61kNHI(0q~Y@LD_>W!_l9iAZ|U1eGJgh*aRlvu@rjxhD}`e-4wL& zM{S{x*>Dwlb+4bog{O`qw^IORc$T=zW>F0fXq}{6d~Y=0G0j0TIuq+Sb>g%H!CJHf ztOtlN$pUSSu#q>Rjvx%7K7UqZ8DD@!%WXQfEDNvYqj{OHvD~MIe6gj4iv#bn7_S9_ zS2n@ciT#_~g#e?Af%wRRtPj+}9q*=*+MDm-vF|W`vBu&#w1Q3(6-}6T^G-o{WzZVd zvBn_=Ay=#K(H#n5eT+-`G4J4lRH_qz0aut{esBX?(y`0f*CMn86=y6V$5#83s|M$0 zCtj0BcEPW*6U>I2qyD~e3tBb2R`)VlaOE8Ja2uuUt&+p9rf#bU#+@WsIA!WG#$SLW z_y$g9Ah`ovl=z$`4EbL;>vD7sE+B}We5|)Vq6@vT3H;KKH>?!=M4oJr#RI*`a8;m7 zcH#_OGx;{!NG=6uU-4v*tmM<`nKvO=Pr5?mZOza3CC6tRnMLun1|yb*gU>%9-vDku z7UHs7213bkn>li0>+dj6kaN3zUvF%>`B_m{JmHFK!`>M3Q81~j>3G>hZ%j6pqZRIb z^2QFu6IpTMf|H!22WtF&F-o&=xcUX`P6$+D7YSd404XoTtpYp~;Fm;s^cGksM4rej zZwSDgl`|k9OH?3#P6u32k$eWC@mFMU$Wt(D`qMgf%RjNeKd>Mxe5L7|Yfu_)+=Z0! z9v%pfg))05RKEaPHSYtuI2{X+;gOt;tZK2xfUa9X%Q`NQ-%%A z?~n4k8!HHXr(vrNxYRu4JfLiKiN5(TQf$2HvaS6AiM6w;k>P52!ao7(Lje%8~jSI-}bKqS9Xf3v%#UvovzJ)`P5J17B;jmuDT=R2 zfu}49<BK)JF_v00BgC@=<a!15fS+;s;*wPK zrt_0e7lyc8KJqI00Rnkrm*BDYd0hH42?-(7co6>(`%F))(B{5?ia6HYH+U(>k25{j zq3~`LmcztX{kG&iZ)_!ogH)X`Pn3-CM9IlG`MqGu-!#G)NMrW@=R_Yo0+`W7TCy$A z?VHG!no^(0bLwA=M42C$-^LwE(M_^)cU{5_YKSCm{j*J+bjAxYeh6|_V0=D-+AtuJ zvgYfa4Fisv{EHc|Rsc(5zzeY3f-v(D7?A!@N}8G-X@Xt}5iGEr;S($GfDVSydOKrD zG1}*OnT+<#J$qoZ4wHU4qwT^%xG);YcPhzOO7g*bgH{At2XQn3IzTn$@$N{kg7IPs zmQP)}odXx$$r=q@P(}LCARZEm<2Bh3bA1LTKBi^|F(UhOwHL>_BvByy4?h!~ZzMC5 z!NhA!grU$er+gsODS72VAvR7?VHYPRy()k9|K56^E%)Dn1*Qhd#CYa0-}t6)(AB@ny(Gcl`Nq^SR$XnQ-EGPPZQ4&Su$7R)3)=u+jq(oA~LqawVT3ca>xP{CU- z%NQ7Rwc(QU$R*HZCWaIJ$zc?THXS!Bj02tF^DSVHCA+*aiLXV;E6hv_#`|aT$|)lV zo9Byqn^(wz=u$WZTZRm$1T~D;{n!e|L&$?bGnm)-gJhUbWXPT;|7{rN<@q+lkcQ0Y zFh|Gy+``}hLLnUs@CsV8(IOin+=NKP94NolSqW|4Ex$ zBnR8sUX2;S1Q0hW=QK-jlP_~~?1-YEI53<~2+N8=B+H^fd`A`WEIF$H$}3Y1sV`mv z#AhMKky6!}@(<+T=<_LK_kq>q(Q^0s^(d3$3Zp9E{uxbta~s|A84!BE~kA8kyr~_9%tbr z3<6pnf5>dXoifkC5hsIYPcZ6p-F&~>1yfND5n}TRKV63hXtLxswUG7Q(;3A+-vN4#4fu; z4jx#Z0b`BcEx*&zyBHd~vU0cg&c@4F{QqcT?RJjpexr)Wu*7Z100NG<-Yekx!z{Z$M5)Aw6LGR zZjffoJfT^B(9?yX4%rHddU}&IMmizZvR!_JX`o8~y@5KJt34?LwaiF^3BXWXB>E3(630JwjkD&xcj! z1d((8n8K_29?$eOG$FWQApDnT9NMIi4FHoeQu=53-pGdFy$Ka$XhGyPEYdH0;L$H= z1O)x8r1ej*I9htEu5`Dlq?G`pZ?;(m&hfoTdJyx@tU;Me00a4|_6GZMbC6;aYKbrE ztv^;8ba)cIrldwo2iym}oQ0QcVXXx4UaY8BaS+xry;N-7(Ck_!c>4=l;HyN`=kQhh z8;_P|;T4LA&VOOaLR|vv6D~ekAkEs#Q5d25UBgdum*sY3Kt$@7EcMTye-L)VdLYcj zVJJ%@sW4Nt5hT?UbB!x{V=!mH6`E12qq}G!^Rf1RJ39k5G~b#?wpK2T$<8)xpJsg) zZ~$O7@j{RvpZnw?Mk`Wbk_ELD zsc+kg0Aq?hzzoCt)4ra(kFg=%ivw)&#Loc&?n7JF6D#rpAgxKp1*3QfJmhUYo~neC z;HR+8CzuEyjv&h+03Dj9vwS$PCkBbmb$+wq1%w0*2jwsxciVpvHO00^x!cbD$7^ic z^NxHtZ6!Vz-^|_M5|m(gKK5XFW}cxp;sI=%b3j3%xFCaEf3x+2zFr2fzgSR~RgV>| z!9Kn5KDs^I8yf@9jjvP)XVpu>6_Yk>1}{Q6f0NP4@B!A#WQxV?k4ocieu>uPfXZ^J z4VZ)tzy^IoVW=Gm?X6T{Tzi(*?!ZO84mw)7gQS|VJQUAbX^xW{a6fQkC+g5cLP;S@ zbeCM-uiZtRZm;8;R^#jB*njMLT8(oTIFAK9znNvWLDP7E|65eS$n7nO7kFBNRZ}E0 zYwaYe>2K3hX-b@{pP^q#-`j+Nsf*0BJpBw%%Clxbt%mZMHB|`O$b!D6@=7^xId4lZ zurfBRKvK&My_poQT4UkC!{Uw?W!OLJOXFOVu!Q_}v`zqNS)z{xW#nBTJ1 zRDxmDODl4`I$Zw3pmkm$kpw{TDd{5}*iy*r8-i3V_`3Ll&1sxL!ybhAtk~;gIm!b3 zhVy$k+p#?B|7BRx62AgSQJXMaz9%&1ZYX%-pdaL!u_bUt_kDxbK>W|GmMdn`OCADP z_65?ov(F3x%b2szq)vs*EtH|y$A1~;0S>aD#y;-=d5#CYh50g$Us;7Soqqoe(EUg7 zX~uj@=8O5%bDsVX0oPxR-j?Wmww~bD!B~Y}kJX~Zk3L&An z`OWamFkavcJ{7)HX?DQ3YJLN6i`z%+I6aC^OPTQ^bql9~=rTy_5nwaLSS7{*eA4Ax zUh5X=&GUTHxZkfg*lt)V;?eJ0I*DLsyJd#TM#YHk5*F&wLJ`5#&O>|rhY|ewe7ddn zGKWc>!^{|=_LnPD0W*y)^D%S2*9w`%KQEAQ}i1c6KdeW{a)3)VZKl;Na! zjftZiK<*GY*@zrruLCKOj3>96XbS7fiKeC%iK}GPy~GKuL|#j8e*{~JuSnd7PgV33 zBxh}U211&?GUrmF@@kZEImN8(6B*9a*}>$RIHJM8d9FBRu9kQ6zK(C8A(wS zj6+T#ld_xPNVVvF&;t!h9^Gt7vp~ymUvcbqu?RkuB8S0uFsx~>b66aNL(|&h^thmS z#kSJQ$_*J8ifD*~T@HD&^Mo3PU<{{2GZ;=$Pn}>81C8T{19g;nFW{&QbEbvWWA4>7 zGKkDK3|O}mz9W`IatIn)gVI$4aELYpxFu1fh58w3gGxE~yCobU@$Tp}A-!xe zV1w^`XD-EWj?Doty5~~OZ8Vn|OK|C}+qtyj6c<@>6 zk;H7qx#1bV)&Bor0Q1*PIxk5KnmJ-zH9ih`yQe*QgT0zO8Mdm3whE>je;PcmUoYpw z1c)~9F|i}TM~If%{3XG43x=OagRK)&F4SU666mx%H=-$N!Seh#$V?-Y)encs{8=4E z$gTnRx#F$XFnj;Jq?otAe|`h;gP0NS4uq%6pwZ1RluV=Jar?0TpSY&TPXawMMMm>g zdO$j$MW{hfX5iHo=F13WC%v1z8^}7)aY|E@l z(r?y@KK1%B!`ae-r0v2`0mg5f9h9s#((oPx4D zPCdy|`_7BDcdq#JX*CsVJl|Q55h>q2!vcP)Mas*Gad0N9wXXVnPf1*JC9 zo8;5Pb3n9(@_SLiV)?`|i2MY_WaxD-6C*OK(Lj-6DVP8tW^3{yoeNIp%ntx)a;l-F z{i4L>$yfk7`W5yd#4>;aWFZ^E;84qzS&`0!CQFAO0Ao7LNDPy<5T=mNMQy`ud9tQC z8s@T7Yz=eli8{(igeOj;h7~QQcLX>>Un4CWp`T-ZU{EkU=7(R6JVYZL{N^~z7zeN( z=JaNf0UOI+@`?>MW)t!oDFXb=K(#vdA#m)u4#%eWRpt*J$*0kc)zn~B)X7!EWQ{~V z2qyWn{w93kW}L_s1Xxcfw5VyjX%yQ6BV8a|YNJZNI;OviJcZ;VFqoZ;XHSJpegk}K z>|}enS~#Ru+S47)GHruHYzPFIsr63bkOflBaL6O_gBdc?b(?F5~QMn1}H>Np)v)?-lL*tKMe=mDEcztZbWtk$sHn4m3qCy zKw^}&0OR0gPJ?IK6fv16BE0r-SE>l~PgfK`>j)!t?Q?M`1#|+h3)lV*)*eUzZ%TE` z^Os_qf3G|a7V=ru@jf$csZF|!D#M$&ZRO)BQ-{y$m{X3s*#_feR+M%*bVSL9 z$+vK2q+-~tavq+PJ1Wn$cY#mfdm?fuTUyj_N;U8huW~93Y^}3T7jg{+z;dOu0uZB3 zxlNXEmoZHW!GqjQ-CSL;PM;!aCe(*@wc85tsy!H-91eF`6S0#V98VEzzoJyaLG$JI!%N8EtC z#ebN1Ej>>!DvOGZeltN^;Lx#C40`;K$$ae^&hmS_Re;CRg0nMuCCC@^qPD7R-*E<_b+n z=B$+6y&=ZcG#s^OBKr?|MpL(*HhmCJX-CDX4FE_pPK zOR7@0p`6d>k;!e|hB8Q=;S|0!F6k|$ho-oM<{x0JD8rWRo|?jdemUtCRP&c<7J1Lb zBC|}{W12-6G*DqFYu5Kir�yDc+EPEVihH^FigqKyQ~#&7ikzTS=P}YqoLeiz9%~ zJ4TVlw3(LYn17JK#5lBrnf*dLsJ_^q%a?r|sc4#Rh9((x#YQtSWO+`lF?9OfB08s^emr8u4$7_cgnNDHl6adG}lQf_8H0om)t$lb2vzJQaXwJ zYR6JdqK{l8`qGp=;NoBA2_zeUS?1?@$U_5xI8Xv;EgjI~F(=13-O*jmI zQiPA3Y*^#uu!}ViDWwP>v&3PIO3fOub7#ZqRUkCK_$pzIn^`qpsSnNzz~oY=L*I`8 zTopyp(%V=qG77{Ooeq6WojzSkk0uucM5kN1hYaK3>1Mzz*0NP+)S$L4x&ig+V$Byg zlabmTV%nr$m$GJDb0;z?qPs+wB`yI27~+CXHX_x|d0>e)@>^xTw3qby>Z}yKZeI7_ z&}$OLtESA|Grg`28+zS5sWrW(y|5d4D5EZ z(&@FIE^Cior{DSC)9W{9rs(zAoBs{HrjTB*-o9sgt(;`&^?r40daZeGH}tCf{a(?l z539A3ufwD?jb2Lvdq=Oj=UUV2Dk)2+*JxeV9=-1VW4rX4Tn^tSpSsXTUFd7@Jb8so zb`OG=^$fmJqd}AKd6fGvEzfKz?TGXt&yL>qoc7KhnA5(diqKQ?UYGI3*9`r8kM`F? z?6Z=6LY+}_a`G7BGZSrZsDxRq#$w7gZ)_KJc0(oLs4kRysCGMidvlFoko21hDuOc-2eR|F;O^WCZcfmF3#1CDtygjc=`Asg z40c$sNRPLgIIIyL84Ruwq^`Oh!orKCZ7$B>-wz3JT1dM=Ifqg+{je(5ua{}Au_;Z-E zwQuCKx{`61Tyj~YbbQ^^j@9AF0KtrvcUq8GsR(#u-w-Vg`$Z1J(&lgEB1|4E>kKry zV?a3RLT8s#`QnPU(fL$kD|F5u@*kq}5@{<9ofZFCTW)k}#PSRib-)}T_DPrPD+tcO zZv(NDw*QL!Rh6a|v9rLI2Wvob8M&D&k>F;Z1O*|UU={{tt=yqc@-gR^cw9u?MAx3B2Q@1b&rOVOAIieCRK4XRK^?)&fvjyDn>=LDe5=gf}tJn8k*1p ztF%7%eYcsv)95w%V$do;TLurFe;m4a4){=ms_Ehrrl&{)@%bbv6ez}|J{<4Xv@EOS zXhM{TV(9F^O7*@4t2)cpM}Q|k1HQE1Y4CYx7HN4!Z}hj_^Br%!|Q`eYQHSChKDOTov3@*%o1k=srG4$4o(bvapKkC z@mEJCUK%VpDZGBf;_#%Y<1Qa}#l-TGPT`l6>r>BDkCJ~^x6A@Z?{K+y8T{N2{N*P< z=TlZiQ3G0uOW|}kmPBz8kGYIZ1>X3nC8<;i8cn`nI4s3q62Evx>t6_Z`g(5zH?S}$ zUzyWqTXG+)bIBstuTb6l{J?%V$*^!N~Mat^k?QRjduxoja`Ton+6)nsd0j#`0*a1cVX z1eprJLL7Jri#_{Lr!q9e{tZj88lVgbl(POX^e=D5F zGzgyH)N$2NKT<0<$PKutvxIdz;^d{zgK^uRZty&gQYucLy6a^s1M!2<8xmhpT1imB z=1%>*W2HWDsIHLu#0$_QoDw8ISL?L^`F62UJ~j5@$t+_IU0B#~x`$>>kcp0pl{@)zo*jWjhT|nA9(pudy6!wm;5hbB%nhTjmI?3T z6EI|FMN1b-1%WfbJ*TV6{AfgH%`xk~nmlBDDT^luZ?`vvax!orR{XhRb~VRYtUBT+ zwv^C2;t13IcH<`nqCg|hO>?YkD|~u1K10MO+#4s}WAF*VpNtSeQnf zOc-higIOi6B{*2prOx3$Mya&}W6np#C{4IS^OPh~4e=A7`W_YxUHm~24kH6Vy@-|M z|D0c}4QhJuC!pn0INYP{s>gtm}< z3wPlJtZq=XqENeo*kQ^J#D5k=<%GZLEM!cUcoN_Y?pyQzwuvMy6vM#jQAzWRC)iww z{7?jiUA$67>Hu9E`5vd~cpbW!fPsR3&^#grl!tO?T(l#q4wN)htD(uyS4UDLQ5T@( zcKV*I57~xo64aCG{N_^|4|TDAP@iv_^p#tqvdiNe%H!+gf}|}RCe9Yw?6qXlf=-Ls z3$P-@1w_CK;Gp)3Ypeha8!P!w0xNz3qgus;@99fAabgb1UUy&Y?ThxiH=M~)_!Xa~z@ zb1=SH-GQ&=SPnV?pYnW;I`9T?*u8GoOSA@Q0m4BPd9p1%A$Y)Rt{domzP}G!+=?dk z#ov-C#|5qK_e57UgZsDP>xIF(pMch^8O_uV`TR;&@MCsdh;&CJn8_pviV-704L`q_ zhvZJDayF)PY5&@R=Q;o{a^984?k>AN{eJ_q!{sC?jh{G!>WDpE(D>vE@x_@IIhV4o*IIHSC4kd0$YgES6> zE?%GLOEKeiHML^~ID-rLBt!=MowWTx(^AAu1Sdwwjq7&p z6zmPexquy!KV*U#RuB@rM!Q!{n4sg4D6$`MizAgE{^YBq8!vvXXHl!lZG1gr?sA78 z1hYV!Hmggz0Rr^{@&h4a`p4J!F-NVN4m>dy?`GHxd`YH!TKv#N3An(rkwX)|7n-J; z8l!3n<2%XDI7Po@SiFgM@L_R!_Wi6Fe>1rJQ`}j;!++W#jf3OM*Q>$t6~lTpo)&AK zJiXi+njQVbTW;mu^-8a-!APv@FruV+if2~G!;{a@=>Wx`Q-`+*H-M+7PC{!bI9`C4$(0Sf z?hrjE?^K6R1Ib3aNtO~carJr7S@Hl(`SN*{Vxail5#C{&c&#UH^i0r#`7;z0-}ePu znnawW3F^!y2=ok09=c~2ua9gZkoJ4JK4lL93$0yOTz3#^cCGzs@TBi*e;PC8o9Iga ztnOWtpRp^az8{-uaH9m?6o)KFD`x<<^141yhKGvM+7ExnOxY*8%8wx&f?4a}NhoSz z(X0MI@viXeTIup{_DcQT&AqMU{TS_UR8!uo=x^YUXXXM*i}9SvuZwm+A6$?5{dAQ4=#4&s5}Zf34{r}RF0v+Q zb-}s3o4q&1Srhj_^?t)`XWuBdx)kw_#F-b#d;N=mfl_b%i-2kgO0w!#W40RKm8=_K zRX~8xp^wrWgoaqYb5Jn)S@!8x_s-;`3V3$=1aZ}A$#Qrg&-Xv1ZdWZ{zYd0OYIbzj zagopQ#CsFdM_REeRE3%9YDWkRDtZXNeCnr@x3xf;Ks02L5;Njsz@bH-$%j&HX9(%o3xJ&6W`oT!Je>Su%B>-}Ih>^_#SM2TQC%KGier3aduD47XNBsHq)$2%=iswXV|jeJ`Ub9(I2)VQAbGf*9>&`! zougiy4Eb8(b}BOTq3rEwwO&X2=dI_7#bhGb+OD-bkM+iSumG|IhX*-CiqLkz1&k%@z1F8d8RfUGrIz2UyNJS;mC=@>8B?PzB{ziYcA+G2 z?PXT~=Lg3(t@~<-HLwiFe3bk+$rEj9nY?&0EME)Qrf;}QDQiylEar!X!u$McXk=U# z)Xd&1AVHOY*>>Bd{-jQ9VNmjo`qjy0(pd6on#BsVLZ7En0yEmrheA0{BuUebp}Doi z;1^63NGjnMpaWwhiK&&3OY}wS@lA;__^91^eB|)9FeI#>c!zGPo(F^fdvp@8lU$j5;iDzBfAs1s-g`4!$!)KiS*z43PcD&oleI$pW=Jxi7 zcK+5C#(~=cE>8k6MqZ$Xl#<&&ID6zn31x79=wRuEE)cK_4F)-ZbeR32a~J5D8J59d zV7ss?UdEkt*dIDVe$iH;b$JI$Z_FRGi-42^_*`;)TIhQ{E|F+IoRkjU*-WY;cUEyg z+Wg^~6cp4T`wQw(;)ZM$kg8j8hydjifJ0ajdG;f3g4aA#9&VuTqcOW}!0F1Av_P8!o`2`Gx_1s4c_SFjPXz@?h^Z!mc>Z)6pF|9%ZJ@ z)EcauuU>oDS+6xmJ6=ahX~j@pP~}*yHC}59d&YG&;cwY`D7gHyj?VVdhVX$o!G>-J zA}Y3|KY1#vYlQ(db zz@@Wc0Y8KfDp;JaW=ki)Y<;I_>EXjU;lg9nRJ@Z;fHl9>eOznL6|{qG65FB3Ah3hL z8rU-hP9|#Am;}kP`(2`@{t^ z(BOG=n5^j_kAXxNYTIj5ECRa=M`5naZ~1EUlLXjIvB9gDmk~GMP;SxHtZ6&{;Gxse zytIlHLXW)$blQ#|Tave^kE#LiXduXO8ZzL$nEaUrFMFnbck=(4&%5eq21*GlHeNq^ zw0sY_XDTGFJt(yys>4yxiAKnST-SuvMx=B#7qLaiIbf(_d$L1IiwB5zc+M*~xn>hj z*DQw_R3HauGh`tc^4KF3Y%ma+P||!WQn{QPhmvDzTIF$8A&)bJ{7mF=u9hlJHm@J0 z$m4ugN+p{YU`RIa$U~9MTS4x!oUF}4bu3o&!7fR6Ht)fvjM==9OW61gY9A?UPDIdv zI`?YOp)Ort3%?lq8lb<1ASeH{h5zA4rSRY3kv-wR>c7SRyQdrce;ah+KS$&L(|dM< z{|Q5Ye{W2uSu+QXY1lyi*+71UKU!MO=k26f7s<0s!W=54X@psv-#X2@P~DDo{!GGL zZ_3o1|#9SEb?@-pV3J<)64e@m~UM;LmYTIQnH zewtoC{b@J!S{B$nz2@_IJM^lRXPNZ+y_BZWE9c<0==B*^$1~~mhADH?YpImAqSpha zSm?Fw$~NgW`D*C4BFa`FWea~i$E+kaV4mO=-)0+XkK%G+6)v8%s`%Qs&iG=Qr->%Wv{^q?2ZcNw&O-l6zQ@GpoH zEcT#B;tdw5kR^=Gv80GU^39K8)yOdeGcYq;5XO}=I4{{=ERp!Xfegr2m%tCx$gbPVt^gO zUPznATaO*)Es0-?!;E3-A*BfDbCWAy-PTo)1|%hMZE}e#4C2BH*+|A{7UBM*Ome}) zN{vRp_TP^NX(~COs2s@*_WrhE^;v!wLGeVJXbfJA7> zoALH=VI{~F3C+VEGMEgtQ&7uW?J=4AMf4!tg|J;)45=O*4@EWziv*76sK1b{bC8(` zuWd&*Z~H;gE>1BFBlBZ>2PEJ`w|j8#h~=5P^9XP|)GCwS&-%&r<7D@b($o)})DtOn z+B-_xI}m^Oi7Z4D8{O@F=l=12>PK|P;o-k0>)arx>EC(!u#0P88KHj_F&uwFD>=)2 zf;55`s=<5Z_|$r%WKeL5hX)HFoB<&dH9=MMqUcj<^<95 z{Ow20!}%()WwYLgl~N9$5a_y>$x-0<={3rOrTyfS_=Ph0$Mj|^< zkD-)EyekbKmqJzT4L-nQc1EK31k4n&@{W4gB*J49+Wwmm1&uN74$fQXs=XY)#wAc+ zla7dM1~`aVNOo`#Q7I2>M0{{ZIwBq)mqNsOTWv(dHUklNlJkj(7iu#Q!4A~@DAkCt zl{nU9ibV{KGP5}nVkJr*LvQoB%~%aVFd02A+t@8K&CGtK%Eu~00 zXiO|4{?WefXLdXN1d3CNaU{OaH?9{W@WA+P6yx_qY3u{ua?^};^TbphS&DHl5L7c! zG&KkjDbci=bU9uvT!wTALEyS|J6jj8CLbr{jna|{uvwl1A2Vkfep6z*w}?SNJu?Q; zwbsn3?08%dCz4n9BLno~2z6V?QM7U!x^ODE2Lj09smnP8zNuclo|J7$Hty-gIZ#ZG zeWhcFYOnx0gSk#$_5~>3n4C7^NNZ1?g1>NW8* zI=#39b`YBNW?rO(+mtBgmZ$f0Qj8ujW_FZn$j@)Kwn&mlIfNPTnnplAX%x4t5LxB| zUA=^z*5rn1t(rV@@0wf&4F|O5MDj=cjTpUr(zvUBTXLwk{sBBlbimN?w6iz1o%N(f z^|(u}WR2LDC>lSwZd%S|VQ+ny)z`C9LjcS@+enkn)8e?bvu4z_O?5Lco9KFnSi^8> zKUDptV-{oA783 zM*>SsmD1xxs+1y@pb60@r{Hu=GJYdRXEQ#glftw1k-WA(LC^hqhzXZ5S1r5gFq89 zh{>IP(IBeTb5or`IM7$NXRC55wXK3o>xrN@Ca2$L3|uYPz5_l3y&RAz$jTt8OcV{n zK+UQBw?NT=F+dhpiqnmin z$SW8-s$;d1#^i!ej4}D4FG(xLWZrRNOx8karbc)$jY+M5aykex2DxrD6Jt=R?iA`Y zZ%ob*h9?~&QUfW8q^h$0aO~b~CO!p$Krxr4fOUQeh)ckCK^2Oq&1<8NnBAn-MJO=dI^C zJ&B2}en5_G^oSaYWL%7~Ap|IjB%860i|u+@7lUGE;TYophY`6Z7DxCvYtr;Y?B{ z5I1&g*E~S}v}V2cKBHM9C%QDNaXRNm$X*zkqgi(qI+_(th-U5HL2FhK2-~a8q+-fE zRH^gBtu<=}G%G9+m6FW$VHWi);IC)5(yV%~OZuqQ@GV-iisXg}F_0kZbuP{Nw4?!K zYSs`19D_8n41|j#W50JgG;1drHZb@Tswfd*y9kn``0DEJvWUAE} z42HOM>Ul1ms!t=MIz`i!d#h7H%XW3@<3k;tDj5_;p$b>qM1X8)*PRNLfvqTPf6y$55e4+#Vq5YxmkxsHe1k_389ipKDK{ z&i_RUbz&=px*xIxs8G58X^;5H^hvslR&fj>-OimGO6i^WoEvPk+j1#hg33vqNMMT)}8{8Q$p;mJiQm{D@x!DLoG! z+e2&?2j0g!F~iRCd_5Wqcummf>Ubm+B)>r;hey6ZBNwh4&PL9X4^My}P9x)_5hU|< zN-j}bu>j7*R^u~Ro^$%@(QvK^X%`n6qgLf|Uzo0@t=gVAEZ*O(Wykhl_K_%RdjYmb`31Z3S;Lsoei7|s{M{?2Cu!bk3bx*CgMXr(E@O0heWvy$<;(oOMQMmf}Mo@ zv1h8({pzF~Z93pZ=yjUN;Sz?1ey`;#K+!CIVjU8G7;lTf`$1~l0H`uyGuJHAhU%4+Z~Uv57SN z+nw`sH>hPtM6F!C?CSfU`(~mxU!zvMVp#)g6RAJkX^^`1=+;OL-k6Ehb9%Lf)T?&_ zsdLki`q~78RCUB}fs3ErxZt`*20mWW{8&YP43Qs0z(Xrms}9Ct2Js}tY8oHqWVJL} zyynTkhqu0#r~_FmZHC%@hZ*~uN3|Y%d0pn%EBze19N~l}#7mjH<7hNVcg<#Dux<#f zTZM41!(x@{MJ%Ut?)q9=RBmHbS#-hLpz=23d!+>EFq_H%!36PAAYiZ+1dl0t``d&4 z?ANUadr@k#OId;Hyt1c5Xf$C<&&=&0^lh%8RjAK@Zxg!Y3=q1&5ITdt8;JYpMl?Qw zvdlk_y^4BZFO#Ao(d-loVd*?m$!f?^8kO!a#m;#T8H)-1! zmtTnoh8={`@G1Oss)~6;R{c`+vJ{XZ{ytzo-P1uWYp~8WJ3@(Ll^985d6IuHI9hR} z3rCoa;9>6V;)RII4y2Ml&gelL$;CJ17-%A`!*yS|7i^qkfTWR;k=xKB{UR}n158T8xo`OJ^4L$OLEBE;_DS3ukYSin`bzFO`+t`SjTz{5n zgk?S(%*2|sJ3-cH!9Dt*19Dw#6Gp^co@5g7(SZv%8a2FW<}R`(H_6AbqS$XWJsx|S z&Z|6mVDf>xNC7=9F@qq4CxuEc&DeKrfSXbb@K1 z7-YtNEKko%HO32BSD(s+x(fsJZfJ#T5Zpfexgw&|}!qiPioq&NFg1SnL zx{J*KemUywo&|N%Gg0^0xVBJd_gqMnNY6#8#%$*YG#YjBv_Q&x2N8i(aA0TfwdV1} zH;nIDo@|juLucrv4ZyHRu$)e7wPGj)`U1R^CeSH)g}*uZ0@xlf`2=zu{{Tj;U^Rw) zK{;m;9|5j8$T4iivQNYhMO_FhN{EHVTs!WB1I%Qb1NQS_P;7~{)F6P6wA%0AJM#+& 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