2020-02-13 22:55:19 +00:00
|
|
|
// Code generated for package data by go-bindata DO NOT EDIT. (@generated)
|
|
|
|
// sources:
|
|
|
|
// data/data.json
|
|
|
|
package data
|
|
|
|
|
|
|
|
import (
|
|
|
|
"bytes"
|
|
|
|
"compress/gzip"
|
|
|
|
"fmt"
|
|
|
|
"io"
|
|
|
|
"io/ioutil"
|
|
|
|
"os"
|
|
|
|
"path/filepath"
|
|
|
|
"strings"
|
|
|
|
"time"
|
|
|
|
)
|
|
|
|
|
|
|
|
func bindataRead(data []byte, name string) ([]byte, error) {
|
|
|
|
gz, err := gzip.NewReader(bytes.NewBuffer(data))
|
|
|
|
if err != nil {
|
|
|
|
return nil, fmt.Errorf("Read %q: %v", name, err)
|
|
|
|
}
|
|
|
|
|
|
|
|
var buf bytes.Buffer
|
|
|
|
_, err = io.Copy(&buf, gz)
|
|
|
|
clErr := gz.Close()
|
|
|
|
|
|
|
|
if err != nil {
|
|
|
|
return nil, fmt.Errorf("Read %q: %v", name, err)
|
|
|
|
}
|
|
|
|
if clErr != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
|
|
|
|
return buf.Bytes(), nil
|
|
|
|
}
|
|
|
|
|
|
|
|
type asset struct {
|
|
|
|
bytes []byte
|
|
|
|
info os.FileInfo
|
|
|
|
}
|
|
|
|
|
|
|
|
type bindataFileInfo struct {
|
|
|
|
name string
|
|
|
|
size int64
|
|
|
|
mode os.FileMode
|
|
|
|
modTime time.Time
|
|
|
|
}
|
|
|
|
|
|
|
|
// Name return file name
|
|
|
|
func (fi bindataFileInfo) Name() string {
|
|
|
|
return fi.name
|
|
|
|
}
|
|
|
|
|
|
|
|
// Size return file size
|
|
|
|
func (fi bindataFileInfo) Size() int64 {
|
|
|
|
return fi.size
|
|
|
|
}
|
|
|
|
|
|
|
|
// Mode return file mode
|
|
|
|
func (fi bindataFileInfo) Mode() os.FileMode {
|
|
|
|
return fi.mode
|
|
|
|
}
|
|
|
|
|
|
|
|
// Mode return file modify time
|
|
|
|
func (fi bindataFileInfo) ModTime() time.Time {
|
|
|
|
return fi.modTime
|
|
|
|
}
|
|
|
|
|
|
|
|
// IsDir return file whether a directory
|
|
|
|
func (fi bindataFileInfo) IsDir() bool {
|
|
|
|
return fi.mode&os.ModeDir != 0
|
|
|
|
}
|
|
|
|
|
|
|
|
// Sys return file is sys mode
|
|
|
|
func (fi bindataFileInfo) Sys() interface{} {
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
2022-07-01 19:19:30 +00:00
|
|
|
var _dataDataJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\xbd\x6b\x53\xe3\x48\x9a\xf7\xfd\x7e\x3e\x45\x06\xb5\x11\xb3\x3b\x4f\xc9\x60\x63\x9b\xc3\xc6\xbe\xa0\x81\xaa\x22\xba\x0a\xb8\x81\xaa\xde\x89\x61\x1f\x46\x48\x89\xad\x45\x96\xd4\x92\x4c\x15\x5d\xd3\xf7\x67\xbf\x23\x33\x75\x56\x4a\x96\xe4\x03\x96\xfd\x67\x23\x76\xba\xac\x3c\x29\x33\x75\x5d\xbf\x3c\xfd\xf3\xe7\x5f\xc8\xce\xaf\x87\xde\x37\xea\x7a\x86\x6d\xdd\x52\xf7\xc5\xd0\xe8\x95\xe3\x1b\xb6\xe5\xed\x1c\x93\x9f\x7f\x21\x64\xe7\xa5\xdb\xe9\xee\x05\xff\x20\x3b\xd4\xd7\xf4\x9d\x63\x62\x4d\x4d\xf3\x3d\xff\xe1\x79\xfa\x48\x55\xc7\x08\x03\x90\x1d\xd5\x34\xed\xef\x8a\xe3\x1a\x2f\x86\x49\x47\x94\x85\xde\xf1\xdd\x29\xdd\x79\x1f\x3c\xb7\x6c\xeb\x75\x62\x4f\x3d\x45\x9d\xfa\x63\xf6\xf4\x49\x35\xbd\xe8\xf1\xa3\x61\xe9\x8a\xaa\xeb\x2e\xf5\x58\x11\x76\xf6\x3a\xfc\xff\xc2\xc7\xd4\x52\x1f\x4d\xaa\xa8\xfa\xc4\xf0\x58\x99\x15\xc7\x9c\x8e\x0c\x5e\xda\x9d\x4b\x75\x42\x3d\x47\xd5\xe8\x67\xe3\x89\x6a\xaf\x9a\x49\xdf\x7f\x36\x26\x86\x7f\xa3\x5a\x23\xea\xbe\x0f\x5e\xef\x44\xd3\xec\xa9\xe5\xbf\x3f\xa3\x4f\xea\xd4\xf4\x6f\x7d\xdb\x55\x47\xf4\xd4\x54\x3d\x2f\xfc\xed\xce\x36\xa9\xab\xfa\xbc\x4a\x34\xdb\xd2\xbd\xf7\x5f\xa6\xbe\xea\x1b\xd6\xe8\x24\xcc\xf7\x37\xfa\x38\xb6\xed\xe7\xf7\xdf\x54\xd3\xd0\xe5\x8f\x6e\xa8\x67\x4f\x5d\x8d\xfe\x9f\xa9\xed\xab\xef\x2f\x6d\x9d\xde\x50\xcf\x77\x0d\x8d\x25\x1c\xbe\x8f\x61\x79\x54\x9b\xba\x54\x71\x6c\xd7\xe7\xef\x1b\x3e\x61\x15\x6b\x52\x5f\x71\x5c\xfa\x44\x5d\x97\x46\xb5\xa2\xf8\xaf\x0e\xe5\x2f\x7c\x61\xf9\xd4\xb5\x54\xf3\xe2\xfa\xfd\xf9\x8f\xe8\x3f\x3f\xd9\x9e\x6f\xa9\x93\xa8\x46\x1d\xd7\x7e\x32\x4c\xc3\x1a\xe5\xea\xda\xa5\xbf\x4f\xa9\xe7\x8f\xa9\xaa\x53\x57\xa1\x3f\x7c\x57\x55\xc4\x3f\x3c\x9e\xad\xf1\x83\x45\xf9\x6f\xe5\x86\x4e\x6c\x9f\x2a\xe7\x3c\x80\x3c\xf2\xc8\xb5\xa7\x4e\x18\x39\x15\xeb\x23\x7b\x22\x8f\x34\xf5\x58\x99\x27\x54\x1a\xef\xab\x47\xdd\x28\xda\xd4\xf2\x8d\x09\x55\x34\xdb\x7a\x32\xf8\x7b\xb0\xbe\x63\xbb\xc6\x1f\xbc\x95\x3a\xcf\x87\x5e\xc7\xb0\x77\x5f\xba\x8f\xd4\x57\xbb\xff\x95\xec\x6e\x99\xea\x1d\xf6\xfb\xfb\xf1\x23\xde\x21\x14\x55\xf4\x08\xc5\xb4\xed\xe7\xa9\x93\xed\xaf\x9e\xe8\x20\xca\xa3\xaa\x3d\x53\x8b\x77\x67\xf6\x11\x44\xa9\xf8\xa6\xa7\x68\x86\x33\xa6\xae\xe2\x4d\x0d\x5f\xb4\xcc\xdd\xe7\xdb\x87\xf3\xd3\xb3\x4f\xe7\xec\xff\xdf\x9e\x3c\xfc\x76\x71\xf7\xe9\xe1\xe4\xfc\xf6\xa1\xdb\x3b\x7c\xf8\x78\xfa\xe5\xe1\xf6\xd3\x49\x6f\x30\x7c\x5f\x18\xae\x37\x18\x86\xe1\xf6\x0f\xfb\xf2\x70\xa7\x9f\x4e\x4e\x3f\x9d\xf4\xf6\x1e\xae\xaf\x3e\xff\xbd\xbb\xbf\x37\x48\x04\xbb\xa9\x94\xe9\x4d\xa5\x2c\x6f\x0a\x33\xdc\x61\x55\xf0\x67\x6c\x08\x4c\xea\x27\x0c\x41\xe1\x47\x3c\xa7\x89\x60\x3f\x52\xcb\x37\x34\xde\xf8\x8a\x6f\x3f\x53\x4b\xf9\x2e\xbe\xba\x5c\x52\xc9\x7e\xa2\x4c\x6c\x9d\xb2\x10\xc1\x27\x1a\x06\xd2\x78\xef\xf5\x14\x87\xba\xca\xef\xb6\x68\xc0\x44\x1a\x9a\x65\x28\x8f\x86\xa5\xe8\x86\xcb\x1e\xed\xda\x8e\xbf\xab\x59\xc6\xee\xa3\x61\x25\x83\xb0\xce\x19\x85\xa1\xbe\xc6\xc3\x58\xd4\xef\xe8\xb1\xf1\x7a\xb2\x5d\x8d\x2a\x96\xad\x53\x85\x55\x82\xa6\xfa\xcc\x9c\xb1\x18\x51\x98\x17\x6a\xf9\xca\xef\x8e\x97\x32\x06\x13\xf5\x99\x2a\x86\xc3\x43\x7b\xca\xd4\x37\x4c\x45\x1b\xab\x81\xdd\x4b\xbe\xaf\x45\xfd\xef\xb6\xfb\x1c\x98\x45\xf6\x54\xb3\x8c\xf8\xeb\x53\x75\xc5\xb6\xcc\xd7\xbc\xb5\x71\xa9\x67\x9b\x2f\xfc\x1d\xa2\xf2\x8b\xdf\x3a\xfc\xb7\xe8\x63\x70\xa9\x3a\x31\xac\x11\x0b\x69\x51\x6e\xca\x14\x43\x37\xa9\xc2\xbe\x4f\x7b\xca\x13\xdd\xdf\x9b\xe0\xe3\xd8\x1b\x84\x75\xf0\xc2\xde\xb9\x17\xfd\xcb\x36\xa7\x13\x1a\xb4\x4f\xd4\x5d\x5e\x54\x77\xd7\x34\x1e\x77\x83\x8f\x68\x57\x84\x0a\x7d\x5b\xe6\x2b\x73\x5c\xfb\xc7\x6b\xfc\x9d\x8d\xa9\x6a\xfa\xe3\x3f\x94\xac\xe7\xec\xf6\x0e\xf8\x67\xd7\xcd\x14\x24\x93\xda\xa9\x6d\xf9\xae\x6d\x9a\xd4\xad\xfa\xe9\x6a\xaa\x1f\xf4\x61\xcd\xd0\xdd\x5c\x17\x14\x5f\xf7\xd4\xf2\xd5\xd1\x88\xea\x8a\x66\xda\xd3\xdc\x17\x2e\x0c\x39\x33\xcc\xfc\xb1\xe2\xda\xd3\xa0\x73\xa4\xbe\xf4\xc0\xdb\x8f\x6d\xcf\x77\x54\x7f\xac\x38\xae\xfd\x62\x30\x1f\xcb\x0b\x9b\x0e\x6b\x06\x5e\xcc\xa4\x9a\x9f\xfb\x2a\x58\x61\x27\xb6\x65\xf8\x36\x73\x55\xaa\x46\xd9\xb7\x6e\xd8\xbc\x5c\xfd\x3d\x2f\x72\x95\xb6\xae\xd0\x17\xe1\xa1\x93\x3d\x7a\x30\x49\x84\x29\x74\xa7\x3e\x75\x27\x8
|
2020-02-13 22:55:19 +00:00
|
|
|
|
|
|
|
func dataDataJsonBytes() ([]byte, error) {
|
|
|
|
return bindataRead(
|
|
|
|
_dataDataJson,
|
|
|
|
"data/data.json",
|
|
|
|
)
|
|
|
|
}
|
|
|
|
|
|
|
|
func dataDataJson() (*asset, error) {
|
|
|
|
bytes, err := dataDataJsonBytes()
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
|
2022-07-01 19:19:30 +00:00
|
|
|
info := bindataFileInfo{name: "data/data.json", size: 3532441, mode: os.FileMode(420), modTime: time.Unix(1557785965, 0)}
|
2020-02-13 22:55:19 +00:00
|
|
|
a := &asset{bytes: bytes, info: info}
|
|
|
|
return a, nil
|
|
|
|
}
|
|
|
|
|
|
|
|
// Asset loads and returns the asset for the given name.
|
|
|
|
// It returns an error if the asset could not be found or
|
|
|
|
// could not be loaded.
|
|
|
|
func Asset(name string) ([]byte, error) {
|
|
|
|
cannonicalName := strings.Replace(name, "\\", "/", -1)
|
|
|
|
if f, ok := _bindata[cannonicalName]; ok {
|
|
|
|
a, err := f()
|
|
|
|
if err != nil {
|
|
|
|
return nil, fmt.Errorf("Asset %s can't read by error: %v", name, err)
|
|
|
|
}
|
|
|
|
return a.bytes, nil
|
|
|
|
}
|
|
|
|
return nil, fmt.Errorf("Asset %s not found", name)
|
|
|
|
}
|
|
|
|
|
|
|
|
// MustAsset is like Asset but panics when Asset would return an error.
|
|
|
|
// It simplifies safe initialization of global variables.
|
|
|
|
func MustAsset(name string) []byte {
|
|
|
|
a, err := Asset(name)
|
|
|
|
if err != nil {
|
|
|
|
panic("asset: Asset(" + name + "): " + err.Error())
|
|
|
|
}
|
|
|
|
|
|
|
|
return a
|
|
|
|
}
|
|
|
|
|
|
|
|
// AssetInfo loads and returns the asset info for the given name.
|
|
|
|
// It returns an error if the asset could not be found or
|
|
|
|
// could not be loaded.
|
|
|
|
func AssetInfo(name string) (os.FileInfo, error) {
|
|
|
|
cannonicalName := strings.Replace(name, "\\", "/", -1)
|
|
|
|
if f, ok := _bindata[cannonicalName]; ok {
|
|
|
|
a, err := f()
|
|
|
|
if err != nil {
|
|
|
|
return nil, fmt.Errorf("AssetInfo %s can't read by error: %v", name, err)
|
|
|
|
}
|
|
|
|
return a.info, nil
|
|
|
|
}
|
|
|
|
return nil, fmt.Errorf("AssetInfo %s not found", name)
|
|
|
|
}
|
|
|
|
|
|
|
|
// AssetNames returns the names of the assets.
|
|
|
|
func AssetNames() []string {
|
|
|
|
names := make([]string, 0, len(_bindata))
|
|
|
|
for name := range _bindata {
|
|
|
|
names = append(names, name)
|
|
|
|
}
|
|
|
|
return names
|
|
|
|
}
|
|
|
|
|
|
|
|
// _bindata is a table, holding each asset generator, mapped to its name.
|
|
|
|
var _bindata = map[string]func() (*asset, error){
|
|
|
|
"data/data.json": dataDataJson,
|
|
|
|
}
|
|
|
|
|
|
|
|
// AssetDir returns the file names below a certain
|
|
|
|
// directory embedded in the file by go-bindata.
|
|
|
|
// For example if you run go-bindata on data/... and data contains the
|
|
|
|
// following hierarchy:
|
|
|
|
// data/
|
|
|
|
// foo.txt
|
|
|
|
// img/
|
|
|
|
// a.png
|
|
|
|
// b.png
|
|
|
|
// then AssetDir("data") would return []string{"foo.txt", "img"}
|
|
|
|
// AssetDir("data/img") would return []string{"a.png", "b.png"}
|
|
|
|
// AssetDir("foo.txt") and AssetDir("notexist") would return an error
|
|
|
|
// AssetDir("") will return []string{"data"}.
|
|
|
|
func AssetDir(name string) ([]string, error) {
|
|
|
|
node := _bintree
|
|
|
|
if len(name) != 0 {
|
|
|
|
cannonicalName := strings.Replace(name, "\\", "/", -1)
|
|
|
|
pathList := strings.Split(cannonicalName, "/")
|
|
|
|
for _, p := range pathList {
|
|
|
|
node = node.Children[p]
|
|
|
|
if node == nil {
|
|
|
|
return nil, fmt.Errorf("Asset %s not found", name)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if node.Func != nil {
|
|
|
|
return nil, fmt.Errorf("Asset %s not found", name)
|
|
|
|
}
|
|
|
|
rv := make([]string, 0, len(node.Children))
|
|
|
|
for childName := range node.Children {
|
|
|
|
rv = append(rv, childName)
|
|
|
|
}
|
|
|
|
return rv, nil
|
|
|
|
}
|
|
|
|
|
|
|
|
type bintree struct {
|
|
|
|
Func func() (*asset, error)
|
|
|
|
Children map[string]*bintree
|
|
|
|
}
|
|
|
|
|
|
|
|
var _bintree = &bintree{nil, map[string]*bintree{
|
|
|
|
"data": &bintree{nil, map[string]*bintree{
|
|
|
|
"data.json": &bintree{dataDataJson, map[string]*bintree{}},
|
|
|
|
}},
|
|
|
|
}}
|
|
|
|
|
|
|
|
// RestoreAsset restores an asset under the given directory
|
|
|
|
func RestoreAsset(dir, name string) error {
|
|
|
|
data, err := Asset(name)
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
info, err := AssetInfo(name)
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
err = os.MkdirAll(_filePath(dir, filepath.Dir(name)), os.FileMode(0755))
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
err = ioutil.WriteFile(_filePath(dir, name), data, info.Mode())
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
err = os.Chtimes(_filePath(dir, name), info.ModTime(), info.ModTime())
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
// RestoreAssets restores an asset under the given directory recursively
|
|
|
|
func RestoreAssets(dir, name string) error {
|
|
|
|
children, err := AssetDir(name)
|
|
|
|
// File
|
|
|
|
if err != nil {
|
|
|
|
return RestoreAsset(dir, name)
|
|
|
|
}
|
|
|
|
// Dir
|
|
|
|
for _, child := range children {
|
|
|
|
err = RestoreAssets(dir, filepath.Join(name, child))
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func _filePath(dir, name string) string {
|
|
|
|
cannonicalName := strings.Replace(name, "\\", "/", -1)
|
|
|
|
return filepath.Join(append([]string{dir}, strings.Split(cannonicalName, "/")...)...)
|
|
|
|
}
|