diff --git a/.example/other/test.go b/.example/other/test.go index 9418f227a..d8ade6f94 100644 --- a/.example/other/test.go +++ b/.example/other/test.go @@ -1,30 +1,15 @@ package main import ( - "github.com/gogf/gf/frame/g" - "github.com/gogf/gf/net/ghttp" - "github.com/gogf/gf/os/glog" + "fmt" + "github.com/gogf/gf/os/gtime" + "github.com/gogf/gf/util/gconv" ) func main() { - s := g.Server() - s.Group("/api.v2", func(group *ghttp.RouterGroup) { - group.ALL("/user/list", func(r *ghttp.Request) { - glog.Debug(r.Method, r.RequestURI) - - paramKey := "X-CSRF-Token" - - // // www-form or query - // glog.Debug("go:", r.Request.FormValue(paramKey)) - - // // post form-data - // glog.Debug("go form:", r.Request.PostFormValue(paramKey)) - - glog.Debug("gf GetString:", r.GetString(paramKey)) - glog.Debug("gf GetFormString:", r.GetFormString(paramKey)) - r.Response.Writeln("list") - }) - }) - s.SetPort(8199) - s.Run() + t1 := gconv.Convert(1989, "Time") + t2 := gconv.Time("2033-01-11 04:00:00 +0800 CST") + fmt.Println(gtime.Timestamp()) + fmt.Println(t1) + fmt.Println(t2) } diff --git a/os/gfile/gfile_contents.go b/os/gfile/gfile_contents.go index bf3c77594..8866a9927 100644 --- a/os/gfile/gfile_contents.go +++ b/os/gfile/gfile_contents.go @@ -23,7 +23,7 @@ var ( // GetContents returns the file content of as string. // It returns en empty string if it fails reading. func GetContents(path string) string { - return string(GetBytes(path)) + return gconv.UnsafeBytesToStr(GetBytes(path)) } // GetBytes returns the file content of as []byte. diff --git a/os/gres/gres_func.go b/os/gres/gres_func.go index bad4ca713..9b20b4fab 100644 --- a/os/gres/gres_func.go +++ b/os/gres/gres_func.go @@ -91,9 +91,18 @@ func Unpack(path string) ([]*File, error) { // UnpackContent unpacks the content to []*File. func UnpackContent(content string) ([]*File, error) { - data, err := gcompress.UnGzip(hexStrToBytes(content)) - if err != nil { - return nil, err + var data []byte + var err error + if isHexStr(content) { + data, err = gcompress.UnGzip(hexStrToBytes(content)) + if err != nil { + return nil, err + } + } else { + data, err = gcompress.UnGzip(gconv.UnsafeStrToBytes(content)) + if err != nil { + return nil, err + } } reader, err := zip.NewReader(bytes.NewReader(data), int64(len(data))) if err != nil { @@ -106,6 +115,21 @@ func UnpackContent(content string) ([]*File, error) { return array, nil } +// isHexStr checks and returns whether given content is hex string. +// It returns true if is hex string, or false if not. +func isHexStr(s string) bool { + var r bool + for i := 0; i < len(s); i++ { + r = (s[i] >= '0' && s[i] <= '9') || + (s[i] >= 'a' && s[i] <= 'f') || + (s[i] >= 'A' && s[i] <= 'F') + if !r { + return false + } + } + return true +} + // bytesToHexString converts binary content to hex string content. func bytesToHexStr(b []byte) string { dst := make([]byte, hex.EncodedLen(len(b))) diff --git a/os/gres/gres_unit_1_test.go b/os/gres/gres_unit_1_test.go index 525fd4de4..dcf554136 100644 --- a/os/gres/gres_unit_1_test.go +++ b/os/gres/gres_unit_1_test.go @@ -7,6 +7,7 @@ package gres_test import ( + "github.com/gogf/gf/os/gtime" "strings" "testing" @@ -17,7 +18,7 @@ import ( "github.com/gogf/gf/test/gtest" ) -func Test_Pack(t *testing.T) { +func Test_PackToGoFile(t *testing.T) { gtest.Case(t, func() { srcPath := gdebug.CallerDirectory() + "/testdata/files" goFilePath := gdebug.CallerDirectory() + "/testdata/testdata.go" @@ -27,6 +28,35 @@ func Test_Pack(t *testing.T) { }) } +func Test_Pack(t *testing.T) { + gtest.Case(t, func() { + srcPath := gdebug.CallerDirectory() + "/testdata/files" + data, err := gres.Pack(srcPath) + gtest.Assert(err, nil) + + r := gres.New() + err = r.Add(string(data)) + gtest.Assert(err, nil) + gtest.Assert(r.Contains("files"), true) + }) +} + +func Test_PackToFile(t *testing.T) { + gtest.Case(t, func() { + srcPath := gdebug.CallerDirectory() + "/testdata/files" + dstPath := gfile.Join(gfile.TempDir(), gtime.TimestampNanoStr()) + err := gres.PackToFile(srcPath, dstPath) + gtest.Assert(err, nil) + + defer gfile.Remove(dstPath) + + r := gres.New() + err = r.Load(dstPath) + gtest.Assert(err, nil) + gtest.Assert(r.Contains("files"), true) + }) +} + func Test_PackMulti(t *testing.T) { gtest.Case(t, func() { srcPath := gdebug.CallerDirectory() + "/testdata/files" diff --git a/os/gres/testdata/data/data.go b/os/gres/testdata/data/data.go index 7fa4473b1..a59864d77 100644 --- a/os/gres/testdata/data/data.go +++ b/os/gres/testdata/data/data.go @@ -3,7 +3,7 @@ package data import "github.com/gogf/gf/os/gres" func init() { - if err := gres.Add("1f8b08000000000002ffb49a095413d7f7c79f0a2211140405ace2101194252111504388226153d9242ea042433221c16c240159440111d1828a0b2ea080c50d11452ba2e00622225471a9b81517046b81aad82aaefd9f2480334988d1dfbf9e134366defddcfbeebb6f66de9b6fc0ec415ac6600800c0216cb43f40fc1b01740143c0677122f0f22f9c44c0e3cea3698301f6758c25311c7899902e6143ae1016cf16f060fcb265cbf0129827e4d225b0188b592482991cf1120c04411093235e0a495b128853700e38071c81e43c79ca343b07acec3483ce60c32a4e13b001b37586e4566d64b20000d24fffe1ea7f09971787e3f039ffbf9112d5473a59166977b2bb8b72a41bf4f001c84807f7452a0b318f6b1e2a354636e9bf9b667dc6f68c68b144c0fbef06c7517d979d645da6519def7f7d708c95a2fe2fc6c8597dc05364013be8b4a67e7d8cf41503d660a8462d198feaf410a00b981c11012f8e0e97999303f94b34371f8530977eec25b05842c04962257db0bea31043c097c07c89947ef6f866922100c0502d1dd34b97d9f7119568e983a67fd69725445dbab47a68df9f25e2ff9625222a4b4495592222fb95b0c17c90c65922cab24444650945f39d7eac56e32c1135c852ddaa71a840f4802ee010a6f2f130ffcb4ccfc98f5c8261c35cae405aedded23fb0986502119729fdbd40fa87ace419cbec6740000048331791f4fe5cb4246f6e49d9dc927ca825b9a025f908c2d9d3f2ec675b3364de0223a0185b0080ad66de44d1fd796bccbb9ed458de78acf1c4f51484abc6cac6f2eb49f28e4d3dbd74220060a25a57c37b5dc5b3edddfdd0defa9c3d3d93dfbaf78cea1e3d6fbe92690100b0d0d80d6dc1ff9b1b55452475f31d4534b4c7d49ec911e1617e5f749a1346a1097859bfd417a4142e6a8f641800000cbe092ecb91025c4575ef328cb6fe3a1cd5f748faffdaf7487a4fdfe3e84a7d27294f14a9974a964db099ec0efe2d5ee4494079911d22a14a67b75b1877b8ac0691ec20d8aaff1c88a265c0e934919a1c281246a2093d39e8bd914b59aa67afd40377b9c5c451b21e7e8b0779ff911e545d08e0f6ce8aafd7c030245b7631f88e32305382f46421522cf832a512644f2258d9192ce9cbbc4f94dda12d869efe7a25a870244f862a47b233d82f45217784e99cfdf9eb8e14d3425bf01d69315582f4a4251651b9e4e9b13c2e14038bc41c01df154bc039602198cf103039fc08576cb484653f153b9d82214b411459c7c83208459e3eb21c49c190f1b216d2e80ce2476d9006e2ffadd1c973f93f46278350e43927cb91a8e8de5bcdd9aa1c9de2257d0822baefb8ac1bf69ab3385cf83f7c4040fb89a46b78edc3a8b85e195faa5f3809003049edb5c000e55014adc18546e56342d55cfc276b0080b5daee19a3bcc99f1594a69ad28cb6c3f43bfb2801f8323b00809d5ab7468a6e690bfe9339a351bdd6cdb872930300e0a8ad575d64c8dfb18695d6bb482090e0196271df0a5073f3110873bc5812c7857148900d24bf26b2047c89bd98130f93a0c94461ac8beca0048e95d8d3b99c083e0962c07c092c72910f964d73f89f44000051ad6b4caf6b0e8f1e017f47ec4628009e2b8810e084fc883ed2da003f2f7dcc688c742de1e34d9ddb131171c8600080f9f4f45200c000f15caf99a0e4ea98e7d2b1107a078b01186a24fd0c003b734d011858c2a12d942cf49d43620878383a53100ee36279425900e458522c4fc88325742896c7e58b49b1ae58590b125f4c921ec663215913c95257ec42df00c85d208221279c23ce012b2b22b288c922cda57af6988b982c572c5b221192f0d2253b6ed9649c401481274c9b360def40c41389f62226cb5e1cc797d063edf9e2f172482f870a8b19228e50c211f021e96f7ab8205ae28ac5f6b491ffeb899327ec73c417f7f48a21e0e163e9423c01e7805765c464f4d908a3455c59684c061ee6c23c982f11e30938824a3b0987c552ed4d7a46ee8ef2c58e1ccb1392dc45305d0253e912984274204cb37770b27770a61188a4c94412c129848c5768a4ca5c20a209045c8a9bd41de4c911c1cb04a2a562c83dc81161ded348c1de57c0e4b0e294dc3b919c9c4993a7f6b8473442983319249640c4a34b28f2aa14f223c8f82f07112da5bd27f98b38305f42970e1a8540c62b1deb1d60bcc208cbcb07df533fd2eb4e5f2d52302f17dd1a040066a50fd58dc6d6ee5cb848406b325b12c18fe097d50e6ea831b5366d3118a13d3348cb2665e3817941373c67cdc3ce9c3769dead5ffc13ff601ca218d30e0e0ffca073efac176f5d0a76f508e871e41e2b8bf57a31be73a013a7b41809dc6bad0d3b9e877c689866ae67e5c7983da92bfb4dc38ec4e08727cfde6f8e289e9e6b5afc88c22ef890b4aae0e88ca7ed6d75da1bec6299bbed8e1a84bc66def9d7eccdd957decc32aba3e50167ca9ecf7230691a38aee9df37f072b38f78cb2746c2f4a2bf26f1b368da167e9e77abb72c7eb377e55ac1b80a5a0d4e671fd6392abc8a95a7ffc675adf7c6d916da6fd284dabcebc41b86fe8b4bb98fe74f4acdf11b6294bb21e858eaeba8f9be4b61537ad36a9b85e6b6e3dd3b265a3b52663d38e4676ac4cc7ab45d72cae44d06d572a26086cd1ddab37ca7c09929298e25568d23ea3236379c676a9988028da7b1af55a5ccb5f1ea48f3d6f62f1c539cbe6da3deb6cc7f561fb61ac49a4dffdb9f1ab5bbfb9ed1c1f0f6b8f80adb2c83df720b37d9b2f7feba833cfab9ee806db6d9ef9c21eaf13b9309261b8efff4c7c1aca99eb3b25f5d9df3189a400d8f7e50336534e652f5e09c2292534eeaef06ad3b337e6a8dd1daefc91b7d9b586037de4f7036795594fed372fa049f8e855bdcd32c311f3b37a5eed4da7e3562c015db6109c73bc3ad9ba6dcb8d2957132c465dfce35fac5bee5ddf38386f9c4dfa91d353f69c9ef1d8c2373b25fd282760f2e9af1ced12806f2195a98da459fcd3027f069b8890727142ec63dbc7da2d904b7facf83775821c1beeb7e731eb7883a4e7039279198b4217356ab730766a5ce9d92d51e8eb7e6870f5d462a7bfae0b121a19916461dbbb54b5b97e63aea278b2c6f68c71cacf9c95fb75fd237701af99c7529c1a5a26b29a97c5337bd8dba89c9e46505bcde5236b0834a5eef6d9982d1dfbf2fda631387de5de24fb2721cf9f984fd6543faa8727f8b13293f8c49db64f764a8e1cbc64683c183711679d718bfee8cf9e5c4890b51b93f66e6afbe59d5fda23e306bb4cf9555c6ae95b7703bc837494e8fd754d35b32875fdb55fde811347ab2992426065bfd22bcd4dbb5f2b73d27d2d2baa794cebee5bff7eeb6a89cebbfbc74db941e2299bce08fe2c6b58698d5c2a79703978bebe777341fd761dc25e44e8d1b51db1cb726fbe6a4274e6b8d8e56728cee1edfefe5b7fb6aa3916edae17569024bfaecbb2bc74c4daadf86fff9c891e1d7fe654f59f1beabfe8f73b1d7a9c93343da97c497ae9f56b12e6de7ee35030c2795c49f491fe98d613376ac22b8a43537877e7cba775b46d9b987e7864f6fae3049085b6ea833dcfce2ea664a5af08385b4bf020a3d38ef4c33033349fa3f3468d5568f799b5349bfefdc4c1169b5dc8dead89bb5e2f315dbeecf252f0ada3b12ee9c144cf7f4f434c8f4cc7cf68b3f06bf777d6490f76f0ed990efdee07aa30eecde79a283c551ef1bcc866d64ee1b107155f2f8e3bbd7dd5b6e7fb8bff4484145c5fd06dd6aafdbc7e30f43bef55357bc76b7d956fff8f0c961f4473767974f7548320fcfebfcb3ca7da98b70bb56427c7ce5f2ac79e561dbbbcaf9c627baddd67bc7fd3b2b3fe90631cfdb39c7a9cb041f9c32485099bcb9f6a1c7bed2badcf3570cb3fe39b1e5d8bab009652ff8bac67bd625afe13dd23b5b35cb74e5e7fab057574b1996e2ba399830fbd9feda9933529df79f4b9ff862794bf7b1c8a6f86bf30413eb5c48a48685a45d9e5e092ee17a7b9936f0a590458b7c87d55545ce9d5a8b093ad0966cf6748d5f6bf1a579878bcab60ca06937dd781f799036fa504848c694e5daf7efcdd7a6c3e74ff9ed21735839ef8690f78cd8bf2ae0f62f878f95e6929f9c2e7eb8a8ecc7a6c9d71e3dca110c76d139125abddb2486d192a67f69cf0af87a4a4ecdd169e51fdbd7a5165565645d367d1170b09c8f09bd63f339efc30571ec3f1b5656798d5b39e651fbe393e7de39dde394e78b0cbdb560bd0915954fa6b853539804dd1bbf4fe2b43fba6935c276eb1cb307e75e2cbb733a7aa85f1e85779977bf4cffda5ff7563bbab608332d2f9fc1e4d5bf3b7ac1a8e4a1e3fe80f2aa1ba7329e65ec0c2b9d7f648541ed86b1350fc3568efdf4e9139b7df9c7daf59d774a132b82c733666d8bdcf9803e911efc797aa6e8add6d658bb795556cd4724a6ebceecacf2b4b03afaea5554cb6d52da8e4b1eb4962b849c799c1f89eb7e3ec90d1ae0f462b3aeb145db3293670dae456fceff46b7b59b708e3961b36efc6966d7b58ebde673bd44cd9fc9c93f38968beed50e1751b7bd9e6a1d1f77730c8b7d203572f3ce244baacfc120d79a926721234e5fcd30fcf8a974fb82c0226dc818a333cd38dcf07641c2faa5a987e7160b1e9b602a576c2c7f3992bf7a3901b2183b15969cae5af4c6a0fa78766adb206c9bceda03f72a6b73f63d69b4aeb6183f67602b2bfa1a657785c74cdd1569bb4d9f6d89bb7bacc5d220ad3d16e3c1702ef6ceb864c3482a787b819dbb5def79d1053bf30c2c962b06444ea6f5c4c54c9e79e194a1f48fb63f381dc1dc3859a65d57e236a9f887b600426a4bb52eb7b5865023f6d03eff76bdd78c8b6ced105a767960faa30eef867297d1992fb5702df7568bff981635647c1365d5ae393fb716d436bebb1873d1c4dea3f8697e02b9e1c3c2813fb4ef2fe92a99b1572b879cbf7053136d62c9e68faf16455d3b1f54df1092f8c0933a0843d8f5326fe4cc6e6b4694fb12c3fa1db9c74e8f2664d819d6dfa8b9b276f7da21636c1b9c60bbb167523a56e32adfd7876dffe744c2d94f4ffd2a5f1e0fa317b606d2f610fef6cf16febcfdfc78ced9c5af220bb7d94665e939fdee20c2c12f5bff1c1fb344fc9497f961e92f7e9dc3b0a36fcdcc0a1ce95225e4b01a702df0dc23a7ba924285693ee1e9a71ceb028e718e314fa567272fbb4ebe9d79dcf599f6aae876f3b4ea41fef74ecdd75ab3defcc2f0298ef4df7f76b9def4deb2986664b53da1d6ecca8ea83ae1af1f363c09b3a0cc345bb585308b1815ef69c9bcfadcd2b2bd84ea6841bc7760c5669fe599f99103af3f2fb6d97fca98d1a4ebd148ee1e406cf22bd8189adc7a88f4eaef36fda90ffe29b8dbb2b2e3f3d5985bf81754a6040c377efd47d85bf2e236dfa2b9ce82c233a709cf969b359fcc2a20134589852ee75675253cbb752b7dcb8205874ea4af3be47d70d9df63a9e11d46e58fb574e707fcf87ccce9b8a1469be3426fbab3bd279416969a1b86dedd8539141e65ea7e28afe6d1312f03fbb8d08a0a3dff7dd6896dd7cc5ce756785c39f481f7e78e3d3bb6c2360bbceddcdebf7e1be877f1dd0daa80f0c07ce13dadd9c187ce2fd06ef9b9b9defdd1dd96b6ca5336071cf60b052bdfb436b727cca7fea59d7fcac09d21acf1a4e6ea16aea978c7f2f2f7d87cf449073df4c292dd6ea7ec6c6a7c826efc2e1c536d9b77e99f9ab143c425d9e74dea76723e1f322a38619fbdc83a9c919f68fde4a726c6995d35456dc6c507ae8e305f958b9f6c9df6593c32ef68871f2b24cb37bef9185baba57487636e6bf7026bac9ba5914d057981dde223cf3a9d5aa0acab05f9b6a69d639f3c66bd4e6a280ece70cb96ac5e54d811fbeae7a339ab9ca7500bd303d34f3d1e9555ef32e4957fca8149b743b5f56e76f1b35656bd7ae83e5638f270de0fc32ee989bd528545a186f39f1ff2d3da66cd2043c10f832f148ad76e2d4a205f7a7df1c3cdf3de79d51ba6593dd9e5f2debffba5f0c1c2d0233ac4cae671b724b8060f51023b284f3cebe29adf66ef0c2d2a3c3a8ce8da9ddab62a95da3034abe8aff75d3766e0e839f811556ffe1a1bff7eba6028f52c7fd8e2979753bcdaea06bef5657f327937be647a72aa6ead74a9e4e3e1472d99f9638a6cf3f2457ed2167d00a49ffe5777c3fb56777c261c8b634b10af64c9d25f148c2e990dd399148cae2e99cbe12f854430d7152b5bc48ad9302cc1426c11cc72c5a296b658481227845db1d2c52b5ef61b2f05e17b48e47001334efacde4c450c81c5e042416315cb1e815269642c64bcf6374696c8e18e28821091b866471422c918007458860314e4a95d3c87859bcd2bed33bbb69650080b2afbe9790f6fd3b36b0a48be2de57bd8aa9cbc98f5ce223b14686dbdb146271b8304eeae64cf644301600d9a7ffd13140bae1d2e304d13d2f3ebf6d093f4e0506cf10f025740e1f16a1073d218109b3387c18c2f635c0262662c86c02c5dddf8fe6e6e3e731978c67132898840498cf4c946d454cd0b9ff82000020a80d638caa30580281a4ff18e4677b03f0f4f7a7a9f04ebbe4e2adfcfa4e23efd27aecdfbbfcacd4bb7c938a40f1f670a3aa88e07dc2c69b780000fedb23907f2b4c3c0baabf3b2d38c00392cf4072ef976cf6f42c6b255c98e225f014d17930344706912e6ca547652d1212fa8a0ed18fde19d83301e56b694e0cc4e0d2c56257c4902b4350e5205f2dcb66a722a367c894015fc61261ad62f25eb99a65f11e00f0fe5ba706f13ba6868a3121aaac4985fa937a08e1fefdabf22b2c8d3ca8aa3b85fa927ab073bd4bfe4e0faaea2a2181c36770a3997d25213b8d85708989982fe7703c3a874f1372150e63115991994803d47af74cc70f00e0a736c091aa02947af98e0183fa63c9fe2328a7d4d7cdc78fd097d106df4ec630d91ba4ef774254ed84d8e7247c7a5cabb21355ef507a9da8b9050d18683ce84b944865d908a0dbd7ae3059fabf1af19b220829fcd247818e7c0129489e900c5512b1de972e6046f000a02c18430780946199a102c8ee3356271853e4215552c628de9c8140bd944b5dbff451fdfaa48852d93d5582a1deab56a79bdb20a04a648536474aa246a17a938430ef4764a508432aa2302858732f0cada95297102d5442ecb480a28c4ad33c44c84d896af380143da1f3b00f61de8f8c4a1186d43ca1f3a0a50d54a9a634cfc3dc1e80ca3c489f1e912f2cf550be33b5816aa1942202295342235ef6221485504a5120e4476844e860a05adda488406a7e86a31075bd0815aa25cd290e3aa05f5192e6e3b1ad87d2ef7828aa4cbed4e58d1e5365cd119a809408a14bd37808f89ae64811869404a161510a30151a23cdfb76150943698ad004a4f2071d8e812ef89aa648118694faa061310a3015d221244c953a08316e48184a2b842620553d23d1e386015fd10a29b2902a1e342b4681a5ac0a52376ac3d03d43b2145540680852a883beab9a0c051aa8801479483d0e9a97a4cc5321f6d1bc93cf1578284d0f1a8254d098a282c2e981af6b7a147148c90b1ad7a08c5316e1a8bb280d415d9422f5812ad54cff370a435434077bcd55aa66143948c10a9a63380ca851c5289638528a6280e2a4a0380a6217c57090d212f4e3d94b1446858a451185947c18a15011c3815a658abaa1d2450dd56803a05230827ee6ecffe126c400a8128ca0cd910a0ef4c3fc0e84b90ac188ba3830a8388c0d816af9071a80dc2c44a7741e0aa02cff502421b7ded037f6c9e340bf5b8d9adfd8f11050dcb443570772670ddd954808a8ddb4539755035456af2349cafb72680c72736c1c2a20530ba0f1be9cd2f209b1e9350645cd534555b5a5a18844ee62a19163b140b3bd334524722f47214a5548559b169a8f4ac778a06e4b088d416edea0239b6c0934db12524422776bd0c8adaa909ae40fb9bf8246be5585fcd6fc8d44e56ffb04f0d56d1a340bb99b02a1c27bda1f4bd5368d2216b97f82c6fa5801cd376634bf319720b0880b8bf66069030aa0800443003aada4bffe2f0000ffffda0146a77e380000"); err != nil { + if err := gres.Add("1f8b08000000000002ffb49a095413d7f7c79f0a2211140405ace2101194252111504388226153d9242ea042433221c16c240159440111d1828a0b2ea080c50d11452ba2e00622225471a9b81517046b81aad82aaefd9f2480334988d1dfbf9e134366defddcfbeebb6f66de9b6fc0ec415ac6600800c0216cb43f40fc1b01740143c0677122f0f22f9c44c0e3cea3698301f6758c25311c7899902e6143ae1016cf16f060fcb265cbf0129827e4d225b0188b592482991cf1120c04411093235e0a495b128853700e38071c81e43c79ca343b07acec3483ce60c32a4e13b001b37586e4566d64b20000d24fffe1ea7f09971787e3f039ffbf9112d5473a59166977b2bb8b72a45a3ed40064a483fb22958518eb382d546a8c6cd27f37cdfa8ced19d1628980f7df0d8ea3fa2e3bc9ba4ca33adffffae0182b45fd5f8c91b3fa80a7c80276d0694dfdfa18e92b06acc1508d5a321ed5e9214017303922025e1c1d2e332707f297686e3e0a612efdd84b60b1848093c44afa607d472186802f81f91229fdecf1cd24430080a15a3aa6972eb3ef232ad1d2074dffac2f4b88ba7469f5d0be3f4bc4ff2d4b445496882ab34444f62b6183f9208db34494658988ca128ae63bfd58adc659226a90a5ba55e35081e8015dc0214ce5e361fe97999e931fb904c386b95c81b4dabda57f6031cb04222e53fa7b81f40f59c93396d9cf80000090662e22e9fdb96849dedc92b2b925f9504b72414bf21184b3a7e5d9cfb666c8bc05464031b600005bcdbc89a2fbf3d698773da9b1bcf158e389eb2908578d958de5d793e41d9b7a7ae94400c044b5ae86f7ba8a67dbbbfba1bdf5397b7a26bf75ef19d53d7ade7c25d3020060a1b11bda82ff3737aa8a48eae63b8a68688fa93d9323c2c3fcbee834278c4213f0b27ea92f48295cd41ec9300000187c135c962305b88aeade65186dfd7538aaef91f4ffb5ef91f49ebec7d195fa4e529e28522f952c9b6033d91dfc5bbcc89380f2223b444295ce6eb730ee70590d22d941b055ff391045cb80d36922353950248c44137a72d07b2397b254cf5ea907ee728b89a3643dfc160ff2fe233da8ba10c0ed9d155faf816148b6ec62f01d6560a604e9c942a458f0654a25c89e44b0b23358d297799f28bb435b0c3dfdf54a50e1489e0c558e6467b05f8a42ee08d339fbf3d71d29a685b6e03bd262aa04e9494b2ca272c9d363795c280616893902be2b968073c042309f216072f811aed86809cb7e2a763a0543968228b28e9165108a3c7d6439928221e3652da4d119c48fda200dc4ff5ba393e7f27f8c4e06a1c8734e962351d1bdb79ab355393ac54bfa104474df715937ec356771b8f07ff88080f61349d7f0da875171bd32be54bf7012006092da6b8101caa1285a830b8dcac784aab9f84fd600006bb5dd334679933f2b284d35a5196d87e977f65102f0657600003bb56e8d14ddd216fc277346a37aad9b71e5260700c0515bafbac890bf630d2bad77914020c133c4e2be15a0e6e62310e678b1248e0be390201b487e4d6409f8127b31271e26419389c25817d941091c2bb1a77339117c12c480f91258e4221f2c9be6f03f890000a25ad7985ed71c1e3d02fe8ed88d50003c571021c009f9117da4b5017e5efa98d118e95ac2c79b3ab72722e290c10000f3e9e9a5008001e2b95e3341c9d531cfa56321f40e160330d448fa190076e69a0230b084435b2859e83b87c410f07074a6201cc6c5f284b200c8b1a4589e90074be8502c8fcb1793625db1b21624be98243d8cc742b22692a5aed885be0190bb4004434e38479c03565644641193459a4bf5ec31173159ae58b6442224e1a54b76dcb2c9388128024f98366d1ade81882712ed454c96bd388e2fa1c7daf3c5e3e5905e0e151633441ca18423e043d2dff47041b4c4158bed6923ffd713274fd8e7882feee91543c0c3c7d2857802ce01afca88c9e8b311468bb8b2d0980c3ccc8579305f22c61370049576120e8ba5da9bf48cdc1de58b1d39962724b98b60ba04a6d2253085e8409866efe064efe04c23104993892482530819afd04895b940441308b81437a93bc89323829709444bc5907b9023c2bca79182bdaf80c961c529b97722393993264fed718f6884306732482c8188479750e45529e44790f15f0e225a4a7b4ff2177160be842e1d340a818c573ad63bc078851196970fbea77ea4d79dbe5aa4605e2eba350800cc4a1faa1b8dadddb9709180d664b624821fc12fab1ddc50636a6dda6230427b6690964dcac603f3826e78ce9a879d396fd2bc5bbff827fec1384431a61d1c1ef841e7de592fdeba14ecea11d0e3c83d5616ebf5627ce740274e693112b8d75a1b763c0ff9d030cd5ccfca8f317b5257f69b861d89c10f4f9ebddf1c513c3dd7b4f811855df0216955c1d1194fdbdbeab437d8c53277db1d350879cdbcf3afd99bb3afbc99655647cb03ce943d9fe560d234705cd3bf6fe0e5661ff1964f8c84e9457f4de267d1b42dfc3cef566f59fc66efcab5827115b41a9cce3eac735478152b4fff8deb5aef8db32db4dfa409b579d789370cfd1797721fcf9f949ae337c4287743d0b1d4d751f37d97c2a6f4a6d5360bcd6dc7bb774cb476a4cc7a70c8cfd48899f568bbe494c99b0caae544c10c9b3bb467f94e813353521c4bac1a47d4656c6e38cfd43211051a4f635fab4a996be3d591e6aded5f38a6387ddb46bd6d99ffac3e6c3588359bfeb73f356a77f73da383e1ed71f115b65906bfe5166eb265effd750779f473dd01db6cb3df3943d4e37726134c361cffe98f8359533d6765bfba3ae73134811a1efda066ca68cca5eac1394524a79cd4df0d5a7766fcd41aa3b5df9337fa36b1c06ebc9fe06cf2aa28fda7e5f4093e1d0bb7b8a759623e766e4adda9b5fd6ac4802bb6c3128e77865b374db971a52be36488cbbe9d6bf48b7dcbbbe7070df389bf533b6a7ed292df3b1847e664bfa405ed1e5c34e39da3510ce433b430b58b3e9b614ee0d370130f4e285c8c7b78fb44b3096ef59f07efb042827dd7fde63c6e11759ce0724e22316943e6ac56e70ecc4a9d3b25ab3d1c6fcd0f1fba8c54f6f4c1634342332d8c3a766b97b62ecd75d44f1659ded08e3958f393bf6ebfa46fe034f239eb52824b45d75252f9a66e7a1b751393c9cb0a78bda56c600795bcdedb3205a3bf7f5fb4c7260ebdbbc49f64e538f2f309fbcb86f451e5fe1627527e1893b6c9eec950c3978d8d068307e32cf2ae317edd19f3cb891317a2727fcccc5f7db3aafb457d60d6689f2bab8c5d2b6fe176906f929c1eafa9a6b7640ebfb6abfad12368f46433494c0cb6fa4578a9b76be56f7b4ea4a5754f299d7dcb7fefdd6d5139d77f79e9b6293d443279c11fc58d6b0d31ab854f2f072e17d7cfef683eaec3b84bc89d1a37a2b6396e4df6cd494f9cd61a1dade418dd3dbedfcb6ff7d54623ddb4c3ebd20496f4d977578e999a54bf0dfff39123c3affdcb9eb2e27d57fd1fe762af53936786b42f892f5d3fad625ddacedd6b06184e2a893f933ed21bc366ec584570496b6e0efdf874efb68cb2730fcf0d9fde5c619210b6dc5067b8f9c5d5cd94b4e0070b697f05147a70de9966066692f47f68d0aaad1ef336a7927edfb99922d26ab91bd5b1376bc5e72bb6dd9f4b5e14b47724dc392998eee9e96990e999f9ec177f0c7eeffac820efdf1cb221dfbdc1f5461dd8bdf344078ba3de37980ddbc8dc3720e2aae4f1c777afbbb7dcfe707fe991828a8afb0dbad55eb78fc71f867ceba7ae78ed6eb3adfef1e193c3e88f6ece2e9fea90641e9ed7f96795fb5217e176ad84f8f8cae559f3cac3b67795f38d4f74bbadf78efb77567ed20d629eb7738e5397093e386590a0327973ed438f7da575b9e7af1866fd7362cbb1756113ca5ef0758df7ac4b5ec37ba477b66a96e9cacff561afae96322cc575733061f6b3fdb53367a43aef3f973ef1c5f296ee63914df1d7e60926d6b990480d0b49bb3cbd125cc2f5f6326de04b218b16f90eabab8a9c3bb5161374a02dd9ece91abfd6e24bf30e17956d1940d36ebaf13ef2206df4a190908c29cbb5efdf9baf4d87cf9ff2db43e6b072de0d21ef19b17f55c0ed5f0e1f2bcd253f395dfc7051d98f4d93af3d7a942318eca27324b47ab7490ca3254dffd29e15f0f5949c9aa3d3ca3fb6af4b2daacac8ba6cfa22e060391f137ac7e673de870be2d87f36acacf21ab772cca3f6c727cfbd73bac729cf17197a6bc17a132a2a9f4c71a7a63009ba377e9fc4697f74d36a84edd639660fcebd5876e774f450bf3c0aef32ef7e99feb5bfeead76746d11665a5e3e83c9ab7f77f48251c943c7fd01e555374e653ccbd819563affc80a83da0d636b1e86ad1cfbe9d32736fbf28fb5eb3bef942656048f67ccda16b9f3017d223df8f3f44cd15badadb176f3aaac9a8f484cd79dd959e5696175f4d5aba896dba4b41d973c682d570839f3383f12d7fd7c921b34c0e9c5665d638bb66526cf1a5c8bde9cff8d6e6b37e11c73c266ddf8d3ccae6b1d7bcde77a899a3f93937f702c17ddab1d2ea26e7b3dd53a3eeee61816fb406ae4e69d4996549f8341ae3525cf42469cbe9a61f8f153e9f6058145da903146679a71b8e1ed8284f54b530fcf2d163c36c154aed858fe72247ff572026431762a2c395db5e88d41f5f1ecd4b641d8369db507ee55d6e6ec7bd2685d6d317ecec05656f435caee0a8f99ba2bd2769b3edb1277f7588ba5415a7b2cc683e15cec9d71c9869154f0f6023b77bbdef3a20b76e619582c570c889c4ceb898b993cf3c22943e91f6d7f703a82b971b24cbbaec46d52f10f6d0184d4966a5d6e6b0da146eca17dfeed7aaf1917d9da21b4ecf2c0f4471dde0de52ea3335f6ae15aeead16ff312d6ac8f826caaa5d737e6e2da86d7c7731e6a289bd47f1d3fc0472c38785037f68df5fd2553263af560e397fe1a626dac492cd1f5f2d8aba763ea8be2124f18127751086b0eb65dec899ddd68c28f72586f53b728f9d1e4dc8b033acbf517365edeeb543c6d83638c17663cfa474acc655beaf0fdbfecf8984b39f9efa55be3c1e462f6c0da4ed21fced9f2dfc79fbf9f19cb38b5f45166eb38dcad273fadd4184835fb6fe393e6689f8292ff3c3d25ffc3a876147df9a991538d2a54ac86135e05ae0b9474e7525850ad37cc2d34f39d6051ce31c639e4acf4e5e769d7c3bf3b8eb33ed55d1ede669d583fcef9d9aafb566bdf985e1531ce9bfffec72bde9bd6531cdc86a7b42add9951d5175c25f3f6c781266419969b66a0b6116312aded39279f5b9a5657b09d5d18278efc08acd3ecb33f323075e7f5e6cb3ff9431a349d7a391dc3d80d8e457b03134b9f510e9d5df6dfa531ffc5370b76565c7e7ab31b7f02fa84c09186efcfa8fb0b7e4c56dbe45739d0585674e139e2d376b3e995540268a120b5dceadea4a7876eb56fa96050b0e9d485f77c8fbe0b2bfc752c33b8cca1f6be9ce0ff8f1f998d371438d36c785de74677b4f282d2c35370cbdbb0b73283ccad4fd505ecda3635e06f671a115157afefbac13dbae99b9ceadf0b872e803efcf1d7b766c856d1678dbb9bd7ffd36d0efe2bb1b5401e181f9c27b5ab3830f9d5fa0ddf27373bdfba3bb2d6d95a76c0e38ec170a56be696d6e4f984ffd4b3bff94813b4358e349cdd52d5c53f18ee5e5efb1f9e8930e7ae88525bbdd4ed9d9d4f804ddf85d38a6da36efd23f356387884bb2cf9bd4ede47c3e645470c23e7b917538233fd1fac94f4d8c33bb6a8ada8c8b0f5c1d61be2a173fd93aedb37864ded10e3f5648966f7cf331b6564be90ec7dcd6ee05d658374b239b0af202bbc5479e753ab54059570bf26d4d3bc73e79cc7a9dd4501c9ce1962d59bda8b023f6d5cf477356394fa116a607a69f7a3c2aabde65c82bff9403936e876aebddece267adac7af5d07dac70e4e1bc1f865dd2137ba50a8b420de73f3fe4a7b5cd9a4186821f065f2814afdd5a9440bef4fae2879be7bdf3aa374cb37ab2cbe5bd7ff74be18385a147748895cde36e49700d1ea20476509e78d6c535bfcdde195a54787418d1b53bb56d552ab5616856d15fefbb6eccc0d173f023aadefc3536fefd74c150ea59feb0c52f2fa778b5d50d7cebcbfe64f26e7cc9f4e454dd5ae952c9c7c38f5a32f3c714d9e6e58bfca42dfa00483ffdafee86f7adeef84c3816c796205ec992a5bf28185d321ba63329185d5d3297c35f0a8960ae2b56b68815b361588285d82298e58a452d6db190244e08bb62a58b57bcec375e0ac2f790c8e102669cf49bc989a19039bc08482c62b862d12b4c2c858c979ec7e8d2d81c31c4114312360cc9e2845822010f8a10c1629c942aa791f1b278a57da77776d3ca0000655f7d2f21edfb776c604917c5bdaf7a155397931fb9c447628d0cb7b729c4e270619cd4cd99ec89602c00b24fffa3638074c3a5c709a27b5e7c7edb127e9c0a0c9e21e04be81c3e2c420f7a4202136671f83084ed6b804d4cc490d9048abbbf1fcdcdc7cf632e19cf2650300909309f9928db8a98a073ff05010040501bc6185561b0040249ff31c8cff606e0e9ef4f53e19d76c9c55bf9f59d46dea5f5d8bf77f959a977f9261581e2ede1465511c1fb848d37f10000fcb74720ff56987816547f775a708007249f81e4de2fd9ece959d64ab830c54be029a2f360688e0c225dd84a8fca5a2424f4151da21fbd33b06702cad7d29c1888c1a58bc5ae88215786a0ca41be5a96cd4e4546cf902903be8c25c25ac5e4bd7235cbe23d00e0fdb74e0de2774c0d1563425459930af527f510c2fdfb57e557581a795055770af525f560e77a97fc9d1e54d555420287cfe04633fb4a42761a0be11213315fcee178740e9f26e42a1cc622b222339106a8f5ee998e1f00c04f6d8023550528f5f21d0306f5c792fd47504ea9af9b8f1fa12fa30dbe9d8c61b23748dfef84a8da09b1cf49f8f4b8566527aadea1f43a51730b1a30d078d0972891cab21140b7af5d61b2f47f35e237451052f8a58f021df90252903c2119aa2462bd2f5dc08ce001405930860e0029c332430590dd67ac4e30a6c843aaa48c51bc3903817a2997ba7ee9a3faf54911a5b27baa0443bd57ad4e37b7414095c80a6d8e94448d42f5260961de8fc84a118654446150b0e65e185a53a52e215aa884d86901451995a67988909b12d5e601297a42e7611fc2bc1f1995220ca97942e7414b1ba8524d699e87b93d009579903e3d225f58eaa17c676a03d54229450452a68446bcec45280aa194a240c88fd088d0c140b5ba491181d4fc0c4721ea7a112a544b9a531c7440bfa224cdc7635b0fa5dff15054997ca9cb1b3da6ca9a23340129114297a6f110f035cd91220c290942c3a214602a34469af7ed2a1286d214a10948e50f3a1c035df0354d91220c29f541c36214602aa44348982a751062dc90309456084d40aa7a46a2c70d03bea215526421553c68568c024b5915a46ed486a17b866429aa80d010a450077d5735190a34500129f2907a1c342f4999a742eca379279f2bf0509a1e3404a9a031450585d3035fd7f428e290921734ae4119a72cc25177511a82ba2845ea0355aa99fe6f1486a8680ef69aab54cd287290821534c7701850a38a512c71a414c500c549417114c42e8ae120a525e8c7b397288c0a158b220a29f93042a1228603b5ca147543a58b1aaad10640a56004fdccd9ffc34d8801502518419b23151ce887f91d08731582117571605071181b02d5f20f3400b959884ee93c144059fea148426ebda16fec93c7817eb71a35bfb1e321a0b86987ae0ee4ce1aba2b911050bb69a72eab06a8ac5e479294f7e5d018e4e6d8385440a61640e37d39a5e51362d36b0c8a9aa78aaa6a4b431189dcc54223c76281667b678a48e45e8e4294aa90aa362d341f958ef140dd96101a83dcbc414736d91268b625a48844eed6a0915b552135c91f727f058d7cab0af9adf91b89cadff609e0abdb3468167237054285f7b43f96aa6d1a452c72ff048df5b1029a6fcc687e632e4160111716edc1d206144001098600745a497ffd5f000000ffffdf00a5b17e380000"); err != nil { panic(err) } } diff --git a/os/gres/testdata/testdata.go b/os/gres/testdata/testdata.go index 269d819e6..4e0b16a3b 100644 --- a/os/gres/testdata/testdata.go +++ b/os/gres/testdata/testdata.go @@ -3,7 +3,7 @@ package testdata import "github.com/gogf/gf/os/gres" func init() { - if err := gres.Add("1f8b08000000000002ffb45a0b3c54e91bfe2a92e946742f3b2621971933218d315d8c5b7229d3852e76cc9c31a3b9991972e946925a2ad5eaa292565b21a596886e2c125bba6cbaad2ea26d692bed96d4f6ffffe690ce198333a3fafdc49c73bee779def77bcf77e63befe3eb3940cb100c0200d8048ef301887f04a00b48e12c2969e5ca95a460aeb58c2f87487248262771f9024846628b455c7ef002a636e8675dc95ee6eba9330839bc7be0299880add96132b958a801be9d3af81d9f8872b150d0c915ce87564a58721ede094f20f1c4420886924342898025876404dc1229c4e1cb96e1f0783c9ec397adc02bae2453a6116d88364432d57eeab4e956b604f8349bc5e6412a4edb1114113119f6f7b900006e8f11d9a815913092c817f1bf6e30f63d07330d0ec646a721aef760889882f976f362d373286438947d25db38bd8782ad92bfc984507a8e622a1c456b8cb363d728462d9b848a02df4b141cbe940c8ba7cd13f5701b2ac39a608025c9c2823480a6608456fc582b8e9389f208792751e7513c5b2c924322b982f9fce91d547d00807e8fcca6589861ec4eb62e4c0903667c1a0a0018dad759a17c9b59a17cbb59a1a06685a2725628c85c456f351af0556685027fa6a06605c5e435e35445d759a95cff9d5ab3c2273b88608ed483213da44e19d60403ac35872fd500da0c233409d24438053b3a89070904e22f0bba8208071f53ac5fee8a3fe0454bda14c2d60300e87d35e29562a980a3440c1f53102f52fc0113efd70f33eb9d18733e4358df329f21ac8e7c46b2bae4938a27d4c7eca88fdd511f93551f935e1f73028eaf986be13f160030f6ab29684f2c4a017c888a273c2d4879f66322cc7b6056a060380060388ad70f32d52cafd230986c0653da435e95d1c9d8d13bf2faf989ade0e9acd29ab4ebeb6a0a6a4ed5e45d8f856313ac32361fa55891be1a7b7b4e91ec9da55a535c53707d1dcc0b35bd28eabd562db0f246f1ac9dbd3528573bb5083a321b22137f596aa2e1af3104f80c415137e70e361c3e47c0ad869fc9c683cff65eb16a8a684fb02a11f019c297e26d17817be1f9a97711eaa49ab9488354dbaa45d091ea08c49d499b112114e0c321a98c2f163911c8441b021e12b1c51cbe28d8891026e75a3b1066d0713405101d4e080d06a1b74f09ad1d928ea3c154748572bda8515b15227dbea6f2f6f9e9a3721884de3e8fb4764894f236d3b93f7655ae7cdf4ec6a25cf127861549392bd658b14990a8e787a6aa67197ba5f54c3cfc7de5eb680861617cd0e0543c000ccbab164f81b74b3d25db0ab318691886d519a76ad92c994ffacf0c7ed8f494161bcc4ae015a5eb5ad26539b3c275bbbcd07d49f95670f83d4922a92389b9e89bdcf8986eacca99576ef20100fc1ec331c710ce37ac7b4cf421aceee855d7bce20ca2e8e705e3c32d0100967d57220deb4e49ef15cf7638bbc21c26ea4986251619edc58e52d229e4f3635b55269ed75d49320600187f1509cc455f4d82f2eb9cde367752b158aec1fb48130cb024b64ca6013411233449268f144044248905befd5b0f572c925bcbf85110153f95228970840fcaa108b9354bc00f1651f16c482487a48eedab95455dd05f147897d0932c532cb2f8425630a441cc24cce0248138584c9488bebca4dee4ebed3614370ea7d8e77bb833e677444219341000603423211700d04f36df6d36c8b93ae139004057e2ee2f0360b081e2a71fd8bb6f0c00fd73f8ccc5f2c55e73a96cb190c8e2888320628450028ba34550238412212467e1238402918c1ae14480afa08a6454c56112010f5f225fe14458ece58b77164b21bc1dd19668438057589a94c3a5ce67b8760c9772b84e049e5c2ea19214f112574e258aa5c124f2f4e9d34936141285622de570ad659122392bc25a249bd40ef2198701c9d852be44ce178bf08acfac207198dc8940e8b8a6fd5f874ea1a4934824eb888a2d169222581212996843523588c3ee1c2309930a60691c360912404248249791c844b2ca71723e97ab9a4d71a69d8efe651c2d4228a13a4b21961c62b0e4109d62439e6e6d63676d63cf2453a8532954b25d008da47491aae16229532c16d06729e8f0ae7c29b4522c5d21c33bfbd92286775ca434de4bcce17323bbd0db51edeca9531d3ae81117218673d854ae582a64c9e9ed55291105d3485f0e22ae54444ff591f221919ca598343a9946ea72ecf304939466b8bd7c481df5a3782877d6221df76ac9ad0100e0d67a30663179da2f162f11336bc72e0b16058bf22b0656978d311b53af37427bb69f9645ecb6a30bfc6eb8ce594098bd60ca825bbff8acfe939d4537641e1b3eef83cebdf36ec2cdb1840d23f08f430e991a6f1912ee35179f57a8c58e165c6ba8def33ce043f574a321a6de6ccf292d296fabf7acf67f78e6fcfdbae0ec19fbc6643fa2f3d23fac5b9f7e72e6d3a6c64aedad56119c035627f502de70eefc6fecdbf3afdd39f9a6270b7ccfe53f9f6333bab6ff77b5ff7b0bad1afb9164f2c4409290f9f714513253dbd8dbf56ee9cea56f0fafdd24feae885946d4f999601f1a54c24d1bfad66993fb364f63edb7f1126de175ca0d7d9fa5b982c70ba7c4a57a0f32d8b7d5ef54dc9bd0855e2ba031acda0d168b8d2c2739379b9bd9d2e73cc8f21e63c0497eb45b5e38fa6d22c3c45c3cd3e20ef3d941bb79b363636d734c6b465426eea8bec8d11a2d9d67389d77ad2476be855b73bcbbb64fc684ec845ddb86ec4afa77c371d3015c4fd63f3e8cd003adf70c8e05354546155926ebfdbe2f63bb25eff06f7b68e39eebf6db6599f2de1ecf387d672a79f4d6d33ffc792cd9c1754ecaebab731fe3273382c21e944d1b872b2f1d989a49b54b8dfb43af616fe20f0de15a475c85e36e53d2ad26798bcfc7ac0f1dfab48035d9a379f14ee77813dcc717dbe3f66aedbe1adcef8ae5b0e8d32f82cc6aa7ddb8d2927826c0f1e7bd1b87667b15b42ef41be61175a762d4c275cbfe68669f989bf28ae9776060e6ccf7b606e1788fc119712d2c4fb61159c4249a1f9b9cb194f8f0765edd68e286bf8edde106f87b6dfeddfebb258cefc497535753d66d4d9ad360df8c5bab732767838bedad8541835752f39f3e78ac4fae63063226fed8a2adcb741af58371b23b7ecf5c82d199df76970fd5b31bf99c5b1eed58d4b2825ab0bd95d5c8d8cee108937ddfecccefdfcca06d713789c50d3df27398cb763eab35c7876a6a3bf2539ef5657dd6a8021fe3bcd8f113e2b75b3d19acffaaa6466fe040a271da35f66f7bc37fc9cbbb14baeffba4831b6e96b4beac9a973ccee3ca7a43a7e25bc43db49b54bbc71b4b59f549c3afed2f7df4083f6eea58797838a1f46550aebb53f1ef87f2e2e35ba7e57adef2397c775768eaf55f5ecdda9e10209fbae8cfec9a4dfab80d92a797e7ad92552d6cae3badc3be4bdee71039a2a22e7263cacd294fec36199c2ce61bdc3d7dc4cdfbc0d51a03ddf8e39be3c5262ccfbb6b2738acabda45fae9c489e1d7fec79bb6a6ada5eacf0b11d71931b3039a9645e56e995eb4397eef818dfdf4a7e4449d4b18e98ee3b1f7ac273bc6d7d52dfff8f4f0aec4fc0b0f2f0c9f5157343a3a7095bece70a35f37d4d1e3fd1f2c66feed9be1c27f3f26695e1275e8f86aad8ad209ef528b59f7edebe852adfabba1cd8793d77cba62d9fa29e7657a5373f49d33e219aeaeae7a49ae49cf7ef1c1910e6f09f173ffdd2605ef75d8bfcaa099707881f45876685bf5d861db383ff70bbe2a7ffcf1fd9bd69db73fdc5f7122bda8e87eb56ea9dbedd351c7f15e550e6bde385becaa7a7cfccc30d6a39b9e050e36eb8c82d25efc55e2bcc251b25b2b3a2aaa7855f28282c0dd2d0522c3bcd6595bdc23ff37e7e0ba1b943477fb54bb96d124ffd801e2e2981d150f5d7eceaddc77f18a7ef2bf793b4f6d0e9c9cff52a46b786873cc46e1a321e74be68c59fba92af0f5d55cb689ac722e2ed0dad3473b69669cfd910b09e62f57d5b79e0aa98dbab6406c5ee948a5562fa6ee77758b760c1a7298630195072c59e235acb22464be4305ceef6863ccd8a71bbd1bb2cb171ccfccdfd98fa95d7ba32de418735c564040e2b455daf7ef2dd46641170bbd0fd1f8dcd4f7836887461c59ef7bfb97e3a772f7d19e9ccd7eb824fffbdaa9d71e3d4a150f74d439b1bcf4c0e870767dfcd0f2436ba0ebb1a96527a7177c6cda1c975992987c79cc4bdf630522dcf23b169fd23e5c9245fcbb756d89db776b273c6a7a7ce6c27bbb7bfc8283527d772d68c8e4a2e227d39c19b11cb2ee8d3fa6f09b1edd341d61f9e3dcb10f2ebc5c79e76cd860ef34baf0b2f07efed06b7fdfdb60eb542f4932b97c0e9756f5fee425839c87b6477c0b4a6e14263e4bdc1b98bbf0c41abd8aad13cb1e06ae9df8df7ffff17897bfafd8f2e24eeeea22ff49ec39bb42f63e6099b3fc3fcd4892bed3fa31c26a418969dd09f998cde7f696b81a9b9e7cfd3ab4fe36357e4fb90bb3fe0a397501ff7bcae69fce08fcfad9bddca16b68dcb872f4b36aa7ccb7177f67595a4dbec099bc4337ea2ca7e55af361a3f96ed2ba4fb498f1b605d27b15c3a58c5d6f1ccca2226f4ee0f28ec685ecd8bbce84e171cccfa92ce759c088b35713f53ffe97bb7bd1bc4c6dbc214e67ba6190feedf4e82d2be28ecfcf163f1e8d2b5eb3ade0d548d1865564bcf14407487eb664c95bbdd2d329718d03088d3a9b8ede2bae48fdf9498d59a9f1a4b9fd1bb861d7e8078a5c66ebae893f30e6d9cec8bba7ea4df4e29b22702e6cfb6cf7c4720bf6baf4779778fb760f799e79c9ca28914010c800859f6466be942334ca983698f5d172bcdd09dc8d33f9da9539b3a6648f6ff425c7d597ea0a1acac8653217ed8befb6b8cdfc95a71dc04c299897f0a8d9bdbac0715cd22b2d62fdbd0db23fa7870e9a544b5fbf7fee4f0de91535ef7f0dff75b4b54bf6d383d1b4ea0f8bfb8f6f3a92d39233f3b0562aede0e2edb54cf39c1d1f5f2f09bd76d1afaa3a60f50357c6001c79ffabb491b35bcdd8a1cecbf4abf6ec3b75761c39d14abfea46d9954d07360d9a60596d07594d3c17dbbc8158dc5615b8fbdfbce8f3ff3df52e7e753a9095d1308f7988fc8f4f8ae4a7dd1727f1cf2f7d1d92b1cb32347988dd1f365222f4aae1af49e1cb644f85491f56fce2fd621861dcadd9c9f3463a9648f8dc6a623d34ff4461cbbae592788fa08442db4adf53fc539cc284949895d769b7934e3b3dd35e1fd664145f3ac0e75ee142ad8d5b8c2e0d9f66cbfae327c7ebb56d26d94c03d3ddd11563afec09ad94fcf661eb934063faecb1eb7792e75042a35c4d38579f9b9834e5306c8d29f78eaed9e1b12ae96048ffebcfb32d8e141ab26b755d6a68adfd28b5dee9db96c73464515fffd338d4e1c1bfe977ebd7367fba1a7e8bf492c19183e1866ffe0c7c475bdae89539df5e9c71ee2cf9d9aab1756792d36914e9ea0cc70beb5ba29fddba95b073d1a2acbc84cd59eec756fe339111d46c50f0584b77a1eff7cf279c8d1c6cb02372f94d679efbe4dc8c5c23fde577f7e3b28242c73867a5953d3ae5a6671db9bca86888cfcf66ab1baf8d759a5fe47225eb83f0af3d87f6fc08592c72b79ad5f6e6dd3cef5fdfdf6088c90f8c16dfd3f2f4cfbab848bbfea7ba2ae74777eb1b8b0b2d8eda1c9188d7be6da86b8a5ec8f85bfb60a19e335b52e6cad8a79bb1b1e83dd7cdc765c7c927cdace597961d9855686551e6e177e30fc98452cbb4f27fcb260e92e5a45c1c5db997ff29cb203dcf3a65895910fbe06ab3273fd4b2cfed2fcb6c34cc3e7a7584d1fa7da4a966f19f6423d34e367b730392bda2ea4ef1b4ea73f7d8ee6b685d64469865626051445b64b5f4c4b31776f5f8e4abe9072dc7bc98f8e431f7cdbaea6cffc45929f20d4b329a235eff743275bdfd344646c2bc84c2c7a392ab1c07bdf6893d3ae5f672ed21375b44c96b4b5e3f749e2819793c6dfcb0f22132b73849e672fd85cfb3bcb57699b16978ff87fe9732649b7ecc8ca695bff9f5c3cd8bee69a55ba79b3ed9efd8e6d3fa4af260f1f2133a94e2baef6ec989d52ed2689e5f9a6cceaf1b7ff7dcbb3c33e3e4308a536b5ce3fa3846f5e0e4ccbfdb5a6ecc24b25249234adefe3d31aa6d867830e3bc68d8d2579763dd1a2bfbbff3e2fd37fafda49c193171ba158aad92878b372367f6f7b1701be5e5c1753b8702a0f8e97ee7678969e727e24011449e1c611ba1293ed171ba341ec4e2d071baba34015fb4022f85044e0478632ce341909c80e74921ae1301b55d26e0e59112c889a0d81093e0cf240510a903891624e6442a7e73f8e1741a5f188c9749d94e04f4ee9340a79114e771ba4c1e5f86e7cbf0721e848775e2b952b1101f2c856444056a3b1a8d04eb55e485f5a295990f00c8ef53f7f8b3b54483ae030923b472da152c1e723364a89f2fc52b46121512cea598838900c03fddcfba1556090256a438acc378a1de2b05473529486cb148cee28b2029bad0a2a33910972f82f084ce0b08ab57e3683c32ddd9c79b39cbc3db653e8dc423d371d1d19088b31a7ea53259e7fe4b32dc24ec49a283ba12b962b1bc7b7ded673f8b73f5f161aa50c62c7774effa0ab3cfca14f74ef7cadacf2a94b5bf8926d3dd5d663154a86b8bde76930497e85755d7fe5b69013166f83833fd7d5df0ed2b09edf32f7815e8d8bacb0510dd4dec2a650921fc5c1844b179571c85af888eeebc0110317e5e493a1692f6f705fc703c5bc092c99c1065d415045562ed6f04e0554619a363aabb027ca901c468158bd095abc9c66d0080b6af799b5234b84dd59c4b8aca7b40a9de15ec01827f7eeb6a50e833bbaa3a57aa6705bb95d35dda37605755c7d1d17c115b10c6e92c41f834014f5cbd1af7e51c51c8e28b981281d26102229bf0108578adf7cf74bc0100de3d8a27ab2b5ea1408302a169c203ff47ee3a4d5eb33cbcc99db354edf5823d0c0030ec1b09a0a81640e914103423b2a1ab80ad4348be4801e37b1600e3a7098c96779f5365c491dd216a80a5a7024b03984108180d866b750cef65285031b49f6228625cbffe8603ba77cf7f0efac52cf8ab943a5efaee81a7a080fd310177f5d2a3f1912e74bb4e7c0032620ad5c157e9d956e6429ac46d505c3ff4039abbdc956990066e228a66717fa0a9ff5c9904e9af9e822299340068e00c47e2abf2037f99f7e7bde02b79b6bb873541c1ced402ea7ab6d1d0481735059591548cd0dd78b6958990266a5314d1486da0ae451b7bded7f60e4ed120efb731c0f69877a44f1a9d77f240d01757b63211d2268dce7b161622b4091b09aeca69fd25412375803abeebee61d17917608055f25d770f6d8682aec0088df65da3d1915668f4ac4e1e04fae2bb5626425a9fd14407d42052e1b3c69eafd1ba40035f351a1de970468711861d5d95af5a990869694613bd538348857d1a49a4ca21fd255f621cd0c02f8d4647ba97c9a8307ec38eaec22fadcc83742ba3793c07833e38a37baa2e0b54b64ab1f2283ba1d104484332fa8b92c910d04727b43217d2778ce63aa61e970ac333f6c4118702cd7ccd6802a453d81615cc56b50854f89a95a990d65e3495c730d03723724f77e76454da060c076a3b87d161209d8cd6a83002b1627771502a73208db9688e7acc1ccace60e51c212db756280e891ed0ccf0ab1c06d2428bde52b461a650e1e455a6415a5b49289a247da0b13bb7a7793747b12c1d01d437cd2ac3236da968f8fb58e0954db15dd423eca66878c800a8ef74558647fa382d51f0cd58e0553858b133880d814606d59e36f3e82fb92dbd3028f94fbb87457fc9f51809d4f59fa2a191a64ff45e3a0323b40aff694ffa4d51fa1d4701f5dda46870647f117debeec60cded54daacc82ecd6a16b67bb09d0a873897d27933919a8db034443239b71e814699b028d7b803dcdb2152a8004ac2c5ddb7c680a643fcd111548939a14ddb5f9babc3e43f4c91c508c5bcc40dfbb76ca74c8c6179acedc1cf4bd15a74c876cffa0e9cad5a553d593c05e21240ba06987094d81ecf7a023daae2605a6f9423678d0747a96a0ef2d25653a644b46a91ad5a55377bec8a8f9f2b4027deafaa079900d181a2aacd39af0a8eafa2853225b2e684a5b6bf075fa3c484a55bd9cf67ffa00cccceb9952655342552fe70ba20e11f4dad9e91e4b0f85e5a7020b13cc2014cc5e040ca6e15aa8e1773b867719da5d2fe7cb504312407576b4072ace300003dc1b0b004db1d682ff070000ffffe8e74dea2c490000"); err != nil { + if err := gres.Add("1f8b08000000000002ffb45a075c13e71bfe5410890b04b7620808ca484864680851242c952571800a0dc98504b3480232440501d13fa8a8c5018a58ac8a8882155170411111aa382aaee240b016ac8aad451cfdff7220dc85248468f9fd507277eff3bcebbecb77efe33b7f909621180200b0099ee003103f93802e204432c48455ab561142d9d612ae142248218994c0140ad8dcd045746d30c0ba9ab9c277bece10a4a17248933e20ad991112a990af01b28d52643474d727bc54c8e775d34472a1552286948375c2e2081c211f8251a4105fc4634821090eb34c0cb1b89215182c168b6571252bb1b22b892407bc0dde064f24dbcf709865658b834f33194c0ea4e0b41d4e160c9d66ff800d0060ab0cc652dd60f8d178ae80fb6de3b0571d87031c878d4e5362df714cef2b8effae1a36aaa320c25164956f65f51d85699f51fc176520a90e60061c407bbc8b63ef00c6ac304105304169002cae9808bb4df113a8b8d9e401a728cf880c91208908d100d5ba6f54d9afb5ec10112f8d927673741fc5328502292490ca48cf9fdc4ed60700e8ab2435ee831486ed26ea45923268f6e7e10080e19a1780f4cd0b40fa4f0a40421580a4b00024646e62b7180dfada0290e03f49a802a048bc661755f52e40f5fa296a16804b9c2980d133f787a948953ca0914a406b1657ac01284e792abea012204dbcb5560b98c081783c61cf5a2ce3c0c0c764eb8f87ec0f78d111b78431f500007adf82739550cc63c971c2c7649c4b647fc09c7bf523ccfbe6542781618cff2881618cae0446337a25908cc535c66f6f4cd8de187fb4313ea731fe381c5519db22603c0060fcb720efcc248a1c3e44c6e29e95643cff3e15a6dce71ccc1b09001889a2f487ccfa9d487104cc339b2e56914879602bb580bb12f9e5992aa3e8eec3baec1bebea4aea8aea4edd488023e2ad369e3646b6b07c0be2ce242289bb9bb1aeacaee4c63a98126a7959da77374e5583328663ede2ad4143daa88bdd95ca3089b067e18885bf59e0e03338597b9cdbdf74f01c0e13073f368d879eedbb27d5e7efcca8227ef80caea73d3bf9312fe77fee9b5fcddcd29768905b82bad85db98d42dc7194d9517c1e3612124bb84281138e88b7c161210153c8e20a429d701152b6f54cdc6c2a862203a2c269a0c020d4ce1a503a21a9180a4c459539ad1733668bcc3f9f6fe4746741bed2691884da59384a2724cae90eb305dff7765afea69ca2fa29cae6f22035d618f9544ceb23153258022450fda053f41062aeb29e83050060bf9e3e8ca1e66302a3600d37bc5cb3743abcbd52955c7375fc1047a8b1ca6214ad81e50b099fcc611a55c9b054c70978a1e8bd44f45aa0ac304a570daa2fa1d80a5ee6557963a1a637f425ffc94dadd69d533de7ea2d2e0080ab321213d591fc87eddd1773184319b3e2d6969d41f4b65f2836d2126e9caf71421ca1cc89be1b9b39f3ecca69f07dacca03b33e3ce8ec699413dd3e7c79de2a8aff45c3d53463785bf495ecf425df8c5dfe8588f2dd945828946af0f24ec576568648604a241aa04eef1b95209146f3203c12df02dbf9f5842d1448ad25dc18888c9d41124539c207a55094d49ac1e3860ac8582624904262c7cef5c7a221e40f120080a4d223e33e3ce2f219a19006915aa8834be00943857891a0e7bded465f6ff7e1980918d9f6d9d383b6b0cb7fd290c1b21deeec944200c000c942f7b9a0e0daa41700005d9147800480a106b2df01604fd63800061670e94ba54bbd169099423e9ec1128640f828be08f68b12458ee28bf89094818de2f304127294130ebe822c9090658709382c7c8974a5136ea9972fd6452886b076785bbc0d0e5e2e2962169bbc90e6d6652e66b19d701ca9544426c842c5af9a81178a4309c459b366116c480412c95acc625b4ba205524694b54062d209f2058706499862ae48ca150ab0b2cf8c106184d40987ebbaa6f3a7cb4fbea89b4820e98a8a29e413a2182202116f435064c46276db8822c43cd835169300f1203e24904a08443c51a19d94cb662b66939de9a4a3f6d851a2f822b28b186248211a430a514936c459d63676d636f67422893c834426da05520872172932178ae942218fea2ca3c3ba71c5d02aa178a504ebe26f8b30efba48cede4bc8e2b2a37bd1db91edecc9336676d1232e4298b39864b650cc6748a99d5d29128452083d071157caa227fb88b99040ca90158d4aa4107a1dfb5260825c853bdb87d0d53fb2276c772f5231af97dd1e040066ad27cd99ced17eb97499905e3f7e45a82054505c35b8b6729cf9b846bd51da73fdb52c12b61e5ee47fd36dde22dcdc45d317ddfec927ee77e651aa21fdc848bf0f3af7cfbbf33725e09246619f841d3033de3c2cd26b01f6d4192d662cef7a53edee17811f6a67190d33f366ce9fde96f1ae76775cc0a3d3e71f3484e6cfce1a97ff98cac9f9b06e7dce8939cf5a9aabb5b75845b1f6599dd00b7ccbbafbeff877e7df78b08acd4e94f89e2b7e31cf666cfdc029f5ffbe83568fff48307d6a204ac9fb73ba209dae6deced76af62c7f27707d76e144e29a557e2757ec4d9878794b3b387bf73dae8b175beb1f6bb649136ff06e9a6becff242de93c5d31333bd8718646df12f4a7c1bbed86b25348e519f64b1d4c8d2c4a5759ab92d75dec3a3dee30c58e98f7749cf8c7d974a339d269c637197fe7cbf9ddfdc8404db02b3ba51d5a9db6b2fb2b4c68afd0c6771ae97272cb4706f4df6d0f6c99d949fb273ebb09d697f271d331bc49ecff8cb8716beaffdbec1919096e89852cb74bd5fb372b759720efeb29b32e185ee809d9619efedb1b493776710c76e39f9bfdf8fa4cf749b97f1e6da8227d8a9b4908887950e1330972b0667e691ed32137fd36bda93fabfa648ad436efc097748395626dec2f3f1ebc3873f2b614cf56c5dbac325d914f3f1e5b6c43d5abbae850eb86a3922f6e4cb10f37a879b57db524f073afeb867c3f07caf92f6c5fe233c63ee568d59bc6ec56fadcce30b325ed3fdf70dce9bf3ded62012eb393437b18d319f694414d0f1d38e4ccd5d8e7f74e754c3587cd21f47eeb20303bc36fd6a3f65196d8af04a661c69dd96b4794df6ad98b53a770b925c6d6f2f0e19ba8a5cfcece1137d62033d9836f9fb366d5dbad398ff19a77b60772fc0199dfe65d7e5e17a76a35fb02fc73a96b6ad24976c6b6734d3b6b158fc74dfb73b8a07b6d2289b3d4c1330c30ffd18e1ba8dcb682ff0219bd98efe7ccafa8a3e634c898ff1a984899392b7593d1daaffbaae4e6ff060bc71f675e62f7b227f3a75ea5278d67769fb936e95b7bfaaf14b9fe07975bda153d96dfc6eca2db2dd930d158cc6b491d7f7563c7e8c9d3063bc34321257f12aa4d0c3a9ecd703a79293db1d0ae7dff639786f6778e68d9f5e3b6f4b0994ce58f27b7edd467d4c92e8d915bfd5929ac5ad0d277598f7885933a3475535446fc8b835fda9dd468313655c837b270fb97befbb5667a09b7c6c53b2d09431ffdeda4933d7d5ec24fc70fcf8c8ebff721cd674b4d5fc7e21ea062d7e6e60cb8a98c2cdb34a3725efd9b76180fef482987329a33d301ce6eef544c7e48686a08fcf0eee4c2dbef0e8c2c8d90da563638357ebeb8c34fa39a9819a1cf07029fd4fdf5c57eefb71697e69e4e1136bb5aa2a26fd9359c67860df40156b35de0b6f3d98bee6f355cbf6cf05af725a5a63ef9e16ce767373d34b734b7bfe930f8670707398bfc7af361958af83013506adb8838bc447f2c33b6ac78fd8cafa7140e835e9938fefdfb6efb8f3e1c1cae339a5a50f6a752bdcef9c8c3986f5aa99b9e6ad8bc5ce9a27c74e8f603cbe35bf64a6cd3aa390ec977f94bbac7414edd28a8d89295b9dbea82478575b89c0f054bbf3668fe87fe7ed5f779394ed619f69d73696109030485816bfbdea91eb8f85d55917afeaa7ff7d6a47d1a6e0a9c5af04ba860736c56fe03f1e76be7cdeb8b59f6b82df5c2b649a4aaa176082ade7fb68a7cd49b43f742165daabd58ded4561f531d71709a7553b92c9b54bc97bdddc631d43861d6459409703972df31a515d1eb6706615c6ff7073fcf8671bbc9bf22f2f3a9657bc63005dbbfe6647d811fa84a38181a90eabb51fdc5faccd802e9ef13e40e1b233df0fa11c187568bdef9d9f8e151566519e9ecd7fb4acf8bbfa19d71f3fce140e76d4391e54b16f6c24b33179f8e5036ba01b0999952766957c6cd99498579e9a7e65dc2bdf2325024cd05d8bcfd91f2e49a2fedeb2b6dc7dcada498f5b9e9cbef0deee3eb764bf58df430b1a36b5b4eca9830b2d8145d4bdf9db746ecbe35b66a32cbf5f30fee18557abee9e8d18ea9d4de55fe13f281e7efdcffb49b64e8da234d32be730d935ef4f5c322878647bc8b7a4fce699d4e7a97b820b171f5fa357b56572e5a3e0b5933f7dfac4e15cf9ae6af3cbbb8571a50126cc793bc3f63c644c63047c9e9d26fe47ebfb28ab45e5660dc7a5e3369ddb53ee666c76e2cd9bf0c63be4e4dd975de98d5789998bb8df9136fd709ae73fc0eed5765d43e3e655639fd73ae5bdbbf82bc3d26aea05d6d4edba3167596dd75b0f1a2d7417377ca6c44fb42d11dfaf1a29a6ed7c3bd33c26fad62436e77062d8f63deb4c699e47fc9d2a0b9e078e3a7b2d55ffe3a7c25d4bfcf2b4b186189d598621fa77726237af4c3cb6305ff8642ca66ccdd692d7a30549ab8958e3c93321e9d9f265eff42a4e6624360fc235eb6c3c7cbfac2af3c7a775e615c6260b0636b123ae53f795baced55d93bc6fdcf31dd1f78a1a4df5925ba230ae4cfb7c8fd4cb16cc7539ff5ce264ed1af622ef9295512a0ec793001237cd7cda7216df28d76128e3a3e544bbe3989ba78bb5ab0b9ca7e74f6cf625263656e8f29a2a89951257ed8bff6c769ff333473b909e51e297f2b8d5a3b6c47142da6b2d7ce3fd24c9efb3c28798d453d7ef5df043534e55ddfb9f237f1e6bed9aff6c7f2ca5f6c3d281135b0e15b415cc39a89549d9bf745b3d7d5ac1f68f6f96855fbfe85f531b18f7d08d360843dcfb3a7bf4dc767366b8cb0afd9add594567271053adf46b6e565eddb86fe3904996b57690d5e47309ad49f8b28e9ae05d7f9f8a3dffe99977d9eb93c18cdc263ffa01e25f3e19a21f765d34e19e5ffe262c77a76578fa30bbdf6cc478e875d31f26912b24cff8691f56fee4fd72046ec2edb9e97ea31dcb455c762dbe115a78fc4cdbba2051b26748ca19db6adf226e11eb4c4a46fcaa1b943b69279d9e6baf8f68314aae18e473ffcc62ad0d9b8d2e8d74b065fcf683e38dfa0ed37cba81d9aed8aaf1577787578b7ef9b0e569b03175eef8f53b88f348e1316ea6ac6b2f4c4d5b0a68b6c6a4fb87d76cf75c9db63f6ce08d17f91687ce1832eb755deb28ed0348f5de395b83e29b8e92dffcd53c7ce6c3bf73ee35ae6dfd7c2df236e1158d2505230ddffe1efc0f6579b357de427b61eeb9b3c4e7abc7379c4ecfa190c471b98e17d6b7c53ebf7d3b65c79225474fa56c3aea7164d55f936921ad06254fb47417fb7ef762d2d9e8a106dba3836eb9703ca616e6161ae907dddb8b391a123ecee56876e5e322773debe8a0d2d2613e3f9ac7355f1fefb4b0d4f5ead10ffc3f761fd8fd3d64b1c4c3cab9e3ed3f7ede3fbfbf4913121f1a2dbdaf353fe0e8c525da8d3f34d4b83cbed7d85c76c6e2b0cd219170edbba68696d8c5b43fb5f79fd173618a2add6859bab91b4adfb3dd7d5cb79f78daca08bab4629ff3192b8b4a4fff9bbf89265558665ffebb72f2104941c6c5b1d57bb89f8f1ae49cb2ce58661ec2dc1f67fef47ff5cc737b2bf39a0df30f5f1b65b43e8b30c33cf9b36474f689566f7660ba574c431147abb170b76d5653fb12739cb3a98145296589d5f2e3cf5fda3562d3afe5ecb71cf772f2d327ecb7eb6af303529d33a449cb725ba3defc702273bdbd032d37c52fe5cc9331e9358e43def8241c9e7e27487bd8ad3641fadaf2378f5c268b461fcb9e38e2f230897ba2282f487ff18ba3de5a3bcd99146cc0a3804bb9928ddfe7c5522ebffdf9c3ad8b1ed9155b66993dddebd8e1d3fe5af47069d0711d5259c394db527cadab3896e39f2d99f7f3865fe7ef09cacb3d3182e4d49ed8bc3e91563b343defcf8eb69b73f08c4cc2a8f2777f4e8ee9982d1c4a3b2f18b1fcf59504f7e6ea81ff78713e8d7d6f52303b3e51b74ab655f274f5a615ccfd2e019e68bcdabf6ec7700064bfca377d667d6dfa042c280acf9122941514d9272a4697c281182c2a465797c2e30a5662c510cf0907ef84251c0892e2b01c31c476c2a1f6c738ac345a0439e1643b6002fc992003227421514284ac68d9ff2c6e2495c2e587622562a6130ebdf1c4512904d9798c2e9dc39560b912ac940361613fb16cb1908f0d154312bc0cb5138d4280fd95a584f1b29d5e0c0028d6702afb457ca1c13840c5e6fa0baa7cae65049e5273647c5f2ec5b2b93c082f633f97310d4c0600fe555e657335d8798c686144974aa17f2f0eecd5472730850229832b80c4e89e8a8d65416cae00c2e2ba2fc0c5c561281c22d5c5c79beeece9edba9042e010a998d85848c08a835f974cd579f08a080020aaf46e463fbc630b8552e5ae759efde2979b8f0f5d8153f4cb8e1ebd5f3d7e8d53b29b43b9539d67654e75be3226523d5c9d690a1ceb88dd7a8b00cf78be95639dffcb2d0ec6341f177a80af2bb67395a07cf90fbec3bb76e4521e447517ba89197c08bb000691edc96547e12b6263bbfb1c11de9755a26b91e87c0dc08dc432790c89c409d137bd41503dd5b9d1875710798cae02f706e8a93cc25ac10273f55aba710700a0e31bdd8d240dee46f52b4852d8ef72bd2d230ee4fdf54bef71ffd7102bea69b9de95115b39dda37c5b62453d1b1bcb15307911acee76834fe3b0f8b8384ccf393c9fc115d0453cb9c338440e611399df5aef9feb780300bc55fa6dd50fbf65e41a3483433f29e07f88bdebe2e5ece94dec2e4badd74be60800c0886fcf4d52cc4deae60e991ddd84e696fd6879d27c91dc639472c3d051b6b3827a1c97371eadcc1861abac00f2587a0ab03480198280d1c05cabcbbc0f5345991c203345d80d18683848b9d2fb4bd02f9d6139817aba6fe590262848ff3e207bebbed1c848d9b44d373200b9f1c79422aba1fb96a741aa9a2d5134310380468a6c7906a4e2783a8a61ee40a081565a1e1f29083645e10f1904faa76246422b12b4f654b75a29b49cbe5839e01414e0042dd00f7d311a1529fbb5466540d437aa127db13c0752f56b8ce268ea83032d27563fc5f3b4817a0a6275539ca90dfaa12046a32285bde814bfe91b558982589e03a9eb45a7983d18f443308cc455a40aeec9488d525c398db072402314e0241da0be465839280e051aae14548946180d8cd4eea24b77552d60451a61790ea45617cd411d0234d404ab9fa0223538501a60343052928b767ea82ed050032ccf81d4e0a23952d4e35020f545722852f3f624e8831a1c286d2f1a1829b7b542394fc700cdb4bdf21448792d9ae217f5287aab7855f5cf54547ae60c05fd56eda2b1910a5af497952c75b115a976e56990425934cda461407371aefa99ca528f06a5c1456323a5ad045408edea622bd0e0cab320b5a8689663c381c6a25955371cfa511b3202f443e58af61da9c99b86f2bd6404e8bfca551e1ea92445c33b8c04fd57b1cae704a9113547c15f50075e4e9c2aef3c52f389feb64ed3031aa94ee519905a4c0b14c34d3519e494a4aaca6b825e2af441bf049ef2c8481d251a79cc28d02f01672f9f11fa483472661fc8f2aa4c7964a4fad00c853cd900f4576da93e7866dfe0f2624a553b5ff4b7caf186403dada47240f46a12a614509156128d8a5429a2779f17fb4655a09554e5b531caeb85a341bf948f685ce4400c7d1fe6a983db5bf9284f801c2fa19b23db04f477caa6fe0ea1c814a83faf428322a747e894e84c059accab54d5d21ce575921a04bd47526874e400c81ee57ea3fae8ca4652bdde1e21063b335064f166e0ab264cf24cc8490d9a698c39f8aab1913c13725e81663ade0f2645efd4d56f0483e9408369081a1d39a040c711ae3eba5ab5414e24d04c7ff483499dda2067086826a605f8aa7987aada58a16a33d112683aa140532027060ea860d6f49342d184429e0d392340b37568c24652cca66ceed0f9a30fc09c482bd0f714a2c7754573881eb093cac0d4c2d24361fdab004b2d98212818376ba0682aa1dc5c0b659ed465decb54d91ca2c7f4a2cc1461a73d587686066820631c00bf5bcb3efd3f0000ffff797de2e694460000"); err != nil { panic(err) } } diff --git a/os/gtime/gtime_time.go b/os/gtime/gtime_time.go index 80478cdce..c26ed154a 100644 --- a/os/gtime/gtime_time.go +++ b/os/gtime/gtime_time.go @@ -71,11 +71,18 @@ func NewFromTimeStamp(timestamp int64) *Time { if timestamp == 0 { return &Time{} } - for timestamp < 1e18 { - timestamp *= 10 + var sec, nano int64 + if timestamp > 1e9 { + for timestamp < 1e18 { + timestamp *= 10 + } + sec = timestamp / 1e9 + nano = timestamp % 1e9 + } else { + sec = timestamp } return &Time{ - time.Unix(timestamp/1e9, timestamp%1e9), + time.Unix(sec, nano), } } diff --git a/util/gconv/gconv_z_all_test.go b/util/gconv/gconv_z_all_test.go index bf466828a..f94a32453 100644 --- a/util/gconv/gconv_z_all_test.go +++ b/util/gconv/gconv_z_all_test.go @@ -635,9 +635,9 @@ func Test_Convert_All(t *testing.T) { gtest.AssertEQ(gconv.Convert([]string{}, "[]string"), []string{}) gtest.AssertEQ(gconv.Convert([2]int{1, 2}, "[]int"), []int{0}) gtest.AssertEQ(gconv.Convert("1989-01-02", "Time", "Y-m-d"), gconv.Time("1989-01-02", "Y-m-d")) - gtest.AssertEQ(gconv.Convert(1989, "Time"), gconv.Time("2033-01-11 04:00:00 +0800 CST")) + gtest.AssertEQ(gconv.Convert(1989, "Time"), gconv.Time("1970-01-01 08:33:09 +0800 CST")) gtest.AssertEQ(gconv.Convert(gtime.Now(), "gtime.Time", 1), nil) - gtest.AssertEQ(gconv.Convert(1989, "gtime.Time"), gtime.Time{gconv.Time("2033-01-11 04:00:00 +0800 CST")}) + gtest.AssertEQ(gconv.Convert(1989, "gtime.Time"), gtime.Time{gconv.Time("1970-01-01 08:33:09 +0800 CST")}) gtest.AssertEQ(gconv.Convert(gtime.Now(), "*gtime.Time", 1), nil) gtest.AssertEQ(gconv.Convert(gtime.Now(), "GTime", 1), nil) gtest.AssertEQ(gconv.Convert(1989, "*gtime.Time"), gconv.GTime(1989))