From e57942b374fd1517382dacac110c926b24ec476a Mon Sep 17 00:00:00 2001 From: John Date: Fri, 20 Mar 2020 08:56:17 +0800 Subject: [PATCH] improve unit testing cases --- encoding/gbinary/gbinary_z_test.go | 143 +++++++++++---------- encoding/gjson/gjson_z_unit_struct_test.go | 2 - frame/gins/gins_z_unit_database_test.go | 13 +- frame/gins/gins_z_unit_redis_test.go | 12 +- os/gres/testdata/data/data.go | 2 +- os/gres/testdata/testdata.go | 2 +- 6 files changed, 88 insertions(+), 86 deletions(-) diff --git a/encoding/gbinary/gbinary_z_test.go b/encoding/gbinary/gbinary_z_test.go index 55714f053..6472375ba 100644 --- a/encoding/gbinary/gbinary_z_test.go +++ b/encoding/gbinary/gbinary_z_test.go @@ -49,84 +49,89 @@ var testData = map[string]interface{}{ var testBitData = []int{0, 99, 122, 129, 222, 999, 22322} func Test_EncodeAndDecode(t *testing.T) { - for k, v := range testData { - ve := gbinary.Encode(v) - ve1 := gbinary.EncodeByLength(len(ve), v) + gtest.C(t, func(t *gtest.T) { + for k, v := range testData { + ve := gbinary.Encode(v) + ve1 := gbinary.EncodeByLength(len(ve), v) - //t.Logf("%s:%v, encoded:%v\n", k, v, ve) - switch v.(type) { - case int: - t.Assert(gbinary.DecodeToInt(ve), v) - t.Assert(gbinary.DecodeToInt(ve1), v) - case int8: - t.Assert(gbinary.DecodeToInt8(ve), v) - t.Assert(gbinary.DecodeToInt8(ve1), v) - case int16: - t.Assert(gbinary.DecodeToInt16(ve), v) - t.Assert(gbinary.DecodeToInt16(ve1), v) - case int32: - t.Assert(gbinary.DecodeToInt32(ve), v) - t.Assert(gbinary.DecodeToInt32(ve1), v) - case int64: - t.Assert(gbinary.DecodeToInt64(ve), v) - t.Assert(gbinary.DecodeToInt64(ve1), v) - case uint: - t.Assert(gbinary.DecodeToUint(ve), v) - t.Assert(gbinary.DecodeToUint(ve1), v) - case uint8: - t.Assert(gbinary.DecodeToUint8(ve), v) - t.Assert(gbinary.DecodeToUint8(ve1), v) - case uint16: - t.Assert(gbinary.DecodeToUint16(ve1), v) - t.Assert(gbinary.DecodeToUint16(ve), v) - case uint32: - t.Assert(gbinary.DecodeToUint32(ve1), v) - t.Assert(gbinary.DecodeToUint32(ve), v) - case uint64: - t.Assert(gbinary.DecodeToUint64(ve), v) - t.Assert(gbinary.DecodeToUint64(ve1), v) - case bool: - t.Assert(gbinary.DecodeToBool(ve), v) - t.Assert(gbinary.DecodeToBool(ve1), v) - case string: - t.Assert(gbinary.DecodeToString(ve), v) - t.Assert(gbinary.DecodeToString(ve1), v) - case float32: - t.Assert(gbinary.DecodeToFloat32(ve), v) - t.Assert(gbinary.DecodeToFloat32(ve1), v) - case float64: - t.Assert(gbinary.DecodeToFloat64(ve), v) - t.Assert(gbinary.DecodeToFloat64(ve1), v) - default: - if v == nil { - continue + //t.Logf("%s:%v, encoded:%v\n", k, v, ve) + switch v.(type) { + case int: + t.Assert(gbinary.DecodeToInt(ve), v) + t.Assert(gbinary.DecodeToInt(ve1), v) + case int8: + t.Assert(gbinary.DecodeToInt8(ve), v) + t.Assert(gbinary.DecodeToInt8(ve1), v) + case int16: + t.Assert(gbinary.DecodeToInt16(ve), v) + t.Assert(gbinary.DecodeToInt16(ve1), v) + case int32: + t.Assert(gbinary.DecodeToInt32(ve), v) + t.Assert(gbinary.DecodeToInt32(ve1), v) + case int64: + t.Assert(gbinary.DecodeToInt64(ve), v) + t.Assert(gbinary.DecodeToInt64(ve1), v) + case uint: + t.Assert(gbinary.DecodeToUint(ve), v) + t.Assert(gbinary.DecodeToUint(ve1), v) + case uint8: + t.Assert(gbinary.DecodeToUint8(ve), v) + t.Assert(gbinary.DecodeToUint8(ve1), v) + case uint16: + t.Assert(gbinary.DecodeToUint16(ve1), v) + t.Assert(gbinary.DecodeToUint16(ve), v) + case uint32: + t.Assert(gbinary.DecodeToUint32(ve1), v) + t.Assert(gbinary.DecodeToUint32(ve), v) + case uint64: + t.Assert(gbinary.DecodeToUint64(ve), v) + t.Assert(gbinary.DecodeToUint64(ve1), v) + case bool: + t.Assert(gbinary.DecodeToBool(ve), v) + t.Assert(gbinary.DecodeToBool(ve1), v) + case string: + t.Assert(gbinary.DecodeToString(ve), v) + t.Assert(gbinary.DecodeToString(ve1), v) + case float32: + t.Assert(gbinary.DecodeToFloat32(ve), v) + t.Assert(gbinary.DecodeToFloat32(ve1), v) + case float64: + t.Assert(gbinary.DecodeToFloat64(ve), v) + t.Assert(gbinary.DecodeToFloat64(ve1), v) + default: + if v == nil { + continue + } + res := make([]byte, len(ve)) + err := gbinary.Decode(ve, res) + if err != nil { + t.Errorf("test data: %s, %v, error:%v", k, v, err) + } + t.Assert(res, v) } - res := make([]byte, len(ve)) - err := gbinary.Decode(ve, res) - if err != nil { - t.Errorf("test data: %s, %v, error:%v", k, v, err) - } - t.Assert(res, v) } - } + }) } func Test_EncodeStruct(t *testing.T) { - user := User{"wenzi1", 999, "www.baidu.com"} - ve := gbinary.Encode(user) - s := gbinary.DecodeToString(ve) - t.Assert(string(s), s) + gtest.C(t, func(t *gtest.T) { + user := User{"wenzi1", 999, "www.baidu.com"} + ve := gbinary.Encode(user) + s := gbinary.DecodeToString(ve) + t.Assert(s, s) + }) } func Test_Bits(t *testing.T) { - for i := range testBitData { - bits := make([]gbinary.Bit, 0) - res := gbinary.EncodeBits(bits, testBitData[i], 64) + gtest.C(t, func(t *gtest.T) { + for i := range testBitData { + bits := make([]gbinary.Bit, 0) + res := gbinary.EncodeBits(bits, testBitData[i], 64) - t.Assert(gbinary.DecodeBits(res), testBitData[i]) - t.Assert(gbinary.DecodeBitsToUint(res), uint(testBitData[i])) - - t.Assert(gbinary.DecodeBytesToBits(gbinary.EncodeBitsToBytes(res)), res) - } + t.Assert(gbinary.DecodeBits(res), testBitData[i]) + t.Assert(gbinary.DecodeBitsToUint(res), uint(testBitData[i])) + t.Assert(gbinary.DecodeBytesToBits(gbinary.EncodeBitsToBytes(res)), res) + } + }) } diff --git a/encoding/gjson/gjson_z_unit_struct_test.go b/encoding/gjson/gjson_z_unit_struct_test.go index b855fb0d4..6f8a95cae 100644 --- a/encoding/gjson/gjson_z_unit_struct_test.go +++ b/encoding/gjson/gjson_z_unit_struct_test.go @@ -8,7 +8,6 @@ package gjson_test import ( "github.com/gogf/gf/encoding/gjson" - "github.com/gogf/gf/frame/g" "github.com/gogf/gf/test/gtest" "testing" ) @@ -91,7 +90,6 @@ func Test_ToStruct1(t *testing.T) { t.Assert(err, nil) err = j.ToStruct(data) t.Assert(err, nil) - g.Dump(data) }) } diff --git a/frame/gins/gins_z_unit_database_test.go b/frame/gins/gins_z_unit_database_test.go index 3e1294f9e..b3a82a955 100644 --- a/frame/gins/gins_z_unit_database_test.go +++ b/frame/gins/gins_z_unit_database_test.go @@ -18,8 +18,9 @@ import ( ) func Test_Database(t *testing.T) { - databaseContent := gfile.GetContents(gfile.Join(gdebug.TestDataPath(), "database", "config.toml")) - + databaseContent := gfile.GetContents( + gfile.Join(gdebug.TestDataPath(), "database", "config.toml"), + ) gtest.C(t, func(t *gtest.T) { var err error dirPath := gfile.Join(gfile.TempDir(), gtime.TimestampNanoStr()) @@ -33,14 +34,12 @@ func Test_Database(t *testing.T) { err = gins.Config().AddPath(dirPath) t.Assert(err, nil) - }) - defer gins.Config().Clear() + defer gins.Config().Clear() - // for gfsnotify callbacks to refresh cache of config file - time.Sleep(500 * time.Millisecond) + // for gfsnotify callbacks to refresh cache of config file + time.Sleep(500 * time.Millisecond) - gtest.C(t, func(t *gtest.T) { //fmt.Println("gins Test_Database", Config().Get("test")) dbDefault := gins.Database() diff --git a/frame/gins/gins_z_unit_redis_test.go b/frame/gins/gins_z_unit_redis_test.go index d4184f97a..a9fdc679e 100644 --- a/frame/gins/gins_z_unit_redis_test.go +++ b/frame/gins/gins_z_unit_redis_test.go @@ -18,7 +18,9 @@ import ( ) func Test_Redis(t *testing.T) { - redisContent := gfile.GetContents(gfile.Join(gdebug.TestDataPath(), "redis", "config.toml")) + redisContent := gfile.GetContents( + gfile.Join(gdebug.TestDataPath(), "redis", "config.toml"), + ) gtest.C(t, func(t *gtest.T) { var err error @@ -33,14 +35,12 @@ func Test_Redis(t *testing.T) { err = gins.Config().AddPath(dirPath) t.Assert(err, nil) - }) - defer gins.Config().Clear() + defer gins.Config().Clear() - // for gfsnotify callbacks to refresh cache of config file - time.Sleep(500 * time.Millisecond) + // for gfsnotify callbacks to refresh cache of config file + time.Sleep(500 * time.Millisecond) - gtest.C(t, func(t *gtest.T) { //fmt.Println("gins Test_Redis", Config().Get("test")) redisDefault := gins.Redis() diff --git a/os/gres/testdata/data/data.go b/os/gres/testdata/data/data.go index 46e1650d6..4d554c9c0 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("1f8b08000000000002ffb45a0b5c4ce9fb7f51d2284a5159721a29bacc34a3c2340d69baa10bc6a5d8ec3473a699ccad99e93aa292c41672c9a548e49644ac44b995845a7259b96d2e296bab4576c975ff9f99a99c33334da3df7f7d3e639a73cef3fd3ecff33eef7bcefb9c6fd0cc013aa6601000e00dcc0902887fc3803e6008f82c4e385ef185930878dc79345dd0af99c40a8de6c03142ba840db943583c5bc083f13131317809cc1372e912588cc52c12c14c8ef8470c04411093235e0ac9ae241027e19c704e3802c975e2a4290e4e58f969069dc186d59c26608366ea0dcaa9d8c0640100649f9edd35fce62e2f0ec7e173fe7f3d256af674a2dcd38e244f37554fc7c688519e0eecf654eea2679a3854668cbca4e7302dba8d1d1951628980f7df0d8eb3e6905de421d3a8ae0f7b1f1c5315afff8b3172d5ecf024b9c34e7a4d29bd8f91a1b2c37d18aa41401f303922025e1c15d61da8f6e62310e6b28fa304164b083849aca41bacfb28c410f025305f22433f776213c9180060ac111dd3852eb7ef4654414b1b30f5aba13c219ad2a5d389d6f72c11ffb72c11515922aacd1211199774bde500adb34494678988ca120acd7feaf16aadb344ec43960c803ee01026f3f1301f3dd3316c98cb15c8aadd57f607161323107199b2df0b647fc84b9e11e3380d020040da5144d07ba2684cdad498bca931e97063525e63d25104d9f3d2ac175bd2e56cb3c3a1687b0080bd766ca2a89ed8ea726f26d695d61daf3b7933194155575e577a335111d8e4334bc70300c66ba41ada4515cf76f40c40b375933d3fbbbb69df59f511bd6cb896610500b0d29a86b6e0ff8d465d11c968fa5044833b4d1d991c111ee6f771b62110f0f2b83417a40c5cd412c1300200187d17b83c474ae06aaa7ba771946defe0a8d823e8ff6bec11f4ced8e3e82ab19354278a8ca59c65176c21bf837f0f8b22092816f92112aa7476792ce10e95d7a0d6391045f52107c3d1089d3940dec8d5cf5e19037799d5f811f208bf8741113f9241dd4200b7b495f55e034390d8f2c5a00f29b05001e9cc428458f06d4a49e54f2258f9192ce9dbbc4f90dfa1ad069fe9bd12d4102992a18e487e06fbad28144498b6995f7b27524e0b6d411fd262ae02d299965844e592a7c6f2b850342c1273047c772c01e78485603e43c0e4f0c3ddb1511296e364ec540a862c03a2c80323cb41288af4911590140c192fbf42e69d51fc88f5810080c0eff54e91cbffd13b3908459173b20212e5dd479b595b54bd535ed20721bcebc3b26edc65cee270e1fff00101cd1341d772edc3a859af4c2fd72c9c000098a091d00845288ad262a151fb98503107ffc5160060dbeb1ee51b9be2594165aaa9cc68074c8fb38f12842f7100003868a43551a6a52df84fe68c56f57a75dab5db1c00004763bdea235deee323bf482090e01962711f969a610873bc5812c7857148203b48b126b2047c89a398130f93a0894461ac9bfca0048e9538d2b99c703e0962c07c092c72530c965d43d89f440000b1d7fd809c9ac3a387c37df0dd040580e70ac20538213fbc1b694d50808f21662446b697f0f3a5cee9f48838682000c0726a5a3100a09f788ecf7450747dd44bd958087d83c5000c36917dfa811d39e600f42fe2d0164a16facf2231043c1c9d29088371b13ca1dc01722c299627e4c1123a14cbe3f2c5a45877acfc0a125f4c921dc66321f92592a5eed885fe4190a74004432e38679c13565e44641193459a43f5ee34173159ee58b6442224e1655b765ccc449c40148e274c993205ef44c413898e2226cb511cc797d0631df9e2b10a902e1c2a2c668838420947c08764bfe9618228893b16db798de25fa79f3c6137115fdc191543c0c3c7d2857802ce09afce88c9e8b6114689b872d7980c3ccc8579305f22c6137004b576120e8ba59e4d76464147f966478ee509499e22982e81a974094c213a11a6383ab9383ab9d20844d2442289e01242c62b5da4ce5c20a209045c8a878c0ef2e688e0188168a918f29ceb8c30efbc48c9de5fc0e4b0e254e85d482eaea489933be9111721cc990c124b20e2d1251445550af9e164fcb783882b65d19302451c982fa1cb068d4220e3558e750d305e698415e583efac1fd9bad35d8b14cceb457706008059e147f5a0b175db162e12d0ea2d7e0ce787f34baa07d65699db9a371a0dd39d3e57c72e79c3c179736f79cf98879d3e6fc2bc3bbf0426fcc1384c31a51d1a3afb93de83733ebcb5c9d855c3a0a7117b6cacd61944fbcf824e9ed66148b9379a6ab7bf0cf9543bc5d2c026803173427bd6bbdaed09c18f4f9d7bd8105e3835c7bcf009859df7297165deb169cf5b9aafeaae778865ee72386614f29679ef5f8b77e7def8324b6c8e95069d2d7939c3c9acbeff98fa7fdfc1cb2c3ee3ad9f9908d30afe9ac0cfa4e95a0578dfafdcbcf8ddbe156b0463ca685538bdfd58d7c8b00a56aee13bf735be1b665ae9be4b15eaf26e126f19072e2ee63e9d3f21253b609049cefab9c753de46cef75f0a9bd3eb57d92db4b41febd93aded69932e3d1e100731366e6936d92d366efd2a9d6e305d3eceed15eec76993d3d39d9b9c8a66ed8d5f44db517983a66a2d9a653d8372a92e7d8f9b4a6faea06e68f2a4cdbbac1606bc63fab8ed80c60cda4ff1d488ddcd5f1c0e450584b5c7c997da6d16f39f91bedd9fb7edd4e1ef952bfdf56fbac0fae10f5c4bd8904b3f5277efee350e664ef19596faecf7a0a8da386453daa9a341273b972607601c9253be577a3a61de93f3745eb1cf0e68dbc4bcc73181b203897b432d2f079297d9c5febc2cd9ea9d698cf6d1b5376e86cbb1edeef9afd10e989b630dbfa49b7aeb5a79f0a71dbbf63b561a17f69c7fcb943fce2ef558f989ff8e3efad8ca3b3b25ed3e6ee1a5830ed83b34934e437383fa59d3e936149e0d370e30f8dcb5f8c7b7cf76483196ed59f87eeb14282fdd7fee63a6611758ce04a760231717dc68c26d756cc0abd7b45abbc9cefcc0f1b1c432a79fee8a931a181b6843a7a4bbbae3ecd7dc4cf5699bed0f65958cb53bf6ebb6c68e432fc25ebb2d4adac7d29a9746307bd99ba91c9e46506bddd5cd2bf954a5ee76b9d8c313cb03fca6b2387de511448b2711efef5a4e31563fa88d240ab93c93f8c4adde8f06cb0f1ebba3aa381037156b93718bfee88fee5e4c98b91393f65ec5e75bba2e355cdeccc917ed7569aba97dfc16d27df26b93c5d5d496fcc187a6367e59327d0c8891692e8686ce5abb0625ff7f2dff69c4c4ded98543cf34ee0befb5b23b36ffef2da63635a8864e2823f0aebd6186356099f5f99bd4c5c33bfb5e1841ee33e216772dcb0ea86b8d559b7273c73596372ac9c6372ffc4019f805dd7eb4cf4538fac4d1558d367de5f316a7262cd56fcdea34787def8973d69f9c7f69a3fcec7dea4264d0f69f931be78dd94b2b5a93b76adee673ca128fe6cda705f0c9bb17d25c12db5a121f4f3f37d5bd34bce3f3e3f746a43999974c93263bda1969756355052831f2da4fd1594efc5f9609e313b8364f843ad4e75e5a8f7d9e5f487ae0d14914ee3fdc8d67d99cbbf5eb3eff85af42aafa5557aef9460aab7b7b7518677c68b5f0231f87deb22e6fafee69405f9ef0bae3169c5ee9b273a5418f9b1d662c806e6fe7ee1d7254f3f7f78dbb1f9eea7874b8fe695953dacd5aff4b97b22fe08e45f3379f95b4fbbad354f8f9c1a427f727b66e964a744cbb0dcb63f2b3c97ba09b7e948e3e3cb9765ce2b5db2adbd946f7ab2c3639d6fdcbf337627de22e6faba66bbb49be183930708ca9336553ff6da5f7c35e7c235e3cc7f4e6e3ebe76c9b892577c7dd33d6b9356f39e189cab9861bee26bcd9237d78b19d6e2abb3304b1c6706ea664c4b713d703e6dfcab658d1dc723eae36fcc138cbfea4622d52e24edf4f691ba8519ec63dac19743162df21f72b52262cee46accdc83cd4916cf570734155e9e77a4a064733f9a6efdad8f118768230f8784a44f5aa6fbf0c17c5d3a7ce174c01e328795fd611079cfb0032b83eefe72e478710ef9d999c2c78b4a7eaa9f78e3c9936cc14037bda3a195bbcca2198da98697f72c876f2667571d9b52fab9656d4a41457ae615f35741874af998d07b765f733f5d14c7feb37e4585cf9815a39eb43c3d75fe83cb034ee96e91b1af0e6c30aeacfcd9244f6a3293a07febf7099c9627b76d86d96f9965f1e8fcab987b67a20607e4527857780f4b0c6ffcf56095b37ba330c3faca594c6ecd8763174d8a1e3b1f082aadb8753afd45fa8e25c5f38f2e37aa5e3fbaeaf19215a3bf7cf9c2665ff9a97a5ddbbde284b2e0b18c195b23763ca28fa7077f9d9a217aafb325d6615e854dc35189f9dab33b2abcad6c8ebd7913d9789794bafdb217adf11a217b1ee727e2dabda7b873fbb9bcdaa46f6ad51c63f6a2d6bde0dd85dfe8f60ee3ce33c76dd28f3fc36cbfd1bacf728e8fa8e12b39e907e752d183eaa122ead6b7936de3e36e8f62b10fa6446cda91684df53b34d7bdaae845c8b033d7d38d3f7f29deb66076812e648ad19b621a667c374fba6e69ca91398582a76698f2e51b4a5f0fe7af5a4680ac464f8625672a16bd33aa3c9195d23c00dbacb7e6e083f2eaecfdcfea6c2badc6ceeadfc48aba41d955e6355d7f79ea2ef3179be3ee1f6fb4364a6d89c578315c0b7dd32fdb3112f3de5f64e76c33785970d1c1321d8be58a019193613b7e319367993f6930fdb3fd0f2e4731b74e95e85e2df29850f843731021a5b1529fdb5445a8127be95e78bfce67da25b66e082dab7476da9356dfda52b79119af75708d0f5689ff981239686c3d65e5ce597b9bf2aaeb3e5c8abe64e6e855f87cb7945cfb6961ff1f5a0e14b5174ddba7934ddebd70633d6d7cd1a6cf6f1645deb830b7a63624e19137750086b0f375eef0e91db68c48cf1f8d6bb6e71c3f339290ee605c73abeada9a5d6b068db2af75811d469f4d6e5d852bff58b364db3f27a5e7be3c0f287f7d62093dbf69366d0fe1efc02ce1de6d17c672ce2d7e1391bfd53e32d3c0e57727110e7eddf4e7d8e81fc5cf79199f96fe12d036043bf2cef4ccd9c3dd2a841c562dae119e73f4747b62a830d52f2cedb4f3d5a0e39ce3ccd36959493137c977334eb8bfd05d19d562995a3920f0c1e9f93aabd7595e1c3ac999fefb5eb79bf51fad0b692636dba4d516d7b6475e15fefa69fdb3255694e9162b3713661023e3bdad99d75f5a5bb714519dad880f0e2edfe4b72c637744ff9b2f0bed0e9c3665d4eb7bd5913bfa11eb03f2368426351d26bdf9bbd970f2a37ff2ee37ae68fd7a3dfa0efe15952901434ddffeb1e43d7971b37fc11c5741fed9338417cb2c1a4e65e69189a2847cb7f32bdba52feedc49dbbc60c1e193696b0ffb1e8af97b3435acd5a4f4a98efefca09f5e8e3a1337d864535ce86d4fb6efb8e2fc624be3d0fb3b3187c322cd3d0fe7563d39ee63e418175a566610b8df36a1f98685fb9c32af6b873ff1fedcbe67fb16d86e81af83c7c7b7ef67075cfa708b2a203cb25cf8406766f0e10b0b741bf736d4783eb9dfd85c7edaeea0d301a160c5bba68616e97cea5fbabb4f1b79328455ded41cfdfcd5651f583e815e9b8e3d6ba5875efc7197c76907bb2abfb9b77e178eaab4cfbdfc4fd5e841e2a2ac0b66577770be1e36c93be998b5c8368cb13bc1f6d9cff58cb33bab0a9a4d0b0f5e1f66b932073fd136f5ab7878eeb1d6005648a67f7cc371b64e63f176e79ca68e05b6580f6b13bb32f20287c5475fb4b9344299d7f376db9bb78d7ef694f536b1b63038dd234bb26a517e6bec9bbdc7b257ba4ea2e6a7cd4e3bfd7444668ddba03781c90727dc0dd535b8ddcecf5c51f1e6b1e768e1f023b93f0cb96c20f6491116841acf7f79384067ab2d830c053f0ebe982f5eb3a5404abefcf6d2a7db177c732bd74fb179b6d3ed6360c76be1a385a147f588e50d63ee4870b55e22297b6eae78c6a5d5bfcddc115a907f6c08d1bd23a579650ab5767066c15f1fdb6f4dc3d1b3f1c32adefd353afee354c160ea39fe90c5afaf24fb345fedffde9ffdc5ecc3d8a2a94929fad5b2ad929f5700b568fa4fc9f2e6e5abdd899b0d01907d34bf0250eceef84c3816c79620f7f1b25f148c3e990dd399148cbe3e99cbe12f854430d71d2bdfc48ad9302cc1426c11cc72c7a2b6b65848122784ddb1b2cd2b5efe1b2f03c2772291c304cc38d93793134d217378e19058c470c7a27798580a192f3b8fd1a7b13962882386246c1892fb09b144021e142e82c53819aa028d8c97fb2b8b9dded6412b010094f4fa5e42167b1ffa01b24d71d7ab5e75a9f393d822ddedba146271b8304e4673366b3c180d80fca3b99dd44dc3a5c709a2102f3eb5f7768c1a183c43c097d0397c5884f65c2a65c22c0e1f86b0dd1760131230643681e2191840f3f00bf09a43c6b309148c540af39909f256c438bd87af08000082463746a973832510487af64171b6cb01efc0409a1a76da6537dfde5fdfa96597d563cfec8ab3327645938a40f1f5f2a0aaf1e0a374c36d3c0000fffd1e28be95269e1535d093161ce405296620b9eb4b3e7b3ab7b5122e4cf111788be83c189a2507916d6c6547e55748a5dd458788a36b06764e40c55e9a130d31b874b1d81d31e4aa20a87250ec96e5b35319a373c85401be8d25c25acde4bd763dd3ea2300e0e3f74e0d621fa6869a3121aaad49a5fa93318470fffeb5f757586a19d4d59d527dc9181cdcef93fbc8a0aeaea4520e9fc18d62769784fc3416c2252460be9dc3f1e81c3e4dc8553a8c4564456e227350e7c30bbd00004040af6fc8541c94b1f461c0a09eb0e4ff115453eaefe11740e8ce68ad7f1b6388fc0d52df4988ea4988dd246153e39a5449d4bd43e922d1700bead7df74c0372f91cab26140bffbbafc24d9ff1ac46fca4048e197210ae8e8372025c91312439d44aceba50b9816dc0fa80ac6d00e206558162807b2ba8d3509c694f1902a295314deacfe40b3944b535c86a8b8be2843f5189ef24877ad5a6d1e1e03803a9115da1c29891a818a261161de83c84a190ca988c2a0c01abac0d09a2a4d09d14125c4410728cba8b4cd43b8c294a8310f48d1133a0ffb11e63dc8a894c1909a27741e7474813ad594f67998d309d0631e902f2c0d50dc19ba40bd504a190229534243bcee82501642a97881901fa121420702f5ea266508a4e667280ae26a17841ad592f6284e7aa0475192f6e3b1b51345abba1c8caacb5b9da6aa9a2334025222842e4dd341a037cd913218521284068b540253a331d23eb6eb483094a6088d8054fea0dd31d207bd698a94c190521f3458b412981ae9d0778c1b120ca515422320553dc3d1e38601bd688594b1902a1e3456b41296aa2a48536443d09121b19455404af70d8450077d57351b0cb4500129e321f53868bc44553c35621fed837ca98487d2f4a041900a1a7394533803d0bba647190e297941c3d5aac2a98a70342d4a83508b52842150a79ae9f946618cf2e65097b95ad58c320e52b082c6311e0234a862947190521423144e320a4749eca20c839496a01fcf5ea360d4a85894a190920f131454f850a05199a269a8f4514335d208a8158c68fb70136204d40946d0e6480507fa617e3bc25c8d6044931f18941fa6c640bdfc43694d44340bd1299d870250957f2823215b6fe81bfbc431a0c756a3f637763c04949b766807909d3574281110d0d8b4d394552354566f229154fb72681864736c0cca21732ba0755f4e65fb84687a8d42a1e6aa4355d7d2505907115d2c34e4682cd0ae77a60c89ece52879a90e525dd342fb51691d0b34b584d030c8e60ddab389d640bb96903224b25b8386dca20e529bfc21fb2b68c8f7ea20bf377fc351f9db360ef4daa6416321bb2910cabde73d61a96bd328c322fb2768583f1ba07d6346fb1b73110216b1b0e80e945d400114203506a0cd46f6ebff020000ffff3373f97b7e380000"); err != nil { + if err := gres.Add("1f8b08000000000002ffb45a0b5c4ce9fb7f51d2284a5159721a29bacc34a3c2340d69baa10b06159b9d66ce3493b93533a51a5149620bb9e45224724b2256a2dc4a422db9acdc369794b5d522bbe4baffcfcc54ce9999a6d1efbf3e9f31cd39e7f97e9fe7799ff73de77dce3768e6001d53300800f006e60401c4bf61401f30047c162702aff8c249043cee3c9a2ee8d74c6285c570e0a542ba840db943583c5bc083f14b972ec54b609e904b97c0622c66a1086672c43f62200882981cf112487625813809e78473c21148ae13274d7170c2ca4f33e80c36ace634011b34536f504ec506260b0020fbf4ecaee137777971380e9ff3ffeb2951b3a713e59e762479baa97a1a3c5082f27460b7a77217392692309931f2929ec3b4e8367664448b2502de7f3738ce9a437691874ca3ba3eec7d704c55bcfe2fc6c855b3c393e40e3be935a5f43e4686ca0ef761a806017dc0e488087871747877a0da9b8f4098cb3e8e12582c21e024b1926eb0eea31043c097c07c890cfddc894d24630080b146744c17badcbe1b51052d6dc0d4af86f284684a974e275adfb344fcdfb244446589a8364b44645cd2f59603b4ce12519e25222a4b2834ffa9c7abb5ce12b10f593200fa804398ccc7c37cf44cc7b0612e5720ab765fd91f58cc528188cb94fd5e20fb435ef28ca58ed3200000a41d4524bd278ac6a44d8dc99b1a930e3726e535261d45903d2fcd7ab1255dce363b028ab10700d86bc7268aee89ad2ef766625d69ddf1ba933793115475e575a5371315814d3eb3643c0060bc46aaa15d54f16c47cf00345b37d9f3b3bb9bf69d551fd1cb866b195600002bad69680bfedf68d415918ca60f4534b8d3d491c911e1617e1f671b02012f8f4b7341cac0452d910c230080d17781cb73a404aea6ba771a47dbf60e8e8a3d92febfc61e49ef8c3d8eae123b4975a2c858ca59762116f23bf8f7b028928062911f22a14a6797c762ee50790d6a9d0351741f72301c8dd09903e48d5cfdec95317097598d1f218ff07b1814f12319d42d04704b5b59ef353004892d5f0cfa90020b1590ce2c448a05dfa69454fe2482959fc192becdfb04f91dda6af099de2b410d912219ea88e467b0df8a424184699bf9b57722e5b4d016f4212de62a209d698945542e796a2c8f0bc5c0223147c077c712704e5808e633044c0e3fc21d1b2d61394ec64ea560c832208a3c30b21c84a2481f590149c190f1f22b64de19c58f581f080008fc5eef14b9fc1fbd9383501439272b2051de7db499b545d53be5257d10c2bb3e2cebc65de62c0e17fe0f1f10d03c91742dd73e8c9af5caf4724df00400c0048d8446284251b4160b8ddac7848a39f82fb60000db5ef728dfd814cf0a2a534d65463b607a9c7d94207c890300c04123ad89322d6dc17f3267b4aad7abd3aedde60000381aeb551fe9721f1ff945028104cf108bfbb0d40c4398e3c592382e8c4302d9418a359125e04b1cc59c7898044d240a63dde4072570acc491cee544f0491003e64b60919b62b0ec1ac2ff24020088bdee07e4d41c1e3d02ee83ef2628003c571021c009f911dd486b82027c0c312331b2bd849f2f754ea747c4410301009653d38a0100fdc4737ca683a2eba35ecac642e81b220660b089ecd30fecc83107a07f1187162c09f69f45620878383a53100ee3627942b903e458522c4fc88325742896c7e58b49b1ee58f91524be98243b8cc742f24b244bdcb1c1fe4190a74004432e38679c13565e44641193459a43f5ee34173159ee58b6442224e1655b76dcd289388128024f9832650ade898827121d454c96a3388e2fa1c73af2c56315205d385458cc107184128e800fc97ed3c305d112772cb6f31ac5bf4e3f79c26e22beb8332a8680878fa50bf1049c135e9d1193d16d238c1671e5ae311978980bf360be448c27e0086aed241c164b3d9bec8c828ef2cd8e1ccb13923c45305d0253e912984274224c717472717472a51188a4894412c125948c57ba489db940441308b8140f191de4cd11c14b05a22562c873ae33c2bcf322257b7f0193c38a53a17721b9b892264eeea4475c84306732482c8188479750145529e44790f1df0e22ae94454f0a147160be842e1b340a818c5739d635c078a51156940fbeb37e64eb4e772d5230af17de19000066851fd583c6d66d0b5e28a0d55bfc18c18fe097540facad32b7356f341aa63b7dae8e5df28683f3e6def29e310f3b7dde8479777e094cf8837198624a3b3474f627bd07e77c786b93b1ab86414f23f7d858ad3388f19f059d3cadc390726f34d56e7f19faa9768aa5814d0063e684f6ac77b5db13421e9f3af7b021a2706a8e79e1130a3bef53e2cabc63d39eb7345fd55def10cbdce570cc28f42df3debf16efcebdf16596d81c2b0d3a5bf2728693597dff31f5ffbe8397597cc65b3f3311a615fc35819f49d3b50af0be5fb979d1bb7d2bd608c694d1aa707afbb1ae51e115ac5cc377ee6b7c37ccb4d27d972ad4e5dd24de320e5c54cc7d3a7f424a76c020939cf5738fa7bc8d9aefbf0436a7d7afb20bb6b41febd93aded69932e3d1e100731366e6936d92d366efd2a9d6e305d3eceed15eec76993d3d39d9b9c8a66ed8d5f44db517983a66a2d9a653d8372a92e7d8f9b4a6faea06e68f2a4cdbbac1606bc63fab8ed80c60cda4ff1d488ddad5f1c0e450784b5c7c997da6d16f39f91bedd9fb7edd4e1ef952bfdf56fbac0fae10f5c4bd8904b3f5277efee350e664ef19596faecf7a0a8da386473faa9a341273b972607601c9253be577a3a61de93f37c5e81cf0e68dbc4bcc73181b203897b432caf079297d9c5f6bf066cf546bcce7b68d293b74b65d8fe877cd7e88f4445bb86dfda45bd7dad34f85baeddfb1dab0d0bfb463fedc217ef1f7aa47cc4ffcf1f756c6d15959af6973770d2c98f6c1d92406f21b9c9fd24e9fc9b024f069b8f187c6e52fc23dbe7bb2c10cb7eacf43f758a121fe6b7f731db3903a4670253b8198b83e6346936b2b6685debda2555ece77e6870f5e4a2a79fee8a931a181b6983a7a4bbbae3ecd7dc4cf5699bed0f65958cb53bf6ebb6c68e432fc25ebb2d4adac7d09a9746307bd99ba91c9e46506bddd5cd2bf954a5ee76b9d8c313cb03fda6b2387de511448b2711efef5a4e31563fa88d240ab93c93f8c4adde8f06cb0f1ebba3aa381037156b93718bfee88f9e5e4c98b51393f65ec5e75bba2e355cdeccc917ed7569aba97dfc16d27df26b93c5d5d496fcc187a6367e59327d0c889169298186ce5abf0625ff7f2dff69c4c4ded98543cf34ee0befb5ba3b26ffef2da63635aa864e2823f0aebd6186356099f5f99bd4c5c33bfb5e1841ee33e216772dcb0ea86b8d559b7273c73596372ac9c6372ffc4019f805dd7eb4cf4538fac4d1558d367de5f316a7262cd56fcdea34787def8973d69f9c7f69a3fcec7dea4264d0f6df931be78dd94b2b5a93b76adee673ca128fe6cda705f0c9bb17d25c12db5a121ecf3f37d5bd34bce3f3e3f746a43999974f13263bda1969756355052431e05d3fe0acaf7e27c30cf989d4132fca156a7ba72d4fbec72fa43d7068a48a7f17e54ebbecce55fafd9777c2d7a95d7d22abd774a30d5dbdbdb28c33be3c52f8118fcbe7591737d7f73ca82fcf785d498b462f7cd131d2a8cfa586b316403737fbf88eb92a79f3fbcedd87cf7d3c32547f3caca1ed6ea57fadc3d117f04f2af99bcfcada7ddd69aa7474e0da13fb93db374b253a265786edb9f159e4bdc84db74a4f1f1e5cb32e7952eded65eca373dd9e1b1ce37eedf19bb136f11737d5db35ddacdf021c90304e5499baa1f7bed2fbe9a73e19a71e63f27371f5fbb785cc92bbebee99eb549ab794f0cce55cc305ff1b566f19bebc50c6bf1d55998c58e33037533a6a5b81e389f36fed5b2c68ee391f5f137e609c65f7523916a83493bbd7da46ee106fb9876f0e5d0850bfd875cad889c33b91a33f7607392c5f3d5014d8597e71d2928d9dc8fa65b7feb63e421dac8c3a1a1e99396e93e7c305f970e5f381db087cc61657f1844de33ecc0caa0bbbf1c395e9c437e76a6f0f1c2929fea27de78f2245b30d04def6858e52eb3184663aae1e53dcbe19bc9d955c7a6947e6e599b5250919e79c5fc55d0a1523e26ec9eddd7dc4f17c5b1ffac5f51e13366c5a8272d4f4f9dffe0f28053ba5b64ecab031b8c2b2b7f36c9939acc24e8dffa7d02a7e5c96d9b61f65b66593c3aff6ae9bd33d183037229bc2bbc87258637fe7ab0cad9bd5198617de52c26b7e6c3b18b26458f9d0f049556dc3a9dfe227dc7e2e2f947971b55af1f5df578f18ad15fbe7c61b3affc54bdaeed5e714259c858c68cad913b1ed1c7d343be4ecd10bdd7d912eb30afc2a6e1a8c47cedd91d15de5636c7debc896abc4b4add7ed98bd6788d903d8ff31371edde53dcb9fd5c5e6dd237b56a5e6af6a2d6bde0dd85dfe8f60ee3ce33c76dd28f3fc36cbfd1bacf728e8fa8e12b39e907e752d183eaa122ead6b7936de3e36e8f62b10fa6446eda91684df53b34d7bdaae845e8b033d7d38d3f7f29deb66076812e648ad19b621a6e7c374fba6e49ca91398582a76698f2e51b4a5f0fe7af5a4680ac464f8625672a16be33aa3c9195d23c00dbacb7e6e083f2eaecfdcfea6c2badc6ceeadfc48abe41d955e6355d7f79ea2ef3179be3ee1f6fb4364a6d89c578315c0b7dd32fdb3112f3de5f64e76c33785970d1c1321d8be58a019193613b7e119367993f6930fdb3fd0f2e4731b74e95e85e2df29850f843731021a5b1529fdb5445a8127be95e78bfce67da25b66e282dab7476da9356dfda52b79119af75708d0f5689ff981235686c3d65e5ce597b9bf2aaeb3e5c8ab964e6e855f87cb7945cfb29b8ff0f2d078ada8ba6edd3c926ef0ede584f1b5fb4e9f39b8551372eccada90d4d78e44d1d8021ec7c9d3b7c7a872d23caf347e39aed39c7cf8c24a43b18d7dcaabab666d79a41a3ec6b5d6087d167935b57e1ca3fd62cdef6cf49e9b92fcf03ca5f9f584ccf6f9a4ddb43f83b304bb877db85b19c738bde44e66fb58fca3470f9dd4984835f37fd3936e647f1735ec6a725bf04b40dc18ebc333d73f670b70a2187558b6b84e71c3ddd9e18264cf50b4f3bed7c35e838e738f3745a56d2d29be4bb1927dc5fe8ae8c6eb14cad1c10f8e0f47c9dd5eb2c2f0e9de44cff7dafdbcdfa8fd68534139b6dd26a8b6bdba3ae0a7ffdb4fed9622bca748b959b09338851f1ded6cceb2fadad5b8aa8ce56c40707976ff25b96b13bb2ffcd978576074e9b32eaf5bdeac81dfd88f501791bc2929a0e93defcdd6c38f9d13f79f71b57b47ebd1e7307ff8aca9480a1a66fff58fc9ebca8d9bf608eab20ffec19c28b65160da732f3c8445142bedbf995edd21777eea46d5eb0e0f0c9b4b5877d0f2dfd7b3435bcd5a4f4a98efefca09f5e8e3a1337d864535cd86d4fb6efb8e2fc624be3b0fb3b3187c3a3cc3d0fe7563d39ee63e4181756566610b8df36a1f98685fb9c32af6b873ff1fedcbe67fb16d86e81af83c7c7b7ef67075cfa708b2a203cb20c7ea03333e4f08505ba8d7b1b6a3c9fdc6f6c2e3f6d77d0e98050b0e25d53438b743ef52fdddda78d3c19c22a6f6a8e7efeeab20f2c9f40af4dc79eb5d2c32efeb8cbe3b4835d95dfdc5bbf0b4755dae75efea76af4207151d605b3ab3b385f0f9be49d74cc5a681bced89d60fbece77ac6d99d5505cda68507af0fb35c99839f689bfa553c3cf7586b002b34d33fbee1385ba7b178bb734e53c7025bac87b5895d197981c3a2a32fda5c1aa1cceb79bbedcddb463f7bca7a9b585b1892ee912559b530bf35f6cdde63d92b5d2751f3d366a79d7e3a22b3c66dd09bc0e48313ee86e91adc6ee767aea878f3d873b470f891dc1f865c3610fba4080bc28ce7bf3c1ca0b3d5964186421e875ccc17afd95220255f7e7be9d3ed0bbeb995eba7d83cdbe9f631b0e3b5f05170d8513d6279c3983b125cad9748ca9e9b2b9e7169f56f33778415e41f1b4274ef48695e9942ad1d9c59f0d7c7f65bd370f46cfcb08a777f8d8eff385530987a8e3f64d1eb2bc93ecd57fbbff7677f31fb30b6686a528a7eb56cabe4e715402d9afe53b2bc79f96a77e2664300641fcdaf0014bb3b3e138ec5b125c87dbcec1705a34f66c3742605a3af4fe672f84b2011cc75c7ca37b162360c4bb0105b04b3dcb1a8ad2d1692c4096177ac6cf38a97ffc6cb80f09d48e47001334ef6cde4c450c81c5e04241631dcb1e81d269642c6cbce63f4696c8e18e28821091b86e47e422c918007458860314e86aa4023e3e5feca62a7b775d04a000025bdbe9790c5de877e806c53dcf5aa575deafc24b64877bb2e85581c2e8c93d19ccd1a0f460320ff686e2775d370e9718268c48b4fedbd1da30606cf10f025740e1f16a13d974a99308bc387216cf705d884040c994da0780606d03cfc02bce690f16c02052395c27c6682bc15314eefe12b020080a0d18d51eadc600904929e7d509ced72c03b3090a6869d76d9cdb7f7d7776ad965f5d833bbe2ac8c5dd1a422507cbd3ca86a3cf828dd701b0f00c07fbf078a6fa58967450df4a4850479418a1948eefa92cf9ece6dad840b537c04de223a0f8666c941641b5bd951f915526977d121e2e89a819d1350b197e6c4400c2e5d2c76470cb92a08aa1c14bb65f9ec54c6e81c3255806f6389b0563379af5dcfb4fa0800f8f8bd5383d887a9a1664c886a6b52a9fe640ca1dcbf7fedfd15965a067575a7545f320607f7fbe43e32a8ab2ba994c36770a399dd25213f8d85700909986fe7703c3a874f1372950e631159919bc81cd4f9f0422f000010d0eb1b321507652c7d1830a8272cf97f04d594fa7bf80510ba335aebdfc618227f83d47712a27a12623749f8d4b826551275ef50ba4834dc82faf5371df0cd4ba4b26c18d0efbe2e3f49f6bf06f19b321052f86588023afa0d4849f284c4502711eb7ae902a685f403aa8231b40348199605ca81ac6e634d8231653ca44aca148537ab3fd02ce5d21497212aae2fca503d86a73cd25dab569b87c700a04e648536474aa246a0a2494498f720b25206432aa23028b0862e30b4a64a534274500971d001ca322a6df310a130256acc0352f484cec37e84790f322a6530a4e6099d071d5da04e35a57d1ee67402f49807e40b4b031477862e502f94528640ca94d010afbb209485502a5e20e4476888b08140bdba491902a9f9198a82b8da05a146b5a43d8a931ee85194a4fd786ced44d1aa2e07a3eaf256a7a9aae6088d809408a14bd37410e84d73a40c869404a1c1a294c0d4688cb48fed3a120ca529422320953f68778cf4416f9a226530a4d4070d16a304a6463af41de38604436985d0084855cf70f4b861402f5a21652ca48a078d15a384a5aa0ad214d9107464482c651590d27d0321d441df55cd06032d5440ca78483d0e1a2f51154f8dd847fb205f2ae1a1343d6810a482c61ce514ce00f4aee95186434a5ed070b5aa70aa221c4d8bd220d4a2146908d4a9667abe5118a3bc39d465ae5635a38c8314aca0718c87000daa18651ca414c50885938cc25112bb28c320a525e8c7b3d72818352a166528a4e4c304051531146854a6681a2a7dd4508d34026a0523da3edc841a01758211b43952c1817e98df8e30572318d1e40706e587a931502fff505a1311cd42744ae7a10054e51fca48c8d61bfac63e710ce8b1d5a8fd8d1d0f01e5a61dda0164670d1d4a24043436ed3465d50895d59b4824d5be1c1a06d91c1b8372c8dc0a68dd9753d93e219a5ea350a8b9ea50d5b53454d64144170b0d391a0bb4eb9d2943227b394a5eaa8354d7b4d07e545ac7024d2d21340cb27983f66ca235d0ae25a40c89ecd6a021b7a883d4267fc8fe0a1af2bd3ac8efcddf7054feb68d03bdb669d058c86e0a8472ef794f58eada34cab0c8fe091ad6cf0668df98d1fec65c8480452c2cba036517500005488d0168b391fdfabf000000fffffdd456717e380000"); err != nil { panic(err) } } diff --git a/os/gres/testdata/testdata.go b/os/gres/testdata/testdata.go index fc73a247b..2c8871504 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("1f8b08000000000002ffb45a0b584ce91ffe50d210a5502e99464ab7996674619a8634ddd085c6a5d8ec3473a699ccad99e92e944afc0b61732992cd2289b212e5569b504b2e2bb7cd25656d5964d726d6fe9f3925e74c33cd34da9e67aa39dff9def7773bdf39dff9bd01f38668198161008037103700207e26025d4088628809d1d1d18430b69d842b85085248222530850236376c115d1b0c6a21b34302e6e90c434e540e394505a41d33522215f23540b6578a8c86eefe86970af9bc1e9a282e142d62483958572c8ec011f22118450af1453c861492e030cbc4108b2bf90683c562b12cae642556762691e48cb7c7dbe38964a7e9ce336d1d70f03093c1e4400a861d713267e834a7076c0000bb4f676cd475861f8be70ab803eb8753df7e38c37ed8eb3427abf6c34a951fff5d36ecfbf682087b9153b985a5da0b73955efc176920f5edc074d8818e447717d50e8c57ea008b2b266a70b14d561e111922411219aa01aa9d6a54d9c74e76888897c6487b387a8e6299428114124865a4e74e6c231b00000cfa243553410ac3f610f522491b32eb931e00404ff30490063c01a4ff2401245402480a134042c6267eb3e990af4d0009fe97844a008ac4775649cdd724804b9c21d02054a67d02dab1b8620d4071ca43f1199500090636b108600207e2f184e8b518031f93ad3fdeb27fe04547dc1aced40700e80f0467b450cc63c971c2c7649c4b64ffc09c7b0c222d5573aa13c070c67f14c0704677006319bd0248c6e29a12b735256d6b4a3cd29498d794780cf6aa826d1d640200301908f2ae48a2c8e143642cee5959d6f3efd261cabd6e2b78a30000a3be3a90e2480d0269ab1670772091f7d49e3aaccfbdb1b6beacbea4fee48d24d823de2ab369630100630782b82b8848e29e62acafa82fbbb116a6845a5f96abaec6a96a50c671ecdcfd06f671178ddd1dca7089f0cbc2110f3f59e0e0119cac3cceee6b3e70168749806f9b66c3cfa8ae49f5f9bb22aa881f1ec17d29cf2e7ecccb799f54f3ab195bfa120d624b5017bb3bb631882b8e322b86cfc346416209572870c511f1f6382c24600a595c41982b2e52cab69b819b45c550644054380c141884da95034a1724154381a9a832a3f5e3c66ef60700f80f90d15d09f94aa361106a57e2285d9028a33b2de67fa7dae8c97ddf45d95c1ea441fea6a908850c960009fabed129ba0931a3ed66630100d8afa70f67a8799bc02858c38d2ed52eb582b7577dd961a98e1de2483556598ca235b07221e11f4b9846c39dec1723e085a2f712d16b81b2c5285d35a80184525b7899efcb1a6b35ada12ff94f2e6ab5ae9c2bb3afdee20200b81abe488191fec3f256c51cce50c6acb8b4652388da5e10868db2810be76b8c10472a3342756133679c59390dbe8efbb2c04285055d358d32a2c786cff75b45febf68bc9a61066f8bbe929dbee43f6357be9b120b85d281ddceca10094c894403542bd5a80489349607e191f8d6d8aec713b65020b59370e32032763a4914e3021f944231523b068f1b2620639990400a895dbad61febc6d0df49000092a67b5dd8222e9f11a6c91dcf5a1d5c024f1826c48b045fdedb6e08f0f3d2c38cc7c8b6cf3edeb485ddf693860d95ed7067a51503000649167acd0145d726be0000e88abc8324000c37947d0681dd39c6000c2ee2d2974a97face2733857c3c83250c85f0317c116c1725861cc317f12129031bc3e70924e418571c7c06592021cb0e137058f814e94a57dc52df00acbb500c611df10e787b1cbc5c52c42c367921cdb37bba98c576c571a45211992073151f3d1d2f148711883367ce24d8930824929d98c5b693c40aa48c183b81644a17c8671c1a24618ab922295728c0cabe3342859152571caefb9cae9f6e3bf9a21e2281a4db2ba6904f8861880844bc3d41d12416b3678e2852cc834d633109100fe24302a98440c41315ce9372d96cc56cb2912e3aea97799418be88ec2e86185288c6904254923d71a69dbda39dbd139d48224f2791898ec11482dc498aa60bc574a190477593d1613db962285a285e29c1ba073a20a6779f2437df57c8e2b2637bd13b921d9dc8d36774d3234e424c6731c96ca198cf9052bbaa522408a310be1c449c29f39eec2fe64202294396342a9142e875ec7382097219ee2a1f4277fdc8eeb03db548c5bc5e767b080098353e34373a47fbe5d265427a83c9376182304169cdd0ba6a634be326fdd1da7302b5ac93b61c5a1478d373ee22dc9c45568b6effe89ff01bf308d5887e78d4820f3af7cf79f13726e15246639f84efb730db3422ca773ef6e4692d663cef7a73ddae17c11fea669a8eb0f063ceb36acf7a57b72b21e8d1a9730f1ac30a67e518173ea672f23eac5d97777cf6b3d6962bda9b6d63587b6d8feb07bf65ddfdd7e4ddb937deac528be36501674b5fccb51fd7307872c3bfefa055261f09e64f0d4569057f580932e9da667e9ef7aab62f7f7760cd06e1e4727a355ee7079c534468253b57ef9deb06ef2df3ccb4dfa58ab4f93748370dfc9717f39e2cb64acef61b6698b339b024f96dc462df959031a321c57aa9a9cd14f7b669960ed4b90f8ff8191bb2321fef949e1ef72e9d663e4d38dbfa2efdf93ec7057392921c8a2cea475f49df567781a5354ebcc06826e77a65d2426bafb6546f6dfffc8985693bb68cd891f157ca518b21ec798c3ffd69117b3bee1b1e0e6d8d8d2bb7c9d4ff25277fab0de7c0cfbb28e35fe80eda6193f5de094b3b71773a71dce613fffbed70e60ccfb9596faecd7f829d4a0b8d7c58ed3c1e73a96a687601d9313bf957fde6dde9ff6b8ed23ae8c91f7f8794673bc54f782e715d84deb332c6549fb6a5dbdd53cd311f5f6e4ddeadb5f35ad8a0ab3623e34fbc0cb56c70be79b53dfd54b0cb0fbbd7eb15fa96752c0e1ce91377b766ece2b5dffcdac63c363feb353d70efd082d9ef1d0ca3b03ec3f393db19f398a644011d3fedf0d4fce5f847774e368ec3a7fc7ef82e3b38c877e32f4e9397d1260b2f672790d66ece98dbecd48659a373b728c5c3e1f6e2d0e1d1e4d2670f9f18101be92b6893be6bd7d6a5bb8efd9f59a63776d77c9ce9a99f775ed2d3771cf3827d29dea5bc7d25b96c6b07a385b695c5e26706bcdd5e3ab88d46d9e46d9e84d13bf843a4c7562ea3a3c89f6ce130e6d349bbcb068cb165fe662793264c4cdd6afb74b8c1ebfa7afda143f166b9d7993fef8efaf1e4c98b1139df66ec4bb955d9f1aa7641e6789fabeb8c5c2b6ee377516e911d9facaf6234658cbabea7eaf163ecf8e926d2a8285cd5abd0626fd78a5ff69f4c4ded702e9e77dbffc0bd1d11d9377e7cedb6352d583a7dc96f85f51b0c3029a2679717ac92d42e6e6b3ca1c3bc47cc99113bbaa631767dd62daba78e1b0c8f57700def9d38e8e5b7f75abda16eead18da94273c6bc7b6b26ce585bbb83f0fdb163a3aeffcb715eddd95efbdbf9981bb4c439c1addfc4156f9a59be3175f7def5830cac8ae2cea68df1c67098bbd6115d521b1b433e3e3bb023bdf4fca3f3a36635968f8b5fb1ca406794e94f298dd4d4a0874be97f04e47b70df1b672cc820eb4da8d3aaa99af8777605e381532355acd5742fa2ed40e6ea4f576d3a3e15bdca6b6d8bbf7b4a38cbd3d3533fc333e3f98ffe18c2814de181debfd867617d0f04d51ab6e10e2c121f2e8ce8ac3319b985f5c3a0b06bd2271fdfbfedd87ee7c38395c7f2cacb1fd4e95679dd39117714eb5b3b63f55b77eb1db54f8e9e1ac9787c6b5ed90cfbb5a6a1b92f7faf745fe922daa9151f1757b12a7351d98a9ded6502a3931d6e9bbc63ff9dbb6fed4d52aeb753b663fb384250d2106145e2b69a471e3f145fc9b970d520f3af93db4b36ae985afa4aa06bb47f63e27afee311e72ae71aaff954bbe2cdb562a6b9e4ca7ccc0abb79feda19b3939d0e9e4f9bf66a555347497843dcf545c269575cc8e4baa5e43d9e5ef12ea1230eb0aca14bc1cb96f98ebc5219be70460d26f0504ba2c9b3f57ecd8597161d2d28dd3e88aedd70b333fc307dfc91e0e074e755da0fee2fd66640174efbeda770d9d9ef8751f68f3eb82ee0ce8f474b8a73284fcf143e5a56fa6dc3f4eb8f1f670b87bae81c0ba9da3b2e8ad994aa7769ff6ae8465276f5f199651f5b37261754a6675e367e1570b84c8009b96bfd29f7c34549cc5f9bd7547a4d5e33f171eb9353e7df3bdee796ed131b786b4123a696573c7576a725b188ba377fb5e2b63ebe6531dae6bbf9260fcfbf8abe7b2672b85f2e957f99ffa054effa1ff7531c5c9b4419e697cf62726bdf1fbf6858f4c8e1604059e5cdd3e9cfd377af285e7c6cb57ecde649d58f56ac99f4cf3fff703897bfadd9f4f26e714279d014e6dc1de1bb1f32a631823ecdca10ffadf55d8ceda24a8bc66352e38d6777577a9a591c7ff326a2e90e3975d7250f7ad35562f622eeb7a48ddf9fe2050e727cb54dd7c8ac257adcf33ad78277177e61d8d84e3dcf9aba4d37ee0cabfd7adb01d3855ee2c64f94c4090e65e2fb35a3c4b41d6f6758c6c5de9ac8e61c4a0edfb67bad39cde770a06b75d1f3e0d167aea51b7cfca778e7920505da58238cce4ca350833b79f19b56261f5d58287c320e53b17a4bd9eb3182945544acd9a41990f44ce5b277fa5527b2925b86e05a74361cba5f5193fdc3d37acb2ab329f30737b323af53f7967bccd15d9dbad7f8f9f6d87b254de6faa9ad31180fa653a177fa256be6dabcbf2f7272768e785170d1d6341d87e34900899b61396d398b6f9aef3c9cf1d16682e331cccd53a5da578adcac0a27b40410939baa7479cdd5c46a8987f685bf3779cdfe89a31d4ccf2a5b90f6b8cdbbaecc657cc66b2d7cd3fd14c96f3323864d69a0aedb33fffbe6bc9afaf73f45fd34cecea3f0d9be784add87a58327b41e2c6a2f9a7d402b9bb26fe9d606fab4a26d1fdf2c8bb87e21b0b62e38e1a1276d0886b8e775ee98391d96cc08f76f0c6a77e5949c194f4cb735a8bd597d75c3de0dc326dad43942b693ce26b5a5e02b3a6b57ecfceb64fcb97f9ef955bc3eb18291dfbc80be9ff8a77f96e8fb9d17a670cf2d7f139ebfc326227384e3aff6623cf4baf9f72951df489ef1333eacfcd1efe548dcf8db7332178c71a91471d975f82668e1b1d3ed6b4344a93ea169a71dae0494704b58a7d3b212a36f50ee649c707daebd2eb2d534b56a88fffdd38bb5d66f32bd38cad981f1ebf72e371a3acd0be986163be36b4caeee8ab822faf9c3e6a72bcca8734cd66d27ce2545c4799ab3aebd30376f2da2399891ee1f5abdcd6755c6bef0c1375e145a1f3c6dc46cd0f5a8a7740c2235f8e56d09496c3e427ef3678bde8c877fe5dd6b5ad3f6e95ad46dc22b1a4b0a4619bdfd6dc5df94e52dbe050b9d84f967cf109faf32693c959947218913f25dceaf6b8f7f7efb76daf6254b8e9c4cdb78c4fb70f49f9368a16d86654fb47417077cfb62e299d8e186db62436eb973bca716e7179b1a84dcdb8339121a61ec7e24b7fa718997be5d6c4879f908ff1f2c135aae9bb82e2cf7b87ae403fff75dfb777d07592ff1b675eb7cfbf702bf9fdedfa409890f4d97ded79a1774e4c212eda6ef1b6bdd1fdf6b6aa9386d7dc8fea048b8e65d73636bfc62da1fdafb4eebbb3345d59eb41cddfcf5e5efd95efe1edb8e3f6d63845cfc66afdb695beb6a9fc09bbf8a2656d9e45efaab7ad2304951d685715776733f1d31cc3b6997b5cc3294b92fc1f2e9ff1a9867f75417b418151eba36da745d0e61ba65ea27c998dce36d7eece04cdfb8c6128e5653f12e879ce68e259638377343eb72ca12dbe5c79ebf746cc2665ecbdb6763fc72d2d327ecb76beb0a83d2ddb2a429cbf2db62de7c7f3c7b9d93332d3f6d41dae92763336b5d86bdf14f3a647527447bc4ad7641e69aca378fdc2789c61ccd9d30f2d2088957b2a820c460f18b237e5a3b2c99146cd0a3a08bf9920ddf15c4532ebdfde9c3ad0bdeb9559b675a3cdde3d2e9dff15af47069c8311d5245e3e4db527c9d87389e13982b99fbd3fa5fe6ed0e29c83f3e92e4da91dcb22e9956373cb3e08fcef69bb3f18c6cc2e8ca777f4c8aeb9c251c4e3b2718b9fcf5e524af962b83fff6e5fc33eefd94a25989c9ba35b2ad928f871fad68ceb7497047e3d5beb5dbf500907d347a07d0b5e913b0a0183c478a7c9125fb46c5e85238108345c5e8ea52785cc14aac18e2b9e2e09db0840341521c962386d8ae38d4fe188795c68a20579c6c074c80bf136440846e244aa890152bfbcbe24651295c7e18562266bae2d01b4f1c9542908d6374e91cae04cb9560a51c080bdb89658b857c6c981892e065a85d6814026caf2c248c971df4520040a9865dd9cfe28b81dd5c7f4655146b1fa925d2bfcfa762d95c1e8497b19fcd9a062601007f347a8bdbc3ce63c40a23a59a08399cd4472730850229832b80c4683fe3e359109b2b80b0b89e13700909180a874875f7f7a3bbf9f8792ca41038442a263e1e12b012e0d72553751ebc220200887d5a37bd1fd6b18542a972d3ba463fdbe5e9ef4f576014fd928bb7ea578ffd314a76712837aa6b546654d72b6322d5dbc38da6c0b0cef82db708708f67a00cebfa2bb73898d1fcdde941011ed8ae5582f2f90f7c8577efc8a53c88ea25f41433f810763e0c22db93cb8ec267c4c7f7d439c2bdcfab44f722d1f51a801b8565f21812892ba26e7a83a06aaa6ba30faf20f218dd09ee0df025f388d90a1698abd732cd3a01009d0374356aa2ea513f832485f52e57db32e260de9f3fab6ef7f78758514dcbd5ae8cd8d6f51e65608915d56c7c3c57c0e445b27aca0d1ec661f10909982f63783e832ba08b787287718818c25364766bbd7faee30700f0d3544dd0cb6e19b906c5e0dc4f0af817b1775e7cdd7cfc883d69a9f37dc91c09001839f0dc24c5dca41eeed059b1cd686eb895132d41718f55ca0d43bba74942be182e3f798cb2c988b9ca12208fa5af004b03986108180da66b754f573155512407c9a622e60d1a6c3444b9d2fbb3d32fdd6039817aba6fe590535090812a207bebbed1c848d9b47d0f3200f989479522aba1fb96a741aa9a6d5034718380468a6c7906a4e2d80ac5306730d0402b2d8f8f14049ba3f0870d01fd5331f795ddf1a8ec5e510a2da72f560e381905385e0bf4435f8c4645ca7eed501110a94655a22f96e740aa7ecd501ccd2a38d07262f5433c571ba8a7205637c4d9daa01f0a62342a52d88b0ef11bd5a84a14c4f21c485d2f3ac4eca1a01f8261f5435cab14574e23ac1cd01405385107a8af11560e8a438146280555a211460323b5bbe8d45d550b589146589e03a9d545735087010d35c1ea07a8440d0e9406180d8c94e4a28d1fae0b34d400cb732035b8688e34f53814487dd50fd007353850da5e3430526e6b8b329e8e019a697be52990f25a34c5cfea51f456f1f6159ea9a8f0cc1e0efaadda95bb032114b4e887951c75b115a976e56990425934cdc411407371aefa91ca518f06a5c1456323a5ad04940b1dea622bd0e0cab320b5a86896a37a4063d1acfab7dad091a01f2a57342a5293370d657bd948d07f95ab3c3c52498a86771e05faaf629587476a442d51f0e7d5819713a7caa323359fe8a7759a3ed048752acf80d4625aa3186eaac920a724ed2bbd53d04b8501e897c0531e19a9a344238f1d0dfa25e0ec6533421f8946ce56812cafca944746aa0f2d50c8930c417fd596ea8367ab06971753aaff54696204d4d34aaabb9a842b0554a49544a322558ae8dde705d5a80ab4927d596d86b27ae118d02fe5a3dc3307a22186be0e0bd4c1edad7c942740b697d0c5913b05f4b7cba6fe0ea1c41ca8dfaf428322bb47e890e84c059af4abfab2da1265758a1a04bd5b5268746403c809657e93fae8ca5a52bdde1e211a3bd351648916e0ab3a4cbd1e35109d1a34d3584bf0556d23792664bf02cd74ac1f4c8adea9ab5f08865640836e081a1dd9a040fb11a13eba5ab9417624d04cbff783499ddc207b086826a635f8aa7e475fb9b145e566820dd0b44381a640760c9c51ceacee2785a20e853c1bb2478066ebd4848da4984d59dfa1ebc70080d951b6407517e28be98afa105fc04e2803530b4b1f85f5af022cb56086a1603ced80a2ae84f2e95aa8e929ddd37b4d55d687f832f5826c2a629ef650d9080dd040963100bfd9c9befd3f0000ffff5311883694460000"); err != nil { + if err := gres.Add("1f8b08000000000002ffb45a0b584ce91ffe50d210a5502e99464ab7996674619a8634ddd08506159b9d66ce3493b93533a58b502af12f84cda548368b24ca4a945b6d422db9acdc369794b565915d9b58fb7fe6949c33cd34d368e77986e67ce77bdfdfed7ce77ce7f706cc1ba26504860100de40dc0080f84c04ba8010cd101356ae5c490867db49b85288208524520253286073c317d1b5c1a016323b34609ece30e444e590535440da31a32452215f03647ba5c868e8ee5f78a990cfeba189e6422b450c2907eb8ac51138423e04a34821be88c79042121c66a918627125df60b0582c96c595acc0cace24929cf1f6787b3c91ec34dd79a6ad030e1e6632981c48c1b0234ee60c9de6f4800d0060f7e98c8dbacef063f15c017760fd70eadb0f67d80f7b9de664d57e58a9f2e3bfcb867ddf5e10612f722ab7b0547b61aed28bff220da4be1d980e3bd091e8eea2da81f14a1d6071c5440d2eb6c9ca2322432448a2c23440b5538d2afbdac90e11f1d218690f47cf512c5328904202a98cf4dc896d64030080419fa4662a4861d81ea25e246943667dd20300e8699e00d2802780f49f2480844a0049610248c8d8c46f361df2b50920c17f9250094091f8ce2aa9f99a04708933041a84cab44f403b1657ac01284e79283ea31220c1c02616014ce0403c9e10bd1663e063b2f5c75bf607bce8885b2398fa0000fd81e05c2914f358729cf03119e712d91f30e71e83284bd59cea043082f11f053082d11dc05846af0092b1b8a6c46d4d49db9a128f3425e635251e83bdaa605b079b00004c0682bc2b922872f810198b7b5696f5fcbb749872afdb72de2800c0a8af0ea4384a8340daaa05dc1d48e43db5a70eeb736facad2fab2fa93f792309f688b7ca6cda5800c0d88120ee0a2292b8a718eb2beacb6eac8529a1d697e5aaab71aa1a94711c3b77bf817ddc45637787324222fcb270c4c34f16387804272b8fb3fb9a0f9cc56112e0dba6d9f033aa6b527dfeae882ae28747705fcab38b1ff372de27d5fc6ac696be4483d812d4c5ee8e6d0ce28aa3cc8ae1f3b0d19058c2150a5c7144bc3d0e0b099842165710ee8a8b92b2ed66e0665131141910150e030506a176e580d20549c550602aaacc68fdb8b19bfd0100fe0364745742bed2681884da95384a1724cae84e8bf9dfa9367a72df77513697076990bf692a422183254082be6f748a6e42cc9576b3b10000ecd7d34730d4bc4d6014ace146976a83ace0ed555f7658aa6387384a8d5516a3680dac5c48f8c712a6d17027fbc50878a1e8bd44f45aa06c314a570d6a00a1d4165ee6fbb2c65a4d6be84bfe938b5aad2be7caecabb7b80000ae862f5260a4ffb0bc5531473094312b2e6dd908a2b6178463a36de0c2f91a23c451ca8c505dd8cc1967564c83afe3be2cb0506141574da38ce8b1e1f3fd5691ff2f1aaf6698c1dba2af64a72ff9cfd895efa6c442a17460b7b33244025322d100d54a352a41228de5417824be35b6ebf1842d1448ed24dc38888c9d4e12c5b8c007a5508cd48ec1e3860bc858262490426297aef5c7ba31ec77120080a4e95e17b688cb67846b72c7b3560797c013860bf122c197f7b61b02fcbcf430e331b2edb38f376d61b7fda46143653bdc5969c500804192855e7340d1b5892f0000ba22ef600900c30d65df4160778e3100838bb8f4206990ef7c3253c8c73358c230081fc317c1765162c8317c111f9232b0317c9e40428e71c5c167900512b2ec300187854f91ae70c505f90660dd856208eb8877c0dbe3e0e5922266b1c90b699eddd3c52cb62b8e23958ac80499abf895d3f1427138813873e64c823d894022d989596c3b49ac40ca88b11348a674817cc6a14112a6982b92728502acec37234c182575c5e1bacfe9fa74dbc917f5100924dd5e31857c420c434420e2ed098a26b1983d734451621e6c1a8b498078101f12482504229ea8709e94cb662b66938d74d151bfcca3c4f045647731c49042348614a292ec8933edec1dedec9de84412793a894c740ca110e44e52345d28a60b853caa9b8c0eebc915432b85e21512ac7ba003627af74972f37d852c2e3bb617bd23d9d1893c7d46373de224c4741693cc168af90c29b5ab2a4582700ae1cb41c49932efc9fe622e2490326449a31229845ec73e27982097e1aef22174d78fec0edb538b54cceba5b787008059e34373a373b45f062d15d21b4cbe0917840b4a6b86d6551b5b1a37e98fd69e13a8659db4e5d0a2c09b9e7317e1e62cb25a74fb47ff84df9847a846f4c3a3167cd0b97fce8bbf310997321afb2462bf85d9a611d1bef3b1274f6b31e379d79beb76bd08f95037d37484851f739e557bd6bbba5d09c18f4e9d7bd0185e382bc7b8f0319593f761edbabce3b39fb5b65cd1de6c1bc3da6b7b5c3fe42debeebf26efcebdf166955a1c2f0b385bfa62aefdb886c1931bfe7d07ad32f948307f6a284a2bf8c34a9049d736f3f3bc57b57dd9bb036b36082797d3abf13a3fe09c22c32ad9b97aef5c37786f9967a6fd2e55a4cdbf41ba69e0bfac98f764b15572b6df30c39ccd8125c96f2317fbae808c190d29d641a63653dcdba6593a50e73e3ce2676cc8ca7cbc537a7adcbb749af934e16cebbbf4e7fb1c17cc494a7228b2a81f7d257d5bdd0596d638f102a3999ceb95490badbdda52bdb5fdf32716a6edd8326247c65f29472d86b0e731fef4a745eeedb86f7838ac3536aedc2653ff979cfcad369c033fefa28c7fa13b68874dd67b272cedc4dde9c4719b4ffcefb7c399333ce766bdb936ff09762a2d2cea61b5f378cca5aaa1d90564c7ece45ff59b77a7ffaf395aeba0277ffc1d529eed143fe1b9c475917acfca18537dda82b6bba79a633ebedc9abc5b6be7b5f041576d46c69f781966d9e07cf36a7bfaa910971f76afd72bf42deb581c38d227ee6ecdd8c56bbff9b58d796c7ed66b7ae0dea105b3df3b1846637d86e727b733e6314d89023a7edae1a9f9cbf08fee9c6c1c874ff9fdf05d7648b0efc65f9c262fa54d165ece4e20addd9c31b7d9a90db346e76e518a87c3edc561c357924b9f3d7c62406ca42fa74dfaae5d5b97ee3af67f6699ded85df371a6a77ede79494fdf71cc0bf6a57897f2f615e4b2ad1d8c16da56168b9f19f0767be9e0361a6593b7791246efe00f511e5bb98c8e227fb285c3984f27ed2e1b30c696f99b9d4c9a303175abedd3e106afebebf5870ec59be55e67febc3bfac793272f46e67c9bb12fe55665c7abda0599e37daeae3372adb88ddf45b945767cb2be8ad19431eafa9eaac78fb1e3a79b48a3a37155afc28abd5d2b7ed97f3235b5c3b978de6dff03f7764466dff8f1b5dbd6b410e9f425bf15d66f30c0a4889e5d5eb04a52bbb8adf1840ef31e316746ece89ac6d8f559b7ac9e3a6e303c5ec135bc77e2a097dfde6bf586baa94737a60acd19f3eead9938636ded0ec2f7c78e8dbafe2fc77975677bed6fe7636ed012e784b47e1357bc6966f9c6d4dd7bd70f32b02a8a3b9b36c61bc361ee5a4774496d6c0cfdf8ecc08ef4d2f38fce8f9ad5583e2e7ef92a039d51a63fa5345253831f06d1ff08c8f7e0be37ce589041d69b50a7555335f1efec0ac603a746aa58abe95e64db81ccd59faeda747c2a7a95d7da167ff7947096a7a7a77e8667c6f31ffd3184039b2202bd7fb1cfc2fa1e08ae356cc31d58243e5c18d9596732720beb8741e1d7a44f3ebe7fdbb1fdce87072b8ee595973fa8d3adf2ba7322ee28d6b776c6eab7eed63b6a9f1c3d3592f1f8d6bcb219f66b4dc3725ffe5ee9bec245b4532b3e2eae6255e6a2b2e53bdbcb0446273bdc3679c7fe3b77dfda9ba45c6fa76cc7f67184e0a421c28ac46d358f3c7e28be9273e1aa41e65f27b7976c5c3eb5f49540d768ffc6c4f5fcc723ce55ce355ef3a976f99b6bc54c73c995f998e576f3fcb53366273b1d3c9f36edd5aaa68e928886b8eb8b84d3aeb890c97541e43d9e5ef12e61230eb0aca14b214b97fa8ebc5219b170460d26f0504ba2c9b3f57ecd8597161d2d28dd3e88aedd70b333e2307dfc91909074e755da0fee2fd66640174efbeda770d9d9ef8751f68f3eb82ee0ce8f474b8a73284fcf143e5a5afa6dc3f4eb8f1f670b87bae81c0badda3b2e9ad994aa7769ff6ae8465276f5f199651f5b37261754a6675e367e1570b84c8009bd6bfd29f7c34549cc5f9bd7547a4d5e33f171eb9353e7df3bdee796ed131b786b4123a696573c7576a725b188ba377fb5e2b63ebe6531dae6bbf9260fcfbf5a79f74cd470bf5c2aff32ff41a9def53feea738b8368932cc2f9fc5e4d6be3f7ed1b0e891c3c180b2ca9ba7d39fa7ef5e5ebcf8d86afd9acd93aa1f2d5f33e99f7ffee1702e7f5bb3e9e5dde284f2e029ccb93b22763f644c63047f9a9521fe5bebbb18db4595168dc7a4c61bcfeeaef434b338fee64d64d31d72eaae4b1ef4a6abc4ec45dc6f491bbf3fc50b1ce4f86a9bae9159cbca71cfeb5c0bde5df88561633bf53c6bea36ddb833acf6eb6d074c177a891b3f511227389489efd78c12d376bc9d6119177b6b229b73283962dbeeb5e6349fc381aed545cf43469fb9966ef0f19fe29d4b161468638d303a338dc20ceee4c56f5a917c7461a1f0c9384cc5ea2d65afc708525611b166936640d233954bdfe9579dc84a6e19826bd1d970e87e454df60f4feb2dabcca6cc1fdccc8eba4edd5bee31477775ea5ee3e7db63ef953499eba7b6c6603c984e85dee997ac996bf3febec8c9d939e245c1455bd3741c8e2701246e86e5b4652cbe69bef370c6479b098ec730374f956a5f2972b32a9cd012404c6eaad2e5355713ab251eda17fedee435fb278e76083dab6c41dae336efba3297f119afb5f04df75324bfcd8c1c36a581ba6ecffcef9bf36aeadfff14fdd3383b8fc267fbe229751f82064f683d58d45e34fb805636655fd0d606fab4a26d1fdf2c8dbc7e21b0b62e24e1a1276d0886b8e775ee98391d96cc48f76f0c6a77e5949c194f4cb735a8bd597d75c3de0dc326dad43942b693ce26b5a5e02b3a6b97effceb64fcb97f9ef955bc3eb19c91dfbc80be9ff8a77f96e8fb9d17a670cf2d7b1391bfc326327384e3aff6623cf4baf9f729d1df489ef1333eacf8d1efe548dcf8db7332178c71a91471d975f82668e1b1d3ed6b4345a93e6169a71dae0494704b58a7d3b21257dea0dcc938e1fa5c7b5d54ab696ad510fffba7176baddf647a7194b303e3d7ef5d6e34749a17d20d2d76c6d7985cdd157945f4f387cd4f979b51e798acdb4e9c4b8a8cf334675d7b616ede5a44733023dd3fb47a9bcfaa8c7d11836fbc28b43e78da88d9a0eb514fe918446af0cbdb129ad87c84fce6cf16bd190fffcabbd7b4a6edd3b5e8db84573496148c327afbdbf2bf29cb5a7c0b163a09f3cf9e213e5f65d2782a338f421227e4bb9c5fd71efffcf6edb4ed4b961c3999b6f188f7e1957f4ea285b519963dd1d25d1cf0ed8b896762871b6e8b0dbde5cef19e5a9c5f6c6a107a6f0fe64858a4b1fb91dceac7255efa76b1a1e5e523fc7fb04c68b96ee2bab0dce3ea910ffcdf77eddff51d64bdc4dbd6adf3eddf0bfc7e7a7f9326243e340dbaaf352ff8c88525da4ddf37d6ba3fbed7d45271dafa90fd419170cdbbe6c6d6f8c5b43fb4f79dd677678aaa3d6939baf9ebcbdfb3bdfc3db61d7fdac608bdf8cd5eb7d3b6d6d53e81377f154dacb2c9bdf457f5a46192a2ac0be3aeece67e3a629877d22e6ba96518735f82e5d3ff3530cfeea92e68312a3c746db4e9ba1cc274cbd44f9231b9c7dbfcd82199be718d251cada6e25d0e39cd1d4b2c716ee686d6e59425b6cb8e3d7fe9d884cdbc96b7cfc6f8e5a4a74fd86fd7d61506a7bb65495396e6b7c5bcf9fe78f63a27675a7eda82b4d34fc666d6ba0c7be39f74c8ea4ea8f6885bed82cc35956f1eb94f128d399a3b61e4a51112af645141a8c1e21747fcb476583229d8e047c117f3251bbe2b88a75c7afbd3875b17bc73ab36cfb478bac7a5d3bfe3b5e86150e8311d5245e3e4db527c9d87389e13982b99fbd3fa5fe6ed0e2dc83f3e92e4da91dcb22e9956373cb3e08fcef69bb3f18c6cc2e8ca777f4c8aeb9c251c4e3b2718b9ecf5e524af962b83fff6e5fc33eefd94a25989c9ba35b2ad928f871fad68ceb7497047e3d5beb5dbf500907d357a07d0b5e913b0a0183c478a7c9125fb45c5e85238108345c5e8ea52785cc10aac18e2b9e2e09db0840341521c962386d8ae38d4fe188795c68a20579c6c074c807f136440846e244a9890152bfb9fc58da652b8fc70ac44cc74c5a1379e382a85201bc7e8d2395c09962bc14a391016b613cb160bf9d8703124c1cb50bbd02804d85e5948182f3be8a50080520dbbb29fc51703bbb9fe8caa28d63e524ba47f9f4fc5b2b93c082f633f9b350d4c0200fe6af416b7879dc78815464935117238a98f4e600a055206570089d17ec6c7b32036570061713d27e0121230140e91eaeeef4777f3f1f35848217088544c7c3c246025c0af4ba6ea3c7845040010fbb46e7a3fac630b8552e5a6758d7eb6cbd3df9faec028fa25176fd5af1efb6394ece2506e54d7a8cca8ae57c644aab7871b4d81619df15b6e11e01ecf4019d6f5bfdce26046f377a707077860bb5609cae7ffe02bbc7b472ee541542fa1a798c187b0f36110d99e5c76143e233ebea7ce11ee7d5e25ba1789aed700dc682c93c790485c1175d31b0455535d1b7d780591c7e84e706f802f9947cc56b0c05cbd9669d60900e81ca0ab5113558ffa192429ac77b9da961187f0fefc5975bbbf3fc48a6a5aae7665c4b6aef728034baca866e3e3b902262f8ad5536ef0300e8b4f48c07c19c3f3195c015dc4933b8c43c4109e22b35bebfd731d3f00809fa66a825e76cbc8352806e77e52c0ff107be7c5d7cdc78fd893963adf97cc9100809103cf4d52cc4deae10e9b15db8ce6967d82864a51dc639572c3d05c4369e817c3e5278f51361931575902e4b1f415606900330c01a3c174adeee92aa62a8ae420d954c4bc41838d8628577a7f76faa51b2c27504ff7ad1c720a0a325005646fdd371a19299bb6ef4106203ff1a852643574dff2344855b30d8a266e10d048912dcf80541c5ba118e60c061a68a5e5f19182607314feb021a07f2ae6beb23b1e95dd2b4aa1e5f4c5ca0127a300c76b817ee88bd1a848d9af1d2a0222d5a84af4c5f21c48d5af198aa35905075a4eac7e88e76a03f514c4ea86385b1bf443418c46450a7bd1217ea31a558982589e03a9eb4587983d14f44330ac7e886b95e2ca698495039aa20027ea00f535c2ca417128d048a5a04a34c26860a476179dbaab6a012bd208cb7320b5ba680eea30a0a12658fd0095a8c181d200a38191925cb4f1c37581861a60790ea40617cd91a61e8702a9affa01faa006074adb8b0646ca6d6d51c6d33140336daf3c05525e8ba6f8593d8ade2adebec23315159ed9c341bf55bb727720848216fdb092a32eb622d5ae3c0d52288ba6993802682ece553f5239ead1a034b8686ca4b4958072a1435d6c051a5c7916a41615cd72540f682c9a55ff561b3612f443e58a46456af2a6a16c2f1b09faaf729587472a49d1f0cea340ff55acf2f0488da8250afebc3af072e2547974a4e613fdb44ed3071aa94ee519905a4c6b14c34d3519e494a47da5770a7aa93000fd1278ca2323759468e4b1a341bf049cbd6c46e823d1c8d92a90e55599f2c848f5a1050a799221e8afda527df06cd5e0f2624af59f2a4d8c807a5a4975579308a5808ab4926854a44a11bdfbbca01a558156b22fabcd50562f1c03faa57c947be64034c4d0d761813ab8bd958ff204c8f612ba3872a780fe76d9d4df21949803f5fb55685064f7081d129da940937e555f565ba2ac4e5183a0774b0a8d8e6c0039a1cc6f521f5d594baad7db234463673a8a2cd1027c5587a9d7a306a25383661a6b09beaa6d24cf84ec57a0998ef58349d13b75f50bc1d00a68d00d41a3231b14683f22d547572b37c88e049ae9f77e30a9931b640f01cdc4b4065fd5efe82b37b6a8dc4cb0019a7628d014c88e8133ca99d5fda450d4a1906743f608d06c9d9ab09114b329eb3b747d0c00981d6d0b547721be98aea80ff105ec843230b5b0f45158ff2ac0520b66180ac6d30e28ea4a289fae859a9ed23dbdd754657d882f532fc8a622e6690f958dd0000d641903f09b9decd7ff030000fffff2af776694460000"); err != nil { panic(err) } }