Browse Source

Merge pull request #9274 from gyuho/revert

*: revert "internal" package changes
Gyuho Lee 7 years ago
parent
commit
5b9741e804
100 changed files with 797 additions and 793 deletions
  1. 2 2
      Documentation/dev-guide/api_concurrency_reference_v3.md
  2. 8 8
      Documentation/dev-guide/api_reference_v3.md
  3. 2 1
      alarm/alarms.go
  4. 0 0
      auth/authpb/auth.pb.go
  5. 0 0
      auth/authpb/auth.proto
  6. 0 0
      auth/doc.go
  7. 0 0
      auth/jwt.go
  8. 2 2
      auth/jwt_test.go
  9. 2 2
      auth/range_perm_cache.go
  10. 1 1
      auth/range_perm_cache_test.go
  11. 0 0
      auth/simple_token.go
  12. 0 0
      auth/simple_token_test.go
  13. 2 2
      auth/store.go
  14. 2 2
      auth/store_test.go
  15. 1 1
      client/client.go
  16. 1 1
      client/client_test.go
  17. 1 1
      clientv3/auth.go
  18. 1 1
      clientv3/concurrency/election.go
  19. 1 1
      clientv3/concurrency/key.go
  20. 1 1
      clientv3/integration/kv_test.go
  21. 3 3
      clientv3/integration/maintenance_test.go
  22. 1 1
      clientv3/integration/mirror_test.go
  23. 1 1
      clientv3/integration/namespace_test.go
  24. 1 1
      clientv3/integration/watch_test.go
  25. 1 1
      clientv3/leasing/cache.go
  26. 1 1
      clientv3/leasing/kv.go
  27. 2 1
      clientv3/main_test.go
  28. 1 1
      clientv3/watch.go
  29. 1 1
      clientv3/watch_test.go
  30. 0 0
      compactor/compactor.go
  31. 0 0
      compactor/compactor_test.go
  32. 0 0
      compactor/doc.go
  33. 1 1
      compactor/periodic.go
  34. 0 0
      compactor/periodic_test.go
  35. 1 1
      compactor/revision.go
  36. 0 0
      compactor/revision_test.go
  37. 1 1
      contrib/raftexample/kvstore.go
  38. 1 1
      contrib/raftexample/raft.go
  39. 1 1
      contrib/recipes/barrier.go
  40. 1 1
      contrib/recipes/client.go
  41. 1 1
      contrib/recipes/double_barrier.go
  42. 1 1
      contrib/recipes/priority_queue.go
  43. 1 1
      contrib/recipes/queue.go
  44. 1 1
      contrib/recipes/rwmutex.go
  45. 1 1
      contrib/recipes/watch.go
  46. 0 0
      discovery/discovery.go
  47. 0 0
      discovery/discovery_test.go
  48. 1 1
      e2e/ctl_v3_test.go
  49. 1 1
      e2e/etcd_corrupt_test.go
  50. 1 1
      e2e/etcd_release_upgrade_test.go
  51. 1 1
      e2e/metrics_test.go
  52. 1 1
      embed/config.go
  53. 1 1
      embed/serve_test.go
  54. 1 1
      etcdctl/ctlv2/command/backup_command.go
  55. 1 1
      etcdctl/ctlv2/ctl.go
  56. 1 1
      etcdctl/ctlv3/command/defrag_command.go
  57. 1 1
      etcdctl/ctlv3/command/make_mirror_command.go
  58. 12 11
      etcdctl/ctlv3/command/migrate_command.go
  59. 1 1
      etcdctl/ctlv3/command/printer_fields.go
  60. 1 1
      etcdctl/ctlv3/command/printer_protobuf.go
  61. 1 1
      etcdctl/ctlv3/command/util.go
  62. 1 1
      etcdctl/ctlv3/command/version_command.go
  63. 1 1
      etcdctl/ctlv3/help.go
  64. 1 1
      etcdmain/config.go
  65. 2 2
      etcdmain/etcd.go
  66. 1 1
      etcdserver/api/capability.go
  67. 3 3
      etcdserver/api/etcdhttp/base.go
  68. 1 1
      etcdserver/api/etcdhttp/peer.go
  69. 1 1
      etcdserver/api/etcdhttp/version_test.go
  70. 46 46
      etcdserver/api/v2http/client.go
  71. 115 115
      etcdserver/api/v2http/client_test.go
  72. 3 3
      etcdserver/api/v2http/http_test.go
  73. 3 3
      etcdserver/api/v2http/metrics.go
  74. 84 84
      etcdserver/api/v2v3/store.go
  75. 9 9
      etcdserver/api/v2v3/watcher.go
  76. 35 35
      etcdserver/api/v3election/v3electionpb/v3election.pb.go
  77. 1 1
      etcdserver/api/v3election/v3electionpb/v3election.proto
  78. 1 1
      etcdserver/api/v3rpc/lease.go
  79. 4 4
      etcdserver/api/v3rpc/maintenance.go
  80. 3 3
      etcdserver/api/v3rpc/util.go
  81. 1 1
      etcdserver/api/v3rpc/util_test.go
  82. 3 3
      etcdserver/api/v3rpc/watch.go
  83. 4 4
      etcdserver/apply.go
  84. 3 3
      etcdserver/apply_auth.go
  85. 9 8
      etcdserver/apply_v2.go
  86. 4 4
      etcdserver/backend.go
  87. 1 1
      etcdserver/cluster_util.go
  88. 1 1
      etcdserver/cluster_util_test.go
  89. 1 1
      etcdserver/corrupt.go
  90. 226 226
      etcdserver/etcdserverpb/rpc.pb.go
  91. 2 2
      etcdserver/etcdserverpb/rpc.proto
  92. 21 21
      etcdserver/membership/cluster.go
  93. 12 12
      etcdserver/membership/cluster_test.go
  94. 3 3
      etcdserver/membership/errors.go
  95. 13 13
      etcdserver/membership/store.go
  96. 1 1
      etcdserver/metrics.go
  97. 21 21
      etcdserver/server.go
  98. 77 77
      etcdserver/server_test.go
  99. 3 3
      etcdserver/snapshot_merge.go
  100. 1 1
      etcdserver/storage.go

+ 2 - 2
Documentation/dev-guide/api_concurrency_reference_v3.md

@@ -143,7 +143,7 @@ The election service exposes client-side election facilities as a gRPC interface
 
 
 
-##### message `Event` (internal/mvcc/mvccpb/kv.proto)
+##### message `Event` (mvcc/mvccpb/kv.proto)
 
 | Field | Description | Type |
 | ----- | ----------- | ---- |
@@ -153,7 +153,7 @@ The election service exposes client-side election facilities as a gRPC interface
 
 
 
-##### message `KeyValue` (internal/mvcc/mvccpb/kv.proto)
+##### message `KeyValue` (mvcc/mvccpb/kv.proto)
 
 | Field | Description | Type |
 | ----- | ----------- | ---- |

+ 8 - 8
Documentation/dev-guide/api_reference_v3.md

@@ -863,7 +863,7 @@ From google paxosdb paper: Our implementation hinges around a powerful primitive
 
 
 
-##### message `Event` (internal/mvcc/mvccpb/kv.proto)
+##### message `Event` (mvcc/mvccpb/kv.proto)
 
 | Field | Description | Type |
 | ----- | ----------- | ---- |
@@ -873,7 +873,7 @@ From google paxosdb paper: Our implementation hinges around a powerful primitive
 
 
 
-##### message `KeyValue` (internal/mvcc/mvccpb/kv.proto)
+##### message `KeyValue` (mvcc/mvccpb/kv.proto)
 
 | Field | Description | Type |
 | ----- | ----------- | ---- |
@@ -886,7 +886,7 @@ From google paxosdb paper: Our implementation hinges around a powerful primitive
 
 
 
-##### message `Lease` (internal/lease/leasepb/lease.proto)
+##### message `Lease` (lease/leasepb/lease.proto)
 
 | Field | Description | Type |
 | ----- | ----------- | ---- |
@@ -895,7 +895,7 @@ From google paxosdb paper: Our implementation hinges around a powerful primitive
 
 
 
-##### message `LeaseInternalRequest` (internal/lease/leasepb/lease.proto)
+##### message `LeaseInternalRequest` (lease/leasepb/lease.proto)
 
 | Field | Description | Type |
 | ----- | ----------- | ---- |
@@ -903,7 +903,7 @@ From google paxosdb paper: Our implementation hinges around a powerful primitive
 
 
 
-##### message `LeaseInternalResponse` (internal/lease/leasepb/lease.proto)
+##### message `LeaseInternalResponse` (lease/leasepb/lease.proto)
 
 | Field | Description | Type |
 | ----- | ----------- | ---- |
@@ -911,7 +911,7 @@ From google paxosdb paper: Our implementation hinges around a powerful primitive
 
 
 
-##### message `Permission` (internal/auth/authpb/auth.proto)
+##### message `Permission` (auth/authpb/auth.proto)
 
 Permission is a single entity
 
@@ -923,7 +923,7 @@ Permission is a single entity
 
 
 
-##### message `Role` (internal/auth/authpb/auth.proto)
+##### message `Role` (auth/authpb/auth.proto)
 
 Role is a single entry in the bucket authRoles
 
@@ -934,7 +934,7 @@ Role is a single entry in the bucket authRoles
 
 
 
-##### message `User` (internal/auth/authpb/auth.proto)
+##### message `User` (auth/authpb/auth.proto)
 
 User is a single entry in the bucket authUsers
 

+ 2 - 1
internal/alarm/alarms.go → alarm/alarms.go

@@ -19,8 +19,9 @@ import (
 	"sync"
 
 	pb "github.com/coreos/etcd/etcdserver/etcdserverpb"
-	"github.com/coreos/etcd/internal/mvcc/backend"
+	"github.com/coreos/etcd/mvcc/backend"
 	"github.com/coreos/etcd/pkg/types"
+
 	"github.com/coreos/pkg/capnslog"
 )
 

+ 0 - 0
internal/auth/authpb/auth.pb.go → auth/authpb/auth.pb.go


+ 0 - 0
internal/auth/authpb/auth.proto → auth/authpb/auth.proto


+ 0 - 0
internal/auth/doc.go → auth/doc.go


+ 0 - 0
internal/auth/jwt.go → auth/jwt.go


+ 2 - 2
internal/auth/jwt_test.go → auth/jwt_test.go

@@ -20,8 +20,8 @@ import (
 )
 
 const (
-	jwtPubKey  = "../../integration/fixtures/server.crt"
-	jwtPrivKey = "../../integration/fixtures/server.key.insecure"
+	jwtPubKey  = "../integration/fixtures/server.crt"
+	jwtPrivKey = "../integration/fixtures/server.key.insecure"
 )
 
 func TestJWTInfo(t *testing.T) {

+ 2 - 2
internal/auth/range_perm_cache.go → auth/range_perm_cache.go

@@ -15,8 +15,8 @@
 package auth
 
 import (
-	"github.com/coreos/etcd/internal/auth/authpb"
-	"github.com/coreos/etcd/internal/mvcc/backend"
+	"github.com/coreos/etcd/auth/authpb"
+	"github.com/coreos/etcd/mvcc/backend"
 	"github.com/coreos/etcd/pkg/adt"
 )
 

+ 1 - 1
internal/auth/range_perm_cache_test.go → auth/range_perm_cache_test.go

@@ -17,7 +17,7 @@ package auth
 import (
 	"testing"
 
-	"github.com/coreos/etcd/internal/auth/authpb"
+	"github.com/coreos/etcd/auth/authpb"
 	"github.com/coreos/etcd/pkg/adt"
 )
 

+ 0 - 0
internal/auth/simple_token.go → auth/simple_token.go


+ 0 - 0
internal/auth/simple_token_test.go → auth/simple_token_test.go


+ 2 - 2
internal/auth/store.go → auth/store.go

@@ -24,9 +24,9 @@ import (
 	"sync"
 	"sync/atomic"
 
+	"github.com/coreos/etcd/auth/authpb"
 	pb "github.com/coreos/etcd/etcdserver/etcdserverpb"
-	"github.com/coreos/etcd/internal/auth/authpb"
-	"github.com/coreos/etcd/internal/mvcc/backend"
+	"github.com/coreos/etcd/mvcc/backend"
 
 	"github.com/coreos/pkg/capnslog"
 	"golang.org/x/crypto/bcrypt"

+ 2 - 2
internal/auth/store_test.go → auth/store_test.go

@@ -24,9 +24,9 @@ import (
 	"testing"
 	"time"
 
+	"github.com/coreos/etcd/auth/authpb"
 	pb "github.com/coreos/etcd/etcdserver/etcdserverpb"
-	"github.com/coreos/etcd/internal/auth/authpb"
-	"github.com/coreos/etcd/internal/mvcc/backend"
+	"github.com/coreos/etcd/mvcc/backend"
 
 	"golang.org/x/crypto/bcrypt"
 	"google.golang.org/grpc/metadata"

+ 1 - 1
client/client.go

@@ -29,7 +29,7 @@ import (
 	"sync"
 	"time"
 
-	"github.com/coreos/etcd/internal/version"
+	"github.com/coreos/etcd/version"
 )
 
 var (

+ 1 - 1
client/client_test.go

@@ -29,8 +29,8 @@ import (
 	"testing"
 	"time"
 
-	"github.com/coreos/etcd/internal/version"
 	"github.com/coreos/etcd/pkg/testutil"
+	"github.com/coreos/etcd/version"
 )
 
 type actionAssertingHTTPClient struct {

+ 1 - 1
clientv3/auth.go

@@ -19,8 +19,8 @@ import (
 	"fmt"
 	"strings"
 
+	"github.com/coreos/etcd/auth/authpb"
 	pb "github.com/coreos/etcd/etcdserver/etcdserverpb"
-	"github.com/coreos/etcd/internal/auth/authpb"
 
 	"google.golang.org/grpc"
 )

+ 1 - 1
clientv3/concurrency/election.go

@@ -21,7 +21,7 @@ import (
 
 	v3 "github.com/coreos/etcd/clientv3"
 	pb "github.com/coreos/etcd/etcdserver/etcdserverpb"
-	"github.com/coreos/etcd/internal/mvcc/mvccpb"
+	"github.com/coreos/etcd/mvcc/mvccpb"
 )
 
 var (

+ 1 - 1
clientv3/concurrency/key.go

@@ -20,7 +20,7 @@ import (
 
 	v3 "github.com/coreos/etcd/clientv3"
 	pb "github.com/coreos/etcd/etcdserver/etcdserverpb"
-	"github.com/coreos/etcd/internal/mvcc/mvccpb"
+	"github.com/coreos/etcd/mvcc/mvccpb"
 )
 
 func waitDelete(ctx context.Context, client *v3.Client, key string, rev int64) error {

+ 1 - 1
clientv3/integration/kv_test.go

@@ -26,7 +26,7 @@ import (
 	"github.com/coreos/etcd/clientv3"
 	"github.com/coreos/etcd/etcdserver/api/v3rpc/rpctypes"
 	"github.com/coreos/etcd/integration"
-	"github.com/coreos/etcd/internal/mvcc/mvccpb"
+	"github.com/coreos/etcd/mvcc/mvccpb"
 	"github.com/coreos/etcd/pkg/testutil"
 
 	"google.golang.org/grpc"

+ 3 - 3
clientv3/integration/maintenance_test.go

@@ -26,9 +26,9 @@ import (
 
 	"github.com/coreos/etcd/etcdserver/api/v3rpc/rpctypes"
 	"github.com/coreos/etcd/integration"
-	"github.com/coreos/etcd/internal/lease"
-	"github.com/coreos/etcd/internal/mvcc"
-	"github.com/coreos/etcd/internal/mvcc/backend"
+	"github.com/coreos/etcd/lease"
+	"github.com/coreos/etcd/mvcc"
+	"github.com/coreos/etcd/mvcc/backend"
 	"github.com/coreos/etcd/pkg/testutil"
 )
 

+ 1 - 1
clientv3/integration/mirror_test.go

@@ -24,7 +24,7 @@ import (
 
 	"github.com/coreos/etcd/clientv3/mirror"
 	"github.com/coreos/etcd/integration"
-	"github.com/coreos/etcd/internal/mvcc/mvccpb"
+	"github.com/coreos/etcd/mvcc/mvccpb"
 	"github.com/coreos/etcd/pkg/testutil"
 )
 

+ 1 - 1
clientv3/integration/namespace_test.go

@@ -22,7 +22,7 @@ import (
 	"github.com/coreos/etcd/clientv3"
 	"github.com/coreos/etcd/clientv3/namespace"
 	"github.com/coreos/etcd/integration"
-	"github.com/coreos/etcd/internal/mvcc/mvccpb"
+	"github.com/coreos/etcd/mvcc/mvccpb"
 	"github.com/coreos/etcd/pkg/testutil"
 )
 

+ 1 - 1
clientv3/integration/watch_test.go

@@ -27,7 +27,7 @@ import (
 	"github.com/coreos/etcd/etcdserver/api/v3rpc"
 	"github.com/coreos/etcd/etcdserver/api/v3rpc/rpctypes"
 	"github.com/coreos/etcd/integration"
-	mvccpb "github.com/coreos/etcd/internal/mvcc/mvccpb"
+	mvccpb "github.com/coreos/etcd/mvcc/mvccpb"
 	"github.com/coreos/etcd/pkg/testutil"
 
 	"google.golang.org/grpc"

+ 1 - 1
clientv3/leasing/cache.go

@@ -22,7 +22,7 @@ import (
 
 	v3 "github.com/coreos/etcd/clientv3"
 	v3pb "github.com/coreos/etcd/etcdserver/etcdserverpb"
-	"github.com/coreos/etcd/internal/mvcc/mvccpb"
+	"github.com/coreos/etcd/mvcc/mvccpb"
 )
 
 const revokeBackoff = 2 * time.Second

+ 1 - 1
clientv3/leasing/kv.go

@@ -24,7 +24,7 @@ import (
 	"github.com/coreos/etcd/clientv3/concurrency"
 	"github.com/coreos/etcd/etcdserver/api/v3rpc/rpctypes"
 	pb "github.com/coreos/etcd/etcdserver/etcdserverpb"
-	"github.com/coreos/etcd/internal/mvcc/mvccpb"
+	"github.com/coreos/etcd/mvcc/mvccpb"
 
 	"google.golang.org/grpc/codes"
 	"google.golang.org/grpc/status"

+ 2 - 1
clientv3/main_test.go

@@ -22,9 +22,10 @@ import (
 	"testing"
 	"time"
 
+	"github.com/coreos/etcd/auth"
 	"github.com/coreos/etcd/integration"
-	"github.com/coreos/etcd/internal/auth"
 	"github.com/coreos/etcd/pkg/testutil"
+
 	"golang.org/x/crypto/bcrypt"
 )
 

+ 1 - 1
clientv3/watch.go

@@ -22,7 +22,7 @@ import (
 
 	v3rpc "github.com/coreos/etcd/etcdserver/api/v3rpc/rpctypes"
 	pb "github.com/coreos/etcd/etcdserver/etcdserverpb"
-	mvccpb "github.com/coreos/etcd/internal/mvcc/mvccpb"
+	mvccpb "github.com/coreos/etcd/mvcc/mvccpb"
 
 	"google.golang.org/grpc"
 	"google.golang.org/grpc/codes"

+ 1 - 1
clientv3/watch_test.go

@@ -17,7 +17,7 @@ package clientv3
 import (
 	"testing"
 
-	"github.com/coreos/etcd/internal/mvcc/mvccpb"
+	"github.com/coreos/etcd/mvcc/mvccpb"
 )
 
 func TestEvent(t *testing.T) {

+ 0 - 0
internal/compactor/compactor.go → compactor/compactor.go


+ 0 - 0
internal/compactor/compactor_test.go → compactor/compactor_test.go


+ 0 - 0
internal/compactor/doc.go → compactor/doc.go


+ 1 - 1
internal/compactor/periodic.go → compactor/periodic.go

@@ -20,7 +20,7 @@ import (
 	"time"
 
 	pb "github.com/coreos/etcd/etcdserver/etcdserverpb"
-	"github.com/coreos/etcd/internal/mvcc"
+	"github.com/coreos/etcd/mvcc"
 
 	"github.com/jonboulle/clockwork"
 )

+ 0 - 0
internal/compactor/periodic_test.go → compactor/periodic_test.go


+ 1 - 1
internal/compactor/revision.go → compactor/revision.go

@@ -19,7 +19,7 @@ import (
 	"sync"
 
 	pb "github.com/coreos/etcd/etcdserver/etcdserverpb"
-	"github.com/coreos/etcd/internal/mvcc"
+	"github.com/coreos/etcd/mvcc"
 
 	"github.com/jonboulle/clockwork"
 )

+ 0 - 0
internal/compactor/revision_test.go → compactor/revision_test.go


+ 1 - 1
contrib/raftexample/kvstore.go

@@ -21,7 +21,7 @@ import (
 	"log"
 	"sync"
 
-	"github.com/coreos/etcd/internal/raftsnap"
+	"github.com/coreos/etcd/raftsnap"
 )
 
 // a key-value store backed by raft

+ 1 - 1
contrib/raftexample/raft.go

@@ -25,12 +25,12 @@ import (
 	"time"
 
 	"github.com/coreos/etcd/etcdserver/stats"
-	"github.com/coreos/etcd/internal/raftsnap"
 	"github.com/coreos/etcd/pkg/fileutil"
 	"github.com/coreos/etcd/pkg/types"
 	"github.com/coreos/etcd/raft"
 	"github.com/coreos/etcd/raft/raftpb"
 	"github.com/coreos/etcd/rafthttp"
+	"github.com/coreos/etcd/raftsnap"
 	"github.com/coreos/etcd/wal"
 	"github.com/coreos/etcd/wal/walpb"
 )

+ 1 - 1
contrib/recipes/barrier.go

@@ -18,7 +18,7 @@ import (
 	"context"
 
 	v3 "github.com/coreos/etcd/clientv3"
-	"github.com/coreos/etcd/internal/mvcc/mvccpb"
+	"github.com/coreos/etcd/mvcc/mvccpb"
 )
 
 // Barrier creates a key in etcd to block processes, then deletes the key to

+ 1 - 1
contrib/recipes/client.go

@@ -19,7 +19,7 @@ import (
 	"errors"
 
 	v3 "github.com/coreos/etcd/clientv3"
-	spb "github.com/coreos/etcd/internal/mvcc/mvccpb"
+	spb "github.com/coreos/etcd/mvcc/mvccpb"
 )
 
 var (

+ 1 - 1
contrib/recipes/double_barrier.go

@@ -19,7 +19,7 @@ import (
 
 	"github.com/coreos/etcd/clientv3"
 	"github.com/coreos/etcd/clientv3/concurrency"
-	"github.com/coreos/etcd/internal/mvcc/mvccpb"
+	"github.com/coreos/etcd/mvcc/mvccpb"
 )
 
 // DoubleBarrier blocks processes on Enter until an expected count enters, then

+ 1 - 1
contrib/recipes/priority_queue.go

@@ -19,7 +19,7 @@ import (
 	"fmt"
 
 	v3 "github.com/coreos/etcd/clientv3"
-	"github.com/coreos/etcd/internal/mvcc/mvccpb"
+	"github.com/coreos/etcd/mvcc/mvccpb"
 )
 
 // PriorityQueue implements a multi-reader, multi-writer distributed queue.

+ 1 - 1
contrib/recipes/queue.go

@@ -18,7 +18,7 @@ import (
 	"context"
 
 	v3 "github.com/coreos/etcd/clientv3"
-	"github.com/coreos/etcd/internal/mvcc/mvccpb"
+	"github.com/coreos/etcd/mvcc/mvccpb"
 )
 
 // Queue implements a multi-reader, multi-writer distributed queue.

+ 1 - 1
contrib/recipes/rwmutex.go

@@ -19,7 +19,7 @@ import (
 
 	v3 "github.com/coreos/etcd/clientv3"
 	"github.com/coreos/etcd/clientv3/concurrency"
-	"github.com/coreos/etcd/internal/mvcc/mvccpb"
+	"github.com/coreos/etcd/mvcc/mvccpb"
 )
 
 type RWMutex struct {

+ 1 - 1
contrib/recipes/watch.go

@@ -18,7 +18,7 @@ import (
 	"context"
 
 	"github.com/coreos/etcd/clientv3"
-	"github.com/coreos/etcd/internal/mvcc/mvccpb"
+	"github.com/coreos/etcd/mvcc/mvccpb"
 )
 
 // WaitEvents waits on a key until it observes the given events and returns the final one.

+ 0 - 0
internal/discovery/discovery.go → discovery/discovery.go


+ 0 - 0
internal/discovery/discovery_test.go → discovery/discovery_test.go


+ 1 - 1
e2e/ctl_v3_test.go

@@ -21,9 +21,9 @@ import (
 	"testing"
 	"time"
 
-	"github.com/coreos/etcd/internal/version"
 	"github.com/coreos/etcd/pkg/flags"
 	"github.com/coreos/etcd/pkg/testutil"
+	"github.com/coreos/etcd/version"
 )
 
 func TestCtlV3Version(t *testing.T) { testCtl(t, versionTest) }

+ 1 - 1
e2e/etcd_corrupt_test.go

@@ -24,7 +24,7 @@ import (
 	"time"
 
 	"github.com/coreos/etcd/clientv3"
-	"github.com/coreos/etcd/internal/mvcc/mvccpb"
+	"github.com/coreos/etcd/mvcc/mvccpb"
 
 	bolt "github.com/coreos/bbolt"
 )

+ 1 - 1
e2e/etcd_release_upgrade_test.go

@@ -21,9 +21,9 @@ import (
 	"testing"
 	"time"
 
-	"github.com/coreos/etcd/internal/version"
 	"github.com/coreos/etcd/pkg/fileutil"
 	"github.com/coreos/etcd/pkg/testutil"
+	"github.com/coreos/etcd/version"
 )
 
 // TestReleaseUpgrade ensures that changes to master branch does not affect

+ 1 - 1
e2e/metrics_test.go

@@ -18,7 +18,7 @@ import (
 	"fmt"
 	"testing"
 
-	"github.com/coreos/etcd/internal/version"
+	"github.com/coreos/etcd/version"
 )
 
 func TestV3MetricsSecure(t *testing.T) {

+ 1 - 1
embed/config.go

@@ -26,8 +26,8 @@ import (
 	"strings"
 	"time"
 
+	"github.com/coreos/etcd/compactor"
 	"github.com/coreos/etcd/etcdserver"
-	"github.com/coreos/etcd/internal/compactor"
 	"github.com/coreos/etcd/pkg/cors"
 	"github.com/coreos/etcd/pkg/netutil"
 	"github.com/coreos/etcd/pkg/srv"

+ 1 - 1
embed/serve_test.go

@@ -19,7 +19,7 @@ import (
 	"os"
 	"testing"
 
-	"github.com/coreos/etcd/internal/auth"
+	"github.com/coreos/etcd/auth"
 )
 
 // TestStartEtcdWrongToken ensures that StartEtcd with wrong configs returns with error.

+ 1 - 1
etcdctl/ctlv2/command/backup_command.go

@@ -25,11 +25,11 @@ import (
 
 	"github.com/coreos/etcd/etcdserver/etcdserverpb"
 	"github.com/coreos/etcd/etcdserver/membership"
-	"github.com/coreos/etcd/internal/raftsnap"
 	"github.com/coreos/etcd/pkg/fileutil"
 	"github.com/coreos/etcd/pkg/idutil"
 	"github.com/coreos/etcd/pkg/pbutil"
 	"github.com/coreos/etcd/raft/raftpb"
+	"github.com/coreos/etcd/raftsnap"
 	"github.com/coreos/etcd/wal"
 	"github.com/coreos/etcd/wal/walpb"
 

+ 1 - 1
etcdctl/ctlv2/ctl.go

@@ -21,7 +21,7 @@ import (
 	"time"
 
 	"github.com/coreos/etcd/etcdctl/ctlv2/command"
-	"github.com/coreos/etcd/internal/version"
+	"github.com/coreos/etcd/version"
 
 	"github.com/urfave/cli"
 )

+ 1 - 1
etcdctl/ctlv3/command/defrag_command.go

@@ -20,7 +20,7 @@ import (
 	"path/filepath"
 	"time"
 
-	"github.com/coreos/etcd/internal/mvcc/backend"
+	"github.com/coreos/etcd/mvcc/backend"
 	"github.com/spf13/cobra"
 )
 

+ 1 - 1
etcdctl/ctlv3/command/make_mirror_command.go

@@ -25,7 +25,7 @@ import (
 	"github.com/coreos/etcd/clientv3"
 	"github.com/coreos/etcd/clientv3/mirror"
 	"github.com/coreos/etcd/etcdserver/api/v3rpc/rpctypes"
-	"github.com/coreos/etcd/internal/mvcc/mvccpb"
+	"github.com/coreos/etcd/mvcc/mvccpb"
 
 	"github.com/spf13/cobra"
 )

+ 12 - 11
etcdctl/ctlv3/command/migrate_command.go

@@ -25,21 +25,22 @@ import (
 	"time"
 
 	"github.com/coreos/etcd/client"
-	etcdErr "github.com/coreos/etcd/error"
 	"github.com/coreos/etcd/etcdserver"
 	"github.com/coreos/etcd/etcdserver/api"
 	pb "github.com/coreos/etcd/etcdserver/etcdserverpb"
 	"github.com/coreos/etcd/etcdserver/membership"
-	"github.com/coreos/etcd/internal/mvcc"
-	"github.com/coreos/etcd/internal/mvcc/backend"
-	"github.com/coreos/etcd/internal/mvcc/mvccpb"
-	"github.com/coreos/etcd/internal/raftsnap"
-	"github.com/coreos/etcd/internal/store"
+	"github.com/coreos/etcd/etcdserver/v2error"
+	"github.com/coreos/etcd/etcdserver/v2store"
+	"github.com/coreos/etcd/mvcc"
+	"github.com/coreos/etcd/mvcc/backend"
+	"github.com/coreos/etcd/mvcc/mvccpb"
 	"github.com/coreos/etcd/pkg/pbutil"
 	"github.com/coreos/etcd/pkg/types"
 	"github.com/coreos/etcd/raft/raftpb"
+	"github.com/coreos/etcd/raftsnap"
 	"github.com/coreos/etcd/wal"
 	"github.com/coreos/etcd/wal/walpb"
+
 	"github.com/gogo/protobuf/proto"
 	"github.com/spf13/cobra"
 )
@@ -124,7 +125,7 @@ func prepareBackend() backend.Backend {
 	return be
 }
 
-func rebuildStoreV2() (store.Store, uint64) {
+func rebuildStoreV2() (v2store.Store, uint64) {
 	var index uint64
 	cl := membership.NewCluster("")
 
@@ -157,7 +158,7 @@ func rebuildStoreV2() (store.Store, uint64) {
 		ExitWithError(ExitError, err)
 	}
 
-	st := store.New()
+	st := v2store.New()
 	if snapshot != nil {
 		err := st.Recovery(snapshot.Data)
 		if err != nil {
@@ -237,10 +238,10 @@ func applyRequest(req *pb.Request, applyV2 etcdserver.ApplierV2) {
 	}
 }
 
-func writeStore(w io.Writer, st store.Store) uint64 {
+func writeStore(w io.Writer, st v2store.Store) uint64 {
 	all, err := st.Get("/1", true, true)
 	if err != nil {
-		if eerr, ok := err.(*etcdErr.Error); ok && eerr.ErrorCode == etcdErr.EcodeKeyNotFound {
+		if eerr, ok := err.(*v2error.Error); ok && eerr.ErrorCode == v2error.EcodeKeyNotFound {
 			fmt.Println("no v2 keys to migrate")
 			os.Exit(0)
 		}
@@ -249,7 +250,7 @@ func writeStore(w io.Writer, st store.Store) uint64 {
 	return writeKeys(w, all.Node)
 }
 
-func writeKeys(w io.Writer, n *store.NodeExtern) uint64 {
+func writeKeys(w io.Writer, n *v2store.NodeExtern) uint64 {
 	maxIndex := n.ModifiedIndex
 
 	nodes := n.Nodes

+ 1 - 1
etcdctl/ctlv3/command/printer_fields.go

@@ -19,7 +19,7 @@ import (
 
 	v3 "github.com/coreos/etcd/clientv3"
 	pb "github.com/coreos/etcd/etcdserver/etcdserverpb"
-	spb "github.com/coreos/etcd/internal/mvcc/mvccpb"
+	spb "github.com/coreos/etcd/mvcc/mvccpb"
 	"github.com/coreos/etcd/snapshot"
 )
 

+ 1 - 1
etcdctl/ctlv3/command/printer_protobuf.go

@@ -20,7 +20,7 @@ import (
 
 	v3 "github.com/coreos/etcd/clientv3"
 	pb "github.com/coreos/etcd/etcdserver/etcdserverpb"
-	mvccpb "github.com/coreos/etcd/internal/mvcc/mvccpb"
+	mvccpb "github.com/coreos/etcd/mvcc/mvccpb"
 )
 
 type pbPrinter struct{ printer }

+ 1 - 1
etcdctl/ctlv3/command/util.go

@@ -26,7 +26,7 @@ import (
 	"time"
 
 	v3 "github.com/coreos/etcd/clientv3"
-	pb "github.com/coreos/etcd/internal/mvcc/mvccpb"
+	pb "github.com/coreos/etcd/mvcc/mvccpb"
 
 	"github.com/spf13/cobra"
 )

+ 1 - 1
etcdctl/ctlv3/command/version_command.go

@@ -17,7 +17,7 @@ package command
 import (
 	"fmt"
 
-	"github.com/coreos/etcd/internal/version"
+	"github.com/coreos/etcd/version"
 
 	"github.com/spf13/cobra"
 )

+ 1 - 1
etcdctl/ctlv3/help.go

@@ -25,7 +25,7 @@ import (
 	"text/tabwriter"
 	"text/template"
 
-	"github.com/coreos/etcd/internal/version"
+	"github.com/coreos/etcd/version"
 
 	"github.com/spf13/cobra"
 	"github.com/spf13/pflag"

+ 1 - 1
etcdmain/config.go

@@ -26,9 +26,9 @@ import (
 	"strings"
 
 	"github.com/coreos/etcd/embed"
-	"github.com/coreos/etcd/internal/version"
 	"github.com/coreos/etcd/pkg/flags"
 	"github.com/coreos/etcd/pkg/types"
+	"github.com/coreos/etcd/version"
 
 	"github.com/ghodss/yaml"
 )

+ 2 - 2
etcdmain/etcd.go

@@ -26,11 +26,10 @@ import (
 	"strings"
 	"time"
 
+	"github.com/coreos/etcd/discovery"
 	"github.com/coreos/etcd/embed"
 	"github.com/coreos/etcd/etcdserver"
 	"github.com/coreos/etcd/etcdserver/api/etcdhttp"
-	"github.com/coreos/etcd/internal/discovery"
-	"github.com/coreos/etcd/internal/version"
 	"github.com/coreos/etcd/pkg/cors"
 	"github.com/coreos/etcd/pkg/fileutil"
 	pkgioutil "github.com/coreos/etcd/pkg/ioutil"
@@ -38,6 +37,7 @@ import (
 	"github.com/coreos/etcd/pkg/transport"
 	"github.com/coreos/etcd/pkg/types"
 	"github.com/coreos/etcd/proxy/httpproxy"
+	"github.com/coreos/etcd/version"
 
 	"github.com/coreos/pkg/capnslog"
 	"google.golang.org/grpc"

+ 1 - 1
etcdserver/api/capability.go

@@ -17,7 +17,7 @@ package api
 import (
 	"sync"
 
-	"github.com/coreos/etcd/internal/version"
+	"github.com/coreos/etcd/version"
 
 	"github.com/coreos/go-semver/semver"
 	"github.com/coreos/pkg/capnslog"

+ 3 - 3
etcdserver/api/etcdhttp/base.go

@@ -21,12 +21,12 @@ import (
 	"net/http"
 	"strings"
 
-	etcdErr "github.com/coreos/etcd/error"
 	"github.com/coreos/etcd/etcdserver"
 	"github.com/coreos/etcd/etcdserver/api"
 	"github.com/coreos/etcd/etcdserver/api/v2http/httptypes"
-	"github.com/coreos/etcd/internal/version"
+	"github.com/coreos/etcd/etcdserver/v2error"
 	"github.com/coreos/etcd/pkg/logutil"
+	"github.com/coreos/etcd/version"
 
 	"github.com/coreos/pkg/capnslog"
 )
@@ -138,7 +138,7 @@ func WriteError(w http.ResponseWriter, r *http.Request, err error) {
 		return
 	}
 	switch e := err.(type) {
-	case *etcdErr.Error:
+	case *v2error.Error:
 		e.WriteTo(w)
 	case *httptypes.HTTPError:
 		if et := e.WriteTo(w); et != nil {

+ 1 - 1
etcdserver/api/etcdhttp/peer.go

@@ -20,7 +20,7 @@ import (
 
 	"github.com/coreos/etcd/etcdserver"
 	"github.com/coreos/etcd/etcdserver/api"
-	"github.com/coreos/etcd/internal/lease/leasehttp"
+	"github.com/coreos/etcd/lease/leasehttp"
 	"github.com/coreos/etcd/rafthttp"
 )
 

+ 1 - 1
etcdserver/api/etcdhttp/version_test.go

@@ -20,7 +20,7 @@ import (
 	"net/http/httptest"
 	"testing"
 
-	"github.com/coreos/etcd/internal/version"
+	"github.com/coreos/etcd/version"
 )
 
 func TestServeVersion(t *testing.T) {

+ 46 - 46
etcdserver/api/v2http/client.go

@@ -27,7 +27,6 @@ import (
 	"strings"
 	"time"
 
-	etcdErr "github.com/coreos/etcd/error"
 	"github.com/coreos/etcd/etcdserver"
 	"github.com/coreos/etcd/etcdserver/api"
 	"github.com/coreos/etcd/etcdserver/api/etcdhttp"
@@ -36,7 +35,8 @@ import (
 	"github.com/coreos/etcd/etcdserver/membership"
 	"github.com/coreos/etcd/etcdserver/stats"
 	"github.com/coreos/etcd/etcdserver/v2auth"
-	"github.com/coreos/etcd/internal/store"
+	"github.com/coreos/etcd/etcdserver/v2error"
+	"github.com/coreos/etcd/etcdserver/v2store"
 	"github.com/coreos/etcd/pkg/types"
 
 	"github.com/jonboulle/clockwork"
@@ -322,15 +322,15 @@ func parseKeyRequest(r *http.Request, clock clockwork.Clock) (etcdserverpb.Reque
 
 	err := r.ParseForm()
 	if err != nil {
-		return emptyReq, false, etcdErr.NewRequestError(
-			etcdErr.EcodeInvalidForm,
+		return emptyReq, false, v2error.NewRequestError(
+			v2error.EcodeInvalidForm,
 			err.Error(),
 		)
 	}
 
 	if !strings.HasPrefix(r.URL.Path, keysPrefix) {
-		return emptyReq, false, etcdErr.NewRequestError(
-			etcdErr.EcodeInvalidForm,
+		return emptyReq, false, v2error.NewRequestError(
+			v2error.EcodeInvalidForm,
 			"incorrect key prefix",
 		)
 	}
@@ -338,75 +338,75 @@ func parseKeyRequest(r *http.Request, clock clockwork.Clock) (etcdserverpb.Reque
 
 	var pIdx, wIdx uint64
 	if pIdx, err = getUint64(r.Form, "prevIndex"); err != nil {
-		return emptyReq, false, etcdErr.NewRequestError(
-			etcdErr.EcodeIndexNaN,
+		return emptyReq, false, v2error.NewRequestError(
+			v2error.EcodeIndexNaN,
 			`invalid value for "prevIndex"`,
 		)
 	}
 	if wIdx, err = getUint64(r.Form, "waitIndex"); err != nil {
-		return emptyReq, false, etcdErr.NewRequestError(
-			etcdErr.EcodeIndexNaN,
+		return emptyReq, false, v2error.NewRequestError(
+			v2error.EcodeIndexNaN,
 			`invalid value for "waitIndex"`,
 		)
 	}
 
 	var rec, sort, wait, dir, quorum, stream bool
 	if rec, err = getBool(r.Form, "recursive"); err != nil {
-		return emptyReq, false, etcdErr.NewRequestError(
-			etcdErr.EcodeInvalidField,
+		return emptyReq, false, v2error.NewRequestError(
+			v2error.EcodeInvalidField,
 			`invalid value for "recursive"`,
 		)
 	}
 	if sort, err = getBool(r.Form, "sorted"); err != nil {
-		return emptyReq, false, etcdErr.NewRequestError(
-			etcdErr.EcodeInvalidField,
+		return emptyReq, false, v2error.NewRequestError(
+			v2error.EcodeInvalidField,
 			`invalid value for "sorted"`,
 		)
 	}
 	if wait, err = getBool(r.Form, "wait"); err != nil {
-		return emptyReq, false, etcdErr.NewRequestError(
-			etcdErr.EcodeInvalidField,
+		return emptyReq, false, v2error.NewRequestError(
+			v2error.EcodeInvalidField,
 			`invalid value for "wait"`,
 		)
 	}
 	// TODO(jonboulle): define what parameters dir is/isn't compatible with?
 	if dir, err = getBool(r.Form, "dir"); err != nil {
-		return emptyReq, false, etcdErr.NewRequestError(
-			etcdErr.EcodeInvalidField,
+		return emptyReq, false, v2error.NewRequestError(
+			v2error.EcodeInvalidField,
 			`invalid value for "dir"`,
 		)
 	}
 	if quorum, err = getBool(r.Form, "quorum"); err != nil {
-		return emptyReq, false, etcdErr.NewRequestError(
-			etcdErr.EcodeInvalidField,
+		return emptyReq, false, v2error.NewRequestError(
+			v2error.EcodeInvalidField,
 			`invalid value for "quorum"`,
 		)
 	}
 	if stream, err = getBool(r.Form, "stream"); err != nil {
-		return emptyReq, false, etcdErr.NewRequestError(
-			etcdErr.EcodeInvalidField,
+		return emptyReq, false, v2error.NewRequestError(
+			v2error.EcodeInvalidField,
 			`invalid value for "stream"`,
 		)
 	}
 
 	if wait && r.Method != "GET" {
-		return emptyReq, false, etcdErr.NewRequestError(
-			etcdErr.EcodeInvalidField,
+		return emptyReq, false, v2error.NewRequestError(
+			v2error.EcodeInvalidField,
 			`"wait" can only be used with GET requests`,
 		)
 	}
 
 	pV := r.FormValue("prevValue")
 	if _, ok := r.Form["prevValue"]; ok && pV == "" {
-		return emptyReq, false, etcdErr.NewRequestError(
-			etcdErr.EcodePrevValueRequired,
+		return emptyReq, false, v2error.NewRequestError(
+			v2error.EcodePrevValueRequired,
 			`"prevValue" cannot be empty`,
 		)
 	}
 
 	if noValueOnSuccess, err = getBool(r.Form, "noValueOnSuccess"); err != nil {
-		return emptyReq, false, etcdErr.NewRequestError(
-			etcdErr.EcodeInvalidField,
+		return emptyReq, false, v2error.NewRequestError(
+			v2error.EcodeInvalidField,
 			`invalid value for "noValueOnSuccess"`,
 		)
 	}
@@ -417,8 +417,8 @@ func parseKeyRequest(r *http.Request, clock clockwork.Clock) (etcdserverpb.Reque
 	if len(r.FormValue("ttl")) > 0 {
 		i, err := getUint64(r.Form, "ttl")
 		if err != nil {
-			return emptyReq, false, etcdErr.NewRequestError(
-				etcdErr.EcodeTTLNaN,
+			return emptyReq, false, v2error.NewRequestError(
+				v2error.EcodeTTLNaN,
 				`invalid value for "ttl"`,
 			)
 		}
@@ -430,8 +430,8 @@ func parseKeyRequest(r *http.Request, clock clockwork.Clock) (etcdserverpb.Reque
 	if _, ok := r.Form["prevExist"]; ok {
 		bv, err := getBool(r.Form, "prevExist")
 		if err != nil {
-			return emptyReq, false, etcdErr.NewRequestError(
-				etcdErr.EcodeInvalidField,
+			return emptyReq, false, v2error.NewRequestError(
+				v2error.EcodeInvalidField,
 				"invalid value for prevExist",
 			)
 		}
@@ -443,8 +443,8 @@ func parseKeyRequest(r *http.Request, clock clockwork.Clock) (etcdserverpb.Reque
 	if _, ok := r.Form["refresh"]; ok {
 		bv, err := getBool(r.Form, "refresh")
 		if err != nil {
-			return emptyReq, false, etcdErr.NewRequestError(
-				etcdErr.EcodeInvalidField,
+			return emptyReq, false, v2error.NewRequestError(
+				v2error.EcodeInvalidField,
 				"invalid value for refresh",
 			)
 		}
@@ -452,14 +452,14 @@ func parseKeyRequest(r *http.Request, clock clockwork.Clock) (etcdserverpb.Reque
 		if refresh != nil && *refresh {
 			val := r.FormValue("value")
 			if _, ok := r.Form["value"]; ok && val != "" {
-				return emptyReq, false, etcdErr.NewRequestError(
-					etcdErr.EcodeRefreshValue,
+				return emptyReq, false, v2error.NewRequestError(
+					v2error.EcodeRefreshValue,
 					`A value was provided on a refresh`,
 				)
 			}
 			if ttl == nil {
-				return emptyReq, false, etcdErr.NewRequestError(
-					etcdErr.EcodeRefreshTTLRequired,
+				return emptyReq, false, v2error.NewRequestError(
+					v2error.EcodeRefreshTTLRequired,
 					`No TTL value set`,
 				)
 			}
@@ -518,8 +518,8 @@ func writeKeyEvent(w http.ResponseWriter, resp etcdserver.Response, noValueOnSuc
 
 	ev = trimEventPrefix(ev, etcdserver.StoreKeysPrefix)
 	if noValueOnSuccess &&
-		(ev.Action == store.Set || ev.Action == store.CompareAndSwap ||
-			ev.Action == store.Create || ev.Action == store.Update) {
+		(ev.Action == v2store.Set || ev.Action == v2store.CompareAndSwap ||
+			ev.Action == v2store.Create || ev.Action == v2store.Update) {
 		ev.Node = nil
 		ev.PrevNode = nil
 	}
@@ -527,7 +527,7 @@ func writeKeyEvent(w http.ResponseWriter, resp etcdserver.Response, noValueOnSuc
 }
 
 func writeKeyNoAuth(w http.ResponseWriter) {
-	e := etcdErr.NewError(etcdErr.EcodeUnauthorized, "Insufficient credentials", 0)
+	e := v2error.NewError(v2error.EcodeUnauthorized, "Insufficient credentials", 0)
 	e.WriteTo(w)
 }
 
@@ -538,7 +538,7 @@ func writeKeyError(w http.ResponseWriter, err error) {
 		return
 	}
 	switch e := err.(type) {
-	case *etcdErr.Error:
+	case *v2error.Error:
 		e.WriteTo(w)
 	default:
 		switch err {
@@ -547,7 +547,7 @@ func writeKeyError(w http.ResponseWriter, err error) {
 		default:
 			mlog.MergeErrorf("got unexpected response error (%v)", err)
 		}
-		ee := etcdErr.NewError(etcdErr.EcodeRaftInternal, err.Error(), 0)
+		ee := v2error.NewError(v2error.EcodeRaftInternal, err.Error(), 0)
 		ee.WriteTo(w)
 	}
 }
@@ -599,7 +599,7 @@ func handleKeyWatch(ctx context.Context, w http.ResponseWriter, resp etcdserver.
 	}
 }
 
-func trimEventPrefix(ev *store.Event, prefix string) *store.Event {
+func trimEventPrefix(ev *v2store.Event, prefix string) *v2store.Event {
 	if ev == nil {
 		return nil
 	}
@@ -611,7 +611,7 @@ func trimEventPrefix(ev *store.Event, prefix string) *store.Event {
 	return e
 }
 
-func trimNodeExternPrefix(n *store.NodeExtern, prefix string) {
+func trimNodeExternPrefix(n *v2store.NodeExtern, prefix string) {
 	if n == nil {
 		return
 	}
@@ -622,7 +622,7 @@ func trimNodeExternPrefix(n *store.NodeExtern, prefix string) {
 }
 
 func trimErrorPrefix(err error, prefix string) error {
-	if e, ok := err.(*etcdErr.Error); ok {
+	if e, ok := err.(*v2error.Error); ok {
 		e.Cause = strings.TrimPrefix(e.Cause, prefix)
 	}
 	return err

+ 115 - 115
etcdserver/api/v2http/client_test.go

@@ -29,13 +29,13 @@ import (
 	"testing"
 	"time"
 
-	etcdErr "github.com/coreos/etcd/error"
 	"github.com/coreos/etcd/etcdserver"
 	"github.com/coreos/etcd/etcdserver/api"
 	"github.com/coreos/etcd/etcdserver/api/v2http/httptypes"
 	"github.com/coreos/etcd/etcdserver/etcdserverpb"
 	"github.com/coreos/etcd/etcdserver/membership"
-	"github.com/coreos/etcd/internal/store"
+	"github.com/coreos/etcd/etcdserver/v2error"
+	"github.com/coreos/etcd/etcdserver/v2store"
 	"github.com/coreos/etcd/pkg/testutil"
 	"github.com/coreos/etcd/pkg/types"
 	"github.com/coreos/etcd/raft/raftpb"
@@ -44,7 +44,7 @@ import (
 	"github.com/jonboulle/clockwork"
 )
 
-func mustMarshalEvent(t *testing.T, ev *store.Event) string {
+func mustMarshalEvent(t *testing.T, ev *v2store.Event) string {
 	b := new(bytes.Buffer)
 	if err := json.NewEncoder(b).Encode(ev); err != nil {
 		t.Fatalf("error marshalling event %#v: %v", ev, err)
@@ -176,11 +176,11 @@ func (drt dummyRaftTimer) Index() uint64 { return uint64(100) }
 func (drt dummyRaftTimer) Term() uint64  { return uint64(5) }
 
 type dummyWatcher struct {
-	echan chan *store.Event
+	echan chan *v2store.Event
 	sidx  uint64
 }
 
-func (w *dummyWatcher) EventChan() chan *store.Event {
+func (w *dummyWatcher) EventChan() chan *v2store.Event {
 	return w.echan
 }
 func (w *dummyWatcher) StartIndex() uint64 { return w.sidx }
@@ -193,19 +193,19 @@ func TestBadRefreshRequest(t *testing.T) {
 	}{
 		{
 			mustNewRequest(t, "foo?refresh=true&value=test"),
-			etcdErr.EcodeRefreshValue,
+			v2error.EcodeRefreshValue,
 		},
 		{
 			mustNewRequest(t, "foo?refresh=true&value=10"),
-			etcdErr.EcodeRefreshValue,
+			v2error.EcodeRefreshValue,
 		},
 		{
 			mustNewRequest(t, "foo?refresh=true"),
-			etcdErr.EcodeRefreshTTLRequired,
+			v2error.EcodeRefreshTTLRequired,
 		},
 		{
 			mustNewRequest(t, "foo?refresh=true&ttl="),
-			etcdErr.EcodeRefreshTTLRequired,
+			v2error.EcodeRefreshTTLRequired,
 		},
 	}
 	for i, tt := range tests {
@@ -214,7 +214,7 @@ func TestBadRefreshRequest(t *testing.T) {
 			t.Errorf("#%d: unexpected nil error!", i)
 			continue
 		}
-		ee, ok := err.(*etcdErr.Error)
+		ee, ok := err.(*v2error.Error)
 		if !ok {
 			t.Errorf("#%d: err is not etcd.Error!", i)
 			continue
@@ -240,119 +240,119 @@ func TestBadParseRequest(t *testing.T) {
 				Body:   nil,
 				Method: "PUT",
 			},
-			etcdErr.EcodeInvalidForm,
+			v2error.EcodeInvalidForm,
 		},
 		{
 			// bad key prefix
 			&http.Request{
 				URL: testutil.MustNewURL(t, "/badprefix/"),
 			},
-			etcdErr.EcodeInvalidForm,
+			v2error.EcodeInvalidForm,
 		},
 		// bad values for prevIndex, waitIndex, ttl
 		{
 			mustNewForm(t, "foo", url.Values{"prevIndex": []string{"garbage"}}),
-			etcdErr.EcodeIndexNaN,
+			v2error.EcodeIndexNaN,
 		},
 		{
 			mustNewForm(t, "foo", url.Values{"prevIndex": []string{"1.5"}}),
-			etcdErr.EcodeIndexNaN,
+			v2error.EcodeIndexNaN,
 		},
 		{
 			mustNewForm(t, "foo", url.Values{"prevIndex": []string{"-1"}}),
-			etcdErr.EcodeIndexNaN,
+			v2error.EcodeIndexNaN,
 		},
 		{
 			mustNewForm(t, "foo", url.Values{"waitIndex": []string{"garbage"}}),
-			etcdErr.EcodeIndexNaN,
+			v2error.EcodeIndexNaN,
 		},
 		{
 			mustNewForm(t, "foo", url.Values{"waitIndex": []string{"??"}}),
-			etcdErr.EcodeIndexNaN,
+			v2error.EcodeIndexNaN,
 		},
 		{
 			mustNewForm(t, "foo", url.Values{"ttl": []string{"-1"}}),
-			etcdErr.EcodeTTLNaN,
+			v2error.EcodeTTLNaN,
 		},
 		// bad values for recursive, sorted, wait, prevExist, dir, stream
 		{
 			mustNewForm(t, "foo", url.Values{"recursive": []string{"hahaha"}}),
-			etcdErr.EcodeInvalidField,
+			v2error.EcodeInvalidField,
 		},
 		{
 			mustNewForm(t, "foo", url.Values{"recursive": []string{"1234"}}),
-			etcdErr.EcodeInvalidField,
+			v2error.EcodeInvalidField,
 		},
 		{
 			mustNewForm(t, "foo", url.Values{"recursive": []string{"?"}}),
-			etcdErr.EcodeInvalidField,
+			v2error.EcodeInvalidField,
 		},
 		{
 			mustNewForm(t, "foo", url.Values{"sorted": []string{"?"}}),
-			etcdErr.EcodeInvalidField,
+			v2error.EcodeInvalidField,
 		},
 		{
 			mustNewForm(t, "foo", url.Values{"sorted": []string{"x"}}),
-			etcdErr.EcodeInvalidField,
+			v2error.EcodeInvalidField,
 		},
 		{
 			mustNewForm(t, "foo", url.Values{"wait": []string{"?!"}}),
-			etcdErr.EcodeInvalidField,
+			v2error.EcodeInvalidField,
 		},
 		{
 			mustNewForm(t, "foo", url.Values{"wait": []string{"yes"}}),
-			etcdErr.EcodeInvalidField,
+			v2error.EcodeInvalidField,
 		},
 		{
 			mustNewForm(t, "foo", url.Values{"prevExist": []string{"yes"}}),
-			etcdErr.EcodeInvalidField,
+			v2error.EcodeInvalidField,
 		},
 		{
 			mustNewForm(t, "foo", url.Values{"prevExist": []string{"#2"}}),
-			etcdErr.EcodeInvalidField,
+			v2error.EcodeInvalidField,
 		},
 		{
 			mustNewForm(t, "foo", url.Values{"dir": []string{"no"}}),
-			etcdErr.EcodeInvalidField,
+			v2error.EcodeInvalidField,
 		},
 		{
 			mustNewForm(t, "foo", url.Values{"dir": []string{"file"}}),
-			etcdErr.EcodeInvalidField,
+			v2error.EcodeInvalidField,
 		},
 		{
 			mustNewForm(t, "foo", url.Values{"quorum": []string{"no"}}),
-			etcdErr.EcodeInvalidField,
+			v2error.EcodeInvalidField,
 		},
 		{
 			mustNewForm(t, "foo", url.Values{"quorum": []string{"file"}}),
-			etcdErr.EcodeInvalidField,
+			v2error.EcodeInvalidField,
 		},
 		{
 			mustNewForm(t, "foo", url.Values{"stream": []string{"zzz"}}),
-			etcdErr.EcodeInvalidField,
+			v2error.EcodeInvalidField,
 		},
 		{
 			mustNewForm(t, "foo", url.Values{"stream": []string{"something"}}),
-			etcdErr.EcodeInvalidField,
+			v2error.EcodeInvalidField,
 		},
 		// prevValue cannot be empty
 		{
 			mustNewForm(t, "foo", url.Values{"prevValue": []string{""}}),
-			etcdErr.EcodePrevValueRequired,
+			v2error.EcodePrevValueRequired,
 		},
 		// wait is only valid with GET requests
 		{
 			mustNewMethodRequest(t, "HEAD", "foo?wait=true"),
-			etcdErr.EcodeInvalidField,
+			v2error.EcodeInvalidField,
 		},
 		// query values are considered
 		{
 			mustNewRequest(t, "foo?prevExist=wrong"),
-			etcdErr.EcodeInvalidField,
+			v2error.EcodeInvalidField,
 		},
 		{
 			mustNewRequest(t, "foo?ttl=wrong"),
-			etcdErr.EcodeTTLNaN,
+			v2error.EcodeTTLNaN,
 		},
 		// but body takes precedence if both are specified
 		{
@@ -361,7 +361,7 @@ func TestBadParseRequest(t *testing.T) {
 				"foo?ttl=12",
 				url.Values{"ttl": []string{"garbage"}},
 			),
-			etcdErr.EcodeTTLNaN,
+			v2error.EcodeTTLNaN,
 		},
 		{
 			mustNewForm(
@@ -369,7 +369,7 @@ func TestBadParseRequest(t *testing.T) {
 				"foo?prevExist=false",
 				url.Values{"prevExist": []string{"yes"}},
 			),
-			etcdErr.EcodeInvalidField,
+			v2error.EcodeInvalidField,
 		},
 	}
 	for i, tt := range tests {
@@ -378,7 +378,7 @@ func TestBadParseRequest(t *testing.T) {
 			t.Errorf("#%d: unexpected nil error!", i)
 			continue
 		}
-		ee, ok := err.(*etcdErr.Error)
+		ee, ok := err.(*v2error.Error)
 		if !ok {
 			t.Errorf("#%d: err is not etcd.Error!", i)
 			continue
@@ -1172,7 +1172,7 @@ func TestWriteEvent(t *testing.T) {
 	}
 
 	tests := []struct {
-		ev      *store.Event
+		ev      *v2store.Event
 		noValue bool
 		idx     string
 		// TODO(jonboulle): check body as well as just status code
@@ -1181,10 +1181,10 @@ func TestWriteEvent(t *testing.T) {
 	}{
 		// standard case, standard 200 response
 		{
-			&store.Event{
-				Action:   store.Get,
-				Node:     &store.NodeExtern{},
-				PrevNode: &store.NodeExtern{},
+			&v2store.Event{
+				Action:   v2store.Get,
+				Node:     &v2store.NodeExtern{},
+				PrevNode: &v2store.NodeExtern{},
 			},
 			false,
 			"0",
@@ -1193,10 +1193,10 @@ func TestWriteEvent(t *testing.T) {
 		},
 		// check new nodes return StatusCreated
 		{
-			&store.Event{
-				Action:   store.Create,
-				Node:     &store.NodeExtern{},
-				PrevNode: &store.NodeExtern{},
+			&v2store.Event{
+				Action:   v2store.Create,
+				Node:     &v2store.NodeExtern{},
+				PrevNode: &v2store.NodeExtern{},
 			},
 			false,
 			"0",
@@ -1470,7 +1470,7 @@ func TestBadServeKeys(t *testing.T) {
 			// etcdserver.Server etcd error
 			mustNewRequest(t, "foo"),
 			&errServer{
-				err: etcdErr.NewError(etcdErr.EcodeKeyNotFound, "/1/pant", 0),
+				err: v2error.NewError(v2error.EcodeKeyNotFound, "/1/pant", 0),
 			},
 
 			http.StatusNotFound,
@@ -1539,9 +1539,9 @@ func TestServeKeysGood(t *testing.T) {
 	}
 	server := &resServer{
 		res: etcdserver.Response{
-			Event: &store.Event{
-				Action: store.Get,
-				Node:   &store.NodeExtern{},
+			Event: &v2store.Event{
+				Action: v2store.Get,
+				Node:   &v2store.NodeExtern{},
 			},
 		},
 	}
@@ -1564,20 +1564,20 @@ func TestServeKeysEvent(t *testing.T) {
 		req   *http.Request
 		rsp   etcdserver.Response
 		wcode int
-		event *store.Event
+		event *v2store.Event
 	}{
 		{
 			mustNewRequest(t, "foo"),
 			etcdserver.Response{
-				Event: &store.Event{
-					Action: store.Get,
-					Node:   &store.NodeExtern{},
+				Event: &v2store.Event{
+					Action: v2store.Get,
+					Node:   &v2store.NodeExtern{},
 				},
 			},
 			http.StatusOK,
-			&store.Event{
-				Action: store.Get,
-				Node:   &store.NodeExtern{},
+			&v2store.Event{
+				Action: v2store.Get,
+				Node:   &v2store.NodeExtern{},
 			},
 		},
 		{
@@ -1587,14 +1587,14 @@ func TestServeKeysEvent(t *testing.T) {
 				url.Values{"noValueOnSuccess": []string{"true"}},
 			),
 			etcdserver.Response{
-				Event: &store.Event{
-					Action: store.CompareAndSwap,
-					Node:   &store.NodeExtern{},
+				Event: &v2store.Event{
+					Action: v2store.CompareAndSwap,
+					Node:   &v2store.NodeExtern{},
 				},
 			},
 			http.StatusOK,
-			&store.Event{
-				Action: store.CompareAndSwap,
+			&v2store.Event{
+				Action: v2store.CompareAndSwap,
 				Node:   nil,
 			},
 		},
@@ -1634,7 +1634,7 @@ func TestServeKeysEvent(t *testing.T) {
 
 func TestServeKeysWatch(t *testing.T) {
 	req := mustNewRequest(t, "/foo/bar")
-	ec := make(chan *store.Event)
+	ec := make(chan *v2store.Event)
 	dw := &dummyWatcher{
 		echan: ec,
 	}
@@ -1649,9 +1649,9 @@ func TestServeKeysWatch(t *testing.T) {
 		cluster: &fakeCluster{id: 1},
 	}
 	go func() {
-		ec <- &store.Event{
-			Action: store.Get,
-			Node:   &store.NodeExtern{},
+		ec <- &v2store.Event{
+			Action: v2store.Get,
+			Node:   &v2store.NodeExtern{},
 		}
 	}()
 	rw := httptest.NewRecorder()
@@ -1661,9 +1661,9 @@ func TestServeKeysWatch(t *testing.T) {
 	wcode := http.StatusOK
 	wbody := mustMarshalEvent(
 		t,
-		&store.Event{
-			Action: store.Get,
-			Node:   &store.NodeExtern{},
+		&v2store.Event{
+			Action: v2store.Get,
+			Node:   &v2store.NodeExtern{},
 		},
 	)
 
@@ -1695,12 +1695,12 @@ func TestHandleWatch(t *testing.T) {
 		r := httptest.NewRecorder()
 		return r, r
 	}
-	noopEv := func(chan *store.Event) {}
+	noopEv := func(chan *v2store.Event) {}
 
 	tests := []struct {
 		getCtx   func() context.Context
 		getRwRr  func() (http.ResponseWriter, *httptest.ResponseRecorder)
-		doToChan func(chan *store.Event)
+		doToChan func(chan *v2store.Event)
 
 		wbody string
 	}{
@@ -1708,18 +1708,18 @@ func TestHandleWatch(t *testing.T) {
 			// Normal case: one event
 			context.Background,
 			defaultRwRr,
-			func(ch chan *store.Event) {
-				ch <- &store.Event{
-					Action: store.Get,
-					Node:   &store.NodeExtern{},
+			func(ch chan *v2store.Event) {
+				ch <- &v2store.Event{
+					Action: v2store.Get,
+					Node:   &v2store.NodeExtern{},
 				}
 			},
 
 			mustMarshalEvent(
 				t,
-				&store.Event{
-					Action: store.Get,
-					Node:   &store.NodeExtern{},
+				&v2store.Event{
+					Action: v2store.Get,
+					Node:   &v2store.NodeExtern{},
 				},
 			),
 		},
@@ -1727,7 +1727,7 @@ func TestHandleWatch(t *testing.T) {
 			// Channel is closed, no event
 			context.Background,
 			defaultRwRr,
-			func(ch chan *store.Event) {
+			func(ch chan *v2store.Event) {
 				close(ch)
 			},
 
@@ -1765,7 +1765,7 @@ func TestHandleWatch(t *testing.T) {
 	for i, tt := range tests {
 		rw, rr := tt.getRwRr()
 		wa := &dummyWatcher{
-			echan: make(chan *store.Event, 1),
+			echan: make(chan *v2store.Event, 1),
 			sidx:  10,
 		}
 		tt.doToChan(wa.echan)
@@ -1808,7 +1808,7 @@ func TestHandleWatchStreaming(t *testing.T) {
 		make(chan struct{}, 1),
 	}
 	wa := &dummyWatcher{
-		echan: make(chan *store.Event),
+		echan: make(chan *v2store.Event),
 	}
 
 	// Launch the streaming handler in the background with a cancellable context
@@ -1846,9 +1846,9 @@ func TestHandleWatchStreaming(t *testing.T) {
 
 	// Now send the first event
 	select {
-	case wa.echan <- &store.Event{
-		Action: store.Get,
-		Node:   &store.NodeExtern{},
+	case wa.echan <- &v2store.Event{
+		Action: v2store.Get,
+		Node:   &v2store.NodeExtern{},
 	}:
 	case <-time.After(time.Second):
 		t.Fatal("timed out waiting for send")
@@ -1864,9 +1864,9 @@ func TestHandleWatchStreaming(t *testing.T) {
 	// And check the body is as expected
 	wbody = mustMarshalEvent(
 		t,
-		&store.Event{
-			Action: store.Get,
-			Node:   &store.NodeExtern{},
+		&v2store.Event{
+			Action: v2store.Get,
+			Node:   &v2store.NodeExtern{},
 		},
 	)
 	g = rw.Body.String()
@@ -1876,9 +1876,9 @@ func TestHandleWatchStreaming(t *testing.T) {
 
 	// Rinse and repeat
 	select {
-	case wa.echan <- &store.Event{
-		Action: store.Get,
-		Node:   &store.NodeExtern{},
+	case wa.echan <- &v2store.Event{
+		Action: v2store.Get,
+		Node:   &v2store.NodeExtern{},
 	}:
 	case <-time.After(time.Second):
 		t.Fatal("timed out waiting for send")
@@ -1910,33 +1910,33 @@ func TestHandleWatchStreaming(t *testing.T) {
 func TestTrimEventPrefix(t *testing.T) {
 	pre := "/abc"
 	tests := []struct {
-		ev  *store.Event
-		wev *store.Event
+		ev  *v2store.Event
+		wev *v2store.Event
 	}{
 		{
 			nil,
 			nil,
 		},
 		{
-			&store.Event{},
-			&store.Event{},
+			&v2store.Event{},
+			&v2store.Event{},
 		},
 		{
-			&store.Event{Node: &store.NodeExtern{Key: "/abc/def"}},
-			&store.Event{Node: &store.NodeExtern{Key: "/def"}},
+			&v2store.Event{Node: &v2store.NodeExtern{Key: "/abc/def"}},
+			&v2store.Event{Node: &v2store.NodeExtern{Key: "/def"}},
 		},
 		{
-			&store.Event{PrevNode: &store.NodeExtern{Key: "/abc/ghi"}},
-			&store.Event{PrevNode: &store.NodeExtern{Key: "/ghi"}},
+			&v2store.Event{PrevNode: &v2store.NodeExtern{Key: "/abc/ghi"}},
+			&v2store.Event{PrevNode: &v2store.NodeExtern{Key: "/ghi"}},
 		},
 		{
-			&store.Event{
-				Node:     &store.NodeExtern{Key: "/abc/def"},
-				PrevNode: &store.NodeExtern{Key: "/abc/ghi"},
+			&v2store.Event{
+				Node:     &v2store.NodeExtern{Key: "/abc/def"},
+				PrevNode: &v2store.NodeExtern{Key: "/abc/ghi"},
 			},
-			&store.Event{
-				Node:     &store.NodeExtern{Key: "/def"},
-				PrevNode: &store.NodeExtern{Key: "/ghi"},
+			&v2store.Event{
+				Node:     &v2store.NodeExtern{Key: "/def"},
+				PrevNode: &v2store.NodeExtern{Key: "/ghi"},
 			},
 		},
 	}
@@ -1951,28 +1951,28 @@ func TestTrimEventPrefix(t *testing.T) {
 func TestTrimNodeExternPrefix(t *testing.T) {
 	pre := "/abc"
 	tests := []struct {
-		n  *store.NodeExtern
-		wn *store.NodeExtern
+		n  *v2store.NodeExtern
+		wn *v2store.NodeExtern
 	}{
 		{
 			nil,
 			nil,
 		},
 		{
-			&store.NodeExtern{Key: "/abc/def"},
-			&store.NodeExtern{Key: "/def"},
+			&v2store.NodeExtern{Key: "/abc/def"},
+			&v2store.NodeExtern{Key: "/def"},
 		},
 		{
-			&store.NodeExtern{
+			&v2store.NodeExtern{
 				Key: "/abc/def",
-				Nodes: []*store.NodeExtern{
+				Nodes: []*v2store.NodeExtern{
 					{Key: "/abc/def/1"},
 					{Key: "/abc/def/2"},
 				},
 			},
-			&store.NodeExtern{
+			&v2store.NodeExtern{
 				Key: "/def",
-				Nodes: []*store.NodeExtern{
+				Nodes: []*v2store.NodeExtern{
 					{Key: "/def/1"},
 					{Key: "/def/2"},
 				},

+ 3 - 3
etcdserver/api/v2http/http_test.go

@@ -22,10 +22,10 @@ import (
 	"sort"
 	"testing"
 
-	etcdErr "github.com/coreos/etcd/error"
 	"github.com/coreos/etcd/etcdserver"
 	"github.com/coreos/etcd/etcdserver/etcdserverpb"
 	"github.com/coreos/etcd/etcdserver/membership"
+	"github.com/coreos/etcd/etcdserver/v2error"
 	"github.com/coreos/etcd/pkg/types"
 	"github.com/coreos/etcd/raft/raftpb"
 
@@ -94,12 +94,12 @@ func TestWriteError(t *testing.T) {
 		wi    string
 	}{
 		{
-			etcdErr.NewError(etcdErr.EcodeKeyNotFound, "/foo/bar", 123),
+			v2error.NewError(v2error.EcodeKeyNotFound, "/foo/bar", 123),
 			http.StatusNotFound,
 			"123",
 		},
 		{
-			etcdErr.NewError(etcdErr.EcodeTestFailed, "/foo/bar", 456),
+			v2error.NewError(v2error.EcodeTestFailed, "/foo/bar", 456),
 			http.StatusPreconditionFailed,
 			"456",
 		},

+ 3 - 3
etcdserver/api/v2http/metrics.go

@@ -20,10 +20,10 @@ import (
 
 	"net/http"
 
-	etcdErr "github.com/coreos/etcd/error"
 	"github.com/coreos/etcd/etcdserver"
 	"github.com/coreos/etcd/etcdserver/api/v2http/httptypes"
 	"github.com/coreos/etcd/etcdserver/etcdserverpb"
+	"github.com/coreos/etcd/etcdserver/v2error"
 	"github.com/prometheus/client_golang/prometheus"
 )
 
@@ -86,8 +86,8 @@ func codeFromError(err error) int {
 		return http.StatusInternalServerError
 	}
 	switch e := err.(type) {
-	case *etcdErr.Error:
-		return (*etcdErr.Error)(e).StatusCode()
+	case *v2error.Error:
+		return (*v2error.Error)(e).StatusCode()
 	case *httptypes.HTTPError:
 		return (*httptypes.HTTPError)(e).Code
 	default:

+ 84 - 84
etcdserver/api/v2v3/store.go

@@ -23,9 +23,9 @@ import (
 
 	"github.com/coreos/etcd/clientv3"
 	"github.com/coreos/etcd/clientv3/concurrency"
-	etcdErr "github.com/coreos/etcd/error"
-	"github.com/coreos/etcd/internal/mvcc/mvccpb"
-	"github.com/coreos/etcd/internal/store"
+	"github.com/coreos/etcd/etcdserver/v2error"
+	"github.com/coreos/etcd/etcdserver/v2store"
+	"github.com/coreos/etcd/mvcc/mvccpb"
 )
 
 // store implements the Store interface for V2 using
@@ -41,13 +41,13 @@ const maxPathDepth = 63
 
 var errUnsupported = fmt.Errorf("TTLs are unsupported")
 
-func NewStore(c *clientv3.Client, pfx string) store.Store { return newStore(c, pfx) }
+func NewStore(c *clientv3.Client, pfx string) v2store.Store { return newStore(c, pfx) }
 
 func newStore(c *clientv3.Client, pfx string) *v2v3Store { return &v2v3Store{c, pfx, c.Ctx()} }
 
 func (s *v2v3Store) Index() uint64 { panic("STUB") }
 
-func (s *v2v3Store) Get(nodePath string, recursive, sorted bool) (*store.Event, error) {
+func (s *v2v3Store) Get(nodePath string, recursive, sorted bool) (*v2store.Event, error) {
 	key := s.mkPath(nodePath)
 	resp, err := s.c.Txn(s.ctx).Then(
 		clientv3.OpGet(key+"/"),
@@ -66,9 +66,9 @@ func (s *v2v3Store) Get(nodePath string, recursive, sorted bool) (*store.Event,
 		if len(kvs) > 0 {
 			cidx, midx = mkV2Rev(kvs[0].CreateRevision), mkV2Rev(kvs[0].ModRevision)
 		}
-		return &store.Event{
-			Action: store.Get,
-			Node: &store.NodeExtern{
+		return &v2store.Event{
+			Action: v2store.Get,
+			Node: &v2store.NodeExtern{
 				Key:           nodePath,
 				Dir:           true,
 				Nodes:         nodes,
@@ -81,23 +81,23 @@ func (s *v2v3Store) Get(nodePath string, recursive, sorted bool) (*store.Event,
 
 	kvs := resp.Responses[1].GetResponseRange().Kvs
 	if len(kvs) == 0 {
-		return nil, etcdErr.NewError(etcdErr.EcodeKeyNotFound, nodePath, mkV2Rev(resp.Header.Revision))
+		return nil, v2error.NewError(v2error.EcodeKeyNotFound, nodePath, mkV2Rev(resp.Header.Revision))
 	}
 
-	return &store.Event{
-		Action:    store.Get,
+	return &v2store.Event{
+		Action:    v2store.Get,
 		Node:      s.mkV2Node(kvs[0]),
 		EtcdIndex: mkV2Rev(resp.Header.Revision),
 	}, nil
 }
 
-func (s *v2v3Store) getDir(nodePath string, recursive, sorted bool, rev int64) ([]*store.NodeExtern, error) {
+func (s *v2v3Store) getDir(nodePath string, recursive, sorted bool, rev int64) ([]*v2store.NodeExtern, error) {
 	rootNodes, err := s.getDirDepth(nodePath, 1, rev)
 	if err != nil || !recursive {
 		return rootNodes, err
 	}
 	nextNodes := rootNodes
-	nodes := make(map[string]*store.NodeExtern)
+	nodes := make(map[string]*v2store.NodeExtern)
 	// Breadth walk the subdirectories
 	for i := 2; len(nextNodes) > 0; i++ {
 		for _, n := range nextNodes {
@@ -113,14 +113,14 @@ func (s *v2v3Store) getDir(nodePath string, recursive, sorted bool, rev int64) (
 	return rootNodes, nil
 }
 
-func (s *v2v3Store) getDirDepth(nodePath string, depth int, rev int64) ([]*store.NodeExtern, error) {
+func (s *v2v3Store) getDirDepth(nodePath string, depth int, rev int64) ([]*v2store.NodeExtern, error) {
 	pd := s.mkPathDepth(nodePath, depth)
 	resp, err := s.c.Get(s.ctx, pd, clientv3.WithPrefix(), clientv3.WithRev(rev))
 	if err != nil {
 		return nil, err
 	}
 
-	nodes := make([]*store.NodeExtern, len(resp.Kvs))
+	nodes := make([]*v2store.NodeExtern, len(resp.Kvs))
 	for i, kv := range resp.Kvs {
 		nodes[i] = s.mkV2Node(kv)
 	}
@@ -131,21 +131,21 @@ func (s *v2v3Store) Set(
 	nodePath string,
 	dir bool,
 	value string,
-	expireOpts store.TTLOptionSet,
-) (*store.Event, error) {
+	expireOpts v2store.TTLOptionSet,
+) (*v2store.Event, error) {
 	if expireOpts.Refresh || !expireOpts.ExpireTime.IsZero() {
 		return nil, errUnsupported
 	}
 
 	if isRoot(nodePath) {
-		return nil, etcdErr.NewError(etcdErr.EcodeRootROnly, nodePath, 0)
+		return nil, v2error.NewError(v2error.EcodeRootROnly, nodePath, 0)
 	}
 
 	ecode := 0
 	applyf := func(stm concurrency.STM) error {
 		parent := path.Dir(nodePath)
 		if !isRoot(parent) && stm.Rev(s.mkPath(parent)+"/") == 0 {
-			ecode = etcdErr.EcodeKeyNotFound
+			ecode = v2error.EcodeKeyNotFound
 			return nil
 		}
 
@@ -153,16 +153,16 @@ func (s *v2v3Store) Set(
 		if dir {
 			if stm.Rev(key) != 0 {
 				// exists as non-dir
-				ecode = etcdErr.EcodeNotDir
+				ecode = v2error.EcodeNotDir
 				return nil
 			}
 			key = key + "/"
 		} else if stm.Rev(key+"/") != 0 {
-			ecode = etcdErr.EcodeNotFile
+			ecode = v2error.EcodeNotFile
 			return nil
 		}
 		stm.Put(key, value, clientv3.WithPrevKV())
-		stm.Put(s.mkActionKey(), store.Set)
+		stm.Put(s.mkActionKey(), v2store.Set)
 		return nil
 	}
 
@@ -171,11 +171,11 @@ func (s *v2v3Store) Set(
 		return nil, err
 	}
 	if ecode != 0 {
-		return nil, etcdErr.NewError(ecode, nodePath, mkV2Rev(resp.Header.Revision))
+		return nil, v2error.NewError(ecode, nodePath, mkV2Rev(resp.Header.Revision))
 	}
 
 	createRev := resp.Header.Revision
-	var pn *store.NodeExtern
+	var pn *v2store.NodeExtern
 	if pkv := prevKeyFromPuts(resp); pkv != nil {
 		pn = s.mkV2Node(pkv)
 		createRev = pkv.CreateRevision
@@ -185,9 +185,9 @@ func (s *v2v3Store) Set(
 	if dir {
 		vp = nil
 	}
-	return &store.Event{
-		Action: store.Set,
-		Node: &store.NodeExtern{
+	return &v2store.Event{
+		Action: v2store.Set,
+		Node: &v2store.NodeExtern{
 			Key:           nodePath,
 			Value:         vp,
 			Dir:           dir,
@@ -199,9 +199,9 @@ func (s *v2v3Store) Set(
 	}, nil
 }
 
-func (s *v2v3Store) Update(nodePath, newValue string, expireOpts store.TTLOptionSet) (*store.Event, error) {
+func (s *v2v3Store) Update(nodePath, newValue string, expireOpts v2store.TTLOptionSet) (*v2store.Event, error) {
 	if isRoot(nodePath) {
-		return nil, etcdErr.NewError(etcdErr.EcodeRootROnly, nodePath, 0)
+		return nil, v2error.NewError(v2error.EcodeRootROnly, nodePath, 0)
 	}
 
 	if expireOpts.Refresh || !expireOpts.ExpireTime.IsZero() {
@@ -212,15 +212,15 @@ func (s *v2v3Store) Update(nodePath, newValue string, expireOpts store.TTLOption
 	ecode := 0
 	applyf := func(stm concurrency.STM) error {
 		if rev := stm.Rev(key + "/"); rev != 0 {
-			ecode = etcdErr.EcodeNotFile
+			ecode = v2error.EcodeNotFile
 			return nil
 		}
 		if rev := stm.Rev(key); rev == 0 {
-			ecode = etcdErr.EcodeKeyNotFound
+			ecode = v2error.EcodeKeyNotFound
 			return nil
 		}
 		stm.Put(key, newValue, clientv3.WithPrevKV())
-		stm.Put(s.mkActionKey(), store.Update)
+		stm.Put(s.mkActionKey(), v2store.Update)
 		return nil
 	}
 
@@ -229,13 +229,13 @@ func (s *v2v3Store) Update(nodePath, newValue string, expireOpts store.TTLOption
 		return nil, err
 	}
 	if ecode != 0 {
-		return nil, etcdErr.NewError(etcdErr.EcodeNotFile, nodePath, mkV2Rev(resp.Header.Revision))
+		return nil, v2error.NewError(v2error.EcodeNotFile, nodePath, mkV2Rev(resp.Header.Revision))
 	}
 
 	pkv := prevKeyFromPuts(resp)
-	return &store.Event{
-		Action: store.Update,
-		Node: &store.NodeExtern{
+	return &v2store.Event{
+		Action: v2store.Update,
+		Node: &v2store.NodeExtern{
 			Key:           nodePath,
 			Value:         &newValue,
 			ModifiedIndex: mkV2Rev(resp.Header.Revision),
@@ -251,10 +251,10 @@ func (s *v2v3Store) Create(
 	dir bool,
 	value string,
 	unique bool,
-	expireOpts store.TTLOptionSet,
-) (*store.Event, error) {
+	expireOpts v2store.TTLOptionSet,
+) (*v2store.Event, error) {
 	if isRoot(nodePath) {
-		return nil, etcdErr.NewError(etcdErr.EcodeRootROnly, nodePath, 0)
+		return nil, v2error.NewError(v2error.EcodeRootROnly, nodePath, 0)
 	}
 	if expireOpts.Refresh || !expireOpts.ExpireTime.IsZero() {
 		return nil, errUnsupported
@@ -275,7 +275,7 @@ func (s *v2v3Store) Create(
 			}
 		}
 		if stm.Rev(key) > 0 || stm.Rev(key+"/") > 0 {
-			ecode = etcdErr.EcodeNodeExist
+			ecode = v2error.EcodeNodeExist
 			return nil
 		}
 		// build path if any directories in path do not exist
@@ -283,7 +283,7 @@ func (s *v2v3Store) Create(
 		for p := path.Dir(nodePath); !isRoot(p); p = path.Dir(p) {
 			pp := s.mkPath(p)
 			if stm.Rev(pp) > 0 {
-				ecode = etcdErr.EcodeNotDir
+				ecode = v2error.EcodeNotDir
 				return nil
 			}
 			if stm.Rev(pp+"/") == 0 {
@@ -299,7 +299,7 @@ func (s *v2v3Store) Create(
 			key += "/"
 		}
 		stm.Put(key, value)
-		stm.Put(s.mkActionKey(), store.Create)
+		stm.Put(s.mkActionKey(), v2store.Create)
 		return nil
 	}
 
@@ -308,7 +308,7 @@ func (s *v2v3Store) Create(
 		return nil, err
 	}
 	if ecode != 0 {
-		return nil, etcdErr.NewError(ecode, nodePath, mkV2Rev(resp.Header.Revision))
+		return nil, v2error.NewError(ecode, nodePath, mkV2Rev(resp.Header.Revision))
 	}
 
 	var v *string
@@ -316,9 +316,9 @@ func (s *v2v3Store) Create(
 		v = &value
 	}
 
-	return &store.Event{
-		Action: store.Create,
-		Node: &store.NodeExtern{
+	return &v2store.Event{
+		Action: v2store.Create,
+		Node: &v2store.NodeExtern{
 			Key:           nodePath,
 			Value:         v,
 			Dir:           dir,
@@ -334,10 +334,10 @@ func (s *v2v3Store) CompareAndSwap(
 	prevValue string,
 	prevIndex uint64,
 	value string,
-	expireOpts store.TTLOptionSet,
-) (*store.Event, error) {
+	expireOpts v2store.TTLOptionSet,
+) (*v2store.Event, error) {
 	if isRoot(nodePath) {
-		return nil, etcdErr.NewError(etcdErr.EcodeRootROnly, nodePath, 0)
+		return nil, v2error.NewError(v2error.EcodeRootROnly, nodePath, 0)
 	}
 	if expireOpts.Refresh || !expireOpts.ExpireTime.IsZero() {
 		return nil, errUnsupported
@@ -348,7 +348,7 @@ func (s *v2v3Store) CompareAndSwap(
 		s.mkCompare(nodePath, prevValue, prevIndex)...,
 	).Then(
 		clientv3.OpPut(key, value, clientv3.WithPrevKV()),
-		clientv3.OpPut(s.mkActionKey(), store.CompareAndSwap),
+		clientv3.OpPut(s.mkActionKey(), v2store.CompareAndSwap),
 	).Else(
 		clientv3.OpGet(key),
 		clientv3.OpGet(key+"/"),
@@ -362,9 +362,9 @@ func (s *v2v3Store) CompareAndSwap(
 	}
 
 	pkv := resp.Responses[0].GetResponsePut().PrevKv
-	return &store.Event{
-		Action: store.CompareAndSwap,
-		Node: &store.NodeExtern{
+	return &v2store.Event{
+		Action: v2store.CompareAndSwap,
+		Node: &v2store.NodeExtern{
 			Key:           nodePath,
 			Value:         &value,
 			CreatedIndex:  mkV2Rev(pkv.CreateRevision),
@@ -375,9 +375,9 @@ func (s *v2v3Store) CompareAndSwap(
 	}, nil
 }
 
-func (s *v2v3Store) Delete(nodePath string, dir, recursive bool) (*store.Event, error) {
+func (s *v2v3Store) Delete(nodePath string, dir, recursive bool) (*v2store.Event, error) {
 	if isRoot(nodePath) {
-		return nil, etcdErr.NewError(etcdErr.EcodeRootROnly, nodePath, 0)
+		return nil, v2error.NewError(v2error.EcodeRootROnly, nodePath, 0)
 	}
 	if !dir && !recursive {
 		return s.deleteNode(nodePath)
@@ -391,7 +391,7 @@ func (s *v2v3Store) Delete(nodePath string, dir, recursive bool) (*store.Event,
 	for i := 1; i < maxPathDepth; i++ {
 		dels[i] = clientv3.OpDelete(s.mkPathDepth(nodePath, i), clientv3.WithPrefix())
 	}
-	dels[maxPathDepth] = clientv3.OpPut(s.mkActionKey(), store.Delete)
+	dels[maxPathDepth] = clientv3.OpPut(s.mkActionKey(), v2store.Delete)
 
 	resp, err := s.c.Txn(s.ctx).If(
 		clientv3.Compare(clientv3.Version(s.mkPath(nodePath)+"/"), ">", 0),
@@ -403,61 +403,61 @@ func (s *v2v3Store) Delete(nodePath string, dir, recursive bool) (*store.Event,
 		return nil, err
 	}
 	if !resp.Succeeded {
-		return nil, etcdErr.NewError(etcdErr.EcodeNodeExist, nodePath, mkV2Rev(resp.Header.Revision))
+		return nil, v2error.NewError(v2error.EcodeNodeExist, nodePath, mkV2Rev(resp.Header.Revision))
 	}
 	dresp := resp.Responses[0].GetResponseDeleteRange()
-	return &store.Event{
-		Action:    store.Delete,
+	return &v2store.Event{
+		Action:    v2store.Delete,
 		PrevNode:  s.mkV2Node(dresp.PrevKvs[0]),
 		EtcdIndex: mkV2Rev(resp.Header.Revision),
 	}, nil
 }
 
-func (s *v2v3Store) deleteEmptyDir(nodePath string) (*store.Event, error) {
+func (s *v2v3Store) deleteEmptyDir(nodePath string) (*v2store.Event, error) {
 	resp, err := s.c.Txn(s.ctx).If(
 		clientv3.Compare(clientv3.Version(s.mkPathDepth(nodePath, 1)), "=", 0).WithPrefix(),
 	).Then(
 		clientv3.OpDelete(s.mkPath(nodePath)+"/", clientv3.WithPrevKV()),
-		clientv3.OpPut(s.mkActionKey(), store.Delete),
+		clientv3.OpPut(s.mkActionKey(), v2store.Delete),
 	).Commit()
 	if err != nil {
 		return nil, err
 	}
 	if !resp.Succeeded {
-		return nil, etcdErr.NewError(etcdErr.EcodeDirNotEmpty, nodePath, mkV2Rev(resp.Header.Revision))
+		return nil, v2error.NewError(v2error.EcodeDirNotEmpty, nodePath, mkV2Rev(resp.Header.Revision))
 	}
 	dresp := resp.Responses[0].GetResponseDeleteRange()
 	if len(dresp.PrevKvs) == 0 {
-		return nil, etcdErr.NewError(etcdErr.EcodeNodeExist, nodePath, mkV2Rev(resp.Header.Revision))
+		return nil, v2error.NewError(v2error.EcodeNodeExist, nodePath, mkV2Rev(resp.Header.Revision))
 	}
-	return &store.Event{
-		Action:    store.Delete,
+	return &v2store.Event{
+		Action:    v2store.Delete,
 		PrevNode:  s.mkV2Node(dresp.PrevKvs[0]),
 		EtcdIndex: mkV2Rev(resp.Header.Revision),
 	}, nil
 }
 
-func (s *v2v3Store) deleteNode(nodePath string) (*store.Event, error) {
+func (s *v2v3Store) deleteNode(nodePath string) (*v2store.Event, error) {
 	resp, err := s.c.Txn(s.ctx).If(
 		clientv3.Compare(clientv3.Version(s.mkPath(nodePath)+"/"), "=", 0),
 	).Then(
 		clientv3.OpDelete(s.mkPath(nodePath), clientv3.WithPrevKV()),
-		clientv3.OpPut(s.mkActionKey(), store.Delete),
+		clientv3.OpPut(s.mkActionKey(), v2store.Delete),
 	).Commit()
 	if err != nil {
 		return nil, err
 	}
 	if !resp.Succeeded {
-		return nil, etcdErr.NewError(etcdErr.EcodeNotFile, nodePath, mkV2Rev(resp.Header.Revision))
+		return nil, v2error.NewError(v2error.EcodeNotFile, nodePath, mkV2Rev(resp.Header.Revision))
 	}
 	pkvs := resp.Responses[0].GetResponseDeleteRange().PrevKvs
 	if len(pkvs) == 0 {
-		return nil, etcdErr.NewError(etcdErr.EcodeKeyNotFound, nodePath, mkV2Rev(resp.Header.Revision))
+		return nil, v2error.NewError(v2error.EcodeKeyNotFound, nodePath, mkV2Rev(resp.Header.Revision))
 	}
 	pkv := pkvs[0]
-	return &store.Event{
-		Action: store.Delete,
-		Node: &store.NodeExtern{
+	return &v2store.Event{
+		Action: v2store.Delete,
+		Node: &v2store.NodeExtern{
 			Key:           nodePath,
 			CreatedIndex:  mkV2Rev(pkv.CreateRevision),
 			ModifiedIndex: mkV2Rev(resp.Header.Revision),
@@ -467,9 +467,9 @@ func (s *v2v3Store) deleteNode(nodePath string) (*store.Event, error) {
 	}, nil
 }
 
-func (s *v2v3Store) CompareAndDelete(nodePath, prevValue string, prevIndex uint64) (*store.Event, error) {
+func (s *v2v3Store) CompareAndDelete(nodePath, prevValue string, prevIndex uint64) (*v2store.Event, error) {
 	if isRoot(nodePath) {
-		return nil, etcdErr.NewError(etcdErr.EcodeRootROnly, nodePath, 0)
+		return nil, v2error.NewError(v2error.EcodeRootROnly, nodePath, 0)
 	}
 
 	key := s.mkPath(nodePath)
@@ -477,7 +477,7 @@ func (s *v2v3Store) CompareAndDelete(nodePath, prevValue string, prevIndex uint6
 		s.mkCompare(nodePath, prevValue, prevIndex)...,
 	).Then(
 		clientv3.OpDelete(key, clientv3.WithPrevKV()),
-		clientv3.OpPut(s.mkActionKey(), store.CompareAndDelete),
+		clientv3.OpPut(s.mkActionKey(), v2store.CompareAndDelete),
 	).Else(
 		clientv3.OpGet(key),
 		clientv3.OpGet(key+"/"),
@@ -492,9 +492,9 @@ func (s *v2v3Store) CompareAndDelete(nodePath, prevValue string, prevIndex uint6
 
 	// len(pkvs) > 1 since txn only succeeds when key exists
 	pkv := resp.Responses[0].GetResponseDeleteRange().PrevKvs[0]
-	return &store.Event{
-		Action: store.CompareAndDelete,
-		Node: &store.NodeExtern{
+	return &v2store.Event{
+		Action: v2store.CompareAndDelete,
+		Node: &v2store.NodeExtern{
 			Key:           nodePath,
 			CreatedIndex:  mkV2Rev(pkv.CreateRevision),
 			ModifiedIndex: mkV2Rev(resp.Header.Revision),
@@ -506,11 +506,11 @@ func (s *v2v3Store) CompareAndDelete(nodePath, prevValue string, prevIndex uint6
 
 func compareFail(nodePath, prevValue string, prevIndex uint64, resp *clientv3.TxnResponse) error {
 	if dkvs := resp.Responses[1].GetResponseRange().Kvs; len(dkvs) > 0 {
-		return etcdErr.NewError(etcdErr.EcodeNotFile, nodePath, mkV2Rev(resp.Header.Revision))
+		return v2error.NewError(v2error.EcodeNotFile, nodePath, mkV2Rev(resp.Header.Revision))
 	}
 	kvs := resp.Responses[0].GetResponseRange().Kvs
 	if len(kvs) == 0 {
-		return etcdErr.NewError(etcdErr.EcodeKeyNotFound, nodePath, mkV2Rev(resp.Header.Revision))
+		return v2error.NewError(v2error.EcodeKeyNotFound, nodePath, mkV2Rev(resp.Header.Revision))
 	}
 	kv := kvs[0]
 	indexMatch := (prevIndex == 0 || kv.ModRevision == int64(prevIndex))
@@ -524,7 +524,7 @@ func compareFail(nodePath, prevValue string, prevIndex uint64, resp *clientv3.Tx
 	default:
 		cause = fmt.Sprintf("[%v != %v] [%v != %v]", prevValue, string(kv.Value), prevIndex, kv.ModRevision)
 	}
-	return etcdErr.NewError(etcdErr.EcodeTestFailed, cause, mkV2Rev(resp.Header.Revision))
+	return v2error.NewError(v2error.EcodeTestFailed, cause, mkV2Rev(resp.Header.Revision))
 }
 
 func (s *v2v3Store) mkCompare(nodePath, prevValue string, prevIndex uint64) []clientv3.Cmp {
@@ -548,7 +548,7 @@ func (s *v2v3Store) Version() int { return 2 }
 
 func (s *v2v3Store) Save() ([]byte, error)       { panic("STUB") }
 func (s *v2v3Store) Recovery(state []byte) error { panic("STUB") }
-func (s *v2v3Store) Clone() store.Store          { panic("STUB") }
+func (s *v2v3Store) Clone() v2store.Store        { panic("STUB") }
 func (s *v2v3Store) SaveNoCopy() ([]byte, error) { panic("STUB") }
 func (s *v2v3Store) HasTTLKeys() bool            { panic("STUB") }
 
@@ -586,11 +586,11 @@ func mkV3Rev(v2Rev uint64) int64 {
 }
 
 // mkV2Node creates a V2 NodeExtern from a V3 KeyValue
-func (s *v2v3Store) mkV2Node(kv *mvccpb.KeyValue) *store.NodeExtern {
+func (s *v2v3Store) mkV2Node(kv *mvccpb.KeyValue) *v2store.NodeExtern {
 	if kv == nil {
 		return nil
 	}
-	n := &store.NodeExtern{
+	n := &v2store.NodeExtern{
 		Key:           string(s.mkNodePath(string(kv.Key))),
 		Dir:           kv.Key[len(kv.Key)-1] == '/',
 		CreatedIndex:  mkV2Rev(kv.CreateRevision),

+ 9 - 9
etcdserver/api/v2v3/watcher.go

@@ -19,11 +19,11 @@ import (
 	"strings"
 
 	"github.com/coreos/etcd/clientv3"
-	etcdErr "github.com/coreos/etcd/error"
-	"github.com/coreos/etcd/internal/store"
+	"github.com/coreos/etcd/etcdserver/v2error"
+	"github.com/coreos/etcd/etcdserver/v2store"
 )
 
-func (s *v2v3Store) Watch(prefix string, recursive, stream bool, sinceIndex uint64) (store.Watcher, error) {
+func (s *v2v3Store) Watch(prefix string, recursive, stream bool, sinceIndex uint64) (v2store.Watcher, error) {
 	ctx, cancel := context.WithCancel(s.ctx)
 	wch := s.c.Watch(
 		ctx,
@@ -36,10 +36,10 @@ func (s *v2v3Store) Watch(prefix string, recursive, stream bool, sinceIndex uint
 	resp, ok := <-wch
 	if err := resp.Err(); err != nil || !ok {
 		cancel()
-		return nil, etcdErr.NewError(etcdErr.EcodeRaftInternal, prefix, 0)
+		return nil, v2error.NewError(v2error.EcodeRaftInternal, prefix, 0)
 	}
 
-	evc, donec := make(chan *store.Event), make(chan struct{})
+	evc, donec := make(chan *v2store.Event), make(chan struct{})
 	go func() {
 		defer func() {
 			close(evc)
@@ -82,7 +82,7 @@ func (s *v2v3Store) Watch(prefix string, recursive, stream bool, sinceIndex uint
 	}, nil
 }
 
-func (s *v2v3Store) mkV2Events(wr clientv3.WatchResponse) (evs []*store.Event) {
+func (s *v2v3Store) mkV2Events(wr clientv3.WatchResponse) (evs []*v2store.Event) {
 	ak := s.mkActionKey()
 	for _, rev := range mkRevs(wr) {
 		var act, key *clientv3.Event
@@ -97,7 +97,7 @@ func (s *v2v3Store) mkV2Events(wr clientv3.WatchResponse) (evs []*store.Event) {
 				key = ev
 			}
 		}
-		v2ev := &store.Event{
+		v2ev := &v2store.Event{
 			Action:    string(act.Kv.Value),
 			Node:      s.mkV2Node(key.Kv),
 			PrevNode:  s.mkV2Node(key.PrevKv),
@@ -125,7 +125,7 @@ func mkRevs(wr clientv3.WatchResponse) (revs [][]*clientv3.Event) {
 
 type v2v3Watcher struct {
 	startRev int64
-	evc      chan *store.Event
+	evc      chan *v2store.Event
 	donec    chan struct{}
 	cancel   context.CancelFunc
 }
@@ -137,4 +137,4 @@ func (w *v2v3Watcher) Remove() {
 	<-w.donec
 }
 
-func (w *v2v3Watcher) EventChan() chan *store.Event { return w.evc }
+func (w *v2v3Watcher) EventChan() chan *v2store.Event { return w.evc }

+ 35 - 35
etcdserver/api/v3election/v3electionpb/v3election.pb.go

@@ -31,7 +31,7 @@ import (
 
 	etcdserverpb "github.com/coreos/etcd/etcdserver/etcdserverpb"
 
-	mvccpb "github.com/coreos/etcd/internal/mvcc/mvccpb"
+	mvccpb "github.com/coreos/etcd/mvcc/mvccpb"
 
 	context "golang.org/x/net/context"
 
@@ -2041,39 +2041,39 @@ var (
 func init() { proto.RegisterFile("v3election.proto", fileDescriptorV3Election) }
 
 var fileDescriptorV3Election = []byte{
-	// 541 bytes of a gzipped FileDescriptorProto
+	// 535 bytes of a gzipped FileDescriptorProto
 	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x94, 0xcf, 0x6e, 0xd3, 0x40,
-	0x10, 0xc6, 0x59, 0xa7, 0x84, 0x32, 0xa4, 0xad, 0x65, 0x82, 0x08, 0x21, 0x98, 0x68, 0x91, 0x50,
-	0x95, 0x83, 0x17, 0x35, 0x9c, 0x72, 0x42, 0x20, 0x50, 0xa5, 0x22, 0x01, 0x3e, 0x20, 0x38, 0x6e,
-	0xdc, 0x91, 0x1b, 0xd9, 0xf1, 0x1a, 0xdb, 0xb5, 0x94, 0x2b, 0xaf, 0xc0, 0x01, 0x1e, 0x89, 0x23,
-	0x12, 0x2f, 0x80, 0x02, 0x0f, 0x82, 0x76, 0xd7, 0xc6, 0x7f, 0x94, 0x20, 0x44, 0x2e, 0xd6, 0x78,
-	0xe7, 0xf3, 0xfc, 0xe6, 0x9b, 0x9d, 0x04, 0xcc, 0x7c, 0x8a, 0x21, 0x7a, 0xd9, 0x42, 0x44, 0x4e,
-	0x9c, 0x88, 0x4c, 0x58, 0xbd, 0xea, 0x24, 0x9e, 0x0f, 0xfb, 0xbe, 0xf0, 0x85, 0x4a, 0x30, 0x19,
-	0x69, 0xcd, 0xf0, 0x21, 0x66, 0xde, 0x39, 0x93, 0x8f, 0x14, 0x93, 0x1c, 0x93, 0x5a, 0x18, 0xcf,
-	0x59, 0x12, 0x7b, 0x85, 0x8e, 0x2a, 0xdd, 0x22, 0xca, 0x30, 0x89, 0x78, 0xc8, 0x96, 0xb9, 0xe7,
-	0xa9, 0x47, 0x3c, 0x67, 0x41, 0x5e, 0x68, 0x46, 0xbe, 0x10, 0x7e, 0x88, 0x8c, 0xc7, 0x0b, 0xc6,
-	0xa3, 0x48, 0x64, 0x5c, 0xa2, 0x53, 0x9d, 0xa5, 0x6f, 0xe0, 0xe8, 0x19, 0x5f, 0xc6, 0x7c, 0xe1,
-	0x47, 0x2e, 0x7e, 0xb8, 0xc4, 0x34, 0xb3, 0x2c, 0xd8, 0x8b, 0xf8, 0x12, 0x07, 0x64, 0x4c, 0x8e,
-	0x7b, 0xae, 0x8a, 0xad, 0x3e, 0x5c, 0x0d, 0x91, 0xa7, 0x38, 0x30, 0xc6, 0xe4, 0xb8, 0xe3, 0xea,
-	0x17, 0x79, 0x9a, 0xf3, 0xf0, 0x12, 0x07, 0x1d, 0x25, 0xd5, 0x2f, 0x74, 0x05, 0x66, 0x55, 0x32,
-	0x8d, 0x45, 0x94, 0xa2, 0xf5, 0x18, 0xba, 0x17, 0xc8, 0xcf, 0x31, 0x51, 0x55, 0x6f, 0x9c, 0x8c,
-	0x9c, 0xba, 0x23, 0xa7, 0xd4, 0x9d, 0x2a, 0x8d, 0x5b, 0x68, 0x2d, 0x06, 0xdd, 0x50, 0x7f, 0x65,
-	0xa8, 0xaf, 0x6e, 0x3b, 0xf5, 0xd9, 0x39, 0x2f, 0x55, 0xee, 0x0c, 0x57, 0x6e, 0x21, 0xa3, 0xef,
-	0xe1, 0xfa, 0x9f, 0xc3, 0x8d, 0x3e, 0x4c, 0xe8, 0x04, 0xb8, 0x52, 0xe5, 0x7a, 0xae, 0x0c, 0xe5,
-	0x49, 0x82, 0xb9, 0x72, 0xd0, 0x71, 0x65, 0x58, 0x79, 0xdd, 0xab, 0x79, 0xa5, 0x0f, 0xe0, 0x40,
-	0x97, 0xfe, 0xcb, 0x98, 0xe8, 0x05, 0x1c, 0x96, 0xa2, 0x9d, 0x8c, 0x8f, 0xc1, 0x08, 0xf2, 0xc2,
-	0xb4, 0xe9, 0xe8, 0x1b, 0x75, 0xce, 0x70, 0xf5, 0x56, 0x0e, 0xd8, 0x35, 0x82, 0x9c, 0x3e, 0x81,
-	0x03, 0x17, 0xd3, 0xda, 0xad, 0x55, 0xb3, 0x22, 0xff, 0x36, 0xab, 0x17, 0x70, 0x58, 0x56, 0xd8,
-	0xa5, 0x57, 0xfa, 0x0e, 0x8e, 0x5e, 0x27, 0xc2, 0x0b, 0xf9, 0x62, 0xf9, 0xbf, 0xbd, 0x54, 0x8b,
-	0x64, 0xd4, 0x17, 0xe9, 0x14, 0xcc, 0xaa, 0xf2, 0x2e, 0x3d, 0x9e, 0x7c, 0xde, 0x83, 0xfd, 0xe7,
-	0x45, 0x03, 0x56, 0x00, 0xfb, 0xe5, 0x7e, 0x5a, 0xf7, 0x9a, 0x9d, 0xb5, 0x7e, 0x0a, 0x43, 0x7b,
-	0x5b, 0x5a, 0x53, 0xe8, 0xf8, 0xe3, 0xf7, 0x5f, 0x9f, 0x8c, 0x21, 0xbd, 0xc5, 0xf2, 0x29, 0x2b,
-	0x85, 0xcc, 0x2b, 0x64, 0x33, 0x32, 0x91, 0xb0, 0xd2, 0x43, 0x1b, 0xd6, 0x9a, 0x5a, 0x1b, 0xd6,
-	0xb6, 0xbe, 0x05, 0x16, 0x17, 0x32, 0x09, 0xf3, 0xa0, 0xab, 0x67, 0x6b, 0xdd, 0xdd, 0x34, 0xf1,
-	0x12, 0x34, 0xda, 0x9c, 0x2c, 0x30, 0xb6, 0xc2, 0x0c, 0xe8, 0xcd, 0x06, 0x46, 0x5f, 0x94, 0x84,
-	0xf8, 0x70, 0xed, 0xd5, 0x5c, 0x0d, 0x7c, 0x17, 0xca, 0x7d, 0x45, 0xb9, 0x43, 0xfb, 0x0d, 0x8a,
-	0xd0, 0x85, 0x67, 0x64, 0xf2, 0x88, 0x48, 0x37, 0x7a, 0x41, 0xdb, 0x9c, 0xc6, 0xe2, 0xb7, 0x39,
-	0xcd, 0x9d, 0xde, 0xe2, 0x26, 0x51, 0xa2, 0x19, 0x99, 0x3c, 0x35, 0xbf, 0xae, 0x6d, 0xf2, 0x6d,
-	0x6d, 0x93, 0x1f, 0x6b, 0x9b, 0x7c, 0xf9, 0x69, 0x5f, 0x99, 0x77, 0xd5, 0x1f, 0xe3, 0xf4, 0x77,
-	0x00, 0x00, 0x00, 0xff, 0xff, 0xa4, 0x60, 0xb0, 0x9f, 0xba, 0x05, 0x00, 0x00,
+	0x10, 0xc6, 0x59, 0x27, 0x84, 0x32, 0xa4, 0xad, 0x65, 0x82, 0x48, 0x43, 0x30, 0xd1, 0x22, 0xa1,
+	0x2a, 0x07, 0x2f, 0x6a, 0x38, 0xe5, 0x84, 0x40, 0xa0, 0x4a, 0x45, 0x02, 0x7c, 0x40, 0x70, 0xdc,
+	0xb8, 0x23, 0x37, 0x8a, 0xe3, 0x35, 0xb6, 0x6b, 0x29, 0x57, 0x5e, 0x81, 0x03, 0x3c, 0x12, 0x47,
+	0x24, 0x5e, 0x00, 0x05, 0x1e, 0x04, 0xed, 0xae, 0x8d, 0xff, 0x28, 0x41, 0xa8, 0xb9, 0x58, 0xe3,
+	0x9d, 0xcf, 0xf3, 0x9b, 0x6f, 0x76, 0x12, 0x30, 0xb3, 0x09, 0x06, 0xe8, 0xa5, 0x73, 0x11, 0x3a,
+	0x51, 0x2c, 0x52, 0x61, 0x75, 0xcb, 0x93, 0x68, 0x36, 0xe8, 0xf9, 0xc2, 0x17, 0x2a, 0xc1, 0x64,
+	0xa4, 0x35, 0x83, 0x47, 0x98, 0x7a, 0xe7, 0x4c, 0x3e, 0x12, 0x8c, 0x33, 0x8c, 0x2b, 0x61, 0x34,
+	0x63, 0x71, 0xe4, 0xe5, 0xba, 0x23, 0xa5, 0x5b, 0x66, 0x9e, 0xa7, 0x1e, 0xd1, 0x8c, 0x2d, 0xb2,
+	0x3c, 0x35, 0xf4, 0x85, 0xf0, 0x03, 0x64, 0x3c, 0x9a, 0x33, 0x1e, 0x86, 0x22, 0xe5, 0x92, 0x98,
+	0xe8, 0x2c, 0x7d, 0x0b, 0x87, 0xcf, 0xf9, 0x32, 0xe2, 0x73, 0x3f, 0x74, 0xf1, 0xe3, 0x25, 0x26,
+	0xa9, 0x65, 0x41, 0x3b, 0xe4, 0x4b, 0xec, 0x93, 0x11, 0x39, 0xee, 0xba, 0x2a, 0xb6, 0x7a, 0x70,
+	0x3d, 0x40, 0x9e, 0x60, 0xdf, 0x18, 0x91, 0xe3, 0x96, 0xab, 0x5f, 0xe4, 0x69, 0xc6, 0x83, 0x4b,
+	0xec, 0xb7, 0x94, 0x54, 0xbf, 0xd0, 0x15, 0x98, 0x65, 0xc9, 0x24, 0x12, 0x61, 0x82, 0xd6, 0x13,
+	0xe8, 0x5c, 0x20, 0x3f, 0xc7, 0x58, 0x55, 0xbd, 0x75, 0x32, 0x74, 0xaa, 0x46, 0x9c, 0x42, 0x77,
+	0xaa, 0x34, 0x6e, 0xae, 0xb5, 0x18, 0x74, 0x02, 0xfd, 0x95, 0xa1, 0xbe, 0xba, 0xeb, 0x54, 0x47,
+	0xe6, 0xbc, 0x52, 0xb9, 0x33, 0x5c, 0xb9, 0xb9, 0x8c, 0x7e, 0x80, 0x9b, 0x7f, 0x0f, 0x37, 0xfa,
+	0x30, 0xa1, 0xb5, 0xc0, 0x95, 0x2a, 0xd7, 0x75, 0x65, 0x28, 0x4f, 0x62, 0xcc, 0x94, 0x83, 0x96,
+	0x2b, 0xc3, 0xd2, 0x6b, 0xbb, 0xe2, 0x95, 0x3e, 0x84, 0x7d, 0x5d, 0xfa, 0x1f, 0x63, 0xa2, 0x17,
+	0x70, 0x50, 0x88, 0x76, 0x32, 0x3e, 0x02, 0x63, 0x91, 0xe5, 0xa6, 0x4d, 0x47, 0xdf, 0xa8, 0x73,
+	0x86, 0xab, 0x77, 0x72, 0xc0, 0xae, 0xb1, 0xc8, 0xe8, 0x53, 0xd8, 0x77, 0x31, 0xa9, 0xdc, 0x5a,
+	0x39, 0x2b, 0xf2, 0x7f, 0xb3, 0x7a, 0x09, 0x07, 0x45, 0x85, 0x5d, 0x7a, 0xa5, 0xef, 0xe1, 0xf0,
+	0x4d, 0x2c, 0xbc, 0x80, 0xcf, 0x97, 0x57, 0xed, 0xa5, 0x5c, 0x24, 0xa3, 0xba, 0x48, 0xa7, 0x60,
+	0x96, 0x95, 0x77, 0xe9, 0xf1, 0xe4, 0x4b, 0x1b, 0xf6, 0x5e, 0xe4, 0x0d, 0x58, 0x0b, 0xd8, 0x2b,
+	0xf6, 0xd3, 0xba, 0x5f, 0xef, 0xac, 0xf1, 0x53, 0x18, 0xd8, 0xdb, 0xd2, 0x9a, 0x42, 0x47, 0x9f,
+	0x7e, 0xfc, 0xfe, 0x6c, 0x0c, 0xe8, 0x1d, 0x96, 0x4d, 0x58, 0x21, 0x64, 0x5e, 0x2e, 0x9b, 0x92,
+	0xb1, 0x84, 0x15, 0x1e, 0x9a, 0xb0, 0xc6, 0xd4, 0x9a, 0xb0, 0xa6, 0xf5, 0x2d, 0xb0, 0x28, 0x97,
+	0x49, 0x98, 0x07, 0x1d, 0x3d, 0x5b, 0xeb, 0xde, 0xa6, 0x89, 0x17, 0xa0, 0xe1, 0xe6, 0x64, 0x8e,
+	0xb1, 0x15, 0xa6, 0x4f, 0x6f, 0xd7, 0x30, 0xfa, 0xa2, 0x24, 0xc4, 0x87, 0x1b, 0xaf, 0x67, 0x6a,
+	0xe0, 0xbb, 0x50, 0x1e, 0x28, 0xca, 0x11, 0xed, 0xd5, 0x28, 0x42, 0x17, 0x9e, 0x92, 0xf1, 0x63,
+	0x22, 0xdd, 0xe8, 0x05, 0x6d, 0x72, 0x6a, 0x8b, 0xdf, 0xe4, 0xd4, 0x77, 0x7a, 0x8b, 0x9b, 0x58,
+	0x89, 0xa6, 0x64, 0xfc, 0xcc, 0xfc, 0xb6, 0xb6, 0xc9, 0xf7, 0xb5, 0x4d, 0x7e, 0xae, 0x6d, 0xf2,
+	0xf5, 0x97, 0x7d, 0x6d, 0xd6, 0x51, 0x7f, 0x8c, 0x93, 0x3f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x2f,
+	0x1d, 0xfa, 0x11, 0xb1, 0x05, 0x00, 0x00,
 }

+ 1 - 1
etcdserver/api/v3election/v3electionpb/v3election.proto

@@ -3,7 +3,7 @@ package v3electionpb;
 
 import "gogoproto/gogo.proto";
 import "etcd/etcdserver/etcdserverpb/rpc.proto";
-import "etcd/internal/mvcc/mvccpb/kv.proto";
+import "etcd/mvcc/mvccpb/kv.proto";
 
 // for grpc-gateway
 import "google/api/annotations.proto";

+ 1 - 1
etcdserver/api/v3rpc/lease.go

@@ -21,7 +21,7 @@ import (
 	"github.com/coreos/etcd/etcdserver"
 	"github.com/coreos/etcd/etcdserver/api/v3rpc/rpctypes"
 	pb "github.com/coreos/etcd/etcdserver/etcdserverpb"
-	"github.com/coreos/etcd/internal/lease"
+	"github.com/coreos/etcd/lease"
 )
 
 type LeaseServer struct {

+ 4 - 4
etcdserver/api/v3rpc/maintenance.go

@@ -19,15 +19,15 @@ import (
 	"crypto/sha256"
 	"io"
 
+	"github.com/coreos/etcd/auth"
 	"github.com/coreos/etcd/etcdserver"
 	"github.com/coreos/etcd/etcdserver/api/v3rpc/rpctypes"
 	pb "github.com/coreos/etcd/etcdserver/etcdserverpb"
-	"github.com/coreos/etcd/internal/auth"
-	"github.com/coreos/etcd/internal/mvcc"
-	"github.com/coreos/etcd/internal/mvcc/backend"
-	"github.com/coreos/etcd/internal/version"
+	"github.com/coreos/etcd/mvcc"
+	"github.com/coreos/etcd/mvcc/backend"
 	"github.com/coreos/etcd/pkg/types"
 	"github.com/coreos/etcd/raft"
+	"github.com/coreos/etcd/version"
 )
 
 type KVGetter interface {

+ 3 - 3
etcdserver/api/v3rpc/util.go

@@ -18,12 +18,12 @@ import (
 	"context"
 	"strings"
 
+	"github.com/coreos/etcd/auth"
 	"github.com/coreos/etcd/etcdserver"
 	"github.com/coreos/etcd/etcdserver/api/v3rpc/rpctypes"
 	"github.com/coreos/etcd/etcdserver/membership"
-	"github.com/coreos/etcd/internal/auth"
-	"github.com/coreos/etcd/internal/lease"
-	"github.com/coreos/etcd/internal/mvcc"
+	"github.com/coreos/etcd/lease"
+	"github.com/coreos/etcd/mvcc"
 
 	"google.golang.org/grpc/codes"
 	"google.golang.org/grpc/status"

+ 1 - 1
etcdserver/api/v3rpc/util_test.go

@@ -20,7 +20,7 @@ import (
 	"testing"
 
 	"github.com/coreos/etcd/etcdserver/api/v3rpc/rpctypes"
-	"github.com/coreos/etcd/internal/mvcc"
+	"github.com/coreos/etcd/mvcc"
 
 	"google.golang.org/grpc/codes"
 	"google.golang.org/grpc/status"

+ 3 - 3
etcdserver/api/v3rpc/watch.go

@@ -21,12 +21,12 @@ import (
 	"sync"
 	"time"
 
+	"github.com/coreos/etcd/auth"
 	"github.com/coreos/etcd/etcdserver"
 	"github.com/coreos/etcd/etcdserver/api/v3rpc/rpctypes"
 	pb "github.com/coreos/etcd/etcdserver/etcdserverpb"
-	"github.com/coreos/etcd/internal/auth"
-	"github.com/coreos/etcd/internal/mvcc"
-	"github.com/coreos/etcd/internal/mvcc/mvccpb"
+	"github.com/coreos/etcd/mvcc"
+	"github.com/coreos/etcd/mvcc/mvccpb"
 )
 
 type watchServer struct {

+ 4 - 4
etcdserver/apply.go

@@ -20,11 +20,11 @@ import (
 	"sort"
 	"time"
 
+	"github.com/coreos/etcd/auth"
 	pb "github.com/coreos/etcd/etcdserver/etcdserverpb"
-	"github.com/coreos/etcd/internal/auth"
-	"github.com/coreos/etcd/internal/lease"
-	"github.com/coreos/etcd/internal/mvcc"
-	"github.com/coreos/etcd/internal/mvcc/mvccpb"
+	"github.com/coreos/etcd/lease"
+	"github.com/coreos/etcd/mvcc"
+	"github.com/coreos/etcd/mvcc/mvccpb"
 	"github.com/coreos/etcd/pkg/types"
 
 	"github.com/gogo/protobuf/proto"

+ 3 - 3
etcdserver/apply_auth.go

@@ -17,10 +17,10 @@ package etcdserver
 import (
 	"sync"
 
+	"github.com/coreos/etcd/auth"
 	pb "github.com/coreos/etcd/etcdserver/etcdserverpb"
-	"github.com/coreos/etcd/internal/auth"
-	"github.com/coreos/etcd/internal/lease"
-	"github.com/coreos/etcd/internal/mvcc"
+	"github.com/coreos/etcd/lease"
+	"github.com/coreos/etcd/mvcc"
 )
 
 type authApplierV3 struct {

+ 9 - 8
etcdserver/apply_v2.go

@@ -21,8 +21,9 @@ import (
 
 	"github.com/coreos/etcd/etcdserver/api"
 	"github.com/coreos/etcd/etcdserver/membership"
-	"github.com/coreos/etcd/internal/store"
+	"github.com/coreos/etcd/etcdserver/v2store"
 	"github.com/coreos/etcd/pkg/pbutil"
+
 	"github.com/coreos/go-semver/semver"
 )
 
@@ -35,12 +36,12 @@ type ApplierV2 interface {
 	Sync(r *RequestV2) Response
 }
 
-func NewApplierV2(s store.Store, c *membership.RaftCluster) ApplierV2 {
+func NewApplierV2(s v2store.Store, c *membership.RaftCluster) ApplierV2 {
 	return &applierV2store{store: s, cluster: c}
 }
 
 type applierV2store struct {
-	store   store.Store
+	store   v2store.Store
 	cluster *membership.RaftCluster
 }
 
@@ -104,8 +105,8 @@ func (a *applierV2store) Sync(r *RequestV2) Response {
 	return Response{}
 }
 
-// applyV2Request interprets r as a call to store.X and returns a Response interpreted
-// from store.Event
+// applyV2Request interprets r as a call to v2store.X
+// and returns a Response interpreted from v2store.Event
 func (s *EtcdServer) applyV2Request(r *RequestV2) Response {
 	defer warnOfExpensiveRequest(time.Now(), r)
 
@@ -126,15 +127,15 @@ func (s *EtcdServer) applyV2Request(r *RequestV2) Response {
 	}
 }
 
-func (r *RequestV2) TTLOptions() store.TTLOptionSet {
+func (r *RequestV2) TTLOptions() v2store.TTLOptionSet {
 	refresh, _ := pbutil.GetBool(r.Refresh)
-	ttlOptions := store.TTLOptionSet{Refresh: refresh}
+	ttlOptions := v2store.TTLOptionSet{Refresh: refresh}
 	if r.Expiration != 0 {
 		ttlOptions.ExpireTime = time.Unix(0, r.Expiration)
 	}
 	return ttlOptions
 }
 
-func toResponse(ev *store.Event, err error) Response {
+func toResponse(ev *v2store.Event, err error) Response {
 	return Response{Event: ev, Err: err}
 }

+ 4 - 4
etcdserver/backend.go

@@ -19,11 +19,11 @@ import (
 	"os"
 	"time"
 
-	"github.com/coreos/etcd/internal/lease"
-	"github.com/coreos/etcd/internal/mvcc"
-	"github.com/coreos/etcd/internal/mvcc/backend"
-	"github.com/coreos/etcd/internal/raftsnap"
+	"github.com/coreos/etcd/lease"
+	"github.com/coreos/etcd/mvcc"
+	"github.com/coreos/etcd/mvcc/backend"
 	"github.com/coreos/etcd/raft/raftpb"
+	"github.com/coreos/etcd/raftsnap"
 )
 
 func newBackend(cfg ServerConfig) backend.Backend {

+ 1 - 1
etcdserver/cluster_util.go

@@ -23,8 +23,8 @@ import (
 	"time"
 
 	"github.com/coreos/etcd/etcdserver/membership"
-	"github.com/coreos/etcd/internal/version"
 	"github.com/coreos/etcd/pkg/types"
+	"github.com/coreos/etcd/version"
 
 	"github.com/coreos/go-semver/semver"
 )

+ 1 - 1
etcdserver/cluster_util_test.go

@@ -18,8 +18,8 @@ import (
 	"reflect"
 	"testing"
 
-	"github.com/coreos/etcd/internal/version"
 	"github.com/coreos/etcd/pkg/types"
+	"github.com/coreos/etcd/version"
 
 	"github.com/coreos/go-semver/semver"
 )

+ 1 - 1
etcdserver/corrupt.go

@@ -22,7 +22,7 @@ import (
 	"github.com/coreos/etcd/clientv3"
 	"github.com/coreos/etcd/etcdserver/api/v3rpc/rpctypes"
 	pb "github.com/coreos/etcd/etcdserver/etcdserverpb"
-	"github.com/coreos/etcd/internal/mvcc"
+	"github.com/coreos/etcd/mvcc"
 	"github.com/coreos/etcd/pkg/types"
 )
 

+ 226 - 226
etcdserver/etcdserverpb/rpc.pb.go

@@ -12,9 +12,9 @@ import (
 
 	_ "github.com/gogo/protobuf/gogoproto"
 
-	mvccpb "github.com/coreos/etcd/internal/mvcc/mvccpb"
+	mvccpb "github.com/coreos/etcd/mvcc/mvccpb"
 
-	authpb "github.com/coreos/etcd/internal/auth/authpb"
+	authpb "github.com/coreos/etcd/auth/authpb"
 
 	context "golang.org/x/net/context"
 
@@ -18602,7 +18602,7 @@ var (
 func init() { proto.RegisterFile("rpc.proto", fileDescriptorRpc) }
 
 var fileDescriptorRpc = []byte{
-	// 3712 bytes of a gzipped FileDescriptorProto
+	// 3705 bytes of a gzipped FileDescriptorProto
 	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x5b, 0xdd, 0x6f, 0x1b, 0xc7,
 	0x76, 0xd7, 0x92, 0xe2, 0xd7, 0xe1, 0x87, 0xa8, 0x91, 0x64, 0xd3, 0xb4, 0x2d, 0xcb, 0x63, 0x3b,
 	0x56, 0xec, 0x44, 0xbc, 0x57, 0xf7, 0xb6, 0x0f, 0x6e, 0x71, 0x71, 0x65, 0x89, 0xd7, 0xd2, 0x95,
@@ -18612,227 +18612,227 @@ var fileDescriptorRpc = []byte{
 	0x2f, 0x2e, 0xe6, 0x6b, 0x77, 0xf6, 0x4b, 0x72, 0xc2, 0x24, 0x2f, 0xf2, 0xce, 0x99, 0x33, 0xe7,
 	0x77, 0xe6, 0xcc, 0xcc, 0x39, 0x67, 0xce, 0xd0, 0x50, 0x72, 0x86, 0xdd, 0x95, 0xa1, 0x63, 0x7b,
 	0x36, 0xaa, 0x10, 0xaf, 0xdb, 0x73, 0x89, 0x33, 0x26, 0xce, 0xf0, 0xb8, 0x39, 0x7f, 0x6a, 0x9f,
-	0xda, 0xac, 0xa3, 0x45, 0xbf, 0x38, 0x4f, 0x13, 0x53, 0x9e, 0x96, 0x69, 0x79, 0xc4, 0xb1, 0x8c,
-	0x7e, 0x6b, 0x30, 0xee, 0x76, 0xd9, 0x9f, 0xe1, 0x71, 0xeb, 0x7c, 0x2c, 0x78, 0x1e, 0x86, 0x79,
-	0x8c, 0x91, 0x77, 0xc6, 0xfe, 0x0c, 0x8f, 0xd9, 0x3f, 0x82, 0xeb, 0xce, 0xa9, 0x6d, 0x9f, 0xf6,
-	0x49, 0xcb, 0x18, 0x9a, 0x2d, 0xc3, 0xb2, 0x6c, 0xcf, 0xf0, 0x4c, 0xdb, 0x72, 0x79, 0x2f, 0xfe,
-	0x5b, 0x0d, 0x6a, 0x3a, 0x71, 0x87, 0xb6, 0xe5, 0x92, 0x4d, 0x62, 0xf4, 0x88, 0x83, 0xee, 0x02,
-	0x74, 0xfb, 0x23, 0xd7, 0x23, 0xce, 0x91, 0xd9, 0x6b, 0x68, 0x4b, 0xda, 0xf2, 0xb4, 0x5e, 0x12,
-	0x94, 0xad, 0x1e, 0xba, 0x0d, 0xa5, 0x01, 0x19, 0x1c, 0xf3, 0xde, 0x0c, 0xeb, 0x2d, 0x72, 0xc2,
-	0x56, 0x0f, 0x35, 0xa1, 0xe8, 0x90, 0xb1, 0xe9, 0x9a, 0xb6, 0xd5, 0xc8, 0x2e, 0x69, 0xcb, 0x59,
-	0xdd, 0x6f, 0xd3, 0x81, 0x8e, 0x71, 0xe2, 0x1d, 0x79, 0xc4, 0x19, 0x34, 0xa6, 0xf9, 0x40, 0x4a,
-	0xe8, 0x10, 0x67, 0x80, 0xbf, 0xcc, 0x41, 0x45, 0x37, 0xac, 0x53, 0xa2, 0x93, 0x4f, 0x47, 0xc4,
-	0xf5, 0x50, 0x1d, 0xb2, 0xe7, 0xe4, 0x92, 0xc1, 0x57, 0x74, 0xfa, 0xc9, 0xc7, 0x5b, 0xa7, 0xe4,
-	0x88, 0x58, 0x1c, 0xb8, 0x42, 0xc7, 0x5b, 0xa7, 0xa4, 0x6d, 0xf5, 0xd0, 0x3c, 0xe4, 0xfa, 0xe6,
-	0xc0, 0xf4, 0x04, 0x2a, 0x6f, 0x84, 0xd4, 0x99, 0x8e, 0xa8, 0xb3, 0x0e, 0xe0, 0xda, 0x8e, 0x77,
-	0x64, 0x3b, 0x3d, 0xe2, 0x34, 0x72, 0x4b, 0xda, 0x72, 0x6d, 0xf5, 0xe1, 0x8a, 0xba, 0x34, 0x2b,
-	0xaa, 0x42, 0x2b, 0x07, 0xb6, 0xe3, 0xed, 0x51, 0x5e, 0xbd, 0xe4, 0xca, 0x4f, 0xf4, 0x3b, 0x28,
-	0x33, 0x21, 0x9e, 0xe1, 0x9c, 0x12, 0xaf, 0x91, 0x67, 0x52, 0x1e, 0x5d, 0x23, 0xa5, 0xc3, 0x98,
-	0x75, 0x06, 0xcf, 0xbf, 0x11, 0x86, 0x8a, 0x4b, 0x1c, 0xd3, 0xe8, 0x9b, 0x9f, 0x19, 0xc7, 0x7d,
-	0xd2, 0x28, 0x2c, 0x69, 0xcb, 0x45, 0x3d, 0x44, 0xa3, 0xf3, 0x3f, 0x27, 0x97, 0xee, 0x91, 0x6d,
-	0xf5, 0x2f, 0x1b, 0x45, 0xc6, 0x50, 0xa4, 0x84, 0x3d, 0xab, 0x7f, 0xc9, 0x16, 0xcd, 0x1e, 0x59,
-	0x1e, 0xef, 0x2d, 0xb1, 0xde, 0x12, 0xa3, 0xb0, 0xee, 0x65, 0xa8, 0x0f, 0x4c, 0xeb, 0x68, 0x60,
-	0xf7, 0x8e, 0x7c, 0x83, 0x00, 0x33, 0x48, 0x6d, 0x60, 0x5a, 0x2f, 0xed, 0x9e, 0x2e, 0xcd, 0x42,
-	0x39, 0x8d, 0x8b, 0x30, 0x67, 0x59, 0x70, 0x1a, 0x17, 0x2a, 0xe7, 0x0a, 0xcc, 0x51, 0x99, 0x5d,
-	0x87, 0x18, 0x1e, 0x09, 0x98, 0x2b, 0x8c, 0x79, 0x76, 0x60, 0x5a, 0xeb, 0xac, 0x27, 0xc4, 0x6f,
-	0x5c, 0xc4, 0xf8, 0xab, 0x82, 0xdf, 0xb8, 0x08, 0xf3, 0xe3, 0x15, 0x28, 0xf9, 0x36, 0x47, 0x45,
-	0x98, 0xde, 0xdd, 0xdb, 0x6d, 0xd7, 0xa7, 0x10, 0x40, 0x7e, 0xed, 0x60, 0xbd, 0xbd, 0xbb, 0x51,
-	0xd7, 0x50, 0x19, 0x0a, 0x1b, 0x6d, 0xde, 0xc8, 0xe0, 0xe7, 0x00, 0x81, 0x75, 0x51, 0x01, 0xb2,
-	0xdb, 0xed, 0x8f, 0xeb, 0x53, 0x94, 0xe7, 0x55, 0x5b, 0x3f, 0xd8, 0xda, 0xdb, 0xad, 0x6b, 0x74,
-	0xf0, 0xba, 0xde, 0x5e, 0xeb, 0xb4, 0xeb, 0x19, 0xca, 0xf1, 0x72, 0x6f, 0xa3, 0x9e, 0x45, 0x25,
-	0xc8, 0xbd, 0x5a, 0xdb, 0x39, 0x6c, 0xd7, 0xa7, 0xf1, 0xd7, 0x1a, 0x54, 0xc5, 0x7a, 0xf1, 0x33,
-	0x81, 0x7e, 0x0d, 0xf9, 0x33, 0x76, 0x2e, 0xd8, 0x56, 0x2c, 0xaf, 0xde, 0x89, 0x2c, 0x6e, 0xe8,
-	0xec, 0xe8, 0x82, 0x17, 0x61, 0xc8, 0x9e, 0x8f, 0xdd, 0x46, 0x66, 0x29, 0xbb, 0x5c, 0x5e, 0xad,
-	0xaf, 0xf0, 0x93, 0xbb, 0xb2, 0x4d, 0x2e, 0x5f, 0x19, 0xfd, 0x11, 0xd1, 0x69, 0x27, 0x42, 0x30,
-	0x3d, 0xb0, 0x1d, 0xc2, 0x76, 0x6c, 0x51, 0x67, 0xdf, 0x74, 0x1b, 0xb3, 0x45, 0x13, 0xbb, 0x95,
-	0x37, 0xf0, 0x37, 0x1a, 0xc0, 0xfe, 0xc8, 0x4b, 0x3f, 0x1a, 0xf3, 0x90, 0x1b, 0x53, 0xc1, 0xe2,
-	0x58, 0xf0, 0x06, 0x3b, 0x13, 0xc4, 0x70, 0x89, 0x7f, 0x26, 0x68, 0x03, 0xdd, 0x84, 0xc2, 0xd0,
-	0x21, 0xe3, 0xa3, 0xf3, 0x31, 0x03, 0x29, 0xea, 0x79, 0xda, 0xdc, 0x1e, 0xa3, 0xfb, 0x50, 0x31,
-	0x4f, 0x2d, 0xdb, 0x21, 0x47, 0x5c, 0x56, 0x8e, 0xf5, 0x96, 0x39, 0x8d, 0xe9, 0xad, 0xb0, 0x70,
-	0xc1, 0x79, 0x95, 0x65, 0x87, 0x92, 0xb0, 0x05, 0x65, 0xa6, 0xea, 0x44, 0xe6, 0x7b, 0x37, 0xd0,
-	0x31, 0xc3, 0x86, 0xc5, 0x4d, 0x28, 0xb4, 0xc6, 0x9f, 0x00, 0xda, 0x20, 0x7d, 0xe2, 0x91, 0x49,
-	0xbc, 0x87, 0x62, 0x93, 0xac, 0x6a, 0x13, 0xfc, 0x95, 0x06, 0x73, 0x21, 0xf1, 0x13, 0x4d, 0xab,
-	0x01, 0x85, 0x1e, 0x13, 0xc6, 0x35, 0xc8, 0xea, 0xb2, 0x89, 0x9e, 0x42, 0x51, 0x28, 0xe0, 0x36,
-	0xb2, 0x29, 0x9b, 0xa6, 0xc0, 0x75, 0x72, 0xf1, 0x37, 0x19, 0x28, 0x89, 0x89, 0xee, 0x0d, 0xd1,
-	0x1a, 0x54, 0x1d, 0xde, 0x38, 0x62, 0xf3, 0x11, 0x1a, 0x35, 0xd3, 0x9d, 0xd0, 0xe6, 0x94, 0x5e,
-	0x11, 0x43, 0x18, 0x19, 0xfd, 0x09, 0x94, 0xa5, 0x88, 0xe1, 0xc8, 0x13, 0x26, 0x6f, 0x84, 0x05,
-	0x04, 0xfb, 0x6f, 0x73, 0x4a, 0x07, 0xc1, 0xbe, 0x3f, 0xf2, 0x50, 0x07, 0xe6, 0xe5, 0x60, 0x3e,
-	0x1b, 0xa1, 0x46, 0x96, 0x49, 0x59, 0x0a, 0x4b, 0x89, 0x2f, 0xd5, 0xe6, 0x94, 0x8e, 0xc4, 0x78,
-	0xa5, 0x53, 0x55, 0xc9, 0xbb, 0xe0, 0xce, 0x3b, 0xa6, 0x52, 0xe7, 0xc2, 0x8a, 0xab, 0xd4, 0xb9,
-	0xb0, 0x9e, 0x97, 0xa0, 0x20, 0x5a, 0xf8, 0xdf, 0x33, 0x00, 0x72, 0x35, 0xf6, 0x86, 0x68, 0x03,
-	0x6a, 0x8e, 0x68, 0x85, 0xac, 0x75, 0x3b, 0xd1, 0x5a, 0x62, 0x11, 0xa7, 0xf4, 0xaa, 0x1c, 0xc4,
-	0x95, 0xfb, 0x0d, 0x54, 0x7c, 0x29, 0x81, 0xc1, 0x6e, 0x25, 0x18, 0xcc, 0x97, 0x50, 0x96, 0x03,
-	0xa8, 0xc9, 0x3e, 0x84, 0x05, 0x7f, 0x7c, 0x82, 0xcd, 0xee, 0x5f, 0x61, 0x33, 0x5f, 0xe0, 0x9c,
-	0x94, 0xa0, 0x5a, 0x4d, 0x55, 0x2c, 0x30, 0xdb, 0xad, 0x04, 0xb3, 0xc5, 0x15, 0xa3, 0x86, 0x03,
-	0x1a, 0x2f, 0x79, 0x13, 0xff, 0x7f, 0x16, 0x0a, 0xeb, 0xf6, 0x60, 0x68, 0x38, 0x74, 0x35, 0xf2,
-	0x0e, 0x71, 0x47, 0x7d, 0x8f, 0x99, 0xab, 0xb6, 0xfa, 0x20, 0x2c, 0x51, 0xb0, 0xc9, 0x7f, 0x75,
-	0xc6, 0xaa, 0x8b, 0x21, 0x74, 0xb0, 0x08, 0x8f, 0x99, 0xb7, 0x18, 0x2c, 0x82, 0xa3, 0x18, 0x22,
-	0x0f, 0x72, 0x36, 0x38, 0xc8, 0x4d, 0x28, 0x8c, 0x89, 0x13, 0x84, 0xf4, 0xcd, 0x29, 0x5d, 0x12,
-	0xd0, 0xbb, 0x30, 0x13, 0x0d, 0x2f, 0x39, 0xc1, 0x53, 0xeb, 0x86, 0xa3, 0xd1, 0x03, 0xa8, 0x84,
-	0x62, 0x5c, 0x5e, 0xf0, 0x95, 0x07, 0x4a, 0x88, 0xbb, 0x21, 0xfd, 0x2a, 0x8d, 0xc7, 0x95, 0xcd,
-	0x29, 0xe9, 0x59, 0x6f, 0x48, 0xcf, 0x5a, 0x14, 0xa3, 0x84, 0x6f, 0x0d, 0x39, 0x99, 0xdf, 0x86,
-	0x9d, 0x0c, 0xfe, 0x2d, 0x54, 0x43, 0x06, 0xa2, 0x71, 0xa7, 0xfd, 0xc1, 0xe1, 0xda, 0x0e, 0x0f,
-	0x52, 0x2f, 0x58, 0x5c, 0xd2, 0xeb, 0x1a, 0x8d, 0x75, 0x3b, 0xed, 0x83, 0x83, 0x7a, 0x06, 0x55,
-	0xa1, 0xb4, 0xbb, 0xd7, 0x39, 0xe2, 0x5c, 0x59, 0xfc, 0xc2, 0x97, 0x20, 0x82, 0x9c, 0x12, 0xdb,
-	0xa6, 0x94, 0xd8, 0xa6, 0xc9, 0xd8, 0x96, 0x09, 0x62, 0x1b, 0x0b, 0x73, 0x3b, 0xed, 0xb5, 0x83,
-	0x76, 0x7d, 0xfa, 0x79, 0x0d, 0x2a, 0xdc, 0xbe, 0x47, 0x23, 0x8b, 0x86, 0xda, 0x7f, 0xd6, 0x00,
-	0x82, 0xd3, 0x84, 0x5a, 0x50, 0xe8, 0x72, 0x9c, 0x86, 0xc6, 0x9c, 0xd1, 0x42, 0xe2, 0x92, 0xe9,
-	0x92, 0x0b, 0xfd, 0x12, 0x0a, 0xee, 0xa8, 0xdb, 0x25, 0xae, 0x0c, 0x79, 0x37, 0xa3, 0xfe, 0x50,
-	0x78, 0x2b, 0x5d, 0xf2, 0xd1, 0x21, 0x27, 0x86, 0xd9, 0x1f, 0xb1, 0x00, 0x78, 0xf5, 0x10, 0xc1,
-	0x87, 0xff, 0x49, 0x83, 0xb2, 0xb2, 0x79, 0x7f, 0xa0, 0x13, 0xbe, 0x03, 0x25, 0xa6, 0x03, 0xe9,
-	0x09, 0x37, 0x5c, 0xd4, 0x03, 0x02, 0xfa, 0x63, 0x28, 0xc9, 0x13, 0x20, 0x3d, 0x71, 0x23, 0x59,
-	0xec, 0xde, 0x50, 0x0f, 0x58, 0xf1, 0x36, 0xcc, 0x32, 0xab, 0x74, 0x69, 0x72, 0x2d, 0xed, 0xa8,
-	0xa6, 0x9f, 0x5a, 0x24, 0xfd, 0x6c, 0x42, 0x71, 0x78, 0x76, 0xe9, 0x9a, 0x5d, 0xa3, 0x2f, 0xb4,
-	0xf0, 0xdb, 0xf8, 0xf7, 0x80, 0x54, 0x61, 0x93, 0x4c, 0x17, 0x57, 0xa1, 0xbc, 0x69, 0xb8, 0x67,
-	0x42, 0x25, 0xfc, 0x14, 0xaa, 0xb4, 0xb9, 0xfd, 0xea, 0x2d, 0x74, 0x64, 0x97, 0x03, 0xc9, 0x3d,
-	0x91, 0xcd, 0x11, 0x4c, 0x9f, 0x19, 0xee, 0x19, 0x9b, 0x68, 0x55, 0x67, 0xdf, 0xe8, 0x5d, 0xa8,
-	0x77, 0xf9, 0x24, 0x8f, 0x22, 0x57, 0x86, 0x19, 0x41, 0xf7, 0x33, 0xc1, 0x8f, 0xa0, 0xc2, 0xe7,
-	0xf0, 0x63, 0x2b, 0x81, 0x67, 0x61, 0xe6, 0xc0, 0x32, 0x86, 0xee, 0x99, 0x2d, 0xa3, 0x1b, 0x9d,
-	0x74, 0x3d, 0xa0, 0x4d, 0x84, 0xf8, 0x18, 0x66, 0x1c, 0x32, 0x30, 0x4c, 0xcb, 0xb4, 0x4e, 0x8f,
-	0x8e, 0x2f, 0x3d, 0xe2, 0x8a, 0x0b, 0x53, 0xcd, 0x27, 0x3f, 0xa7, 0x54, 0xaa, 0xda, 0x71, 0xdf,
-	0x3e, 0x16, 0x6e, 0x8e, 0x7d, 0xe3, 0x6f, 0x35, 0xa8, 0x7c, 0x68, 0x78, 0x5d, 0xb9, 0x74, 0x68,
-	0x0b, 0x6a, 0xbe, 0x73, 0x63, 0x14, 0xa1, 0x4b, 0x24, 0xc4, 0xb2, 0x31, 0x32, 0x95, 0x96, 0xd1,
-	0xb1, 0xda, 0x55, 0x09, 0x4c, 0x94, 0x61, 0x75, 0x49, 0xdf, 0x17, 0x95, 0x49, 0x17, 0xc5, 0x18,
-	0x55, 0x51, 0x2a, 0xe1, 0xf9, 0x4c, 0x90, 0x7e, 0x70, 0x5f, 0xf2, 0x6d, 0x06, 0x50, 0x5c, 0x87,
-	0xef, 0x9b, 0x91, 0x3d, 0x82, 0x9a, 0xeb, 0x19, 0x4e, 0x6c, 0x6f, 0x54, 0x19, 0xd5, 0x77, 0xd0,
-	0x8f, 0x61, 0x66, 0xe8, 0xd8, 0xa7, 0x0e, 0x71, 0xdd, 0x23, 0xcb, 0xf6, 0xcc, 0x93, 0x4b, 0x91,
-	0xd4, 0xd6, 0x24, 0x79, 0x97, 0x51, 0x51, 0x1b, 0x0a, 0x27, 0x66, 0xdf, 0x23, 0x8e, 0xdb, 0xc8,
-	0x2d, 0x65, 0x97, 0x6b, 0xab, 0x4f, 0xaf, 0xb3, 0xda, 0xca, 0xef, 0x18, 0x7f, 0xe7, 0x72, 0x48,
-	0x74, 0x39, 0x56, 0x4d, 0x14, 0xf3, 0xa1, 0xe4, 0xf9, 0x16, 0x14, 0x5f, 0x53, 0x11, 0xf4, 0x52,
-	0x5c, 0xe0, 0xb9, 0x1d, 0x6b, 0x6f, 0xf5, 0xf0, 0x23, 0x80, 0x40, 0x14, 0xf5, 0xc2, 0xbb, 0x7b,
-	0xfb, 0x87, 0x9d, 0xfa, 0x14, 0xaa, 0x40, 0x71, 0x77, 0x6f, 0xa3, 0xbd, 0xd3, 0xa6, 0x2e, 0x1b,
-	0xb7, 0xa4, 0xd9, 0x54, 0xf3, 0x86, 0xe4, 0x6a, 0x61, 0xb9, 0x7f, 0x9f, 0x81, 0xaa, 0xd8, 0x20,
-	0x13, 0xed, 0x52, 0x15, 0x22, 0x13, 0x82, 0xa0, 0x09, 0x2b, 0xdf, 0x38, 0x3d, 0x91, 0x17, 0xcb,
-	0x26, 0x75, 0x1b, 0x7c, 0x1f, 0x90, 0x9e, 0xb0, 0xb8, 0xdf, 0x4e, 0x3c, 0xd9, 0xb9, 0xc4, 0x93,
-	0x8d, 0x1e, 0x40, 0xd5, 0xdf, 0x88, 0x86, 0x2b, 0xc2, 0x70, 0x49, 0xaf, 0xc8, 0x3d, 0x46, 0x69,
-	0xe8, 0x11, 0xe4, 0xc9, 0x98, 0x58, 0x9e, 0xdb, 0x28, 0x33, 0x87, 0x5c, 0x95, 0xa9, 0x71, 0x9b,
-	0x52, 0x75, 0xd1, 0x89, 0xff, 0x08, 0x66, 0xd9, 0x15, 0xe4, 0x85, 0x63, 0x58, 0xea, 0x5d, 0xa9,
-	0xd3, 0xd9, 0x11, 0xa6, 0xa3, 0x9f, 0xa8, 0x06, 0x99, 0xad, 0x0d, 0x31, 0xd1, 0xcc, 0xd6, 0x06,
-	0xfe, 0x42, 0x03, 0xa4, 0x8e, 0x9b, 0xc8, 0x96, 0x11, 0xe1, 0x12, 0x3e, 0x1b, 0xc0, 0xcf, 0x43,
-	0x8e, 0x38, 0x8e, 0xed, 0x30, 0xab, 0x95, 0x74, 0xde, 0xc0, 0x0f, 0x85, 0x0e, 0x3a, 0x19, 0xdb,
-	0xe7, 0xfe, 0x99, 0xe1, 0xd2, 0x34, 0x5f, 0xd5, 0x6d, 0x98, 0x0b, 0x71, 0x4d, 0x14, 0x18, 0x1e,
-	0xc3, 0x02, 0x13, 0xb6, 0x4d, 0xc8, 0x70, 0xad, 0x6f, 0x8e, 0x53, 0x51, 0x87, 0x70, 0x23, 0xca,
-	0xf8, 0xd3, 0xda, 0x08, 0xff, 0xa9, 0x40, 0xec, 0x98, 0x03, 0xd2, 0xb1, 0x77, 0xd2, 0x75, 0xa3,
-	0x8e, 0xf3, 0x9c, 0x5c, 0xba, 0x22, 0x82, 0xb2, 0x6f, 0xfc, 0x2f, 0x1a, 0xdc, 0x8c, 0x0d, 0xff,
-	0x89, 0x57, 0x75, 0x11, 0xe0, 0x94, 0x6e, 0x1f, 0xd2, 0xa3, 0x1d, 0xfc, 0xf2, 0xae, 0x50, 0x7c,
-	0x3d, 0xa9, 0xef, 0xa9, 0x08, 0x3d, 0xe7, 0xc5, 0x9a, 0xb3, 0x3f, 0xae, 0x0c, 0x3f, 0x77, 0xa1,
-	0xcc, 0x08, 0x07, 0x9e, 0xe1, 0x8d, 0xdc, 0xd8, 0x62, 0xfc, 0xb5, 0xd8, 0x02, 0x72, 0xd0, 0x44,
-	0xf3, 0xfa, 0x25, 0xe4, 0x59, 0xde, 0x2a, 0xb3, 0xb6, 0xc8, 0x45, 0x41, 0xd1, 0x43, 0x17, 0x8c,
-	0xf8, 0x0c, 0xf2, 0x2f, 0x59, 0xb1, 0x4f, 0xd1, 0x6c, 0x5a, 0x2e, 0x85, 0x65, 0x0c, 0x78, 0x09,
-	0xa2, 0xa4, 0xb3, 0x6f, 0x96, 0xe4, 0x10, 0xe2, 0x1c, 0xea, 0x3b, 0x3c, 0x99, 0x2a, 0xe9, 0x7e,
-	0x9b, 0x9a, 0xac, 0xdb, 0x37, 0x89, 0xe5, 0xb1, 0xde, 0x69, 0xd6, 0xab, 0x50, 0xf0, 0x0a, 0xd4,
-	0x39, 0xd2, 0x5a, 0xaf, 0xa7, 0x24, 0x2b, 0xbe, 0x3c, 0x2d, 0x2c, 0x0f, 0xff, 0xab, 0x06, 0xb3,
-	0xca, 0x80, 0x89, 0x0c, 0xf3, 0x1e, 0xe4, 0x79, 0x49, 0x53, 0xc4, 0xc5, 0xf9, 0xf0, 0x28, 0x0e,
-	0xa3, 0x0b, 0x1e, 0xb4, 0x02, 0x05, 0xfe, 0x25, 0x33, 0xc6, 0x64, 0x76, 0xc9, 0x84, 0x1f, 0xc1,
-	0x9c, 0x20, 0x91, 0x81, 0x9d, 0xb4, 0xb7, 0x99, 0x41, 0xf1, 0x5f, 0xc1, 0x7c, 0x98, 0x6d, 0xa2,
-	0x29, 0x29, 0x4a, 0x66, 0xde, 0x46, 0xc9, 0x35, 0xa9, 0xe4, 0xe1, 0xb0, 0xa7, 0x84, 0xf1, 0xe8,
-	0xaa, 0xab, 0x2b, 0x92, 0x89, 0xac, 0x88, 0x3f, 0x01, 0x29, 0xe2, 0x67, 0x9d, 0xc0, 0x9c, 0xdc,
-	0x0e, 0x3b, 0xa6, 0xeb, 0x27, 0x77, 0x9f, 0x01, 0x52, 0x89, 0x3f, 0xb7, 0x42, 0x1b, 0xe4, 0xc4,
-	0x31, 0x4e, 0x07, 0xc4, 0x8f, 0x4f, 0x34, 0xd5, 0x57, 0x89, 0x13, 0x79, 0xf4, 0x16, 0xcc, 0xbe,
-	0xb4, 0xc7, 0xd4, 0x35, 0x50, 0x6a, 0x70, 0x64, 0xf8, 0x55, 0xcf, 0x5f, 0x36, 0xbf, 0x4d, 0xc1,
-	0xd5, 0x01, 0x13, 0x81, 0xff, 0x97, 0x06, 0x95, 0xb5, 0xbe, 0xe1, 0x0c, 0x24, 0xf0, 0x6f, 0x20,
-	0xcf, 0x2f, 0x30, 0xa2, 0x66, 0xf0, 0x4e, 0x58, 0x8c, 0xca, 0xcb, 0x1b, 0x6b, 0xfc, 0xba, 0x23,
-	0x46, 0x51, 0xc5, 0xc5, 0xb3, 0xc2, 0x46, 0xe4, 0x99, 0x61, 0x03, 0xbd, 0x0f, 0x39, 0x83, 0x0e,
-	0x61, 0x2e, 0xb8, 0x16, 0xbd, 0x3a, 0x32, 0x69, 0x2c, 0x6f, 0xe3, 0x5c, 0xf8, 0xd7, 0x50, 0x56,
-	0x10, 0xe8, 0xe5, 0xf8, 0x45, 0x5b, 0x24, 0x60, 0x6b, 0xeb, 0x9d, 0xad, 0x57, 0xfc, 0xce, 0x5c,
-	0x03, 0xd8, 0x68, 0xfb, 0xed, 0x0c, 0xfe, 0x48, 0x8c, 0x12, 0xfe, 0x4e, 0xd5, 0x47, 0x4b, 0xd3,
-	0x27, 0xf3, 0x56, 0xfa, 0x5c, 0x40, 0x55, 0x4c, 0x7f, 0x52, 0xf7, 0xcd, 0xe4, 0xa5, 0xb8, 0x6f,
-	0x45, 0x79, 0x5d, 0x30, 0xe2, 0x19, 0xa8, 0x0a, 0x87, 0x2e, 0xf6, 0xdf, 0xbf, 0x65, 0xa0, 0x26,
-	0x29, 0x93, 0xd6, 0x36, 0x65, 0x59, 0x86, 0x47, 0x00, 0xbf, 0x28, 0x73, 0x03, 0xf2, 0xbd, 0xe3,
-	0x03, 0xf3, 0x33, 0x59, 0x87, 0x16, 0x2d, 0x4a, 0xef, 0x73, 0x1c, 0xfe, 0x18, 0x24, 0x5a, 0xf4,
-	0x82, 0xee, 0x18, 0x27, 0xde, 0x96, 0xd5, 0x23, 0x17, 0x2c, 0x6f, 0x9c, 0xd6, 0x03, 0x02, 0xbb,
-	0xaf, 0x8a, 0x47, 0x23, 0x96, 0x2c, 0x2a, 0x8f, 0x48, 0xe8, 0x09, 0xd4, 0xe9, 0xf7, 0xda, 0x70,
-	0xd8, 0x37, 0x49, 0x8f, 0x0b, 0x28, 0x30, 0x9e, 0x18, 0x9d, 0xa2, 0xb3, 0xd4, 0xcb, 0x6d, 0x14,
-	0x99, 0xdb, 0x12, 0x2d, 0xb4, 0x04, 0x65, 0xae, 0xdf, 0x96, 0x75, 0xe8, 0x12, 0xf6, 0x92, 0x92,
-	0xd5, 0x55, 0x12, 0x3d, 0xc7, 0x6b, 0x23, 0xef, 0xac, 0x6d, 0x19, 0xc7, 0x7d, 0xe9, 0x17, 0x69,
-	0x30, 0xa7, 0xc4, 0x0d, 0xd3, 0x55, 0xa9, 0x6d, 0x98, 0xa3, 0x54, 0x62, 0x79, 0x66, 0x57, 0x71,
-	0xa2, 0x32, 0x54, 0x6a, 0x91, 0x50, 0x69, 0xb8, 0xee, 0x6b, 0xdb, 0xe9, 0x09, 0x03, 0xfa, 0x6d,
-	0xbc, 0xc1, 0x85, 0x1f, 0xba, 0xa1, 0x60, 0xf8, 0x7d, 0xa5, 0x2c, 0x07, 0x52, 0x5e, 0x10, 0xef,
-	0x0a, 0x29, 0xf8, 0x29, 0x2c, 0x48, 0x4e, 0x51, 0x5d, 0xbc, 0x82, 0x79, 0x0f, 0xee, 0x4a, 0xe6,
-	0xf5, 0x33, 0x7a, 0x7d, 0xdb, 0x17, 0x80, 0x3f, 0x54, 0xcf, 0xe7, 0xd0, 0xf0, 0xf5, 0x64, 0x29,
-	0xb9, 0xdd, 0x57, 0x15, 0x18, 0xb9, 0x62, 0x67, 0x96, 0x74, 0xf6, 0x4d, 0x69, 0x8e, 0xdd, 0xf7,
-	0x13, 0x0f, 0xfa, 0x8d, 0xd7, 0xe1, 0x96, 0x94, 0x21, 0x92, 0xe5, 0xb0, 0x90, 0x98, 0x42, 0x49,
-	0x42, 0x84, 0xc1, 0xe8, 0xd0, 0xab, 0xcd, 0xae, 0x72, 0x86, 0x4d, 0xcb, 0x64, 0x6a, 0x8a, 0xcc,
-	0x05, 0xbe, 0x23, 0xa8, 0x62, 0x6a, 0x5c, 0x12, 0x64, 0x2a, 0x40, 0x25, 0x8b, 0x85, 0xa0, 0xe4,
-	0xd8, 0x42, 0xc4, 0x44, 0x7f, 0x02, 0x8b, 0xbe, 0x12, 0xd4, 0x6e, 0xfb, 0xc4, 0x19, 0x98, 0xae,
-	0xab, 0xd4, 0xa3, 0x92, 0x26, 0xfe, 0x0e, 0x4c, 0x0f, 0x89, 0xf0, 0x5c, 0xe5, 0x55, 0xb4, 0xc2,
-	0x1f, 0x90, 0x57, 0x94, 0xc1, 0xac, 0x1f, 0xf7, 0xe0, 0x9e, 0x94, 0xce, 0x2d, 0x9a, 0x28, 0x3e,
-	0xaa, 0x94, 0xbc, 0xf6, 0x73, 0xb3, 0xc6, 0xaf, 0xfd, 0x59, 0xbe, 0xf6, 0x7e, 0x8d, 0xf4, 0xf7,
-	0xdc, 0x90, 0xf2, 0x6c, 0x4d, 0x14, 0x91, 0xb6, 0xb9, 0x4d, 0xfd, 0x23, 0x39, 0x91, 0xb0, 0x63,
-	0x98, 0x0f, 0x9f, 0xe4, 0x89, 0x9c, 0xe5, 0x3c, 0xe4, 0x3c, 0xfb, 0x9c, 0x48, 0x57, 0xc9, 0x1b,
-	0x52, 0x61, 0xff, 0x98, 0x4f, 0xa4, 0xb0, 0x11, 0x08, 0x63, 0x5b, 0x72, 0x52, 0x7d, 0xe9, 0x6a,
-	0xca, 0x14, 0x8f, 0x37, 0xf0, 0x2e, 0xdc, 0x88, 0xba, 0x89, 0x89, 0x54, 0x7e, 0xc5, 0x37, 0x70,
-	0x92, 0x27, 0x99, 0x48, 0xee, 0x07, 0x81, 0x33, 0x50, 0x1c, 0xca, 0x44, 0x22, 0x75, 0x68, 0x26,
-	0xf9, 0x97, 0x1f, 0x63, 0xbf, 0xfa, 0xee, 0x66, 0x22, 0x61, 0x6e, 0x20, 0x6c, 0xf2, 0xe5, 0x0f,
-	0x7c, 0x44, 0xf6, 0x4a, 0x1f, 0x21, 0x0e, 0x49, 0xe0, 0xc5, 0x7e, 0x82, 0x4d, 0x27, 0x30, 0x02,
-	0x07, 0x3a, 0x29, 0x06, 0x8d, 0x21, 0x3e, 0x06, 0x6b, 0xc8, 0x8d, 0xad, 0xba, 0xdd, 0x89, 0x16,
-	0xe3, 0xc3, 0xc0, 0x77, 0xc6, 0x3c, 0xf3, 0x44, 0x82, 0x3f, 0x82, 0xa5, 0x74, 0xa7, 0x3c, 0x89,
-	0xe4, 0x27, 0x2d, 0x28, 0xf9, 0x69, 0xab, 0xf2, 0xe3, 0x8b, 0x32, 0x14, 0x76, 0xf7, 0x0e, 0xf6,
-	0xd7, 0xd6, 0xdb, 0xfc, 0xd7, 0x17, 0xeb, 0x7b, 0xba, 0x7e, 0xb8, 0xdf, 0xa9, 0x67, 0x56, 0xbf,
-	0xcb, 0x42, 0x66, 0xfb, 0x15, 0xfa, 0x18, 0x72, 0xfc, 0x29, 0xf2, 0x8a, 0xf7, 0xe7, 0xe6, 0x55,
-	0xaf, 0xad, 0xf8, 0xe6, 0x17, 0xff, 0xf3, 0xdd, 0xd7, 0x99, 0x59, 0x5c, 0x69, 0x8d, 0x7f, 0xd5,
-	0x3a, 0x1f, 0xb7, 0x58, 0x6c, 0x78, 0xa6, 0x3d, 0x41, 0x1f, 0x40, 0x76, 0x7f, 0xe4, 0xa1, 0xd4,
-	0x77, 0xe9, 0x66, 0xfa, 0x03, 0x2c, 0x5e, 0x60, 0x42, 0x67, 0x30, 0x08, 0xa1, 0xc3, 0x91, 0x47,
-	0x45, 0x7e, 0x0a, 0x65, 0xf5, 0xf9, 0xf4, 0xda, 0xc7, 0xea, 0xe6, 0xf5, 0x4f, 0xb3, 0xf8, 0x2e,
-	0x83, 0xba, 0x89, 0x91, 0x80, 0xe2, 0x0f, 0xbc, 0xea, 0x2c, 0x3a, 0x17, 0x16, 0x4a, 0x7d, 0xca,
-	0x6e, 0xa6, 0xbf, 0xd6, 0xc6, 0x66, 0xe1, 0x5d, 0x58, 0x54, 0xe4, 0x5f, 0x88, 0x87, 0xda, 0xae,
-	0x87, 0xee, 0x25, 0x3c, 0xd4, 0xa9, 0x4f, 0x52, 0xcd, 0xa5, 0x74, 0x06, 0x01, 0x72, 0x87, 0x81,
-	0xdc, 0xc0, 0xb3, 0x02, 0xa4, 0xeb, 0xb3, 0x3c, 0xd3, 0x9e, 0xac, 0x76, 0x21, 0xc7, 0x6a, 0xce,
-	0xe8, 0xcf, 0xe4, 0x47, 0x33, 0xa1, 0x90, 0x9e, 0xb2, 0xd0, 0xa1, 0x6a, 0x35, 0x9e, 0x67, 0x40,
-	0x35, 0x5c, 0xa2, 0x40, 0xac, 0xe2, 0xfc, 0x4c, 0x7b, 0xb2, 0xac, 0xfd, 0x42, 0x5b, 0x7d, 0x33,
-	0x0d, 0x39, 0x56, 0x7c, 0x42, 0xe7, 0x00, 0x41, 0x6d, 0x36, 0x3a, 0xbb, 0x58, 0xb5, 0x37, 0x3a,
-	0xbb, 0x78, 0x59, 0x17, 0x37, 0x19, 0xe8, 0x3c, 0x9e, 0xa1, 0xa0, 0xac, 0xa6, 0xd5, 0x62, 0x65,
-	0x3a, 0x6a, 0x47, 0x47, 0x94, 0xde, 0xf8, 0x51, 0x42, 0x49, 0xc2, 0x42, 0xf5, 0xd9, 0xe8, 0x6e,
-	0x48, 0xa8, 0xcd, 0xe2, 0x45, 0x86, 0xd7, 0xc0, 0x73, 0xc2, 0x9a, 0x1c, 0xd2, 0x61, 0x4c, 0x14,
-	0xf3, 0x73, 0xa8, 0x85, 0x8b, 0xab, 0xe8, 0x41, 0x82, 0xd0, 0x68, 0x8d, 0xb6, 0xf9, 0xf0, 0x6a,
-	0xa6, 0x24, 0x70, 0x8e, 0x7c, 0x4e, 0xc8, 0xd0, 0xa0, 0x4c, 0xc2, 0xd6, 0xe8, 0x0b, 0x0d, 0x66,
-	0x22, 0xd5, 0x52, 0x94, 0x24, 0x3d, 0x56, 0x8b, 0x6d, 0x3e, 0xba, 0x86, 0x4b, 0x28, 0x81, 0x99,
-	0x12, 0x77, 0xf0, 0xcd, 0x90, 0x05, 0x3c, 0x73, 0x40, 0x3c, 0x5b, 0x28, 0xe2, 0x5b, 0x9e, 0x57,
-	0x35, 0x13, 0x2d, 0x1f, 0xaa, 0x92, 0x26, 0x5a, 0x3e, 0x5c, 0x12, 0x4d, 0xb1, 0x3c, 0x2f, 0x63,
-	0xd2, 0x9d, 0xcc, 0x7e, 0xdf, 0xc0, 0x7f, 0xd5, 0x88, 0x6c, 0x28, 0xf9, 0xa5, 0x43, 0xb4, 0x98,
-	0x54, 0xc6, 0x09, 0x2e, 0x00, 0xcd, 0x7b, 0xa9, 0xfd, 0x02, 0xf9, 0x3e, 0x43, 0xbe, 0x8d, 0x6f,
-	0x50, 0x64, 0xf1, 0xc3, 0xc9, 0x16, 0xaf, 0x15, 0xb4, 0x8c, 0x5e, 0x8f, 0x4e, 0xf8, 0x2f, 0xa1,
-	0xa2, 0xd6, 0xf6, 0xd0, 0xfd, 0xc4, 0xd2, 0x91, 0x5a, 0x1e, 0x6c, 0xe2, 0xab, 0x58, 0x04, 0xf2,
-	0x43, 0x86, 0xbc, 0x88, 0x6f, 0x25, 0x20, 0x3b, 0x8c, 0x35, 0x04, 0xce, 0xeb, 0x72, 0xc9, 0xe0,
-	0xa1, 0xb2, 0x5f, 0x32, 0x78, 0xb8, 0xac, 0x77, 0x25, 0xf8, 0x88, 0xb1, 0x52, 0x70, 0x17, 0x20,
-	0xa8, 0xc0, 0xa1, 0x44, 0x5b, 0x2a, 0x37, 0xa0, 0xe8, 0x89, 0x8e, 0x17, 0xef, 0xc2, 0xfb, 0x2b,
-	0x02, 0xdb, 0x37, 0x5d, 0x7a, 0xb2, 0x57, 0xff, 0x2e, 0x0f, 0xe5, 0x97, 0x86, 0x69, 0x79, 0xc4,
-	0x32, 0xac, 0x2e, 0x41, 0xc7, 0x90, 0x63, 0xd1, 0x2d, 0xea, 0xbc, 0xd4, 0xa2, 0x54, 0xd4, 0x79,
-	0x85, 0x2a, 0x36, 0x78, 0x89, 0xa1, 0x36, 0xf1, 0x02, 0x45, 0x1d, 0x04, 0xa2, 0x5b, 0xac, 0xd0,
-	0x42, 0x27, 0x7a, 0x02, 0x79, 0x51, 0xc3, 0x8f, 0x08, 0x0a, 0x15, 0x60, 0x9a, 0x77, 0x92, 0x3b,
-	0x93, 0xb6, 0x92, 0x0a, 0xe3, 0x32, 0x3e, 0x8a, 0x33, 0x06, 0x08, 0x2a, 0x88, 0x51, 0x83, 0xc6,
-	0x0a, 0x8e, 0xcd, 0xa5, 0x74, 0x06, 0x81, 0xf9, 0x88, 0x61, 0xde, 0xc3, 0xcd, 0x28, 0x66, 0xcf,
-	0xe7, 0xa5, 0xb8, 0x7f, 0x0e, 0xd3, 0x9b, 0x86, 0x7b, 0x86, 0x22, 0xf1, 0x4a, 0xf9, 0xb1, 0x41,
-	0xb3, 0x99, 0xd4, 0x25, 0x50, 0xee, 0x31, 0x94, 0x5b, 0x78, 0x3e, 0x8a, 0x72, 0x66, 0xb8, 0x34,
-	0x10, 0xa0, 0x1e, 0xe4, 0xf9, 0x6f, 0x0f, 0xa2, 0xf6, 0x0b, 0xfd, 0x7e, 0x21, 0x6a, 0xbf, 0xf0,
-	0xcf, 0x15, 0xae, 0x47, 0x19, 0x42, 0x51, 0x3e, 0xf6, 0xa3, 0xbb, 0x91, 0xa5, 0x08, 0xff, 0x30,
-	0xa0, 0xb9, 0x98, 0xd6, 0x2d, 0xb0, 0x1e, 0x30, 0xac, 0xbb, 0xb8, 0x11, 0x5b, 0x2b, 0xc1, 0xf9,
-	0x4c, 0x7b, 0xf2, 0x0b, 0x0d, 0x7d, 0x0e, 0x10, 0x14, 0x5d, 0x63, 0x07, 0x20, 0x5a, 0xbf, 0x8d,
-	0x1d, 0x80, 0x58, 0xbd, 0x16, 0xaf, 0x30, 0xdc, 0x65, 0xfc, 0x20, 0x8a, 0xeb, 0x39, 0x86, 0xe5,
-	0x9e, 0x10, 0xe7, 0x7d, 0x5e, 0x58, 0x73, 0xcf, 0xcc, 0x21, 0x3d, 0x0c, 0xff, 0x31, 0x03, 0xd3,
-	0x34, 0x6b, 0xa4, 0xc1, 0x35, 0xb8, 0x6c, 0x47, 0x35, 0x89, 0x95, 0xb8, 0xa2, 0x9a, 0xc4, 0xef,
-	0xe9, 0xe1, 0xe0, 0xca, 0x7e, 0x8e, 0x4e, 0x18, 0x03, 0x35, 0xb4, 0x0d, 0x65, 0xe5, 0x36, 0x8e,
-	0x12, 0x84, 0x85, 0x6b, 0x67, 0x51, 0x17, 0x9f, 0x70, 0x95, 0xc7, 0xb7, 0x19, 0xde, 0x02, 0xae,
-	0xfb, 0x78, 0x3d, 0xce, 0x41, 0x01, 0x5f, 0x43, 0x45, 0xbd, 0xb1, 0xa3, 0x04, 0x79, 0x91, 0xba,
-	0x5c, 0xd4, 0xcb, 0x25, 0x5d, 0xf8, 0xc3, 0x07, 0xdf, 0xff, 0xc9, 0xbd, 0x64, 0xa3, 0xc0, 0x7d,
-	0x28, 0x88, 0x2b, 0x7c, 0xd2, 0x2c, 0xc3, 0x45, 0xbc, 0xa4, 0x59, 0x46, 0xee, 0xff, 0xe1, 0x84,
-	0x8c, 0x21, 0xd2, 0x5b, 0x8a, 0x8c, 0x24, 0x02, 0xed, 0x05, 0xf1, 0xd2, 0xd0, 0x82, 0x8a, 0x54,
-	0x1a, 0x9a, 0x72, 0x43, 0x4c, 0x43, 0x3b, 0x25, 0x9e, 0x38, 0x2e, 0xf2, 0xe6, 0x85, 0x52, 0x84,
-	0xa9, 0xde, 0x1b, 0x5f, 0xc5, 0x92, 0x94, 0x2f, 0x07, 0x80, 0xc2, 0x75, 0xa3, 0x0b, 0x80, 0xa0,
-	0xc0, 0x10, 0x4d, 0x8e, 0x12, 0xab, 0x94, 0xd1, 0xe4, 0x28, 0xb9, 0x46, 0x11, 0x76, 0x0d, 0x01,
-	0x2e, 0x4f, 0xd7, 0x29, 0xf2, 0x57, 0x1a, 0xa0, 0x78, 0x2d, 0x02, 0x3d, 0x4d, 0x96, 0x9e, 0x58,
-	0xfb, 0x6c, 0xbe, 0xf7, 0x76, 0xcc, 0x49, 0xde, 0x3e, 0x50, 0xa9, 0xcb, 0xb8, 0x87, 0xaf, 0xa9,
-	0x52, 0x7f, 0xa3, 0x41, 0x35, 0x54, 0xc8, 0x40, 0xef, 0xa4, 0xac, 0x69, 0xa4, 0x74, 0xda, 0x7c,
-	0x7c, 0x2d, 0x5f, 0x52, 0xe2, 0xa4, 0xec, 0x00, 0x99, 0x26, 0x7f, 0xa9, 0x41, 0x2d, 0x5c, 0xf8,
-	0x40, 0x29, 0xb2, 0x63, 0xa5, 0xd7, 0xe6, 0xf2, 0xf5, 0x8c, 0x57, 0x2f, 0x4f, 0x90, 0x39, 0xf7,
-	0xa1, 0x20, 0x4a, 0x25, 0x49, 0x1b, 0x3f, 0x5c, 0xb4, 0x4d, 0xda, 0xf8, 0x91, 0x3a, 0x4b, 0xc2,
-	0xc6, 0x77, 0xec, 0x3e, 0x51, 0x8e, 0x99, 0xa8, 0xa5, 0xa4, 0xa1, 0x5d, 0x7d, 0xcc, 0x22, 0x85,
-	0x98, 0x34, 0xb4, 0xe0, 0x98, 0xc9, 0x22, 0x0a, 0x4a, 0x11, 0x76, 0xcd, 0x31, 0x8b, 0xd6, 0x60,
-	0x12, 0x8e, 0x19, 0x03, 0x54, 0x8e, 0x59, 0x50, 0xee, 0x48, 0x3a, 0x66, 0xb1, 0x1a, 0x74, 0xd2,
-	0x31, 0x8b, 0x57, 0x4c, 0x12, 0xd6, 0x91, 0xe1, 0x86, 0x8e, 0xd9, 0x5c, 0x42, 0x65, 0x04, 0xbd,
-	0x97, 0x62, 0xc4, 0xc4, 0xd2, 0x76, 0xf3, 0xfd, 0xb7, 0xe4, 0x4e, 0xdd, 0xe3, 0xdc, 0xfc, 0x72,
-	0x8f, 0xff, 0x83, 0x06, 0xf3, 0x49, 0x55, 0x15, 0x94, 0x82, 0x93, 0x52, 0x12, 0x6f, 0xae, 0xbc,
-	0x2d, 0xfb, 0xd5, 0xd6, 0xf2, 0x77, 0xfd, 0xf3, 0xfa, 0x7f, 0xbe, 0x59, 0xd4, 0xfe, 0xfb, 0xcd,
-	0xa2, 0xf6, 0xbf, 0x6f, 0x16, 0xb5, 0x7f, 0xfc, 0xbf, 0xc5, 0xa9, 0xe3, 0x3c, 0xfb, 0x8f, 0x5c,
-	0xbf, 0xfa, 0x43, 0x00, 0x00, 0x00, 0xff, 0xff, 0xc6, 0x35, 0xa7, 0xba, 0x61, 0x36, 0x00, 0x00,
+	0xda, 0xac, 0xa3, 0x45, 0xbf, 0x38, 0x4f, 0xf3, 0x16, 0xe5, 0x69, 0x0d, 0xc6, 0xdd, 0x2e, 0xfb,
+	0x33, 0x3c, 0x6e, 0x9d, 0x8f, 0x45, 0xd7, 0x6d, 0xd6, 0x65, 0x8c, 0xbc, 0x33, 0xf6, 0x67, 0x78,
+	0xcc, 0xfe, 0x11, 0x9d, 0x77, 0x4e, 0x6d, 0xfb, 0xb4, 0x4f, 0x5a, 0xc6, 0xd0, 0x6c, 0x19, 0x96,
+	0x65, 0x7b, 0x86, 0x67, 0xda, 0x96, 0xcb, 0x7b, 0xf1, 0xdf, 0x6a, 0x50, 0xd3, 0x89, 0x3b, 0xb4,
+	0x2d, 0x97, 0x6c, 0x12, 0xa3, 0x47, 0x1c, 0x74, 0x17, 0xa0, 0xdb, 0x1f, 0xb9, 0x1e, 0x71, 0x8e,
+	0xcc, 0x5e, 0x43, 0x5b, 0xd2, 0x96, 0xa7, 0xf5, 0x92, 0xa0, 0x6c, 0xf5, 0xd0, 0x6d, 0x28, 0x0d,
+	0xc8, 0xe0, 0x98, 0xf7, 0x66, 0x58, 0x6f, 0x91, 0x13, 0xb6, 0x7a, 0xa8, 0x09, 0x45, 0x87, 0x8c,
+	0x4d, 0xd7, 0xb4, 0xad, 0x46, 0x76, 0x49, 0x5b, 0xce, 0xea, 0x7e, 0x9b, 0x0e, 0x74, 0x8c, 0x13,
+	0xef, 0xc8, 0x23, 0xce, 0xa0, 0x31, 0xcd, 0x07, 0x52, 0x42, 0x87, 0x38, 0x03, 0xfc, 0x65, 0x0e,
+	0x2a, 0xba, 0x61, 0x9d, 0x12, 0x9d, 0x7c, 0x3a, 0x22, 0xae, 0x87, 0xea, 0x90, 0x3d, 0x27, 0x97,
+	0x0c, 0xbe, 0xa2, 0xd3, 0x4f, 0x3e, 0xde, 0x3a, 0x25, 0x47, 0xc4, 0xe2, 0xc0, 0x15, 0x3a, 0xde,
+	0x3a, 0x25, 0x6d, 0xab, 0x87, 0xe6, 0x21, 0xd7, 0x37, 0x07, 0xa6, 0x27, 0x50, 0x79, 0x23, 0xa4,
+	0xce, 0x74, 0x44, 0x9d, 0x75, 0x00, 0xd7, 0x76, 0xbc, 0x23, 0xdb, 0xe9, 0x11, 0xa7, 0x91, 0x5b,
+	0xd2, 0x96, 0x6b, 0xab, 0x0f, 0x57, 0xd4, 0x85, 0x58, 0x51, 0x15, 0x5a, 0x39, 0xb0, 0x1d, 0x6f,
+	0x8f, 0xf2, 0xea, 0x25, 0x57, 0x7e, 0xa2, 0xdf, 0x41, 0x99, 0x09, 0xf1, 0x0c, 0xe7, 0x94, 0x78,
+	0x8d, 0x3c, 0x93, 0xf2, 0xe8, 0x1a, 0x29, 0x1d, 0xc6, 0xac, 0x33, 0x78, 0xfe, 0x8d, 0x30, 0x54,
+	0x5c, 0xe2, 0x98, 0x46, 0xdf, 0xfc, 0xcc, 0x38, 0xee, 0x93, 0x46, 0x61, 0x49, 0x5b, 0x2e, 0xea,
+	0x21, 0x1a, 0x9d, 0xff, 0x39, 0xb9, 0x74, 0x8f, 0x6c, 0xab, 0x7f, 0xd9, 0x28, 0x32, 0x86, 0x22,
+	0x25, 0xec, 0x59, 0xfd, 0x4b, 0xb6, 0x68, 0xf6, 0xc8, 0xf2, 0x78, 0x6f, 0x89, 0xf5, 0x96, 0x18,
+	0x85, 0x75, 0x2f, 0x43, 0x7d, 0x60, 0x5a, 0x47, 0x03, 0xbb, 0x77, 0xe4, 0x1b, 0x04, 0x98, 0x41,
+	0x6a, 0x03, 0xd3, 0x7a, 0x69, 0xf7, 0x74, 0x69, 0x16, 0xca, 0x69, 0x5c, 0x84, 0x39, 0xcb, 0x82,
+	0xd3, 0xb8, 0x50, 0x39, 0x57, 0x60, 0x8e, 0xca, 0xec, 0x3a, 0xc4, 0xf0, 0x48, 0xc0, 0x5c, 0x61,
+	0xcc, 0xb3, 0x03, 0xd3, 0x5a, 0x67, 0x3d, 0x21, 0x7e, 0xe3, 0x22, 0xc6, 0x5f, 0x15, 0xfc, 0xc6,
+	0x45, 0x98, 0x1f, 0xaf, 0x40, 0xc9, 0xb7, 0x39, 0x2a, 0xc2, 0xf4, 0xee, 0xde, 0x6e, 0xbb, 0x3e,
+	0x85, 0x00, 0xf2, 0x6b, 0x07, 0xeb, 0xed, 0xdd, 0x8d, 0xba, 0x86, 0xca, 0x50, 0xd8, 0x68, 0xf3,
+	0x46, 0x06, 0x3f, 0x07, 0x08, 0xac, 0x8b, 0x0a, 0x90, 0xdd, 0x6e, 0x7f, 0x5c, 0x9f, 0xa2, 0x3c,
+	0xaf, 0xda, 0xfa, 0xc1, 0xd6, 0xde, 0x6e, 0x5d, 0xa3, 0x83, 0xd7, 0xf5, 0xf6, 0x5a, 0xa7, 0x5d,
+	0xcf, 0x50, 0x8e, 0x97, 0x7b, 0x1b, 0xf5, 0x2c, 0x2a, 0x41, 0xee, 0xd5, 0xda, 0xce, 0x61, 0xbb,
+	0x3e, 0x8d, 0xbf, 0xd6, 0xa0, 0x2a, 0xd6, 0x8b, 0x9f, 0x09, 0xf4, 0x6b, 0xc8, 0x9f, 0xb1, 0x73,
+	0xc1, 0xb6, 0x62, 0x79, 0xf5, 0x4e, 0x64, 0x71, 0x43, 0x67, 0x47, 0x17, 0xbc, 0x08, 0x43, 0xf6,
+	0x7c, 0xec, 0x36, 0x32, 0x4b, 0xd9, 0xe5, 0xf2, 0x6a, 0x7d, 0x85, 0x1f, 0xd8, 0x95, 0x6d, 0x72,
+	0xf9, 0xca, 0xe8, 0x8f, 0x88, 0x4e, 0x3b, 0x11, 0x82, 0xe9, 0x81, 0xed, 0x10, 0xb6, 0x63, 0x8b,
+	0x3a, 0xfb, 0xa6, 0xdb, 0x98, 0x2d, 0x9a, 0xd8, 0xad, 0xbc, 0x81, 0xbf, 0xd1, 0x00, 0xf6, 0x47,
+	0x5e, 0xfa, 0xd1, 0x98, 0x87, 0xdc, 0x98, 0x0a, 0x16, 0xc7, 0x82, 0x37, 0xd8, 0x99, 0x20, 0x86,
+	0x4b, 0xfc, 0x33, 0x41, 0x1b, 0xe8, 0x26, 0x14, 0x86, 0x0e, 0x19, 0x1f, 0x9d, 0x8f, 0x19, 0x48,
+	0x51, 0xcf, 0xd3, 0xe6, 0xf6, 0x18, 0xdd, 0x87, 0x8a, 0x79, 0x6a, 0xd9, 0x0e, 0x39, 0xe2, 0xb2,
+	0x72, 0xac, 0xb7, 0xcc, 0x69, 0x4c, 0x6f, 0x85, 0x85, 0x0b, 0xce, 0xab, 0x2c, 0x3b, 0x94, 0x84,
+	0x2d, 0x28, 0x33, 0x55, 0x27, 0x32, 0xdf, 0xbb, 0x81, 0x8e, 0x19, 0x36, 0x2c, 0x6e, 0x42, 0xa1,
+	0x35, 0xfe, 0x04, 0xd0, 0x06, 0xe9, 0x13, 0x8f, 0x4c, 0xe2, 0x3d, 0x14, 0x9b, 0x64, 0x55, 0x9b,
+	0xe0, 0xaf, 0x34, 0x98, 0x0b, 0x89, 0x9f, 0x68, 0x5a, 0x0d, 0x28, 0xf4, 0x98, 0x30, 0xae, 0x41,
+	0x56, 0x97, 0x4d, 0xf4, 0x14, 0x8a, 0x42, 0x01, 0xb7, 0x91, 0x4d, 0xd9, 0x34, 0x05, 0xae, 0x93,
+	0x8b, 0xbf, 0xc9, 0x40, 0x49, 0x4c, 0x74, 0x6f, 0x88, 0xd6, 0xa0, 0xea, 0xf0, 0xc6, 0x11, 0x9b,
+	0x8f, 0xd0, 0xa8, 0x99, 0xee, 0x84, 0x36, 0xa7, 0xf4, 0x8a, 0x18, 0xc2, 0xc8, 0xe8, 0x4f, 0xa0,
+	0x2c, 0x45, 0x0c, 0x47, 0x9e, 0x30, 0x79, 0x23, 0x2c, 0x20, 0xd8, 0x7f, 0x9b, 0x53, 0x3a, 0x08,
+	0xf6, 0xfd, 0x91, 0x87, 0x3a, 0x30, 0x2f, 0x07, 0xf3, 0xd9, 0x08, 0x35, 0xb2, 0x4c, 0xca, 0x52,
+	0x58, 0x4a, 0x7c, 0xa9, 0x36, 0xa7, 0x74, 0x24, 0xc6, 0x2b, 0x9d, 0xaa, 0x4a, 0xde, 0x05, 0x77,
+	0xde, 0x31, 0x95, 0x3a, 0x17, 0x56, 0x5c, 0xa5, 0xce, 0x85, 0xf5, 0xbc, 0x04, 0x05, 0xd1, 0xc2,
+	0xff, 0x9e, 0x01, 0x90, 0xab, 0xb1, 0x37, 0x44, 0x1b, 0x50, 0x73, 0x44, 0x2b, 0x64, 0xad, 0xdb,
+	0x89, 0xd6, 0x12, 0x8b, 0x38, 0xa5, 0x57, 0xe5, 0x20, 0xae, 0xdc, 0x6f, 0xa0, 0xe2, 0x4b, 0x09,
+	0x0c, 0x76, 0x2b, 0xc1, 0x60, 0xbe, 0x84, 0xb2, 0x1c, 0x40, 0x4d, 0xf6, 0x21, 0x2c, 0xf8, 0xe3,
+	0x13, 0x6c, 0x76, 0xff, 0x0a, 0x9b, 0xf9, 0x02, 0xe7, 0xa4, 0x04, 0xd5, 0x6a, 0xaa, 0x62, 0x81,
+	0xd9, 0x6e, 0x25, 0x98, 0x2d, 0xae, 0x18, 0x35, 0x1c, 0xd0, 0x78, 0xc9, 0x9b, 0xf8, 0xff, 0xb3,
+	0x50, 0x58, 0xb7, 0x07, 0x43, 0xc3, 0xa1, 0xab, 0x91, 0x77, 0x88, 0x3b, 0xea, 0x7b, 0xcc, 0x5c,
+	0xb5, 0xd5, 0x07, 0x61, 0x89, 0x82, 0x4d, 0xfe, 0xab, 0x33, 0x56, 0x5d, 0x0c, 0xa1, 0x83, 0x45,
+	0x78, 0xcc, 0xbc, 0xc5, 0x60, 0x11, 0x1c, 0xc5, 0x10, 0x79, 0x90, 0xb3, 0xc1, 0x41, 0x6e, 0x42,
+	0x61, 0x4c, 0x9c, 0x20, 0xa4, 0x6f, 0x4e, 0xe9, 0x92, 0x80, 0xde, 0x85, 0x99, 0x68, 0x78, 0xc9,
+	0x09, 0x9e, 0x5a, 0x37, 0x1c, 0x8d, 0x1e, 0x40, 0x25, 0x14, 0xe3, 0xf2, 0x82, 0xaf, 0x3c, 0x50,
+	0x42, 0xdc, 0x0d, 0xe9, 0x57, 0x69, 0x3c, 0xae, 0x6c, 0x4e, 0x49, 0xcf, 0x7a, 0x43, 0x7a, 0xd6,
+	0xa2, 0x18, 0x25, 0x7c, 0x6b, 0xc8, 0xc9, 0xfc, 0x36, 0xec, 0x64, 0xf0, 0x6f, 0xa1, 0x1a, 0x32,
+	0x10, 0x8d, 0x3b, 0xed, 0x0f, 0x0e, 0xd7, 0x76, 0x78, 0x90, 0x7a, 0xc1, 0xe2, 0x92, 0x5e, 0xd7,
+	0x68, 0xac, 0xdb, 0x69, 0x1f, 0x1c, 0xd4, 0x33, 0xa8, 0x0a, 0xa5, 0xdd, 0xbd, 0xce, 0x11, 0xe7,
+	0xca, 0xe2, 0x17, 0xbe, 0x04, 0x11, 0xe4, 0x94, 0xd8, 0x36, 0xa5, 0xc4, 0x36, 0x4d, 0xc6, 0xb6,
+	0x4c, 0x10, 0xdb, 0x58, 0x98, 0xdb, 0x69, 0xaf, 0x1d, 0xb4, 0xeb, 0xd3, 0xcf, 0x6b, 0x50, 0xe1,
+	0xf6, 0x3d, 0x1a, 0x59, 0x34, 0xd4, 0xfe, 0xb3, 0x06, 0x10, 0x9c, 0x26, 0xd4, 0x82, 0x42, 0x97,
+	0xe3, 0x34, 0x34, 0xe6, 0x8c, 0x16, 0x12, 0x97, 0x4c, 0x97, 0x5c, 0xe8, 0x97, 0x50, 0x70, 0x47,
+	0xdd, 0x2e, 0x71, 0x65, 0xc8, 0xbb, 0x19, 0xf5, 0x87, 0xc2, 0x5b, 0xe9, 0x92, 0x8f, 0x0e, 0x39,
+	0x31, 0xcc, 0xfe, 0x88, 0x05, 0xc0, 0xab, 0x87, 0x08, 0x3e, 0xfc, 0x4f, 0x1a, 0x94, 0x95, 0xcd,
+	0xfb, 0x03, 0x9d, 0xf0, 0x1d, 0x28, 0x31, 0x1d, 0x48, 0x4f, 0xb8, 0xe1, 0xa2, 0x1e, 0x10, 0xd0,
+	0x1f, 0x43, 0x49, 0x9e, 0x00, 0xe9, 0x89, 0x1b, 0xc9, 0x62, 0xf7, 0x86, 0x7a, 0xc0, 0x8a, 0xb7,
+	0x61, 0x96, 0x59, 0xa5, 0x4b, 0x93, 0x6b, 0x69, 0x47, 0x35, 0xfd, 0xd4, 0x22, 0xe9, 0x67, 0x13,
+	0x8a, 0xc3, 0xb3, 0x4b, 0xd7, 0xec, 0x1a, 0x7d, 0xa1, 0x85, 0xdf, 0xc6, 0xbf, 0x07, 0xa4, 0x0a,
+	0x9b, 0x64, 0xba, 0xb8, 0x0a, 0xe5, 0x4d, 0xc3, 0x3d, 0x13, 0x2a, 0xe1, 0xa7, 0x50, 0xa5, 0xcd,
+	0xed, 0x57, 0x6f, 0xa1, 0x23, 0xbb, 0x1c, 0x48, 0xee, 0x89, 0x6c, 0x8e, 0x60, 0xfa, 0xcc, 0x70,
+	0xcf, 0xd8, 0x44, 0xab, 0x3a, 0xfb, 0x46, 0xef, 0x42, 0xbd, 0xcb, 0x27, 0x79, 0x14, 0xb9, 0x32,
+	0xcc, 0x08, 0xba, 0x9f, 0x09, 0x7e, 0x04, 0x15, 0x3e, 0x87, 0x1f, 0x5b, 0x09, 0x3c, 0x0b, 0x33,
+	0x07, 0x96, 0x31, 0x74, 0xcf, 0x6c, 0x19, 0xdd, 0xe8, 0xa4, 0xeb, 0x01, 0x6d, 0x22, 0xc4, 0xc7,
+	0x30, 0xe3, 0x90, 0x81, 0x61, 0x5a, 0xa6, 0x75, 0x7a, 0x74, 0x7c, 0xe9, 0x11, 0x57, 0x5c, 0x98,
+	0x6a, 0x3e, 0xf9, 0x39, 0xa5, 0x52, 0xd5, 0x8e, 0xfb, 0xf6, 0xb1, 0x70, 0x73, 0xec, 0x1b, 0x7f,
+	0xab, 0x41, 0xe5, 0x43, 0xc3, 0xeb, 0xca, 0xa5, 0x43, 0x5b, 0x50, 0xf3, 0x9d, 0x1b, 0xa3, 0x08,
+	0x5d, 0x22, 0x21, 0x96, 0x8d, 0x91, 0xa9, 0xb4, 0x8c, 0x8e, 0xd5, 0xae, 0x4a, 0x60, 0xa2, 0x0c,
+	0xab, 0x4b, 0xfa, 0xbe, 0xa8, 0x4c, 0xba, 0x28, 0xc6, 0xa8, 0x8a, 0x52, 0x09, 0xcf, 0x67, 0x82,
+	0xf4, 0x83, 0xfb, 0x92, 0x6f, 0x33, 0x80, 0xe2, 0x3a, 0x7c, 0xdf, 0x8c, 0xec, 0x11, 0xd4, 0x5c,
+	0xcf, 0x70, 0x62, 0x7b, 0xa3, 0xca, 0xa8, 0xbe, 0x83, 0x7e, 0x0c, 0x33, 0x43, 0xc7, 0x3e, 0x75,
+	0x88, 0xeb, 0x1e, 0x59, 0xb6, 0x67, 0x9e, 0x5c, 0x8a, 0xa4, 0xb6, 0x26, 0xc9, 0xbb, 0x8c, 0x8a,
+	0xda, 0x50, 0x38, 0x31, 0xfb, 0x1e, 0x71, 0xdc, 0x46, 0x6e, 0x29, 0xbb, 0x5c, 0x5b, 0x7d, 0x7a,
+	0x9d, 0xd5, 0x56, 0x7e, 0xc7, 0xf8, 0x3b, 0x97, 0x43, 0xa2, 0xcb, 0xb1, 0x6a, 0xa2, 0x98, 0x0f,
+	0x25, 0xcf, 0xb7, 0xa0, 0xf8, 0x9a, 0x8a, 0xa0, 0x97, 0xe2, 0x02, 0xcf, 0xed, 0x58, 0x7b, 0xab,
+	0x87, 0x1f, 0x01, 0x04, 0xa2, 0xa8, 0x17, 0xde, 0xdd, 0xdb, 0x3f, 0xec, 0xd4, 0xa7, 0x50, 0x05,
+	0x8a, 0xbb, 0x7b, 0x1b, 0xed, 0x9d, 0x36, 0x75, 0xd9, 0xb8, 0x25, 0xcd, 0xa6, 0x9a, 0x37, 0x24,
+	0x57, 0x0b, 0xcb, 0xfd, 0xfb, 0x0c, 0x54, 0xc5, 0x06, 0x99, 0x68, 0x97, 0xaa, 0x10, 0x99, 0x10,
+	0x04, 0x4d, 0x58, 0xf9, 0xc6, 0xe9, 0x89, 0xbc, 0x58, 0x36, 0xa9, 0xdb, 0xe0, 0xfb, 0x80, 0xf4,
+	0x84, 0xc5, 0xfd, 0x76, 0xe2, 0xc9, 0xce, 0x25, 0x9e, 0x6c, 0xf4, 0x00, 0xaa, 0xfe, 0x46, 0x34,
+	0x5c, 0x11, 0x86, 0x4b, 0x7a, 0x45, 0xee, 0x31, 0x4a, 0x43, 0x8f, 0x20, 0x4f, 0xc6, 0xc4, 0xf2,
+	0xdc, 0x46, 0x99, 0x39, 0xe4, 0xaa, 0x4c, 0x8d, 0xdb, 0x94, 0xaa, 0x8b, 0x4e, 0xfc, 0x47, 0x30,
+	0xcb, 0xae, 0x20, 0x2f, 0x1c, 0xc3, 0x52, 0xef, 0x4a, 0x9d, 0xce, 0x8e, 0x30, 0x1d, 0xfd, 0x44,
+	0x35, 0xc8, 0x6c, 0x6d, 0x88, 0x89, 0x66, 0xb6, 0x36, 0xf0, 0x17, 0x1a, 0x20, 0x75, 0xdc, 0x44,
+	0xb6, 0x8c, 0x08, 0x97, 0xf0, 0xd9, 0x00, 0x7e, 0x1e, 0x72, 0xc4, 0x71, 0x6c, 0x87, 0x59, 0xad,
+	0xa4, 0xf3, 0x06, 0x7e, 0x28, 0x74, 0xd0, 0xc9, 0xd8, 0x3e, 0xf7, 0xcf, 0x0c, 0x97, 0xa6, 0xf9,
+	0xaa, 0x6e, 0xc3, 0x5c, 0x88, 0x6b, 0xa2, 0xc0, 0xf0, 0x18, 0x16, 0x98, 0xb0, 0x6d, 0x42, 0x86,
+	0x6b, 0x7d, 0x73, 0x9c, 0x8a, 0x3a, 0x84, 0x1b, 0x51, 0xc6, 0x9f, 0xd6, 0x46, 0xf8, 0x4f, 0x05,
+	0x62, 0xc7, 0x1c, 0x90, 0x8e, 0xbd, 0x93, 0xae, 0x1b, 0x75, 0x9c, 0xe7, 0xe4, 0xd2, 0x15, 0x11,
+	0x94, 0x7d, 0xe3, 0x7f, 0xd1, 0xe0, 0x66, 0x6c, 0xf8, 0x4f, 0xbc, 0xaa, 0x8b, 0x00, 0xa7, 0x74,
+	0xfb, 0x90, 0x1e, 0xed, 0xe0, 0x97, 0x77, 0x85, 0xe2, 0xeb, 0x49, 0x7d, 0x4f, 0x45, 0xe8, 0x39,
+	0x2f, 0xd6, 0x9c, 0xfd, 0x71, 0x65, 0xf8, 0xb9, 0x0b, 0x65, 0x46, 0x38, 0xf0, 0x0c, 0x6f, 0xe4,
+	0xc6, 0x16, 0xe3, 0xaf, 0xc5, 0x16, 0x90, 0x83, 0x26, 0x9a, 0xd7, 0x2f, 0x21, 0xcf, 0xf2, 0x56,
+	0x99, 0xb5, 0x45, 0x2e, 0x0a, 0x8a, 0x1e, 0xba, 0x60, 0xc4, 0x67, 0x90, 0x7f, 0xc9, 0x8a, 0x7d,
+	0x8a, 0x66, 0xd3, 0x72, 0x29, 0x2c, 0x63, 0xc0, 0x4b, 0x10, 0x25, 0x9d, 0x7d, 0xb3, 0x24, 0x87,
+	0x10, 0xe7, 0x50, 0xdf, 0xe1, 0xc9, 0x54, 0x49, 0xf7, 0xdb, 0xd4, 0x64, 0xdd, 0xbe, 0x49, 0x2c,
+	0x8f, 0xf5, 0x4e, 0xb3, 0x5e, 0x85, 0x82, 0x57, 0xa0, 0xce, 0x91, 0xd6, 0x7a, 0x3d, 0x25, 0x59,
+	0xf1, 0xe5, 0x69, 0x61, 0x79, 0xf8, 0x5f, 0x35, 0x98, 0x55, 0x06, 0x4c, 0x64, 0x98, 0xf7, 0x20,
+	0xcf, 0x4b, 0x9a, 0x22, 0x2e, 0xce, 0x87, 0x47, 0x71, 0x18, 0x5d, 0xf0, 0xa0, 0x15, 0x28, 0xf0,
+	0x2f, 0x99, 0x31, 0x26, 0xb3, 0x4b, 0x26, 0xfc, 0x08, 0xe6, 0x04, 0x89, 0x0c, 0xec, 0xa4, 0xbd,
+	0xcd, 0x0c, 0x8a, 0xff, 0x0a, 0xe6, 0xc3, 0x6c, 0x13, 0x4d, 0x49, 0x51, 0x32, 0xf3, 0x36, 0x4a,
+	0xae, 0x49, 0x25, 0x0f, 0x87, 0x3d, 0x25, 0x8c, 0x47, 0x57, 0x5d, 0x5d, 0x91, 0x4c, 0x64, 0x45,
+	0xfc, 0x09, 0x48, 0x11, 0x3f, 0xeb, 0x04, 0xe6, 0xe4, 0x76, 0xd8, 0x31, 0x5d, 0x3f, 0xb9, 0xfb,
+	0x0c, 0x90, 0x4a, 0xfc, 0xb9, 0x15, 0xda, 0x20, 0x27, 0x8e, 0x71, 0x3a, 0x20, 0x7e, 0x7c, 0xa2,
+	0xa9, 0xbe, 0x4a, 0x9c, 0xc8, 0xa3, 0xb7, 0x60, 0xf6, 0xa5, 0x3d, 0xa6, 0xae, 0x81, 0x52, 0x83,
+	0x23, 0xc3, 0xaf, 0x7a, 0xfe, 0xb2, 0xf9, 0x6d, 0x0a, 0xae, 0x0e, 0x98, 0x08, 0xfc, 0xbf, 0x34,
+	0xa8, 0xac, 0xf5, 0x0d, 0x67, 0x20, 0x81, 0x7f, 0x03, 0x79, 0x7e, 0x81, 0x11, 0x35, 0x83, 0x77,
+	0xc2, 0x62, 0x54, 0x5e, 0xde, 0x58, 0xe3, 0xd7, 0x1d, 0x31, 0x8a, 0x2a, 0x2e, 0x9e, 0x15, 0x36,
+	0x22, 0xcf, 0x0c, 0x1b, 0xe8, 0x7d, 0xc8, 0x19, 0x74, 0x08, 0x73, 0xc1, 0xb5, 0xe8, 0xd5, 0x91,
+	0x49, 0x63, 0x79, 0x1b, 0xe7, 0xc2, 0xbf, 0x86, 0xb2, 0x82, 0x40, 0x2f, 0xc7, 0x2f, 0xda, 0x22,
+	0x01, 0x5b, 0x5b, 0xef, 0x6c, 0xbd, 0xe2, 0x77, 0xe6, 0x1a, 0xc0, 0x46, 0xdb, 0x6f, 0x67, 0xf0,
+	0x47, 0x62, 0x94, 0xf0, 0x77, 0xaa, 0x3e, 0x5a, 0x9a, 0x3e, 0x99, 0xb7, 0xd2, 0xe7, 0x02, 0xaa,
+	0x62, 0xfa, 0x93, 0xba, 0x6f, 0x26, 0x2f, 0xc5, 0x7d, 0x2b, 0xca, 0xeb, 0x82, 0x11, 0xcf, 0x40,
+	0x55, 0x38, 0x74, 0xb1, 0xff, 0xfe, 0x2d, 0x03, 0x35, 0x49, 0x99, 0xb4, 0xb6, 0x29, 0xcb, 0x32,
+	0x3c, 0x02, 0xf8, 0x45, 0x99, 0x1b, 0x90, 0xef, 0x1d, 0x1f, 0x98, 0x9f, 0xc9, 0x3a, 0xb4, 0x68,
+	0x51, 0x7a, 0x9f, 0xe3, 0xf0, 0xc7, 0x20, 0xd1, 0xa2, 0x17, 0x74, 0xc7, 0x38, 0xf1, 0xb6, 0xac,
+	0x1e, 0xb9, 0x60, 0x79, 0xe3, 0xb4, 0x1e, 0x10, 0xd8, 0x7d, 0x55, 0x3c, 0x1a, 0xb1, 0x64, 0x51,
+	0x79, 0x44, 0x42, 0x4f, 0xa0, 0x4e, 0xbf, 0xd7, 0x86, 0xc3, 0xbe, 0x49, 0x7a, 0x5c, 0x40, 0x81,
+	0xf1, 0xc4, 0xe8, 0x14, 0x9d, 0xa5, 0x5e, 0x6e, 0xa3, 0xc8, 0xdc, 0x96, 0x68, 0xa1, 0x25, 0x28,
+	0x73, 0xfd, 0xb6, 0xac, 0x43, 0x97, 0xb0, 0x97, 0x94, 0xac, 0xae, 0x92, 0xe8, 0x39, 0x5e, 0x1b,
+	0x79, 0x67, 0x6d, 0xcb, 0x38, 0xee, 0x4b, 0xbf, 0x48, 0x83, 0x39, 0x25, 0x6e, 0x98, 0xae, 0x4a,
+	0x6d, 0xc3, 0x1c, 0xa5, 0x12, 0xcb, 0x33, 0xbb, 0x8a, 0x13, 0x95, 0xa1, 0x52, 0x8b, 0x84, 0x4a,
+	0xc3, 0x75, 0x5f, 0xdb, 0x4e, 0x4f, 0x18, 0xd0, 0x6f, 0xe3, 0x0d, 0x2e, 0xfc, 0xd0, 0x0d, 0x05,
+	0xc3, 0xef, 0x2b, 0x65, 0x39, 0x90, 0xf2, 0x82, 0x78, 0x57, 0x48, 0xc1, 0x4f, 0x61, 0x41, 0x72,
+	0x8a, 0xea, 0xe2, 0x15, 0xcc, 0x7b, 0x70, 0x57, 0x32, 0xaf, 0x9f, 0xd1, 0xeb, 0xdb, 0xbe, 0x00,
+	0xfc, 0xa1, 0x7a, 0x3e, 0x87, 0x86, 0xaf, 0x27, 0x4b, 0xc9, 0xed, 0xbe, 0xaa, 0xc0, 0xc8, 0x15,
+	0x3b, 0xb3, 0xa4, 0xb3, 0x6f, 0x4a, 0x73, 0xec, 0xbe, 0x9f, 0x78, 0xd0, 0x6f, 0xbc, 0x0e, 0xb7,
+	0xa4, 0x0c, 0x91, 0x2c, 0x87, 0x85, 0xc4, 0x14, 0x4a, 0x12, 0x22, 0x0c, 0x46, 0x87, 0x5e, 0x6d,
+	0x76, 0x95, 0x33, 0x6c, 0x5a, 0x26, 0x53, 0x53, 0x64, 0x2e, 0xf0, 0x1d, 0x41, 0x15, 0x53, 0xe3,
+	0x92, 0x20, 0x53, 0x01, 0x2a, 0x59, 0x2c, 0x04, 0x25, 0xc7, 0x16, 0x22, 0x26, 0xfa, 0x13, 0x58,
+	0xf4, 0x95, 0xa0, 0x76, 0xdb, 0x27, 0xce, 0xc0, 0x74, 0x5d, 0xa5, 0x1e, 0x95, 0x34, 0xf1, 0x77,
+	0x60, 0x7a, 0x48, 0x84, 0xe7, 0x2a, 0xaf, 0xa2, 0x15, 0xfe, 0x80, 0xbc, 0xa2, 0x0c, 0x66, 0xfd,
+	0xb8, 0x07, 0xf7, 0xa4, 0x74, 0x6e, 0xd1, 0x44, 0xf1, 0x51, 0xa5, 0xe4, 0xb5, 0x9f, 0x9b, 0x35,
+	0x7e, 0xed, 0xcf, 0xf2, 0xb5, 0xf7, 0x6b, 0xa4, 0xbf, 0xe7, 0x86, 0x94, 0x67, 0x6b, 0xa2, 0x88,
+	0xb4, 0xcd, 0x6d, 0xea, 0x1f, 0xc9, 0x89, 0x84, 0x1d, 0xc3, 0x7c, 0xf8, 0x24, 0x4f, 0xe4, 0x2c,
+	0xe7, 0x21, 0xe7, 0xd9, 0xe7, 0x44, 0xba, 0x4a, 0xde, 0x90, 0x0a, 0xfb, 0xc7, 0x7c, 0x22, 0x85,
+	0x8d, 0x40, 0x18, 0xdb, 0x92, 0x93, 0xea, 0x4b, 0x57, 0x53, 0xa6, 0x78, 0xbc, 0x81, 0x77, 0xe1,
+	0x46, 0xd4, 0x4d, 0x4c, 0xa4, 0xf2, 0x2b, 0xbe, 0x81, 0x93, 0x3c, 0xc9, 0x44, 0x72, 0x3f, 0x08,
+	0x9c, 0x81, 0xe2, 0x50, 0x26, 0x12, 0xa9, 0x43, 0x33, 0xc9, 0xbf, 0xfc, 0x18, 0xfb, 0xd5, 0x77,
+	0x37, 0x13, 0x09, 0x73, 0x03, 0x61, 0x93, 0x2f, 0x7f, 0xe0, 0x23, 0xb2, 0x57, 0xfa, 0x08, 0x71,
+	0x48, 0x02, 0x2f, 0xf6, 0x13, 0x6c, 0x3a, 0x81, 0x11, 0x38, 0xd0, 0x49, 0x31, 0x68, 0x0c, 0xf1,
+	0x31, 0x58, 0x43, 0x6e, 0x6c, 0xd5, 0xed, 0x4e, 0xb4, 0x18, 0x1f, 0x06, 0xbe, 0x33, 0xe6, 0x99,
+	0x27, 0x12, 0xfc, 0x11, 0x2c, 0xa5, 0x3b, 0xe5, 0x49, 0x24, 0x3f, 0x69, 0x41, 0xc9, 0x4f, 0x5b,
+	0x95, 0x1f, 0x5f, 0x94, 0xa1, 0xb0, 0xbb, 0x77, 0xb0, 0xbf, 0xb6, 0xde, 0xe6, 0xbf, 0xbe, 0x58,
+	0xdf, 0xd3, 0xf5, 0xc3, 0xfd, 0x4e, 0x3d, 0xb3, 0xfa, 0x5d, 0x16, 0x32, 0xdb, 0xaf, 0xd0, 0xc7,
+	0x90, 0xe3, 0x4f, 0x91, 0x57, 0xbc, 0x3f, 0x37, 0xaf, 0x7a, 0x6d, 0xc5, 0x37, 0xbf, 0xf8, 0x9f,
+	0xef, 0xbe, 0xce, 0xcc, 0xe2, 0x4a, 0x6b, 0xfc, 0xab, 0xd6, 0xf9, 0xb8, 0xc5, 0x62, 0xc3, 0x33,
+	0xed, 0x09, 0xfa, 0x00, 0xb2, 0xfb, 0x23, 0x0f, 0xa5, 0xbe, 0x4b, 0x37, 0xd3, 0x1f, 0x60, 0xf1,
+	0x02, 0x13, 0x3a, 0x83, 0x41, 0x08, 0x1d, 0x8e, 0x3c, 0x2a, 0xf2, 0x53, 0x28, 0xab, 0xcf, 0xa7,
+	0xd7, 0x3e, 0x56, 0x37, 0xaf, 0x7f, 0x9a, 0xc5, 0x77, 0x19, 0xd4, 0x4d, 0x8c, 0x04, 0x14, 0x7f,
+	0xe0, 0x55, 0x67, 0xd1, 0xb9, 0xb0, 0x50, 0xea, 0x53, 0x76, 0x33, 0xfd, 0xb5, 0x36, 0x36, 0x0b,
+	0xef, 0xc2, 0xa2, 0x22, 0xff, 0x42, 0x3c, 0xd4, 0x76, 0x3d, 0x74, 0x2f, 0xe1, 0xa1, 0x4e, 0x7d,
+	0x92, 0x6a, 0x2e, 0xa5, 0x33, 0x08, 0x90, 0x3b, 0x0c, 0xe4, 0x06, 0x9e, 0x15, 0x20, 0x5d, 0x9f,
+	0xe5, 0x99, 0xf6, 0x64, 0xb5, 0x0b, 0x39, 0x56, 0x73, 0x46, 0x7f, 0x26, 0x3f, 0x9a, 0x09, 0x85,
+	0xf4, 0x94, 0x85, 0x0e, 0x55, 0xab, 0xf1, 0x3c, 0x03, 0xaa, 0xe1, 0x12, 0x05, 0x62, 0x15, 0xe7,
+	0x67, 0xda, 0x93, 0x65, 0xed, 0x17, 0xda, 0xea, 0x9b, 0x69, 0xc8, 0xb1, 0xe2, 0x13, 0x3a, 0x07,
+	0x08, 0x6a, 0xb3, 0xd1, 0xd9, 0xc5, 0xaa, 0xbd, 0xd1, 0xd9, 0xc5, 0xcb, 0xba, 0xb8, 0xc9, 0x40,
+	0xe7, 0xf1, 0x0c, 0x05, 0x65, 0x35, 0xad, 0x16, 0x2b, 0xd3, 0x51, 0x3b, 0x3a, 0xa2, 0xf4, 0xc6,
+	0x8f, 0x12, 0x4a, 0x12, 0x16, 0xaa, 0xcf, 0x46, 0x77, 0x43, 0x42, 0x6d, 0x16, 0x2f, 0x32, 0xbc,
+	0x06, 0x9e, 0x13, 0xd6, 0xe4, 0x90, 0x0e, 0x63, 0xa2, 0x98, 0x9f, 0x43, 0x2d, 0x5c, 0x5c, 0x45,
+	0x0f, 0x12, 0x84, 0x46, 0x6b, 0xb4, 0xcd, 0x87, 0x57, 0x33, 0x25, 0x81, 0x73, 0xe4, 0x73, 0x42,
+	0x86, 0x06, 0x65, 0x12, 0xb6, 0x46, 0x5f, 0x68, 0x30, 0x13, 0xa9, 0x96, 0xa2, 0x24, 0xe9, 0xb1,
+	0x5a, 0x6c, 0xf3, 0xd1, 0x35, 0x5c, 0x42, 0x09, 0xcc, 0x94, 0xb8, 0x83, 0x6f, 0x86, 0x2c, 0xe0,
+	0x99, 0x03, 0xe2, 0xd9, 0x42, 0x11, 0xdf, 0xf2, 0xbc, 0xaa, 0x99, 0x68, 0xf9, 0x50, 0x95, 0x34,
+	0xd1, 0xf2, 0xe1, 0x92, 0x68, 0x8a, 0xe5, 0x79, 0x19, 0x93, 0xee, 0x64, 0xf6, 0xfb, 0x06, 0xfe,
+	0xab, 0x46, 0x64, 0x43, 0xc9, 0x2f, 0x1d, 0xa2, 0xc5, 0xa4, 0x32, 0x4e, 0x70, 0x01, 0x68, 0xde,
+	0x4b, 0xed, 0x17, 0xc8, 0xf7, 0x19, 0xf2, 0x6d, 0x7c, 0x83, 0x22, 0x8b, 0x1f, 0x4e, 0xb6, 0x78,
+	0xad, 0xa0, 0x65, 0xf4, 0x7a, 0x74, 0xc2, 0x7f, 0x09, 0x15, 0xb5, 0xb6, 0x87, 0xee, 0x27, 0x96,
+	0x8e, 0xd4, 0xf2, 0x60, 0x13, 0x5f, 0xc5, 0x22, 0x90, 0x1f, 0x32, 0xe4, 0x45, 0x7c, 0x2b, 0x01,
+	0xd9, 0x61, 0xac, 0x21, 0x70, 0x5e, 0x97, 0x4b, 0x06, 0x0f, 0x95, 0xfd, 0x92, 0xc1, 0xc3, 0x65,
+	0xbd, 0x2b, 0xc1, 0x47, 0x8c, 0x95, 0x82, 0xbb, 0x00, 0x41, 0x05, 0x0e, 0x25, 0xda, 0x52, 0xb9,
+	0x01, 0x45, 0x4f, 0x74, 0xbc, 0x78, 0x17, 0xde, 0x5f, 0x11, 0xd8, 0xbe, 0xe9, 0xd2, 0x93, 0xbd,
+	0xfa, 0x77, 0x79, 0x28, 0xbf, 0x34, 0x4c, 0xcb, 0x23, 0x96, 0x61, 0x75, 0x09, 0x3a, 0x86, 0x1c,
+	0x8b, 0x6e, 0x51, 0xe7, 0xa5, 0x16, 0xa5, 0xa2, 0xce, 0x2b, 0x54, 0xb1, 0xc1, 0x4b, 0x0c, 0xb5,
+	0x89, 0x17, 0x28, 0xea, 0x20, 0x10, 0xdd, 0x62, 0x85, 0x16, 0x3a, 0xd1, 0x13, 0xc8, 0x8b, 0x1a,
+	0x7e, 0x44, 0x50, 0xa8, 0x00, 0xd3, 0xbc, 0x93, 0xdc, 0x99, 0xb4, 0x95, 0x54, 0x18, 0x97, 0xf1,
+	0x51, 0x9c, 0x31, 0x40, 0x50, 0x41, 0x8c, 0x1a, 0x34, 0x56, 0x70, 0x6c, 0x2e, 0xa5, 0x33, 0x08,
+	0xcc, 0x47, 0x0c, 0xf3, 0x1e, 0x6e, 0x46, 0x31, 0x7b, 0x3e, 0x2f, 0xc5, 0xfd, 0x73, 0x98, 0xde,
+	0x34, 0xdc, 0x33, 0x14, 0x89, 0x57, 0xca, 0x8f, 0x0d, 0x9a, 0xcd, 0xa4, 0x2e, 0x81, 0x72, 0x8f,
+	0xa1, 0xdc, 0xc2, 0xf3, 0x51, 0x94, 0x33, 0xc3, 0xa5, 0x81, 0x00, 0xf5, 0x20, 0xcf, 0x7f, 0x7b,
+	0x10, 0xb5, 0x5f, 0xe8, 0xf7, 0x0b, 0x51, 0xfb, 0x85, 0x7f, 0xae, 0x70, 0x3d, 0xca, 0x10, 0x8a,
+	0xf2, 0xb1, 0x1f, 0xdd, 0x8d, 0x2c, 0x45, 0xf8, 0x87, 0x01, 0xcd, 0xc5, 0xb4, 0x6e, 0x81, 0xf5,
+	0x80, 0x61, 0xdd, 0xc5, 0x8d, 0xd8, 0x5a, 0x09, 0xce, 0x67, 0xda, 0x93, 0x5f, 0x68, 0xe8, 0x73,
+	0x80, 0xa0, 0xe8, 0x1a, 0x3b, 0x00, 0xd1, 0xfa, 0x6d, 0xec, 0x00, 0xc4, 0xea, 0xb5, 0x78, 0x85,
+	0xe1, 0x2e, 0xe3, 0x07, 0x51, 0x5c, 0xcf, 0x31, 0x2c, 0xf7, 0x84, 0x38, 0xef, 0xf3, 0xc2, 0x9a,
+	0x7b, 0x66, 0x0e, 0xe9, 0x61, 0xf8, 0x8f, 0x19, 0x98, 0xa6, 0x59, 0x23, 0x0d, 0xae, 0xc1, 0x65,
+	0x3b, 0xaa, 0x49, 0xac, 0xc4, 0x15, 0xd5, 0x24, 0x7e, 0x4f, 0x0f, 0x07, 0x57, 0xf6, 0x73, 0x74,
+	0xc2, 0x18, 0xa8, 0xa1, 0x6d, 0x28, 0x2b, 0xb7, 0x71, 0x94, 0x20, 0x2c, 0x5c, 0x3b, 0x8b, 0xba,
+	0xf8, 0x84, 0xab, 0x3c, 0xbe, 0xcd, 0xf0, 0x16, 0x70, 0xdd, 0xc7, 0xeb, 0x71, 0x0e, 0x0a, 0xf8,
+	0x1a, 0x2a, 0xea, 0x8d, 0x1d, 0x25, 0xc8, 0x8b, 0xd4, 0xe5, 0xa2, 0x5e, 0x2e, 0xe9, 0xc2, 0x1f,
+	0x3e, 0xf8, 0xfe, 0x4f, 0xee, 0x25, 0x1b, 0x05, 0xee, 0x43, 0x41, 0x5c, 0xe1, 0x93, 0x66, 0x19,
+	0x2e, 0xe2, 0x25, 0xcd, 0x32, 0x72, 0xff, 0x0f, 0x27, 0x64, 0x0c, 0x91, 0xde, 0x52, 0x64, 0x24,
+	0x11, 0x68, 0x2f, 0x88, 0x97, 0x86, 0x16, 0x54, 0xa4, 0xd2, 0xd0, 0x94, 0x1b, 0x62, 0x1a, 0xda,
+	0x29, 0xf1, 0xc4, 0x71, 0x91, 0x37, 0x2f, 0x94, 0x22, 0x4c, 0xf5, 0xde, 0xf8, 0x2a, 0x96, 0xa4,
+	0x7c, 0x39, 0x00, 0x14, 0xae, 0x1b, 0x5d, 0x00, 0x04, 0x05, 0x86, 0x68, 0x72, 0x94, 0x58, 0xa5,
+	0x8c, 0x26, 0x47, 0xc9, 0x35, 0x8a, 0xb0, 0x6b, 0x08, 0x70, 0x79, 0xba, 0x4e, 0x91, 0xbf, 0xd2,
+	0x00, 0xc5, 0x6b, 0x11, 0xe8, 0x69, 0xb2, 0xf4, 0xc4, 0xda, 0x67, 0xf3, 0xbd, 0xb7, 0x63, 0x4e,
+	0xf2, 0xf6, 0x81, 0x4a, 0x5d, 0xc6, 0x3d, 0x7c, 0x4d, 0x95, 0xfa, 0x1b, 0x0d, 0xaa, 0xa1, 0x42,
+	0x06, 0x7a, 0x27, 0x65, 0x4d, 0x23, 0xa5, 0xd3, 0xe6, 0xe3, 0x6b, 0xf9, 0x92, 0x12, 0x27, 0x65,
+	0x07, 0xc8, 0x34, 0xf9, 0x4b, 0x0d, 0x6a, 0xe1, 0xc2, 0x07, 0x4a, 0x91, 0x1d, 0x2b, 0xbd, 0x36,
+	0x97, 0xaf, 0x67, 0xbc, 0x7a, 0x79, 0x82, 0xcc, 0xb9, 0x0f, 0x05, 0x51, 0x2a, 0x49, 0xda, 0xf8,
+	0xe1, 0xa2, 0x6d, 0xd2, 0xc6, 0x8f, 0xd4, 0x59, 0x12, 0x36, 0xbe, 0x63, 0xf7, 0x89, 0x72, 0xcc,
+	0x44, 0x2d, 0x25, 0x0d, 0xed, 0xea, 0x63, 0x16, 0x29, 0xc4, 0xa4, 0xa1, 0x05, 0xc7, 0x4c, 0x16,
+	0x51, 0x50, 0x8a, 0xb0, 0x6b, 0x8e, 0x59, 0xb4, 0x06, 0x93, 0x70, 0xcc, 0x18, 0xa0, 0x72, 0xcc,
+	0x82, 0x72, 0x47, 0xd2, 0x31, 0x8b, 0xd5, 0xa0, 0x93, 0x8e, 0x59, 0xbc, 0x62, 0x92, 0xb0, 0x8e,
+	0x0c, 0x37, 0x74, 0xcc, 0xe6, 0x12, 0x2a, 0x23, 0xe8, 0xbd, 0x14, 0x23, 0x26, 0x96, 0xb6, 0x9b,
+	0xef, 0xbf, 0x25, 0x77, 0xea, 0x1e, 0xe7, 0xe6, 0x97, 0x7b, 0xfc, 0x1f, 0x34, 0x98, 0x4f, 0xaa,
+	0xaa, 0xa0, 0x14, 0x9c, 0x94, 0x92, 0x78, 0x73, 0xe5, 0x6d, 0xd9, 0xaf, 0xb6, 0x96, 0xbf, 0xeb,
+	0x9f, 0xd7, 0xff, 0xf3, 0xcd, 0xa2, 0xf6, 0xdf, 0x6f, 0x16, 0xb5, 0xff, 0x7d, 0xb3, 0xa8, 0xfd,
+	0xe3, 0xff, 0x2d, 0x4e, 0x1d, 0xe7, 0xd9, 0x7f, 0xe4, 0xfa, 0xd5, 0x1f, 0x02, 0x00, 0x00, 0xff,
+	0xff, 0xbf, 0x57, 0x39, 0x98, 0x4f, 0x36, 0x00, 0x00,
 }

+ 2 - 2
etcdserver/etcdserverpb/rpc.proto

@@ -2,8 +2,8 @@ syntax = "proto3";
 package etcdserverpb;
 
 import "gogoproto/gogo.proto";
-import "etcd/internal/mvcc/mvccpb/kv.proto";
-import "etcd/internal/auth/authpb/auth.proto";
+import "etcd/mvcc/mvccpb/kv.proto";
+import "etcd/auth/authpb/auth.proto";
 
 // for grpc-gateway
 import "google/api/annotations.proto";

+ 21 - 21
etcdserver/membership/cluster.go

@@ -27,13 +27,13 @@ import (
 	"sync"
 	"time"
 
-	"github.com/coreos/etcd/internal/mvcc/backend"
-	"github.com/coreos/etcd/internal/store"
-	"github.com/coreos/etcd/internal/version"
+	"github.com/coreos/etcd/etcdserver/v2store"
+	"github.com/coreos/etcd/mvcc/backend"
 	"github.com/coreos/etcd/pkg/netutil"
 	"github.com/coreos/etcd/pkg/types"
 	"github.com/coreos/etcd/raft"
 	"github.com/coreos/etcd/raft/raftpb"
+	"github.com/coreos/etcd/version"
 
 	"github.com/coreos/go-semver/semver"
 )
@@ -43,8 +43,8 @@ type RaftCluster struct {
 	id    types.ID
 	token string
 
-	store store.Store
-	be    backend.Backend
+	v2store v2store.Store
+	be      backend.Backend
 
 	sync.Mutex // guards the fields below
 	version    *semver.Version
@@ -196,7 +196,7 @@ func (c *RaftCluster) genID() {
 
 func (c *RaftCluster) SetID(id types.ID) { c.id = id }
 
-func (c *RaftCluster) SetStore(st store.Store) { c.store = st }
+func (c *RaftCluster) SetStore(st v2store.Store) { c.v2store = st }
 
 func (c *RaftCluster) SetBackend(be backend.Backend) {
 	c.be = be
@@ -207,8 +207,8 @@ func (c *RaftCluster) Recover(onSet func(*semver.Version)) {
 	c.Lock()
 	defer c.Unlock()
 
-	c.members, c.removed = membersFromStore(c.store)
-	c.version = clusterVersionFromStore(c.store)
+	c.members, c.removed = membersFromStore(c.v2store)
+	c.version = clusterVersionFromStore(c.v2store)
 	mustDetectDowngrade(c.version)
 	onSet(c.version)
 
@@ -223,7 +223,7 @@ func (c *RaftCluster) Recover(onSet func(*semver.Version)) {
 // ValidateConfigurationChange takes a proposed ConfChange and
 // ensures that it is still valid.
 func (c *RaftCluster) ValidateConfigurationChange(cc raftpb.ConfChange) error {
-	members, removed := membersFromStore(c.store)
+	members, removed := membersFromStore(c.v2store)
 	id := types.ID(cc.NodeID)
 	if removed[id] {
 		return ErrIDRemoved
@@ -286,8 +286,8 @@ func (c *RaftCluster) ValidateConfigurationChange(cc raftpb.ConfChange) error {
 func (c *RaftCluster) AddMember(m *Member) {
 	c.Lock()
 	defer c.Unlock()
-	if c.store != nil {
-		mustSaveMemberToStore(c.store, m)
+	if c.v2store != nil {
+		mustSaveMemberToStore(c.v2store, m)
 	}
 	if c.be != nil {
 		mustSaveMemberToBackend(c.be, m)
@@ -303,8 +303,8 @@ func (c *RaftCluster) AddMember(m *Member) {
 func (c *RaftCluster) RemoveMember(id types.ID) {
 	c.Lock()
 	defer c.Unlock()
-	if c.store != nil {
-		mustDeleteMemberFromStore(c.store, id)
+	if c.v2store != nil {
+		mustDeleteMemberFromStore(c.v2store, id)
 	}
 	if c.be != nil {
 		mustDeleteMemberFromBackend(c.be, id)
@@ -321,8 +321,8 @@ func (c *RaftCluster) UpdateAttributes(id types.ID, attr Attributes) {
 	defer c.Unlock()
 	if m, ok := c.members[id]; ok {
 		m.Attributes = attr
-		if c.store != nil {
-			mustUpdateMemberAttrInStore(c.store, m)
+		if c.v2store != nil {
+			mustUpdateMemberAttrInStore(c.v2store, m)
 		}
 		if c.be != nil {
 			mustSaveMemberToBackend(c.be, m)
@@ -341,8 +341,8 @@ func (c *RaftCluster) UpdateRaftAttributes(id types.ID, raftAttr RaftAttributes)
 	defer c.Unlock()
 
 	c.members[id].RaftAttributes = raftAttr
-	if c.store != nil {
-		mustUpdateMemberInStore(c.store, c.members[id])
+	if c.v2store != nil {
+		mustUpdateMemberInStore(c.v2store, c.members[id])
 	}
 	if c.be != nil {
 		mustSaveMemberToBackend(c.be, c.members[id])
@@ -370,8 +370,8 @@ func (c *RaftCluster) SetVersion(ver *semver.Version, onSet func(*semver.Version
 	}
 	c.version = ver
 	mustDetectDowngrade(c.version)
-	if c.store != nil {
-		mustSaveClusterVersionToStore(c.store, ver)
+	if c.v2store != nil {
+		mustSaveClusterVersionToStore(c.v2store, ver)
 	}
 	if c.be != nil {
 		mustSaveClusterVersionToBackend(c.be, ver)
@@ -431,7 +431,7 @@ func (c *RaftCluster) IsReadyToRemoveMember(id uint64) bool {
 	return true
 }
 
-func membersFromStore(st store.Store) (map[types.ID]*Member, map[types.ID]bool) {
+func membersFromStore(st v2store.Store) (map[types.ID]*Member, map[types.ID]bool) {
 	members := make(map[types.ID]*Member)
 	removed := make(map[types.ID]bool)
 	e, err := st.Get(StoreMembersPrefix, true, true)
@@ -463,7 +463,7 @@ func membersFromStore(st store.Store) (map[types.ID]*Member, map[types.ID]bool)
 	return members, removed
 }
 
-func clusterVersionFromStore(st store.Store) *semver.Version {
+func clusterVersionFromStore(st v2store.Store) *semver.Version {
 	e, err := st.Get(path.Join(storePrefix, "version"), false, false)
 	if err != nil {
 		if isKeyNotFound(err) {

+ 12 - 12
etcdserver/membership/cluster_test.go

@@ -21,7 +21,7 @@ import (
 	"reflect"
 	"testing"
 
-	"github.com/coreos/etcd/internal/store"
+	"github.com/coreos/etcd/etcdserver/v2store"
 	"github.com/coreos/etcd/pkg/mock/mockstore"
 	"github.com/coreos/etcd/pkg/testutil"
 	"github.com/coreos/etcd/pkg/types"
@@ -275,7 +275,7 @@ func TestClusterValidateAndAssignIDs(t *testing.T) {
 
 func TestClusterValidateConfigurationChange(t *testing.T) {
 	cl := NewCluster("")
-	cl.SetStore(store.New())
+	cl.SetStore(v2store.New())
 	for i := 1; i <= 4; i++ {
 		attr := RaftAttributes{PeerURLs: []string{fmt.Sprintf("http://127.0.0.1:%d", i)}}
 		cl.AddMember(&Member{ID: types.ID(i), RaftAttributes: attr})
@@ -416,25 +416,25 @@ func TestClusterGenID(t *testing.T) {
 }
 
 func TestNodeToMemberBad(t *testing.T) {
-	tests := []*store.NodeExtern{
-		{Key: "/1234", Nodes: []*store.NodeExtern{
+	tests := []*v2store.NodeExtern{
+		{Key: "/1234", Nodes: []*v2store.NodeExtern{
 			{Key: "/1234/strange"},
 		}},
-		{Key: "/1234", Nodes: []*store.NodeExtern{
+		{Key: "/1234", Nodes: []*v2store.NodeExtern{
 			{Key: "/1234/raftAttributes", Value: stringp("garbage")},
 		}},
-		{Key: "/1234", Nodes: []*store.NodeExtern{
+		{Key: "/1234", Nodes: []*v2store.NodeExtern{
 			{Key: "/1234/attributes", Value: stringp(`{"name":"node1","clientURLs":null}`)},
 		}},
-		{Key: "/1234", Nodes: []*store.NodeExtern{
+		{Key: "/1234", Nodes: []*v2store.NodeExtern{
 			{Key: "/1234/raftAttributes", Value: stringp(`{"peerURLs":null}`)},
 			{Key: "/1234/strange"},
 		}},
-		{Key: "/1234", Nodes: []*store.NodeExtern{
+		{Key: "/1234", Nodes: []*v2store.NodeExtern{
 			{Key: "/1234/raftAttributes", Value: stringp(`{"peerURLs":null}`)},
 			{Key: "/1234/attributes", Value: stringp("garbage")},
 		}},
-		{Key: "/1234", Nodes: []*store.NodeExtern{
+		{Key: "/1234", Nodes: []*v2store.NodeExtern{
 			{Key: "/1234/raftAttributes", Value: stringp(`{"peerURLs":null}`)},
 			{Key: "/1234/attributes", Value: stringp(`{"name":"node1","clientURLs":null}`)},
 			{Key: "/1234/strange"},
@@ -461,7 +461,7 @@ func TestClusterAddMember(t *testing.T) {
 				false,
 				`{"peerURLs":null}`,
 				false,
-				store.TTLOptionSet{ExpireTime: store.Permanent},
+				v2store.TTLOptionSet{ExpireTime: v2store.Permanent},
 			},
 		},
 	}
@@ -500,7 +500,7 @@ func TestClusterRemoveMember(t *testing.T) {
 
 	wactions := []testutil.Action{
 		{Name: "Delete", Params: []interface{}{MemberStoreKey(1), true, true}},
-		{Name: "Create", Params: []interface{}{RemovedMemberStoreKey(1), false, "", false, store.TTLOptionSet{ExpireTime: store.Permanent}}},
+		{Name: "Create", Params: []interface{}{RemovedMemberStoreKey(1), false, "", false, v2store.TTLOptionSet{ExpireTime: v2store.Permanent}}},
 	}
 	if !reflect.DeepEqual(st.Action(), wactions) {
 		t.Errorf("actions = %v, want %v", st.Action(), wactions)
@@ -544,7 +544,7 @@ func TestClusterUpdateAttributes(t *testing.T) {
 }
 
 func TestNodeToMember(t *testing.T) {
-	n := &store.NodeExtern{Key: "/1234", Nodes: []*store.NodeExtern{
+	n := &v2store.NodeExtern{Key: "/1234", Nodes: []*v2store.NodeExtern{
 		{Key: "/1234/attributes", Value: stringp(`{"name":"node1","clientURLs":null}`)},
 		{Key: "/1234/raftAttributes", Value: stringp(`{"peerURLs":null}`)},
 	}}

+ 3 - 3
etcdserver/membership/errors.go

@@ -17,7 +17,7 @@ package membership
 import (
 	"errors"
 
-	etcdErr "github.com/coreos/etcd/error"
+	"github.com/coreos/etcd/etcdserver/v2error"
 )
 
 var (
@@ -28,6 +28,6 @@ var (
 )
 
 func isKeyNotFound(err error) bool {
-	e, ok := err.(*etcdErr.Error)
-	return ok && e.ErrorCode == etcdErr.EcodeKeyNotFound
+	e, ok := err.(*v2error.Error)
+	return ok && e.ErrorCode == v2error.EcodeKeyNotFound
 }

+ 13 - 13
etcdserver/membership/store.go

@@ -19,8 +19,8 @@ import (
 	"fmt"
 	"path"
 
-	"github.com/coreos/etcd/internal/mvcc/backend"
-	"github.com/coreos/etcd/internal/store"
+	"github.com/coreos/etcd/etcdserver/v2store"
+	"github.com/coreos/etcd/mvcc/backend"
 	"github.com/coreos/etcd/pkg/types"
 
 	"github.com/coreos/go-semver/semver"
@@ -75,57 +75,57 @@ func mustSaveClusterVersionToBackend(be backend.Backend, ver *semver.Version) {
 	tx.UnsafePut(clusterBucketName, ckey, []byte(ver.String()))
 }
 
-func mustSaveMemberToStore(s store.Store, m *Member) {
+func mustSaveMemberToStore(s v2store.Store, m *Member) {
 	b, err := json.Marshal(m.RaftAttributes)
 	if err != nil {
 		plog.Panicf("marshal raftAttributes should never fail: %v", err)
 	}
 	p := path.Join(MemberStoreKey(m.ID), raftAttributesSuffix)
-	if _, err := s.Create(p, false, string(b), false, store.TTLOptionSet{ExpireTime: store.Permanent}); err != nil {
+	if _, err := s.Create(p, false, string(b), false, v2store.TTLOptionSet{ExpireTime: v2store.Permanent}); err != nil {
 		plog.Panicf("create raftAttributes should never fail: %v", err)
 	}
 }
 
-func mustDeleteMemberFromStore(s store.Store, id types.ID) {
+func mustDeleteMemberFromStore(s v2store.Store, id types.ID) {
 	if _, err := s.Delete(MemberStoreKey(id), true, true); err != nil {
 		plog.Panicf("delete member should never fail: %v", err)
 	}
-	if _, err := s.Create(RemovedMemberStoreKey(id), false, "", false, store.TTLOptionSet{ExpireTime: store.Permanent}); err != nil {
+	if _, err := s.Create(RemovedMemberStoreKey(id), false, "", false, v2store.TTLOptionSet{ExpireTime: v2store.Permanent}); err != nil {
 		plog.Panicf("create removedMember should never fail: %v", err)
 	}
 }
 
-func mustUpdateMemberInStore(s store.Store, m *Member) {
+func mustUpdateMemberInStore(s v2store.Store, m *Member) {
 	b, err := json.Marshal(m.RaftAttributes)
 	if err != nil {
 		plog.Panicf("marshal raftAttributes should never fail: %v", err)
 	}
 	p := path.Join(MemberStoreKey(m.ID), raftAttributesSuffix)
-	if _, err := s.Update(p, string(b), store.TTLOptionSet{ExpireTime: store.Permanent}); err != nil {
+	if _, err := s.Update(p, string(b), v2store.TTLOptionSet{ExpireTime: v2store.Permanent}); err != nil {
 		plog.Panicf("update raftAttributes should never fail: %v", err)
 	}
 }
 
-func mustUpdateMemberAttrInStore(s store.Store, m *Member) {
+func mustUpdateMemberAttrInStore(s v2store.Store, m *Member) {
 	b, err := json.Marshal(m.Attributes)
 	if err != nil {
 		plog.Panicf("marshal raftAttributes should never fail: %v", err)
 	}
 	p := path.Join(MemberStoreKey(m.ID), attributesSuffix)
-	if _, err := s.Set(p, false, string(b), store.TTLOptionSet{ExpireTime: store.Permanent}); err != nil {
+	if _, err := s.Set(p, false, string(b), v2store.TTLOptionSet{ExpireTime: v2store.Permanent}); err != nil {
 		plog.Panicf("update raftAttributes should never fail: %v", err)
 	}
 }
 
-func mustSaveClusterVersionToStore(s store.Store, ver *semver.Version) {
-	if _, err := s.Set(StoreClusterVersionKey(), false, ver.String(), store.TTLOptionSet{ExpireTime: store.Permanent}); err != nil {
+func mustSaveClusterVersionToStore(s v2store.Store, ver *semver.Version) {
+	if _, err := s.Set(StoreClusterVersionKey(), false, ver.String(), v2store.TTLOptionSet{ExpireTime: v2store.Permanent}); err != nil {
 		plog.Panicf("save cluster version should never fail: %v", err)
 	}
 }
 
 // nodeToMember builds member from a key value node.
 // the child nodes of the given node MUST be sorted by key.
-func nodeToMember(n *store.NodeExtern) (*Member, error) {
+func nodeToMember(n *v2store.NodeExtern) (*Member, error) {
 	m := &Member{ID: MustParseMemberIDFromKey(n.Key)}
 	attrs := make(map[string][]byte)
 	raftAttrKey := path.Join(n.Key, raftAttributesSuffix)

+ 1 - 1
etcdserver/metrics.go

@@ -17,8 +17,8 @@ package etcdserver
 import (
 	"time"
 
-	"github.com/coreos/etcd/internal/version"
 	"github.com/coreos/etcd/pkg/runtime"
+	"github.com/coreos/etcd/version"
 
 	"github.com/prometheus/client_golang/prometheus"
 )

+ 21 - 21
etcdserver/server.go

@@ -29,22 +29,20 @@ import (
 	"sync/atomic"
 	"time"
 
+	"github.com/coreos/etcd/alarm"
+	"github.com/coreos/etcd/auth"
+	"github.com/coreos/etcd/compactor"
+	"github.com/coreos/etcd/discovery"
 	"github.com/coreos/etcd/etcdserver/api"
 	"github.com/coreos/etcd/etcdserver/api/v2http/httptypes"
 	pb "github.com/coreos/etcd/etcdserver/etcdserverpb"
 	"github.com/coreos/etcd/etcdserver/membership"
 	"github.com/coreos/etcd/etcdserver/stats"
-	"github.com/coreos/etcd/internal/alarm"
-	"github.com/coreos/etcd/internal/auth"
-	"github.com/coreos/etcd/internal/compactor"
-	"github.com/coreos/etcd/internal/discovery"
-	"github.com/coreos/etcd/internal/lease"
-	"github.com/coreos/etcd/internal/lease/leasehttp"
-	"github.com/coreos/etcd/internal/mvcc"
-	"github.com/coreos/etcd/internal/mvcc/backend"
-	"github.com/coreos/etcd/internal/raftsnap"
-	"github.com/coreos/etcd/internal/store"
-	"github.com/coreos/etcd/internal/version"
+	"github.com/coreos/etcd/etcdserver/v2store"
+	"github.com/coreos/etcd/lease"
+	"github.com/coreos/etcd/lease/leasehttp"
+	"github.com/coreos/etcd/mvcc"
+	"github.com/coreos/etcd/mvcc/backend"
 	"github.com/coreos/etcd/pkg/fileutil"
 	"github.com/coreos/etcd/pkg/idutil"
 	"github.com/coreos/etcd/pkg/pbutil"
@@ -55,6 +53,8 @@ import (
 	"github.com/coreos/etcd/raft"
 	"github.com/coreos/etcd/raft/raftpb"
 	"github.com/coreos/etcd/rafthttp"
+	"github.com/coreos/etcd/raftsnap"
+	"github.com/coreos/etcd/version"
 	"github.com/coreos/etcd/wal"
 
 	"github.com/coreos/go-semver/semver"
@@ -112,8 +112,8 @@ func init() {
 type Response struct {
 	Term    uint64
 	Index   uint64
-	Event   *store.Event
-	Watcher store.Watcher
+	Event   *v2store.Event
+	Watcher v2store.Watcher
 	Err     error
 }
 
@@ -205,7 +205,7 @@ type EtcdServer struct {
 
 	cluster *membership.RaftCluster
 
-	store       store.Store
+	v2store     v2store.Store
 	snapshotter *raftsnap.Snapshotter
 
 	applyV2 ApplierV2
@@ -256,7 +256,7 @@ type EtcdServer struct {
 // NewServer creates a new EtcdServer from the supplied configuration. The
 // configuration is considered static for the lifetime of the EtcdServer.
 func NewServer(cfg ServerConfig) (srv *EtcdServer, err error) {
-	st := store.New(StoreClusterPrefix, StoreKeysPrefix)
+	st := v2store.New(StoreClusterPrefix, StoreKeysPrefix)
 
 	var (
 		w  *wal.WAL
@@ -414,7 +414,7 @@ func NewServer(cfg ServerConfig) (srv *EtcdServer, err error) {
 		readych:     make(chan struct{}),
 		Cfg:         cfg,
 		errorc:      make(chan error, 1),
-		store:       st,
+		v2store:     st,
 		snapshotter: ss,
 		r: *newRaftNode(
 			raftNodeConfig{
@@ -436,7 +436,7 @@ func NewServer(cfg ServerConfig) (srv *EtcdServer, err error) {
 		forceVersionC: make(chan struct{}),
 	}
 
-	srv.applyV2 = &applierV2store{store: srv.store, cluster: srv.cluster}
+	srv.applyV2 = &applierV2store{store: srv.v2store, cluster: srv.cluster}
 
 	srv.be = be
 	minTTL := time.Duration((3*cfg.ElectionTicks)/2) * heartbeat
@@ -783,7 +783,7 @@ func (s *EtcdServer) run() {
 			plog.Infof("the data-dir used by this member must be removed.")
 			return
 		case <-getSyncC():
-			if s.store.HasTTLKeys() {
+			if s.v2store.HasTTLKeys() {
 				s.sync(s.Cfg.ReqTimeout())
 			}
 		case <-s.stop:
@@ -881,7 +881,7 @@ func (s *EtcdServer) applySnapshot(ep *etcdProgress, apply *apply) {
 	}
 
 	plog.Info("recovering store v2...")
-	if err := s.store.Recovery(apply.snapshot.Data); err != nil {
+	if err := s.v2store.Recovery(apply.snapshot.Data); err != nil {
 		plog.Panicf("recovery store error: %v", err)
 	}
 	plog.Info("finished recovering store v2")
@@ -1047,7 +1047,7 @@ func (s *EtcdServer) LeaderStats() []byte {
 	return s.lstats.JSON()
 }
 
-func (s *EtcdServer) StoreStats() []byte { return s.store.JsonStats() }
+func (s *EtcdServer) StoreStats() []byte { return s.v2store.JsonStats() }
 
 func (s *EtcdServer) checkMembershipOperationPermission(ctx context.Context) error {
 	if s.authStore == nil {
@@ -1441,7 +1441,7 @@ func (s *EtcdServer) applyConfChange(cc raftpb.ConfChange, confState *raftpb.Con
 
 // TODO: non-blocking snapshot
 func (s *EtcdServer) snapshot(snapi uint64, confState raftpb.ConfState) {
-	clone := s.store.Clone()
+	clone := s.v2store.Clone()
 	// commit kv to write metadata (for example: consistent index) to disk.
 	// KV().commit() updates the consistent index in backend.
 	// All operations that update consistent index must be called sequentially

+ 77 - 77
etcdserver/server_test.go

@@ -28,11 +28,10 @@ import (
 
 	pb "github.com/coreos/etcd/etcdserver/etcdserverpb"
 	"github.com/coreos/etcd/etcdserver/membership"
-	"github.com/coreos/etcd/internal/lease"
-	"github.com/coreos/etcd/internal/mvcc"
-	"github.com/coreos/etcd/internal/mvcc/backend"
-	"github.com/coreos/etcd/internal/raftsnap"
-	"github.com/coreos/etcd/internal/store"
+	"github.com/coreos/etcd/etcdserver/v2store"
+	"github.com/coreos/etcd/lease"
+	"github.com/coreos/etcd/mvcc"
+	"github.com/coreos/etcd/mvcc/backend"
 	"github.com/coreos/etcd/pkg/fileutil"
 	"github.com/coreos/etcd/pkg/idutil"
 	"github.com/coreos/etcd/pkg/mock/mockstorage"
@@ -45,6 +44,7 @@ import (
 	"github.com/coreos/etcd/raft"
 	"github.com/coreos/etcd/raft/raftpb"
 	"github.com/coreos/etcd/rafthttp"
+	"github.com/coreos/etcd/raftsnap"
 )
 
 // TestDoLocalAction tests requests which do not need to go through raft to be applied,
@@ -59,11 +59,11 @@ func TestDoLocalAction(t *testing.T) {
 	}{
 		{
 			pb.Request{Method: "GET", ID: 1, Wait: true},
-			Response{Watcher: store.NewNopWatcher()}, nil, []testutil.Action{{Name: "Watch"}},
+			Response{Watcher: v2store.NewNopWatcher()}, nil, []testutil.Action{{Name: "Watch"}},
 		},
 		{
 			pb.Request{Method: "GET", ID: 1},
-			Response{Event: &store.Event{}}, nil,
+			Response{Event: &v2store.Event{}}, nil,
 			[]testutil.Action{
 				{
 					Name:   "Get",
@@ -73,7 +73,7 @@ func TestDoLocalAction(t *testing.T) {
 		},
 		{
 			pb.Request{Method: "HEAD", ID: 1},
-			Response{Event: &store.Event{}}, nil,
+			Response{Event: &v2store.Event{}}, nil,
 			[]testutil.Action{
 				{
 					Name:   "Get",
@@ -89,7 +89,7 @@ func TestDoLocalAction(t *testing.T) {
 	for i, tt := range tests {
 		st := mockstore.NewRecorder()
 		srv := &EtcdServer{
-			store:    st,
+			v2store:  st,
 			reqIDGen: idutil.NewGenerator(0, time.Time{}),
 		}
 		resp, err := srv.Do(context.TODO(), tt.req)
@@ -142,7 +142,7 @@ func TestDoBadLocalAction(t *testing.T) {
 	for i, tt := range tests {
 		st := mockstore.NewErrRecorder(storeErr)
 		srv := &EtcdServer{
-			store:    st,
+			v2store:  st,
 			reqIDGen: idutil.NewGenerator(0, time.Time{}),
 		}
 		resp, err := srv.Do(context.Background(), tt.req)
@@ -167,8 +167,8 @@ func TestApplyRepeat(t *testing.T) {
 		SoftState: &raft.SoftState{RaftState: raft.StateLeader},
 	}
 	cl := newTestCluster(nil)
-	st := store.New()
-	cl.SetStore(store.New())
+	st := v2store.New()
+	cl.SetStore(v2store.New())
 	cl.AddMember(&membership.Member{ID: 1234})
 	r := newRaftNode(raftNodeConfig{
 		Node:        n,
@@ -178,12 +178,12 @@ func TestApplyRepeat(t *testing.T) {
 	})
 	s := &EtcdServer{
 		r:          *r,
-		store:      st,
+		v2store:    st,
 		cluster:    cl,
 		reqIDGen:   idutil.NewGenerator(0, time.Time{}),
 		SyncTicker: &time.Ticker{},
 	}
-	s.applyV2 = &applierV2store{store: s.store, cluster: s.cluster}
+	s.applyV2 = &applierV2store{store: s.v2store, cluster: s.cluster}
 	s.start()
 	req := &pb.Request{Method: "QGET", ID: uint64(1)}
 	ents := []raftpb.Entry{{Index: 1, Data: pbutil.MustMarshal(req)}}
@@ -233,139 +233,139 @@ func TestApplyRequest(t *testing.T) {
 		// POST ==> Create
 		{
 			pb.Request{Method: "POST", ID: 1},
-			Response{Event: &store.Event{}},
+			Response{Event: &v2store.Event{}},
 			[]testutil.Action{
 				{
 					Name:   "Create",
-					Params: []interface{}{"", false, "", true, store.TTLOptionSet{ExpireTime: time.Time{}}},
+					Params: []interface{}{"", false, "", true, v2store.TTLOptionSet{ExpireTime: time.Time{}}},
 				},
 			},
 		},
 		// POST ==> Create, with expiration
 		{
 			pb.Request{Method: "POST", ID: 1, Expiration: 1337},
-			Response{Event: &store.Event{}},
+			Response{Event: &v2store.Event{}},
 			[]testutil.Action{
 				{
 					Name:   "Create",
-					Params: []interface{}{"", false, "", true, store.TTLOptionSet{ExpireTime: time.Unix(0, 1337)}},
+					Params: []interface{}{"", false, "", true, v2store.TTLOptionSet{ExpireTime: time.Unix(0, 1337)}},
 				},
 			},
 		},
 		// POST ==> Create, with dir
 		{
 			pb.Request{Method: "POST", ID: 1, Dir: true},
-			Response{Event: &store.Event{}},
+			Response{Event: &v2store.Event{}},
 			[]testutil.Action{
 				{
 					Name:   "Create",
-					Params: []interface{}{"", true, "", true, store.TTLOptionSet{ExpireTime: time.Time{}}},
+					Params: []interface{}{"", true, "", true, v2store.TTLOptionSet{ExpireTime: time.Time{}}},
 				},
 			},
 		},
 		// PUT ==> Set
 		{
 			pb.Request{Method: "PUT", ID: 1},
-			Response{Event: &store.Event{}},
+			Response{Event: &v2store.Event{}},
 			[]testutil.Action{
 				{
 					Name:   "Set",
-					Params: []interface{}{"", false, "", store.TTLOptionSet{ExpireTime: time.Time{}}},
+					Params: []interface{}{"", false, "", v2store.TTLOptionSet{ExpireTime: time.Time{}}},
 				},
 			},
 		},
 		// PUT ==> Set, with dir
 		{
 			pb.Request{Method: "PUT", ID: 1, Dir: true},
-			Response{Event: &store.Event{}},
+			Response{Event: &v2store.Event{}},
 			[]testutil.Action{
 				{
 					Name:   "Set",
-					Params: []interface{}{"", true, "", store.TTLOptionSet{ExpireTime: time.Time{}}},
+					Params: []interface{}{"", true, "", v2store.TTLOptionSet{ExpireTime: time.Time{}}},
 				},
 			},
 		},
 		// PUT with PrevExist=true ==> Update
 		{
 			pb.Request{Method: "PUT", ID: 1, PrevExist: pbutil.Boolp(true)},
-			Response{Event: &store.Event{}},
+			Response{Event: &v2store.Event{}},
 			[]testutil.Action{
 				{
 					Name:   "Update",
-					Params: []interface{}{"", "", store.TTLOptionSet{ExpireTime: time.Time{}}},
+					Params: []interface{}{"", "", v2store.TTLOptionSet{ExpireTime: time.Time{}}},
 				},
 			},
 		},
 		// PUT with PrevExist=false ==> Create
 		{
 			pb.Request{Method: "PUT", ID: 1, PrevExist: pbutil.Boolp(false)},
-			Response{Event: &store.Event{}},
+			Response{Event: &v2store.Event{}},
 			[]testutil.Action{
 				{
 					Name:   "Create",
-					Params: []interface{}{"", false, "", false, store.TTLOptionSet{ExpireTime: time.Time{}}},
+					Params: []interface{}{"", false, "", false, v2store.TTLOptionSet{ExpireTime: time.Time{}}},
 				},
 			},
 		},
 		// PUT with PrevExist=true *and* PrevIndex set ==> CompareAndSwap
 		{
 			pb.Request{Method: "PUT", ID: 1, PrevExist: pbutil.Boolp(true), PrevIndex: 1},
-			Response{Event: &store.Event{}},
+			Response{Event: &v2store.Event{}},
 			[]testutil.Action{
 				{
 					Name:   "CompareAndSwap",
-					Params: []interface{}{"", "", uint64(1), "", store.TTLOptionSet{ExpireTime: time.Time{}}},
+					Params: []interface{}{"", "", uint64(1), "", v2store.TTLOptionSet{ExpireTime: time.Time{}}},
 				},
 			},
 		},
 		// PUT with PrevExist=false *and* PrevIndex set ==> Create
 		{
 			pb.Request{Method: "PUT", ID: 1, PrevExist: pbutil.Boolp(false), PrevIndex: 1},
-			Response{Event: &store.Event{}},
+			Response{Event: &v2store.Event{}},
 			[]testutil.Action{
 				{
 					Name:   "Create",
-					Params: []interface{}{"", false, "", false, store.TTLOptionSet{ExpireTime: time.Time{}}},
+					Params: []interface{}{"", false, "", false, v2store.TTLOptionSet{ExpireTime: time.Time{}}},
 				},
 			},
 		},
 		// PUT with PrevIndex set ==> CompareAndSwap
 		{
 			pb.Request{Method: "PUT", ID: 1, PrevIndex: 1},
-			Response{Event: &store.Event{}},
+			Response{Event: &v2store.Event{}},
 			[]testutil.Action{
 				{
 					Name:   "CompareAndSwap",
-					Params: []interface{}{"", "", uint64(1), "", store.TTLOptionSet{ExpireTime: time.Time{}}},
+					Params: []interface{}{"", "", uint64(1), "", v2store.TTLOptionSet{ExpireTime: time.Time{}}},
 				},
 			},
 		},
 		// PUT with PrevValue set ==> CompareAndSwap
 		{
 			pb.Request{Method: "PUT", ID: 1, PrevValue: "bar"},
-			Response{Event: &store.Event{}},
+			Response{Event: &v2store.Event{}},
 			[]testutil.Action{
 				{
 					Name:   "CompareAndSwap",
-					Params: []interface{}{"", "bar", uint64(0), "", store.TTLOptionSet{ExpireTime: time.Time{}}},
+					Params: []interface{}{"", "bar", uint64(0), "", v2store.TTLOptionSet{ExpireTime: time.Time{}}},
 				},
 			},
 		},
 		// PUT with PrevIndex and PrevValue set ==> CompareAndSwap
 		{
 			pb.Request{Method: "PUT", ID: 1, PrevIndex: 1, PrevValue: "bar"},
-			Response{Event: &store.Event{}},
+			Response{Event: &v2store.Event{}},
 			[]testutil.Action{
 				{
 					Name:   "CompareAndSwap",
-					Params: []interface{}{"", "bar", uint64(1), "", store.TTLOptionSet{ExpireTime: time.Time{}}},
+					Params: []interface{}{"", "bar", uint64(1), "", v2store.TTLOptionSet{ExpireTime: time.Time{}}},
 				},
 			},
 		},
 		// DELETE ==> Delete
 		{
 			pb.Request{Method: "DELETE", ID: 1},
-			Response{Event: &store.Event{}},
+			Response{Event: &v2store.Event{}},
 			[]testutil.Action{
 				{
 					Name:   "Delete",
@@ -376,7 +376,7 @@ func TestApplyRequest(t *testing.T) {
 		// DELETE with PrevIndex set ==> CompareAndDelete
 		{
 			pb.Request{Method: "DELETE", ID: 1, PrevIndex: 1},
-			Response{Event: &store.Event{}},
+			Response{Event: &v2store.Event{}},
 			[]testutil.Action{
 				{
 					Name:   "CompareAndDelete",
@@ -387,7 +387,7 @@ func TestApplyRequest(t *testing.T) {
 		// DELETE with PrevValue set ==> CompareAndDelete
 		{
 			pb.Request{Method: "DELETE", ID: 1, PrevValue: "bar"},
-			Response{Event: &store.Event{}},
+			Response{Event: &v2store.Event{}},
 			[]testutil.Action{
 				{
 					Name:   "CompareAndDelete",
@@ -398,7 +398,7 @@ func TestApplyRequest(t *testing.T) {
 		// DELETE with PrevIndex *and* PrevValue set ==> CompareAndDelete
 		{
 			pb.Request{Method: "DELETE", ID: 1, PrevIndex: 5, PrevValue: "bar"},
-			Response{Event: &store.Event{}},
+			Response{Event: &v2store.Event{}},
 			[]testutil.Action{
 				{
 					Name:   "CompareAndDelete",
@@ -409,7 +409,7 @@ func TestApplyRequest(t *testing.T) {
 		// QGET ==> Get
 		{
 			pb.Request{Method: "QGET", ID: 1},
-			Response{Event: &store.Event{}},
+			Response{Event: &v2store.Event{}},
 			[]testutil.Action{
 				{
 					Name:   "Get",
@@ -448,8 +448,8 @@ func TestApplyRequest(t *testing.T) {
 
 	for i, tt := range tests {
 		st := mockstore.NewRecorder()
-		srv := &EtcdServer{store: st}
-		srv.applyV2 = &applierV2store{store: srv.store, cluster: srv.cluster}
+		srv := &EtcdServer{v2store: st}
+		srv.applyV2 = &applierV2store{store: srv.v2store, cluster: srv.cluster}
 		resp := srv.applyV2Request((*RequestV2)(&tt.req))
 
 		if !reflect.DeepEqual(resp, tt.wresp) {
@@ -465,10 +465,10 @@ func TestApplyRequest(t *testing.T) {
 func TestApplyRequestOnAdminMemberAttributes(t *testing.T) {
 	cl := newTestCluster([]*membership.Member{{ID: 1}})
 	srv := &EtcdServer{
-		store:   mockstore.NewRecorder(),
+		v2store: mockstore.NewRecorder(),
 		cluster: cl,
 	}
-	srv.applyV2 = &applierV2store{store: srv.store, cluster: srv.cluster}
+	srv.applyV2 = &applierV2store{store: srv.v2store, cluster: srv.cluster}
 
 	req := pb.Request{
 		Method: "PUT",
@@ -485,7 +485,7 @@ func TestApplyRequestOnAdminMemberAttributes(t *testing.T) {
 
 func TestApplyConfChangeError(t *testing.T) {
 	cl := membership.NewCluster("")
-	cl.SetStore(store.New())
+	cl.SetStore(v2store.New())
 	for i := 1; i <= 4; i++ {
 		cl.AddMember(&membership.Member{ID: types.ID(i)})
 	}
@@ -549,7 +549,7 @@ func TestApplyConfChangeError(t *testing.T) {
 
 func TestApplyConfChangeShouldStop(t *testing.T) {
 	cl := membership.NewCluster("")
-	cl.SetStore(store.New())
+	cl.SetStore(v2store.New())
 	for i := 1; i <= 3; i++ {
 		cl.AddMember(&membership.Member{ID: types.ID(i)})
 	}
@@ -590,7 +590,7 @@ func TestApplyConfChangeShouldStop(t *testing.T) {
 // where consistIndex equals to applied index.
 func TestApplyConfigChangeUpdatesConsistIndex(t *testing.T) {
 	cl := membership.NewCluster("")
-	cl.SetStore(store.New())
+	cl.SetStore(v2store.New())
 	cl.AddMember(&membership.Member{ID: types.ID(1)})
 	r := newRaftNode(raftNodeConfig{
 		Node:      newNodeNop(),
@@ -633,7 +633,7 @@ func TestApplyConfigChangeUpdatesConsistIndex(t *testing.T) {
 // if the local member is removed along with other conf updates.
 func TestApplyMultiConfChangeShouldStop(t *testing.T) {
 	cl := membership.NewCluster("")
-	cl.SetStore(store.New())
+	cl.SetStore(v2store.New())
 	for i := 1; i <= 5; i++ {
 		cl.AddMember(&membership.Member{ID: types.ID(i)})
 	}
@@ -685,11 +685,11 @@ func TestDoProposal(t *testing.T) {
 		srv := &EtcdServer{
 			Cfg:        ServerConfig{TickMs: 1},
 			r:          *r,
-			store:      st,
+			v2store:    st,
 			reqIDGen:   idutil.NewGenerator(0, time.Time{}),
 			SyncTicker: &time.Ticker{},
 		}
-		srv.applyV2 = &applierV2store{store: srv.store, cluster: srv.cluster}
+		srv.applyV2 = &applierV2store{store: srv.v2store, cluster: srv.cluster}
 		srv.start()
 		resp, err := srv.Do(context.Background(), tt)
 		srv.Stop()
@@ -702,7 +702,7 @@ func TestDoProposal(t *testing.T) {
 			t.Fatalf("#%d: err = %v, want nil", i, err)
 		}
 		// resp.Index is set in Do() based on the raft state; may either be 0 or 1
-		wresp := Response{Event: &store.Event{}, Index: resp.Index}
+		wresp := Response{Event: &v2store.Event{}, Index: resp.Index}
 		if !reflect.DeepEqual(resp, wresp) {
 			t.Errorf("#%d: resp = %v, want %v", i, resp, wresp)
 		}
@@ -717,7 +717,7 @@ func TestDoProposalCancelled(t *testing.T) {
 		w:        wt,
 		reqIDGen: idutil.NewGenerator(0, time.Time{}),
 	}
-	srv.applyV2 = &applierV2store{store: srv.store, cluster: srv.cluster}
+	srv.applyV2 = &applierV2store{store: srv.v2store, cluster: srv.cluster}
 
 	ctx, cancel := context.WithCancel(context.Background())
 	cancel()
@@ -739,7 +739,7 @@ func TestDoProposalTimeout(t *testing.T) {
 		w:        mockwait.NewNop(),
 		reqIDGen: idutil.NewGenerator(0, time.Time{}),
 	}
-	srv.applyV2 = &applierV2store{store: srv.store, cluster: srv.cluster}
+	srv.applyV2 = &applierV2store{store: srv.v2store, cluster: srv.cluster}
 
 	ctx, cancel := context.WithTimeout(context.Background(), 0)
 	_, err := srv.Do(ctx, pb.Request{Method: "PUT"})
@@ -756,7 +756,7 @@ func TestDoProposalStopped(t *testing.T) {
 		w:        mockwait.NewNop(),
 		reqIDGen: idutil.NewGenerator(0, time.Time{}),
 	}
-	srv.applyV2 = &applierV2store{store: srv.store, cluster: srv.cluster}
+	srv.applyV2 = &applierV2store{store: srv.v2store, cluster: srv.cluster}
 
 	srv.stopping = make(chan struct{})
 	close(srv.stopping)
@@ -776,7 +776,7 @@ func TestSync(t *testing.T) {
 		ctx:      ctx,
 		cancel:   cancel,
 	}
-	srv.applyV2 = &applierV2store{store: srv.store, cluster: srv.cluster}
+	srv.applyV2 = &applierV2store{store: srv.v2store, cluster: srv.cluster}
 
 	// check that sync is non-blocking
 	done := make(chan struct{})
@@ -819,7 +819,7 @@ func TestSyncTimeout(t *testing.T) {
 		ctx:      ctx,
 		cancel:   cancel,
 	}
-	srv.applyV2 = &applierV2store{store: srv.store, cluster: srv.cluster}
+	srv.applyV2 = &applierV2store{store: srv.v2store, cluster: srv.cluster}
 
 	// check that sync is non-blocking
 	done := make(chan struct{})
@@ -857,7 +857,7 @@ func TestSyncTrigger(t *testing.T) {
 	srv := &EtcdServer{
 		Cfg:        ServerConfig{TickMs: 1},
 		r:          *r,
-		store:      mockstore.NewNop(),
+		v2store:    mockstore.NewNop(),
 		SyncTicker: tk,
 		reqIDGen:   idutil.NewGenerator(0, time.Time{}),
 	}
@@ -913,8 +913,8 @@ func TestSnapshot(t *testing.T) {
 		storage:     p,
 	})
 	srv := &EtcdServer{
-		r:     *r,
-		store: st,
+		r:       *r,
+		v2store: st,
 	}
 	srv.kv = mvcc.New(be, &lease.FakeLessor{}, &srv.consistIndex)
 	srv.be = be
@@ -957,7 +957,7 @@ func TestSnapshot(t *testing.T) {
 // snapshot db is applied.
 func TestSnapshotOrdering(t *testing.T) {
 	n := newNopReadyNode()
-	st := store.New()
+	st := v2store.New()
 	cl := membership.NewCluster("abc")
 	cl.SetStore(st)
 
@@ -985,12 +985,12 @@ func TestSnapshotOrdering(t *testing.T) {
 	s := &EtcdServer{
 		Cfg:         ServerConfig{DataDir: testdir},
 		r:           *r,
-		store:       st,
+		v2store:     st,
 		snapshotter: raftsnap.New(snapdir),
 		cluster:     cl,
 		SyncTicker:  &time.Ticker{},
 	}
-	s.applyV2 = &applierV2store{store: s.store, cluster: s.cluster}
+	s.applyV2 = &applierV2store{store: s.v2store, cluster: s.cluster}
 
 	be, tmpPath := backend.NewDefaultTmpBackend()
 	defer os.RemoveAll(tmpPath)
@@ -1046,11 +1046,11 @@ func TestTriggerSnap(t *testing.T) {
 	srv := &EtcdServer{
 		Cfg:        ServerConfig{TickMs: 1, SnapCount: uint64(snapc)},
 		r:          *r,
-		store:      st,
+		v2store:    st,
 		reqIDGen:   idutil.NewGenerator(0, time.Time{}),
 		SyncTicker: &time.Ticker{},
 	}
-	srv.applyV2 = &applierV2store{store: srv.store, cluster: srv.cluster}
+	srv.applyV2 = &applierV2store{store: srv.v2store, cluster: srv.cluster}
 
 	srv.kv = mvcc.New(be, &lease.FakeLessor{}, &srv.consistIndex)
 	srv.be = be
@@ -1085,7 +1085,7 @@ func TestTriggerSnap(t *testing.T) {
 // proposals.
 func TestConcurrentApplyAndSnapshotV3(t *testing.T) {
 	n := newNopReadyNode()
-	st := store.New()
+	st := v2store.New()
 	cl := membership.NewCluster("abc")
 	cl.SetStore(st)
 
@@ -1110,12 +1110,12 @@ func TestConcurrentApplyAndSnapshotV3(t *testing.T) {
 	s := &EtcdServer{
 		Cfg:         ServerConfig{DataDir: testdir},
 		r:           *r,
-		store:       st,
+		v2store:     st,
 		snapshotter: raftsnap.New(testdir),
 		cluster:     cl,
 		SyncTicker:  &time.Ticker{},
 	}
-	s.applyV2 = &applierV2store{store: s.store, cluster: s.cluster}
+	s.applyV2 = &applierV2store{store: s.v2store, cluster: s.cluster}
 
 	be, tmpPath := backend.NewDefaultTmpBackend()
 	defer func() {
@@ -1183,7 +1183,7 @@ func TestAddMember(t *testing.T) {
 		SoftState: &raft.SoftState{RaftState: raft.StateLeader},
 	}
 	cl := newTestCluster(nil)
-	st := store.New()
+	st := v2store.New()
 	cl.SetStore(st)
 	r := newRaftNode(raftNodeConfig{
 		Node:        n,
@@ -1193,7 +1193,7 @@ func TestAddMember(t *testing.T) {
 	})
 	s := &EtcdServer{
 		r:          *r,
-		store:      st,
+		v2store:    st,
 		cluster:    cl,
 		reqIDGen:   idutil.NewGenerator(0, time.Time{}),
 		SyncTicker: &time.Ticker{},
@@ -1223,8 +1223,8 @@ func TestRemoveMember(t *testing.T) {
 		SoftState: &raft.SoftState{RaftState: raft.StateLeader},
 	}
 	cl := newTestCluster(nil)
-	st := store.New()
-	cl.SetStore(store.New())
+	st := v2store.New()
+	cl.SetStore(v2store.New())
 	cl.AddMember(&membership.Member{ID: 1234})
 	r := newRaftNode(raftNodeConfig{
 		Node:        n,
@@ -1234,7 +1234,7 @@ func TestRemoveMember(t *testing.T) {
 	})
 	s := &EtcdServer{
 		r:          *r,
-		store:      st,
+		v2store:    st,
 		cluster:    cl,
 		reqIDGen:   idutil.NewGenerator(0, time.Time{}),
 		SyncTicker: &time.Ticker{},
@@ -1263,7 +1263,7 @@ func TestUpdateMember(t *testing.T) {
 		SoftState: &raft.SoftState{RaftState: raft.StateLeader},
 	}
 	cl := newTestCluster(nil)
-	st := store.New()
+	st := v2store.New()
 	cl.SetStore(st)
 	cl.AddMember(&membership.Member{ID: 1234})
 	r := newRaftNode(raftNodeConfig{
@@ -1274,7 +1274,7 @@ func TestUpdateMember(t *testing.T) {
 	})
 	s := &EtcdServer{
 		r:          *r,
-		store:      st,
+		v2store:    st,
 		cluster:    cl,
 		reqIDGen:   idutil.NewGenerator(0, time.Time{}),
 		SyncTicker: &time.Ticker{},

+ 3 - 3
etcdserver/snapshot_merge.go

@@ -17,9 +17,9 @@ package etcdserver
 import (
 	"io"
 
-	"github.com/coreos/etcd/internal/mvcc/backend"
-	"github.com/coreos/etcd/internal/raftsnap"
+	"github.com/coreos/etcd/mvcc/backend"
 	"github.com/coreos/etcd/raft/raftpb"
+	"github.com/coreos/etcd/raftsnap"
 )
 
 // createMergedSnapshotMessage creates a snapshot message that contains: raft status (term, conf),
@@ -27,7 +27,7 @@ import (
 // as ReadCloser.
 func (s *EtcdServer) createMergedSnapshotMessage(m raftpb.Message, snapt, snapi uint64, confState raftpb.ConfState) raftsnap.Message {
 	// get a snapshot of v2 store as []byte
-	clone := s.store.Clone()
+	clone := s.v2store.Clone()
 	d, err := clone.SaveNoCopy()
 	if err != nil {
 		plog.Panicf("store save should never fail: %v", err)

+ 1 - 1
etcdserver/storage.go

@@ -18,10 +18,10 @@ import (
 	"io"
 
 	pb "github.com/coreos/etcd/etcdserver/etcdserverpb"
-	"github.com/coreos/etcd/internal/raftsnap"
 	"github.com/coreos/etcd/pkg/pbutil"
 	"github.com/coreos/etcd/pkg/types"
 	"github.com/coreos/etcd/raft/raftpb"
+	"github.com/coreos/etcd/raftsnap"
 	"github.com/coreos/etcd/wal"
 	"github.com/coreos/etcd/wal/walpb"
 )

Some files were not shown because too many files changed in this diff