diff --git a/command/server/command.go b/command/server/command.go
index 10beeda385222dcf49ca573655edc45f0a4ac515..3e980917f5fd4b7b487b6bc818acc7296c1d429b 100644
--- a/command/server/command.go
+++ b/command/server/command.go
@@ -36,7 +36,7 @@ type Command struct {
 	// final configuration
 	config *Config
 
-	configFile string
+	configFile []string
 
 	// bor node
 	node *node.Node
@@ -65,8 +65,8 @@ func (c *Command) Run(args []string) int {
 
 	// read config file
 	config := DefaultConfig()
-	if c.configFile != "" {
-		cfg, err := readConfigFile(c.configFile)
+	for _, configFile := range c.configFile {
+		cfg, err := readConfigFile(configFile)
 		if err != nil {
 			c.UI.Error(err.Error())
 			return 1
@@ -130,8 +130,8 @@ func (c *Command) Run(args []string) int {
 	}
 
 	// register ethash service
-	if config.EthStats != "" {
-		if err := ethstats.New(stack, backend.APIBackend, backend.Engine(), config.EthStats); err != nil {
+	if config.Ethstats != "" {
+		if err := ethstats.New(stack, backend.APIBackend, backend.Engine(), config.Ethstats); err != nil {
 			c.UI.Error(err.Error())
 			return 1
 		}
diff --git a/command/server/config.go b/command/server/config.go
index 27daab7dae87a4f8dabf63325c8ae69683024868..be42b14127341fe8022f13dd0f93d0f708da1ebe 100644
--- a/command/server/config.go
+++ b/command/server/config.go
@@ -1,6 +1,7 @@
 package server
 
 import (
+	"encoding/json"
 	"fmt"
 	"io/ioutil"
 	"math"
@@ -33,141 +34,140 @@ import (
 type Config struct {
 	chain *chains.Chain
 
-	Chain     string
-	Debug     bool
-	Whitelist map[string]string
-	LogLevel  string
-	DataDir   string
-	P2P       *P2PConfig
-	SyncMode  string
-	GcMode    string
-	Snapshot  bool
-	EthStats  string
-	Heimdall  *HeimdallConfig
-	TxPool    *TxPoolConfig
-	Sealer    *SealerConfig
-	JsonRPC   *JsonRPCConfig
-	Gpo       *GpoConfig
-	Ethstats  string
-	Metrics   *MetricsConfig
-	Cache     *CacheConfig
-	Accounts  *AccountsConfig
+	Chain     string            `json:"chain"`
+	Debug     bool              `json:""`
+	Whitelist map[string]string `json:""`
+	LogLevel  string            `json:"log-level"`
+	DataDir   string            `json:"data-dir"`
+	P2P       *P2PConfig        `json:""`
+	SyncMode  string            `json:"sync-mode"`
+	GcMode    string            `json:"gc-mode"`
+	Snapshot  bool              `json:"snapshot"`
+	Heimdall  *HeimdallConfig   `json:"heimdall"`
+	TxPool    *TxPoolConfig     `json:"txpool"`
+	Sealer    *SealerConfig     `json:"sealer"`
+	JsonRPC   *JsonRPCConfig    `json:"jsonrpc"`
+	Gpo       *GpoConfig        `json:"gpo"`
+	Ethstats  string            `json:"ethstats"`
+	Metrics   *MetricsConfig    `json:""`
+	Cache     *CacheConfig      `json:""`
+	Accounts  *AccountsConfig   `json:""`
 }
 
 type P2PConfig struct {
-	MaxPeers     uint64
-	MaxPendPeers uint64
-	Bind         string
-	Port         uint64
-	NoDiscover   bool
-	NAT          string
-	Discovery    *P2PDiscovery
+	MaxPeers     uint64        `json:"max_peers"`
+	MaxPendPeers uint64        `json:"max_pend_peers"`
+	Bind         string        `json:""`
+	Port         uint64        `json:""`
+	NoDiscover   bool          `json:""`
+	NAT          string        `json:""`
+	Discovery    *P2PDiscovery `json:""`
 }
 
 type P2PDiscovery struct {
-	V5Enabled    bool
-	Bootnodes    []string
-	BootnodesV4  []string
-	BootnodesV5  []string
-	StaticNodes  []string
-	TrustedNodes []string
-	DNS          []string
+	V5Enabled    bool     `json:""`
+	Bootnodes    []string `json:""`
+	BootnodesV4  []string `json:""`
+	BootnodesV5  []string `json:""`
+	StaticNodes  []string `json:""`
+	TrustedNodes []string `json:""`
+	DNS          []string `json:""`
 }
 
 type HeimdallConfig struct {
-	URL     string
-	Without bool
+	URL     string `json:""`
+	Without bool   `json:""`
 }
 
 type TxPoolConfig struct {
-	Locals       []string
-	NoLocals     bool
-	Journal      string
-	Rejournal    time.Duration
-	PriceLimit   uint64
-	PriceBump    uint64
-	AccountSlots uint64
-	GlobalSlots  uint64
-	AccountQueue uint64
-	GlobalQueue  uint64
-	LifeTime     time.Duration
+	Locals       []string      `json:""`
+	NoLocals     bool          `json:""`
+	Journal      string        `json:""`
+	Rejournal    time.Duration `json:""`
+	PriceLimit   uint64        `json:""`
+	PriceBump    uint64        `json:""`
+	AccountSlots uint64        `json:""`
+	GlobalSlots  uint64        `json:""`
+	AccountQueue uint64        `json:""`
+	GlobalQueue  uint64        `json:""`
+	LifeTime     time.Duration `json:""`
 }
 
 type SealerConfig struct {
-	Enabled   bool
-	Etherbase string
-	ExtraData string
-	GasCeil   uint64
-	GasPrice  *big.Int
+	Enabled   bool     `json:""`
+	Etherbase string   `json:""`
+	ExtraData string   `json:""`
+	GasCeil   uint64   `json:""`
+	GasPrice  *big.Int `json:""`
 }
 
 type JsonRPCConfig struct {
-	IPCDisable bool
-	IPCPath    string
+	IPCDisable bool   `json:""`
+	IPCPath    string `json:""`
 
-	Modules []string
-	VHost   []string
-	Cors    []string
+	Modules []string `json:""`
+	VHost   []string `json:""`
+	Cors    []string `json:""`
 
-	GasCap   uint64
-	TxFeeCap float64
+	GasCap   uint64  `json:""`
+	TxFeeCap float64 `json:""`
 
-	Http    *APIConfig
-	Ws      *APIConfig
-	Graphql *APIConfig
+	Http    *APIConfig `json:""`
+	Ws      *APIConfig `json:""`
+	Graphql *APIConfig `json:""`
 }
 
 type APIConfig struct {
-	Enabled bool
-	Port    uint64
-	Prefix  string
-	Host    string
+	Enabled bool   `json:""`
+	Port    uint64 `json:""`
+	Prefix  string `json:""`
+	Host    string `json:""`
 }
 
 type GpoConfig struct {
-	Blocks      uint64
-	Percentile  uint64
-	MaxPrice    *big.Int
-	IgnorePrice *big.Int
+	Blocks      uint64   `json:""`
+	Percentile  uint64   `json:""`
+	MaxPrice    *big.Int `json:""`
+	IgnorePrice *big.Int `json:""`
 }
 
 type MetricsConfig struct {
-	Enabled   bool
-	Expensive bool
-	InfluxDB  *InfluxDBConfig
+	Enabled   bool            `json:""`
+	Expensive bool            `json:""`
+	InfluxDB  *InfluxDBConfig `json:""`
 }
 
 type InfluxDBConfig struct {
-	V1Enabled    bool
-	Endpoint     string
-	Database     string
-	Username     string
-	Password     string
-	Tags         map[string]string
-	V2Enabled    bool
-	Token        string
-	Bucket       string
-	Organization string
+	V1Enabled    bool              `json:""`
+	Endpoint     string            `json:""`
+	Database     string            `json:""`
+	Username     string            `json:""`
+	Password     string            `json:""`
+	Tags         map[string]string `json:""`
+	V2Enabled    bool              `json:""`
+	Token        string            `json:""`
+	Bucket       string            `json:""`
+	Organization string            `json:""`
 }
 
 type CacheConfig struct {
-	Cache         uint64
-	PercGc        uint64
-	PercSnapshot  uint64
-	PercDatabase  uint64
-	PercTrie      uint64
-	Journal       string
-	Rejournal     time.Duration
-	NoPrefetch    bool
-	Preimages     bool
-	TxLookupLimit uint64
+	Cache         uint64        `json:""`
+	PercGc        uint64        `json:""`
+	PercSnapshot  uint64        `json:""`
+	PercDatabase  uint64        `json:""`
+	PercTrie      uint64        `json:""`
+	Journal       string        `json:""`
+	Rejournal     time.Duration `json:""`
+	NoPrefetch    bool          `json:""`
+	Preimages     bool          `json:""`
+	TxLookupLimit uint64        `json:""`
 }
 
 type AccountsConfig struct {
-	Unlock              []string
-	PasswordFile        string
-	AllowInsecureUnlock bool
-	UseLightweightKDF   bool
+	Unlock              []string `json:""`
+	PasswordFile        string   `json:""`
+	AllowInsecureUnlock bool     `json:""`
+	UseLightweightKDF   bool     `json:""`
 }
 
 func DefaultConfig() *Config {
@@ -201,7 +201,6 @@ func DefaultConfig() *Config {
 		SyncMode: "fast",
 		GcMode:   "full",
 		Snapshot: true,
-		EthStats: "",
 		TxPool: &TxPoolConfig{
 			Locals:       []string{},
 			NoLocals:     false,
@@ -297,12 +296,19 @@ func readConfigFile(path string) (*Config, error) {
 	}
 	// TODO: Use hcl as config format
 	ext := filepath.Ext(path)
-	switch ext {
-	case ".toml":
+	if ext == ".toml" {
 		return readLegacyConfig(data)
-	default:
-		return nil, fmt.Errorf("file path extension '%s' not found", ext)
 	}
+
+	// read configuration file
+	if ext != ".json" {
+		return nil, fmt.Errorf("suffix of %s is not json", path)
+	}
+	var config Config
+	if err := json.Unmarshal(data, &config); err != nil {
+		return nil, err
+	}
+	return &config, nil
 }
 
 func (c *Config) loadChain() error {
diff --git a/command/server/config_test.go b/command/server/config_test.go
index e11b02766c4877b2bf01b1b030eff78eda482d39..6ecc28b5c0d5ef5361e4c33f4bec1af40bc7e33e 100644
--- a/command/server/config_test.go
+++ b/command/server/config_test.go
@@ -1,6 +1,8 @@
 package server
 
 import (
+	"io/ioutil"
+	"path/filepath"
 	"testing"
 	"time"
 
@@ -75,6 +77,34 @@ func TestConfigMerge(t *testing.T) {
 	assert.Equal(t, c0, expected)
 }
 
+func TestConfigHcl(t *testing.T) {
+	readConfig := func(data string, format string) *Config {
+		tmpDir, err := ioutil.TempDir("/tmp", "test-config")
+		assert.NoError(t, err)
+
+		filename := filepath.Join(tmpDir, "config."+format)
+		assert.NoError(t, ioutil.WriteFile(filename, []byte(data), 0755))
+
+		config, err := readConfigFile(filename)
+		assert.NoError(t, err)
+		return config
+	}
+
+	cfg := `{
+		"datadir": "datadir",
+		"p2p": {
+			"max_peers": 30
+		}
+	}`
+	config := readConfig(cfg, "json")
+	assert.Equal(t, config, &Config{
+		DataDir: "datadir",
+		P2P: &P2PConfig{
+			MaxPeers: 30,
+		},
+	})
+}
+
 var dummyEnodeAddr = "enode://0cb82b395094ee4a2915e9714894627de9ed8498fb881cec6db7c65e8b9a5bd7f2f25cc84e71e89d0947e51c76e85d0847de848c7782b13c0255247a6758178c@44.232.55.71:30303"
 
 func TestConfigBootnodesDefault(t *testing.T) {
diff --git a/command/server/flags.go b/command/server/flags.go
index d9bd0174685dde00f77004cbf4e70d6ef96c32e9..5f4e88e6a6c8c8ecbe50809626c24b232737f0f4 100644
--- a/command/server/flags.go
+++ b/command/server/flags.go
@@ -29,7 +29,7 @@ func (c *Command) Flags() *flagset.Flagset {
 		Usage: "Path of the data directory to store information",
 		Value: &c.cliConfig.DataDir,
 	})
-	f.StringFlag(&flagset.StringFlag{
+	f.SliceStringFlag(&flagset.SliceStringFlag{
 		Name:  "config",
 		Usage: "File for the config file",
 		Value: &c.configFile,
diff --git a/go.mod b/go.mod
index b5f8b0032da6ce64c2ff44d8bf4f45e8f0152015..7a2ed2478371402c9c6527fcee712f10a5d5d3ed 100644
--- a/go.mod
+++ b/go.mod
@@ -36,6 +36,7 @@ require (
 	github.com/gorilla/websocket v1.4.2
 	github.com/graph-gophers/graphql-go v0.0.0-20201113091052-beb923fada29
 	github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d
+	github.com/hashicorp/hcl/v2 v2.10.1
 	github.com/holiman/bloomfilter/v2 v2.0.3
 	github.com/holiman/uint256 v1.2.0
 	github.com/huin/goupnp v1.0.2
diff --git a/go.sum b/go.sum
index a4b737eacd840f306e7d22ce824d7c00305ff9a0..cdb8050f378ad40d826cb339511325f9cdf9234a 100644
--- a/go.sum
+++ b/go.sum
@@ -53,6 +53,8 @@ github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrU
 github.com/VictoriaMetrics/fastcache v1.6.0 h1:C/3Oi3EiBCqufydp1neRZkqcwmEiuRT9c3fqvvgKm5o=
 github.com/VictoriaMetrics/fastcache v1.6.0/go.mod h1:0qHz5QP0GMX4pfmMA/zt5RgfNuXJrTP0zS7DqpHGGTw=
 github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII=
+github.com/agext/levenshtein v1.2.1 h1:QmvMAjj2aEICytGiWzmxoE0x2KZvE0fvmqMOfy2tjT8=
+github.com/agext/levenshtein v1.2.1/go.mod h1:JEDfjyjHDjOF/1e4FlBE/PkbqA9OfWu2ki2W0IB5558=
 github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw=
 github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
 github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
@@ -60,6 +62,11 @@ github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156 h1:eMwmnE/GDgah
 github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM=
 github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8=
 github.com/apache/arrow/go/arrow v0.0.0-20191024131854-af6fa24be0db/go.mod h1:VTxUBvSJ3s3eHAg65PNgrsn5BtqCRPdmyXh6rAfdxN0=
+github.com/apparentlymart/go-dump v0.0.0-20180507223929-23540a00eaa3/go.mod h1:oL81AME2rN47vu18xqj1S1jPIPuN7afo62yKTNn3XMM=
+github.com/apparentlymart/go-textseg v1.0.0 h1:rRmlIsPEEhUTIKQb7T++Nz/A5Q6C9IuX2wFoYVvnCs0=
+github.com/apparentlymart/go-textseg v1.0.0/go.mod h1:z96Txxhf3xSFMPmb5X/1W05FF/Nj9VFpLOpjS5yuumk=
+github.com/apparentlymart/go-textseg/v13 v13.0.0 h1:Y+KvPE1NYz0xl601PVImeQfFyEy6iT90AvPUL1NNfNw=
+github.com/apparentlymart/go-textseg/v13 v13.0.0/go.mod h1:ZK2fH7c4NqDTLtiYLvIkEghdlcqw7yxLeM89kiTRPUo=
 github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310 h1:BUAU3CGlLvorLI26FmByPp2eC2qla6E1Tw+scpcg/to=
 github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
 github.com/aws/aws-sdk-go-v2 v1.2.0 h1:BS+UYpbsElC82gB+2E2jiCBg36i8HlubTB/dO/moQ9c=
@@ -171,6 +178,8 @@ github.com/go-sourcemap/sourcemap v2.1.2+incompatible/go.mod h1:F8jJfvm2KbVjc5Nq
 github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
 github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk=
 github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
+github.com/go-test/deep v1.0.3 h1:ZrJSEWsXzPOxaZnFteGEfooLba+ju3FYIbOrS+rQd68=
+github.com/go-test/deep v1.0.3/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA=
 github.com/gofrs/uuid v3.3.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM=
 github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
 github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o=
@@ -182,9 +191,11 @@ github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4er
 github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
 github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
 github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y=
+github.com/golang/protobuf v1.1.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
 github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
 github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
 github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
 github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
 github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
 github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
@@ -234,6 +245,8 @@ github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ
 github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
 github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d h1:dg1dEPuWpEqDnvIw251EVy4zlP8gWbsGj4BsUKCRpYs=
 github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4=
+github.com/hashicorp/hcl/v2 v2.10.1 h1:h4Xx4fsrRE26ohAk/1iGF/JBqRQbyUqu5Lvj60U54ys=
+github.com/hashicorp/hcl/v2 v2.10.1/go.mod h1:FwWsfWEjyV/CMj8s/gqAuiviY72rJ1/oayI9WftqcKg=
 github.com/holiman/bloomfilter/v2 v2.0.3 h1:73e0e/V0tCydx14a0SCYS/EWCxgwLZ18CZcZKVu0fao=
 github.com/holiman/bloomfilter/v2 v2.0.3/go.mod h1:zpoh+gs7qcpqrHr3dB55AMiJwo0iURXE7ZOP9L9hSkA=
 github.com/holiman/uint256 v1.2.0 h1:gpSYcPLWGv4sG43I2mVLiDZCNDh/EpGjSk8tmtxitHM=
@@ -296,6 +309,7 @@ github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORN
 github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
 github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
 github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
+github.com/kylelemons/godebug v0.0.0-20170820004349-d65d576e9348/go.mod h1:B69LEHPfb2qLo0BaaOLcbitczOKLWTsrBG9LczfCD4k=
 github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc=
 github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw=
 github.com/labstack/echo/v4 v4.2.1/go.mod h1:AA49e0DZ8kk5jTOOCKNuPR6oTnBS0dYiM4FW1e6jwpg=
@@ -332,6 +346,8 @@ github.com/mitchellh/copystructure v1.0.0 h1:Laisrj+bAB6b/yJwB5Bt3ITZhGJdqmxquMK
 github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw=
 github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y=
 github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
+github.com/mitchellh/go-wordwrap v0.0.0-20150314170334-ad45545899c7 h1:DpOJ2HYzCv8LZP15IdmG+YdwD2luVPHITV96TkirNBM=
+github.com/mitchellh/go-wordwrap v0.0.0-20150314170334-ad45545899c7/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo=
 github.com/mitchellh/reflectwalk v1.0.0 h1:9D+8oIskB4VJBN5SFlmc27fSlIBZaov1Wpk/IfikLNY=
 github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
 github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
@@ -398,6 +414,7 @@ github.com/ryanuber/columnize v2.1.2+incompatible h1:C89EOx/XBWwIXl8wm8OPJBd7kPF
 github.com/ryanuber/columnize v2.1.2+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
 github.com/segmentio/kafka-go v0.1.0/go.mod h1:X6itGqS9L4jDletMsxZ7Dz+JFWxM6JHfPOCvTvk+EJo=
 github.com/segmentio/kafka-go v0.2.0/go.mod h1:X6itGqS9L4jDletMsxZ7Dz+JFWxM6JHfPOCvTvk+EJo=
+github.com/sergi/go-diff v1.0.0 h1:Kpca3qRNrduNnOQeazBd0ysaKrUJiIuISHxogkT9RPQ=
 github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo=
 github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible h1:Bn1aCHHRnjv4Bl16T8rcaFjYSrGrIZvpiGO6P3Q4GpU=
 github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA=
@@ -408,6 +425,7 @@ github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9
 github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
 github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
 github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
+github.com/spf13/pflag v1.0.2/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
 github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
 github.com/status-im/keycard-go v0.0.0-20190316090335-8537d3370df4 h1:Gb2Tyox57NRNuZ2d3rmvB3pcmbu7O1RS3m8WRx7ilrg=
 github.com/status-im/keycard-go v0.0.0-20190316090335-8537d3370df4/go.mod h1:RZLeN1LMWmRsyYjvAu+I6Dm9QmlDaIIt+Y+4Kd7Tp+Q=
@@ -435,11 +453,18 @@ github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/X
 github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc=
 github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8=
 github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ=
+github.com/vmihailenco/msgpack v3.3.3+incompatible/go.mod h1:fy3FlTQTDXWkZ7Bh6AcGMlsjHatGryHQYUTf1ShIgkk=
+github.com/vmihailenco/msgpack/v4 v4.3.12/go.mod h1:gborTTJjAo/GWTqqRjrLCn9pgNN+NXzzngzBKDPIqw4=
+github.com/vmihailenco/tagparser v0.1.1/go.mod h1:OeAg3pn3UbLjkWt+rN9oFYB6u/cQgqMEUPoW2WPyhdI=
 github.com/willf/bitset v1.1.3/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4=
 github.com/xlab/treeprint v0.0.0-20180616005107-d6fb6747feb6/go.mod h1:ce1O1j6UtZfjr22oyGxGLbauSBp2YVXpARAosm7dHBg=
 github.com/xsleonard/go-merkle v1.1.0 h1:fHe1fuhJjGH22ZzVTAH0jqHLhTGhOq3wQjJN+8P0jQg=
 github.com/xsleonard/go-merkle v1.1.0/go.mod h1:cW4z+UZ/4f2n9IJgIiyDCdYguchoDyDAPmpuOWGxdGg=
 github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
+github.com/zclconf/go-cty v1.2.0/go.mod h1:hOPWgoHbaTUnI5k4D2ld+GRpFJSCe6bCM7m1q/N4PQ8=
+github.com/zclconf/go-cty v1.8.0 h1:s4AvqaeQzJIu3ndv4gVIhplVD0krU+bgrcLSVUnaWuA=
+github.com/zclconf/go-cty v1.8.0/go.mod h1:vVKLxnk3puL4qRAv72AO+W99LUD4da90g3uUAzyuvAk=
+github.com/zclconf/go-cty-debug v0.0.0-20191215020915-b22d67c1ba0b/go.mod h1:ZRKQfBXbGkpdV6QMzT3rU1kSTAnfu1dO8dPKjYprgj8=
 go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
 go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
 go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
@@ -449,6 +474,7 @@ go.uber.org/zap v1.9.1/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
 golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
 golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
 golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
+golang.org/x/crypto v0.0.0-20190426145343-a29dc8fdc734/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 golang.org/x/crypto v0.0.0-20190909091759-094676da4a83/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
@@ -487,6 +513,7 @@ golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzB
 golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
 golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
 golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20180811021610-c39426892332/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@@ -501,6 +528,7 @@ golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLL
 golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
 golang.org/x/net v0.0.0-20200813134508-3edf25e44fcc/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
 golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
@@ -535,6 +563,7 @@ golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5h
 golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190502175342-a43fa875dd82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=