Projects STRLCPY scan4all Commits 8f8c4124
🤬
Revision indexing in progress... (symbol navigation in revisions will be accurate after indexed)
Showing first 20 files as there are too many
  • ■ ■ ■ ■ ■ ■
    README_CN.md
    skipped 242 lines
    243 243  | --- | --- | --- | --- | --- |
    244 244  |<img src=https://github.com/hktalent/myhktools/blob/master/md/wc.png>|<img width=166 src=https://github.com/hktalent/myhktools/blob/master/md/zfb.png>|[paypal](https://www.paypal.me/pwned2019) **[email protected]**|<img width=166 src=https://github.com/hktalent/myhktools/blob/master/md/BTC.png>|<img width=166 src=https://github.com/hktalent/myhktools/blob/master/md/BCH.jpg>|
    245 245   
     246 +<!--
     247 +使用最新的次要或补丁版本(并添加-t以升级测试依赖项)
     248 +go get -t -v -u ./...
     249 +-->
  • ■ ■ ■ ■ ■ ■
    fixMod.sh
     1 +go get "github.com/projectdiscovery/[email protected]"
     2 +go get github.com/projectdiscovery/[email protected]
     3 +go get "github.com/projectdiscovery/[email protected]"
     4 +go get "github.com/projectdiscovery/[email protected]"
     5 + 
     6 +git checkout vendor/github.com/projectdiscovery/nuclei/v2
  • ■ ■ ■ ■ ■ ■
    go.mod
    skipped 8 lines
    9 9   github.com/projectdiscovery/blackrock v0.0.0-20220628111055-35616c71b2dc
    10 10   github.com/projectdiscovery/cdncheck v0.0.4-0.20220322144854-b2d8ce308abb
    11 11   github.com/projectdiscovery/clistats v0.0.8
    12  - github.com/projectdiscovery/dnsx v1.0.9
     12 + github.com/projectdiscovery/dnsx v1.1.0
    13 13   github.com/projectdiscovery/fdmax v0.0.3
    14  - github.com/projectdiscovery/fileutil v0.0.0-20220705195237-01becc2a8963
     14 + github.com/projectdiscovery/fileutil v0.0.0-20220914162323-93b17254e41b
    15 15   github.com/projectdiscovery/goflags v0.0.8-0.20220610073650-5d31a8c159e3
    16 16   github.com/projectdiscovery/gologger v1.1.4
    17 17   github.com/projectdiscovery/ipranger v0.0.3-0.20210831161617-ac80efae0961
    18 18   github.com/projectdiscovery/mapcidr v1.0.0
    19  - github.com/projectdiscovery/networkpolicy v0.0.1
     19 + github.com/projectdiscovery/networkpolicy v0.0.2-0.20220525172507-b844eafc878d
    20 20   github.com/remeh/sizedwaitgroup v1.0.0
    21 21   go.uber.org/ratelimit v0.2.0
    22  - golang.org/x/net v0.0.0-20220826154423-83b083e8dc8b
    23  - golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab
     22 + golang.org/x/net v0.0.0-20220909164309-bea034e7d591
     23 + golang.org/x/sys v0.0.0-20220915200043-7b5979e65e41
    24 24  )
    25 25   
    26 26  require (
    skipped 15 lines
    42 42   github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
    43 43   github.com/modern-go/reflect2 v1.0.2 // indirect
    44 44   github.com/pmezard/go-difflib v1.0.0 // indirect
    45  - github.com/projectdiscovery/hmap v0.0.2-0.20210917080408-0fd7bd286bfa
     45 + github.com/projectdiscovery/hmap v0.0.2
    46 46   github.com/projectdiscovery/retryabledns v1.0.13 // indirect
    47 47   github.com/projectdiscovery/stringsutil v0.0.0-20220612082425-0037ce9f89f3
    48 48   github.com/syndtr/goleveldb v1.0.0 // indirect
    skipped 11 lines
    60 60   github.com/bluele/gcache v0.0.2
    61 61   github.com/corpix/uarand v0.2.0
    62 62   github.com/hbakhtiyor/strsim v0.0.0-20190107154042-4d2bbb273edf
    63  - github.com/microcosm-cc/bluemonday v1.0.19
     63 + github.com/microcosm-cc/bluemonday v1.0.20
    64 64   github.com/projectdiscovery/cryptoutil v1.0.0
    65 65   github.com/projectdiscovery/fastdialer v0.0.16-0.20220609092737-7e3c7dcecf16
    66 66   github.com/projectdiscovery/goconfig v0.0.0-20210804090219-f893ccd0c69c
    67  - github.com/projectdiscovery/httputil v0.0.0-20210906072657-f3a099cb20bc
     67 + github.com/projectdiscovery/httputil v0.0.0-20210913064028-815c8db933ff
    68 68   github.com/projectdiscovery/rawhttp v0.1.1
    69 69   github.com/projectdiscovery/sliceutil v0.0.0-20220625085859-c3a4ecb669f4
    70  - github.com/projectdiscovery/urlutil v0.0.0-20210805190935-3d83726391c1
    71  - github.com/projectdiscovery/wappalyzergo v0.0.57
     70 + github.com/projectdiscovery/urlutil v0.0.0-20220606114420-c8511bedff3f
     71 + github.com/projectdiscovery/wappalyzergo v0.0.59
    72 72   github.com/rs/xid v1.4.0
    73 73   go.etcd.io/bbolt v1.3.6 // indirect
    74 74  )
    skipped 8 lines
    83 83   github.com/ammario/ipisp/v2 v2.0.0
    84 84   github.com/antchfx/htmlquery v1.2.5
    85 85   github.com/antchfx/xmlquery v1.3.12
    86  - github.com/antlabs/strsim v0.0.2
     86 + github.com/antlabs/strsim v0.0.3
    87 87   github.com/apex/log v1.9.0
    88 88   github.com/blang/semver v3.5.1+incompatible
    89 89   github.com/boy-hack/ksubdomain v1.9.5
    90  - github.com/chromedp/cdproto v0.0.0-20220629234738-4cfc9cdeeb92
    91  - github.com/chromedp/chromedp v0.8.2
     90 + github.com/chromedp/cdproto v0.0.0-20220914223734-4ab9dc957c3e
     91 + github.com/chromedp/chromedp v0.8.5
    92 92   github.com/denisenkom/go-mssqldb v0.12.2
    93 93   github.com/dgraph-io/badger v1.6.2
    94  - github.com/dlclark/regexp2 v1.4.0
    95  - github.com/go-playground/validator/v10 v10.11.0
     94 + github.com/dlclark/regexp2 v1.7.0
     95 + github.com/go-playground/validator/v10 v10.11.1
    96 96   github.com/go-routeros/routeros v0.0.0-20210123142807-2a44d57c6730
    97 97   github.com/go-sql-driver/mysql v1.6.0
    98  - github.com/google/cel-go v0.11.4
     98 + github.com/google/cel-go v0.12.5
    99 99   github.com/google/go-github v17.0.0+incompatible
    100 100   github.com/gorilla/websocket v1.5.0
    101 101   github.com/gosnmp/gosnmp v1.35.0
    102 102   github.com/huin/asn1ber v0.0.0-20120622192748-af09f62e6358
    103 103   github.com/icodeface/tls v0.0.0-20190904083142-17aec93c60e5
    104  - github.com/jlaffaye/ftp v0.0.0-20190624084859-c1312a7102bf
     104 + github.com/jlaffaye/ftp v0.1.0
    105 105   github.com/karlseguin/ccache v2.0.3+incompatible
    106 106   github.com/lair-framework/go-nmap v0.0.0-20191202052157-3507e0b03523
    107  - github.com/lcvvvv/gonmap v1.1.8
    108  - github.com/lib/pq v1.10.6
     107 + github.com/lcvvvv/gonmap v1.2.1
     108 + github.com/lib/pq v1.10.7
    109 109   github.com/lunixbochs/struc v0.0.0-20200707160740-784aaebc1d40
    110 110   github.com/masterzen/winrm v0.0.0-20220513085036-69f69afcd9e9
    111 111   github.com/mfonda/simhash v0.0.0-20151007195837-79f94a1100d6
    112 112   github.com/mitchellh/go-homedir v1.1.0
    113 113   github.com/olekukonko/tablewriter v0.0.5
    114 114   github.com/olivere/elastic v6.2.37+incompatible
    115  - github.com/projectdiscovery/folderutil v0.0.0-20220215113126-add60a1e8e08
     115 + github.com/projectdiscovery/folderutil v0.0.0-20220523100846-d6161a49c221
    116 116   github.com/projectdiscovery/iputil v0.0.0-20220620153941-036d511e4097
    117 117   github.com/projectdiscovery/nuclei-updatecheck-api v0.0.0-20220726130814-981d44a34f84
    118 118   github.com/projectdiscovery/nuclei/v2 v2.7.7
    119 119   github.com/projectdiscovery/subfinder/v2 v2.5.2
    120 120   github.com/satori/go.uuid v1.2.0
    121  - github.com/shirou/gopsutil/v3 v3.22.7
    122  - github.com/sijms/go-ora/v2 v2.4.25
    123  - github.com/simonnilsson/ask v0.2.0
    124  - github.com/sirupsen/logrus v1.7.0
    125  - github.com/spf13/viper v1.12.0
     121 + github.com/shirou/gopsutil/v3 v3.22.8
     122 + github.com/sijms/go-ora/v2 v2.5.3
     123 + github.com/simonnilsson/ask v0.3.0
     124 + github.com/spf13/viper v1.13.0
    126 125   github.com/stacktitan/smb v0.0.0-20190531122847-da9a425dceb8
    127 126   github.com/tj/go-update v2.2.5-0.20200519121640-62b4b798fd68+incompatible
    128 127   github.com/txthinking/socks5 v0.0.0-20220615051428-39268faee3e6
    129  - github.com/urfave/cli/v2 v2.10.3
    130  - go.mongodb.org/mongo-driver v1.9.1
    131  - golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa
    132  - golang.org/x/oauth2 v0.0.0-20220722155238-128564f6959c
     128 + github.com/urfave/cli/v2 v2.16.3
     129 + go.mongodb.org/mongo-driver v1.10.2
     130 + golang.org/x/crypto v0.0.0-20220829220503-c86fa9a7ed90
     131 + golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1
    133 132   golang.org/x/time v0.0.0-20220722155302-e5dcc9cfc0b9
    134  - google.golang.org/genproto v0.0.0-20220602131408-e326c6e8e9c8
     133 + google.golang.org/genproto v0.0.0-20220916172020-2692e8806bfa
    135 134   google.golang.org/protobuf v1.28.1
    136 135   gopkg.in/irc.v3 v3.1.4
    137 136   gorm.io/driver/sqlite v1.3.6
    138  - gorm.io/gorm v1.23.8
     137 + gorm.io/gorm v1.23.9
    139 138  )
    140 139   
    141 140  require (
    142 141   git.mills.io/prologic/smtpd v0.0.0-20210710122116-a525b76c287a // indirect
    143 142   github.com/AndreasBriese/bbloom v0.0.0-20190825152654-46b345b51c96 // indirect
    144  - github.com/Azure/go-ntlmssp v0.0.0-20211209120228-48547f28849e // indirect
     143 + github.com/Azure/go-ntlmssp v0.0.0-20220621081337-cb9428e4ac1e // indirect
    145 144   github.com/ChrisTrenkamp/goxpath v0.0.0-20210404020558-97928f7e12b6 // indirect
     145 + github.com/DataDog/zstd v1.5.2 // indirect
    146 146   github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible // indirect
    147 147   github.com/Mzack9999/go-http-digest-auth-client v0.6.1-0.20220414142836-eb8883508809 // indirect
    148 148   github.com/Mzack9999/ldapserver v1.0.2-0.20211229000134-b44a0d6ad0dd // indirect
    149  - github.com/alecthomas/jsonschema v0.0.0-20211022214203-8b29eab41725 // indirect
     149 + github.com/alecthomas/jsonschema v0.0.0-20220216202328-9eeeec9d044b // indirect
    150 150   github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751 // indirect
    151 151   github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137 // indirect
    152 152   github.com/andybalholm/cascadia v1.3.1 // indirect
    153 153   github.com/andygrunwald/go-jira v1.16.0 // indirect
    154 154   github.com/antchfx/xpath v1.2.1 // indirect
    155  - github.com/antlr/antlr4/runtime/Go/antlr v0.0.0-20220418222510-f25a4f6275ed // indirect
    156  - github.com/aws/aws-sdk-go v1.44.83 // indirect
     155 + github.com/antlr/antlr4/runtime/Go/antlr v1.4.10 // indirect
     156 + github.com/aws/aws-sdk-go v1.44.100 // indirect
    157 157   github.com/aymerick/douceur v0.2.0 // indirect
    158  - github.com/bits-and-blooms/bitset v1.2.0 // indirect
    159  - github.com/bits-and-blooms/bloom/v3 v3.0.1 // indirect
     158 + github.com/bits-and-blooms/bitset v1.3.3 // indirect
     159 + github.com/bits-and-blooms/bloom/v3 v3.3.1 // indirect
    160 160   github.com/c4milo/unpackit v0.1.0 // indirect
    161  - github.com/caddyserver/certmagic v0.16.2 // indirect
     161 + github.com/caddyserver/certmagic v0.17.1 // indirect
    162 162   github.com/cespare/xxhash/v2 v2.1.2 // indirect
    163 163   github.com/chromedp/sysutil v1.0.0 // indirect
    164  - github.com/cilium/ebpf v0.7.0 // indirect
    165  - github.com/cosiner/argv v0.1.0 // indirect
     164 + github.com/cockroachdb/errors v1.8.1 // indirect
     165 + github.com/cockroachdb/logtags v0.0.0-20190617123548-eb05cc24525f // indirect
     166 + github.com/cockroachdb/pebble v0.0.0-20210728210723-48179f1d4dae // indirect
     167 + github.com/cockroachdb/redact v1.0.8 // indirect
     168 + github.com/cockroachdb/sentry-go v0.6.1-cockroachdb.2 // indirect
    166 169   github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect
    167  - github.com/deckarep/golang-set v1.7.1 // indirect
    168  - github.com/derekparker/trie v0.0.0-20200317170641-1fdf38b7b0e9 // indirect
     170 + github.com/deckarep/golang-set v1.8.0 // indirect
    169 171   github.com/dgraph-io/ristretto v0.1.0 // indirect
    170 172   github.com/dimchansky/utfbom v1.1.1 // indirect
    171  - github.com/docker/go-units v0.4.0 // indirect
     173 + github.com/docker/go-units v0.5.0 // indirect
    172 174   github.com/dsnet/compress v0.0.1 // indirect
    173 175   github.com/dustin/go-humanize v1.0.0 // indirect
    174 176   github.com/fatih/structs v1.1.0 // indirect
    175 177   github.com/fortytw2/leaktest v1.3.0 // indirect
    176 178   github.com/fsnotify/fsnotify v1.5.4 // indirect
    177  - github.com/go-delve/delve v1.9.1 // indirect
    178  - github.com/go-delve/liner v1.2.3-0.20220127212407-d32d89dd2a5d // indirect
    179 179   github.com/go-ole/go-ole v1.2.6 // indirect
    180 180   github.com/go-playground/locales v0.14.0 // indirect
    181 181   github.com/go-playground/universal-translator v0.18.0 // indirect
    182  - github.com/go-rod/rod v0.109.0 // indirect
    183  - github.com/go-stack/stack v1.8.0 // indirect
     182 + github.com/go-rod/rod v0.109.3 // indirect
    184 183   github.com/goburrow/cache v0.1.4 // indirect
    185 184   github.com/gobwas/httphead v0.1.0 // indirect
    186 185   github.com/gobwas/pool v0.2.1 // indirect
    187 186   github.com/gobwas/ws v1.1.0 // indirect
    188  - github.com/gofrs/uuid v4.2.0+incompatible // indirect
    189  - github.com/gogf/gf v1.16.6 // indirect
     187 + github.com/gofrs/uuid v4.3.0+incompatible // indirect
     188 + github.com/gogf/gf v1.16.9 // indirect
     189 + github.com/gogo/protobuf v1.3.2 // indirect
    190 190   github.com/golang-jwt/jwt/v4 v4.4.2 // indirect
    191  - github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe // indirect
     191 + github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9 // indirect
    192 192   github.com/golang-sql/sqlexp v0.1.0 // indirect
    193 193   github.com/golang/glog v1.0.0 // indirect
    194 194   github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
    195 195   github.com/golang/protobuf v1.5.2 // indirect
    196  - github.com/google/go-dap v0.6.0 // indirect
    197 196   github.com/google/go-querystring v1.1.0 // indirect
    198 197   github.com/google/uuid v1.3.0 // indirect
    199 198   github.com/gorilla/css v1.0.0 // indirect
    200 199   github.com/gosuri/uilive v0.0.4 // indirect
    201 200   github.com/gosuri/uiprogress v0.0.1 // indirect
    202 201   github.com/h2non/filetype v1.1.3 // indirect
    203  - github.com/hako/durafmt v0.0.0-20210316092057-3a2c319c1acd // indirect
    204  - github.com/hashicorp/errwrap v1.0.0 // indirect
     202 + github.com/hako/durafmt v0.0.0-20210608085754-5c1018a4e16b // indirect
     203 + github.com/hashicorp/errwrap v1.1.0 // indirect
    205 204   github.com/hashicorp/go-cleanhttp v0.5.2 // indirect
    206 205   github.com/hashicorp/go-multierror v1.1.1 // indirect
    207 206   github.com/hashicorp/go-retryablehttp v0.7.1 // indirect
    208  - github.com/hashicorp/go-uuid v1.0.2 // indirect
     207 + github.com/hashicorp/go-uuid v1.0.3 // indirect
    209 208   github.com/hashicorp/go-version v1.6.0 // indirect
    210 209   github.com/hashicorp/golang-lru v0.5.4 // indirect
    211 210   github.com/hashicorp/hcl v1.0.0 // indirect
    212  - github.com/iancoleman/orderedmap v0.0.0-20190318233801-ac98e3ecb4b0 // indirect
    213  - github.com/inconshreveable/mousetrap v1.0.0 // indirect
    214  - github.com/itchyny/gojq v0.12.8 // indirect
    215  - github.com/itchyny/timefmt-go v0.1.3 // indirect
     211 + github.com/iancoleman/orderedmap v0.2.0 // indirect
     212 + github.com/itchyny/gojq v0.12.9 // indirect
     213 + github.com/itchyny/timefmt-go v0.1.4 // indirect
    216 214   github.com/jcmturner/aescts/v2 v2.0.0 // indirect
    217 215   github.com/jcmturner/dnsutils/v2 v2.0.0 // indirect
    218  - github.com/jcmturner/gofork v1.0.0 // indirect
     216 + github.com/jcmturner/gofork v1.7.6 // indirect
    219 217   github.com/jcmturner/goidentity/v6 v6.0.1 // indirect
    220  - github.com/jcmturner/gokrb5/v8 v8.4.2 // indirect
     218 + github.com/jcmturner/gokrb5/v8 v8.4.3 // indirect
    221 219   github.com/jcmturner/rpc/v2 v2.0.3 // indirect
    222 220   github.com/jinzhu/inflection v1.0.0 // indirect
    223 221   github.com/jinzhu/now v1.1.5 // indirect
    224 222   github.com/jmespath/go-jmespath v0.4.0 // indirect
    225 223   github.com/josharian/intern v1.0.0 // indirect
    226  - github.com/klauspost/compress v1.15.9 // indirect
    227  - github.com/klauspost/cpuid/v2 v2.1.0 // indirect
     224 + github.com/klauspost/compress v1.15.10 // indirect
     225 + github.com/klauspost/cpuid/v2 v2.1.1 // indirect
    228 226   github.com/klauspost/pgzip v1.2.5 // indirect
     227 + github.com/kr/pretty v0.3.0 // indirect
     228 + github.com/kr/text v0.2.0 // indirect
    229 229   github.com/leodido/go-urn v1.2.1 // indirect
    230 230   github.com/libdns/libdns v0.2.1 // indirect
    231 231   github.com/lor00x/goldap v0.0.0-20180618054307-a546dffdd1a3 // indirect
    232  - github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 // indirect
     232 + github.com/lufia/plan9stats v0.0.0-20220913051719-115f729f3c8c // indirect
    233 233   github.com/magiconair/properties v1.8.6 // indirect
    234 234   github.com/mailru/easyjson v0.7.7 // indirect
    235 235   github.com/masterzen/simplexml v0.0.0-20190410153822-31eea3082786 // indirect
    236  - github.com/mattn/go-colorable v0.1.12 // indirect
    237  - github.com/mattn/go-isatty v0.0.14 // indirect
     236 + github.com/mattn/go-colorable v0.1.13 // indirect
     237 + github.com/mattn/go-isatty v0.0.16 // indirect
    238 238   github.com/mattn/go-runewidth v0.0.13 // indirect
    239  - github.com/mattn/go-sqlite3 v1.14.12 // indirect
     239 + github.com/mattn/go-sqlite3 v1.14.15 // indirect
    240 240   github.com/mholt/acmez v1.0.4 // indirect
    241 241   github.com/mholt/archiver v3.1.1+incompatible // indirect
    242 242   github.com/mitchellh/mapstructure v1.5.0 // indirect
    243  - github.com/nwaples/rardecode v1.1.2 // indirect
     243 + github.com/montanaflynn/stats v0.6.6 // indirect
     244 + github.com/nwaples/rardecode v1.1.3 // indirect
    244 245   github.com/openrdap/rdap v0.9.1-0.20191017185644-af93e7ef17b7 // indirect
    245 246   github.com/owenrumney/go-sarif/v2 v2.1.2 // indirect
    246  - github.com/panjf2000/ants/v2 v2.2.2 // indirect
     247 + github.com/panjf2000/ants/v2 v2.5.0 // indirect
    247 248   github.com/patrickmn/go-cache v2.1.0+incompatible // indirect
    248 249   github.com/pelletier/go-toml v1.9.5 // indirect
    249  - github.com/pelletier/go-toml/v2 v2.0.1 // indirect
     250 + github.com/pelletier/go-toml/v2 v2.0.5 // indirect
    250 251   github.com/pierrec/lz4 v2.6.1+incompatible // indirect
    251  - github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect
    252  - github.com/projectdiscovery/chaos-client v0.2.0 // indirect
     252 + github.com/power-devops/perfstat v0.0.0-20220216144756-c35f1ee13d7c // indirect
     253 + github.com/projectdiscovery/chaos-client v0.3.0 // indirect
    253 254   github.com/projectdiscovery/filekv v0.0.0-20210915124239-3467ef45dd08 // indirect
    254 255   github.com/projectdiscovery/interactsh v1.0.6 // indirect
    255 256   github.com/projectdiscovery/reflectutil v0.0.0-20210804085554-4d90952bf92f // indirect
    256 257   github.com/projectdiscovery/yamldoc-go v1.0.3-0.20211126104922-00d2c6bb43b6 // indirect
    257  - github.com/rivo/uniseg v0.2.0 // indirect
    258  - github.com/rogpeppe/go-internal v1.8.1 // indirect
     258 + github.com/rivo/uniseg v0.4.2 // indirect
     259 + github.com/rogpeppe/go-internal v1.9.0 // indirect
    259 260   github.com/russross/blackfriday/v2 v2.1.0 // indirect
    260 261   github.com/saintfish/chardet v0.0.0-20120816061221-3af4cd4741ca // indirect
    261 262   github.com/segmentio/ksuid v1.0.4 // indirect
    262  - github.com/spf13/afero v1.8.2 // indirect
     263 + github.com/sirupsen/logrus v1.9.0 // indirect
     264 + github.com/spf13/afero v1.9.2 // indirect
    263 265   github.com/spf13/cast v1.5.0 // indirect
    264  - github.com/spf13/cobra v1.1.3 // indirect
    265 266   github.com/spf13/jwalterweatherman v1.1.0 // indirect
    266 267   github.com/spf13/pflag v1.0.5 // indirect
    267 268   github.com/stoewer/go-strcase v1.2.0 // indirect
    268  - github.com/subosito/gotenv v1.3.0 // indirect
     269 + github.com/subosito/gotenv v1.4.1 // indirect
    269 270   github.com/tklauser/go-sysconf v0.3.10 // indirect
    270  - github.com/tklauser/numcpus v0.4.0 // indirect
     271 + github.com/tklauser/numcpus v0.5.0 // indirect
    271 272   github.com/tomnomnom/linkheader v0.0.0-20180905144013-02ca5825eb80 // indirect
    272 273   github.com/trivago/tgo v1.0.7 // indirect
    273  - github.com/txthinking/runnergroup v0.0.0-20210608031112-152c7c4432bf // indirect
     274 + github.com/txthinking/runnergroup v0.0.0-20220212043759-8da8edb7dae8 // indirect
    274 275   github.com/txthinking/x v0.0.0-20210326105829-476fab902fbe // indirect
    275 276   github.com/ulikunitz/xz v0.5.10 // indirect
    276 277   github.com/ulule/deepcopier v0.0.0-20200430083143-45decc6639b6 // indirect
    skipped 2 lines
    279 280   github.com/weppos/publicsuffix-go v0.20.0 // indirect
    280 281   github.com/xanzy/go-gitlab v0.73.1 // indirect
    281 282   github.com/xdg-go/pbkdf2 v1.0.0 // indirect
    282  - github.com/xdg-go/scram v1.0.2 // indirect
    283  - github.com/xdg-go/stringprep v1.0.2 // indirect
     283 + github.com/xdg-go/scram v1.1.1 // indirect
     284 + github.com/xdg-go/stringprep v1.0.3 // indirect
    284 285   github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8 // indirect
    285 286   github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 // indirect
    286  - github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d // indirect
     287 + github.com/youmark/pkcs8 v0.0.0-20201027041543-1326539a0a0a // indirect
    287 288   github.com/ysmood/goob v0.4.0 // indirect
    288  - github.com/ysmood/gson v0.7.1 // indirect
     289 + github.com/ysmood/gson v0.7.2 // indirect
    289 290   github.com/ysmood/leakless v0.8.0 // indirect
    290 291   github.com/yusufpapurcu/wmi v1.2.2 // indirect
    291 292   github.com/zmap/rc2 v0.0.0-20190804163417-abaa70531248 // indirect
    292 293   github.com/zmap/zcrypto v0.0.0-20220803033029-557f3e4940be // indirect
    293  - go.starlark.net v0.0.0-20220816155156-cfacd8902214 // indirect
    294 294   go.uber.org/multierr v1.8.0 // indirect
    295  - go.uber.org/zap v1.22.0 // indirect
     295 + go.uber.org/zap v1.23.0 // indirect
    296 296   goftp.io/server/v2 v2.0.0 // indirect
    297  - golang.org/x/arch v0.0.0-20190927153633-4e8777c89be4 // indirect
     297 + golang.org/x/exp v0.0.0-20220916125017-b168a2c6b86b // indirect
    298 298   golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 // indirect
    299  - golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4 // indirect
    300  - golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 // indirect
     299 + golang.org/x/sync v0.0.0-20220907140024-f12130a52804 // indirect
     300 + golang.org/x/term v0.0.0-20220722155259-a9ba230a4035 // indirect
    301 301   golang.org/x/tools v0.1.12 // indirect
    302 302   google.golang.org/appengine v1.6.7 // indirect
    303 303   gopkg.in/alecthomas/kingpin.v2 v2.2.6 // indirect
    304 304   gopkg.in/corvus-ch/zbase32.v1 v1.0.0 // indirect
    305  - gopkg.in/ini.v1 v1.66.4 // indirect
     305 + gopkg.in/ini.v1 v1.67.0 // indirect
    306 306   moul.io/http2curl v1.0.0 // indirect
    307 307  )
    308 308   
  • ■ ■ ■ ■ ■ ■
    go.sum
    skipped 24 lines
    25 25  cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ=
    26 26  cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE=
    27 27  cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk=
    28  -cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk=
    29 28  cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I=
    30 29  cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw=
    31 30  cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA=
    skipped 7 lines
    39 38  dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
    40 39  git.mills.io/prologic/smtpd v0.0.0-20210710122116-a525b76c287a h1:3i+FJ7IpSZHL+VAjtpQeZCRhrpP0odl5XfoLBY4fxJ8=
    41 40  git.mills.io/prologic/smtpd v0.0.0-20210710122116-a525b76c287a/go.mod h1:C7hXLmFmPYPjIDGfQl1clsmQ5TMEQfmzWTrJk475bUs=
     41 +github.com/AndreasBriese/bbloom v0.0.0-20190306092124-e2d15f34fcf9/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8=
    42 42  github.com/AndreasBriese/bbloom v0.0.0-20190825152654-46b345b51c96 h1:cTp8I5+VIoKjsnZuH8vjyaysT/ses3EvZeaV/1UkF2M=
    43 43  github.com/AndreasBriese/bbloom v0.0.0-20190825152654-46b345b51c96/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8=
    44 44  github.com/Azure/azure-sdk-for-go/sdk/azcore v0.19.0/go.mod h1:h6H6c8enJmmocHUbLiiGY6sx7f9i+X3m1CHdd5c6Rdw=
    45 45  github.com/Azure/azure-sdk-for-go/sdk/azidentity v0.11.0/go.mod h1:HcM1YX14R7CJcghJGOYCgdezslRSVzqwLf/q+4Y2r/0=
    46 46  github.com/Azure/azure-sdk-for-go/sdk/internal v0.7.0/go.mod h1:yqy467j36fJxcRV2TzfVZ1pCb5vxm4BtZPUdYWe/Xo8=
    47  -github.com/Azure/go-ntlmssp v0.0.0-20211209120228-48547f28849e h1:ZU22z/2YRFLyf/P4ZwUYSdNCWsMEI0VeyrFoI2rAhJQ=
    48 47  github.com/Azure/go-ntlmssp v0.0.0-20211209120228-48547f28849e/go.mod h1:chxPXzSsl7ZWRAuOIE23GDNzjWuZquvFlgA8xmpunjU=
     48 +github.com/Azure/go-ntlmssp v0.0.0-20220621081337-cb9428e4ac1e h1:NeAW1fUYUEWhft7pkxDf6WoUvEZJ/uOKsvtpjLnn8MU=
     49 +github.com/Azure/go-ntlmssp v0.0.0-20220621081337-cb9428e4ac1e/go.mod h1:chxPXzSsl7ZWRAuOIE23GDNzjWuZquvFlgA8xmpunjU=
    49 50  github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
    50  -github.com/BurntSushi/toml v1.1.0 h1:ksErzDEI1khOiGPgpwuI7x2ebx/uXQNw7xJpn9Eq1+I=
    51 51  github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
    52 52  github.com/ChrisTrenkamp/goxpath v0.0.0-20210404020558-97928f7e12b6 h1:w0E0fgc1YafGEh5cROhlROMWXiNoZqApk2PDN0M1+Ns=
    53 53  github.com/ChrisTrenkamp/goxpath v0.0.0-20210404020558-97928f7e12b6/go.mod h1:nuWgzSkT5PnyOd+272uUmV0dnAnAn42Mk7PiQC5VzN4=
     54 +github.com/CloudyKit/fastprinter v0.0.0-20170127035650-74b38d55f37a/go.mod h1:EFZQ978U7x8IRnstaskI3IysnWY5Ao3QgZUKOXlsAdw=
     55 +github.com/CloudyKit/jet v2.1.3-0.20180809161101-62edd43e4f88+incompatible/go.mod h1:HPYO+50pSWkPoj9Q/eq0aRGByCL6ScRlUmiEX5Zgm+w=
    54 56  github.com/DataDog/gostackparse v0.5.0/go.mod h1:lTfqcJKqS9KnXQGnyQMCugq3u1FP6UZMfWR0aitKFMM=
     57 +github.com/DataDog/zstd v1.4.5/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo=
     58 +github.com/DataDog/zstd v1.5.2 h1:vUG4lAyuPCXO0TLbXvPv7EB7cNK1QV/luu55UHLrrn8=
     59 +github.com/DataDog/zstd v1.5.2/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw=
    55 60  github.com/Ice3man543/nvd v1.0.8/go.mod h1:0DxLJk6revOcJKiZxa2K+rNF/HO1zJO97lqQtXhXfSc=
     61 +github.com/Joker/hpp v1.0.0/go.mod h1:8x5n+M1Hp5hC0g8okX3sR3vFQwynaX/UgSOM9MeBKzY=
     62 +github.com/Joker/jade v1.0.1-0.20190614124447-d475f43051e7/go.mod h1:6E6s8o2AE4KhCrqr6GRJjdC/gNfTdxkIXvuGZZda2VM=
    56 63  github.com/Knetic/govaluate v3.0.0+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0=
    57 64  github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible h1:1G1pk05UrOh0NlF1oeaaix1x8XzrfjIDK47TY0Zehcw=
    58 65  github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0=
    skipped 14 lines
    73 80  github.com/RumbleDiscovery/jarm-go v0.0.6 h1:n3JEmOhPyfhmu1aeDEK/10Y2F+GMUYrtGFZmp4Yj0s4=
    74 81  github.com/RumbleDiscovery/jarm-go v0.0.6/go.mod h1:dXV7z5vBXQI0cNaHXwzGtq2PJ2LgM3XgcFiX32FU3bg=
    75 82  github.com/RumbleDiscovery/rumble-tools v0.0.0-20201105153123-f2adbb3244d2/go.mod h1:jD2+mU+E2SZUuAOHZvZj4xP4frlOo+N/YrXDvASFhkE=
     83 +github.com/Shopify/goreferrer v0.0.0-20181106222321-ec9c9a553398/go.mod h1:a1uqRtAwp2Xwc6WNPJEufxJ7fx3npB4UV/JOLmbu5I0=
    76 84  github.com/StackExchange/wmi v1.2.1/go.mod h1:rcmrprowKIVzvc+NUiLncP2uuArMWLCbu9SBzvHz7e8=
    77 85  github.com/Ullaakut/nmap v2.0.2+incompatible h1:edw45QpSQBQ2B/Hqfg86Bt5rrK79tp/fAcqIHyNSdQs=
    78 86  github.com/Ullaakut/nmap v2.0.2+incompatible/go.mod h1:fkC066hwfcoKwlI7DS2ARTggSVtBTZYCjVH1TzuTMaQ=
     87 +github.com/ajg/form v1.5.1/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY=
    79 88  github.com/akrylysov/pogreb v0.10.0/go.mod h1:pNs6QmpQ1UlTJKDezuRWmaqkgUE2TuU0YTWyqJZ7+lI=
    80 89  github.com/akrylysov/pogreb v0.10.1 h1:FqlR8VR7uCbJdfUob916tPM+idpKgeESDXOA1K0DK4w=
    81 90  github.com/akrylysov/pogreb v0.10.1/go.mod h1:pNs6QmpQ1UlTJKDezuRWmaqkgUE2TuU0YTWyqJZ7+lI=
    82 91  github.com/alecthomas/jsonschema v0.0.0-20210818095345-1014919a589c/go.mod h1:/n6+1/DWPltRLWL/VKyUxg6tzsl5kHUCcraimt4vr60=
    83  -github.com/alecthomas/jsonschema v0.0.0-20211022214203-8b29eab41725 h1:NjwIgLQlD46o79bheVG4SCdRnnOz4XtgUN1WABX5DLA=
    84 92  github.com/alecthomas/jsonschema v0.0.0-20211022214203-8b29eab41725/go.mod h1:/n6+1/DWPltRLWL/VKyUxg6tzsl5kHUCcraimt4vr60=
    85  -github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
     93 +github.com/alecthomas/jsonschema v0.0.0-20220216202328-9eeeec9d044b h1:doCpXjVwui6HUN+xgNsNS3SZ0/jUZ68Eb+mJRNOZfog=
     94 +github.com/alecthomas/jsonschema v0.0.0-20220216202328-9eeeec9d044b/go.mod h1:/n6+1/DWPltRLWL/VKyUxg6tzsl5kHUCcraimt4vr60=
    86 95  github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751 h1:JYp7IbQjafoB+tBA3gMyHYHrpOtNuDiK/uB5uXxq5wM=
    87 96  github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
    88  -github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
    89 97  github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
    90 98  github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137 h1:s6gZFSlWYmbqAuRjVTiNNhvNRfY2Wxp9nhfyel4rklc=
    91 99  github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137/go.mod h1:OMCwj8VM1Kc9e19TLln2VL61YJF0x1XFtfdL4JdbSyE=
    skipped 16 lines
    108 116  github.com/antchfx/xpath v1.1.6/go.mod h1:Yee4kTMuNiPYJ7nSNorELQMr1J33uOpXDMByNYhvtNk=
    109 117  github.com/antchfx/xpath v1.2.1 h1:qhp4EW6aCOVr5XIkT+l6LJ9ck/JsUH/yyauNgTQkBF8=
    110 118  github.com/antchfx/xpath v1.2.1/go.mod h1:i54GszH55fYfBmoZXapTHN8T8tkcHfRgLyVwwqzXNcs=
    111  -github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY=
    112  -github.com/antlabs/strsim v0.0.2 h1:R4qjokEegYTrw+fkcYj3/UndG9Cn136fH+fpw9TIz9k=
    113  -github.com/antlabs/strsim v0.0.2/go.mod h1:95XAAF2dJK9IiZMc0Ue6H9t477/i6fvYoMoeey8sEnc=
    114  -github.com/antlr/antlr4/runtime/Go/antlr v0.0.0-20220418222510-f25a4f6275ed h1:ue9pVfIcP+QMEjfgo/Ez4ZjNZfonGgR6NgjMaJMu1Cg=
    115  -github.com/antlr/antlr4/runtime/Go/antlr v0.0.0-20220418222510-f25a4f6275ed/go.mod h1:F7bn7fEU90QkQ3tnmaTx3LTKLEDqnwWODIYppRQ5hnY=
     119 +github.com/antlabs/strsim v0.0.3 h1:J9AHxnybJZHKBoxeup1VZNWt3ST8QD+ieDJsm/nEpRo=
     120 +github.com/antlabs/strsim v0.0.3/go.mod h1:bIcymn+2jtt01korFun0bs8PsYZeQa82aHoYMi7cm30=
     121 +github.com/antlr/antlr4/runtime/Go/antlr v1.4.10 h1:yL7+Jz0jTC6yykIK/Wh74gnTJnrGr5AyrNMXuA0gves=
     122 +github.com/antlr/antlr4/runtime/Go/antlr v1.4.10/go.mod h1:F7bn7fEU90QkQ3tnmaTx3LTKLEDqnwWODIYppRQ5hnY=
    116 123  github.com/apex/log v1.9.0 h1:FHtw/xuaM8AgmvDDTI9fiwoAL25Sq2cxojnZICUU8l0=
    117 124  github.com/apex/log v1.9.0/go.mod h1:m82fZlWIuiWzWP04XCTXmnX0xRkYYbCdYn8jbJeLBEA=
    118 125  github.com/apex/logs v1.0.0/go.mod h1:XzxuLZ5myVHDy9SAmYpamKKRNApGj54PfYLcFrXqDwo=
    119 126  github.com/aphistic/golf v0.0.0-20180712155816-02c07f170c5a/go.mod h1:3NqKYiepwy8kCu4PNA+aP7WUV72eXWJeP9/r3/K9aLE=
    120 127  github.com/aphistic/sweet v0.2.0/go.mod h1:fWDlIh/isSE9n6EPsRmC0det+whmX6dJid3stzu0Xys=
    121 128  github.com/apparentlymart/go-textseg/v13 v13.0.0/go.mod h1:ZK2fH7c4NqDTLtiYLvIkEghdlcqw7yxLeM89kiTRPUo=
    122  -github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o=
    123 129  github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8=
    124  -github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY=
    125  -github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
    126 130  github.com/asaskevich/govalidator v0.0.0-20210307081110-f21760c49a8d h1:Byv0BzEl3/e6D5CLfI0j/7hiIEtvGVFPCZ7Ei2oq8iQ=
    127 131  github.com/asaskevich/govalidator v0.0.0-20210307081110-f21760c49a8d/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw=
    128 132  github.com/aws/aws-sdk-go v1.20.6/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo=
    129 133  github.com/aws/aws-sdk-go v1.44.60/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo=
    130  -github.com/aws/aws-sdk-go v1.44.83 h1:7+Rtc2Eio6EKUNoZeMV/IVxzVrY5oBQcNPtCcgIHYJA=
    131  -github.com/aws/aws-sdk-go v1.44.83/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo=
     134 +github.com/aws/aws-sdk-go v1.44.100 h1:7I86bWNQB+HGDT5z/dJy61J7qgbgLoZ7O51C9eL6hrA=
     135 +github.com/aws/aws-sdk-go v1.44.100/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo=
    132 136  github.com/aybabtme/rgbterm v0.0.0-20170906152045-cc83f3b3ce59/go.mod h1:q/89r3U2H7sSsE2t6Kca0lfwTK8JdoNGS/yzM/4iH5I=
    133 137  github.com/aymerick/douceur v0.2.0 h1:Mv+mAeH1Q+n9Fr+oyamOlAkUNPWPlA8PPGR0QAaYuPk=
    134 138  github.com/aymerick/douceur v0.2.0/go.mod h1:wlT5vV2O3h55X9m7iVYN0TBM0NH/MmbLnd30/FjWUq4=
    135  -github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8=
     139 +github.com/aymerick/raymond v2.0.3-0.20180322193309-b565731e1464+incompatible/go.mod h1:osfaiScAUVup+UC9Nfq76eWqDhXlp+4UYaA8uhTBO6g=
    136 140  github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA=
    137  -github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
    138  -github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
    139  -github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=
    140  -github.com/bits-and-blooms/bitset v1.2.0 h1:Kn4yilvwNtMACtf1eYDlG8H77R07mZSPbMjLyS07ChA=
    141 141  github.com/bits-and-blooms/bitset v1.2.0/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA=
    142  -github.com/bits-and-blooms/bloom/v3 v3.0.1 h1:Inlf0YXbgehxVjMPmCGv86iMCKMGPPrPSHtBF5yRHwA=
     142 +github.com/bits-and-blooms/bitset v1.3.1/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA=
     143 +github.com/bits-and-blooms/bitset v1.3.3 h1:R1XWiopGiXf66xygsiLpzLo67xEYvMkHw3w+rCOSAwg=
     144 +github.com/bits-and-blooms/bitset v1.3.3/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA=
    143 145  github.com/bits-and-blooms/bloom/v3 v3.0.1/go.mod h1:MC8muvBzzPOFsrcdND/A7kU7kMhkqb9KI70JlZCP+C8=
    144  -github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84=
     146 +github.com/bits-and-blooms/bloom/v3 v3.3.1 h1:K2+A19bXT8gJR5mU7y+1yW6hsKfNCjcP2uNfLFKncjQ=
     147 +github.com/bits-and-blooms/bloom/v3 v3.3.1/go.mod h1:bhUUknWd5khVbTe4UgMCSiOOVJzr3tMoijSK3WwvW90=
    145 148  github.com/blang/semver v3.5.1+incompatible h1:cQNTCjp13qL8KC3Nbxr/y2Bqb63oX6wdnnjpJbkM4JQ=
    146 149  github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk=
    147 150  github.com/bluele/gcache v0.0.2 h1:WcbfdXICg7G/DGBh1PFfcirkWOQV+v077yF1pSy3DGw=
    148 151  github.com/bluele/gcache v0.0.2/go.mod h1:m15KV+ECjptwSPxKhOhQoAFQVtUFjTVkc3H8o0t/fp0=
    149 152  github.com/boy-hack/ksubdomain v1.9.5 h1:wx9Klabaqh7o6BcDuMNKASBtC1oZiMcefkwTbVc7GX8=
    150 153  github.com/boy-hack/ksubdomain v1.9.5/go.mod h1:dyctXGqSvDRbQc5mNQk6WrYC0nR7+bMK3wT+h0TngOk=
    151  -github.com/bradfitz/iter v0.0.0-20191230175014-e8f45d346db8 h1:GKTyiRCL6zVf5wWaqKnf+7Qs6GbEPfd4iMOitWzXJx8=
    152 154  github.com/bradfitz/iter v0.0.0-20191230175014-e8f45d346db8/go.mod h1:spo1JLcs67NmW1aVLEgtA8Yy1elc+X8y5SRW1sFW4Og=
    153 155  github.com/c4milo/unpackit v0.1.0 h1:91pWJ6B3svZ4LOE+p3rnyucRK5fZwBdF/yQ/pcZO31I=
    154 156  github.com/c4milo/unpackit v0.1.0/go.mod h1:pvXCMYlSV8zwGFWMaT+PWYkAB/cvDjN2mv9r7ZRSxEo=
    155 157  github.com/caddyserver/certmagic v0.16.1/go.mod h1:jKQ5n+ViHAr6DbPwEGLTSM2vDwTO6EvCKBblBRUvvuQ=
    156  -github.com/caddyserver/certmagic v0.16.2 h1:k2n3LkkUG3aMUK/kckMuF9/0VFo+0FtMX3drPYESbmQ=
    157  -github.com/caddyserver/certmagic v0.16.2/go.mod h1:PgLIr/dSJa+WA7t7z6Je5xuS/e5A/GFCPHRuZ1QP+MQ=
     158 +github.com/caddyserver/certmagic v0.17.1 h1:VrWANhQAj3brK7jAUKyN6XBHg56WsyorI/84Ilq1tCQ=
     159 +github.com/caddyserver/certmagic v0.17.1/go.mod h1:pSS2aZcdKlrTZrb2DKuRafckx20o5Fz1EdDKEB8KOQM=
    158 160  github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
    159 161  github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
    160 162  github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
    161 163  github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE=
    162 164  github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
    163 165  github.com/chromedp/cdproto v0.0.0-20220515234810-83d799542a04/go.mod h1:5Y4sD/eXpwrChIuxhSr/G20n9CdbCmoerOHnuAf0Zr0=
    164  -github.com/chromedp/cdproto v0.0.0-20220629234738-4cfc9cdeeb92 h1:0kiAQSLWZDt4wsmcICou3C6in/OJ58FCqvXcB8Ax1Dk=
    165 166  github.com/chromedp/cdproto v0.0.0-20220629234738-4cfc9cdeeb92/go.mod h1:5Y4sD/eXpwrChIuxhSr/G20n9CdbCmoerOHnuAf0Zr0=
    166  -github.com/chromedp/chromedp v0.8.2 h1:EYSsSqWuKYwyHZEJpU00kOGOMz5DE0qDVckelzauMFA=
     167 +github.com/chromedp/cdproto v0.0.0-20220914223734-4ab9dc957c3e h1:z2+iEG6W5/hsDPOV5OJk+dfoUtEznnzhrY01QZImmp8=
     168 +github.com/chromedp/cdproto v0.0.0-20220914223734-4ab9dc957c3e/go.mod h1:5Y4sD/eXpwrChIuxhSr/G20n9CdbCmoerOHnuAf0Zr0=
    167 169  github.com/chromedp/chromedp v0.8.2/go.mod h1:vpbCNtfYeOUo2q5reuwX6ZmPpbHRf5PZfAqNR2ObB+g=
     170 +github.com/chromedp/chromedp v0.8.5 h1:HAVg54yQFcn7sg5reVjXtoI1eQaFxhjAjflHACicUFw=
     171 +github.com/chromedp/chromedp v0.8.5/go.mod h1:xal2XY5Di7m/bzlGwtoYpmgIOfDqCakOIVg5OfdkPZ4=
    168 172  github.com/chromedp/sysutil v1.0.0 h1:+ZxhTpfpZlmchB58ih/LBHX52ky7w2VhQVKQMucy3Ic=
    169 173  github.com/chromedp/sysutil v1.0.0/go.mod h1:kgWmDdq8fTzXYcKIBqIYvRRTnYb9aNS9moAV0xufSww=
    170 174  github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
    171 175  github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
    172 176  github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
    173  -github.com/cilium/ebpf v0.7.0 h1:1k/q3ATgxSXRdrmPfH8d7YK0GfqVsEKZAX9dQZvs56k=
    174  -github.com/cilium/ebpf v0.7.0/go.mod h1:/oI2+1shJiTGAMgl6/RgJr36Eo1jzrRcAWbcXO2usCA=
    175  -github.com/clbanning/mxj v1.8.5-0.20200714211355-ff02cfb8ea28 h1:LdXxtjzvZYhhUaonAaAKArG3pyC67kGL3YY+6hGG8G4=
    176 177  github.com/clbanning/mxj v1.8.5-0.20200714211355-ff02cfb8ea28/go.mod h1:BVjHeAH+rl9rs6f+QIpeRl0tfu10SXn1pUSa5PVGJng=
    177 178  github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
    178 179  github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
    179 180  github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
    180 181  github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
    181  -github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI=
    182  -github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
    183  -github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
    184  -github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
    185 182  github.com/cnf/structhash v0.0.0-20201127153200-e1b16c1ebc08 h1:ox2F0PSMlrAAiAdknSRMDrAr8mfxPCfSZolH+/qQnyQ=
    186 183  github.com/cnf/structhash v0.0.0-20201127153200-e1b16c1ebc08/go.mod h1:pCxVEbcm3AMg7ejXyorUXi6HQCzOIBf7zEDVPtw0/U4=
     184 +github.com/cockroachdb/datadriven v1.0.0/go.mod h1:5Ib8Meh+jk1RlHIXej6Pzevx/NLlNvQB9pmSBZErGA4=
     185 +github.com/cockroachdb/errors v1.6.1/go.mod h1:tm6FTP5G81vwJ5lC0SizQo374JNCOPrHyXGitRJoDqM=
     186 +github.com/cockroachdb/errors v1.8.1 h1:A5+txlVZfOqFBDa4mGz2bUWSp0aHElvHX2bKkdbQu+Y=
     187 +github.com/cockroachdb/errors v1.8.1/go.mod h1:qGwQn6JmZ+oMjuLwjWzUNqblqk0xl4CVV3SQbGwK7Ac=
     188 +github.com/cockroachdb/logtags v0.0.0-20190617123548-eb05cc24525f h1:o/kfcElHqOiXqcou5a3rIlMc7oJbMQkeLk0VQJ7zgqY=
     189 +github.com/cockroachdb/logtags v0.0.0-20190617123548-eb05cc24525f/go.mod h1:i/u985jwjWRlyHXQbwatDASoW0RMlZ/3i9yJHE2xLkI=
     190 +github.com/cockroachdb/pebble v0.0.0-20210728210723-48179f1d4dae h1:rH4i31f3O0yEQy1Ho6DuUqf0+0Pq4MIflc8TBZEMvUI=
     191 +github.com/cockroachdb/pebble v0.0.0-20210728210723-48179f1d4dae/go.mod h1:JXfQr3d+XO4bL1pxGwKKo09xylQSdZ/mpZ9b2wfVcPs=
     192 +github.com/cockroachdb/redact v1.0.8 h1:8QG/764wK+vmEYoOlfobpe12EQcS81ukx/a4hdVMxNw=
     193 +github.com/cockroachdb/redact v1.0.8/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg=
     194 +github.com/cockroachdb/sentry-go v0.6.1-cockroachdb.2 h1:IKgmqgMQlVJIZj19CdocBeSfSaiCbEBZGKODaixqtHM=
     195 +github.com/cockroachdb/sentry-go v0.6.1-cockroachdb.2/go.mod h1:8BT+cPK6xvFOcRlk0R8eg+OTkcqI6baNH4xAkpiYVvQ=
     196 +github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI=
    187 197  github.com/codegangsta/cli v1.20.0/go.mod h1:/qJNoX69yVSKu5o4jLyXAENLRyk1uhi7zkbQ3slBdOA=
    188  -github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk=
     198 +github.com/codegangsta/inject v0.0.0-20150114235600-33e0aa1cb7c0/go.mod h1:4Zcjuz89kmFXt9morQgcfYZAYZ5n8WHjt81YYWIwtTM=
    189 199  github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
    190  -github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
    191 200  github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk=
    192 201  github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
    193  -github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
    194  -github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
    195  -github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
    196 202  github.com/corpix/uarand v0.1.1/go.mod h1:SFKZvkcRoLqVRFZ4u25xPmp6m9ktANfbpXZ7SJ0/FNU=
    197 203  github.com/corpix/uarand v0.2.0 h1:U98xXwud/AVuCpkpgfPF7J5TQgr7R5tqT8VZP5KWbzE=
    198 204  github.com/corpix/uarand v0.2.0/go.mod h1:/3Z1QIqWkDIhf6XWn/08/uMHoQ8JUoTIKc2iPchBOmM=
    199  -github.com/cosiner/argv v0.1.0 h1:BVDiEL32lwHukgJKP87btEPenzrrHUjajs/8yzaqcXg=
    200  -github.com/cosiner/argv v0.1.0/go.mod h1:EusR6TucWKX+zFgtdUsKT2Cvg45K5rtpCcWz4hK06d8=
    201 205  github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE=
    202 206  github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
    203 207  github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
    skipped 8 lines
    212 216  github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
    213 217  github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
    214 218  github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
    215  -github.com/deckarep/golang-set v1.7.1 h1:SCQV0S6gTtp6itiFrTqI+pfmJ4LN85S1YzhDf9rTHJQ=
    216 219  github.com/deckarep/golang-set v1.7.1/go.mod h1:93vsz/8Wt4joVM7c2AVqh+YRMiUSc14yDtF28KmMOgQ=
     220 +github.com/deckarep/golang-set v1.8.0 h1:sk9/l/KqpunDwP7pSjUg0keiOOLEnOBHzykLrsPppp4=
     221 +github.com/deckarep/golang-set v1.8.0/go.mod h1:5nI87KwE7wgsBU1F4GKAw2Qod7p5kyS383rP6+o6qqo=
    217 222  github.com/denisenkom/go-mssqldb v0.12.2 h1:1OcPn5GBIobjWNd+8yjfHNIaFX14B1pWI3F9HZy5KXw=
    218 223  github.com/denisenkom/go-mssqldb v0.12.2/go.mod h1:lnIw1mZukFRZDJYQ0Pb833QS2IaC3l5HkEfra2LJ+sk=
    219  -github.com/derekparker/trie v0.0.0-20200317170641-1fdf38b7b0e9 h1:G765iDCq7bP5opdrPkXk+4V3yfkgV9iGFuheWZ/X/zY=
    220  -github.com/derekparker/trie v0.0.0-20200317170641-1fdf38b7b0e9/go.mod h1:D6ICZm05D9VN1n/8iOtBxLpXtoGp6HDFUJ1RNVieOSE=
     224 +github.com/dgraph-io/badger v1.6.0/go.mod h1:zwt7syl517jmP8s94KqSxTlM6IMsdhYy6psNgSztDR4=
    221 225  github.com/dgraph-io/badger v1.6.2 h1:mNw0qs90GVgGGWylh0umH5iag1j6n/PeJtNvL6KY/x8=
    222 226  github.com/dgraph-io/badger v1.6.2/go.mod h1:JW2yswe3V058sS0kZ2h/AXeDSqFjxnZcRrVH//y2UQE=
    223 227  github.com/dgraph-io/ristretto v0.0.2/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E=
    skipped 2 lines
    226 230  github.com/dgraph-io/ristretto v0.1.0/go.mod h1:fux0lOrBhrVCJd3lcTHsIJhq1T2rokOu6v9Vcb3Q9ug=
    227 231  github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
    228 232  github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw=
    229  -github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 h1:fAjc9m62+UWV/WAFKLNi6ZS0675eEUC9y3AlwSbQu1Y=
    230 233  github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw=
    231  -github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no=
    232 234  github.com/dimchansky/utfbom v1.1.1 h1:vV6w1AhK4VMnhBno/TPVCoK9U/LP0PkLCS9tbxHdi/U=
    233 235  github.com/dimchansky/utfbom v1.1.1/go.mod h1:SxdoEBH5qIqFocHMyGOXVAybYJdr71b1Q/j0mACtrfE=
    234  -github.com/dlclark/regexp2 v1.4.0 h1:F1rxgk7p4uKjwIQxBs9oAXe5CqrXlCduYEJvrF4u93E=
    235  -github.com/dlclark/regexp2 v1.4.0/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc=
     236 +github.com/dlclark/regexp2 v1.7.0 h1:7lJfhqlPssTb1WQx4yvTHN0uElPEv52sbaECrAQxjAo=
     237 +github.com/dlclark/regexp2 v1.7.0/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8=
    236 238  github.com/dnaeon/go-vcr v1.2.0/go.mod h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ=
    237  -github.com/docker/go-units v0.4.0 h1:3uh0PgVws3nIA0Q+MwDC8yjEPf9zjRfZZWXZYDct3Tw=
    238 239  github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
     240 +github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4=
     241 +github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
    239 242  github.com/dsnet/compress v0.0.1 h1:PlZu0n3Tuv04TzpfPbrnI0HW/YwodEXDS+oPKahKF0Q=
    240 243  github.com/dsnet/compress v0.0.1/go.mod h1:Aw8dCMJ7RioblQeTqt88akK31OvO8Dhf5JflhBbQEHo=
    241 244  github.com/dsnet/golib v0.0.0-20171103203638-1ea166775780/go.mod h1:Lj+Z9rebOhdfkVLjJ8T6VcRQv3SXugXy999NBtR9aFY=
    242 245  github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo=
    243 246  github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
    244 247  github.com/eggsampler/acme/v3 v3.2.1/go.mod h1:/qh0rKC/Dh7Jj+p4So7DbWmFNzC4dpcpK53r226Fhuo=
     248 +github.com/eknkc/amber v0.0.0-20171010120322-cdade1c07385/go.mod h1:0vRUJqYpeSZifjYj7uP3BG/gKcuzL9xWVV/Y+cK33KM=
    245 249  github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
    246 250  github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
    247 251  github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
    248 252  github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po=
    249 253  github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk=
    250  -github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE=
    251 254  github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
     255 +github.com/etcd-io/bbolt v1.3.3/go.mod h1:ZF2nL25h33cCyBtcyWeZ2/I3HQOfTP+0PIEvHjkjCrw=
     256 +github.com/fasthttp-contrib/websocket v0.0.0-20160511215533-1f3b11f56072/go.mod h1:duJ4Jxv5lDcvg4QuQr0oowTf7dz4/CR8NtyCooz9HL8=
    252 257  github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
    253 258  github.com/fatih/color v1.12.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM=
    254  -github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w=
    255 259  github.com/fatih/structs v1.1.0 h1:Q7juDM0QtcnhCpeyLGQKyg4TOIghuNXrkL32pHAUMxo=
    256 260  github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M=
    257  -github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw=
     261 +github.com/flosch/pongo2 v0.0.0-20190707114632-bbf5a6c351f4/go.mod h1:T9YF2M40nIgbVgp3rreNmTged+9HrbNTIQf1PsaIiTA=
    258 262  github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g=
    259  -github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k=
    260  -github.com/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3ZUKE=
    261 263  github.com/frankban/quicktest v1.14.3/go.mod h1:mgiwOwqx65TmIk1wJ6Q7wvnVMocbUorkibMOrVTHZps=
    262 264  github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
    263 265  github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
    264 266  github.com/fsnotify/fsnotify v1.5.4 h1:jRbGcIw6P2Meqdwuo0H1p6JVLbL5DHKAKlYndzMwVZI=
    265 267  github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU=
    266  -github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
    267  -github.com/go-delve/delve v1.9.1 h1:HBvHO5anAntm2ORXKQJqH7R8bezmCuPO+Tf2SJZ2Ojw=
    268  -github.com/go-delve/delve v1.9.1/go.mod h1:CET1wODsRJ2vlNepWyFEatwXRJ8rnrbgqaf1d4+Hgi4=
    269  -github.com/go-delve/liner v1.2.3-0.20220127212407-d32d89dd2a5d h1:pxjSLshkZJGLVm0wv20f/H0oTWiq/egkoJQ2ja6LEvo=
    270  -github.com/go-delve/liner v1.2.3-0.20220127212407-d32d89dd2a5d/go.mod h1:biJCRbqp51wS+I92HMqn5H8/A0PAhxn2vyOT+JqhiGI=
     268 +github.com/gavv/httpexpect v2.0.0+incompatible/go.mod h1:x+9tiU1YnrOvnB725RkpoLv1M62hOWzwo5OXotisrKc=
     269 +github.com/ghemawat/stream v0.0.0-20171120220530-696b145b53b9/go.mod h1:106OIgooyS7OzLDOpUGgm9fA3bQENb/cFSyyBmMoJDs=
     270 +github.com/gin-contrib/sse v0.0.0-20190301062529-5545eab6dad3/go.mod h1:VJ0WA2NBN22VlZ2dKZQPAPnyWw5XTlK1KymzLKsr59s=
     271 +github.com/gin-gonic/gin v1.4.0/go.mod h1:OW2EZn3DO8Ln9oIKOvM++LBO+5UPHJJDH72/q/3rZdM=
     272 +github.com/go-check/check v0.0.0-20180628173108-788fd7840127/go.mod h1:9ES+weclKsC9YodN5RgxqK/VD9HM9JsCSh7rNhMZE98=
     273 +github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q=
    271 274  github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
    272 275  github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
    273 276  github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
    274  -github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
    275  -github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
    276 277  github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
     278 +github.com/go-martini/martini v0.0.0-20170121215854-22fa46961aab/go.mod h1:/P9AEU963A2AYjv4d1V5eVL1CQbEJq6aCNHDDjibzu8=
    277 279  github.com/go-ole/go-ole v1.2.5/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0=
    278 280  github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY=
    279 281  github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0=
    280  -github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A=
    281 282  github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
    282 283  github.com/go-playground/locales v0.14.0 h1:u50s323jtVGugKlcYeyzC0etD1HifMjqmJqb8WugfUU=
    283 284  github.com/go-playground/locales v0.14.0/go.mod h1:sawfccIbzZTqEDETgFXqTho0QybSa7l++s0DH+LDiLs=
    284 285  github.com/go-playground/universal-translator v0.18.0 h1:82dyy6p4OuJq4/CByFNOn/jYrnRPArHwAcmLoJZxyho=
    285 286  github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl+lu/H90nyDXpg0fqeB/AQUGNTVA=
    286  -github.com/go-playground/validator/v10 v10.11.0 h1:0W+xRM511GY47Yy3bZUbJVitCNg2BOGlCyvTqsp/xIw=
    287 287  github.com/go-playground/validator/v10 v10.11.0/go.mod h1:i+3WkQ1FvaUjjxh1kSvIA4dMGDBiPU55YFDl0WbKdWU=
     288 +github.com/go-playground/validator/v10 v10.11.1 h1:prmOlTVv+YjZjmRmNSF3VmspqJIxJWXmqUsHwfTRRkQ=
     289 +github.com/go-playground/validator/v10 v10.11.1/go.mod h1:i+3WkQ1FvaUjjxh1kSvIA4dMGDBiPU55YFDl0WbKdWU=
    288 290  github.com/go-redis/redis v6.15.5+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA=
    289 291  github.com/go-rod/rod v0.91.1/go.mod h1:/W4lcZiCALPD603MnJGIvhtywP3R6yRB9EDfFfsHiiI=
    290 292  github.com/go-rod/rod v0.108.1/go.mod h1:yNvL687cwcjgebRuArQN9AStFdm8iS/e/rzImrS9Pzg=
    291  -github.com/go-rod/rod v0.109.0 h1:h16UAw8AWRTcZ2bPfk23o8L1DBW692RUJzet49XD1rk=
    292  -github.com/go-rod/rod v0.109.0/go.mod h1:GZDtmEs6RpF6kBRYpGCZXxXlKNneKVPiKOjaMbmVVjE=
     293 +github.com/go-rod/rod v0.109.3 h1:MxuSJGK9lEUq07K+QPfnxnuvQpsQT+YI4SoQjSE0LVg=
     294 +github.com/go-rod/rod v0.109.3/go.mod h1:GZDtmEs6RpF6kBRYpGCZXxXlKNneKVPiKOjaMbmVVjE=
    293 295  github.com/go-routeros/routeros v0.0.0-20210123142807-2a44d57c6730 h1:EuqwWLv/LPPjhvFqkeD2bz+FOlvw2DjvDI7vK8GVeyY=
    294 296  github.com/go-routeros/routeros v0.0.0-20210123142807-2a44d57c6730/go.mod h1:em1mEqFKnoeQuQP9Sg7i26yaW8o05WwcNj7yLhrXxSQ=
    295 297  github.com/go-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfCHuOE=
    296 298  github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
    297  -github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk=
    298  -github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
    299  -github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE=
    300 299  github.com/goburrow/cache v0.1.4 h1:As4KzO3hgmzPlnaMniZU9+VmoNYseUhuELbxy9mRBfw=
    301 300  github.com/goburrow/cache v0.1.4/go.mod h1:cDFesZDnIlrHoNlMYqqMpCRawuXulgx+y7mXU8HZ+/c=
     301 +github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee/go.mod h1:L0fX3K22YWvt/FAX9NnzrNzcI4wNYi9Yku4O0LKYflo=
    302 302  github.com/gobwas/httphead v0.1.0 h1:exrUm0f4YX0L7EBwZHuCF4GDp8aJfVeBrlLQrs6NqWU=
    303 303  github.com/gobwas/httphead v0.1.0/go.mod h1:O/RXo79gxV8G+RqlR/otEwx4Q36zl9rqC5u12GKvMCM=
     304 +github.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw=
    304 305  github.com/gobwas/pool v0.2.1 h1:xfeeEhW7pwmX8nuLVlqbzVc7udMDrwetjEv+TZIz1og=
    305 306  github.com/gobwas/pool v0.2.1/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw=
     307 +github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM=
    306 308  github.com/gobwas/ws v1.1.0 h1:7RFti/xnNkMJnrK7D1yQ/iCIB5OrrY/54/H930kIbHA=
    307 309  github.com/gobwas/ws v1.1.0/go.mod h1:nzvNcVha5eUziGrbxFCo6qFIojQHjJV5cLYIbezhfL0=
    308 310  github.com/gofrs/uuid v3.3.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM=
    309  -github.com/gofrs/uuid v4.2.0+incompatible h1:yyYWMnhkhrKwwr8gAOcOCYxOOscHgDS9yZgBrnJfGa0=
    310 311  github.com/gofrs/uuid v4.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM=
    311  -github.com/gogf/gf v1.16.6 h1:Yp5YfwnGz41d1tiVqxcWXiPXyuzjTb7ax4SnPSXxDE8=
     312 +github.com/gofrs/uuid v4.3.0+incompatible h1:CaSVZxm5B+7o45rtab4jC2G37WGYX1zQfuU2i6DSvnc=
     313 +github.com/gofrs/uuid v4.3.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM=
    312 314  github.com/gogf/gf v1.16.6/go.mod h1:4LoHfEBl2jbVmZpVx+qk2La3zWr1V315FtF2PVZuyQ8=
    313  -github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
    314  -github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4=
     315 +github.com/gogf/gf v1.16.9 h1:Q803UmmRo59+Ws08sMVFOcd8oNpkSWL9vS33hlo/Cyk=
     316 +github.com/gogf/gf v1.16.9/go.mod h1:8Q/kw05nlVRp+4vv7XASBsMe9L1tsVKiGoeP2AHnlkk=
     317 +github.com/gogo/googleapis v0.0.0-20180223154316-0cd9801be74a/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s=
     318 +github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
     319 +github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o=
     320 +github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
     321 +github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
     322 +github.com/gogo/status v1.1.0/go.mod h1:BFv9nrluPLmrS0EmGVvLaPNmRosr9KapBYd5/hpY1WM=
    315 323  github.com/golang-jwt/jwt v3.2.1+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I=
    316 324  github.com/golang-jwt/jwt/v4 v4.3.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg=
    317 325  github.com/golang-jwt/jwt/v4 v4.4.2 h1:rcc4lwaZgFMCZ5jxF9ABolDcIHdBytAFgqFPbSJQAYs=
    318 326  github.com/golang-jwt/jwt/v4 v4.4.2/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0=
    319  -github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe h1:lXe2qZdvpiX5WZkZR4hgp4KJVfY3nMkvmwbVkpv1rVY=
    320 327  github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0=
     328 +github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9 h1:au07oEsX2xN0ktxqI+Sida1w446QrXBRJ0nee3SNZlA=
     329 +github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0=
    321 330  github.com/golang-sql/sqlexp v0.1.0 h1:ZCD6MBpcuOVfGVqsEmY5/4FtYiKz6tSyUv9LPEDei6A=
    322 331  github.com/golang-sql/sqlexp v0.1.0/go.mod h1:J4ad9Vo8ZCWQ2GMrC4UCQy1JpCbwU9m3EOqtpKwwwHI=
    323 332  github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
    324 333  github.com/golang/glog v1.0.0 h1:nfP3RFugxnNRyKgeWd4oI1nYvXpxrx8ck8ZrcizshdQ=
    325 334  github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4=
    326  -github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
    327 335  github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
    328 336  github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
    329 337  github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
    skipped 29 lines
    359 367  github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
    360 368  github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM=
    361 369  github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
    362  -github.com/gomodule/redigo v1.8.5 h1:nRAxCa+SVsyjSBrtZmG/cqb6VbTmuRzpg/PoTFlpumc=
     370 +github.com/gomodule/redigo v1.7.1-0.20190724094224-574c33c3df38/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4=
    363 371  github.com/gomodule/redigo v1.8.5/go.mod h1:P9dn9mFrCBvWhGE1wpxx6fgq7BAeLBk+UUUzlpkBYO0=
    364 372  github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
    365 373  github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
    366  -github.com/google/cel-go v0.11.4 h1:wWOnKmLxALl3l9Av221MfIOWRiR01sDVljzg6LZ6Zn0=
    367  -github.com/google/cel-go v0.11.4/go.mod h1:Av7CU6r6X3YmcHR9GXqVDaEJYfEtSxl6wvIjUQTriCw=
     374 +github.com/google/cel-go v0.12.5 h1:DmzaiSgoaqGCjtpPQWl26/gND+yRpim56H1jCVev6d8=
     375 +github.com/google/cel-go v0.12.5/go.mod h1:Jk7ljRzLBhkmiAwBoUxB1sZSCVBAzkqPF25olK/iRDw=
    368 376  github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
    369 377  github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
    370 378  github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
    skipped 6 lines
    377 385  github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
    378 386  github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
    379 387  github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE=
    380  -github.com/google/go-cmp v0.5.8 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg=
    381 388  github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
    382  -github.com/google/go-dap v0.6.0 h1:Y1RHGUtv3R8y6sXq2dtGRMYrFB2hSqyFVws7jucrzX4=
    383  -github.com/google/go-dap v0.6.0/go.mod h1:5q8aYQFnHOAZEMP+6vmq25HKYAEwE+LF5yh7JKrrhSQ=
     389 +github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
    384 390  github.com/google/go-github v17.0.0+incompatible h1:N0LgJ1j65A7kfXrZnUDaYCs/Sf4rEjNlfyDHW9dolSY=
    385 391  github.com/google/go-github v17.0.0+incompatible/go.mod h1:zLgOLi98H3fifZn+44m+umXrS52loVEgC2AApnigrVQ=
    386 392  github.com/google/go-querystring v0.0.0-20170111101155-53e6ce116135/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck=
    skipped 26 lines
    413 419  github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
    414 420  github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
    415 421  github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g=
    416  -github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8=
    417 422  github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
    418 423  github.com/gorilla/css v1.0.0 h1:BQqNyPTi50JCFMTw/b67hByjMVXZRwGha6wxVGkeihY=
    419 424  github.com/gorilla/css v1.0.0/go.mod h1:Dn721qIggHpt4+EFCcTLTU/vk5ySda2ReITrtgBl60c=
    420  -github.com/gorilla/securecookie v1.1.1 h1:miw7JPhV+b/lAHSXz4qd/nN9jRiAFV5FwjeKyCS8BvQ=
    421 425  github.com/gorilla/securecookie v1.1.1/go.mod h1:ra0sb63/xPlUeL+yeDciTfxMRAA+MP+HVt/4epWDjd4=
    422  -github.com/gorilla/sessions v1.2.1 h1:DHd3rPN5lE3Ts3D8rKkQ8x/0kqfeNmBAaiSi+o7FsgI=
    423 426  github.com/gorilla/sessions v1.2.1/go.mod h1:dk2InVEVJ0sfLlnXv9EAgkf6ecYs/i80K/zI+bUmuGM=
     427 +github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
    424 428  github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
    425 429  github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc=
    426 430  github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
    skipped 3 lines
    430 434  github.com/gosuri/uilive v0.0.4/go.mod h1:V/epo5LjjlDE5RJUcqx8dbw+zc93y5Ya3yg8tfZ74VI=
    431 435  github.com/gosuri/uiprogress v0.0.1 h1:0kpv/XY/qTmFWl/SkaJykZXrBBzwwadmW8fRb7RJSxw=
    432 436  github.com/gosuri/uiprogress v0.0.1/go.mod h1:C1RTYn4Sc7iEyf6j8ft5dyoZ4212h8G1ol9QQluh5+0=
    433  -github.com/grokify/html-strip-tags-go v0.0.0-20190921062105-daaa06bf1aaf h1:wIOAyJMMen0ELGiFzlmqxdcV1yGbkyHBAB6PolcNbLA=
    434 437  github.com/grokify/html-strip-tags-go v0.0.0-20190921062105-daaa06bf1aaf/go.mod h1:2Su6romC5/1VXOQMaWL2yb618ARB8iVo6/DR99A6d78=
    435  -github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs=
    436  -github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk=
    437  -github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
    438  -github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw=
     438 +github.com/grokify/html-strip-tags-go v0.0.1/go.mod h1:2Su6romC5/1VXOQMaWL2yb618ARB8iVo6/DR99A6d78=
    439 439  github.com/h2non/filetype v1.1.3 h1:FKkx9QbD7HR/zjK1Ia5XiBsq9zdLi5Kf3zGyFTAFkGg=
    440 440  github.com/h2non/filetype v1.1.3/go.mod h1:319b3zT68BvV+WRj7cwy856M2ehB3HqNOt6sy1HndBY=
    441  -github.com/hako/durafmt v0.0.0-20210316092057-3a2c319c1acd h1:FsX+T6wA8spPe4c1K9vi7T0LvNCO1TTqiL8u7Wok2hw=
    442  -github.com/hako/durafmt v0.0.0-20210316092057-3a2c319c1acd/go.mod h1:VzxiSdG6j1pi7rwGm/xYI5RbtpBgM8sARDXlvEvxlu0=
    443  -github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q=
    444  -github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8=
    445  -github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA=
     441 +github.com/hako/durafmt v0.0.0-20210608085754-5c1018a4e16b h1:wDUNC2eKiL35DbLvsDhiblTUXHxcOPwQSCzi7xpQUN4=
     442 +github.com/hako/durafmt v0.0.0-20210608085754-5c1018a4e16b/go.mod h1:VzxiSdG6j1pi7rwGm/xYI5RbtpBgM8sARDXlvEvxlu0=
    446 443  github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
     444 +github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I=
     445 +github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
    447 446  github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80=
    448 447  github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ=
    449 448  github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48=
    450 449  github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ=
    451  -github.com/hashicorp/go-hclog v1.2.0 h1:La19f8d7WIlm4ogzNHB0JGqs5AUDAZ2UfCY4sJXcJdM=
    452  -github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60=
    453  -github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM=
    454  -github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk=
    455 450  github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo=
    456 451  github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM=
    457 452  github.com/hashicorp/go-retryablehttp v0.6.8/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY=
    458 453  github.com/hashicorp/go-retryablehttp v0.7.1 h1:sUiuQAnLlbvmExtFQs72iFW/HXeUn8Z1aJLQ4LJJbTQ=
    459 454  github.com/hashicorp/go-retryablehttp v0.7.1/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY=
    460  -github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU=
    461  -github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU=
    462  -github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4=
    463  -github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
    464  -github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
    465  -github.com/hashicorp/go-uuid v1.0.2 h1:cfejS+Tpcp13yd5nYHWDI6qVCny6wyX2Mt5SGur2IGE=
    466 455  github.com/hashicorp/go-uuid v1.0.2/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
     456 +github.com/hashicorp/go-uuid v1.0.3 h1:2gKiV6YVmrJ1i2CKKa9obLvRieoRGviZFL26PcT/Co8=
     457 +github.com/hashicorp/go-uuid v1.0.3/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
     458 +github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
    467 459  github.com/hashicorp/go-version v1.3.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
    468 460  github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek=
    469 461  github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
    470  -github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90=
    471 462  github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
    472 463  github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
    473 464  github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc=
    474 465  github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4=
    475 466  github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
    476 467  github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
    477  -github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64=
    478  -github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ=
    479  -github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I=
    480  -github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc=
    481 468  github.com/hbakhtiyor/strsim v0.0.0-20190107154042-4d2bbb273edf h1:umfGUaWdFP2s6457fz1+xXYIWDxdGc7HdkLS9aJ1skk=
    482 469  github.com/hbakhtiyor/strsim v0.0.0-20190107154042-4d2bbb273edf/go.mod h1:V99KdStnMHZsvVOwIvhfcUzYgYkRZeQWUtumtL+SKxA=
    483  -github.com/hooklift/assert v0.1.0 h1:UZzFxx5dSb9aBtvMHTtnPuvFnBvcEhHTPb9+0+jpEjs=
    484 470  github.com/hooklift/assert v0.1.0/go.mod h1:pfexfvIHnKCdjh6CkkIZv5ic6dQ6aU2jhKghBlXuwwY=
    485 471  github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
    486 472  github.com/huin/asn1ber v0.0.0-20120622192748-af09f62e6358 h1:hVXNJ57IHkOA8FBq80UG263MEBwNUMfS9c82J2QE5UQ=
    487 473  github.com/huin/asn1ber v0.0.0-20120622192748-af09f62e6358/go.mod h1:qBE210J2T9uLXRB3GNc73SvZACDEFAmDCOlDkV47zbY=
    488  -github.com/iancoleman/orderedmap v0.0.0-20190318233801-ac98e3ecb4b0 h1:i462o439ZjprVSFSZLZxcsoAe592sZB1rci2Z8j4wdk=
     474 +github.com/hydrogen18/memlistener v0.0.0-20141126152155-54553eb933fb/go.mod h1:qEIFzExnS6016fRpRfxrExeVn2gbClQA99gQhnIcdhE=
    489 475  github.com/iancoleman/orderedmap v0.0.0-20190318233801-ac98e3ecb4b0/go.mod h1:N0Wam8K1arqPXNWjMo21EXnBPOPp36vB07FNRdD2geA=
     476 +github.com/iancoleman/orderedmap v0.2.0 h1:sq1N/TFpYH++aViPcaKjys3bDClUEU7s5B+z6jq8pNA=
     477 +github.com/iancoleman/orderedmap v0.2.0/go.mod h1:N0Wam8K1arqPXNWjMo21EXnBPOPp36vB07FNRdD2geA=
    490 478  github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
    491 479  github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
    492 480  github.com/icodeface/tls v0.0.0-20190904083142-17aec93c60e5 h1:ZcsPFW8UgACapqjcrBJx0PuyT4ppArO5VFn0vgnkvmc=
    493 481  github.com/icodeface/tls v0.0.0-20190904083142-17aec93c60e5/go.mod h1:VJNHW2GxCtQP/IQtXykBIPBV8maPJ/dHWirVTwm9GwY=
    494  -github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM=
     482 +github.com/imkira/go-interpol v1.1.0/go.mod h1:z0h2/2T3XF8kyEPpRgJ3kmNv+C43p+I/CoI+jC3w2iA=
    495 483  github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
     484 +github.com/iris-contrib/blackfriday v2.0.0+incompatible/go.mod h1:UzZ2bDEoaSGPbkg6SAB4att1aAwTmVIx/5gCVqeyUdI=
     485 +github.com/iris-contrib/go.uuid v2.0.0+incompatible/go.mod h1:iz2lgM/1UnEf1kP0L/+fafWORmlnuysV2EMP8MW+qe0=
     486 +github.com/iris-contrib/i18n v0.0.0-20171121225848-987a633949d0/go.mod h1:pMCz62A0xJL6I+umB2YTlFRwWXaDFA0jy+5HzGiJjqI=
     487 +github.com/iris-contrib/schema v0.0.1/go.mod h1:urYA3uvUNG1TIIjOSCzHr9/LmbQo8LrOcOqfqxa4hXw=
    496 488  github.com/itchyny/go-flags v1.5.0/go.mod h1:lenkYuCobuxLBAd/HGFE4LRoW8D3B6iXRQfWYJ+MNbA=
    497 489  github.com/itchyny/gojq v0.12.4/go.mod h1:EQUSKgW/YaOxmXpAwGiowFDO4i2Rmtk5+9dFyeiymAg=
    498  -github.com/itchyny/gojq v0.12.8 h1:Zxcwq8w4IeR8JJYEtoG2MWJZUv0RGY6QqJcO1cqV8+A=
    499 490  github.com/itchyny/gojq v0.12.8/go.mod h1:gE2kZ9fVRU0+JAksaTzjIlgnCa2akU+a1V0WXgJQN5c=
    500  -github.com/itchyny/timefmt-go v0.1.3 h1:7M3LGVDsqcd0VZH2U+x393obrzZisp7C0uEe921iRkU=
     491 +github.com/itchyny/gojq v0.12.9 h1:biKpbKwMxVYhCU1d6mR7qMr3f0Hn9F5k5YykCVb3gmM=
     492 +github.com/itchyny/gojq v0.12.9/go.mod h1:T4Ip7AETUXeGpD+436m+UEl3m3tokRgajd5pRfsR5oE=
    501 493  github.com/itchyny/timefmt-go v0.1.3/go.mod h1:0osSSCQSASBJMsIZnhAaF1C2fCBTJZXrnj37mG8/c+A=
    502  -github.com/jarcoal/httpmock v1.0.4 h1:jp+dy/+nonJE4g4xbVtl9QdrUNbn6/3hDT5R4nDIZnA=
     494 +github.com/itchyny/timefmt-go v0.1.4 h1:hFEfWVdwsEi+CY8xY2FtgWHGQaBaC3JeHd+cve0ynVM=
     495 +github.com/itchyny/timefmt-go v0.1.4/go.mod h1:nEP7L+2YmAbT2kZ2HfSs1d8Xtw9LY8D2stDBckWakZ8=
    503 496  github.com/jarcoal/httpmock v1.0.4/go.mod h1:ATjnClrvW/3tijVmpL/va5Z3aAyGvqU3gCT8nX0Txik=
    504 497  github.com/jasonlvhit/gocron v0.0.1/go.mod h1:k9a3TV8VcU73XZxfVHCHWMWF9SOqgoku0/QlY2yvlA4=
    505 498  github.com/jcmturner/aescts/v2 v2.0.0 h1:9YKLH6ey7H4eDBXW8khjYslgyqG2xZikXP0EQFKrle8=
    506 499  github.com/jcmturner/aescts/v2 v2.0.0/go.mod h1:AiaICIRyfYg35RUkr8yESTqvSy7csK90qZ5xfvvsoNs=
    507 500  github.com/jcmturner/dnsutils/v2 v2.0.0 h1:lltnkeZGL0wILNvrNiVCR6Ro5PGU/SeBvVO/8c/iPbo=
    508 501  github.com/jcmturner/dnsutils/v2 v2.0.0/go.mod h1:b0TnjGOvI/n42bZa+hmXL+kFJZsFT7G4t3HTlQ184QM=
    509  -github.com/jcmturner/gofork v1.0.0 h1:J7uCkflzTEhUZ64xqKnkDxq3kzc96ajM1Gli5ktUem8=
    510 502  github.com/jcmturner/gofork v1.0.0/go.mod h1:MK8+TM0La+2rjBD4jE12Kj1pCCxK7d2LK/UM3ncEo0o=
     503 +github.com/jcmturner/gofork v1.7.6 h1:QH0l3hzAU1tfT3rZCnW5zXl+orbkNMMRGJfdJjHVETg=
     504 +github.com/jcmturner/gofork v1.7.6/go.mod h1:1622LH6i/EZqLloHfE7IeZ0uEJwMSUyQ/nDd82IeqRo=
    511 505  github.com/jcmturner/goidentity/v6 v6.0.1 h1:VKnZd2oEIMorCTsFBnJWbExfNN7yZr3EhJAxwOkZg6o=
    512 506  github.com/jcmturner/goidentity/v6 v6.0.1/go.mod h1:X1YW3bgtvwAXju7V3LCIMpY0Gbxyjn/mY9zx4tFonSg=
    513  -github.com/jcmturner/gokrb5/v8 v8.4.2 h1:6ZIM6b/JJN0X8UM43ZOM6Z4SJzla+a/u7scXFJzodkA=
    514 507  github.com/jcmturner/gokrb5/v8 v8.4.2/go.mod h1:sb+Xq/fTY5yktf/VxLsE3wlfPqQjp0aWNYyvBVK62bc=
     508 +github.com/jcmturner/gokrb5/v8 v8.4.3 h1:iTonLeSJOn7MVUtyMT+arAn5AKAPrkilzhGw8wE/Tq8=
     509 +github.com/jcmturner/gokrb5/v8 v8.4.3/go.mod h1:dqRwJGXznQrzw6cWmyo6kH+E7jksEQG/CyVWsJEsJO0=
    515 510  github.com/jcmturner/rpc/v2 v2.0.3 h1:7FXXj8Ti1IaVFpSAziCZWNzbNuZmnvw/i6CqLNdWfZY=
    516 511  github.com/jcmturner/rpc/v2 v2.0.3/go.mod h1:VUJYCIDm3PVOEHw8sgt091/20OJjskO/YJki3ELg/Hc=
    517 512  github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E=
    skipped 1 lines
    519 514  github.com/jinzhu/now v1.1.4/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
    520 515  github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ=
    521 516  github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
    522  -github.com/jlaffaye/ftp v0.0.0-20190624084859-c1312a7102bf h1:2IYBd5TD/maMqTU2YUzp2tJL4cNaOYQ9EBullN9t9pk=
    523 517  github.com/jlaffaye/ftp v0.0.0-20190624084859-c1312a7102bf/go.mod h1:lli8NYPQOFy3O++YmYbqVgOcQ1JPCwdOy+5zSjKJ9qY=
     518 +github.com/jlaffaye/ftp v0.1.0 h1:DLGExl5nBoSFoNshAUHwXAezXwXBvFdx7/qwhucWNSE=
     519 +github.com/jlaffaye/ftp v0.1.0/go.mod h1:hhq4G4crv+nW2qXtNYcuzLeOudG92Ps37HEKeg2e3lE=
    524 520  github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k=
    525 521  github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg=
    526 522  github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo=
    527  -github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8=
    528 523  github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U=
    529  -github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
    530 524  github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
    531 525  github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
    532 526  github.com/jpillora/backoff v0.0.0-20180909062703-3050d21c67d7/go.mod h1:2iMrUgbbvHEiQClaW2NsSzMyGHqN+rDFqY705q49KG0=
    skipped 4 lines
    537 531  github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
    538 532  github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
    539 533  github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk=
    540  -github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo=
    541 534  github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
    542  -github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
    543  -github.com/julienschmidt/httprouter v1.3.0 h1:U0609e9tgbseu3rBINet9P48AI/D3oJs4dN7jwJOQ1U=
     535 +github.com/juju/errors v0.0.0-20181118221551-089d3ea4e4d5/go.mod h1:W54LbzXuIE0boCoNJfwqpmkKJ1O4TCTZMetAt6jGk7Q=
     536 +github.com/juju/loggo v0.0.0-20180524022052-584905176618/go.mod h1:vgyd7OREkbtVEN/8IXZe5Ooef3LQePvuBm9UWj6ZL8U=
     537 +github.com/juju/testing v0.0.0-20180920084828-472a3e8b2073/go.mod h1:63prj8cnj0tU0S9OHjGJn+b1h0ZghCndfnbQolrYTwA=
    544 538  github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM=
     539 +github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88/go.mod h1:3w7q1U84EfirKl04SVQ/s7nPm1ZPhiXd34z40TNz36k=
    545 540  github.com/karlseguin/ccache v2.0.3+incompatible h1:j68C9tWOROiOLWTS/kCGg9IcJG+ACqn5+0+t8Oh83UU=
    546 541  github.com/karlseguin/ccache v2.0.3+incompatible/go.mod h1:CM9tNPzT6EdRh14+jiW8mEF9mkNZuuE51qmgGYUB93w=
    547  -github.com/karlseguin/ccache/v2 v2.0.8 h1:lT38cE//uyf6KcFok0rlgXtGFBWxkI6h/qg4tbFyDnA=
    548 542  github.com/karlseguin/ccache/v2 v2.0.8/go.mod h1:2BDThcfQMf/c0jnZowt16eW405XIqZPavt+HoYEtcxQ=
    549  -github.com/karlseguin/expect v1.0.2-0.20190806010014-778a5f0c6003 h1:vJ0Snvo+SLMY72r5J4sEfkuE7AFbixEP2qRbEcum/wA=
    550 543  github.com/karlseguin/expect v1.0.2-0.20190806010014-778a5f0c6003/go.mod h1:zNBxMY8P21owkeogJELCLeHIt+voOSduHYTFUbwRAV8=
    551 544  github.com/karrick/godirwalk v1.16.1/go.mod h1:j4mkqPuvaLI8mp1DroR3P6ad7cyYd4c1qeJ3RV7ULlk=
    552  -github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q=
     545 +github.com/kataras/golog v0.0.9/go.mod h1:12HJgwBIZFNGL0EJnMRhmvGA0PQGx8VFwrZtM4CqbAk=
     546 +github.com/kataras/iris/v12 v12.0.1/go.mod h1:udK4vLQKkdDqMGJJVd/msuMtN6hpYJhg/lSzuxjhO+U=
     547 +github.com/kataras/neffos v0.0.10/go.mod h1:ZYmJC07hQPW67eKuzlfY7SO3bC0mw83A3j6im82hfqw=
     548 +github.com/kataras/pio v0.0.0-20190103105442-ea782b38602d/go.mod h1:NV88laa9UiiDuX9AhMbDPkGYSPugBOV6yTZB1l2K9Z0=
     549 +github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00=
     550 +github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
    553 551  github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
    554 552  github.com/klauspost/compress v1.4.1/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A=
     553 +github.com/klauspost/compress v1.8.2/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A=
     554 +github.com/klauspost/compress v1.9.0/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A=
     555 +github.com/klauspost/compress v1.11.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs=
    555 556  github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk=
    556 557  github.com/klauspost/compress v1.15.8/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU=
    557  -github.com/klauspost/compress v1.15.9 h1:wKRjX6JRtDdrE9qwa4b/Cip7ACOshUI4smpCQanqjSY=
    558  -github.com/klauspost/compress v1.15.9/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU=
     558 +github.com/klauspost/compress v1.15.10 h1:Ai8UzuomSCDw90e1qNMtb15msBXsNpH6gzkkENQNcJo=
     559 +github.com/klauspost/compress v1.15.10/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM=
    559 560  github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek=
     561 +github.com/klauspost/cpuid v1.2.1/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek=
    560 562  github.com/klauspost/cpuid/v2 v2.0.11/go.mod h1:g2LTdtYhdyuGPqyWyv7qRAmj1WBqxuObKfj5c0PQa7c=
    561  -github.com/klauspost/cpuid/v2 v2.1.0 h1:eyi1Ad2aNJMW95zcSbmGg7Cg6cq3ADwLpMAP96d8rF0=
    562  -github.com/klauspost/cpuid/v2 v2.1.0/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY=
     563 +github.com/klauspost/cpuid/v2 v2.1.1 h1:t0wUqjowdm8ezddV5k0tLWVklVuvLJpoHeb4WBdydm0=
     564 +github.com/klauspost/cpuid/v2 v2.1.1/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY=
    563 565  github.com/klauspost/pgzip v1.2.5 h1:qnWYvvKqedOF2ulHpMG72XQol4ILEJ8k2wwRl/Km8oE=
    564 566  github.com/klauspost/pgzip v1.2.5/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs=
    565 567  github.com/knq/sysutil v0.0.0-20191005231841-15668db23d08/go.mod h1:dFWs1zEqDjFtnBXsd1vPOZaLsESovai349994nHx3e0=
    566 568  github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
    567  -github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
    568 569  github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg=
    569 570  github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
    570 571  github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
    skipped 5 lines
    576 577  github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
    577 578  github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
    578 579  github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
     580 +github.com/labstack/echo/v4 v4.1.11/go.mod h1:i541M3Fj6f76NZtHSj7TXnyM8n2gaodfvfxNnFqi74g=
     581 +github.com/labstack/gommon v0.3.0/go.mod h1:MULnywXg0yavhxWKc+lOruYdAhDwPK9wf0OL7NoOu+k=
    579 582  github.com/lair-framework/go-nmap v0.0.0-20191202052157-3507e0b03523 h1:N4NQR4on0n3Kc3xlBXUYzCZorFdordwkR2kcZMk9te0=
    580 583  github.com/lair-framework/go-nmap v0.0.0-20191202052157-3507e0b03523/go.mod h1:7Em1Lxm3DFdLvXWUZ6bQ/xIbGlxFy7jl07bziQMZ/kU=
    581  -github.com/lcvvvv/gonmap v1.1.8 h1:jzE+avhtSb5iSRl1xwCFHBrMXVNEHGKXlhLIiLtAYaM=
    582  -github.com/lcvvvv/gonmap v1.1.8/go.mod h1:USOReUnvvGX9/3h8arU3c6ViJ0dCilM+bTwJWQI4e0A=
     584 +github.com/lcvvvv/gonmap v1.2.1 h1:Itbo0mnH45X9HBdzjn92e0ZTaBbBdfyfxWY21uGUAw8=
     585 +github.com/lcvvvv/gonmap v1.2.1/go.mod h1:USOReUnvvGX9/3h8arU3c6ViJ0dCilM+bTwJWQI4e0A=
    583 586  github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w=
    584 587  github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY=
    585  -github.com/lib/pq v1.10.6 h1:jbk+ZieJ0D7EVGJYpL9QTz7/YW6UHbmdnZWYyK5cdBs=
    586  -github.com/lib/pq v1.10.6/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
     588 +github.com/lib/pq v1.10.7 h1:p7ZhMD+KsSRozJr34udlUrhboJwWAgCg34+/ZZNvZZw=
     589 +github.com/lib/pq v1.10.7/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
    587 590  github.com/libdns/libdns v0.2.1 h1:Wu59T7wSHRgtA0cfxC+n1c/e+O3upJGWytknkmFEDis=
    588 591  github.com/libdns/libdns v0.2.1/go.mod h1:yQCXzk1lEZmmCPa857bnk4TsOiqYasqpyOEeSObbb40=
    589 592  github.com/logrusorgru/aurora v0.0.0-20200102142835-e9ef32dff381/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4=
    skipped 1 lines
    591 594  github.com/logrusorgru/aurora v2.0.3+incompatible/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4=
    592 595  github.com/lor00x/goldap v0.0.0-20180618054307-a546dffdd1a3 h1:wIONC+HMNRqmWBjuMxhatuSzHaljStc4gjDeKycxy0A=
    593 596  github.com/lor00x/goldap v0.0.0-20180618054307-a546dffdd1a3/go.mod h1:37YR9jabpiIxsb8X9VCIx8qFOjTDIIrIHHODa8C4gz0=
    594  -github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 h1:6E+4a0GO5zZEnZ81pIr0yLvtUWk2if982qA3F3QD6H4=
    595 597  github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I=
     598 +github.com/lufia/plan9stats v0.0.0-20220913051719-115f729f3c8c h1:VtwQ41oftZwlMnOEbMWQtSEUgU64U4s+GHk7hZK+jtY=
     599 +github.com/lufia/plan9stats v0.0.0-20220913051719-115f729f3c8c/go.mod h1:JKx41uQRwqlTZabZc+kILPrO/3jlKnQ2Z8b7YiVw5cE=
    596 600  github.com/lunixbochs/struc v0.0.0-20200707160740-784aaebc1d40 h1:EnfXoSqDfSNJv0VBNqY/88RNnhSGYkrHaO0mmFGbVsc=
    597 601  github.com/lunixbochs/struc v0.0.0-20200707160740-784aaebc1d40/go.mod h1:vy1vK6wD6j7xX6O6hXe621WabdtNkou2h7uRtTfRMyg=
    598 602  github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
    599  -github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
    600 603  github.com/magiconair/properties v1.8.6 h1:5ibWZ6iY0NctNGWo87LalDlEZ6R41TqbbDamhfG/Qzo=
    601 604  github.com/magiconair/properties v1.8.6/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60=
    602 605  github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0=
    skipped 2 lines
    605 608  github.com/masterzen/simplexml v0.0.0-20190410153822-31eea3082786/go.mod h1:kCEbxUJlNDEBNbdQMkPSp6yaKcRXVI6f4ddk8Riv4bc=
    606 609  github.com/masterzen/winrm v0.0.0-20220513085036-69f69afcd9e9 h1:DhrKMJR75+SJf7pb/mPjiF527ftzAw/91QeNS/HX8cg=
    607 610  github.com/masterzen/winrm v0.0.0-20220513085036-69f69afcd9e9/go.mod h1:Iju3u6NzoTAvjuhsGCZc+7fReNnr/Bd6DsWj3WTokIU=
    608  -github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
    609 611  github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ=
    610 612  github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
    611 613  github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
    612  -github.com/mattn/go-colorable v0.1.12 h1:jF+Du6AlPIjs2BiUiQlKOX0rt3SujHxPnksPKZbaA40=
    613  -github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4=
    614  -github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
     614 +github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
     615 +github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
    615 616  github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
     617 +github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
    616 618  github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
     619 +github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ=
    617 620  github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
    618 621  github.com/mattn/go-isatty v0.0.13/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
    619  -github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y=
    620 622  github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
    621  -github.com/mattn/go-runewidth v0.0.3/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
     623 +github.com/mattn/go-isatty v0.0.16 h1:bq3VjFmv/sOjHtdEhmkEV4x1AJtvUvOJ2PFAZ5+peKQ=
     624 +github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
    622 625  github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
    623 626  github.com/mattn/go-runewidth v0.0.13 h1:lTGmDsbAYt5DmK6OnoV7EuIF1wEIFAcxld6ypU4OSgU=
    624 627  github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
    625  -github.com/mattn/go-sqlite3 v1.14.12 h1:TJ1bhYJPV44phC+IMu1u2K/i5RriLTPe+yc68XDJ1Z0=
    626 628  github.com/mattn/go-sqlite3 v1.14.12/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU=
    627  -github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
     629 +github.com/mattn/go-sqlite3 v1.14.15 h1:vfoHhTN1af61xCRSWzFIWzx2YskyMTwHLrExkBOjvxI=
     630 +github.com/mattn/go-sqlite3 v1.14.15/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg=
     631 +github.com/mattn/goveralls v0.0.2/go.mod h1:8d1ZMHsd7fW6IRPKQh46F2WRpyib5/X4FOpevwGNQEw=
     632 +github.com/mediocregopher/mediocre-go-lib v0.0.0-20181029021733-cb65787f37ed/go.mod h1:dSsfyI2zABAdhcbvkXqgxOxrCsbYeHCPgrZkku60dSg=
     633 +github.com/mediocregopher/radix/v3 v3.3.0/go.mod h1:EmfVyvspXz1uZEyPBMyGK+kjWiKQGvsUt6O3Pj+LDCQ=
    628 634  github.com/mfonda/simhash v0.0.0-20151007195837-79f94a1100d6 h1:bjfMeqxWEJ6IRUvGkiTkSwx0a6UdQJsbirRSoXogteY=
    629 635  github.com/mfonda/simhash v0.0.0-20151007195837-79f94a1100d6/go.mod h1:WVJJvUw/pIOcwu2O8ZzHEhmigq2jzwRNfJVRMJB7bR8=
    630 636  github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE=
    skipped 2 lines
    633 639  github.com/mholt/acmez v1.0.4/go.mod h1:qFGLZ4u+ehWINeJZjzPlsnjJBCPAADWTcIqE/7DAYQY=
    634 640  github.com/mholt/archiver v3.1.1+incompatible h1:1dCVxuqs0dJseYEhi5pl7MYPH9zDa1wBi7mF09cbNkU=
    635 641  github.com/mholt/archiver v3.1.1+incompatible/go.mod h1:Dh2dOXnSdiLxRiPoVfIr/fI1TwETms9B8CTWfeh7ROU=
     642 +github.com/microcosm-cc/bluemonday v1.0.2/go.mod h1:iVP4YcDBq+n/5fb23BhYFvIMq/leAFZyRl6bYmGDlGc=
    636 643  github.com/microcosm-cc/bluemonday v1.0.18/go.mod h1:Z0r70sCuXHig8YpBzCc5eGHAap2K7e/u082ZUpDRRqM=
    637  -github.com/microcosm-cc/bluemonday v1.0.19 h1:OI7hoF5FY4pFz2VA//RN8TfM0YJ2dJcl4P4APrCWy6c=
    638 644  github.com/microcosm-cc/bluemonday v1.0.19/go.mod h1:QNzV2UbLK2/53oIIwTOyLUSABMkjZ4tqiyC1g/DyqxE=
    639  -github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
     645 +github.com/microcosm-cc/bluemonday v1.0.20 h1:flpzsq4KU3QIYAYGV/szUat7H+GPOXR0B2JU5A1Wp8Y=
     646 +github.com/microcosm-cc/bluemonday v1.0.20/go.mod h1:yfBmMi8mxvaZut3Yytv+jTXRY8mxyjJ0/kQBTElld50=
    640 647  github.com/miekg/dns v1.1.29/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM=
    641 648  github.com/miekg/dns v1.1.35/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM=
    642 649  github.com/miekg/dns v1.1.41/go.mod h1:p6aan82bvRIyn+zDIv9xYNUpwa73JcSh9BKwknJysuI=
    skipped 3 lines
    646 653  github.com/miekg/dns v1.1.50/go.mod h1:e3IlAVfNqAllflbibAZEWOXOQ+Ynzk/dDozDxY7XnME=
    647 654  github.com/minio/minio-go/v6 v6.0.46/go.mod h1:qD0lajrGW49lKZLtXKtCB4X/qkMf0a5tBvN2PaZg7Gg=
    648 655  github.com/minio/sha256-simd v0.1.1/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM=
    649  -github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc=
    650  -github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
    651 656  github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y=
    652 657  github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
    653  -github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI=
    654  -github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg=
    655  -github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY=
    656  -github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
    657 658  github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
    658 659  github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
    659 660  github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
    skipped 6 lines
    666 667  github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
    667 668  github.com/modocache/gover v0.0.0-20171022184752-b58185e213c5/go.mod h1:caMODM3PzxT8aQXRPkAt8xlV/e7d7w8GM5g0fa5F0D8=
    668 669  github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc=
     670 +github.com/montanaflynn/stats v0.6.6 h1:Duep6KMIDpY4Yo11iFsvyqJDyfzLF9+sndUKT+v64GQ=
     671 +github.com/montanaflynn/stats v0.6.6/go.mod h1:etXPPgVO6n31NxCd9KQUMvCM+ve0ruNzt6R8Bnaayow=
     672 +github.com/moul/http2curl v1.0.0/go.mod h1:8UbvGypXm98wA/IqH45anm5Y2Z6ep6O31QGOAZ3H0fQ=
    669 673  github.com/mreiferson/go-httpclient v0.0.0-20160630210159-31f0106b4474/go.mod h1:OQA4XLvDbMgS8P0CevmM4m9Q3Jq4phKUzcocxuGJ5m8=
    670  -github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
     674 +github.com/nats-io/nats.go v1.8.1/go.mod h1:BrFz9vVn0fU3AcH9Vn4Kd7W0NpJ651tD5omQ3M8LwxM=
     675 +github.com/nats-io/nkeys v0.0.2/go.mod h1:dab7URMsZm6Z/jp9Z5UGa87Uutgc2mVpXLC4B7TDb/4=
     676 +github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c=
    671 677  github.com/ngdinhtoan/glide-cleanup v0.2.0/go.mod h1:UQzsmiDOb8YV3nOsCxK/c9zPpCZVNoHScRE3EO9pVMM=
    672  -github.com/nwaples/rardecode v1.1.2 h1:Cj0yZY6T1Zx1R7AhTbyGSALm44/Mmq+BAPc4B/p/d3M=
    673 678  github.com/nwaples/rardecode v1.1.2/go.mod h1:5DzqNKiOdpKKBH87u8VlvAnPZMXcGRhxWkRpHbbfGS0=
     679 +github.com/nwaples/rardecode v1.1.3 h1:cWCaZwfM5H7nAD6PyEdcVnczzV8i/JtotnyW/dD9lEc=
     680 +github.com/nwaples/rardecode v1.1.3/go.mod h1:5DzqNKiOdpKKBH87u8VlvAnPZMXcGRhxWkRpHbbfGS0=
    674 681  github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A=
    675  -github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE=
    676 682  github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU=
    677  -github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U=
    678 683  github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec=
    679 684  github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY=
    680 685  github.com/olivere/elastic v6.2.37+incompatible h1:UfSGJem5czY+x/LqxgeCBgjDn6St+z8OnsCuxwD3L0U=
    skipped 2 lines
    683 688  github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
    684 689  github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
    685 690  github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk=
     691 +github.com/onsi/ginkgo v1.13.0/go.mod h1:+REjRxOmWfHCjfv9TTWB1jD1Frx4XydAD3zm1lskyM0=
    686 692  github.com/onsi/ginkgo v1.15.0/go.mod h1:hF8qUzuuC8DJGygJH3726JnCZX4MYbRB8yFfISqnKUg=
    687  -github.com/onsi/ginkgo v1.16.4 h1:29JGrr5oVBm5ulCWet69zQkzWipVXIol6ygQUe/EzNc=
    688  -github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0=
    689 693  github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
    690 694  github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
    691 695  github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
    692 696  github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY=
    693 697  github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
    694 698  github.com/onsi/gomega v1.10.5/go.mod h1:gza4q3jKQJijlu05nKWRCW/GavJumGt8aNRxWg7mt48=
    695  -github.com/onsi/gomega v1.16.0 h1:6gjqkI8iiRHMvdccRJM8rVKjCWk6ZIm6FTm3ddIe4/c=
    696  -github.com/onsi/gomega v1.16.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY=
    697 699  github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk=
    698 700  github.com/openrdap/rdap v0.9.1-0.20191017185644-af93e7ef17b7 h1:3Xn/CN6GVY+7mVuGgt5bfp0F9JwcWqnvwfb23Jf8Vxg=
    699 701  github.com/openrdap/rdap v0.9.1-0.20191017185644-af93e7ef17b7/go.mod h1:inRbqVxN7ri77yTJY3ZtGtKegIFa3Qnarh7Xp9P7LgY=
    700  -github.com/orisano/pixelmatch v0.0.0-20210112091706-4fa4c7ba91d5 h1:1SoBaSPudixRecmlHXb/GxmaD3fLMtHIDN13QujwQuc=
    701 702  github.com/orisano/pixelmatch v0.0.0-20210112091706-4fa4c7ba91d5/go.mod h1:nZgzbfBr3hhjoZnS66nKrHmduYNpc34ny7RK4z5/HM0=
    702 703  github.com/owenrumney/go-sarif v1.0.11/go.mod h1:hTBFbxU7GuVRUvwMx+eStp9M/Oun4xHCS3vqpPvket8=
    703 704  github.com/owenrumney/go-sarif v1.1.1/go.mod h1:dNDiPlF04ESR/6fHlPyq7gHKmrM0sHUvAGjsoh8ZH0U=
    704 705  github.com/owenrumney/go-sarif/v2 v2.1.2 h1:PMDK7tXShJ9zsB7bfvlpADH5NEw1dfA9xwU8Xtdj73U=
    705 706  github.com/owenrumney/go-sarif/v2 v2.1.2/go.mod h1:MSqMMx9WqlBSY7pXoOZWgEsVB4FDNfhcaXDA1j6Sr+w=
    706  -github.com/panjf2000/ants/v2 v2.2.2 h1:TWzusBjq/IflXhy+/S6u5wmMLCBdJnB9tPIx9Zmhvok=
    707 707  github.com/panjf2000/ants/v2 v2.2.2/go.mod h1:1GFm8bV8nyCQvU5K4WvBCTG1/YBFOD2VzjffD8fV55A=
    708  -github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
     708 +github.com/panjf2000/ants/v2 v2.5.0 h1:1rWGWSnxCsQBga+nQbA4/iY6VMeNoOIAM0ZWh9u3q2Q=
     709 +github.com/panjf2000/ants/v2 v2.5.0/go.mod h1:cU93usDlihJZ5CfRGNDYsiBYvoilLvBF5Qp/BT2GNRE=
    709 710  github.com/patrickmn/go-cache v2.1.0+incompatible h1:HRMgzkcYKYpi3C8ajMPV8OFXaaRUnok+kx1WdO15EQc=
    710 711  github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ=
    711 712  github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
    712 713  github.com/pelletier/go-toml v1.9.5 h1:4yBQzkHv+7BHq2PQUZF3Mx0IYxG7LsP222s7Agd3ve8=
    713 714  github.com/pelletier/go-toml v1.9.5/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c=
    714  -github.com/pelletier/go-toml/v2 v2.0.1 h1:8e3L2cCQzLFi2CR4g7vGFuFxX7Jl1kKX8gW+iV0GUKU=
    715  -github.com/pelletier/go-toml/v2 v2.0.1/go.mod h1:r9LEWfGN8R5k0VXJ+0BkIe7MYkRdwZOjgMj2KwnJFUo=
     715 +github.com/pelletier/go-toml/v2 v2.0.5 h1:ipoSadvV8oGUjnUbMub59IDPPwfxF694nG/jwbMiyQg=
     716 +github.com/pelletier/go-toml/v2 v2.0.5/go.mod h1:OMHamSCAODeSsVrwwvcJOaoN0LIUIaFVNZzmWyNfXas=
    716 717  github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 h1:Ii+DKncOVM8Cu1Hc+ETb5K+23HdAMvESYE3ZJ5b5cMI=
    717 718  github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5/go.mod h1:iIss55rKnNBTvrwdmkUpLnDpZoAHvWaiq5+iMmen4AE=
    718 719  github.com/pierrec/lz4 v2.6.1+incompatible h1:9UY3+iC23yxF0UfGaYrGplQ+79Rg+h/q9FV9ix19jjM=
    719 720  github.com/pierrec/lz4 v2.6.1+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY=
     721 +github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8=
    720 722  github.com/pkg/browser v0.0.0-20180916011732-0a3d74bf9ce4/go.mod h1:4OwLy04Bl9Ef3GJJCoec+30X3LQs/0/m4HFRt/2LUSA=
    721 723  github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA=
    722  -github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
    723 724  github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
    724 725  github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
    725 726  github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
    726 727  github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg=
    727 728  github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
    728 729  github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
    729  -github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI=
    730  -github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c h1:ncq/mPwQF4JjgDlrVEn3C11VoGHZN7m8qihwgMEtzYw=
    731 730  github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE=
     731 +github.com/power-devops/perfstat v0.0.0-20220216144756-c35f1ee13d7c h1:NRoLoZvkBTKvR5gQLgA3e0hqjkY9u1wm+iOL45VN/qI=
     732 +github.com/power-devops/perfstat v0.0.0-20220216144756-c35f1ee13d7c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE=
    732 733  github.com/projectdiscovery/blackrock v0.0.0-20210415162320-b38689ae3a2e/go.mod h1:/IsapnEYiWG+yEDPXp0e8NWj3npzB9Ccy9lXEUJwMZs=
    733 734  github.com/projectdiscovery/blackrock v0.0.0-20210903102120-5a9d2412d21d/go.mod h1:/IsapnEYiWG+yEDPXp0e8NWj3npzB9Ccy9lXEUJwMZs=
    734 735  github.com/projectdiscovery/blackrock v0.0.0-20220628111055-35616c71b2dc h1:jqZK68yPOnNNRmwuXqytl+T9EbwneEUCvMDRjLe0J04=
    735 736  github.com/projectdiscovery/blackrock v0.0.0-20220628111055-35616c71b2dc/go.mod h1:5tNGQP9kOfW+X5+40pZP8aqPYLHs45nJkFaSHLxdeH8=
    736 737  github.com/projectdiscovery/cdncheck v0.0.4-0.20220322144854-b2d8ce308abb h1:Q7tb/p2ts+dT+v4nQpxTR0DSng2C1Hlnrw/NE4tgGZw=
    737 738  github.com/projectdiscovery/cdncheck v0.0.4-0.20220322144854-b2d8ce308abb/go.mod h1:EevMeCG1ogBoUJYaa0Mv9R1VUboDm/DiynId7DboKy0=
    738  -github.com/projectdiscovery/chaos-client v0.2.0 h1:a6B0HGAUdlpU4YR0o7j70GaY/PkEdtrP9VsRacfEeng=
    739  -github.com/projectdiscovery/chaos-client v0.2.0/go.mod h1:6A43jvxrzIS93GZXUlrHfqr8jDZO4g/QCr6At1h9r2U=
     739 +github.com/projectdiscovery/chaos-client v0.3.0 h1:A4NgOYRCrlsSZUBTCT2HAT/uTEJly17+nWcXHRXR+Ko=
     740 +github.com/projectdiscovery/chaos-client v0.3.0/go.mod h1:AWx/KZgtBE5SULpsgyQLLfb+SQgVtCih83gvRtTpwl4=
    740 741  github.com/projectdiscovery/clistats v0.0.8 h1:tjmWb15mqsPf/yrQXVHLe2ThZX/5+mgKSfZBKWWLh20=
    741 742  github.com/projectdiscovery/clistats v0.0.8/go.mod h1:lV6jUHAv2bYWqrQstqW8iVIydKJhWlVaLl3Xo9ioVGg=
    742 743  github.com/projectdiscovery/cryptoutil v0.0.0-20210805184155-b5d2512f9345/go.mod h1:clhQmPnt35ziJW1AhJRKyu8aygXCSoyWj6dtmZBRjjc=
    743 744  github.com/projectdiscovery/cryptoutil v1.0.0 h1:5rQfnWDthJ5ZFcqze+rmT1N7l1HJQ6EB26MrjaYB7I0=
    744 745  github.com/projectdiscovery/cryptoutil v1.0.0/go.mod h1:VJvSNE8f8A1MgpjgAL2GPJSQcJa4jbdaeQJstARFrU4=
    745  -github.com/projectdiscovery/dnsx v1.0.9 h1:vxwtFY3VJKlaGHMIQDhlMK85Q5rUw+d7So2v8ySM0L4=
    746  -github.com/projectdiscovery/dnsx v1.0.9/go.mod h1:qhKPLHO9uUvNGlokc3sAdGCOU7OZliiuroCpyGawkgk=
     746 +github.com/projectdiscovery/dnsx v1.1.0 h1:Wjtx4BJQBemIk+Jaibf6bmisPHgovXfX+V1iH+pJ2YU=
     747 +github.com/projectdiscovery/dnsx v1.1.0/go.mod h1:TtcjQcFABuFIN7C+jOQ00PX41UnXp6aU3V9/O1hc0YE=
    747 748  github.com/projectdiscovery/fastdialer v0.0.12/go.mod h1:RkRbxqDCcCFhfNUbkzBIz/ieD4uda2JuUA4WJ+RLee0=
    748 749  github.com/projectdiscovery/fastdialer v0.0.15/go.mod h1:Q28lw9oTpiZHq09uFG6YYYLUsUjsOypZ7PXWwQGBB80=
    749 750  github.com/projectdiscovery/fastdialer v0.0.16-0.20220609092737-7e3c7dcecf16 h1:oinl80GbA16c6Et6YxcYw/QfwsZgRE0ZswxL43/MNhY=
    750 751  github.com/projectdiscovery/fastdialer v0.0.16-0.20220609092737-7e3c7dcecf16/go.mod h1:/l2A7NuQPkHH4mDyScm4N9cDltPB1XMhE5y+9mt00Ak=
     752 +github.com/projectdiscovery/fastdialer v0.0.16 h1:0FcWVAtm6ftVALQpckdlKTeZcJi277HduvGXsBDO02Q=
     753 +github.com/projectdiscovery/fastdialer v0.0.16/go.mod h1:poZbCGYGRfRcKxU8/1rWH8EVOJ4AZn1a8+CyINHzffQ=
    751 754  github.com/projectdiscovery/fdmax v0.0.3 h1:FM6lv9expZ/rEEBI9tkRh6tx3DV0gtpwzdc0h7bGPqg=
    752 755  github.com/projectdiscovery/fdmax v0.0.3/go.mod h1:NWRcaR7JTO7fC27H4jCl9n7Z+KIredwpgw1fV+4KrKI=
    753 756  github.com/projectdiscovery/filekv v0.0.0-20210915124239-3467ef45dd08 h1:NwD1R/du1dqrRKN3SJl9kT6tN3K9puuWFXEvYF2ihew=
    skipped 1 lines
    755 758  github.com/projectdiscovery/fileutil v0.0.0-20210914153648-31f843feaad4/go.mod h1:U+QCpQnX8o2N2w0VUGyAzjM3yBAe4BKedVElxiImsx0=
    756 759  github.com/projectdiscovery/fileutil v0.0.0-20210926202739-6050d0acf73c/go.mod h1:U+QCpQnX8o2N2w0VUGyAzjM3yBAe4BKedVElxiImsx0=
    757 760  github.com/projectdiscovery/fileutil v0.0.0-20210928100737-cab279c5d4b5/go.mod h1:U+QCpQnX8o2N2w0VUGyAzjM3yBAe4BKedVElxiImsx0=
     761 +github.com/projectdiscovery/fileutil v0.0.0-20220308101036-16c79af1cf5d/go.mod h1:Pm0f+MWgDFMSSI9NBedNh48LyYPs8gD3Jd8DXGmp4aQ=
    758 762  github.com/projectdiscovery/fileutil v0.0.0-20220506114156-c4ab20801483/go.mod h1:wjS/oBWbzlayJ/aTK0KW0oOHGO03G8oEYzuN6stI8Ho=
    759  -github.com/projectdiscovery/fileutil v0.0.0-20220705195237-01becc2a8963 h1:4o97N9ftX1J3iKlIRVMPVOVZs4qbCczJvoFF2WA40t4=
     763 +github.com/projectdiscovery/fileutil v0.0.0-20220609150212-453ac591c36c/go.mod h1:g8wsrb0S5NtEN0JgVyyPeb3FQdArx+UMESmFX94bcGY=
    760 764  github.com/projectdiscovery/fileutil v0.0.0-20220705195237-01becc2a8963/go.mod h1:DaY7wmLPMleyHDCD/14YApPCDtrARY4J8Eny2ZGsG/g=
    761  -github.com/projectdiscovery/folderutil v0.0.0-20220215113126-add60a1e8e08 h1:m1pgJisawU7zP9lKGktOEk6KNrNAR7e4Q07Kt3ox0NM=
     765 +github.com/projectdiscovery/fileutil v0.0.0-20220914162323-93b17254e41b h1:LnOCuLJ1MjGhKnBMfeytZMBtJUwY81jBE7cUH27mA7E=
     766 +github.com/projectdiscovery/fileutil v0.0.0-20220914162323-93b17254e41b/go.mod h1:Oo6ZEvXmQz/xPF0YukzmwpdW2LYinWCSEmzZOQsJCLg=
    762 767  github.com/projectdiscovery/folderutil v0.0.0-20220215113126-add60a1e8e08/go.mod h1:BMqXH4jNGByVdE2iLtKvc/6XStaiZRuCIaKv1vw9PnI=
     768 +github.com/projectdiscovery/folderutil v0.0.0-20220523100846-d6161a49c221 h1:1ZHNubiIB/HG0xdyZ7SBwlIHO/SPEXmXfzfRlt7KyeU=
     769 +github.com/projectdiscovery/folderutil v0.0.0-20220523100846-d6161a49c221/go.mod h1:BMqXH4jNGByVdE2iLtKvc/6XStaiZRuCIaKv1vw9PnI=
    763 770  github.com/projectdiscovery/goconfig v0.0.0-20210804090219-f893ccd0c69c h1:1XRSp+44bhWudAWz+2+wHYJBHvDfE8mk9uWpzX+DU9k=
    764 771  github.com/projectdiscovery/goconfig v0.0.0-20210804090219-f893ccd0c69c/go.mod h1:mBv7GRD5n3WNbFE9blG8ynzXTM5eh9MmwaK6EOyn6Pk=
    765 772  github.com/projectdiscovery/goflags v0.0.7/go.mod h1:Jjwsf4eEBPXDSQI2Y+6fd3dBumJv/J1U0nmpM+hy2YY=
    766 773  github.com/projectdiscovery/goflags v0.0.8-0.20220426153734-2ffbfbff923c/go.mod h1:uN+pHMLsWQoiZHUg/l0tqf/VdbX3+ecKfYz/H7b/+NA=
    767 774  github.com/projectdiscovery/goflags v0.0.8-0.20220610073650-5d31a8c159e3 h1:2cUSicd6wkd7A3P+tjjAYiPmD99FtWp4k2curJkcrJ0=
    768 775  github.com/projectdiscovery/goflags v0.0.8-0.20220610073650-5d31a8c159e3/go.mod h1:Np0EwqmopHDDb1cY4/NEBaC4fornMIWc6dr5yL91kzM=
     776 +github.com/projectdiscovery/goflags v0.0.8 h1:IhTmnEGSKtBHfD23tSwpnzai5CRYfLKVOWlVq9ngYvY=
     777 +github.com/projectdiscovery/goflags v0.0.8/go.mod h1:GDSkWyXa6kfQjpJu10SO64DN8lXuKXVENlBMk8N7H80=
     778 +github.com/projectdiscovery/goflags v0.0.10-0.20220912115102-d9ea875a0a6a h1:m/eXb33ECH86slvT09YFTmuMqPMIAIloODHjW2bTeNY=
     779 +github.com/projectdiscovery/goflags v0.0.10-0.20220912115102-d9ea875a0a6a/go.mod h1:/YBPA+1igSkQbwD7a91o0HUIwMDlsmQDRZL2oSYSyEQ=
    769 780  github.com/projectdiscovery/gologger v1.0.1/go.mod h1:Ok+axMqK53bWNwDSU1nTNwITLYMXMdZtRc8/y1c7sWE=
    770 781  github.com/projectdiscovery/gologger v1.1.4 h1:qWxGUq7ukHWT849uGPkagPKF3yBPYAsTtMKunQ8O2VI=
    771 782  github.com/projectdiscovery/gologger v1.1.4/go.mod h1:Bhb6Bdx2PV1nMaFLoXNBmHIU85iROS9y1tBuv7T5pMY=
    772 783  github.com/projectdiscovery/hmap v0.0.1/go.mod h1:VDEfgzkKQdq7iGTKz8Ooul0NuYHQ8qiDs6r8bPD1Sb0=
    773 784  github.com/projectdiscovery/hmap v0.0.2-0.20210616215655-7b78e7f33d1f/go.mod h1:FH+MS/WNKTXJQtdRn+/Zg5WlKCiMN0Z1QUedUIuM5n8=
    774  -github.com/projectdiscovery/hmap v0.0.2-0.20210917080408-0fd7bd286bfa h1:9sZWFUAshIa/ea0RKjGRuuZiS5PzYXAFjTRUnSbezr0=
    775 785  github.com/projectdiscovery/hmap v0.0.2-0.20210917080408-0fd7bd286bfa/go.mod h1:lV5f/PNPmCCjCN/dR317/chN9s7VG5h/xcbFfXOz8Fo=
    776  -github.com/projectdiscovery/httputil v0.0.0-20210906072657-f3a099cb20bc h1:C0L6pUvVI+sPJSBaPQJEG/HjPtg8Mgs2vEpsdrl064A=
    777  -github.com/projectdiscovery/httputil v0.0.0-20210906072657-f3a099cb20bc/go.mod h1:BueJPSPWAX11IFS6bdAqTkekiIz5Fgco5LVc1kqO9L4=
     786 +github.com/projectdiscovery/hmap v0.0.2 h1:fe3k0b6tj95mn9a1phD3JXvAAOmmWAh/Upg1Bf0Tfos=
     787 +github.com/projectdiscovery/hmap v0.0.2/go.mod h1:YU3TeNTDmLW2dtb4LvuEtDsPTsQ06XMnmOeD3KOuU6c=
     788 +github.com/projectdiscovery/httputil v0.0.0-20210913064028-815c8db933ff h1:7PH2QB1tyQHyg+Nw8WpRz/POfDl4yvB/MVD4KBiDr/E=
     789 +github.com/projectdiscovery/httputil v0.0.0-20210913064028-815c8db933ff/go.mod h1:BueJPSPWAX11IFS6bdAqTkekiIz5Fgco5LVc1kqO9L4=
    778 790  github.com/projectdiscovery/interactsh v0.0.4/go.mod h1:PtJrddeBW1/LeOVgTvvnjUl3Hu/17jTkoIi8rXeEODE=
    779 791  github.com/projectdiscovery/interactsh v1.0.6 h1:nuJmJ9zSUiG5tcgwgtkFdXpYghuB+i+OuvohXSCPhxo=
    780 792  github.com/projectdiscovery/interactsh v1.0.6/go.mod h1:xyFWrqgMRJMrd19tPLdjtIOsg/kUhIAUXp+Yg+yoAvg=
     793 +github.com/projectdiscovery/ipranger v0.0.2 h1:5GcKu+4QWNzD38IJZc3mFBrqboDix6cfJkcn2RsJFGM=
    781 794  github.com/projectdiscovery/ipranger v0.0.2/go.mod h1:kcAIk/lo5rW+IzUrFkeYyXnFJ+dKwYooEOHGVPP/RWE=
    782 795  github.com/projectdiscovery/ipranger v0.0.3-0.20210831161617-ac80efae0961 h1:WqZewGI1Oe8uAwiFaHb8NNM1CLxoxxy6OV5NNePmyxM=
    783 796  github.com/projectdiscovery/ipranger v0.0.3-0.20210831161617-ac80efae0961/go.mod h1:lh3xQA3Hv7PSwA5t0L9MwTq/mhE6io7zMXmiKHxrxGg=
     797 +github.com/projectdiscovery/ipranger v0.0.3 h1:U60Dp6gHJ08PLMsKAWzHlnjE+8q01BhnUiDfjAjc7Gk=
     798 +github.com/projectdiscovery/ipranger v0.0.3/go.mod h1:pb7qOZyXI6n9Z5izLZmkTiunaBBbdqYEh6+y435b6CU=
    784 799  github.com/projectdiscovery/iputil v0.0.0-20210414194613-4b4d2517acf0/go.mod h1:PQAqn5h5NXsQTF4ZA00ZTYLRzGCjOtcCq8llAqrsd1A=
    785 800  github.com/projectdiscovery/iputil v0.0.0-20210429152401-c18a5408ca46/go.mod h1:PQAqn5h5NXsQTF4ZA00ZTYLRzGCjOtcCq8llAqrsd1A=
    786 801  github.com/projectdiscovery/iputil v0.0.0-20210804143329-3a30fcde43f3/go.mod h1:blmYJkS8lSrrx3QcmcgS2tZIxlojeVmoGeA9twslCBU=
    787 802  github.com/projectdiscovery/iputil v0.0.0-20220620153941-036d511e4097 h1:hPFYljvvgbvH+oTPtixCTruvR8uecCBON4C74xOUMFY=
    788 803  github.com/projectdiscovery/iputil v0.0.0-20220620153941-036d511e4097/go.mod h1:+27oPnef3nuy3NfYp6WGfUH/xcHYgSw0n0rlialTk+w=
     804 +github.com/projectdiscovery/iputil v0.0.0-20220625072148-037479960416/go.mod h1:bst7imnXn0ckAw4sToXLHLm62HisFGnS4QlxOkE4mYQ=
     805 +github.com/projectdiscovery/iputil v0.0.0-20220712175312-b9406f31cdd8 h1:HRqev12wKvcwK1fe4pSlMfQdPHo9LfTxuFeRN4f3tS4=
     806 +github.com/projectdiscovery/iputil v0.0.0-20220712175312-b9406f31cdd8/go.mod h1:vHRC+9exsfSbEngMKDl0xiWqkxlLk3lHQZpbS2yFT8U=
    789 807  github.com/projectdiscovery/mapcidr v0.0.4/go.mod h1:ALOIj6ptkWujNoX8RdQwB2mZ+kAmKuLJBq9T5gR5wG0=
    790 808  github.com/projectdiscovery/mapcidr v0.0.6/go.mod h1:ZEBhMmBU3laUl3g9QGTrzJku1VJOzjdFwW01f/zVVzM=
    791 809  github.com/projectdiscovery/mapcidr v0.0.7/go.mod h1:7CzdUdjuLVI0s33dQ33lWgjg3vPuLFw2rQzZ0RxkT00=
    792 810  github.com/projectdiscovery/mapcidr v0.0.8/go.mod h1:7CzdUdjuLVI0s33dQ33lWgjg3vPuLFw2rQzZ0RxkT00=
    793 811  github.com/projectdiscovery/mapcidr v1.0.0 h1:4ctYAgkxaLeky3o3c+qMgHoUjytYy6DME2fjbgiB1Ag=
    794 812  github.com/projectdiscovery/mapcidr v1.0.0/go.mod h1:5QkKrV6rNQQurCZI3nNedFsAOYp04mRDkC5yht+znYA=
     813 +github.com/projectdiscovery/mapcidr v1.0.1 h1:eaLBRrImwlYXv8vbXTwR4sxoQqIxR3Y5k/Sd7HhTIII=
     814 +github.com/projectdiscovery/mapcidr v1.0.1/go.mod h1:/qxlpxXZQFFjHynSc9u5O0kUPzH46VskECiwLiz7/vw=
     815 +github.com/projectdiscovery/mapcidr v1.0.2 h1:ewn7hoZz8P1TJ4VqG//XMlQKg5zhj2hnEx3C9jf3sQA=
     816 +github.com/projectdiscovery/mapcidr v1.0.2/go.mod h1:9OuUDjA+FilmXToex0xMfQb0os6qMaoiuZCksai0asY=
    795 817  github.com/projectdiscovery/networkpolicy v0.0.0-20210414200240-b3fa8abf324c/go.mod h1:KZIP5x7t+bH2dASgnYaqbiLI4z0gxXzekwUtarrQMdc=
    796  -github.com/projectdiscovery/networkpolicy v0.0.1 h1:RGRuPlxE8WLFF9tdKSjTsYiTIKHNHW20Kl0nGGiRb1I=
    797 818  github.com/projectdiscovery/networkpolicy v0.0.1/go.mod h1:asvdg5wMy3LPVMGALatebKeOYH5n5fV5RCTv6DbxpIs=
     819 +github.com/projectdiscovery/networkpolicy v0.0.2-0.20220525172507-b844eafc878d h1:QXaK3yzoEWI8n+hLAqEgTJEWhkp1WZM8ThbKwrlXFks=
     820 +github.com/projectdiscovery/networkpolicy v0.0.2-0.20220525172507-b844eafc878d/go.mod h1:asvdg5wMy3LPVMGALatebKeOYH5n5fV5RCTv6DbxpIs=
    798 821  github.com/projectdiscovery/nuclei-updatecheck-api v0.0.0-20211006155443-c0a8d610a4df/go.mod h1:pxWVDgq88t9dWv4+J2AIaWgY+EqOE1AyfHS0Tn23w4M=
    799 822  github.com/projectdiscovery/nuclei-updatecheck-api v0.0.0-20220726130814-981d44a34f84 h1:PD27xMJF6z81zKIPB6wC4ZA7vBxM4ChV3sFTYdma4/8=
    800 823  github.com/projectdiscovery/nuclei-updatecheck-api v0.0.0-20220726130814-981d44a34f84/go.mod h1:l7yVNUvTqLvwhwnGa/T28457Y/axOoXPOPbNen/Jmpg=
    skipped 13 lines
    814 837  github.com/projectdiscovery/retryabledns v1.0.13-0.20210916165024-76c5b76fd59a/go.mod h1:tXaLDs4n3pRZHwfa8mdXpUWe/AYDNK3HlWDjldhRbjI=
    815 838  github.com/projectdiscovery/retryabledns v1.0.13 h1:Ogfv0fl3Nszb+Nq2S2qQmE+PJDlStVxyLkmTotMohZY=
    816 839  github.com/projectdiscovery/retryabledns v1.0.13/go.mod h1:EeqHcAPp0g2GljT4qkxKSAE47Dj0ZrJQ46R9ct3Muhk=
     840 +github.com/projectdiscovery/retryabledns v1.0.15 h1:3Nn119UwYsfUPC3g0q57ftz0Wb5Zl5ppvw8R0Xu0DEI=
     841 +github.com/projectdiscovery/retryabledns v1.0.15/go.mod h1:3YbsQVqP7jbQ3CDmarhyVtkJaJ8XcB7S19vMeyMxZxk=
    817 842  github.com/projectdiscovery/retryablehttp-go v1.0.1/go.mod h1:SrN6iLZilNG1X4neq1D+SBxoqfAF4nyzvmevkTkWsek=
    818 843  github.com/projectdiscovery/retryablehttp-go v1.0.2/go.mod h1:dx//aY9V247qHdsRf0vdWHTBZuBQ2vm6Dq5dagxrDYI=
    819 844  github.com/projectdiscovery/retryablehttp-go v1.0.3-0.20220506110515-811d938bd26d h1:VR+tDkedzHIp1pGKIDcfPFt7J8KjcjxGsJvBAP6RXFQ=
    820 845  github.com/projectdiscovery/retryablehttp-go v1.0.3-0.20220506110515-811d938bd26d/go.mod h1:t4buiLTB0HtI+62iHfGDqQVTv/i+8OhAKwaX93TGsFE=
    821 846  github.com/projectdiscovery/sliceutil v0.0.0-20220511171050-c7d9bc5cadd9/go.mod h1:crCchiT/KYrAlEY8JbuMGE6XKym61mhAd1E7REq2VwQ=
     847 +github.com/projectdiscovery/sliceutil v0.0.0-20220617151003-15892688e1d6/go.mod h1:9YZb6LRjLYAvSOm65v787dwauurixSyjlqXyYa4rTTA=
    822 848  github.com/projectdiscovery/sliceutil v0.0.0-20220625085859-c3a4ecb669f4 h1:C04j5gVVMXqFyBIetAz92SyPRYCpkFgIwZw0L/pps9Q=
    823 849  github.com/projectdiscovery/sliceutil v0.0.0-20220625085859-c3a4ecb669f4/go.mod h1:RxDaccMjPzIuF7F8XbdGl1yOcqxN4YPiHr9xHpfCkGI=
    824 850  github.com/projectdiscovery/stringsutil v0.0.0-20210524051937-51dabe3b72c0/go.mod h1:TVSdZC0rRQeMIbsNSiGPhbmhyRtxqqtAGA9JiiNp2r4=
    825 851  github.com/projectdiscovery/stringsutil v0.0.0-20210804142656-fd3c28dbaafe/go.mod h1:oTRc18WBv9t6BpaN9XBY+QmG28PUpsyDzRht56Qf49I=
    826 852  github.com/projectdiscovery/stringsutil v0.0.0-20210823090203-2f5f137e8e1d/go.mod h1:oTRc18WBv9t6BpaN9XBY+QmG28PUpsyDzRht56Qf49I=
    827 853  github.com/projectdiscovery/stringsutil v0.0.0-20210830151154-f567170afdd9/go.mod h1:oTRc18WBv9t6BpaN9XBY+QmG28PUpsyDzRht56Qf49I=
    828  -github.com/projectdiscovery/stringsutil v0.0.0-20220120150443-138d7af18587/go.mod h1:oTRc18WBv9t6BpaN9XBY+QmG28PUpsyDzRht56Qf49I=
     854 +github.com/projectdiscovery/stringsutil v0.0.0-20220208075244-7c05502ca8e9/go.mod h1:oTRc18WBv9t6BpaN9XBY+QmG28PUpsyDzRht56Qf49I=
    829 855  github.com/projectdiscovery/stringsutil v0.0.0-20220422150559-b54fb5dc6833/go.mod h1:oTRc18WBv9t6BpaN9XBY+QmG28PUpsyDzRht56Qf49I=
    830 856  github.com/projectdiscovery/stringsutil v0.0.0-20220612082425-0037ce9f89f3 h1:EbP+rVR7NPsFKfwhzshmXP2GMjqBpaMZurJzQ5PYvbY=
    831 857  github.com/projectdiscovery/stringsutil v0.0.0-20220612082425-0037ce9f89f3/go.mod h1:mF5sh4jTghoGWwgUb9qWi5waTFklClDbtrqtJU93awc=
     858 +github.com/projectdiscovery/stringsutil v0.0.0-20220731064040-4b67f194751e/go.mod h1:32NYmKyHkKsmisAOAaWrR15lz2ysz2M8x3KMeeoRHoU=
     859 +github.com/projectdiscovery/stringsutil v0.0.1 h1:a6TCMT+D1aUsoZxNiYf9O30wiDOoLOHDwj89HBjr5BQ=
     860 +github.com/projectdiscovery/stringsutil v0.0.1/go.mod h1:TDi2LEqR3OML0BxGoMbbfAHSk5AdfHX762Oc302sgmM=
    832 861  github.com/projectdiscovery/subfinder/v2 v2.5.2 h1:LER32P30jaYgaKN1N0b++bympCGBvKXmhw2SWZUg0w4=
    833 862  github.com/projectdiscovery/subfinder/v2 v2.5.2/go.mod h1:W6FHvG0NFhj45HzYB9SGWwg4XMTBupahzDTShJvcw+Q=
     863 +github.com/projectdiscovery/subfinder/v2 v2.5.3 h1:GF3klucf9ePXzkxis9Urexmr0yUki+TEiEdMaKh64A4=
     864 +github.com/projectdiscovery/subfinder/v2 v2.5.3/go.mod h1:U2O0MA+jQzedpo1SvRZMEu5y+ZQ5c7DrrE08RkXF6Fk=
    834 865  github.com/projectdiscovery/uncover v0.0.5 h1:x6+96/5WwHhZxkWubTnUdNmoGdg/UIO2rwkL9VOxwmk=
    835 866  github.com/projectdiscovery/uncover v0.0.5/go.mod h1:LF8NewLQXa0mI5H/6ASDy9/4sxghCTAXAhGkhKG1kb8=
     867 +github.com/projectdiscovery/uncover v0.0.6 h1:V44qqGtm7xx0sVTVvuAlQ4p8LAgfShSDeXQP1l4SxOg=
     868 +github.com/projectdiscovery/uncover v0.0.6/go.mod h1:EXhp8F74rxWFRL7RMXQA8+2lPftH+PGjB7CyvecxkHo=
     869 +github.com/projectdiscovery/uncover v0.0.8 h1:/Lykj/95uFb/HTq20TCskRo+VVJH3IH8v38+x2eY4ok=
     870 +github.com/projectdiscovery/uncover v0.0.8/go.mod h1:pZUfVSP3dC1gWZBoPsYwqjWBAOm78YOZFkUEMi/8FQo=
    836 871  github.com/projectdiscovery/urlutil v0.0.0-20210525140139-b874f06ad921/go.mod h1:oXLErqOpqEAp/ueQlknysFxHO3CUNoSiDNnkiHG+Jpo=
    837  -github.com/projectdiscovery/urlutil v0.0.0-20210805190935-3d83726391c1 h1:9dYmONRtwy+xP8UAGHxEQ0cxO3umc9qiFmnYsoDUps4=
    838  -github.com/projectdiscovery/urlutil v0.0.0-20210805190935-3d83726391c1/go.mod h1:oXLErqOpqEAp/ueQlknysFxHO3CUNoSiDNnkiHG+Jpo=
     872 +github.com/projectdiscovery/urlutil v0.0.0-20220606114420-c8511bedff3f h1:yW/g2I+mqEL6E2SfSdEJZWZf5FUXJa2S+u8Rrx+3EtQ=
     873 +github.com/projectdiscovery/urlutil v0.0.0-20220606114420-c8511bedff3f/go.mod h1:AIXgGkomxeaCo1P/iMI3vClLciOF7DBx3N/rDWWsBqE=
    839 874  github.com/projectdiscovery/wappalyzergo v0.0.51/go.mod h1:1LQBGQVW47tMHxGTxmBK+pAwfsWKSLQMXt/egxGlljo=
    840  -github.com/projectdiscovery/wappalyzergo v0.0.57 h1:/QDYw6qEZfTelMzRaTuhIVSVImmUJlvizCHWo/MTeU4=
    841  -github.com/projectdiscovery/wappalyzergo v0.0.57/go.mod h1:9aSADdt5z/pw9LFZF7Q8RrLnkyqZl1H4Ezivi8Td7l0=
     875 +github.com/projectdiscovery/wappalyzergo v0.0.59 h1:jwgmee27eF6OGrhq0ieHSvU+/0H9JVKQx0xDkpJYBTs=
     876 +github.com/projectdiscovery/wappalyzergo v0.0.59/go.mod h1:9aSADdt5z/pw9LFZF7Q8RrLnkyqZl1H4Ezivi8Td7l0=
    842 877  github.com/projectdiscovery/yamldoc-go v1.0.2/go.mod h1:7uSxfMXaBmzvw8m5EhOEjB6nhz0rK/H9sUjq1ciZu24=
    843 878  github.com/projectdiscovery/yamldoc-go v1.0.3-0.20211126104922-00d2c6bb43b6 h1:DvWRQpw7Ib2CRL3ogYm/BWM+X0UGPfz1n9Ix9YKgFM8=
    844 879  github.com/projectdiscovery/yamldoc-go v1.0.3-0.20211126104922-00d2c6bb43b6/go.mod h1:8OfZj8p/axkUM/TJoS/O9LDjj/S8u17rxRbqluE9CU4=
    845  -github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
    846  -github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso=
    847  -github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
    848  -github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
    849 880  github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
    850  -github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro=
    851  -github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
    852  -github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
    853  -github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
    854  -github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU=
    855 881  github.com/remeh/sizedwaitgroup v1.0.0 h1:VNGGFwNo/R5+MJBf6yrsr110p0m4/OX4S3DCy7Kyl5E=
    856 882  github.com/remeh/sizedwaitgroup v1.0.0/go.mod h1:3j2R4OIe/SeS6YDhICBy22RWjJC5eNCJ1V+9+NVNYlo=
    857  -github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY=
    858 883  github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
    859  -github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg=
     884 +github.com/rivo/uniseg v0.4.2 h1:YwD0ulJSJytLpiaWua0sBDusfsCZohxjxzVTYjwxfV8=
     885 +github.com/rivo/uniseg v0.4.2/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88=
    860 886  github.com/rogpeppe/fastuuid v1.1.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
    861  -github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
    862 887  github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
    863 888  github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc=
    864 889  github.com/rogpeppe/go-internal v1.6.2/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc=
    865 890  github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE=
    866  -github.com/rogpeppe/go-internal v1.8.1 h1:geMPLpDpQOgVyCg5z5GoRwLHepNdb71NXb67XFkP+Eg=
    867  -github.com/rogpeppe/go-internal v1.8.1/go.mod h1:JeRgkft04UBgHMgCIwADu4Pn6Mtm5d4nPKWu0nJ5d+o=
     891 +github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8=
     892 +github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs=
    868 893  github.com/rs/xid v1.3.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg=
    869 894  github.com/rs/xid v1.4.0 h1:qd7wPTDkN6KQx2VmMBLrpHkiyQwgFXRnkOLacUiaSNY=
    870 895  github.com/rs/xid v1.4.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg=
    skipped 1 lines
    872 897  github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
    873 898  github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk=
    874 899  github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
    875  -github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
     900 +github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
    876 901  github.com/saintfish/chardet v0.0.0-20120816061221-3af4cd4741ca h1:NugYot0LIVPxTvN8n+Kvkn6TrbMyxQiuvKdEwFdR9vI=
    877 902  github.com/saintfish/chardet v0.0.0-20120816061221-3af4cd4741ca/go.mod h1:uugorj2VCxiV1x+LzaIdVa9b4S4qGAcH6cbhh4qVxOU=
    878 903  github.com/satori/go.uuid v1.2.0 h1:0uYX9dsZ2yD7q2RtLRtPSdGDWzjeM3TbMJP9utgA0ww=
    879 904  github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0=
    880  -github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc=
     905 +github.com/sclevine/agouti v3.0.0+incompatible/go.mod h1:b4WX9W9L1sfQKXeJf1mUTLZKJ48R1S7H23Ji7oFO5Bw=
    881 906  github.com/segmentio/ksuid v1.0.3/go.mod h1:/XUiZBD3kVx5SmUOl55voK5yeAbBNNIed+2O73XgrPE=
    882 907  github.com/segmentio/ksuid v1.0.4 h1:sBo2BdShXjmcugAMwjugoGUdUV0pcxY5mW4xKRn3v4c=
    883 908  github.com/segmentio/ksuid v1.0.4/go.mod h1:/XUiZBD3kVx5SmUOl55voK5yeAbBNNIed+2O73XgrPE=
    884 909  github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo=
     910 +github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM=
    885 911  github.com/shirou/gopsutil/v3 v3.21.7/go.mod h1:RGl11Y7XMTQPmHh8F0ayC6haKNBgH4PXMJuTAcMOlz4=
    886 912  github.com/shirou/gopsutil/v3 v3.22.6/go.mod h1:EdIubSnZhbAvBS1yJ7Xi+AShB/hxwLHOMz4MCYz7yMs=
    887  -github.com/shirou/gopsutil/v3 v3.22.7 h1:flKnuCMfUUrO+oAvwAd6GKZgnPzr098VA/UJ14nhJd4=
    888  -github.com/shirou/gopsutil/v3 v3.22.7/go.mod h1:s648gW4IywYzUfE/KjXxUsqrqx/T2xO5VqOXxONeRfI=
     913 +github.com/shirou/gopsutil/v3 v3.22.8 h1:a4s3hXogo5mE2PfdfJIonDbstO/P+9JszdfhAHSzD9Y=
     914 +github.com/shirou/gopsutil/v3 v3.22.8/go.mod h1:s648gW4IywYzUfE/KjXxUsqrqx/T2xO5VqOXxONeRfI=
    889 915  github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
    890  -github.com/sijms/go-ora/v2 v2.4.25 h1:PtyMsRGHd6FNttdaMEg4NdHuRYxg29NKwsxPuTmCEJ4=
    891  -github.com/sijms/go-ora/v2 v2.4.25/go.mod h1:EHxlY6x7y9HAsdfumurRfTd+v8NrEOTR3Xl4FWlH6xk=
    892  -github.com/simonnilsson/ask v0.2.0 h1:CpiQtuLyRlrPNVk6aQjaFL51XmBlCIxaqssxentXBBA=
    893  -github.com/simonnilsson/ask v0.2.0/go.mod h1:uv27Uj6EyKb2Aaq4Hwmo952lx1UZfzxalN+51a4kK2Y=
    894  -github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
     916 +github.com/sijms/go-ora/v2 v2.5.3 h1:klGKmhqRONVTtIzTdfYTvrW94kdJkdmZl93u2A3vchI=
     917 +github.com/sijms/go-ora/v2 v2.5.3/go.mod h1:EHxlY6x7y9HAsdfumurRfTd+v8NrEOTR3Xl4FWlH6xk=
     918 +github.com/simonnilsson/ask v0.3.0 h1:r8Lhd0IckFkxfCDlqVZFwcaEQOxwu0vJDydWQtIvnsM=
     919 +github.com/simonnilsson/ask v0.3.0/go.mod h1:sUb3WVJKlF20TzemrTDTB5b1e2mxYYqluNe75OPa7Tg=
    895 920  github.com/sirupsen/logrus v1.3.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
    896 921  github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
    897  -github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88=
    898  -github.com/sirupsen/logrus v1.7.0 h1:ShrD1U9pZB12TX0cVy0DtePoCH97K8EtX+mg7ZARUtM=
    899 922  github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
     923 +github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0=
     924 +github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
    900 925  github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
    901  -github.com/smartystreets/assertions v1.0.0 h1:UVQPSSmc3qtTi+zPPkCXvZX9VvW/xT/NsRvKfwY81a8=
    902 926  github.com/smartystreets/assertions v1.0.0/go.mod h1:kHHU4qYBaI3q23Pp3VPrmWhuIUrLW/7eUrw0BU5VaoM=
    903 927  github.com/smartystreets/go-aws-auth v0.0.0-20180515143844-0c1422d1fdb9/go.mod h1:SnhjPscd9TpLiy1LpzGSKh3bXCfxxXuqd9xmQJy3slM=
    904 928  github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
    905  -github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s=
    906 929  github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
    907 930  github.com/smartystreets/gunit v1.0.0/go.mod h1:qwPWnhz6pn0NnRBP++URONOVyNkPyr4SauJk4cUOwJs=
    908  -github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM=
    909 931  github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
    910 932  github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI=
    911 933  github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
    912 934  github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ=
    913  -github.com/spf13/afero v1.8.2 h1:xehSyVa0YnHWsJ49JFljMpg1HX19V6NDZ1fkm1Xznbo=
    914  -github.com/spf13/afero v1.8.2/go.mod h1:CtAatgMJh6bJEIs48Ay/FOnkljP3WeGUG0MC1RfAqwo=
     935 +github.com/spf13/afero v1.9.2 h1:j49Hj62F0n+DaZ1dDCvhABaPNSGNkt32oRFxI33IEMw=
     936 +github.com/spf13/afero v1.9.2/go.mod h1:iUV7ddyEEZPO5gA3zD4fJt6iStLlL+Lg4m2cihcDf8Y=
    915 937  github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
    916 938  github.com/spf13/cast v1.4.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
    917 939  github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w=
    918 940  github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU=
    919 941  github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU=
    920  -github.com/spf13/cobra v1.1.3 h1:xghbfqPkxzxP3C/f3n5DdpAbdKLj4ZE4BWQI362l53M=
    921  -github.com/spf13/cobra v1.1.3/go.mod h1:pGADOWyqRD/YMrPZigI/zbliZ2wVD/23d+is3pSWzOo=
    922 942  github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo=
    923 943  github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk=
    924 944  github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo=
    skipped 1 lines
    926 946  github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
    927 947  github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
    928 948  github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s=
    929  -github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg=
    930  -github.com/spf13/viper v1.12.0 h1:CZ7eSOd3kZoaYDLbXnmzgQI5RlciuXBMA+18HwHRfZQ=
    931  -github.com/spf13/viper v1.12.0/go.mod h1:b6COn30jlNxbm/V2IqWiNWkJ+vZNiMNksliPCiuKtSI=
     949 +github.com/spf13/viper v1.13.0 h1:BWSJ/M+f+3nmdz9bxB+bWX28kkALN2ok11D0rSo8EJU=
     950 +github.com/spf13/viper v1.13.0/go.mod h1:Icm2xNL3/8uyh/wFuB1jI7TiTNKp8632Nwegu+zgdYw=
    932 951  github.com/stacktitan/smb v0.0.0-20190531122847-da9a425dceb8 h1:GVFkBBJAEO3CpzIYcDDBdpUObzKwVW9okNWcLYL/nnU=
    933 952  github.com/stacktitan/smb v0.0.0-20190531122847-da9a425dceb8/go.mod h1:phLSETqH/UJsBtwDVBxSfJKwwkbJcGyy2Q/h4k+bmww=
    934 953  github.com/stoewer/go-strcase v1.2.0 h1:Z2iHWqGXH00XYgqDmNgQbIBxf3wrNq0F3feEy0ainaU=
    skipped 14 lines
    949 968  github.com/stretchr/testify v1.7.5/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
    950 969  github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk=
    951 970  github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
    952  -github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw=
    953  -github.com/subosito/gotenv v1.3.0 h1:mjC+YW8QpAdXibNi+vNWgzmgBH4+5l5dCXv8cNysBLI=
    954  -github.com/subosito/gotenv v1.3.0/go.mod h1:YzJjq/33h7nrwdY+iHMhEOEEbW0ovIz0tB6t6PwAXzs=
     971 +github.com/subosito/gotenv v1.4.1 h1:jyEFiXpy21Wm81FBN71l9VoMMV8H8jG+qIK3GCpY6Qs=
     972 +github.com/subosito/gotenv v1.4.1/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0=
    955 973  github.com/syndtr/goleveldb v1.0.0 h1:fBdIW9lB4Iz0n9khmH8w27SJ3QEJ7+IgjPEwGSZiFdE=
    956 974  github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ=
    957  -github.com/tidwall/pretty v1.0.0 h1:HsD+QiTn7sK6flMKIvNmpqz1qrpP3Ps6jOKIKMooyg4=
    958 975  github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk=
    959 976  github.com/tj/assert v0.0.0-20171129193455-018094318fb0/go.mod h1:mZ9/Rh9oLWpLLDRpvE+3b7gP/C2YyLFYxNmcLnPTMe0=
    960  -github.com/tj/assert v0.0.3 h1:Df/BlaZ20mq6kuai7f5z2TvPFiwC3xaWJSDQNiIS3Rk=
    961 977  github.com/tj/assert v0.0.3/go.mod h1:Ne6X72Q+TB1AteidzQncjw9PabbMp4PBMZ1k+vd1Pvk=
    962 978  github.com/tj/go-buffer v1.1.0/go.mod h1:iyiJpfFcR2B9sXu7KvjbT9fpM4mOelRSDTbntVj52Uc=
    963 979  github.com/tj/go-elastic v0.0.0-20171221160941-36157cbbebc2/go.mod h1:WjeM0Oo1eNAjXGDx2yma7uG2XoyRZTq1uv3M/o7imD0=
    skipped 5 lines
    969 985  github.com/tklauser/go-sysconf v0.3.10 h1:IJ1AZGZRWbY8T5Vfk04D9WOA5WSejdflXxP03OUqALw=
    970 986  github.com/tklauser/go-sysconf v0.3.10/go.mod h1:C8XykCvCb+Gn0oNCWPIlcb0RuglQTYaQ2hGm7jmxEFk=
    971 987  github.com/tklauser/numcpus v0.2.3/go.mod h1:vpEPS/JC+oZGGQ/My/vJnNsvMDQL6PwOqt8dsCw5j+E=
    972  -github.com/tklauser/numcpus v0.4.0 h1:E53Dm1HjH1/R2/aoCtXtPgzmElmn51aOkhCFSuZq//o=
    973 988  github.com/tklauser/numcpus v0.4.0/go.mod h1:1+UI3pD8NW14VMwdgJNJ1ESk2UnwhAnz5hMwiKKqXCQ=
    974  -github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
     989 +github.com/tklauser/numcpus v0.5.0 h1:ooe7gN0fg6myJ0EKoTAf5hebTZrH52px3New/D9iJ+A=
     990 +github.com/tklauser/numcpus v0.5.0/go.mod h1:OGzpTxpcIMNGYQdit2BYL1pvk/dSOaJWjKoflh+RQjo=
    975 991  github.com/tomnomnom/linkheader v0.0.0-20180905144013-02ca5825eb80 h1:nrZ3ySNYwJbSpD6ce9duiP+QkD3JuLCcWkdaehUS/3Y=
    976 992  github.com/tomnomnom/linkheader v0.0.0-20180905144013-02ca5825eb80/go.mod h1:iFyPdL66DjUD96XmzVL3ZntbzcflLnznH0fr99w5VqE=
    977 993  github.com/trivago/tgo v1.0.7 h1:uaWH/XIy9aWYWpjm2CU3RpcqZXmX2ysQ9/Go+d9gyrM=
    978 994  github.com/trivago/tgo v1.0.7/go.mod h1:w4dpD+3tzNIIiIfkWWa85w5/B77tlvdZckQ+6PkFnhc=
    979 995  github.com/twmb/murmur3 v1.1.6/go.mod h1:Qq/R7NUyOfr65zD+6Q5IHKsJLwP7exErjN6lyyq3OSQ=
    980  -github.com/txthinking/runnergroup v0.0.0-20210608031112-152c7c4432bf h1:7PflaKRtU4np/epFxRXlFhlzLXZzKFrH5/I4so5Ove0=
    981 996  github.com/txthinking/runnergroup v0.0.0-20210608031112-152c7c4432bf/go.mod h1:CLUSJbazqETbaR+i0YAhXBICV9TrKH93pziccMhmhpM=
     997 +github.com/txthinking/runnergroup v0.0.0-20220212043759-8da8edb7dae8 h1:iYc+JnXtzv6sdMx9Q7OTKkDAn7FhDPDogcjeSfEQcLY=
     998 +github.com/txthinking/runnergroup v0.0.0-20220212043759-8da8edb7dae8/go.mod h1:CLUSJbazqETbaR+i0YAhXBICV9TrKH93pziccMhmhpM=
    982 999  github.com/txthinking/socks5 v0.0.0-20220615051428-39268faee3e6 h1:8DkPbOq/EPxbD5VJajKuvssiYZJSrlpeetcGfrBoBVE=
    983 1000  github.com/txthinking/socks5 v0.0.0-20220615051428-39268faee3e6/go.mod h1:7NloQcrxaZYKURWph5HLxVDlIwMHJXCPkeWPtpftsIg=
    984 1001  github.com/txthinking/x v0.0.0-20210326105829-476fab902fbe h1:gMWxZxBFRAXqoGkwkYlPX2zvyyKNWJpxOxCrjqJkm5A=
    985 1002  github.com/txthinking/x v0.0.0-20210326105829-476fab902fbe/go.mod h1:WgqbSEmUYSjEV3B1qmee/PpP2NYEz4bL9/+mF1ma+s4=
     1003 +github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc=
    986 1004  github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0=
    987 1005  github.com/ulikunitz/xz v0.5.6/go.mod h1:2bypXElzHzzJZwzH67Y6wb67pO62Rzfn7BSiF4ABRW8=
    988 1006  github.com/ulikunitz/xz v0.5.10 h1:t92gobL9l3HE202wg3rlk19F6X+JOxl9BBrCCMYEYd8=
    skipped 1 lines
    990 1008  github.com/ulule/deepcopier v0.0.0-20200430083143-45decc6639b6 h1:TtyC78WMafNW8QFfv3TeP3yWNDG+uxNkk9vOrnDu6JA=
    991 1009  github.com/ulule/deepcopier v0.0.0-20200430083143-45decc6639b6/go.mod h1:h8272+G2omSmi30fBXiZDMkmHuOgonplfKIKjQWzlfs=
    992 1010  github.com/urfave/cli/v2 v2.0.0/go.mod h1:SE9GqnLQmjVa0iPEY0f1w3ygNIYcIJ0OKPMoW2caLfQ=
    993  -github.com/urfave/cli/v2 v2.10.3 h1:oi571Fxz5aHugfBAJd5nkwSk3fzATXtMlpxdLylSCMo=
    994  -github.com/urfave/cli/v2 v2.10.3/go.mod h1:f8iq5LtQ/bLxafbdBSLPPNsgaW0l/2fYYEHhAyPlwvo=
     1011 +github.com/urfave/cli/v2 v2.16.3 h1:gHoFIwpPjoyIMbJp/VFd+/vuD0dAgFK4B6DpEMFJfQk=
     1012 +github.com/urfave/cli/v2 v2.16.3/go.mod h1:1CNUng3PtjQMtRzJO4FMXBQvkGtuYRxxiR9xMa7jMwI=
     1013 +github.com/urfave/negroni v1.0.0/go.mod h1:Meg73S6kFm/4PpbYdq35yYWoCZ9mS/YSx+lKnmiohz4=
    995 1014  github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw=
    996 1015  github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc=
     1016 +github.com/valyala/fasthttp v1.6.0/go.mod h1:FstJa9V+Pj9vQ7OJie2qMHdwemEDaDiSdBnvPM1Su9w=
     1017 +github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8=
    997 1018  github.com/valyala/fasttemplate v1.2.1 h1:TVEnxayobAdVkhQfrfes2IzOB6o+z4roRkPF52WA1u4=
    998 1019  github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ=
     1020 +github.com/valyala/tcplisten v0.0.0-20161114210144-ceec8f93295a/go.mod h1:v3UYOV9WzVtRmSR+PDvWpU/qWl4Wa5LApYYX4ZtKbio=
    999 1021  github.com/vmihailenco/msgpack/v4 v4.3.12/go.mod h1:gborTTJjAo/GWTqqRjrLCn9pgNN+NXzzngzBKDPIqw4=
    1000 1022  github.com/vmihailenco/tagparser v0.1.1/go.mod h1:OeAg3pn3UbLjkWt+rN9oFYB6u/cQgqMEUPoW2WPyhdI=
    1001 1023  github.com/weppos/publicsuffix-go v0.12.0/go.mod h1:z3LCPQ38eedDQSwmsSRW4Y7t2L8Ln16JPQ02lHAdn5k=
    skipped 2 lines
    1004 1026  github.com/weppos/publicsuffix-go v0.20.0 h1:59ypvSUbW3Dunc6zVm+v+MmXf2Q6cGiNDkxgRIzEnaA=
    1005 1027  github.com/weppos/publicsuffix-go v0.20.0/go.mod h1:5ZC/Uv3fIEUE0eP6o9+Yg4+5+W8V0/BieMi05feGXVA=
    1006 1028  github.com/weppos/publicsuffix-go/publicsuffix/generator v0.0.0-20220704091424-e0182326a282/go.mod h1:GHfoeIdZLdZmLjMlzBftbTDntahTttUMWjxZwQJhULE=
    1007  -github.com/wsxiaoys/terminal v0.0.0-20160513160801-0940f3fc43a0 h1:3UeQBvD0TFrlVjOeLOBz+CPAI8dnbqNSVwUwRrkp7vQ=
    1008 1029  github.com/wsxiaoys/terminal v0.0.0-20160513160801-0940f3fc43a0/go.mod h1:IXCdmsXIht47RaVFLEdVnh1t+pgYtTAhQGj73kz+2DM=
    1009 1030  github.com/xanzy/go-gitlab v0.50.3/go.mod h1:Q+hQhV508bDPoBijv7YjK/Lvlb4PhVhJdKqXVQrUoAE=
    1010 1031  github.com/xanzy/go-gitlab v0.69.0/go.mod h1:o4yExCtdaqlM8YGdDJWuZoBmfxBsmA9TPEjs9mx1UO4=
    skipped 1 lines
    1012 1033  github.com/xanzy/go-gitlab v0.73.1/go.mod h1:d/a0vswScO7Agg1CZNz15Ic6SSvBG9vfw8egL99t4kA=
    1013 1034  github.com/xdg-go/pbkdf2 v1.0.0 h1:Su7DPu48wXMwC3bs7MCNG+z4FhcyEuz5dlvchbq0B0c=
    1014 1035  github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI=
    1015  -github.com/xdg-go/scram v1.0.2 h1:akYIkZ28e6A96dkWNJQu3nmCzH3YfwMPQExUYDaRv7w=
    1016  -github.com/xdg-go/scram v1.0.2/go.mod h1:1WAq6h33pAW+iRreB34OORO2Nf7qel3VV3fjBj+hCSs=
    1017  -github.com/xdg-go/stringprep v1.0.2 h1:6iq84/ryjjeRmMJwxutI51F2GIPlP5BfTvXHeYjyhBc=
    1018  -github.com/xdg-go/stringprep v1.0.2/go.mod h1:8F9zXuvzgwmyT5DUm4GUfZGDdT3W+LCvS6+da4O5kxM=
     1036 +github.com/xdg-go/scram v1.1.1 h1:VOMT+81stJgXW3CpHyqHN3AXDYIMsx56mEFrB37Mb/E=
     1037 +github.com/xdg-go/scram v1.1.1/go.mod h1:RaEWvsqvNKKvBPvcKeFjrG2cJqOkHTiyTpzz23ni57g=
     1038 +github.com/xdg-go/stringprep v1.0.3 h1:kdwGpVNwPFtjs98xCGkHjQtGKh86rDcRZN17QEMCOIs=
     1039 +github.com/xdg-go/stringprep v1.0.3/go.mod h1:W3f5j4i+9rC0kuIEJL0ky1VpHXQU3ocBgklLGvcBnW8=
     1040 +github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU=
     1041 +github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ=
     1042 +github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y=
    1019 1043  github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8 h1:nIPpBwaJSVYIxUFsDv3M8ofmx9yWTog9BfvIu0q41lo=
    1020 1044  github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8/go.mod h1:HUYIGzjTL3rfEspMxjDjgmT5uz5wzYJKVo23qUhYTos=
    1021  -github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU=
    1022 1045  github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q=
    1023 1046  github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 h1:bAn7/zixMGCfxrRTfdpNzjtPYqr8smhKouy9mxVdGPU=
    1024 1047  github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673/go.mod h1:N3UwUGtsrSj3ccvlPHLoLsHnpR27oXr4ZE984MbSER8=
     1048 +github.com/yalp/jsonpath v0.0.0-20180802001716-5cc68e5049a0/go.mod h1:/LWChgwKmvncFJFHJ7Gvn9wZArjbV5/FppcK2fKk/tI=
    1025 1049  github.com/yl2chen/cidranger v1.0.2 h1:lbOWZVCG1tCRX4u24kuM1Tb4nHqWkDxwLdoS+SevawU=
    1026 1050  github.com/yl2chen/cidranger v1.0.2/go.mod h1:9U1yz7WPYDwf0vpNWFaeRh0bjwz5RVgRy/9UEQfHl0g=
    1027  -github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d h1:splanxYIlg+5LfHAM6xpdFEAYOk8iySO56hMFq6uLyA=
    1028 1051  github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7JulP+udvsHwJoVG1YGAP6VLg4y9I5dyZdqmA=
     1052 +github.com/youmark/pkcs8 v0.0.0-20201027041543-1326539a0a0a h1:fZHgsYlfvtyqToslyjUt3VOPF4J7aK/3MPcK7xp3PDk=
     1053 +github.com/youmark/pkcs8 v0.0.0-20201027041543-1326539a0a0a/go.mod h1:ul22v+Nro/R083muKhosV54bj5niojjWZvU8xrevuH4=
    1029 1054  github.com/ysmood/goob v0.3.0/go.mod h1:S3lq113Y91y1UBf1wj1pFOxeahvfKkCk6mTWTWbDdWs=
    1030 1055  github.com/ysmood/goob v0.4.0 h1:HsxXhyLBeGzWXnqVKtmT9qM7EuVs/XOgkX7T6r1o1AQ=
    1031 1056  github.com/ysmood/goob v0.4.0/go.mod h1:u6yx7ZhS4Exf2MwciFr6nIM8knHQIE22lFpWHnfql18=
    1032 1057  github.com/ysmood/got v0.9.3/go.mod h1:pE1l4LOwOBhQg6A/8IAatkGp7uZjnalzrZolnlhhMgY=
    1033 1058  github.com/ysmood/got v0.14.1/go.mod h1:pE1l4LOwOBhQg6A/8IAatkGp7uZjnalzrZolnlhhMgY=
    1034 1059  github.com/ysmood/got v0.31.2/go.mod h1:pE1l4LOwOBhQg6A/8IAatkGp7uZjnalzrZolnlhhMgY=
    1035  -github.com/ysmood/got v0.31.3 h1:UvvF+TDVsZLO7MSzm/Bd/H4HVp+7S5YwsxgdwaKq8uA=
    1036 1060  github.com/ysmood/got v0.31.3/go.mod h1:pE1l4LOwOBhQg6A/8IAatkGp7uZjnalzrZolnlhhMgY=
    1037 1061  github.com/ysmood/gotrace v0.2.0/go.mod h1:TzhIG7nHDry5//eYZDYcTzuJLYQIkykJzCRIo4/dzQM=
    1038 1062  github.com/ysmood/gotrace v0.2.2/go.mod h1:TzhIG7nHDry5//eYZDYcTzuJLYQIkykJzCRIo4/dzQM=
    1039  -github.com/ysmood/gotrace v0.6.0 h1:SyI1d4jclswLhg7SWTL6os3L1WOKeNn/ZtzVQF8QmdY=
    1040 1063  github.com/ysmood/gotrace v0.6.0/go.mod h1:TzhIG7nHDry5//eYZDYcTzuJLYQIkykJzCRIo4/dzQM=
    1041 1064  github.com/ysmood/gson v0.6.3/go.mod h1:3Kzs5zDl21g5F/BlLTNcuAGAYLKt2lV5G8D1zF3RNmg=
    1042 1065  github.com/ysmood/gson v0.6.4/go.mod h1:3Kzs5zDl21g5F/BlLTNcuAGAYLKt2lV5G8D1zF3RNmg=
    1043  -github.com/ysmood/gson v0.7.1 h1:zKL2MTGtynxdBdlZjyGsvEOZ7dkxaY5TH6QhAbTgz0Q=
    1044 1066  github.com/ysmood/gson v0.7.1/go.mod h1:3Kzs5zDl21g5F/BlLTNcuAGAYLKt2lV5G8D1zF3RNmg=
     1067 +github.com/ysmood/gson v0.7.2 h1:1iWUvpi5DPvd2j59W7ifRPR9DiAZ3Ga+fmMl1mJrRbM=
     1068 +github.com/ysmood/gson v0.7.2/go.mod h1:3Kzs5zDl21g5F/BlLTNcuAGAYLKt2lV5G8D1zF3RNmg=
    1045 1069  github.com/ysmood/leakless v0.6.12/go.mod h1:R8iAXPRaG97QJwqxs74RdwzcRHT1SWCGTNqY8q0JvMQ=
    1046 1070  github.com/ysmood/leakless v0.7.0/go.mod h1:R8iAXPRaG97QJwqxs74RdwzcRHT1SWCGTNqY8q0JvMQ=
    1047 1071  github.com/ysmood/leakless v0.8.0 h1:BzLrVoiwxikpgEQR0Lk8NyBN5Cit2b1z+u0mgL4ZJak=
    1048 1072  github.com/ysmood/leakless v0.8.0/go.mod h1:R8iAXPRaG97QJwqxs74RdwzcRHT1SWCGTNqY8q0JvMQ=
     1073 +github.com/yudai/gojsondiff v1.0.0/go.mod h1:AY32+k2cwILAkW1fbgxQ5mUmMiZFgLIV+FBNExI05xg=
     1074 +github.com/yudai/golcs v0.0.0-20170316035057-ecda9a501e82/go.mod h1:lgjkn3NuSvDfVJdfcVVdX+jpBxNmX4rDAzaS45IcYoM=
     1075 +github.com/yudai/pp v2.0.1+incompatible/go.mod h1:PuxR/8QJ7cyCkFp/aUDS+JY727OFEZkTdatxwunjIkc=
    1049 1076  github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
    1050 1077  github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
    1051 1078  github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
    1052 1079  github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
    1053 1080  github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
    1054  -github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
     1081 +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
    1055 1082  github.com/yusufpapurcu/wmi v1.2.2 h1:KBNDSne4vP5mbSWnJbO+51IMOXJB67QiYCSBrubbPRg=
    1056 1083  github.com/yusufpapurcu/wmi v1.2.2/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
    1057 1084  github.com/zclconf/go-cty v1.8.4/go.mod h1:vVKLxnk3puL4qRAv72AO+W99LUD4da90g3uUAzyuvAk=
    skipped 5 lines
    1063 1090  github.com/zmap/zcrypto v0.0.0-20211005224000-2d0ffdec8a9b/go.mod h1:5nID//bFGkx3/+iHcFIFRHQ54EOPJ0iSj0IGKpMElvw=
    1064 1091  github.com/zmap/zcrypto v0.0.0-20220803033029-557f3e4940be h1:M5QjuCbUeNZsup53dlJkI/cx6pVdnDOPzyy+XppoowY=
    1065 1092  github.com/zmap/zcrypto v0.0.0-20220803033029-557f3e4940be/go.mod h1:bRZdjnJaHWVXKEwrfAZMd0gfRjZGNhTbZwzp07s0Abw=
    1066  -go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
    1067 1093  go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ=
    1068 1094  go.etcd.io/bbolt v1.3.6 h1:/ecaJf0sk1l4l6V4awd65v2C3ILy7MSj+s/x1ADCIMU=
    1069 1095  go.etcd.io/bbolt v1.3.6/go.mod h1:qXsaaIqmgQH0T+OPdb99Bf+PKfBBQVAdyD6TY9G8XM4=
    1070  -go.mongodb.org/mongo-driver v1.9.1 h1:m078y9v7sBItkt1aaoe2YlvWEXcD263e1a4E1fBrJ1c=
    1071  -go.mongodb.org/mongo-driver v1.9.1/go.mod h1:0sQWfOeY63QTntERDJJ/0SuKK0T1uVSgKCuAROlKEPY=
     1096 +go.mongodb.org/mongo-driver v1.10.2 h1:4Wk3cnqOrQCn0P92L3/mmurMxzdvWWs5J9jinAVKD+k=
     1097 +go.mongodb.org/mongo-driver v1.10.2/go.mod h1:z4XpeoU6w+9Vht+jAFyLgVrD+jGSQQe0+CBWFHNiHt8=
    1072 1098  go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
    1073 1099  go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
    1074 1100  go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
    1075 1101  go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
    1076 1102  go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
    1077 1103  go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk=
    1078  -go.opentelemetry.io/otel v1.0.0-RC2 h1:SHhxSjB+omnGZPgGlKe+QMp3MyazcOHdQ8qwo89oKbg=
    1079 1104  go.opentelemetry.io/otel v1.0.0-RC2/go.mod h1:w1thVQ7qbAy8MHb0IFj8a5Q2QU0l2ksf8u/CN8m3NOM=
     1105 +go.opentelemetry.io/otel v1.0.0/go.mod h1:AjRVh9A5/5DE7S+mZtTR6t8vpKKryam+0lREnfmS4cg=
    1080 1106  go.opentelemetry.io/otel/oteltest v1.0.0-RC2/go.mod h1:kiQ4tw5tAL4JLTbcOYwK1CWI1HkT5aiLzHovgOVnz/A=
    1081  -go.opentelemetry.io/otel/trace v1.0.0-RC2 h1:dunAP0qDULMIT82atj34m5RgvsIK6LcsXf1c/MsYg1w=
    1082 1107  go.opentelemetry.io/otel/trace v1.0.0-RC2/go.mod h1:JPQ+z6nNw9mqEGT8o3eoPTdnNI+Aj5JcxEsVGREIAy4=
    1083  -go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI=
    1084  -go.starlark.net v0.0.0-20220816155156-cfacd8902214 h1:MqijAN3S61c7KWasOk+zIqIjHQPN6WUra/X3+YAkQxQ=
    1085  -go.starlark.net v0.0.0-20220816155156-cfacd8902214/go.mod h1:VZcBMdr3cT3PnBoWunTabuSEXwVAH+ZJ5zxfs3AdASk=
    1086  -go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
     1108 +go.opentelemetry.io/otel/trace v1.0.0/go.mod h1:PXTWqayeFUlJV1YDNhsJYB184+IvAH814St6o6ajzIs=
    1087 1109  go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ=
    1088 1110  go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
    1089 1111  go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
    1090 1112  go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ=
    1091 1113  go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0=
    1092  -go.uber.org/goleak v1.1.11 h1:wy28qYRKZgnJTxGxvye5/wgWr1EKjmUDGYox5mGlRlI=
    1093 1114  go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ=
    1094  -go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
    1095 1115  go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU=
    1096 1116  go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU=
    1097 1117  go.uber.org/multierr v1.7.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak=
    skipped 2 lines
    1100 1120  go.uber.org/ratelimit v0.2.0 h1:UQE2Bgi7p2B85uP5dC2bbRtig0C+OeNRnNEafLjsLPA=
    1101 1121  go.uber.org/ratelimit v0.2.0/go.mod h1:YYBV4e4naJvhpitQrWJu1vCpgB7CboMe0qhltKt6mUg=
    1102 1122  go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA=
    1103  -go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
    1104 1123  go.uber.org/zap v1.15.0/go.mod h1:Mb2vm2krFEG5DV0W9qcHBYFtp/Wku1cvYaqPsS/WYfc=
    1105 1124  go.uber.org/zap v1.21.0/go.mod h1:wjWOCqI0f2ZZrJF/UufIOkiC8ii6tm1iqIsLo76RfJw=
    1106  -go.uber.org/zap v1.22.0 h1:Zcye5DUgBloQ9BaT4qc9BnjOFog5TvBSAGkJ3Nf70c0=
    1107  -go.uber.org/zap v1.22.0/go.mod h1:H4siCOZOrAolnUPJEkfaSjDqyP+BDS0DdDWzwcgt3+U=
     1125 +go.uber.org/zap v1.23.0 h1:OjGQ5KQDEUawVHxNwQgPpiypGHOxo2mNZsOqTak4fFY=
     1126 +go.uber.org/zap v1.23.0/go.mod h1:D+nX8jyLsMHMYrln8A0rJjFt/T/9/bGgIhAqxv5URuY=
    1108 1127  goftp.io/server/v2 v2.0.0 h1:FF8JKXXKDxAeO1uXEZz7G+IZwCDhl19dpVIlDtp3QAg=
    1109 1128  goftp.io/server/v2 v2.0.0/go.mod h1:7+H/EIq7tXdfo1Muu5p+l3oQ6rYkDZ8lY7IM5d5kVdQ=
    1110 1129  golang.org/x/arch v0.0.0-20180920145803-b19384d3c130/go.mod h1:cYlCBUl1MsqxdiKgmc4uh7TxZfWSFLOGSRR090WDxt8=
    1111  -golang.org/x/arch v0.0.0-20190927153633-4e8777c89be4 h1:QlVATYS7JBoZMVaf+cNjb90WD/beKVHnIxFKT4QaHVI=
    1112  -golang.org/x/arch v0.0.0-20190927153633-4e8777c89be4/go.mod h1:flIaEI6LNU6xOCD5PaJvn9wGP0agmIOqjrtsKGRguv4=
    1113 1130  golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
    1114  -golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
    1115 1131  golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
    1116 1132  golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
    1117 1133  golang.org/x/crypto v0.0.0-20190426145343-a29dc8fdc734/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
    skipped 2 lines
    1120 1136  golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
    1121 1137  golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
    1122 1138  golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
     1139 +golang.org/x/crypto v0.0.0-20200302210943-78000ba7a073/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
    1123 1140  golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
    1124 1141  golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
    1125 1142  golang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
    1126 1143  golang.org/x/crypto v0.0.0-20201112155050-0c6587e931a9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
    1127 1144  golang.org/x/crypto v0.0.0-20201124201722-c8d3bf9c5392/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
    1128  -golang.org/x/crypto v0.0.0-20201216223049-8b5274cf687f/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
    1129 1145  golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
    1130 1146  golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
    1131 1147  golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
    1132 1148  golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
    1133 1149  golang.org/x/crypto v0.0.0-20220210151621-f4118a5b28e2/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
    1134  -golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa h1:zuSxTR4o9y82ebqCUJYNGJbGPo6sKVl54f/TVDObg1c=
     1150 +golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
    1135 1151  golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
     1152 +golang.org/x/crypto v0.0.0-20220829220503-c86fa9a7ed90 h1:Y/gsMcFOcR+6S6f3YeMKl5g+dZMEWqcz5Czj/GWYbkM=
     1153 +golang.org/x/crypto v0.0.0-20220829220503-c86fa9a7ed90/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
    1136 1154  golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
    1137 1155  golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
    1138 1156  golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
    skipped 4 lines
    1143 1161  golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
    1144 1162  golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM=
    1145 1163  golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU=
     1164 +golang.org/x/exp v0.0.0-20200513190911-00229845015e/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw=
     1165 +golang.org/x/exp v0.0.0-20220916125017-b168a2c6b86b h1:SCE/18RnFsLrjydh/R/s5EVvHoZprqEQUuoxK8q2Pc4=
     1166 +golang.org/x/exp v0.0.0-20220916125017-b168a2c6b86b/go.mod h1:cyybsKvd6eL0RnXn6p/Grxp8F5bW7iYuBgsNCOHpMYE=
    1146 1167  golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
    1147 1168  golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
    1148 1169  golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
    skipped 18 lines
    1167 1188  golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
    1168 1189  golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
    1169 1190  golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
    1170  -golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro=
    1171 1191  golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 h1:6zppjxzCulZykYSLyVDYbneBfbaBIQPYMevg0bEwv2s=
    1172 1192  golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
    1173 1193  golang.org/x/net v0.0.0-20180218175443-cbe0f9307d01/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
    1174 1194  golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
    1175 1195  golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
    1176 1196  golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
    1177  -golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
    1178  -golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
    1179  -golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
    1180 1197  golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
    1181 1198  golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
    1182 1199  golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
    1183 1200  golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
     1201 +golang.org/x/net v0.0.0-20190327091125-710a502c58a2/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
    1184 1202  golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
    1185 1203  golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
    1186 1204  golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
    skipped 2 lines
    1189 1207  golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
    1190 1208  golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
    1191 1209  golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
     1210 +golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
    1192 1211  golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
    1193 1212  golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
    1194 1213  golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
    skipped 29 lines
    1224 1243  golang.org/x/net v0.0.0-20210726213435-c6fcb2dbf985/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
    1225 1244  golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
    1226 1245  golang.org/x/net v0.0.0-20210916014120-12bc252f5db8/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
    1227  -golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
    1228 1246  golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
    1229 1247  golang.org/x/net v0.0.0-20211216030914-fe4d6282115f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
    1230  -golang.org/x/net v0.0.0-20220121210141-e204ce36a2ba/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
    1231 1248  golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
    1232 1249  golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
    1233 1250  golang.org/x/net v0.0.0-20220520000938-2e3eb7b945c2/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
    1234 1251  golang.org/x/net v0.0.0-20220615171555-694bf12d69de/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
     1252 +golang.org/x/net v0.0.0-20220617184016-355a448f1bc9/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
    1235 1253  golang.org/x/net v0.0.0-20220630215102-69896b714898/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
    1236  -golang.org/x/net v0.0.0-20220826154423-83b083e8dc8b h1:ZmngSVLe/wycRns9MKikG9OWIEjGcGAkacif7oYQaUY=
     1254 +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
     1255 +golang.org/x/net v0.0.0-20220725212005-46097bf591d3/go.mod h1:AaygXjzTFtRAg2ttMY5RMuhpJ3cNnI0XpyFJD1iQRSM=
     1256 +golang.org/x/net v0.0.0-20220728211354-c7608f3a8462/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk=
    1237 1257  golang.org/x/net v0.0.0-20220826154423-83b083e8dc8b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk=
     1258 +golang.org/x/net v0.0.0-20220909164309-bea034e7d591 h1:D0B/7al0LLrVC8aWF4+oxpv/m8bc7ViFfVS8/gXGdqI=
     1259 +golang.org/x/net v0.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk=
    1238 1260  golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
    1239 1261  golang.org/x/oauth2 v0.0.0-20181106182150-f42d05182288/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
    1240 1262  golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
    skipped 6 lines
    1247 1269  golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
    1248 1270  golang.org/x/oauth2 v0.0.0-20210817223510-7df4dd6e12ab/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
    1249 1271  golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc=
    1250  -golang.org/x/oauth2 v0.0.0-20220722155238-128564f6959c h1:q3gFqPqH7NVofKo3c3yETAP//pPI+G5mvB7qqj1Y5kY=
    1251  -golang.org/x/oauth2 v0.0.0-20220722155238-128564f6959c/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg=
     1272 +golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1 h1:lxqLZaMad/dJHMFZH0NiNpiEZI/nhgWhe4wgzpE+MuA=
     1273 +golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg=
    1252 1274  golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
    1253 1275  golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
    1254 1276  golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
    skipped 5 lines
    1260 1282  golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
    1261 1283  golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
    1262 1284  golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
    1263  -golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4 h1:uVc8UZUe6tr40fFVnUP5Oj+veunVezqYl9z7DYw9xzw=
    1264 1285  golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
    1265  -golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
     1286 +golang.org/x/sync v0.0.0-20220907140024-f12130a52804 h1:0SH2R3f1b1VmIMG7BXbEZCBUu2dKmHschSmjqGUrW8A=
     1287 +golang.org/x/sync v0.0.0-20220907140024-f12130a52804/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
    1266 1288  golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
    1267 1289  golang.org/x/sys v0.0.0-20180903190138-2b024373dcd9/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
    1268 1290  golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
    1269 1291  golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
    1270  -golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
    1271  -golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
    1272  -golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
    1273 1292  golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
    1274 1293  golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
    1275 1294  golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
    skipped 6 lines
    1282 1301  golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
    1283 1302  golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
    1284 1303  golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
     1304 +golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
    1285 1305  golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
    1286 1306  golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
    1287 1307  golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
    skipped 15 lines
    1303 1323  golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
    1304 1324  golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
    1305 1325  golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
     1326 +golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
    1306 1327  golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
    1307 1328  golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
    1308 1329  golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
    skipped 20 lines
    1329 1350  golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
    1330 1351  golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
    1331 1352  golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
    1332  -golang.org/x/sys v0.0.0-20210906170528-6f6e22806c34/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
    1333 1353  golang.org/x/sys v0.0.0-20210915083310-ed5796bab164/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
    1334  -golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
    1335  -golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
    1336  -golang.org/x/sys v0.0.0-20211117180635-dee7805ff2e1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
    1337 1354  golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
    1338  -golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
    1339 1355  golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
    1340 1356  golang.org/x/sys v0.0.0-20220330033206-e17cdc41300f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
    1341 1357  golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
     1358 +golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
    1342 1359  golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
    1343 1360  golang.org/x/sys v0.0.0-20220627191245-f75cf1eec38b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
    1344 1361  golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
    1345  -golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab h1:2QkjZIsXupsJbJIdSjjUOgWK3aEtzyuh2mPt3l/CkeU=
     1362 +golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
     1363 +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
     1364 +golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
     1365 +golang.org/x/sys v0.0.0-20220731174439-a90be440212d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
    1346 1366  golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
     1367 +golang.org/x/sys v0.0.0-20220915200043-7b5979e65e41 h1:ohgcoMbSofXygzo6AD2I1kz3BFmW1QArPYTtwEM3UXc=
     1368 +golang.org/x/sys v0.0.0-20220915200043-7b5979e65e41/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
    1347 1369  golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
    1348 1370  golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
    1349 1371  golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
    1350  -golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 h1:JGgROgKl9N8DuW20oFS5gxc+lE67/N3FcwmBPMe7ArY=
    1351 1372  golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
     1373 +golang.org/x/term v0.0.0-20220722155259-a9ba230a4035 h1:Q5284mrmYTpACcm+eAKjKJH48BBwSyfJqmmGDTtT8Vc=
     1374 +golang.org/x/term v0.0.0-20220722155259-a9ba230a4035/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
    1352 1375  golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
    1353 1376  golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
    1354 1377  golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
    skipped 10 lines
    1365 1388  golang.org/x/time v0.0.0-20220411224347-583f2d630306/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
    1366 1389  golang.org/x/time v0.0.0-20220722155302-e5dcc9cfc0b9 h1:ftMN5LMiBFjbzleLqtoBZk7KdJwhuybIU+FckUHgoyQ=
    1367 1390  golang.org/x/time v0.0.0-20220722155302-e5dcc9cfc0b9/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
    1368  -golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
    1369 1391  golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
     1392 +golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
     1393 +golang.org/x/tools v0.0.0-20181221001348-537d06c36207/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
    1370 1394  golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
    1371 1395  golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
    1372 1396  golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
    1373 1397  golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
    1374 1398  golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
     1399 +golang.org/x/tools v0.0.0-20190327201419-c70d86f8b7cf/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
    1375 1400  golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
    1376 1401  golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
    1377 1402  golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
    1378 1403  golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
    1379  -golang.org/x/tools v0.0.0-20190531172133-b3315ee88b7d/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
    1380 1404  golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
    1381 1405  golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
    1382 1406  golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
    skipped 2 lines
    1385 1409  golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
    1386 1410  golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
    1387 1411  golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
    1388  -golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
    1389 1412  golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
    1390 1413  golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
    1391 1414  golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
    skipped 18 lines
    1410 1433  golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
    1411 1434  golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
    1412 1435  golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
     1436 +golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
    1413 1437  golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
    1414 1438  golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
    1415 1439  golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
    skipped 4 lines
    1420 1444  golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
    1421 1445  golang.org/x/tools v0.0.0-20210101214203-2dba1e4ea05c/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
    1422 1446  golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
     1447 +golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
    1423 1448  golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
    1424 1449  golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0=
    1425 1450  golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
    1426 1451  golang.org/x/tools v0.1.6-0.20210726203631-07bc1bf47fb2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
    1427  -golang.org/x/tools v0.1.9/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU=
    1428  -golang.org/x/tools v0.1.11/go.mod h1:SgwaegtQh8clINPpECJMqnxLv9I09HLqnW3RMqW0CA4=
    1429 1452  golang.org/x/tools v0.1.12 h1:VveCTK38A2rkS8ZqFY25HIDFscX5X9OoEhJd3quQmXU=
    1430 1453  golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
    1431 1454  golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
    1432 1455  golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
    1433 1456  golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
    1434 1457  golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
     1458 +golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8=
    1435 1459  google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
    1436 1460  google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M=
    1437 1461  google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
    skipped 22 lines
    1460 1484  google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
    1461 1485  google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c=
    1462 1486  google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
     1487 +google.golang.org/genproto v0.0.0-20180518175338-11a468237815/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
    1463 1488  google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
    1464 1489  google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
    1465 1490  google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
    skipped 17 lines
    1483 1508  google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
    1484 1509  google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
    1485 1510  google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
    1486  -google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
    1487 1511  google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U=
    1488 1512  google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
    1489 1513  google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA=
    skipped 7 lines
    1497 1521  google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
    1498 1522  google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
    1499 1523  google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
    1500  -google.golang.org/genproto v0.0.0-20220602131408-e326c6e8e9c8 h1:qRu95HZ148xXw+XeZ3dvqe85PxH4X8+jIo0iRPKcEnM=
    1501  -google.golang.org/genproto v0.0.0-20220602131408-e326c6e8e9c8/go.mod h1:yKyY4AMRwFiC8yMMNaMi+RkCnjZJt9LoWuvhXjMs+To=
     1524 +google.golang.org/genproto v0.0.0-20220916172020-2692e8806bfa h1:VWkrxnAx2C2hirAP+W5ADU7e/+93Yhk//ioKd2XFyDI=
     1525 +google.golang.org/genproto v0.0.0-20220916172020-2692e8806bfa/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo=
     1526 +google.golang.org/grpc v1.12.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw=
    1502 1527  google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
    1503 1528  google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
    1504 1529  google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
    skipped 7 lines
    1512 1537  google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
    1513 1538  google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
    1514 1539  google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
    1515  -google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0=
    1516 1540  google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
    1517 1541  google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8=
    1518 1542  google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
    1519  -google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
    1520  -google.golang.org/grpc v1.46.2/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk=
    1521 1543  google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
    1522 1544  google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
    1523 1545  google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
    skipped 15 lines
    1539 1561  gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
    1540 1562  gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
    1541 1563  gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
    1542  -gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
    1543 1564  gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
    1544 1565  gopkg.in/corvus-ch/zbase32.v1 v1.0.0 h1:K4u1NprbDNvKPczKfHLbwdOWHTZ0zfv2ow71H1nRnFU=
    1545 1566  gopkg.in/corvus-ch/zbase32.v1 v1.0.0/go.mod h1:T3oKkPOm4AV/bNXCNFUxRmlE9RUyBz/DSo0nK9U+c0Y=
    1546 1567  gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
    1547 1568  gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
     1569 +gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE=
     1570 +gopkg.in/go-playground/validator.v8 v8.18.2/go.mod h1:RX2a/7Ha8BgOhfk7j780h4/u/RRjR0eouCJSH80/M2Y=
    1548 1571  gopkg.in/ini.v1 v1.42.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
    1549  -gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
    1550 1572  gopkg.in/ini.v1 v1.62.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
    1551  -gopkg.in/ini.v1 v1.66.3/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
    1552  -gopkg.in/ini.v1 v1.66.4 h1:SsAcf+mM7mRZo2nJNGt8mZCjG8ZRaNGMURJw7BsIST4=
    1553  -gopkg.in/ini.v1 v1.66.4/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
     1573 +gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA=
     1574 +gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
    1554 1575  gopkg.in/irc.v3 v3.1.4 h1:DYGMRFbtseXEh+NadmMUFzMraqyuUj4I3iWYFEzDZPc=
    1555 1576  gopkg.in/irc.v3 v3.1.4/go.mod h1:shO2gz8+PVeS+4E6GAny88Z0YVVQSxQghdrMVGQsR9s=
    1556  -gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo=
     1577 +gopkg.in/mgo.v2 v2.0.0-20180705113604-9856a29383ce/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA=
    1557 1578  gopkg.in/src-d/go-billy.v4 v4.3.0/go.mod h1:tm33zBoOwxjYHZIE+OV8bxTWFMJLrconzFMd38aARFk=
    1558  -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
    1559 1579  gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
    1560  -gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74=
    1561 1580  gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
    1562 1581  gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
    1563  -gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
    1564 1582  gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
    1565 1583  gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
    1566 1584  gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
    skipped 7 lines
    1574 1592  gorm.io/driver/sqlite v1.3.6 h1:Fi8xNYCUplOqWiPa3/GuCeowRNBRGTf62DEmhMDHeQQ=
    1575 1593  gorm.io/driver/sqlite v1.3.6/go.mod h1:Sg1/pvnKtbQ7jLXxfZa+jSHvoX8hoZA8cn4xllOMTgE=
    1576 1594  gorm.io/gorm v1.23.4/go.mod h1:l2lP/RyAtc1ynaTjFksBde/O8v9oOGIApu2/xRitmZk=
    1577  -gorm.io/gorm v1.23.8 h1:h8sGJ+biDgBA1AD1Ha9gFCx7h8npU7AsLdlkX0n2TpE=
    1578  -gorm.io/gorm v1.23.8/go.mod h1:l2lP/RyAtc1ynaTjFksBde/O8v9oOGIApu2/xRitmZk=
     1595 +gorm.io/gorm v1.23.9 h1:NSHG021i+MCznokeXR3udGaNyFyBQJW8MbjrJMVCfGw=
     1596 +gorm.io/gorm v1.23.9/go.mod h1:DVrVomtaYTbqs7gB/x2uVvqnXzv0nqjB396B8cG4dBA=
    1579 1597  honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
    1580 1598  honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
    1581 1599  honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
    skipped 5 lines
    1587 1605  moul.io/http2curl v1.0.0/go.mod h1:f6cULg+e4Md/oW1cYmwW4IWQOVl2lGbmCNGOHvzX2kE=
    1588 1606  mvdan.cc/gofumpt v0.1.1/go.mod h1:yXG1r1WqZVKWbVRtBWKWX9+CxGYfA51nSomhM0woR48=
    1589 1607  rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
    1590  -rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4=
    1591 1608  rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
    1592 1609  rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
    1593 1610   
  • ■ ■ ■ ■ ■ ■
    lib/crawlergo/crawlergo.go
    1 1  package crawlergo
    2 2   
    3 3  import (
    4  - "encoding/json"
    5  - "errors"
    6  - "fmt"
    7  - "log"
    8  - "os"
    9  - "os/signal"
    10  - "strings"
    11  - "sync"
    12  - "syscall"
    13  - 
     4 + //"encoding/json"
     5 + //"errors"
     6 + //"fmt"
     7 + //"github.com/panjf2000/ants/v2"
     8 + //"log"
     9 + //"os"
     10 + //"os/signal"
     11 + //"strings"
     12 + //"sync"
     13 + //"syscall"
     14 + //
     15 + //"github.com/Qianlitp/crawlergo/pkg"
     16 + //"github.com/Qianlitp/crawlergo/pkg/config"
     17 + //"github.com/Qianlitp/crawlergo/pkg/logger"
     18 + //model2 "github.com/Qianlitp/crawlergo/pkg/model"
     19 + //"github.com/Qianlitp/crawlergo/pkg/tools"
     20 + //"github.com/Qianlitp/crawlergo/pkg/tools/requests"
     21 + //"github.com/sirupsen/logrus"
     22 + //"github.com/urfave/cli/v2"
    14 23   "github.com/Qianlitp/crawlergo/pkg"
    15  - "github.com/Qianlitp/crawlergo/pkg/config"
    16  - "github.com/Qianlitp/crawlergo/pkg/logger"
    17  - model2 "github.com/Qianlitp/crawlergo/pkg/model"
    18  - "github.com/Qianlitp/crawlergo/pkg/tools"
    19  - "github.com/Qianlitp/crawlergo/pkg/tools/requests"
    20  - "github.com/sirupsen/logrus"
    21 24   "github.com/urfave/cli/v2"
     25 + "os"
     26 + "sync"
    22 27  )
    23 28   
    24 29  /**
    skipped 16 lines
    41 46   Source string `json:"source"`
    42 47  }
    43 48   
    44  -type ProxyTask struct {
    45  - req *model2.Request
    46  - pushProxy string
    47  -}
     49 +//type ProxyTask struct {
     50 +// req *model2.Request
     51 +// pushProxy string
     52 +//}
    48 53   
    49 54  const (
    50 55   DefaultMaxPushProxyPoolMax = 10
    skipped 17 lines
    68 73  )
    69 74   
    70 75  func main() {
    71  - author := cli.Author{
    72  - Name: "9ian1i",
    73  - Email: "[email protected]",
    74  - }
    75  - 
    76  - ignoreKeywords = cli.NewStringSlice(config.DefaultIgnoreKeywords...)
    77  - customFormTypeValues = cli.NewStringSlice()
    78  - customFormKeywordValues = cli.NewStringSlice()
    79  - 
    80  - app := &cli.App{
    81  - Name: "crawlergo",
    82  - Usage: "A powerful browser crawler for web vulnerability scanners",
    83  - UsageText: "crawlergo [global options] url1 url2 url3 ... (must be same host)",
    84  - Version: Version,
    85  - Authors: []*cli.Author{&author},
    86  - Flags: cliFlags,
    87  - Action: run,
    88  - }
    89  - 
    90  - err := app.Run(os.Args)
    91  - if err != nil {
    92  - logger.Logger.Fatal(err)
    93  - }
    94  -}
    95  - 
    96  -func run(c *cli.Context) error {
    97  - signalChan = make(chan os.Signal, 1)
    98  - signal.Notify(signalChan, syscall.SIGTERM, syscall.SIGQUIT, syscall.SIGINT)
    99  - 
    100  - if c.Args().Len() == 0 {
    101  - logger.Logger.Error("url must be set")
    102  - return errors.New("url must be set")
    103  - }
    104  - 
    105  - // 设置日志输出级别
    106  - level, err := logrus.ParseLevel(logLevel)
    107  - if err != nil {
    108  - logger.Logger.Fatal(err)
    109  - }
    110  - logger.Logger.SetLevel(level)
    111  - 
    112  - var targets []*model2.Request
    113  - for _, _url := range c.Args().Slice() {
    114  - var req model2.Request
    115  - url, err := model2.GetUrl(_url)
    116  - if err != nil {
    117  - logger.Logger.Error("parse url failed, ", err)
    118  - continue
    119  - }
    120  - if postData != "" {
    121  - req = model2.GetRequest(config.POST, url, getOption())
    122  - } else {
    123  - req = model2.GetRequest(config.GET, url, getOption())
    124  - }
    125  - req.Proxy = taskConfig.Proxy
    126  - targets = append(targets, &req)
    127  - }
    128  - taskConfig.IgnoreKeywords = ignoreKeywords.Value()
    129  - if taskConfig.Proxy != "" {
    130  - logger.Logger.Info("request with proxy: ", taskConfig.Proxy)
    131  - }
    132  - 
    133  - if len(targets) == 0 {
    134  - logger.Logger.Fatal("no validate target.")
    135  - }
    136  - 
    137  - // 检查自定义的表单参数配置
    138  - taskConfig.CustomFormValues, err = parseCustomFormValues(customFormTypeValues.Value())
    139  - if err != nil {
    140  - logger.Logger.Fatal(err)
    141  - }
    142  - taskConfig.CustomFormKeywordValues, err = keywordStringToMap(customFormKeywordValues.Value())
    143  - if err != nil {
    144  - logger.Logger.Fatal(err)
    145  - }
    146  - 
    147  - // 开始爬虫任务
    148  - task, err := pkg.NewCrawlerTask(targets, taskConfig)
    149  - if err != nil {
    150  - logger.Logger.Error("create crawler task failed.")
    151  - os.Exit(-1)
    152  - }
    153  - if len(targets) != 0 {
    154  - logger.Logger.Info(fmt.Sprintf("Init crawler task, host: %s, max tab count: %d, max crawl count: %d.",
    155  - targets[0].URL.Host, taskConfig.MaxTabsCount, taskConfig.MaxCrawlCount))
    156  - logger.Logger.Info("filter mode: ", taskConfig.FilterMode)
    157  - }
    158  - 
    159  - // 提示自定义表单填充参数
    160  - if len(taskConfig.CustomFormValues) > 0 {
    161  - logger.Logger.Info("Custom form values, " + tools.MapStringFormat(taskConfig.CustomFormValues))
    162  - }
    163  - // 提示自定义表单填充参数
    164  - if len(taskConfig.CustomFormKeywordValues) > 0 {
    165  - logger.Logger.Info("Custom form keyword values, " + tools.MapStringFormat(taskConfig.CustomFormKeywordValues))
    166  - }
    167  - if _, ok := taskConfig.CustomFormValues["default"]; !ok {
    168  - logger.Logger.Info("If no matches, default form input text: " + config.DefaultInputText)
    169  - taskConfig.CustomFormValues["default"] = config.DefaultInputText
    170  - }
    171  - 
    172  - go handleExit(task)
    173  - logger.Logger.Info("Start crawling.")
    174  - task.Run()
    175  - result := task.Result
    176  - 
    177  - logger.Logger.Info(fmt.Sprintf("Task finished, %d results, %d requests, %d subdomains, %d domains found.",
    178  - len(result.ReqList), len(result.AllReqList), len(result.SubDomainList), len(result.AllDomainList)))
    179  - 
    180  - // 内置请求代理
    181  - if pushAddress != "" {
    182  - logger.Logger.Info("pushing results to ", pushAddress, ", max pool number:", pushProxyPoolMax)
    183  - Push2Proxy(result.ReqList)
    184  - }
    185  - 
    186  - // 输出结果
    187  - outputResult(result)
    188  - 
    189  - return nil
    190  -}
    191  - 
    192  -func getOption() model2.Options {
    193  - var option model2.Options
    194  - if postData != "" {
    195  - option.PostData = postData
    196  - }
    197  - if taskConfig.ExtraHeadersString != "" {
    198  - err := json.Unmarshal([]byte(taskConfig.ExtraHeadersString), &taskConfig.ExtraHeaders)
    199  - if err != nil {
    200  - logger.Logger.Fatal("custom headers can't be Unmarshal.")
    201  - panic(err)
    202  - }
    203  - option.Headers = taskConfig.ExtraHeaders
    204  - }
    205  - return option
    206  -}
    207  - 
    208  -func parseCustomFormValues(customData []string) (map[string]string, error) {
    209  - parsedData := map[string]string{}
    210  - for _, item := range customData {
    211  - keyValue := strings.Split(item, "=")
    212  - if len(keyValue) < 2 {
    213  - return nil, errors.New("invalid form item: " + item)
    214  - }
    215  - key := keyValue[0]
    216  - if !tools.StringSliceContain(config.AllowedFormName, key) {
    217  - return nil, errors.New("not allowed form key: " + key)
    218  - }
    219  - value := keyValue[1]
    220  - parsedData[key] = value
    221  - }
    222  - return parsedData, nil
    223  -}
    224  - 
    225  -func keywordStringToMap(data []string) (map[string]string, error) {
    226  - parsedData := map[string]string{}
    227  - for _, item := range data {
    228  - keyValue := strings.Split(item, "=")
    229  - if len(keyValue) < 2 {
    230  - return nil, errors.New("invalid keyword format: " + item)
    231  - }
    232  - key := keyValue[0]
    233  - value := keyValue[1]
    234  - parsedData[key] = value
    235  - }
    236  - return parsedData, nil
    237  -}
    238  - 
    239  -func outputResult(result *pkg.Result) {
    240  - // 输出结果
    241  - if outputMode == "json" {
    242  - fmt.Println("--[Mission Complete]--")
    243  - resBytes := getJsonSerialize(result)
    244  - fmt.Println(string(resBytes))
    245  - } else if outputMode == "console" {
    246  - for _, req := range result.ReqList {
    247  - req.FormatPrint()
    248  - }
    249  - }
    250  - if len(outputJsonPath) != 0 {
    251  - resBytes := getJsonSerialize(result)
    252  - tools.WriteFile(outputJsonPath, resBytes)
    253  - }
    254  -}
    255  - 
    256  -/**
    257  -原生被动代理推送支持
    258  -*/
    259  -func Push2Proxy(reqList []*model2.Request) {
    260  - pool, _ := ants.NewPool(pushProxyPoolMax)
    261  - defer pool.Release()
    262  - for _, req := range reqList {
    263  - task := ProxyTask{
    264  - req: req,
    265  - pushProxy: pushAddress,
    266  - }
    267  - pushProxyWG.Add(1)
    268  - go func() {
    269  - err := pool.Submit(task.doRequest)
    270  - if err != nil {
    271  - logger.Logger.Error("add Push2Proxy task failed: ", err)
    272  - pushProxyWG.Done()
    273  - }
    274  - }()
    275  - }
    276  - pushProxyWG.Wait()
    277  -}
    278  - 
    279  -/**
    280  -协程池请求的任务
    281  -*/
    282  -func (p *ProxyTask) doRequest() {
    283  - defer pushProxyWG.Done()
    284  - _, _ = requests.Request(p.req.Method, p.req.URL.String(), tools.ConvertHeaders(p.req.Headers), []byte(p.req.PostData),
    285  - &requests.ReqOptions{Timeout: 1, AllowRedirect: false, Proxy: p.pushProxy})
    286  -}
    287  - 
    288  -func handleExit(t *pkg.CrawlerTask) {
    289  - <-signalChan
    290  - fmt.Println("exit ...")
    291  - t.Pool.Tune(1)
    292  - t.Pool.Release()
    293  - t.Browser.Close()
    294  - os.Exit(-1)
     76 + //author := cli.Author{
     77 + // Name: "9ian1i",
     78 + // Email: "[email protected]",
     79 + //}
     80 + //
     81 + //ignoreKeywords = cli.NewStringSlice(config.DefaultIgnoreKeywords...)
     82 + //customFormTypeValues = cli.NewStringSlice()
     83 + //customFormKeywordValues = cli.NewStringSlice()
     84 + //
     85 + //app := &cli.App{
     86 + // Name: "crawlergo",
     87 + // Usage: "A powerful browser crawler for web vulnerability scanners",
     88 + // UsageText: "crawlergo [global options] url1 url2 url3 ... (must be same host)",
     89 + // Version: Version,
     90 + // Authors: []*cli.Author{&author},
     91 + // Flags: cliFlags,
     92 + // Action: run,
     93 + //}
     94 + //
     95 + //err := app.Run(os.Args)
     96 + //if err != nil {
     97 + // logger.Logger.Fatal(err)
     98 + //}
    295 99  }
    296 100   
    297  -func getJsonSerialize(result *pkg.Result) []byte {
    298  - var res Result
    299  - var reqList []Request
    300  - var allReqList []Request
    301  - for _, _req := range result.ReqList {
    302  - var req Request
    303  - req.Method = _req.Method
    304  - req.Url = _req.URL.String()
    305  - req.Source = _req.Source
    306  - req.Data = _req.PostData
    307  - req.Headers = _req.Headers
    308  - reqList = append(reqList, req)
    309  - }
    310  - for _, _req := range result.AllReqList {
    311  - var req Request
    312  - req.Method = _req.Method
    313  - req.Url = _req.URL.String()
    314  - req.Source = _req.Source
    315  - req.Data = _req.PostData
    316  - req.Headers = _req.Headers
    317  - allReqList = append(allReqList, req)
    318  - }
    319  - res.AllReqList = allReqList
    320  - res.ReqList = reqList
    321  - res.AllDomainList = result.AllDomainList
    322  - res.SubDomainList = result.SubDomainList
    323  - 
    324  - resBytes, err := json.Marshal(res)
    325  - if err != nil {
    326  - log.Fatal("Marshal result error")
    327  - }
    328  - return resBytes
    329  -}
     101 +//
     102 +//func run(c *cli.Context) error {
     103 +// signalChan = make(chan os.Signal, 1)
     104 +// signal.Notify(signalChan, syscall.SIGTERM, syscall.SIGQUIT, syscall.SIGINT)
     105 +//
     106 +// if c.Args().Len() == 0 {
     107 +// logger.Logger.Error("url must be set")
     108 +// return errors.New("url must be set")
     109 +// }
     110 +//
     111 +// // 设置日志输出级别
     112 +// level, err := logrus.ParseLevel(logLevel)
     113 +// if err != nil {
     114 +// logger.Logger.Fatal(err)
     115 +// }
     116 +// logger.Logger.SetLevel(level)
     117 +//
     118 +// var targets []*model2.Request
     119 +// for _, _url := range c.Args().Slice() {
     120 +// var req model2.Request
     121 +// url, err := model2.GetUrl(_url)
     122 +// if err != nil {
     123 +// logger.Logger.Error("parse url failed, ", err)
     124 +// continue
     125 +// }
     126 +// if postData != "" {
     127 +// req = model2.GetRequest(config.POST, url, getOption())
     128 +// } else {
     129 +// req = model2.GetRequest(config.GET, url, getOption())
     130 +// }
     131 +// req.Proxy = taskConfig.Proxy
     132 +// targets = append(targets, &req)
     133 +// }
     134 +// taskConfig.IgnoreKeywords = ignoreKeywords.Value()
     135 +// if taskConfig.Proxy != "" {
     136 +// logger.Logger.Info("request with proxy: ", taskConfig.Proxy)
     137 +// }
     138 +//
     139 +// if len(targets) == 0 {
     140 +// logger.Logger.Fatal("no validate target.")
     141 +// }
     142 +//
     143 +// // 检查自定义的表单参数配置
     144 +// taskConfig.CustomFormValues, err = parseCustomFormValues(customFormTypeValues.Value())
     145 +// if err != nil {
     146 +// logger.Logger.Fatal(err)
     147 +// }
     148 +// taskConfig.CustomFormKeywordValues, err = keywordStringToMap(customFormKeywordValues.Value())
     149 +// if err != nil {
     150 +// logger.Logger.Fatal(err)
     151 +// }
     152 +//
     153 +// // 开始爬虫任务
     154 +// task, err := pkg.NewCrawlerTask(targets, taskConfig)
     155 +// if err != nil {
     156 +// logger.Logger.Error("create crawler task failed.")
     157 +// os.Exit(-1)
     158 +// }
     159 +// if len(targets) != 0 {
     160 +// logger.Logger.Info(fmt.Sprintf("Init crawler task, host: %s, max tab count: %d, max crawl count: %d.",
     161 +// targets[0].URL.Host, taskConfig.MaxTabsCount, taskConfig.MaxCrawlCount))
     162 +// logger.Logger.Info("filter mode: ", taskConfig.FilterMode)
     163 +// }
     164 +//
     165 +// // 提示自定义表单填充参数
     166 +// if len(taskConfig.CustomFormValues) > 0 {
     167 +// logger.Logger.Info("Custom form values, " + tools.MapStringFormat(taskConfig.CustomFormValues))
     168 +// }
     169 +// // 提示自定义表单填充参数
     170 +// if len(taskConfig.CustomFormKeywordValues) > 0 {
     171 +// logger.Logger.Info("Custom form keyword values, " + tools.MapStringFormat(taskConfig.CustomFormKeywordValues))
     172 +// }
     173 +// if _, ok := taskConfig.CustomFormValues["default"]; !ok {
     174 +// logger.Logger.Info("If no matches, default form input text: " + config.DefaultInputText)
     175 +// taskConfig.CustomFormValues["default"] = config.DefaultInputText
     176 +// }
     177 +//
     178 +// go handleExit(task)
     179 +// logger.Logger.Info("Start crawling.")
     180 +// task.Run()
     181 +// result := task.Result
     182 +//
     183 +// logger.Logger.Info(fmt.Sprintf("Task finished, %d results, %d requests, %d subdomains, %d domains found.",
     184 +// len(result.ReqList), len(result.AllReqList), len(result.SubDomainList), len(result.AllDomainList)))
     185 +//
     186 +// // 内置请求代理
     187 +// if pushAddress != "" {
     188 +// logger.Logger.Info("pushing results to ", pushAddress, ", max pool number:", pushProxyPoolMax)
     189 +// Push2Proxy(result.ReqList)
     190 +// }
     191 +//
     192 +// // 输出结果
     193 +// outputResult(result)
     194 +//
     195 +// return nil
     196 +//}
     197 +//
     198 +//func getOption() model2.Options {
     199 +// var option model2.Options
     200 +// if postData != "" {
     201 +// option.PostData = postData
     202 +// }
     203 +// if taskConfig.ExtraHeadersString != "" {
     204 +// err := json.Unmarshal([]byte(taskConfig.ExtraHeadersString), &taskConfig.ExtraHeaders)
     205 +// if err != nil {
     206 +// logger.Logger.Fatal("custom headers can't be Unmarshal.")
     207 +// panic(err)
     208 +// }
     209 +// option.Headers = taskConfig.ExtraHeaders
     210 +// }
     211 +// return option
     212 +//}
     213 +//
     214 +//func parseCustomFormValues(customData []string) (map[string]string, error) {
     215 +// parsedData := map[string]string{}
     216 +// for _, item := range customData {
     217 +// keyValue := strings.Split(item, "=")
     218 +// if len(keyValue) < 2 {
     219 +// return nil, errors.New("invalid form item: " + item)
     220 +// }
     221 +// key := keyValue[0]
     222 +// if !tools.StringSliceContain(config.AllowedFormName, key) {
     223 +// return nil, errors.New("not allowed form key: " + key)
     224 +// }
     225 +// value := keyValue[1]
     226 +// parsedData[key] = value
     227 +// }
     228 +// return parsedData, nil
     229 +//}
     230 +//
     231 +//func keywordStringToMap(data []string) (map[string]string, error) {
     232 +// parsedData := map[string]string{}
     233 +// for _, item := range data {
     234 +// keyValue := strings.Split(item, "=")
     235 +// if len(keyValue) < 2 {
     236 +// return nil, errors.New("invalid keyword format: " + item)
     237 +// }
     238 +// key := keyValue[0]
     239 +// value := keyValue[1]
     240 +// parsedData[key] = value
     241 +// }
     242 +// return parsedData, nil
     243 +//}
     244 +//
     245 +//func outputResult(result *pkg.Result) {
     246 +// // 输出结果
     247 +// if outputMode == "json" {
     248 +// fmt.Println("--[Mission Complete]--")
     249 +// resBytes := getJsonSerialize(result)
     250 +// fmt.Println(string(resBytes))
     251 +// } else if outputMode == "console" {
     252 +// for _, req := range result.ReqList {
     253 +// req.FormatPrint()
     254 +// }
     255 +// }
     256 +// if len(outputJsonPath) != 0 {
     257 +// resBytes := getJsonSerialize(result)
     258 +// tools.WriteFile(outputJsonPath, resBytes)
     259 +// }
     260 +//}
     261 +//
     262 +///**
     263 +//原生被动代理推送支持
     264 +//*/
     265 +//func Push2Proxy(reqList []*model2.Request) {
     266 +// pool, _ := ants.NewPool(pushProxyPoolMax)
     267 +// defer pool.Release()
     268 +// for _, req := range reqList {
     269 +// task := ProxyTask{
     270 +// req: req,
     271 +// pushProxy: pushAddress,
     272 +// }
     273 +// pushProxyWG.Add(1)
     274 +// go func() {
     275 +// err := pool.Submit(task.doRequest)
     276 +// if err != nil {
     277 +// logger.Logger.Error("add Push2Proxy task failed: ", err)
     278 +// pushProxyWG.Done()
     279 +// }
     280 +// }()
     281 +// }
     282 +// pushProxyWG.Wait()
     283 +//}
     284 +//
     285 +///**
     286 +//协程池请求的任务
     287 +//*/
     288 +//func (p *ProxyTask) doRequest() {
     289 +// defer pushProxyWG.Done()
     290 +// _, _ = requests.Request(p.req.Method, p.req.URL.String(), tools.ConvertHeaders(p.req.Headers), []byte(p.req.PostData),
     291 +// &requests.ReqOptions{Timeout: 1, AllowRedirect: false, Proxy: p.pushProxy})
     292 +//}
     293 +//
     294 +//func handleExit(t *pkg.CrawlerTask) {
     295 +// <-signalChan
     296 +// fmt.Println("exit ...")
     297 +// t.Pool.Tune(1)
     298 +// t.Pool.Release()
     299 +// t.Browser.Close()
     300 +// os.Exit(-1)
     301 +//}
     302 +//
     303 +//func getJsonSerialize(result *pkg.Result) []byte {
     304 +// var res Result
     305 +// var reqList []Request
     306 +// var allReqList []Request
     307 +// for _, _req := range result.ReqList {
     308 +// var req Request
     309 +// req.Method = _req.Method
     310 +// req.Url = _req.URL.String()
     311 +// req.Source = _req.Source
     312 +// req.Data = _req.PostData
     313 +// req.Headers = _req.Headers
     314 +// reqList = append(reqList, req)
     315 +// }
     316 +// for _, _req := range result.AllReqList {
     317 +// var req Request
     318 +// req.Method = _req.Method
     319 +// req.Url = _req.URL.String()
     320 +// req.Source = _req.Source
     321 +// req.Data = _req.PostData
     322 +// req.Headers = _req.Headers
     323 +// allReqList = append(allReqList, req)
     324 +// }
     325 +// res.AllReqList = allReqList
     326 +// res.ReqList = reqList
     327 +// res.AllDomainList = result.AllDomainList
     328 +// res.SubDomainList = result.SubDomainList
     329 +//
     330 +// resBytes, err := json.Marshal(res)
     331 +// if err != nil {
     332 +// log.Fatal("Marshal result error")
     333 +// }
     334 +// return resBytes
     335 +//}
    330 336   
  • ■ ■ ■ ■ ■
    lib/goby/gobyDriver.go
    1 1  package goby
    2 2   
    3  -import "embed"
     3 +import (
     4 + "embed"
     5 + "fmt"
     6 +)
    4 7   
    5 8  //go:embed goby_pocs
    6 9  var GobyPocs embed.FS
    skipped 1 lines
    8 11  // 驱动 Goby PoCs
    9 12  func DoGobyGocks(szUrl string) {
    10 13   for poc := range LoadPocs(GobyPocs) {
    11  - if "" != poc {
     14 + szPoc := fmt.Sprintf("%v", poc)
     15 + if "" != szPoc {
    12 16   }
    13 17   }
    14 18  }
    skipped 1 lines
  • ■ ■ ■ ■ ■
    test/nuclei/testNuclei.go
    skipped 2 lines
    3 3  import (
    4 4   "bytes"
    5 5   "github.com/hktalent/scan4all/projectdiscovery/nuclei_Yaml"
     6 + runner2 "github.com/hktalent/scan4all/projectdiscovery/nuclei_Yaml/nclruner/runner"
    6 7   "github.com/projectdiscovery/nuclei/v2/pkg/model/types/severity"
    7 8   nucleiType "github.com/projectdiscovery/nuclei/v2/pkg/templates/types"
    8 9   _ "net/http/pprof"
    skipped 16 lines
    25 26  func DoNuclei(buf *bytes.Buffer, wg *sync.WaitGroup, oOpts *map[string]interface{}) {
    26 27   defer wg.Done()
    27 28   xx := make(chan bool)
    28  - go nuclei_Yaml.RunNuclei(buf, xx, oOpts)
     29 + outNuclei := make(chan *runner2.Runner, 2)
     30 + go nuclei_Yaml.RunNuclei(buf, xx, oOpts, outNuclei)
    29 31   <-xx
    30 32  }
    31 33   
    skipped 43 lines
  • ■ ■ ■ ■ ■
    vendor/github.com/Azure/go-ntlmssp/authenticate_message.go
    skipped 81 lines
    82 82   
    83 83  //ProcessChallenge crafts an AUTHENTICATE message in response to the CHALLENGE message
    84 84  //that was received from the server
    85  -func ProcessChallenge(challengeMessageData []byte, user, password string) ([]byte, error) {
     85 +func ProcessChallenge(challengeMessageData []byte, user, password string, domainNeeded bool) ([]byte, error) {
    86 86   if user == "" && password == "" {
    87 87   return nil, errors.New("Anonymous authentication not supported")
    88 88   }
    skipped 8 lines
    97 97   }
    98 98   if cm.NegotiateFlags.Has(negotiateFlagNTLMSSPNEGOTIATEKEYEXCH) {
    99 99   return nil, errors.New("Key exchange requested but not supported (NTLMSSP_NEGOTIATE_KEY_EXCH)")
     100 + }
     101 +
     102 + if !domainNeeded {
     103 + cm.TargetName = ""
    100 104   }
    101 105   
    102 106   am := authenicateMessage{
    skipped 82 lines
  • ■ ■ ■ ■ ■ ■
    vendor/github.com/Azure/go-ntlmssp/negotiator.go
    skipped 9 lines
    10 10  )
    11 11   
    12 12  // GetDomain : parse domain name from based on slashes in the input
    13  -func GetDomain(user string) (string, string) {
     13 +// Need to check for upn as well
     14 +func GetDomain(user string) (string, string, bool) {
    14 15   domain := ""
     16 + domainNeeded := false
    15 17   
    16 18   if strings.Contains(user, "\\") {
    17 19   ucomponents := strings.SplitN(user, "\\", 2)
    18 20   domain = ucomponents[0]
    19 21   user = ucomponents[1]
     22 + domainNeeded = true
     23 + } else if strings.Contains(user, "@") {
     24 + domainNeeded = false
     25 + } else {
     26 + domainNeeded = true
    20 27   }
    21  - return user, domain
     28 + return user, domain, domainNeeded
    22 29  }
    23 30   
    24 31  //Negotiator is a http.Roundtripper decorator that automatically
    skipped 66 lines
    91 98   
    92 99   // get domain from username
    93 100   domain := ""
    94  - u, domain = GetDomain(u)
     101 + u, domain, domainNeeded := GetDomain(u)
    95 102   
    96 103   // send negotiate
    97 104   negotiateMessage, err := NewNegotiateMessage(domain, "")
    skipped 27 lines
    125 132   res.Body.Close()
    126 133   
    127 134   // send authenticate
    128  - authenticateMessage, err := ProcessChallenge(challengeMessage, u, p)
     135 + authenticateMessage, err := ProcessChallenge(challengeMessage, u, p, domainNeeded)
    129 136   if err != nil {
    130 137   return nil, err
    131 138   }
    skipped 14 lines
  • ■ ■ ■ ■ ■ ■
    vendor/github.com/DataDog/zstd/LICENSE
     1 +Simplified BSD License
     2 + 
     3 +Copyright (c) 2016, Datadog <[email protected]>
     4 +All rights reserved.
     5 + 
     6 +Redistribution and use in source and binary forms, with or without
     7 +modification, are permitted provided that the following conditions are met:
     8 + 
     9 + * Redistributions of source code must retain the above copyright notice,
     10 + this list of conditions and the following disclaimer.
     11 + * Redistributions in binary form must reproduce the above copyright notice,
     12 + this list of conditions and the following disclaimer in the documentation
     13 + and/or other materials provided with the distribution.
     14 + * Neither the name of the copyright holder nor the names of its contributors
     15 + may be used to endorse or promote products derived from this software
     16 + without specific prior written permission.
     17 + 
     18 +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
     19 +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     20 +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
     21 +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
     22 +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     23 +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
     24 +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
     25 +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     26 +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     27 +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     28 + 
  • ■ ■ ■ ■ ■ ■
    vendor/github.com/DataDog/zstd/README.md
     1 +# Zstd Go Wrapper
     2 + 
     3 +[![CircleCI](https://circleci.com/gh/DataDog/zstd/tree/1.x.svg?style=svg)](https://circleci.com/gh/DataDog/zstd/tree/1.x)
     4 +[![GoDoc](https://godoc.org/github.com/DataDog/zstd?status.svg)](https://godoc.org/github.com/DataDog/zstd)
     5 + 
     6 + 
     7 +[C Zstd Homepage](https://github.com/facebook/zstd)
     8 + 
     9 +The current headers and C files are from *v1.5.0* (Commit
     10 +[10f0e699](https://github.com/facebook/zstd/releases/tag/v1.5.0)).
     11 + 
     12 +## Usage
     13 + 
     14 +There are two main APIs:
     15 + 
     16 +* simple Compress/Decompress
     17 +* streaming API (io.Reader/io.Writer)
     18 + 
     19 +The compress/decompress APIs mirror that of lz4, while the streaming API was
     20 +designed to be a drop-in replacement for zlib.
     21 + 
     22 +### Building against an external libzstd
     23 + 
     24 +By default, zstd source code is vendored in this repository and the binding will be built with
     25 +the vendored source code bundled.
     26 + 
     27 +If you want to build this binding against an external static or shared libzstd library, you can
     28 +use the `external_libzstd` build tag. This will look for the libzstd pkg-config file and extract
     29 +build and linking parameters from that pkg-config file.
     30 + 
     31 +Note that it requires at least libzstd 1.4.0.
     32 + 
     33 +```bash
     34 +go build -tags external_libzstd
     35 +```
     36 + 
     37 +### Simple `Compress/Decompress`
     38 + 
     39 + 
     40 +```go
     41 +// Compress compresses the byte array given in src and writes it to dst.
     42 +// If you already have a buffer allocated, you can pass it to prevent allocation
     43 +// If not, you can pass nil as dst.
     44 +// If the buffer is too small, it will be reallocated, resized, and returned bu the function
     45 +// If dst is nil, this will allocate the worst case size (CompressBound(src))
     46 +Compress(dst, src []byte) ([]byte, error)
     47 +```
     48 + 
     49 +```go
     50 +// CompressLevel is the same as Compress but you can pass another compression level
     51 +CompressLevel(dst, src []byte, level int) ([]byte, error)
     52 +```
     53 + 
     54 +```go
     55 +// Decompress will decompress your payload into dst.
     56 +// If you already have a buffer allocated, you can pass it to prevent allocation
     57 +// If not, you can pass nil as dst (allocates a 4*src size as default).
     58 +// If the buffer is too small, it will retry 3 times by doubling the dst size
     59 +// After max retries, it will switch to the slower stream API to be sure to be able
     60 +// to decompress. Currently switches if compression ratio > 4*2**3=32.
     61 +Decompress(dst, src []byte) ([]byte, error)
     62 +```
     63 + 
     64 +### Stream API
     65 + 
     66 +```go
     67 +// NewWriter creates a new object that can optionally be initialized with
     68 +// a precomputed dictionary. If dict is nil, compress without a dictionary.
     69 +// The dictionary array should not be changed during the use of this object.
     70 +// You MUST CALL Close() to write the last bytes of a zstd stream and free C objects.
     71 +NewWriter(w io.Writer) *Writer
     72 +NewWriterLevel(w io.Writer, level int) *Writer
     73 +NewWriterLevelDict(w io.Writer, level int, dict []byte) *Writer
     74 + 
     75 +// Write compresses the input data and write it to the underlying writer
     76 +(w *Writer) Write(p []byte) (int, error)
     77 + 
     78 +// Flush writes any unwritten data to the underlying writer
     79 +(w *Writer) Flush() error
     80 + 
     81 +// Close flushes the buffer and frees C zstd objects
     82 +(w *Writer) Close() error
     83 +```
     84 + 
     85 +```go
     86 +// NewReader returns a new io.ReadCloser that will decompress data from the
     87 +// underlying reader. If a dictionary is provided to NewReaderDict, it must
     88 +// not be modified until Close is called. It is the caller's responsibility
     89 +// to call Close, which frees up C objects.
     90 +NewReader(r io.Reader) io.ReadCloser
     91 +NewReaderDict(r io.Reader, dict []byte) io.ReadCloser
     92 +```
     93 + 
     94 +### Benchmarks (benchmarked with v0.5.0)
     95 + 
     96 +The author of Zstd also wrote lz4. Zstd is intended to occupy a speed/ratio
     97 +level similar to what zlib currently provides. In our tests, the can always
     98 +be made to be better than zlib by chosing an appropriate level while still
     99 +keeping compression and decompression time faster than zlib.
     100 + 
     101 +You can run the benchmarks against your own payloads by using the Go benchmarks tool.
     102 +Just export your payload filepath as the `PAYLOAD` environment variable and run the benchmarks:
     103 + 
     104 +```go
     105 +go test -bench .
     106 +```
     107 + 
     108 +Compression of a 7Mb pdf zstd (this wrapper) vs [czlib](https://github.com/DataDog/czlib):
     109 +```
     110 +BenchmarkCompression 5 221056624 ns/op 67.34 MB/s
     111 +BenchmarkDecompression 100 18370416 ns/op 810.32 MB/s
     112 + 
     113 +BenchmarkFzlibCompress 2 610156603 ns/op 24.40 MB/s
     114 +BenchmarkFzlibDecompress 20 81195246 ns/op 183.33 MB/s
     115 +```
     116 + 
     117 +Ratio is also better by a margin of ~20%.
     118 +Compression speed is always better than zlib on all the payloads we tested;
     119 +However, [czlib](https://github.com/DataDog/czlib) has optimisations that make it
     120 +faster at decompressiong small payloads:
     121 + 
     122 +```
     123 +Testing with size: 11... czlib: 8.97 MB/s, zstd: 3.26 MB/s
     124 +Testing with size: 27... czlib: 23.3 MB/s, zstd: 8.22 MB/s
     125 +Testing with size: 62... czlib: 31.6 MB/s, zstd: 19.49 MB/s
     126 +Testing with size: 141... czlib: 74.54 MB/s, zstd: 42.55 MB/s
     127 +Testing with size: 323... czlib: 155.14 MB/s, zstd: 99.39 MB/s
     128 +Testing with size: 739... czlib: 235.9 MB/s, zstd: 216.45 MB/s
     129 +Testing with size: 1689... czlib: 116.45 MB/s, zstd: 345.64 MB/s
     130 +Testing with size: 3858... czlib: 176.39 MB/s, zstd: 617.56 MB/s
     131 +Testing with size: 8811... czlib: 254.11 MB/s, zstd: 824.34 MB/s
     132 +Testing with size: 20121... czlib: 197.43 MB/s, zstd: 1339.11 MB/s
     133 +Testing with size: 45951... czlib: 201.62 MB/s, zstd: 1951.57 MB/s
     134 +```
     135 + 
     136 +zstd starts to shine with payloads > 1KB
     137 + 
     138 +### Stability - Current state: STABLE
     139 + 
     140 +The C library seems to be pretty stable and according to the author has been tested and fuzzed.
     141 + 
     142 +For the Go wrapper, the test cover most usual cases and we have succesfully tested it on all staging and prod data.
     143 + 
  • ■ ■ ■ ■ ■ ■
    vendor/github.com/DataDog/zstd/ZSTD_LICENSE
     1 +BSD License
     2 + 
     3 +For Zstandard software
     4 + 
     5 +Copyright (c) 2016-present, Facebook, Inc. All rights reserved.
     6 + 
     7 +Redistribution and use in source and binary forms, with or without modification,
     8 +are permitted provided that the following conditions are met:
     9 + 
     10 + * Redistributions of source code must retain the above copyright notice, this
     11 + list of conditions and the following disclaimer.
     12 + 
     13 + * Redistributions in binary form must reproduce the above copyright notice,
     14 + this list of conditions and the following disclaimer in the documentation
     15 + and/or other materials provided with the distribution.
     16 + 
     17 + * Neither the name Facebook nor the names of its contributors may be used to
     18 + endorse or promote products derived from this software without specific
     19 + prior written permission.
     20 + 
     21 +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
     22 +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
     23 +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
     24 +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
     25 +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
     26 +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
     27 +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
     28 +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     29 +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
     30 +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     31 + 
  • ■ ■ ■ ■ ■ ■
    vendor/github.com/DataDog/zstd/bitstream.h
     1 +#ifndef USE_EXTERNAL_ZSTD
     2 +/* ******************************************************************
     3 + * bitstream
     4 + * Part of FSE library
     5 + * Copyright (c) Yann Collet, Facebook, Inc.
     6 + *
     7 + * You can contact the author at :
     8 + * - Source repository : https://github.com/Cyan4973/FiniteStateEntropy
     9 + *
     10 + * This source code is licensed under both the BSD-style license (found in the
     11 + * LICENSE file in the root directory of this source tree) and the GPLv2 (found
     12 + * in the COPYING file in the root directory of this source tree).
     13 + * You may select, at your option, one of the above-listed licenses.
     14 +****************************************************************** */
     15 +#ifndef BITSTREAM_H_MODULE
     16 +#define BITSTREAM_H_MODULE
     17 + 
     18 +#if defined (__cplusplus)
     19 +extern "C" {
     20 +#endif
     21 +/*
     22 +* This API consists of small unitary functions, which must be inlined for best performance.
     23 +* Since link-time-optimization is not available for all compilers,
     24 +* these functions are defined into a .h to be included.
     25 +*/
     26 + 
     27 +/*-****************************************
     28 +* Dependencies
     29 +******************************************/
     30 +#include "mem.h" /* unaligned access routines */
     31 +#include "compiler.h" /* UNLIKELY() */
     32 +#include "debug.h" /* assert(), DEBUGLOG(), RAWLOG() */
     33 +#include "error_private.h" /* error codes and messages */
     34 + 
     35 + 
     36 +/*=========================================
     37 +* Target specific
     38 +=========================================*/
     39 +#ifndef ZSTD_NO_INTRINSICS
     40 +# if defined(__BMI__) && defined(__GNUC__)
     41 +# include <immintrin.h> /* support for bextr (experimental) */
     42 +# elif defined(__ICCARM__)
     43 +# include <intrinsics.h>
     44 +# endif
     45 +#endif
     46 + 
     47 +#define STREAM_ACCUMULATOR_MIN_32 25
     48 +#define STREAM_ACCUMULATOR_MIN_64 57
     49 +#define STREAM_ACCUMULATOR_MIN ((U32)(MEM_32bits() ? STREAM_ACCUMULATOR_MIN_32 : STREAM_ACCUMULATOR_MIN_64))
     50 + 
     51 + 
     52 +/*-******************************************
     53 +* bitStream encoding API (write forward)
     54 +********************************************/
     55 +/* bitStream can mix input from multiple sources.
     56 + * A critical property of these streams is that they encode and decode in **reverse** direction.
     57 + * So the first bit sequence you add will be the last to be read, like a LIFO stack.
     58 + */
     59 +typedef struct {
     60 + size_t bitContainer;
     61 + unsigned bitPos;
     62 + char* startPtr;
     63 + char* ptr;
     64 + char* endPtr;
     65 +} BIT_CStream_t;
     66 + 
     67 +MEM_STATIC size_t BIT_initCStream(BIT_CStream_t* bitC, void* dstBuffer, size_t dstCapacity);
     68 +MEM_STATIC void BIT_addBits(BIT_CStream_t* bitC, size_t value, unsigned nbBits);
     69 +MEM_STATIC void BIT_flushBits(BIT_CStream_t* bitC);
     70 +MEM_STATIC size_t BIT_closeCStream(BIT_CStream_t* bitC);
     71 + 
     72 +/* Start with initCStream, providing the size of buffer to write into.
     73 +* bitStream will never write outside of this buffer.
     74 +* `dstCapacity` must be >= sizeof(bitD->bitContainer), otherwise @return will be an error code.
     75 +*
     76 +* bits are first added to a local register.
     77 +* Local register is size_t, hence 64-bits on 64-bits systems, or 32-bits on 32-bits systems.
     78 +* Writing data into memory is an explicit operation, performed by the flushBits function.
     79 +* Hence keep track how many bits are potentially stored into local register to avoid register overflow.
     80 +* After a flushBits, a maximum of 7 bits might still be stored into local register.
     81 +*
     82 +* Avoid storing elements of more than 24 bits if you want compatibility with 32-bits bitstream readers.
     83 +*
     84 +* Last operation is to close the bitStream.
     85 +* The function returns the final size of CStream in bytes.
     86 +* If data couldn't fit into `dstBuffer`, it will return a 0 ( == not storable)
     87 +*/
     88 + 
     89 + 
     90 +/*-********************************************
     91 +* bitStream decoding API (read backward)
     92 +**********************************************/
     93 +typedef struct {
     94 + size_t bitContainer;
     95 + unsigned bitsConsumed;
     96 + const char* ptr;
     97 + const char* start;
     98 + const char* limitPtr;
     99 +} BIT_DStream_t;
     100 + 
     101 +typedef enum { BIT_DStream_unfinished = 0,
     102 + BIT_DStream_endOfBuffer = 1,
     103 + BIT_DStream_completed = 2,
     104 + BIT_DStream_overflow = 3 } BIT_DStream_status; /* result of BIT_reloadDStream() */
     105 + /* 1,2,4,8 would be better for bitmap combinations, but slows down performance a bit ... :( */
     106 + 
     107 +MEM_STATIC size_t BIT_initDStream(BIT_DStream_t* bitD, const void* srcBuffer, size_t srcSize);
     108 +MEM_STATIC size_t BIT_readBits(BIT_DStream_t* bitD, unsigned nbBits);
     109 +MEM_STATIC BIT_DStream_status BIT_reloadDStream(BIT_DStream_t* bitD);
     110 +MEM_STATIC unsigned BIT_endOfDStream(const BIT_DStream_t* bitD);
     111 + 
     112 + 
     113 +/* Start by invoking BIT_initDStream().
     114 +* A chunk of the bitStream is then stored into a local register.
     115 +* Local register size is 64-bits on 64-bits systems, 32-bits on 32-bits systems (size_t).
     116 +* You can then retrieve bitFields stored into the local register, **in reverse order**.
     117 +* Local register is explicitly reloaded from memory by the BIT_reloadDStream() method.
     118 +* A reload guarantee a minimum of ((8*sizeof(bitD->bitContainer))-7) bits when its result is BIT_DStream_unfinished.
     119 +* Otherwise, it can be less than that, so proceed accordingly.
     120 +* Checking if DStream has reached its end can be performed with BIT_endOfDStream().
     121 +*/
     122 + 
     123 + 
     124 +/*-****************************************
     125 +* unsafe API
     126 +******************************************/
     127 +MEM_STATIC void BIT_addBitsFast(BIT_CStream_t* bitC, size_t value, unsigned nbBits);
     128 +/* faster, but works only if value is "clean", meaning all high bits above nbBits are 0 */
     129 + 
     130 +MEM_STATIC void BIT_flushBitsFast(BIT_CStream_t* bitC);
     131 +/* unsafe version; does not check buffer overflow */
     132 + 
     133 +MEM_STATIC size_t BIT_readBitsFast(BIT_DStream_t* bitD, unsigned nbBits);
     134 +/* faster, but works only if nbBits >= 1 */
     135 + 
     136 + 
     137 + 
     138 +/*-**************************************************************
     139 +* Internal functions
     140 +****************************************************************/
     141 +MEM_STATIC unsigned BIT_highbit32 (U32 val)
     142 +{
     143 + assert(val != 0);
     144 + {
     145 +# if defined(_MSC_VER) /* Visual */
     146 +# if STATIC_BMI2 == 1
     147 + return _lzcnt_u32(val) ^ 31;
     148 +# else
     149 + if (val != 0) {
     150 + unsigned long r;
     151 + _BitScanReverse(&r, val);
     152 + return (unsigned)r;
     153 + } else {
     154 + /* Should not reach this code path */
     155 + __assume(0);
     156 + }
     157 +# endif
     158 +# elif defined(__GNUC__) && (__GNUC__ >= 3) /* Use GCC Intrinsic */
     159 + return __builtin_clz (val) ^ 31;
     160 +# elif defined(__ICCARM__) /* IAR Intrinsic */
     161 + return 31 - __CLZ(val);
     162 +# else /* Software version */
     163 + static const unsigned DeBruijnClz[32] = { 0, 9, 1, 10, 13, 21, 2, 29,
     164 + 11, 14, 16, 18, 22, 25, 3, 30,
     165 + 8, 12, 20, 28, 15, 17, 24, 7,
     166 + 19, 27, 23, 6, 26, 5, 4, 31 };
     167 + U32 v = val;
     168 + v |= v >> 1;
     169 + v |= v >> 2;
     170 + v |= v >> 4;
     171 + v |= v >> 8;
     172 + v |= v >> 16;
     173 + return DeBruijnClz[ (U32) (v * 0x07C4ACDDU) >> 27];
     174 +# endif
     175 + }
     176 +}
     177 + 
     178 +/*===== Local Constants =====*/
     179 +static const unsigned BIT_mask[] = {
     180 + 0, 1, 3, 7, 0xF, 0x1F,
     181 + 0x3F, 0x7F, 0xFF, 0x1FF, 0x3FF, 0x7FF,
     182 + 0xFFF, 0x1FFF, 0x3FFF, 0x7FFF, 0xFFFF, 0x1FFFF,
     183 + 0x3FFFF, 0x7FFFF, 0xFFFFF, 0x1FFFFF, 0x3FFFFF, 0x7FFFFF,
     184 + 0xFFFFFF, 0x1FFFFFF, 0x3FFFFFF, 0x7FFFFFF, 0xFFFFFFF, 0x1FFFFFFF,
     185 + 0x3FFFFFFF, 0x7FFFFFFF}; /* up to 31 bits */
     186 +#define BIT_MASK_SIZE (sizeof(BIT_mask) / sizeof(BIT_mask[0]))
     187 + 
     188 +/*-**************************************************************
     189 +* bitStream encoding
     190 +****************************************************************/
     191 +/*! BIT_initCStream() :
     192 + * `dstCapacity` must be > sizeof(size_t)
     193 + * @return : 0 if success,
     194 + * otherwise an error code (can be tested using ERR_isError()) */
     195 +MEM_STATIC size_t BIT_initCStream(BIT_CStream_t* bitC,
     196 + void* startPtr, size_t dstCapacity)
     197 +{
     198 + bitC->bitContainer = 0;
     199 + bitC->bitPos = 0;
     200 + bitC->startPtr = (char*)startPtr;
     201 + bitC->ptr = bitC->startPtr;
     202 + bitC->endPtr = bitC->startPtr + dstCapacity - sizeof(bitC->bitContainer);
     203 + if (dstCapacity <= sizeof(bitC->bitContainer)) return ERROR(dstSize_tooSmall);
     204 + return 0;
     205 +}
     206 + 
     207 +/*! BIT_addBits() :
     208 + * can add up to 31 bits into `bitC`.
     209 + * Note : does not check for register overflow ! */
     210 +MEM_STATIC void BIT_addBits(BIT_CStream_t* bitC,
     211 + size_t value, unsigned nbBits)
     212 +{
     213 + DEBUG_STATIC_ASSERT(BIT_MASK_SIZE == 32);
     214 + assert(nbBits < BIT_MASK_SIZE);
     215 + assert(nbBits + bitC->bitPos < sizeof(bitC->bitContainer) * 8);
     216 + bitC->bitContainer |= (value & BIT_mask[nbBits]) << bitC->bitPos;
     217 + bitC->bitPos += nbBits;
     218 +}
     219 + 
     220 +/*! BIT_addBitsFast() :
     221 + * works only if `value` is _clean_,
     222 + * meaning all high bits above nbBits are 0 */
     223 +MEM_STATIC void BIT_addBitsFast(BIT_CStream_t* bitC,
     224 + size_t value, unsigned nbBits)
     225 +{
     226 + assert((value>>nbBits) == 0);
     227 + assert(nbBits + bitC->bitPos < sizeof(bitC->bitContainer) * 8);
     228 + bitC->bitContainer |= value << bitC->bitPos;
     229 + bitC->bitPos += nbBits;
     230 +}
     231 + 
     232 +/*! BIT_flushBitsFast() :
     233 + * assumption : bitContainer has not overflowed
     234 + * unsafe version; does not check buffer overflow */
     235 +MEM_STATIC void BIT_flushBitsFast(BIT_CStream_t* bitC)
     236 +{
     237 + size_t const nbBytes = bitC->bitPos >> 3;
     238 + assert(bitC->bitPos < sizeof(bitC->bitContainer) * 8);
     239 + assert(bitC->ptr <= bitC->endPtr);
     240 + MEM_writeLEST(bitC->ptr, bitC->bitContainer);
     241 + bitC->ptr += nbBytes;
     242 + bitC->bitPos &= 7;
     243 + bitC->bitContainer >>= nbBytes*8;
     244 +}
     245 + 
     246 +/*! BIT_flushBits() :
     247 + * assumption : bitContainer has not overflowed
     248 + * safe version; check for buffer overflow, and prevents it.
     249 + * note : does not signal buffer overflow.
     250 + * overflow will be revealed later on using BIT_closeCStream() */
     251 +MEM_STATIC void BIT_flushBits(BIT_CStream_t* bitC)
     252 +{
     253 + size_t const nbBytes = bitC->bitPos >> 3;
     254 + assert(bitC->bitPos < sizeof(bitC->bitContainer) * 8);
     255 + assert(bitC->ptr <= bitC->endPtr);
     256 + MEM_writeLEST(bitC->ptr, bitC->bitContainer);
     257 + bitC->ptr += nbBytes;
     258 + if (bitC->ptr > bitC->endPtr) bitC->ptr = bitC->endPtr;
     259 + bitC->bitPos &= 7;
     260 + bitC->bitContainer >>= nbBytes*8;
     261 +}
     262 + 
     263 +/*! BIT_closeCStream() :
     264 + * @return : size of CStream, in bytes,
     265 + * or 0 if it could not fit into dstBuffer */
     266 +MEM_STATIC size_t BIT_closeCStream(BIT_CStream_t* bitC)
     267 +{
     268 + BIT_addBitsFast(bitC, 1, 1); /* endMark */
     269 + BIT_flushBits(bitC);
     270 + if (bitC->ptr >= bitC->endPtr) return 0; /* overflow detected */
     271 + return (bitC->ptr - bitC->startPtr) + (bitC->bitPos > 0);
     272 +}
     273 + 
     274 + 
     275 +/*-********************************************************
     276 +* bitStream decoding
     277 +**********************************************************/
     278 +/*! BIT_initDStream() :
     279 + * Initialize a BIT_DStream_t.
     280 + * `bitD` : a pointer to an already allocated BIT_DStream_t structure.
     281 + * `srcSize` must be the *exact* size of the bitStream, in bytes.
     282 + * @return : size of stream (== srcSize), or an errorCode if a problem is detected
     283 + */
     284 +MEM_STATIC size_t BIT_initDStream(BIT_DStream_t* bitD, const void* srcBuffer, size_t srcSize)
     285 +{
     286 + if (srcSize < 1) { ZSTD_memset(bitD, 0, sizeof(*bitD)); return ERROR(srcSize_wrong); }
     287 + 
     288 + bitD->start = (const char*)srcBuffer;
     289 + bitD->limitPtr = bitD->start + sizeof(bitD->bitContainer);
     290 + 
     291 + if (srcSize >= sizeof(bitD->bitContainer)) { /* normal case */
     292 + bitD->ptr = (const char*)srcBuffer + srcSize - sizeof(bitD->bitContainer);
     293 + bitD->bitContainer = MEM_readLEST(bitD->ptr);
     294 + { BYTE const lastByte = ((const BYTE*)srcBuffer)[srcSize-1];
     295 + bitD->bitsConsumed = lastByte ? 8 - BIT_highbit32(lastByte) : 0; /* ensures bitsConsumed is always set */
     296 + if (lastByte == 0) return ERROR(GENERIC); /* endMark not present */ }
     297 + } else {
     298 + bitD->ptr = bitD->start;
     299 + bitD->bitContainer = *(const BYTE*)(bitD->start);
     300 + switch(srcSize)
     301 + {
     302 + case 7: bitD->bitContainer += (size_t)(((const BYTE*)(srcBuffer))[6]) << (sizeof(bitD->bitContainer)*8 - 16);
     303 + ZSTD_FALLTHROUGH;
     304 + 
     305 + case 6: bitD->bitContainer += (size_t)(((const BYTE*)(srcBuffer))[5]) << (sizeof(bitD->bitContainer)*8 - 24);
     306 + ZSTD_FALLTHROUGH;
     307 + 
     308 + case 5: bitD->bitContainer += (size_t)(((const BYTE*)(srcBuffer))[4]) << (sizeof(bitD->bitContainer)*8 - 32);
     309 + ZSTD_FALLTHROUGH;
     310 + 
     311 + case 4: bitD->bitContainer += (size_t)(((const BYTE*)(srcBuffer))[3]) << 24;
     312 + ZSTD_FALLTHROUGH;
     313 + 
     314 + case 3: bitD->bitContainer += (size_t)(((const BYTE*)(srcBuffer))[2]) << 16;
     315 + ZSTD_FALLTHROUGH;
     316 + 
     317 + case 2: bitD->bitContainer += (size_t)(((const BYTE*)(srcBuffer))[1]) << 8;
     318 + ZSTD_FALLTHROUGH;
     319 + 
     320 + default: break;
     321 + }
     322 + { BYTE const lastByte = ((const BYTE*)srcBuffer)[srcSize-1];
     323 + bitD->bitsConsumed = lastByte ? 8 - BIT_highbit32(lastByte) : 0;
     324 + if (lastByte == 0) return ERROR(corruption_detected); /* endMark not present */
     325 + }
     326 + bitD->bitsConsumed += (U32)(sizeof(bitD->bitContainer) - srcSize)*8;
     327 + }
     328 + 
     329 + return srcSize;
     330 +}
     331 + 
     332 +MEM_STATIC FORCE_INLINE_ATTR size_t BIT_getUpperBits(size_t bitContainer, U32 const start)
     333 +{
     334 + return bitContainer >> start;
     335 +}
     336 + 
     337 +MEM_STATIC FORCE_INLINE_ATTR size_t BIT_getMiddleBits(size_t bitContainer, U32 const start, U32 const nbBits)
     338 +{
     339 + U32 const regMask = sizeof(bitContainer)*8 - 1;
     340 + /* if start > regMask, bitstream is corrupted, and result is undefined */
     341 + assert(nbBits < BIT_MASK_SIZE);
     342 + /* x86 transform & ((1 << nbBits) - 1) to bzhi instruction, it is better
     343 + * than accessing memory. When bmi2 instruction is not present, we consider
     344 + * such cpus old (pre-Haswell, 2013) and their performance is not of that
     345 + * importance.
     346 + */
     347 +#if defined(__x86_64__) || defined(_M_X86)
     348 + return (bitContainer >> (start & regMask)) & ((((U64)1) << nbBits) - 1);
     349 +#else
     350 + return (bitContainer >> (start & regMask)) & BIT_mask[nbBits];
     351 +#endif
     352 +}
     353 + 
     354 +MEM_STATIC FORCE_INLINE_ATTR size_t BIT_getLowerBits(size_t bitContainer, U32 const nbBits)
     355 +{
     356 +#if defined(STATIC_BMI2) && STATIC_BMI2 == 1
     357 + return _bzhi_u64(bitContainer, nbBits);
     358 +#else
     359 + assert(nbBits < BIT_MASK_SIZE);
     360 + return bitContainer & BIT_mask[nbBits];
     361 +#endif
     362 +}
     363 + 
     364 +/*! BIT_lookBits() :
     365 + * Provides next n bits from local register.
     366 + * local register is not modified.
     367 + * On 32-bits, maxNbBits==24.
     368 + * On 64-bits, maxNbBits==56.
     369 + * @return : value extracted */
     370 +MEM_STATIC FORCE_INLINE_ATTR size_t BIT_lookBits(const BIT_DStream_t* bitD, U32 nbBits)
     371 +{
     372 + /* arbitrate between double-shift and shift+mask */
     373 +#if 1
     374 + /* if bitD->bitsConsumed + nbBits > sizeof(bitD->bitContainer)*8,
     375 + * bitstream is likely corrupted, and result is undefined */
     376 + return BIT_getMiddleBits(bitD->bitContainer, (sizeof(bitD->bitContainer)*8) - bitD->bitsConsumed - nbBits, nbBits);
     377 +#else
     378 + /* this code path is slower on my os-x laptop */
     379 + U32 const regMask = sizeof(bitD->bitContainer)*8 - 1;
     380 + return ((bitD->bitContainer << (bitD->bitsConsumed & regMask)) >> 1) >> ((regMask-nbBits) & regMask);
     381 +#endif
     382 +}
     383 + 
     384 +/*! BIT_lookBitsFast() :
     385 + * unsafe version; only works if nbBits >= 1 */
     386 +MEM_STATIC size_t BIT_lookBitsFast(const BIT_DStream_t* bitD, U32 nbBits)
     387 +{
     388 + U32 const regMask = sizeof(bitD->bitContainer)*8 - 1;
     389 + assert(nbBits >= 1);
     390 + return (bitD->bitContainer << (bitD->bitsConsumed & regMask)) >> (((regMask+1)-nbBits) & regMask);
     391 +}
     392 + 
     393 +MEM_STATIC FORCE_INLINE_ATTR void BIT_skipBits(BIT_DStream_t* bitD, U32 nbBits)
     394 +{
     395 + bitD->bitsConsumed += nbBits;
     396 +}
     397 + 
     398 +/*! BIT_readBits() :
     399 + * Read (consume) next n bits from local register and update.
     400 + * Pay attention to not read more than nbBits contained into local register.
     401 + * @return : extracted value. */
     402 +MEM_STATIC FORCE_INLINE_ATTR size_t BIT_readBits(BIT_DStream_t* bitD, unsigned nbBits)
     403 +{
     404 + size_t const value = BIT_lookBits(bitD, nbBits);
     405 + BIT_skipBits(bitD, nbBits);
     406 + return value;
     407 +}
     408 + 
     409 +/*! BIT_readBitsFast() :
     410 + * unsafe version; only works only if nbBits >= 1 */
     411 +MEM_STATIC size_t BIT_readBitsFast(BIT_DStream_t* bitD, unsigned nbBits)
     412 +{
     413 + size_t const value = BIT_lookBitsFast(bitD, nbBits);
     414 + assert(nbBits >= 1);
     415 + BIT_skipBits(bitD, nbBits);
     416 + return value;
     417 +}
     418 + 
     419 +/*! BIT_reloadDStreamFast() :
     420 + * Similar to BIT_reloadDStream(), but with two differences:
     421 + * 1. bitsConsumed <= sizeof(bitD->bitContainer)*8 must hold!
     422 + * 2. Returns BIT_DStream_overflow when bitD->ptr < bitD->limitPtr, at this
     423 + * point you must use BIT_reloadDStream() to reload.
     424 + */
     425 +MEM_STATIC BIT_DStream_status BIT_reloadDStreamFast(BIT_DStream_t* bitD)
     426 +{
     427 + if (UNLIKELY(bitD->ptr < bitD->limitPtr))
     428 + return BIT_DStream_overflow;
     429 + assert(bitD->bitsConsumed <= sizeof(bitD->bitContainer)*8);
     430 + bitD->ptr -= bitD->bitsConsumed >> 3;
     431 + bitD->bitsConsumed &= 7;
     432 + bitD->bitContainer = MEM_readLEST(bitD->ptr);
     433 + return BIT_DStream_unfinished;
     434 +}
     435 + 
     436 +/*! BIT_reloadDStream() :
     437 + * Refill `bitD` from buffer previously set in BIT_initDStream() .
     438 + * This function is safe, it guarantees it will not read beyond src buffer.
     439 + * @return : status of `BIT_DStream_t` internal register.
     440 + * when status == BIT_DStream_unfinished, internal register is filled with at least 25 or 57 bits */
     441 +MEM_STATIC BIT_DStream_status BIT_reloadDStream(BIT_DStream_t* bitD)
     442 +{
     443 + if (bitD->bitsConsumed > (sizeof(bitD->bitContainer)*8)) /* overflow detected, like end of stream */
     444 + return BIT_DStream_overflow;
     445 + 
     446 + if (bitD->ptr >= bitD->limitPtr) {
     447 + return BIT_reloadDStreamFast(bitD);
     448 + }
     449 + if (bitD->ptr == bitD->start) {
     450 + if (bitD->bitsConsumed < sizeof(bitD->bitContainer)*8) return BIT_DStream_endOfBuffer;
     451 + return BIT_DStream_completed;
     452 + }
     453 + /* start < ptr < limitPtr */
     454 + { U32 nbBytes = bitD->bitsConsumed >> 3;
     455 + BIT_DStream_status result = BIT_DStream_unfinished;
     456 + if (bitD->ptr - nbBytes < bitD->start) {
     457 + nbBytes = (U32)(bitD->ptr - bitD->start); /* ptr > start */
     458 + result = BIT_DStream_endOfBuffer;
     459 + }
     460 + bitD->ptr -= nbBytes;
     461 + bitD->bitsConsumed -= nbBytes*8;
     462 + bitD->bitContainer = MEM_readLEST(bitD->ptr); /* reminder : srcSize > sizeof(bitD->bitContainer), otherwise bitD->ptr == bitD->start */
     463 + return result;
     464 + }
     465 +}
     466 + 
     467 +/*! BIT_endOfDStream() :
     468 + * @return : 1 if DStream has _exactly_ reached its end (all bits consumed).
     469 + */
     470 +MEM_STATIC unsigned BIT_endOfDStream(const BIT_DStream_t* DStream)
     471 +{
     472 + return ((DStream->ptr == DStream->start) && (DStream->bitsConsumed == sizeof(DStream->bitContainer)*8));
     473 +}
     474 + 
     475 +#if defined (__cplusplus)
     476 +}
     477 +#endif
     478 + 
     479 +#endif /* BITSTREAM_H_MODULE */
     480 + 
     481 +#endif /* USE_EXTERNAL_ZSTD */
     482 + 
  • ■ ■ ■ ■ ■ ■
    vendor/github.com/DataDog/zstd/clevels.h
     1 +#ifndef USE_EXTERNAL_ZSTD
     2 +/*
     3 + * Copyright (c) Yann Collet, Facebook, Inc.
     4 + * All rights reserved.
     5 + *
     6 + * This source code is licensed under both the BSD-style license (found in the
     7 + * LICENSE file in the root directory of this source tree) and the GPLv2 (found
     8 + * in the COPYING file in the root directory of this source tree).
     9 + * You may select, at your option, one of the above-listed licenses.
     10 + */
     11 + 
     12 +#ifndef ZSTD_CLEVELS_H
     13 +#define ZSTD_CLEVELS_H
     14 + 
     15 +#define ZSTD_STATIC_LINKING_ONLY /* ZSTD_compressionParameters */
     16 +#include "zstd.h"
     17 + 
     18 +/*-===== Pre-defined compression levels =====-*/
     19 + 
     20 +#define ZSTD_MAX_CLEVEL 22
     21 + 
     22 +#ifdef __GNUC__
     23 +__attribute__((__unused__))
     24 +#endif
     25 + 
     26 +static const ZSTD_compressionParameters ZSTD_defaultCParameters[4][ZSTD_MAX_CLEVEL+1] = {
     27 +{ /* "default" - for any srcSize > 256 KB */
     28 + /* W, C, H, S, L, TL, strat */
     29 + { 19, 12, 13, 1, 6, 1, ZSTD_fast }, /* base for negative levels */
     30 + { 19, 13, 14, 1, 7, 0, ZSTD_fast }, /* level 1 */
     31 + { 20, 15, 16, 1, 6, 0, ZSTD_fast }, /* level 2 */
     32 + { 21, 16, 17, 1, 5, 0, ZSTD_dfast }, /* level 3 */
     33 + { 21, 18, 18, 1, 5, 0, ZSTD_dfast }, /* level 4 */
     34 + { 21, 18, 19, 3, 5, 2, ZSTD_greedy }, /* level 5 */
     35 + { 21, 18, 19, 3, 5, 4, ZSTD_lazy }, /* level 6 */
     36 + { 21, 19, 20, 4, 5, 8, ZSTD_lazy }, /* level 7 */
     37 + { 21, 19, 20, 4, 5, 16, ZSTD_lazy2 }, /* level 8 */
     38 + { 22, 20, 21, 4, 5, 16, ZSTD_lazy2 }, /* level 9 */
     39 + { 22, 21, 22, 5, 5, 16, ZSTD_lazy2 }, /* level 10 */
     40 + { 22, 21, 22, 6, 5, 16, ZSTD_lazy2 }, /* level 11 */
     41 + { 22, 22, 23, 6, 5, 32, ZSTD_lazy2 }, /* level 12 */
     42 + { 22, 22, 22, 4, 5, 32, ZSTD_btlazy2 }, /* level 13 */
     43 + { 22, 22, 23, 5, 5, 32, ZSTD_btlazy2 }, /* level 14 */
     44 + { 22, 23, 23, 6, 5, 32, ZSTD_btlazy2 }, /* level 15 */
     45 + { 22, 22, 22, 5, 5, 48, ZSTD_btopt }, /* level 16 */
     46 + { 23, 23, 22, 5, 4, 64, ZSTD_btopt }, /* level 17 */
     47 + { 23, 23, 22, 6, 3, 64, ZSTD_btultra }, /* level 18 */
     48 + { 23, 24, 22, 7, 3,256, ZSTD_btultra2}, /* level 19 */
     49 + { 25, 25, 23, 7, 3,256, ZSTD_btultra2}, /* level 20 */
     50 + { 26, 26, 24, 7, 3,512, ZSTD_btultra2}, /* level 21 */
     51 + { 27, 27, 25, 9, 3,999, ZSTD_btultra2}, /* level 22 */
     52 +},
     53 +{ /* for srcSize <= 256 KB */
     54 + /* W, C, H, S, L, T, strat */
     55 + { 18, 12, 13, 1, 5, 1, ZSTD_fast }, /* base for negative levels */
     56 + { 18, 13, 14, 1, 6, 0, ZSTD_fast }, /* level 1 */
     57 + { 18, 14, 14, 1, 5, 0, ZSTD_dfast }, /* level 2 */
     58 + { 18, 16, 16, 1, 4, 0, ZSTD_dfast }, /* level 3 */
     59 + { 18, 16, 17, 3, 5, 2, ZSTD_greedy }, /* level 4.*/
     60 + { 18, 17, 18, 5, 5, 2, ZSTD_greedy }, /* level 5.*/
     61 + { 18, 18, 19, 3, 5, 4, ZSTD_lazy }, /* level 6.*/
     62 + { 18, 18, 19, 4, 4, 4, ZSTD_lazy }, /* level 7 */
     63 + { 18, 18, 19, 4, 4, 8, ZSTD_lazy2 }, /* level 8 */
     64 + { 18, 18, 19, 5, 4, 8, ZSTD_lazy2 }, /* level 9 */
     65 + { 18, 18, 19, 6, 4, 8, ZSTD_lazy2 }, /* level 10 */
     66 + { 18, 18, 19, 5, 4, 12, ZSTD_btlazy2 }, /* level 11.*/
     67 + { 18, 19, 19, 7, 4, 12, ZSTD_btlazy2 }, /* level 12.*/
     68 + { 18, 18, 19, 4, 4, 16, ZSTD_btopt }, /* level 13 */
     69 + { 18, 18, 19, 4, 3, 32, ZSTD_btopt }, /* level 14.*/
     70 + { 18, 18, 19, 6, 3,128, ZSTD_btopt }, /* level 15.*/
     71 + { 18, 19, 19, 6, 3,128, ZSTD_btultra }, /* level 16.*/
     72 + { 18, 19, 19, 8, 3,256, ZSTD_btultra }, /* level 17.*/
     73 + { 18, 19, 19, 6, 3,128, ZSTD_btultra2}, /* level 18.*/
     74 + { 18, 19, 19, 8, 3,256, ZSTD_btultra2}, /* level 19.*/
     75 + { 18, 19, 19, 10, 3,512, ZSTD_btultra2}, /* level 20.*/
     76 + { 18, 19, 19, 12, 3,512, ZSTD_btultra2}, /* level 21.*/
     77 + { 18, 19, 19, 13, 3,999, ZSTD_btultra2}, /* level 22.*/
     78 +},
     79 +{ /* for srcSize <= 128 KB */
     80 + /* W, C, H, S, L, T, strat */
     81 + { 17, 12, 12, 1, 5, 1, ZSTD_fast }, /* base for negative levels */
     82 + { 17, 12, 13, 1, 6, 0, ZSTD_fast }, /* level 1 */
     83 + { 17, 13, 15, 1, 5, 0, ZSTD_fast }, /* level 2 */
     84 + { 17, 15, 16, 2, 5, 0, ZSTD_dfast }, /* level 3 */
     85 + { 17, 17, 17, 2, 4, 0, ZSTD_dfast }, /* level 4 */
     86 + { 17, 16, 17, 3, 4, 2, ZSTD_greedy }, /* level 5 */
     87 + { 17, 16, 17, 3, 4, 4, ZSTD_lazy }, /* level 6 */
     88 + { 17, 16, 17, 3, 4, 8, ZSTD_lazy2 }, /* level 7 */
     89 + { 17, 16, 17, 4, 4, 8, ZSTD_lazy2 }, /* level 8 */
     90 + { 17, 16, 17, 5, 4, 8, ZSTD_lazy2 }, /* level 9 */
     91 + { 17, 16, 17, 6, 4, 8, ZSTD_lazy2 }, /* level 10 */
     92 + { 17, 17, 17, 5, 4, 8, ZSTD_btlazy2 }, /* level 11 */
     93 + { 17, 18, 17, 7, 4, 12, ZSTD_btlazy2 }, /* level 12 */
     94 + { 17, 18, 17, 3, 4, 12, ZSTD_btopt }, /* level 13.*/
     95 + { 17, 18, 17, 4, 3, 32, ZSTD_btopt }, /* level 14.*/
     96 + { 17, 18, 17, 6, 3,256, ZSTD_btopt }, /* level 15.*/
     97 + { 17, 18, 17, 6, 3,128, ZSTD_btultra }, /* level 16.*/
     98 + { 17, 18, 17, 8, 3,256, ZSTD_btultra }, /* level 17.*/
     99 + { 17, 18, 17, 10, 3,512, ZSTD_btultra }, /* level 18.*/
     100 + { 17, 18, 17, 5, 3,256, ZSTD_btultra2}, /* level 19.*/
     101 + { 17, 18, 17, 7, 3,512, ZSTD_btultra2}, /* level 20.*/
     102 + { 17, 18, 17, 9, 3,512, ZSTD_btultra2}, /* level 21.*/
     103 + { 17, 18, 17, 11, 3,999, ZSTD_btultra2}, /* level 22.*/
     104 +},
     105 +{ /* for srcSize <= 16 KB */
     106 + /* W, C, H, S, L, T, strat */
     107 + { 14, 12, 13, 1, 5, 1, ZSTD_fast }, /* base for negative levels */
     108 + { 14, 14, 15, 1, 5, 0, ZSTD_fast }, /* level 1 */
     109 + { 14, 14, 15, 1, 4, 0, ZSTD_fast }, /* level 2 */
     110 + { 14, 14, 15, 2, 4, 0, ZSTD_dfast }, /* level 3 */
     111 + { 14, 14, 14, 4, 4, 2, ZSTD_greedy }, /* level 4 */
     112 + { 14, 14, 14, 3, 4, 4, ZSTD_lazy }, /* level 5.*/
     113 + { 14, 14, 14, 4, 4, 8, ZSTD_lazy2 }, /* level 6 */
     114 + { 14, 14, 14, 6, 4, 8, ZSTD_lazy2 }, /* level 7 */
     115 + { 14, 14, 14, 8, 4, 8, ZSTD_lazy2 }, /* level 8.*/
     116 + { 14, 15, 14, 5, 4, 8, ZSTD_btlazy2 }, /* level 9.*/
     117 + { 14, 15, 14, 9, 4, 8, ZSTD_btlazy2 }, /* level 10.*/
     118 + { 14, 15, 14, 3, 4, 12, ZSTD_btopt }, /* level 11.*/
     119 + { 14, 15, 14, 4, 3, 24, ZSTD_btopt }, /* level 12.*/
     120 + { 14, 15, 14, 5, 3, 32, ZSTD_btultra }, /* level 13.*/
     121 + { 14, 15, 15, 6, 3, 64, ZSTD_btultra }, /* level 14.*/
     122 + { 14, 15, 15, 7, 3,256, ZSTD_btultra }, /* level 15.*/
     123 + { 14, 15, 15, 5, 3, 48, ZSTD_btultra2}, /* level 16.*/
     124 + { 14, 15, 15, 6, 3,128, ZSTD_btultra2}, /* level 17.*/
     125 + { 14, 15, 15, 7, 3,256, ZSTD_btultra2}, /* level 18.*/
     126 + { 14, 15, 15, 8, 3,256, ZSTD_btultra2}, /* level 19.*/
     127 + { 14, 15, 15, 8, 3,512, ZSTD_btultra2}, /* level 20.*/
     128 + { 14, 15, 15, 9, 3,512, ZSTD_btultra2}, /* level 21.*/
     129 + { 14, 15, 15, 10, 3,999, ZSTD_btultra2}, /* level 22.*/
     130 +},
     131 +};
     132 + 
     133 + 
     134 + 
     135 +#endif /* ZSTD_CLEVELS_H */
     136 + 
     137 +#endif /* USE_EXTERNAL_ZSTD */
     138 + 
  • ■ ■ ■ ■ ■ ■
    vendor/github.com/DataDog/zstd/compiler.h
     1 +#ifndef USE_EXTERNAL_ZSTD
     2 +/*
     3 + * Copyright (c) Yann Collet, Facebook, Inc.
     4 + * All rights reserved.
     5 + *
     6 + * This source code is licensed under both the BSD-style license (found in the
     7 + * LICENSE file in the root directory of this source tree) and the GPLv2 (found
     8 + * in the COPYING file in the root directory of this source tree).
     9 + * You may select, at your option, one of the above-listed licenses.
     10 + */
     11 + 
     12 +#ifndef ZSTD_COMPILER_H
     13 +#define ZSTD_COMPILER_H
     14 + 
     15 +#include "portability_macros.h"
     16 + 
     17 +/*-*******************************************************
     18 +* Compiler specifics
     19 +*********************************************************/
     20 +/* force inlining */
     21 + 
     22 +#if !defined(ZSTD_NO_INLINE)
     23 +#if (defined(__GNUC__) && !defined(__STRICT_ANSI__)) || defined(__cplusplus) || defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* C99 */
     24 +# define INLINE_KEYWORD inline
     25 +#else
     26 +# define INLINE_KEYWORD
     27 +#endif
     28 + 
     29 +#if defined(__GNUC__) || defined(__ICCARM__)
     30 +# define FORCE_INLINE_ATTR __attribute__((always_inline))
     31 +#elif defined(_MSC_VER)
     32 +# define FORCE_INLINE_ATTR __forceinline
     33 +#else
     34 +# define FORCE_INLINE_ATTR
     35 +#endif
     36 + 
     37 +#else
     38 + 
     39 +#define INLINE_KEYWORD
     40 +#define FORCE_INLINE_ATTR
     41 + 
     42 +#endif
     43 + 
     44 +/**
     45 + On MSVC qsort requires that functions passed into it use the __cdecl calling conversion(CC).
     46 + This explicitly marks such functions as __cdecl so that the code will still compile
     47 + if a CC other than __cdecl has been made the default.
     48 +*/
     49 +#if defined(_MSC_VER)
     50 +# define WIN_CDECL __cdecl
     51 +#else
     52 +# define WIN_CDECL
     53 +#endif
     54 + 
     55 +/**
     56 + * FORCE_INLINE_TEMPLATE is used to define C "templates", which take constant
     57 + * parameters. They must be inlined for the compiler to eliminate the constant
     58 + * branches.
     59 + */
     60 +#define FORCE_INLINE_TEMPLATE static INLINE_KEYWORD FORCE_INLINE_ATTR
     61 +/**
     62 + * HINT_INLINE is used to help the compiler generate better code. It is *not*
     63 + * used for "templates", so it can be tweaked based on the compilers
     64 + * performance.
     65 + *
     66 + * gcc-4.8 and gcc-4.9 have been shown to benefit from leaving off the
     67 + * always_inline attribute.
     68 + *
     69 + * clang up to 5.0.0 (trunk) benefit tremendously from the always_inline
     70 + * attribute.
     71 + */
     72 +#if !defined(__clang__) && defined(__GNUC__) && __GNUC__ >= 4 && __GNUC_MINOR__ >= 8 && __GNUC__ < 5
     73 +# define HINT_INLINE static INLINE_KEYWORD
     74 +#else
     75 +# define HINT_INLINE static INLINE_KEYWORD FORCE_INLINE_ATTR
     76 +#endif
     77 + 
     78 +/* UNUSED_ATTR tells the compiler it is okay if the function is unused. */
     79 +#if defined(__GNUC__)
     80 +# define UNUSED_ATTR __attribute__((unused))
     81 +#else
     82 +# define UNUSED_ATTR
     83 +#endif
     84 + 
     85 +/* force no inlining */
     86 +#ifdef _MSC_VER
     87 +# define FORCE_NOINLINE static __declspec(noinline)
     88 +#else
     89 +# if defined(__GNUC__) || defined(__ICCARM__)
     90 +# define FORCE_NOINLINE static __attribute__((__noinline__))
     91 +# else
     92 +# define FORCE_NOINLINE static
     93 +# endif
     94 +#endif
     95 + 
     96 + 
     97 +/* target attribute */
     98 +#if defined(__GNUC__) || defined(__ICCARM__)
     99 +# define TARGET_ATTRIBUTE(target) __attribute__((__target__(target)))
     100 +#else
     101 +# define TARGET_ATTRIBUTE(target)
     102 +#endif
     103 + 
     104 +/* Target attribute for BMI2 dynamic dispatch.
     105 + * Enable lzcnt, bmi, and bmi2.
     106 + * We test for bmi1 & bmi2. lzcnt is included in bmi1.
     107 + */
     108 +#define BMI2_TARGET_ATTRIBUTE TARGET_ATTRIBUTE("lzcnt,bmi,bmi2")
     109 + 
     110 +/* prefetch
     111 + * can be disabled, by declaring NO_PREFETCH build macro */
     112 +#if defined(NO_PREFETCH)
     113 +# define PREFETCH_L1(ptr) (void)(ptr) /* disabled */
     114 +# define PREFETCH_L2(ptr) (void)(ptr) /* disabled */
     115 +#else
     116 +# if defined(_MSC_VER) && (defined(_M_X64) || defined(_M_I86)) /* _mm_prefetch() is not defined outside of x86/x64 */
     117 +# include <mmintrin.h> /* https://msdn.microsoft.com/fr-fr/library/84szxsww(v=vs.90).aspx */
     118 +# define PREFETCH_L1(ptr) _mm_prefetch((const char*)(ptr), _MM_HINT_T0)
     119 +# define PREFETCH_L2(ptr) _mm_prefetch((const char*)(ptr), _MM_HINT_T1)
     120 +# elif defined(__GNUC__) && ( (__GNUC__ >= 4) || ( (__GNUC__ == 3) && (__GNUC_MINOR__ >= 1) ) )
     121 +# define PREFETCH_L1(ptr) __builtin_prefetch((ptr), 0 /* rw==read */, 3 /* locality */)
     122 +# define PREFETCH_L2(ptr) __builtin_prefetch((ptr), 0 /* rw==read */, 2 /* locality */)
     123 +# elif defined(__aarch64__)
     124 +# define PREFETCH_L1(ptr) __asm__ __volatile__("prfm pldl1keep, %0" ::"Q"(*(ptr)))
     125 +# define PREFETCH_L2(ptr) __asm__ __volatile__("prfm pldl2keep, %0" ::"Q"(*(ptr)))
     126 +# else
     127 +# define PREFETCH_L1(ptr) (void)(ptr) /* disabled */
     128 +# define PREFETCH_L2(ptr) (void)(ptr) /* disabled */
     129 +# endif
     130 +#endif /* NO_PREFETCH */
     131 + 
     132 +#define CACHELINE_SIZE 64
     133 + 
     134 +#define PREFETCH_AREA(p, s) { \
     135 + const char* const _ptr = (const char*)(p); \
     136 + size_t const _size = (size_t)(s); \
     137 + size_t _pos; \
     138 + for (_pos=0; _pos<_size; _pos+=CACHELINE_SIZE) { \
     139 + PREFETCH_L2(_ptr + _pos); \
     140 + } \
     141 +}
     142 + 
     143 +/* vectorization
     144 + * older GCC (pre gcc-4.3 picked as the cutoff) uses a different syntax,
     145 + * and some compilers, like Intel ICC and MCST LCC, do not support it at all. */
     146 +#if !defined(__INTEL_COMPILER) && !defined(__clang__) && defined(__GNUC__) && !defined(__LCC__)
     147 +# if (__GNUC__ == 4 && __GNUC_MINOR__ > 3) || (__GNUC__ >= 5)
     148 +# define DONT_VECTORIZE __attribute__((optimize("no-tree-vectorize")))
     149 +# else
     150 +# define DONT_VECTORIZE _Pragma("GCC optimize(\"no-tree-vectorize\")")
     151 +# endif
     152 +#else
     153 +# define DONT_VECTORIZE
     154 +#endif
     155 + 
     156 +/* Tell the compiler that a branch is likely or unlikely.
     157 + * Only use these macros if it causes the compiler to generate better code.
     158 + * If you can remove a LIKELY/UNLIKELY annotation without speed changes in gcc
     159 + * and clang, please do.
     160 + */
     161 +#if defined(__GNUC__)
     162 +#define LIKELY(x) (__builtin_expect((x), 1))
     163 +#define UNLIKELY(x) (__builtin_expect((x), 0))
     164 +#else
     165 +#define LIKELY(x) (x)
     166 +#define UNLIKELY(x) (x)
     167 +#endif
     168 + 
     169 +/* disable warnings */
     170 +#ifdef _MSC_VER /* Visual Studio */
     171 +# include <intrin.h> /* For Visual 2005 */
     172 +# pragma warning(disable : 4100) /* disable: C4100: unreferenced formal parameter */
     173 +# pragma warning(disable : 4127) /* disable: C4127: conditional expression is constant */
     174 +# pragma warning(disable : 4204) /* disable: C4204: non-constant aggregate initializer */
     175 +# pragma warning(disable : 4214) /* disable: C4214: non-int bitfields */
     176 +# pragma warning(disable : 4324) /* disable: C4324: padded structure */
     177 +#endif
     178 + 
     179 +/*Like DYNAMIC_BMI2 but for compile time determination of BMI2 support*/
     180 +#ifndef STATIC_BMI2
     181 +# if defined(_MSC_VER) && (defined(_M_X64) || defined(_M_I86))
     182 +# ifdef __AVX2__ //MSVC does not have a BMI2 specific flag, but every CPU that supports AVX2 also supports BMI2
     183 +# define STATIC_BMI2 1
     184 +# endif
     185 +# endif
     186 +#endif
     187 + 
     188 +#ifndef STATIC_BMI2
     189 + #define STATIC_BMI2 0
     190 +#endif
     191 + 
     192 +/* compile time determination of SIMD support */
     193 +#if !defined(ZSTD_NO_INTRINSICS)
     194 +# if defined(__SSE2__) || defined(_M_AMD64) || (defined (_M_IX86) && defined(_M_IX86_FP) && (_M_IX86_FP >= 2))
     195 +# define ZSTD_ARCH_X86_SSE2
     196 +# endif
     197 +# if defined(__ARM_NEON) || defined(_M_ARM64)
     198 +# define ZSTD_ARCH_ARM_NEON
     199 +# endif
     200 +#
     201 +# if defined(ZSTD_ARCH_X86_SSE2)
     202 +# include <emmintrin.h>
     203 +# elif defined(ZSTD_ARCH_ARM_NEON)
     204 +# include <arm_neon.h>
     205 +# endif
     206 +#endif
     207 + 
     208 +/* C-language Attributes are added in C23. */
     209 +#if defined(__STDC_VERSION__) && (__STDC_VERSION__ > 201710L) && defined(__has_c_attribute)
     210 +# define ZSTD_HAS_C_ATTRIBUTE(x) __has_c_attribute(x)
     211 +#else
     212 +# define ZSTD_HAS_C_ATTRIBUTE(x) 0
     213 +#endif
     214 + 
     215 +/* Only use C++ attributes in C++. Some compilers report support for C++
     216 + * attributes when compiling with C.
     217 + */
     218 +#if defined(__cplusplus) && defined(__has_cpp_attribute)
     219 +# define ZSTD_HAS_CPP_ATTRIBUTE(x) __has_cpp_attribute(x)
     220 +#else
     221 +# define ZSTD_HAS_CPP_ATTRIBUTE(x) 0
     222 +#endif
     223 + 
     224 +/* Define ZSTD_FALLTHROUGH macro for annotating switch case with the 'fallthrough' attribute.
     225 + * - C23: https://en.cppreference.com/w/c/language/attributes/fallthrough
     226 + * - CPP17: https://en.cppreference.com/w/cpp/language/attributes/fallthrough
     227 + * - Else: __attribute__((__fallthrough__))
     228 + */
     229 +#ifndef ZSTD_FALLTHROUGH
     230 +# if ZSTD_HAS_C_ATTRIBUTE(fallthrough)
     231 +# define ZSTD_FALLTHROUGH [[fallthrough]]
     232 +# elif ZSTD_HAS_CPP_ATTRIBUTE(fallthrough)
     233 +# define ZSTD_FALLTHROUGH [[fallthrough]]
     234 +# elif __has_attribute(__fallthrough__)
     235 +/* Leading semicolon is to satisfy gcc-11 with -pedantic. Without the semicolon
     236 + * gcc complains about: a label can only be part of a statement and a declaration is not a statement.
     237 + */
     238 +# define ZSTD_FALLTHROUGH ; __attribute__((__fallthrough__))
     239 +# else
     240 +# define ZSTD_FALLTHROUGH
     241 +# endif
     242 +#endif
     243 + 
     244 +/*-**************************************************************
     245 +* Alignment check
     246 +*****************************************************************/
     247 + 
     248 +/* this test was initially positioned in mem.h,
     249 + * but this file is removed (or replaced) for linux kernel
     250 + * so it's now hosted in compiler.h,
     251 + * which remains valid for both user & kernel spaces.
     252 + */
     253 + 
     254 +#ifndef ZSTD_ALIGNOF
     255 +# if defined(__GNUC__) || defined(_MSC_VER)
     256 +/* covers gcc, clang & MSVC */
     257 +/* note : this section must come first, before C11,
     258 + * due to a limitation in the kernel source generator */
     259 +# define ZSTD_ALIGNOF(T) __alignof(T)
     260 + 
     261 +# elif defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L)
     262 +/* C11 support */
     263 +# include <stdalign.h>
     264 +# define ZSTD_ALIGNOF(T) alignof(T)
     265 + 
     266 +# else
     267 +/* No known support for alignof() - imperfect backup */
     268 +# define ZSTD_ALIGNOF(T) (sizeof(void*) < sizeof(T) ? sizeof(void*) : sizeof(T))
     269 + 
     270 +# endif
     271 +#endif /* ZSTD_ALIGNOF */
     272 + 
     273 +/*-**************************************************************
     274 +* Sanitizer
     275 +*****************************************************************/
     276 + 
     277 +#if ZSTD_MEMORY_SANITIZER
     278 +/* Not all platforms that support msan provide sanitizers/msan_interface.h.
     279 + * We therefore declare the functions we need ourselves, rather than trying to
     280 + * include the header file... */
     281 +#include <stddef.h> /* size_t */
     282 +#define ZSTD_DEPS_NEED_STDINT
     283 +#include "zstd_deps.h" /* intptr_t */
     284 + 
     285 +/* Make memory region fully initialized (without changing its contents). */
     286 +void __msan_unpoison(const volatile void *a, size_t size);
     287 + 
     288 +/* Make memory region fully uninitialized (without changing its contents).
     289 + This is a legacy interface that does not update origin information. Use
     290 + __msan_allocated_memory() instead. */
     291 +void __msan_poison(const volatile void *a, size_t size);
     292 + 
     293 +/* Returns the offset of the first (at least partially) poisoned byte in the
     294 + memory range, or -1 if the whole range is good. */
     295 +intptr_t __msan_test_shadow(const volatile void *x, size_t size);
     296 +#endif
     297 + 
     298 +#if ZSTD_ADDRESS_SANITIZER
     299 +/* Not all platforms that support asan provide sanitizers/asan_interface.h.
     300 + * We therefore declare the functions we need ourselves, rather than trying to
     301 + * include the header file... */
     302 +#include <stddef.h> /* size_t */
     303 + 
     304 +/**
     305 + * Marks a memory region (<c>[addr, addr+size)</c>) as unaddressable.
     306 + *
     307 + * This memory must be previously allocated by your program. Instrumented
     308 + * code is forbidden from accessing addresses in this region until it is
     309 + * unpoisoned. This function is not guaranteed to poison the entire region -
     310 + * it could poison only a subregion of <c>[addr, addr+size)</c> due to ASan
     311 + * alignment restrictions.
     312 + *
     313 + * \note This function is not thread-safe because no two threads can poison or
     314 + * unpoison memory in the same memory region simultaneously.
     315 + *
     316 + * \param addr Start of memory region.
     317 + * \param size Size of memory region. */
     318 +void __asan_poison_memory_region(void const volatile *addr, size_t size);
     319 + 
     320 +/**
     321 + * Marks a memory region (<c>[addr, addr+size)</c>) as addressable.
     322 + *
     323 + * This memory must be previously allocated by your program. Accessing
     324 + * addresses in this region is allowed until this region is poisoned again.
     325 + * This function could unpoison a super-region of <c>[addr, addr+size)</c> due
     326 + * to ASan alignment restrictions.
     327 + *
     328 + * \note This function is not thread-safe because no two threads can
     329 + * poison or unpoison memory in the same memory region simultaneously.
     330 + *
     331 + * \param addr Start of memory region.
     332 + * \param size Size of memory region. */
     333 +void __asan_unpoison_memory_region(void const volatile *addr, size_t size);
     334 +#endif
     335 + 
     336 +#endif /* ZSTD_COMPILER_H */
     337 + 
     338 +#endif /* USE_EXTERNAL_ZSTD */
     339 + 
  • ■ ■ ■ ■ ■ ■
    vendor/github.com/DataDog/zstd/cover.c
     1 +#ifndef USE_EXTERNAL_ZSTD
     2 +/*
     3 + * Copyright (c) Yann Collet, Facebook, Inc.
     4 + * All rights reserved.
     5 + *
     6 + * This source code is licensed under both the BSD-style license (found in the
     7 + * LICENSE file in the root directory of this source tree) and the GPLv2 (found
     8 + * in the COPYING file in the root directory of this source tree).
     9 + * You may select, at your option, one of the above-listed licenses.
     10 + */
     11 + 
     12 +/* *****************************************************************************
     13 + * Constructs a dictionary using a heuristic based on the following paper:
     14 + *
     15 + * Liao, Petri, Moffat, Wirth
     16 + * Effective Construction of Relative Lempel-Ziv Dictionaries
     17 + * Published in WWW 2016.
     18 + *
     19 + * Adapted from code originally written by @ot (Giuseppe Ottaviano).
     20 + ******************************************************************************/
     21 + 
     22 +/*-*************************************
     23 +* Dependencies
     24 +***************************************/
     25 +#include <stdio.h> /* fprintf */
     26 +#include <stdlib.h> /* malloc, free, qsort */
     27 +#include <string.h> /* memset */
     28 +#include <time.h> /* clock */
     29 + 
     30 +#ifndef ZDICT_STATIC_LINKING_ONLY
     31 +# define ZDICT_STATIC_LINKING_ONLY
     32 +#endif
     33 + 
     34 +#include "mem.h" /* read */
     35 +#include "pool.h"
     36 +#include "threading.h"
     37 +#include "zstd_internal.h" /* includes zstd.h */
     38 +#include "zdict.h"
     39 +#include "cover.h"
     40 + 
     41 +/*-*************************************
     42 +* Constants
     43 +***************************************/
     44 +/**
     45 +* There are 32bit indexes used to ref samples, so limit samples size to 4GB
     46 +* on 64bit builds.
     47 +* For 32bit builds we choose 1 GB.
     48 +* Most 32bit platforms have 2GB user-mode addressable space and we allocate a large
     49 +* contiguous buffer, so 1GB is already a high limit.
     50 +*/
     51 +#define COVER_MAX_SAMPLES_SIZE (sizeof(size_t) == 8 ? ((unsigned)-1) : ((unsigned)1 GB))
     52 +#define COVER_DEFAULT_SPLITPOINT 1.0
     53 + 
     54 +/*-*************************************
     55 +* Console display
     56 +***************************************/
     57 +#ifndef LOCALDISPLAYLEVEL
     58 +static int g_displayLevel = 0;
     59 +#endif
     60 +#undef DISPLAY
     61 +#define DISPLAY(...) \
     62 + { \
     63 + fprintf(stderr, __VA_ARGS__); \
     64 + fflush(stderr); \
     65 + }
     66 +#undef LOCALDISPLAYLEVEL
     67 +#define LOCALDISPLAYLEVEL(displayLevel, l, ...) \
     68 + if (displayLevel >= l) { \
     69 + DISPLAY(__VA_ARGS__); \
     70 + } /* 0 : no display; 1: errors; 2: default; 3: details; 4: debug */
     71 +#undef DISPLAYLEVEL
     72 +#define DISPLAYLEVEL(l, ...) LOCALDISPLAYLEVEL(g_displayLevel, l, __VA_ARGS__)
     73 + 
     74 +#ifndef LOCALDISPLAYUPDATE
     75 +static const clock_t g_refreshRate = CLOCKS_PER_SEC * 15 / 100;
     76 +static clock_t g_time = 0;
     77 +#endif
     78 +#undef LOCALDISPLAYUPDATE
     79 +#define LOCALDISPLAYUPDATE(displayLevel, l, ...) \
     80 + if (displayLevel >= l) { \
     81 + if ((clock() - g_time > g_refreshRate) || (displayLevel >= 4)) { \
     82 + g_time = clock(); \
     83 + DISPLAY(__VA_ARGS__); \
     84 + } \
     85 + }
     86 +#undef DISPLAYUPDATE
     87 +#define DISPLAYUPDATE(l, ...) LOCALDISPLAYUPDATE(g_displayLevel, l, __VA_ARGS__)
     88 + 
     89 +/*-*************************************
     90 +* Hash table
     91 +***************************************
     92 +* A small specialized hash map for storing activeDmers.
     93 +* The map does not resize, so if it becomes full it will loop forever.
     94 +* Thus, the map must be large enough to store every value.
     95 +* The map implements linear probing and keeps its load less than 0.5.
     96 +*/
     97 + 
     98 +#define MAP_EMPTY_VALUE ((U32)-1)
     99 +typedef struct COVER_map_pair_t_s {
     100 + U32 key;
     101 + U32 value;
     102 +} COVER_map_pair_t;
     103 + 
     104 +typedef struct COVER_map_s {
     105 + COVER_map_pair_t *data;
     106 + U32 sizeLog;
     107 + U32 size;
     108 + U32 sizeMask;
     109 +} COVER_map_t;
     110 + 
     111 +/**
     112 + * Clear the map.
     113 + */
     114 +static void COVER_map_clear(COVER_map_t *map) {
     115 + memset(map->data, MAP_EMPTY_VALUE, map->size * sizeof(COVER_map_pair_t));
     116 +}
     117 + 
     118 +/**
     119 + * Initializes a map of the given size.
     120 + * Returns 1 on success and 0 on failure.
     121 + * The map must be destroyed with COVER_map_destroy().
     122 + * The map is only guaranteed to be large enough to hold size elements.
     123 + */
     124 +static int COVER_map_init(COVER_map_t *map, U32 size) {
     125 + map->sizeLog = ZSTD_highbit32(size) + 2;
     126 + map->size = (U32)1 << map->sizeLog;
     127 + map->sizeMask = map->size - 1;
     128 + map->data = (COVER_map_pair_t *)malloc(map->size * sizeof(COVER_map_pair_t));
     129 + if (!map->data) {
     130 + map->sizeLog = 0;
     131 + map->size = 0;
     132 + return 0;
     133 + }
     134 + COVER_map_clear(map);
     135 + return 1;
     136 +}
     137 + 
     138 +/**
     139 + * Internal hash function
     140 + */
     141 +static const U32 COVER_prime4bytes = 2654435761U;
     142 +static U32 COVER_map_hash(COVER_map_t *map, U32 key) {
     143 + return (key * COVER_prime4bytes) >> (32 - map->sizeLog);
     144 +}
     145 + 
     146 +/**
     147 + * Helper function that returns the index that a key should be placed into.
     148 + */
     149 +static U32 COVER_map_index(COVER_map_t *map, U32 key) {
     150 + const U32 hash = COVER_map_hash(map, key);
     151 + U32 i;
     152 + for (i = hash;; i = (i + 1) & map->sizeMask) {
     153 + COVER_map_pair_t *pos = &map->data[i];
     154 + if (pos->value == MAP_EMPTY_VALUE) {
     155 + return i;
     156 + }
     157 + if (pos->key == key) {
     158 + return i;
     159 + }
     160 + }
     161 +}
     162 + 
     163 +/**
     164 + * Returns the pointer to the value for key.
     165 + * If key is not in the map, it is inserted and the value is set to 0.
     166 + * The map must not be full.
     167 + */
     168 +static U32 *COVER_map_at(COVER_map_t *map, U32 key) {
     169 + COVER_map_pair_t *pos = &map->data[COVER_map_index(map, key)];
     170 + if (pos->value == MAP_EMPTY_VALUE) {
     171 + pos->key = key;
     172 + pos->value = 0;
     173 + }
     174 + return &pos->value;
     175 +}
     176 + 
     177 +/**
     178 + * Deletes key from the map if present.
     179 + */
     180 +static void COVER_map_remove(COVER_map_t *map, U32 key) {
     181 + U32 i = COVER_map_index(map, key);
     182 + COVER_map_pair_t *del = &map->data[i];
     183 + U32 shift = 1;
     184 + if (del->value == MAP_EMPTY_VALUE) {
     185 + return;
     186 + }
     187 + for (i = (i + 1) & map->sizeMask;; i = (i + 1) & map->sizeMask) {
     188 + COVER_map_pair_t *const pos = &map->data[i];
     189 + /* If the position is empty we are done */
     190 + if (pos->value == MAP_EMPTY_VALUE) {
     191 + del->value = MAP_EMPTY_VALUE;
     192 + return;
     193 + }
     194 + /* If pos can be moved to del do so */
     195 + if (((i - COVER_map_hash(map, pos->key)) & map->sizeMask) >= shift) {
     196 + del->key = pos->key;
     197 + del->value = pos->value;
     198 + del = pos;
     199 + shift = 1;
     200 + } else {
     201 + ++shift;
     202 + }
     203 + }
     204 +}
     205 + 
     206 +/**
     207 + * Destroys a map that is inited with COVER_map_init().
     208 + */
     209 +static void COVER_map_destroy(COVER_map_t *map) {
     210 + if (map->data) {
     211 + free(map->data);
     212 + }
     213 + map->data = NULL;
     214 + map->size = 0;
     215 +}
     216 + 
     217 +/*-*************************************
     218 +* Context
     219 +***************************************/
     220 + 
     221 +typedef struct {
     222 + const BYTE *samples;
     223 + size_t *offsets;
     224 + const size_t *samplesSizes;
     225 + size_t nbSamples;
     226 + size_t nbTrainSamples;
     227 + size_t nbTestSamples;
     228 + U32 *suffix;
     229 + size_t suffixSize;
     230 + U32 *freqs;
     231 + U32 *dmerAt;
     232 + unsigned d;
     233 +} COVER_ctx_t;
     234 + 
     235 +/* We need a global context for qsort... */
     236 +static COVER_ctx_t *g_coverCtx = NULL;
     237 + 
     238 +/*-*************************************
     239 +* Helper functions
     240 +***************************************/
     241 + 
     242 +/**
     243 + * Returns the sum of the sample sizes.
     244 + */
     245 +size_t COVER_sum(const size_t *samplesSizes, unsigned nbSamples) {
     246 + size_t sum = 0;
     247 + unsigned i;
     248 + for (i = 0; i < nbSamples; ++i) {
     249 + sum += samplesSizes[i];
     250 + }
     251 + return sum;
     252 +}
     253 + 
     254 +/**
     255 + * Returns -1 if the dmer at lp is less than the dmer at rp.
     256 + * Return 0 if the dmers at lp and rp are equal.
     257 + * Returns 1 if the dmer at lp is greater than the dmer at rp.
     258 + */
     259 +static int COVER_cmp(COVER_ctx_t *ctx, const void *lp, const void *rp) {
     260 + U32 const lhs = *(U32 const *)lp;
     261 + U32 const rhs = *(U32 const *)rp;
     262 + return memcmp(ctx->samples + lhs, ctx->samples + rhs, ctx->d);
     263 +}
     264 +/**
     265 + * Faster version for d <= 8.
     266 + */
     267 +static int COVER_cmp8(COVER_ctx_t *ctx, const void *lp, const void *rp) {
     268 + U64 const mask = (ctx->d == 8) ? (U64)-1 : (((U64)1 << (8 * ctx->d)) - 1);
     269 + U64 const lhs = MEM_readLE64(ctx->samples + *(U32 const *)lp) & mask;
     270 + U64 const rhs = MEM_readLE64(ctx->samples + *(U32 const *)rp) & mask;
     271 + if (lhs < rhs) {
     272 + return -1;
     273 + }
     274 + return (lhs > rhs);
     275 +}
     276 + 
     277 +/**
     278 + * Same as COVER_cmp() except ties are broken by pointer value
     279 + * NOTE: g_coverCtx must be set to call this function. A global is required because
     280 + * qsort doesn't take an opaque pointer.
     281 + */
     282 +static int WIN_CDECL COVER_strict_cmp(const void *lp, const void *rp) {
     283 + int result = COVER_cmp(g_coverCtx, lp, rp);
     284 + if (result == 0) {
     285 + result = lp < rp ? -1 : 1;
     286 + }
     287 + return result;
     288 +}
     289 +/**
     290 + * Faster version for d <= 8.
     291 + */
     292 +static int WIN_CDECL COVER_strict_cmp8(const void *lp, const void *rp) {
     293 + int result = COVER_cmp8(g_coverCtx, lp, rp);
     294 + if (result == 0) {
     295 + result = lp < rp ? -1 : 1;
     296 + }
     297 + return result;
     298 +}
     299 + 
     300 +/**
     301 + * Returns the first pointer in [first, last) whose element does not compare
     302 + * less than value. If no such element exists it returns last.
     303 + */
     304 +static const size_t *COVER_lower_bound(const size_t *first, const size_t *last,
     305 + size_t value) {
     306 + size_t count = last - first;
     307 + while (count != 0) {
     308 + size_t step = count / 2;
     309 + const size_t *ptr = first;
     310 + ptr += step;
     311 + if (*ptr < value) {
     312 + first = ++ptr;
     313 + count -= step + 1;
     314 + } else {
     315 + count = step;
     316 + }
     317 + }
     318 + return first;
     319 +}
     320 + 
     321 +/**
     322 + * Generic groupBy function.
     323 + * Groups an array sorted by cmp into groups with equivalent values.
     324 + * Calls grp for each group.
     325 + */
     326 +static void
     327 +COVER_groupBy(const void *data, size_t count, size_t size, COVER_ctx_t *ctx,
     328 + int (*cmp)(COVER_ctx_t *, const void *, const void *),
     329 + void (*grp)(COVER_ctx_t *, const void *, const void *)) {
     330 + const BYTE *ptr = (const BYTE *)data;
     331 + size_t num = 0;
     332 + while (num < count) {
     333 + const BYTE *grpEnd = ptr + size;
     334 + ++num;
     335 + while (num < count && cmp(ctx, ptr, grpEnd) == 0) {
     336 + grpEnd += size;
     337 + ++num;
     338 + }
     339 + grp(ctx, ptr, grpEnd);
     340 + ptr = grpEnd;
     341 + }
     342 +}
     343 + 
     344 +/*-*************************************
     345 +* Cover functions
     346 +***************************************/
     347 + 
     348 +/**
     349 + * Called on each group of positions with the same dmer.
     350 + * Counts the frequency of each dmer and saves it in the suffix array.
     351 + * Fills `ctx->dmerAt`.
     352 + */
     353 +static void COVER_group(COVER_ctx_t *ctx, const void *group,
     354 + const void *groupEnd) {
     355 + /* The group consists of all the positions with the same first d bytes. */
     356 + const U32 *grpPtr = (const U32 *)group;
     357 + const U32 *grpEnd = (const U32 *)groupEnd;
     358 + /* The dmerId is how we will reference this dmer.
     359 + * This allows us to map the whole dmer space to a much smaller space, the
     360 + * size of the suffix array.
     361 + */
     362 + const U32 dmerId = (U32)(grpPtr - ctx->suffix);
     363 + /* Count the number of samples this dmer shows up in */
     364 + U32 freq = 0;
     365 + /* Details */
     366 + const size_t *curOffsetPtr = ctx->offsets;
     367 + const size_t *offsetsEnd = ctx->offsets + ctx->nbSamples;
     368 + /* Once *grpPtr >= curSampleEnd this occurrence of the dmer is in a
     369 + * different sample than the last.
     370 + */
     371 + size_t curSampleEnd = ctx->offsets[0];
     372 + for (; grpPtr != grpEnd; ++grpPtr) {
     373 + /* Save the dmerId for this position so we can get back to it. */
     374 + ctx->dmerAt[*grpPtr] = dmerId;
     375 + /* Dictionaries only help for the first reference to the dmer.
     376 + * After that zstd can reference the match from the previous reference.
     377 + * So only count each dmer once for each sample it is in.
     378 + */
     379 + if (*grpPtr < curSampleEnd) {
     380 + continue;
     381 + }
     382 + freq += 1;
     383 + /* Binary search to find the end of the sample *grpPtr is in.
     384 + * In the common case that grpPtr + 1 == grpEnd we can skip the binary
     385 + * search because the loop is over.
     386 + */
     387 + if (grpPtr + 1 != grpEnd) {
     388 + const size_t *sampleEndPtr =
     389 + COVER_lower_bound(curOffsetPtr, offsetsEnd, *grpPtr);
     390 + curSampleEnd = *sampleEndPtr;
     391 + curOffsetPtr = sampleEndPtr + 1;
     392 + }
     393 + }
     394 + /* At this point we are never going to look at this segment of the suffix
     395 + * array again. We take advantage of this fact to save memory.
     396 + * We store the frequency of the dmer in the first position of the group,
     397 + * which is dmerId.
     398 + */
     399 + ctx->suffix[dmerId] = freq;
     400 +}
     401 + 
     402 + 
     403 +/**
     404 + * Selects the best segment in an epoch.
     405 + * Segments of are scored according to the function:
     406 + *
     407 + * Let F(d) be the frequency of dmer d.
     408 + * Let S_i be the dmer at position i of segment S which has length k.
     409 + *
     410 + * Score(S) = F(S_1) + F(S_2) + ... + F(S_{k-d+1})
     411 + *
     412 + * Once the dmer d is in the dictionary we set F(d) = 0.
     413 + */
     414 +static COVER_segment_t COVER_selectSegment(const COVER_ctx_t *ctx, U32 *freqs,
     415 + COVER_map_t *activeDmers, U32 begin,
     416 + U32 end,
     417 + ZDICT_cover_params_t parameters) {
     418 + /* Constants */
     419 + const U32 k = parameters.k;
     420 + const U32 d = parameters.d;
     421 + const U32 dmersInK = k - d + 1;
     422 + /* Try each segment (activeSegment) and save the best (bestSegment) */
     423 + COVER_segment_t bestSegment = {0, 0, 0};
     424 + COVER_segment_t activeSegment;
     425 + /* Reset the activeDmers in the segment */
     426 + COVER_map_clear(activeDmers);
     427 + /* The activeSegment starts at the beginning of the epoch. */
     428 + activeSegment.begin = begin;
     429 + activeSegment.end = begin;
     430 + activeSegment.score = 0;
     431 + /* Slide the activeSegment through the whole epoch.
     432 + * Save the best segment in bestSegment.
     433 + */
     434 + while (activeSegment.end < end) {
     435 + /* The dmerId for the dmer at the next position */
     436 + U32 newDmer = ctx->dmerAt[activeSegment.end];
     437 + /* The entry in activeDmers for this dmerId */
     438 + U32 *newDmerOcc = COVER_map_at(activeDmers, newDmer);
     439 + /* If the dmer isn't already present in the segment add its score. */
     440 + if (*newDmerOcc == 0) {
     441 + /* The paper suggest using the L-0.5 norm, but experiments show that it
     442 + * doesn't help.
     443 + */
     444 + activeSegment.score += freqs[newDmer];
     445 + }
     446 + /* Add the dmer to the segment */
     447 + activeSegment.end += 1;
     448 + *newDmerOcc += 1;
     449 + 
     450 + /* If the window is now too large, drop the first position */
     451 + if (activeSegment.end - activeSegment.begin == dmersInK + 1) {
     452 + U32 delDmer = ctx->dmerAt[activeSegment.begin];
     453 + U32 *delDmerOcc = COVER_map_at(activeDmers, delDmer);
     454 + activeSegment.begin += 1;
     455 + *delDmerOcc -= 1;
     456 + /* If this is the last occurrence of the dmer, subtract its score */
     457 + if (*delDmerOcc == 0) {
     458 + COVER_map_remove(activeDmers, delDmer);
     459 + activeSegment.score -= freqs[delDmer];
     460 + }
     461 + }
     462 + 
     463 + /* If this segment is the best so far save it */
     464 + if (activeSegment.score > bestSegment.score) {
     465 + bestSegment = activeSegment;
     466 + }
     467 + }
     468 + {
     469 + /* Trim off the zero frequency head and tail from the segment. */
     470 + U32 newBegin = bestSegment.end;
     471 + U32 newEnd = bestSegment.begin;
     472 + U32 pos;
     473 + for (pos = bestSegment.begin; pos != bestSegment.end; ++pos) {
     474 + U32 freq = freqs[ctx->dmerAt[pos]];
     475 + if (freq != 0) {
     476 + newBegin = MIN(newBegin, pos);
     477 + newEnd = pos + 1;
     478 + }
     479 + }
     480 + bestSegment.begin = newBegin;
     481 + bestSegment.end = newEnd;
     482 + }
     483 + {
     484 + /* Zero out the frequency of each dmer covered by the chosen segment. */
     485 + U32 pos;
     486 + for (pos = bestSegment.begin; pos != bestSegment.end; ++pos) {
     487 + freqs[ctx->dmerAt[pos]] = 0;
     488 + }
     489 + }
     490 + return bestSegment;
     491 +}
     492 + 
     493 +/**
     494 + * Check the validity of the parameters.
     495 + * Returns non-zero if the parameters are valid and 0 otherwise.
     496 + */
     497 +static int COVER_checkParameters(ZDICT_cover_params_t parameters,
     498 + size_t maxDictSize) {
     499 + /* k and d are required parameters */
     500 + if (parameters.d == 0 || parameters.k == 0) {
     501 + return 0;
     502 + }
     503 + /* k <= maxDictSize */
     504 + if (parameters.k > maxDictSize) {
     505 + return 0;
     506 + }
     507 + /* d <= k */
     508 + if (parameters.d > parameters.k) {
     509 + return 0;
     510 + }
     511 + /* 0 < splitPoint <= 1 */
     512 + if (parameters.splitPoint <= 0 || parameters.splitPoint > 1){
     513 + return 0;
     514 + }
     515 + return 1;
     516 +}
     517 + 
     518 +/**
     519 + * Clean up a context initialized with `COVER_ctx_init()`.
     520 + */
     521 +static void COVER_ctx_destroy(COVER_ctx_t *ctx) {
     522 + if (!ctx) {
     523 + return;
     524 + }
     525 + if (ctx->suffix) {
     526 + free(ctx->suffix);
     527 + ctx->suffix = NULL;
     528 + }
     529 + if (ctx->freqs) {
     530 + free(ctx->freqs);
     531 + ctx->freqs = NULL;
     532 + }
     533 + if (ctx->dmerAt) {
     534 + free(ctx->dmerAt);
     535 + ctx->dmerAt = NULL;
     536 + }
     537 + if (ctx->offsets) {
     538 + free(ctx->offsets);
     539 + ctx->offsets = NULL;
     540 + }
     541 +}
     542 + 
     543 +/**
     544 + * Prepare a context for dictionary building.
     545 + * The context is only dependent on the parameter `d` and can used multiple
     546 + * times.
     547 + * Returns 0 on success or error code on error.
     548 + * The context must be destroyed with `COVER_ctx_destroy()`.
     549 + */
     550 +static size_t COVER_ctx_init(COVER_ctx_t *ctx, const void *samplesBuffer,
     551 + const size_t *samplesSizes, unsigned nbSamples,
     552 + unsigned d, double splitPoint) {
     553 + const BYTE *const samples = (const BYTE *)samplesBuffer;
     554 + const size_t totalSamplesSize = COVER_sum(samplesSizes, nbSamples);
     555 + /* Split samples into testing and training sets */
     556 + const unsigned nbTrainSamples = splitPoint < 1.0 ? (unsigned)((double)nbSamples * splitPoint) : nbSamples;
     557 + const unsigned nbTestSamples = splitPoint < 1.0 ? nbSamples - nbTrainSamples : nbSamples;
     558 + const size_t trainingSamplesSize = splitPoint < 1.0 ? COVER_sum(samplesSizes, nbTrainSamples) : totalSamplesSize;
     559 + const size_t testSamplesSize = splitPoint < 1.0 ? COVER_sum(samplesSizes + nbTrainSamples, nbTestSamples) : totalSamplesSize;
     560 + /* Checks */
     561 + if (totalSamplesSize < MAX(d, sizeof(U64)) ||
     562 + totalSamplesSize >= (size_t)COVER_MAX_SAMPLES_SIZE) {
     563 + DISPLAYLEVEL(1, "Total samples size is too large (%u MB), maximum size is %u MB\n",
     564 + (unsigned)(totalSamplesSize>>20), (COVER_MAX_SAMPLES_SIZE >> 20));
     565 + return ERROR(srcSize_wrong);
     566 + }
     567 + /* Check if there are at least 5 training samples */
     568 + if (nbTrainSamples < 5) {
     569 + DISPLAYLEVEL(1, "Total number of training samples is %u and is invalid.", nbTrainSamples);
     570 + return ERROR(srcSize_wrong);
     571 + }
     572 + /* Check if there's testing sample */
     573 + if (nbTestSamples < 1) {
     574 + DISPLAYLEVEL(1, "Total number of testing samples is %u and is invalid.", nbTestSamples);
     575 + return ERROR(srcSize_wrong);
     576 + }
     577 + /* Zero the context */
     578 + memset(ctx, 0, sizeof(*ctx));
     579 + DISPLAYLEVEL(2, "Training on %u samples of total size %u\n", nbTrainSamples,
     580 + (unsigned)trainingSamplesSize);
     581 + DISPLAYLEVEL(2, "Testing on %u samples of total size %u\n", nbTestSamples,
     582 + (unsigned)testSamplesSize);
     583 + ctx->samples = samples;
     584 + ctx->samplesSizes = samplesSizes;
     585 + ctx->nbSamples = nbSamples;
     586 + ctx->nbTrainSamples = nbTrainSamples;
     587 + ctx->nbTestSamples = nbTestSamples;
     588 + /* Partial suffix array */
     589 + ctx->suffixSize = trainingSamplesSize - MAX(d, sizeof(U64)) + 1;
     590 + ctx->suffix = (U32 *)malloc(ctx->suffixSize * sizeof(U32));
     591 + /* Maps index to the dmerID */
     592 + ctx->dmerAt = (U32 *)malloc(ctx->suffixSize * sizeof(U32));
     593 + /* The offsets of each file */
     594 + ctx->offsets = (size_t *)malloc((nbSamples + 1) * sizeof(size_t));
     595 + if (!ctx->suffix || !ctx->dmerAt || !ctx->offsets) {
     596 + DISPLAYLEVEL(1, "Failed to allocate scratch buffers\n");
     597 + COVER_ctx_destroy(ctx);
     598 + return ERROR(memory_allocation);
     599 + }
     600 + ctx->freqs = NULL;
     601 + ctx->d = d;
     602 + 
     603 + /* Fill offsets from the samplesSizes */
     604 + {
     605 + U32 i;
     606 + ctx->offsets[0] = 0;
     607 + for (i = 1; i <= nbSamples; ++i) {
     608 + ctx->offsets[i] = ctx->offsets[i - 1] + samplesSizes[i - 1];
     609 + }
     610 + }
     611 + DISPLAYLEVEL(2, "Constructing partial suffix array\n");
     612 + {
     613 + /* suffix is a partial suffix array.
     614 + * It only sorts suffixes by their first parameters.d bytes.
     615 + * The sort is stable, so each dmer group is sorted by position in input.
     616 + */
     617 + U32 i;
     618 + for (i = 0; i < ctx->suffixSize; ++i) {
     619 + ctx->suffix[i] = i;
     620 + }
     621 + /* qsort doesn't take an opaque pointer, so pass as a global.
     622 + * On OpenBSD qsort() is not guaranteed to be stable, their mergesort() is.
     623 + */
     624 + g_coverCtx = ctx;
     625 +#if defined(__OpenBSD__)
     626 + mergesort(ctx->suffix, ctx->suffixSize, sizeof(U32),
     627 + (ctx->d <= 8 ? &COVER_strict_cmp8 : &COVER_strict_cmp));
     628 +#else
     629 + qsort(ctx->suffix, ctx->suffixSize, sizeof(U32),
     630 + (ctx->d <= 8 ? &COVER_strict_cmp8 : &COVER_strict_cmp));
     631 +#endif
     632 + }
     633 + DISPLAYLEVEL(2, "Computing frequencies\n");
     634 + /* For each dmer group (group of positions with the same first d bytes):
     635 + * 1. For each position we set dmerAt[position] = dmerID. The dmerID is
     636 + * (groupBeginPtr - suffix). This allows us to go from position to
     637 + * dmerID so we can look up values in freq.
     638 + * 2. We calculate how many samples the dmer occurs in and save it in
     639 + * freqs[dmerId].
     640 + */
     641 + COVER_groupBy(ctx->suffix, ctx->suffixSize, sizeof(U32), ctx,
     642 + (ctx->d <= 8 ? &COVER_cmp8 : &COVER_cmp), &COVER_group);
     643 + ctx->freqs = ctx->suffix;
     644 + ctx->suffix = NULL;
     645 + return 0;
     646 +}
     647 + 
     648 +void COVER_warnOnSmallCorpus(size_t maxDictSize, size_t nbDmers, int displayLevel)
     649 +{
     650 + const double ratio = (double)nbDmers / maxDictSize;
     651 + if (ratio >= 10) {
     652 + return;
     653 + }
     654 + LOCALDISPLAYLEVEL(displayLevel, 1,
     655 + "WARNING: The maximum dictionary size %u is too large "
     656 + "compared to the source size %u! "
     657 + "size(source)/size(dictionary) = %f, but it should be >= "
     658 + "10! This may lead to a subpar dictionary! We recommend "
     659 + "training on sources at least 10x, and preferably 100x "
     660 + "the size of the dictionary! \n", (U32)maxDictSize,
     661 + (U32)nbDmers, ratio);
     662 +}
     663 + 
     664 +COVER_epoch_info_t COVER_computeEpochs(U32 maxDictSize,
     665 + U32 nbDmers, U32 k, U32 passes)
     666 +{
     667 + const U32 minEpochSize = k * 10;
     668 + COVER_epoch_info_t epochs;
     669 + epochs.num = MAX(1, maxDictSize / k / passes);
     670 + epochs.size = nbDmers / epochs.num;
     671 + if (epochs.size >= minEpochSize) {
     672 + assert(epochs.size * epochs.num <= nbDmers);
     673 + return epochs;
     674 + }
     675 + epochs.size = MIN(minEpochSize, nbDmers);
     676 + epochs.num = nbDmers / epochs.size;
     677 + assert(epochs.size * epochs.num <= nbDmers);
     678 + return epochs;
     679 +}
     680 + 
     681 +/**
     682 + * Given the prepared context build the dictionary.
     683 + */
     684 +static size_t COVER_buildDictionary(const COVER_ctx_t *ctx, U32 *freqs,
     685 + COVER_map_t *activeDmers, void *dictBuffer,
     686 + size_t dictBufferCapacity,
     687 + ZDICT_cover_params_t parameters) {
     688 + BYTE *const dict = (BYTE *)dictBuffer;
     689 + size_t tail = dictBufferCapacity;
     690 + /* Divide the data into epochs. We will select one segment from each epoch. */
     691 + const COVER_epoch_info_t epochs = COVER_computeEpochs(
     692 + (U32)dictBufferCapacity, (U32)ctx->suffixSize, parameters.k, 4);
     693 + const size_t maxZeroScoreRun = MAX(10, MIN(100, epochs.num >> 3));
     694 + size_t zeroScoreRun = 0;
     695 + size_t epoch;
     696 + DISPLAYLEVEL(2, "Breaking content into %u epochs of size %u\n",
     697 + (U32)epochs.num, (U32)epochs.size);
     698 + /* Loop through the epochs until there are no more segments or the dictionary
     699 + * is full.
     700 + */
     701 + for (epoch = 0; tail > 0; epoch = (epoch + 1) % epochs.num) {
     702 + const U32 epochBegin = (U32)(epoch * epochs.size);
     703 + const U32 epochEnd = epochBegin + epochs.size;
     704 + size_t segmentSize;
     705 + /* Select a segment */
     706 + COVER_segment_t segment = COVER_selectSegment(
     707 + ctx, freqs, activeDmers, epochBegin, epochEnd, parameters);
     708 + /* If the segment covers no dmers, then we are out of content.
     709 + * There may be new content in other epochs, for continue for some time.
     710 + */
     711 + if (segment.score == 0) {
     712 + if (++zeroScoreRun >= maxZeroScoreRun) {
     713 + break;
     714 + }
     715 + continue;
     716 + }
     717 + zeroScoreRun = 0;
     718 + /* Trim the segment if necessary and if it is too small then we are done */
     719 + segmentSize = MIN(segment.end - segment.begin + parameters.d - 1, tail);
     720 + if (segmentSize < parameters.d) {
     721 + break;
     722 + }
     723 + /* We fill the dictionary from the back to allow the best segments to be
     724 + * referenced with the smallest offsets.
     725 + */
     726 + tail -= segmentSize;
     727 + memcpy(dict + tail, ctx->samples + segment.begin, segmentSize);
     728 + DISPLAYUPDATE(
     729 + 2, "\r%u%% ",
     730 + (unsigned)(((dictBufferCapacity - tail) * 100) / dictBufferCapacity));
     731 + }
     732 + DISPLAYLEVEL(2, "\r%79s\r", "");
     733 + return tail;
     734 +}
     735 + 
     736 +ZDICTLIB_API size_t ZDICT_trainFromBuffer_cover(
     737 + void *dictBuffer, size_t dictBufferCapacity,
     738 + const void *samplesBuffer, const size_t *samplesSizes, unsigned nbSamples,
     739 + ZDICT_cover_params_t parameters)
     740 +{
     741 + BYTE* const dict = (BYTE*)dictBuffer;
     742 + COVER_ctx_t ctx;
     743 + COVER_map_t activeDmers;
     744 + parameters.splitPoint = 1.0;
     745 + /* Initialize global data */
     746 + g_displayLevel = (int)parameters.zParams.notificationLevel;
     747 + /* Checks */
     748 + if (!COVER_checkParameters(parameters, dictBufferCapacity)) {
     749 + DISPLAYLEVEL(1, "Cover parameters incorrect\n");
     750 + return ERROR(parameter_outOfBound);
     751 + }
     752 + if (nbSamples == 0) {
     753 + DISPLAYLEVEL(1, "Cover must have at least one input file\n");
     754 + return ERROR(srcSize_wrong);
     755 + }
     756 + if (dictBufferCapacity < ZDICT_DICTSIZE_MIN) {
     757 + DISPLAYLEVEL(1, "dictBufferCapacity must be at least %u\n",
     758 + ZDICT_DICTSIZE_MIN);
     759 + return ERROR(dstSize_tooSmall);
     760 + }
     761 + /* Initialize context and activeDmers */
     762 + {
     763 + size_t const initVal = COVER_ctx_init(&ctx, samplesBuffer, samplesSizes, nbSamples,
     764 + parameters.d, parameters.splitPoint);
     765 + if (ZSTD_isError(initVal)) {
     766 + return initVal;
     767 + }
     768 + }
     769 + COVER_warnOnSmallCorpus(dictBufferCapacity, ctx.suffixSize, g_displayLevel);
     770 + if (!COVER_map_init(&activeDmers, parameters.k - parameters.d + 1)) {
     771 + DISPLAYLEVEL(1, "Failed to allocate dmer map: out of memory\n");
     772 + COVER_ctx_destroy(&ctx);
     773 + return ERROR(memory_allocation);
     774 + }
     775 + 
     776 + DISPLAYLEVEL(2, "Building dictionary\n");
     777 + {
     778 + const size_t tail =
     779 + COVER_buildDictionary(&ctx, ctx.freqs, &activeDmers, dictBuffer,
     780 + dictBufferCapacity, parameters);
     781 + const size_t dictionarySize = ZDICT_finalizeDictionary(
     782 + dict, dictBufferCapacity, dict + tail, dictBufferCapacity - tail,
     783 + samplesBuffer, samplesSizes, nbSamples, parameters.zParams);
     784 + if (!ZSTD_isError(dictionarySize)) {
     785 + DISPLAYLEVEL(2, "Constructed dictionary of size %u\n",
     786 + (unsigned)dictionarySize);
     787 + }
     788 + COVER_ctx_destroy(&ctx);
     789 + COVER_map_destroy(&activeDmers);
     790 + return dictionarySize;
     791 + }
     792 +}
     793 + 
     794 + 
     795 + 
     796 +size_t COVER_checkTotalCompressedSize(const ZDICT_cover_params_t parameters,
     797 + const size_t *samplesSizes, const BYTE *samples,
     798 + size_t *offsets,
     799 + size_t nbTrainSamples, size_t nbSamples,
     800 + BYTE *const dict, size_t dictBufferCapacity) {
     801 + size_t totalCompressedSize = ERROR(GENERIC);
     802 + /* Pointers */
     803 + ZSTD_CCtx *cctx;
     804 + ZSTD_CDict *cdict;
     805 + void *dst;
     806 + /* Local variables */
     807 + size_t dstCapacity;
     808 + size_t i;
     809 + /* Allocate dst with enough space to compress the maximum sized sample */
     810 + {
     811 + size_t maxSampleSize = 0;
     812 + i = parameters.splitPoint < 1.0 ? nbTrainSamples : 0;
     813 + for (; i < nbSamples; ++i) {
     814 + maxSampleSize = MAX(samplesSizes[i], maxSampleSize);
     815 + }
     816 + dstCapacity = ZSTD_compressBound(maxSampleSize);
     817 + dst = malloc(dstCapacity);
     818 + }
     819 + /* Create the cctx and cdict */
     820 + cctx = ZSTD_createCCtx();
     821 + cdict = ZSTD_createCDict(dict, dictBufferCapacity,
     822 + parameters.zParams.compressionLevel);
     823 + if (!dst || !cctx || !cdict) {
     824 + goto _compressCleanup;
     825 + }
     826 + /* Compress each sample and sum their sizes (or error) */
     827 + totalCompressedSize = dictBufferCapacity;
     828 + i = parameters.splitPoint < 1.0 ? nbTrainSamples : 0;
     829 + for (; i < nbSamples; ++i) {
     830 + const size_t size = ZSTD_compress_usingCDict(
     831 + cctx, dst, dstCapacity, samples + offsets[i],
     832 + samplesSizes[i], cdict);
     833 + if (ZSTD_isError(size)) {
     834 + totalCompressedSize = size;
     835 + goto _compressCleanup;
     836 + }
     837 + totalCompressedSize += size;
     838 + }
     839 +_compressCleanup:
     840 + ZSTD_freeCCtx(cctx);
     841 + ZSTD_freeCDict(cdict);
     842 + if (dst) {
     843 + free(dst);
     844 + }
     845 + return totalCompressedSize;
     846 +}
     847 + 
     848 + 
     849 +/**
     850 + * Initialize the `COVER_best_t`.
     851 + */
     852 +void COVER_best_init(COVER_best_t *best) {
     853 + if (best==NULL) return; /* compatible with init on NULL */
     854 + (void)ZSTD_pthread_mutex_init(&best->mutex, NULL);
     855 + (void)ZSTD_pthread_cond_init(&best->cond, NULL);
     856 + best->liveJobs = 0;
     857 + best->dict = NULL;
     858 + best->dictSize = 0;
     859 + best->compressedSize = (size_t)-1;
     860 + memset(&best->parameters, 0, sizeof(best->parameters));
     861 +}
     862 + 
     863 +/**
     864 + * Wait until liveJobs == 0.
     865 + */
     866 +void COVER_best_wait(COVER_best_t *best) {
     867 + if (!best) {
     868 + return;
     869 + }
     870 + ZSTD_pthread_mutex_lock(&best->mutex);
     871 + while (best->liveJobs != 0) {
     872 + ZSTD_pthread_cond_wait(&best->cond, &best->mutex);
     873 + }
     874 + ZSTD_pthread_mutex_unlock(&best->mutex);
     875 +}
     876 + 
     877 +/**
     878 + * Call COVER_best_wait() and then destroy the COVER_best_t.
     879 + */
     880 +void COVER_best_destroy(COVER_best_t *best) {
     881 + if (!best) {
     882 + return;
     883 + }
     884 + COVER_best_wait(best);
     885 + if (best->dict) {
     886 + free(best->dict);
     887 + }
     888 + ZSTD_pthread_mutex_destroy(&best->mutex);
     889 + ZSTD_pthread_cond_destroy(&best->cond);
     890 +}
     891 + 
     892 +/**
     893 + * Called when a thread is about to be launched.
     894 + * Increments liveJobs.
     895 + */
     896 +void COVER_best_start(COVER_best_t *best) {
     897 + if (!best) {
     898 + return;
     899 + }
     900 + ZSTD_pthread_mutex_lock(&best->mutex);
     901 + ++best->liveJobs;
     902 + ZSTD_pthread_mutex_unlock(&best->mutex);
     903 +}
     904 + 
     905 +/**
     906 + * Called when a thread finishes executing, both on error or success.
     907 + * Decrements liveJobs and signals any waiting threads if liveJobs == 0.
     908 + * If this dictionary is the best so far save it and its parameters.
     909 + */
     910 +void COVER_best_finish(COVER_best_t *best, ZDICT_cover_params_t parameters,
     911 + COVER_dictSelection_t selection) {
     912 + void* dict = selection.dictContent;
     913 + size_t compressedSize = selection.totalCompressedSize;
     914 + size_t dictSize = selection.dictSize;
     915 + if (!best) {
     916 + return;
     917 + }
     918 + {
     919 + size_t liveJobs;
     920 + ZSTD_pthread_mutex_lock(&best->mutex);
     921 + --best->liveJobs;
     922 + liveJobs = best->liveJobs;
     923 + /* If the new dictionary is better */
     924 + if (compressedSize < best->compressedSize) {
     925 + /* Allocate space if necessary */
     926 + if (!best->dict || best->dictSize < dictSize) {
     927 + if (best->dict) {
     928 + free(best->dict);
     929 + }
     930 + best->dict = malloc(dictSize);
     931 + if (!best->dict) {
     932 + best->compressedSize = ERROR(GENERIC);
     933 + best->dictSize = 0;
     934 + ZSTD_pthread_cond_signal(&best->cond);
     935 + ZSTD_pthread_mutex_unlock(&best->mutex);
     936 + return;
     937 + }
     938 + }
     939 + /* Save the dictionary, parameters, and size */
     940 + if (dict) {
     941 + memcpy(best->dict, dict, dictSize);
     942 + best->dictSize = dictSize;
     943 + best->parameters = parameters;
     944 + best->compressedSize = compressedSize;
     945 + }
     946 + }
     947 + if (liveJobs == 0) {
     948 + ZSTD_pthread_cond_broadcast(&best->cond);
     949 + }
     950 + ZSTD_pthread_mutex_unlock(&best->mutex);
     951 + }
     952 +}
     953 + 
     954 +COVER_dictSelection_t COVER_dictSelectionError(size_t error) {
     955 + COVER_dictSelection_t selection = { NULL, 0, error };
     956 + return selection;
     957 +}
     958 + 
     959 +unsigned COVER_dictSelectionIsError(COVER_dictSelection_t selection) {
     960 + return (ZSTD_isError(selection.totalCompressedSize) || !selection.dictContent);
     961 +}
     962 + 
     963 +void COVER_dictSelectionFree(COVER_dictSelection_t selection){
     964 + free(selection.dictContent);
     965 +}
     966 + 
     967 +COVER_dictSelection_t COVER_selectDict(BYTE* customDictContent, size_t dictBufferCapacity,
     968 + size_t dictContentSize, const BYTE* samplesBuffer, const size_t* samplesSizes, unsigned nbFinalizeSamples,
     969 + size_t nbCheckSamples, size_t nbSamples, ZDICT_cover_params_t params, size_t* offsets, size_t totalCompressedSize) {
     970 + 
     971 + size_t largestDict = 0;
     972 + size_t largestCompressed = 0;
     973 + BYTE* customDictContentEnd = customDictContent + dictContentSize;
     974 + 
     975 + BYTE * largestDictbuffer = (BYTE *)malloc(dictBufferCapacity);
     976 + BYTE * candidateDictBuffer = (BYTE *)malloc(dictBufferCapacity);
     977 + double regressionTolerance = ((double)params.shrinkDictMaxRegression / 100.0) + 1.00;
     978 + 
     979 + if (!largestDictbuffer || !candidateDictBuffer) {
     980 + free(largestDictbuffer);
     981 + free(candidateDictBuffer);
     982 + return COVER_dictSelectionError(dictContentSize);
     983 + }
     984 + 
     985 + /* Initial dictionary size and compressed size */
     986 + memcpy(largestDictbuffer, customDictContent, dictContentSize);
     987 + dictContentSize = ZDICT_finalizeDictionary(
     988 + largestDictbuffer, dictBufferCapacity, customDictContent, dictContentSize,
     989 + samplesBuffer, samplesSizes, nbFinalizeSamples, params.zParams);
     990 + 
     991 + if (ZDICT_isError(dictContentSize)) {
     992 + free(largestDictbuffer);
     993 + free(candidateDictBuffer);
     994 + return COVER_dictSelectionError(dictContentSize);
     995 + }
     996 + 
     997 + totalCompressedSize = COVER_checkTotalCompressedSize(params, samplesSizes,
     998 + samplesBuffer, offsets,
     999 + nbCheckSamples, nbSamples,
     1000 + largestDictbuffer, dictContentSize);
     1001 + 
     1002 + if (ZSTD_isError(totalCompressedSize)) {
     1003 + free(largestDictbuffer);
     1004 + free(candidateDictBuffer);
     1005 + return COVER_dictSelectionError(totalCompressedSize);
     1006 + }
     1007 + 
     1008 + if (params.shrinkDict == 0) {
     1009 + COVER_dictSelection_t selection = { largestDictbuffer, dictContentSize, totalCompressedSize };
     1010 + free(candidateDictBuffer);
     1011 + return selection;
     1012 + }
     1013 + 
     1014 + largestDict = dictContentSize;
     1015 + largestCompressed = totalCompressedSize;
     1016 + dictContentSize = ZDICT_DICTSIZE_MIN;
     1017 + 
     1018 + /* Largest dict is initially at least ZDICT_DICTSIZE_MIN */
     1019 + while (dictContentSize < largestDict) {
     1020 + memcpy(candidateDictBuffer, largestDictbuffer, largestDict);
     1021 + dictContentSize = ZDICT_finalizeDictionary(
     1022 + candidateDictBuffer, dictBufferCapacity, customDictContentEnd - dictContentSize, dictContentSize,
     1023 + samplesBuffer, samplesSizes, nbFinalizeSamples, params.zParams);
     1024 + 
     1025 + if (ZDICT_isError(dictContentSize)) {
     1026 + free(largestDictbuffer);
     1027 + free(candidateDictBuffer);
     1028 + return COVER_dictSelectionError(dictContentSize);
     1029 + 
     1030 + }
     1031 + 
     1032 + totalCompressedSize = COVER_checkTotalCompressedSize(params, samplesSizes,
     1033 + samplesBuffer, offsets,
     1034 + nbCheckSamples, nbSamples,
     1035 + candidateDictBuffer, dictContentSize);
     1036 + 
     1037 + if (ZSTD_isError(totalCompressedSize)) {
     1038 + free(largestDictbuffer);
     1039 + free(candidateDictBuffer);
     1040 + return COVER_dictSelectionError(totalCompressedSize);
     1041 + }
     1042 + 
     1043 + if (totalCompressedSize <= largestCompressed * regressionTolerance) {
     1044 + COVER_dictSelection_t selection = { candidateDictBuffer, dictContentSize, totalCompressedSize };
     1045 + free(largestDictbuffer);
     1046 + return selection;
     1047 + }
     1048 + dictContentSize *= 2;
     1049 + }
     1050 + dictContentSize = largestDict;
     1051 + totalCompressedSize = largestCompressed;
     1052 + {
     1053 + COVER_dictSelection_t selection = { largestDictbuffer, dictContentSize, totalCompressedSize };
     1054 + free(candidateDictBuffer);
     1055 + return selection;
     1056 + }
     1057 +}
     1058 + 
     1059 +/**
     1060 + * Parameters for COVER_tryParameters().
     1061 + */
     1062 +typedef struct COVER_tryParameters_data_s {
     1063 + const COVER_ctx_t *ctx;
     1064 + COVER_best_t *best;
     1065 + size_t dictBufferCapacity;
     1066 + ZDICT_cover_params_t parameters;
     1067 +} COVER_tryParameters_data_t;
     1068 + 
     1069 +/**
     1070 + * Tries a set of parameters and updates the COVER_best_t with the results.
     1071 + * This function is thread safe if zstd is compiled with multithreaded support.
     1072 + * It takes its parameters as an *OWNING* opaque pointer to support threading.
     1073 + */
     1074 +static void COVER_tryParameters(void *opaque)
     1075 +{
     1076 + /* Save parameters as local variables */
     1077 + COVER_tryParameters_data_t *const data = (COVER_tryParameters_data_t*)opaque;
     1078 + const COVER_ctx_t *const ctx = data->ctx;
     1079 + const ZDICT_cover_params_t parameters = data->parameters;
     1080 + size_t dictBufferCapacity = data->dictBufferCapacity;
     1081 + size_t totalCompressedSize = ERROR(GENERIC);
     1082 + /* Allocate space for hash table, dict, and freqs */
     1083 + COVER_map_t activeDmers;
     1084 + BYTE* const dict = (BYTE*)malloc(dictBufferCapacity);
     1085 + COVER_dictSelection_t selection = COVER_dictSelectionError(ERROR(GENERIC));
     1086 + U32* const freqs = (U32*)malloc(ctx->suffixSize * sizeof(U32));
     1087 + if (!COVER_map_init(&activeDmers, parameters.k - parameters.d + 1)) {
     1088 + DISPLAYLEVEL(1, "Failed to allocate dmer map: out of memory\n");
     1089 + goto _cleanup;
     1090 + }
     1091 + if (!dict || !freqs) {
     1092 + DISPLAYLEVEL(1, "Failed to allocate buffers: out of memory\n");
     1093 + goto _cleanup;
     1094 + }
     1095 + /* Copy the frequencies because we need to modify them */
     1096 + memcpy(freqs, ctx->freqs, ctx->suffixSize * sizeof(U32));
     1097 + /* Build the dictionary */
     1098 + {
     1099 + const size_t tail = COVER_buildDictionary(ctx, freqs, &activeDmers, dict,
     1100 + dictBufferCapacity, parameters);
     1101 + selection = COVER_selectDict(dict + tail, dictBufferCapacity, dictBufferCapacity - tail,
     1102 + ctx->samples, ctx->samplesSizes, (unsigned)ctx->nbTrainSamples, ctx->nbTrainSamples, ctx->nbSamples, parameters, ctx->offsets,
     1103 + totalCompressedSize);
     1104 + 
     1105 + if (COVER_dictSelectionIsError(selection)) {
     1106 + DISPLAYLEVEL(1, "Failed to select dictionary\n");
     1107 + goto _cleanup;
     1108 + }
     1109 + }
     1110 +_cleanup:
     1111 + free(dict);
     1112 + COVER_best_finish(data->best, parameters, selection);
     1113 + free(data);
     1114 + COVER_map_destroy(&activeDmers);
     1115 + COVER_dictSelectionFree(selection);
     1116 + free(freqs);
     1117 +}
     1118 + 
     1119 +ZDICTLIB_API size_t ZDICT_optimizeTrainFromBuffer_cover(
     1120 + void* dictBuffer, size_t dictBufferCapacity, const void* samplesBuffer,
     1121 + const size_t* samplesSizes, unsigned nbSamples,
     1122 + ZDICT_cover_params_t* parameters)
     1123 +{
     1124 + /* constants */
     1125 + const unsigned nbThreads = parameters->nbThreads;
     1126 + const double splitPoint =
     1127 + parameters->splitPoint <= 0.0 ? COVER_DEFAULT_SPLITPOINT : parameters->splitPoint;
     1128 + const unsigned kMinD = parameters->d == 0 ? 6 : parameters->d;
     1129 + const unsigned kMaxD = parameters->d == 0 ? 8 : parameters->d;
     1130 + const unsigned kMinK = parameters->k == 0 ? 50 : parameters->k;
     1131 + const unsigned kMaxK = parameters->k == 0 ? 2000 : parameters->k;
     1132 + const unsigned kSteps = parameters->steps == 0 ? 40 : parameters->steps;
     1133 + const unsigned kStepSize = MAX((kMaxK - kMinK) / kSteps, 1);
     1134 + const unsigned kIterations =
     1135 + (1 + (kMaxD - kMinD) / 2) * (1 + (kMaxK - kMinK) / kStepSize);
     1136 + const unsigned shrinkDict = 0;
     1137 + /* Local variables */
     1138 + const int displayLevel = parameters->zParams.notificationLevel;
     1139 + unsigned iteration = 1;
     1140 + unsigned d;
     1141 + unsigned k;
     1142 + COVER_best_t best;
     1143 + POOL_ctx *pool = NULL;
     1144 + int warned = 0;
     1145 + 
     1146 + /* Checks */
     1147 + if (splitPoint <= 0 || splitPoint > 1) {
     1148 + LOCALDISPLAYLEVEL(displayLevel, 1, "Incorrect parameters\n");
     1149 + return ERROR(parameter_outOfBound);
     1150 + }
     1151 + if (kMinK < kMaxD || kMaxK < kMinK) {
     1152 + LOCALDISPLAYLEVEL(displayLevel, 1, "Incorrect parameters\n");
     1153 + return ERROR(parameter_outOfBound);
     1154 + }
     1155 + if (nbSamples == 0) {
     1156 + DISPLAYLEVEL(1, "Cover must have at least one input file\n");
     1157 + return ERROR(srcSize_wrong);
     1158 + }
     1159 + if (dictBufferCapacity < ZDICT_DICTSIZE_MIN) {
     1160 + DISPLAYLEVEL(1, "dictBufferCapacity must be at least %u\n",
     1161 + ZDICT_DICTSIZE_MIN);
     1162 + return ERROR(dstSize_tooSmall);
     1163 + }
     1164 + if (nbThreads > 1) {
     1165 + pool = POOL_create(nbThreads, 1);
     1166 + if (!pool) {
     1167 + return ERROR(memory_allocation);
     1168 + }
     1169 + }
     1170 + /* Initialization */
     1171 + COVER_best_init(&best);
     1172 + /* Turn down global display level to clean up display at level 2 and below */
     1173 + g_displayLevel = displayLevel == 0 ? 0 : displayLevel - 1;
     1174 + /* Loop through d first because each new value needs a new context */
     1175 + LOCALDISPLAYLEVEL(displayLevel, 2, "Trying %u different sets of parameters\n",
     1176 + kIterations);
     1177 + for (d = kMinD; d <= kMaxD; d += 2) {
     1178 + /* Initialize the context for this value of d */
     1179 + COVER_ctx_t ctx;
     1180 + LOCALDISPLAYLEVEL(displayLevel, 3, "d=%u\n", d);
     1181 + {
     1182 + const size_t initVal = COVER_ctx_init(&ctx, samplesBuffer, samplesSizes, nbSamples, d, splitPoint);
     1183 + if (ZSTD_isError(initVal)) {
     1184 + LOCALDISPLAYLEVEL(displayLevel, 1, "Failed to initialize context\n");
     1185 + COVER_best_destroy(&best);
     1186 + POOL_free(pool);
     1187 + return initVal;
     1188 + }
     1189 + }
     1190 + if (!warned) {
     1191 + COVER_warnOnSmallCorpus(dictBufferCapacity, ctx.suffixSize, displayLevel);
     1192 + warned = 1;
     1193 + }
     1194 + /* Loop through k reusing the same context */
     1195 + for (k = kMinK; k <= kMaxK; k += kStepSize) {
     1196 + /* Prepare the arguments */
     1197 + COVER_tryParameters_data_t *data = (COVER_tryParameters_data_t *)malloc(
     1198 + sizeof(COVER_tryParameters_data_t));
     1199 + LOCALDISPLAYLEVEL(displayLevel, 3, "k=%u\n", k);
     1200 + if (!data) {
     1201 + LOCALDISPLAYLEVEL(displayLevel, 1, "Failed to allocate parameters\n");
     1202 + COVER_best_destroy(&best);
     1203 + COVER_ctx_destroy(&ctx);
     1204 + POOL_free(pool);
     1205 + return ERROR(memory_allocation);
     1206 + }
     1207 + data->ctx = &ctx;
     1208 + data->best = &best;
     1209 + data->dictBufferCapacity = dictBufferCapacity;
     1210 + data->parameters = *parameters;
     1211 + data->parameters.k = k;
     1212 + data->parameters.d = d;
     1213 + data->parameters.splitPoint = splitPoint;
     1214 + data->parameters.steps = kSteps;
     1215 + data->parameters.shrinkDict = shrinkDict;
     1216 + data->parameters.zParams.notificationLevel = g_displayLevel;
     1217 + /* Check the parameters */
     1218 + if (!COVER_checkParameters(data->parameters, dictBufferCapacity)) {
     1219 + DISPLAYLEVEL(1, "Cover parameters incorrect\n");
     1220 + free(data);
     1221 + continue;
     1222 + }
     1223 + /* Call the function and pass ownership of data to it */
     1224 + COVER_best_start(&best);
     1225 + if (pool) {
     1226 + POOL_add(pool, &COVER_tryParameters, data);
     1227 + } else {
     1228 + COVER_tryParameters(data);
     1229 + }
     1230 + /* Print status */
     1231 + LOCALDISPLAYUPDATE(displayLevel, 2, "\r%u%% ",
     1232 + (unsigned)((iteration * 100) / kIterations));
     1233 + ++iteration;
     1234 + }
     1235 + COVER_best_wait(&best);
     1236 + COVER_ctx_destroy(&ctx);
     1237 + }
     1238 + LOCALDISPLAYLEVEL(displayLevel, 2, "\r%79s\r", "");
     1239 + /* Fill the output buffer and parameters with output of the best parameters */
     1240 + {
     1241 + const size_t dictSize = best.dictSize;
     1242 + if (ZSTD_isError(best.compressedSize)) {
     1243 + const size_t compressedSize = best.compressedSize;
     1244 + COVER_best_destroy(&best);
     1245 + POOL_free(pool);
     1246 + return compressedSize;
     1247 + }
     1248 + *parameters = best.parameters;
     1249 + memcpy(dictBuffer, best.dict, dictSize);
     1250 + COVER_best_destroy(&best);
     1251 + POOL_free(pool);
     1252 + return dictSize;
     1253 + }
     1254 +}
     1255 + 
     1256 +#endif /* USE_EXTERNAL_ZSTD */
     1257 + 
  • ■ ■ ■ ■ ■ ■
    vendor/github.com/DataDog/zstd/cover.h
     1 +#ifndef USE_EXTERNAL_ZSTD
     2 +/*
     3 + * Copyright (c) Facebook, Inc.
     4 + * All rights reserved.
     5 + *
     6 + * This source code is licensed under both the BSD-style license (found in the
     7 + * LICENSE file in the root directory of this source tree) and the GPLv2 (found
     8 + * in the COPYING file in the root directory of this source tree).
     9 + * You may select, at your option, one of the above-listed licenses.
     10 + */
     11 + 
     12 +#ifndef ZDICT_STATIC_LINKING_ONLY
     13 +# define ZDICT_STATIC_LINKING_ONLY
     14 +#endif
     15 + 
     16 +#include <stdio.h> /* fprintf */
     17 +#include <stdlib.h> /* malloc, free, qsort */
     18 +#include <string.h> /* memset */
     19 +#include <time.h> /* clock */
     20 +#include "mem.h" /* read */
     21 +#include "pool.h"
     22 +#include "threading.h"
     23 +#include "zstd_internal.h" /* includes zstd.h */
     24 +#include "zdict.h"
     25 + 
     26 +/**
     27 + * COVER_best_t is used for two purposes:
     28 + * 1. Synchronizing threads.
     29 + * 2. Saving the best parameters and dictionary.
     30 + *
     31 + * All of the methods except COVER_best_init() are thread safe if zstd is
     32 + * compiled with multithreaded support.
     33 + */
     34 +typedef struct COVER_best_s {
     35 + ZSTD_pthread_mutex_t mutex;
     36 + ZSTD_pthread_cond_t cond;
     37 + size_t liveJobs;
     38 + void *dict;
     39 + size_t dictSize;
     40 + ZDICT_cover_params_t parameters;
     41 + size_t compressedSize;
     42 +} COVER_best_t;
     43 + 
     44 +/**
     45 + * A segment is a range in the source as well as the score of the segment.
     46 + */
     47 +typedef struct {
     48 + U32 begin;
     49 + U32 end;
     50 + U32 score;
     51 +} COVER_segment_t;
     52 + 
     53 +/**
     54 + *Number of epochs and size of each epoch.
     55 + */
     56 +typedef struct {
     57 + U32 num;
     58 + U32 size;
     59 +} COVER_epoch_info_t;
     60 + 
     61 +/**
     62 + * Struct used for the dictionary selection function.
     63 + */
     64 +typedef struct COVER_dictSelection {
     65 + BYTE* dictContent;
     66 + size_t dictSize;
     67 + size_t totalCompressedSize;
     68 +} COVER_dictSelection_t;
     69 + 
     70 +/**
     71 + * Computes the number of epochs and the size of each epoch.
     72 + * We will make sure that each epoch gets at least 10 * k bytes.
     73 + *
     74 + * The COVER algorithms divide the data up into epochs of equal size and
     75 + * select one segment from each epoch.
     76 + *
     77 + * @param maxDictSize The maximum allowed dictionary size.
     78 + * @param nbDmers The number of dmers we are training on.
     79 + * @param k The parameter k (segment size).
     80 + * @param passes The target number of passes over the dmer corpus.
     81 + * More passes means a better dictionary.
     82 + */
     83 +COVER_epoch_info_t COVER_computeEpochs(U32 maxDictSize, U32 nbDmers,
     84 + U32 k, U32 passes);
     85 + 
     86 +/**
     87 + * Warns the user when their corpus is too small.
     88 + */
     89 +void COVER_warnOnSmallCorpus(size_t maxDictSize, size_t nbDmers, int displayLevel);
     90 + 
     91 +/**
     92 + * Checks total compressed size of a dictionary
     93 + */
     94 +size_t COVER_checkTotalCompressedSize(const ZDICT_cover_params_t parameters,
     95 + const size_t *samplesSizes, const BYTE *samples,
     96 + size_t *offsets,
     97 + size_t nbTrainSamples, size_t nbSamples,
     98 + BYTE *const dict, size_t dictBufferCapacity);
     99 + 
     100 +/**
     101 + * Returns the sum of the sample sizes.
     102 + */
     103 +size_t COVER_sum(const size_t *samplesSizes, unsigned nbSamples) ;
     104 + 
     105 +/**
     106 + * Initialize the `COVER_best_t`.
     107 + */
     108 +void COVER_best_init(COVER_best_t *best);
     109 + 
     110 +/**
     111 + * Wait until liveJobs == 0.
     112 + */
     113 +void COVER_best_wait(COVER_best_t *best);
     114 + 
     115 +/**
     116 + * Call COVER_best_wait() and then destroy the COVER_best_t.
     117 + */
     118 +void COVER_best_destroy(COVER_best_t *best);
     119 + 
     120 +/**
     121 + * Called when a thread is about to be launched.
     122 + * Increments liveJobs.
     123 + */
     124 +void COVER_best_start(COVER_best_t *best);
     125 + 
     126 +/**
     127 + * Called when a thread finishes executing, both on error or success.
     128 + * Decrements liveJobs and signals any waiting threads if liveJobs == 0.
     129 + * If this dictionary is the best so far save it and its parameters.
     130 + */
     131 +void COVER_best_finish(COVER_best_t *best, ZDICT_cover_params_t parameters,
     132 + COVER_dictSelection_t selection);
     133 +/**
     134 + * Error function for COVER_selectDict function. Checks if the return
     135 + * value is an error.
     136 + */
     137 +unsigned COVER_dictSelectionIsError(COVER_dictSelection_t selection);
     138 + 
     139 + /**
     140 + * Error function for COVER_selectDict function. Returns a struct where
     141 + * return.totalCompressedSize is a ZSTD error.
     142 + */
     143 +COVER_dictSelection_t COVER_dictSelectionError(size_t error);
     144 + 
     145 +/**
     146 + * Always call after selectDict is called to free up used memory from
     147 + * newly created dictionary.
     148 + */
     149 +void COVER_dictSelectionFree(COVER_dictSelection_t selection);
     150 + 
     151 +/**
     152 + * Called to finalize the dictionary and select one based on whether or not
     153 + * the shrink-dict flag was enabled. If enabled the dictionary used is the
     154 + * smallest dictionary within a specified regression of the compressed size
     155 + * from the largest dictionary.
     156 + */
     157 + COVER_dictSelection_t COVER_selectDict(BYTE* customDictContent, size_t dictBufferCapacity,
     158 + size_t dictContentSize, const BYTE* samplesBuffer, const size_t* samplesSizes, unsigned nbFinalizeSamples,
     159 + size_t nbCheckSamples, size_t nbSamples, ZDICT_cover_params_t params, size_t* offsets, size_t totalCompressedSize);
     160 + 
     161 +#endif /* USE_EXTERNAL_ZSTD */
     162 + 
  • ■ ■ ■ ■ ■ ■
    vendor/github.com/DataDog/zstd/cpu.h
     1 +#ifndef USE_EXTERNAL_ZSTD
     2 +/*
     3 + * Copyright (c) Facebook, Inc.
     4 + * All rights reserved.
     5 + *
     6 + * This source code is licensed under both the BSD-style license (found in the
     7 + * LICENSE file in the root directory of this source tree) and the GPLv2 (found
     8 + * in the COPYING file in the root directory of this source tree).
     9 + * You may select, at your option, one of the above-listed licenses.
     10 + */
     11 + 
     12 +#ifndef ZSTD_COMMON_CPU_H
     13 +#define ZSTD_COMMON_CPU_H
     14 + 
     15 +/**
     16 + * Implementation taken from folly/CpuId.h
     17 + * https://github.com/facebook/folly/blob/master/folly/CpuId.h
     18 + */
     19 + 
     20 +#include "mem.h"
     21 + 
     22 +#ifdef _MSC_VER
     23 +#include <intrin.h>
     24 +#endif
     25 + 
     26 +typedef struct {
     27 + U32 f1c;
     28 + U32 f1d;
     29 + U32 f7b;
     30 + U32 f7c;
     31 +} ZSTD_cpuid_t;
     32 + 
     33 +MEM_STATIC ZSTD_cpuid_t ZSTD_cpuid(void) {
     34 + U32 f1c = 0;
     35 + U32 f1d = 0;
     36 + U32 f7b = 0;
     37 + U32 f7c = 0;
     38 +#if defined(_MSC_VER) && (defined(_M_X64) || defined(_M_IX86))
     39 + int reg[4];
     40 + __cpuid((int*)reg, 0);
     41 + {
     42 + int const n = reg[0];
     43 + if (n >= 1) {
     44 + __cpuid((int*)reg, 1);
     45 + f1c = (U32)reg[2];
     46 + f1d = (U32)reg[3];
     47 + }
     48 + if (n >= 7) {
     49 + __cpuidex((int*)reg, 7, 0);
     50 + f7b = (U32)reg[1];
     51 + f7c = (U32)reg[2];
     52 + }
     53 + }
     54 +#elif defined(__i386__) && defined(__PIC__) && !defined(__clang__) && defined(__GNUC__)
     55 + /* The following block like the normal cpuid branch below, but gcc
     56 + * reserves ebx for use of its pic register so we must specially
     57 + * handle the save and restore to avoid clobbering the register
     58 + */
     59 + U32 n;
     60 + __asm__(
     61 + "pushl %%ebx\n\t"
     62 + "cpuid\n\t"
     63 + "popl %%ebx\n\t"
     64 + : "=a"(n)
     65 + : "a"(0)
     66 + : "ecx", "edx");
     67 + if (n >= 1) {
     68 + U32 f1a;
     69 + __asm__(
     70 + "pushl %%ebx\n\t"
     71 + "cpuid\n\t"
     72 + "popl %%ebx\n\t"
     73 + : "=a"(f1a), "=c"(f1c), "=d"(f1d)
     74 + : "a"(1));
     75 + }
     76 + if (n >= 7) {
     77 + __asm__(
     78 + "pushl %%ebx\n\t"
     79 + "cpuid\n\t"
     80 + "movl %%ebx, %%eax\n\t"
     81 + "popl %%ebx"
     82 + : "=a"(f7b), "=c"(f7c)
     83 + : "a"(7), "c"(0)
     84 + : "edx");
     85 + }
     86 +#elif defined(__x86_64__) || defined(_M_X64) || defined(__i386__)
     87 + U32 n;
     88 + __asm__("cpuid" : "=a"(n) : "a"(0) : "ebx", "ecx", "edx");
     89 + if (n >= 1) {
     90 + U32 f1a;
     91 + __asm__("cpuid" : "=a"(f1a), "=c"(f1c), "=d"(f1d) : "a"(1) : "ebx");
     92 + }
     93 + if (n >= 7) {
     94 + U32 f7a;
     95 + __asm__("cpuid"
     96 + : "=a"(f7a), "=b"(f7b), "=c"(f7c)
     97 + : "a"(7), "c"(0)
     98 + : "edx");
     99 + }
     100 +#endif
     101 + {
     102 + ZSTD_cpuid_t cpuid;
     103 + cpuid.f1c = f1c;
     104 + cpuid.f1d = f1d;
     105 + cpuid.f7b = f7b;
     106 + cpuid.f7c = f7c;
     107 + return cpuid;
     108 + }
     109 +}
     110 + 
     111 +#define X(name, r, bit) \
     112 + MEM_STATIC int ZSTD_cpuid_##name(ZSTD_cpuid_t const cpuid) { \
     113 + return ((cpuid.r) & (1U << bit)) != 0; \
     114 + }
     115 + 
     116 +/* cpuid(1): Processor Info and Feature Bits. */
     117 +#define C(name, bit) X(name, f1c, bit)
     118 + C(sse3, 0)
     119 + C(pclmuldq, 1)
     120 + C(dtes64, 2)
     121 + C(monitor, 3)
     122 + C(dscpl, 4)
     123 + C(vmx, 5)
     124 + C(smx, 6)
     125 + C(eist, 7)
     126 + C(tm2, 8)
     127 + C(ssse3, 9)
     128 + C(cnxtid, 10)
     129 + C(fma, 12)
     130 + C(cx16, 13)
     131 + C(xtpr, 14)
     132 + C(pdcm, 15)
     133 + C(pcid, 17)
     134 + C(dca, 18)
     135 + C(sse41, 19)
     136 + C(sse42, 20)
     137 + C(x2apic, 21)
     138 + C(movbe, 22)
     139 + C(popcnt, 23)
     140 + C(tscdeadline, 24)
     141 + C(aes, 25)
     142 + C(xsave, 26)
     143 + C(osxsave, 27)
     144 + C(avx, 28)
     145 + C(f16c, 29)
     146 + C(rdrand, 30)
     147 +#undef C
     148 +#define D(name, bit) X(name, f1d, bit)
     149 + D(fpu, 0)
     150 + D(vme, 1)
     151 + D(de, 2)
     152 + D(pse, 3)
     153 + D(tsc, 4)
     154 + D(msr, 5)
     155 + D(pae, 6)
     156 + D(mce, 7)
     157 + D(cx8, 8)
     158 + D(apic, 9)
     159 + D(sep, 11)
     160 + D(mtrr, 12)
     161 + D(pge, 13)
     162 + D(mca, 14)
     163 + D(cmov, 15)
     164 + D(pat, 16)
     165 + D(pse36, 17)
     166 + D(psn, 18)
     167 + D(clfsh, 19)
     168 + D(ds, 21)
     169 + D(acpi, 22)
     170 + D(mmx, 23)
     171 + D(fxsr, 24)
     172 + D(sse, 25)
     173 + D(sse2, 26)
     174 + D(ss, 27)
     175 + D(htt, 28)
     176 + D(tm, 29)
     177 + D(pbe, 31)
     178 +#undef D
     179 + 
     180 +/* cpuid(7): Extended Features. */
     181 +#define B(name, bit) X(name, f7b, bit)
     182 + B(bmi1, 3)
     183 + B(hle, 4)
     184 + B(avx2, 5)
     185 + B(smep, 7)
     186 + B(bmi2, 8)
     187 + B(erms, 9)
     188 + B(invpcid, 10)
     189 + B(rtm, 11)
     190 + B(mpx, 14)
     191 + B(avx512f, 16)
     192 + B(avx512dq, 17)
     193 + B(rdseed, 18)
     194 + B(adx, 19)
     195 + B(smap, 20)
     196 + B(avx512ifma, 21)
     197 + B(pcommit, 22)
     198 + B(clflushopt, 23)
     199 + B(clwb, 24)
     200 + B(avx512pf, 26)
     201 + B(avx512er, 27)
     202 + B(avx512cd, 28)
     203 + B(sha, 29)
     204 + B(avx512bw, 30)
     205 + B(avx512vl, 31)
     206 +#undef B
     207 +#define C(name, bit) X(name, f7c, bit)
     208 + C(prefetchwt1, 0)
     209 + C(avx512vbmi, 1)
     210 +#undef C
     211 + 
     212 +#undef X
     213 + 
     214 +#endif /* ZSTD_COMMON_CPU_H */
     215 + 
     216 +#endif /* USE_EXTERNAL_ZSTD */
     217 + 
  • ■ ■ ■ ■ ■ ■
    vendor/github.com/DataDog/zstd/debug.c
     1 +#ifndef USE_EXTERNAL_ZSTD
     2 +/* ******************************************************************
     3 + * debug
     4 + * Part of FSE library
     5 + * Copyright (c) Yann Collet, Facebook, Inc.
     6 + *
     7 + * You can contact the author at :
     8 + * - Source repository : https://github.com/Cyan4973/FiniteStateEntropy
     9 + *
     10 + * This source code is licensed under both the BSD-style license (found in the
     11 + * LICENSE file in the root directory of this source tree) and the GPLv2 (found
     12 + * in the COPYING file in the root directory of this source tree).
     13 + * You may select, at your option, one of the above-listed licenses.
     14 +****************************************************************** */
     15 + 
     16 + 
     17 +/*
     18 + * This module only hosts one global variable
     19 + * which can be used to dynamically influence the verbosity of traces,
     20 + * such as DEBUGLOG and RAWLOG
     21 + */
     22 + 
     23 +#include "debug.h"
     24 + 
     25 +int g_debuglevel = DEBUGLEVEL;
     26 + 
     27 +#endif /* USE_EXTERNAL_ZSTD */
     28 + 
  • ■ ■ ■ ■ ■ ■
    vendor/github.com/DataDog/zstd/debug.h
     1 +#ifndef USE_EXTERNAL_ZSTD
     2 +/* ******************************************************************
     3 + * debug
     4 + * Part of FSE library
     5 + * Copyright (c) Yann Collet, Facebook, Inc.
     6 + *
     7 + * You can contact the author at :
     8 + * - Source repository : https://github.com/Cyan4973/FiniteStateEntropy
     9 + *
     10 + * This source code is licensed under both the BSD-style license (found in the
     11 + * LICENSE file in the root directory of this source tree) and the GPLv2 (found
     12 + * in the COPYING file in the root directory of this source tree).
     13 + * You may select, at your option, one of the above-listed licenses.
     14 +****************************************************************** */
     15 + 
     16 + 
     17 +/*
     18 + * The purpose of this header is to enable debug functions.
     19 + * They regroup assert(), DEBUGLOG() and RAWLOG() for run-time,
     20 + * and DEBUG_STATIC_ASSERT() for compile-time.
     21 + *
     22 + * By default, DEBUGLEVEL==0, which means run-time debug is disabled.
     23 + *
     24 + * Level 1 enables assert() only.
     25 + * Starting level 2, traces can be generated and pushed to stderr.
     26 + * The higher the level, the more verbose the traces.
     27 + *
     28 + * It's possible to dynamically adjust level using variable g_debug_level,
     29 + * which is only declared if DEBUGLEVEL>=2,
     30 + * and is a global variable, not multi-thread protected (use with care)
     31 + */
     32 + 
     33 +#ifndef DEBUG_H_12987983217
     34 +#define DEBUG_H_12987983217
     35 + 
     36 +#if defined (__cplusplus)
     37 +extern "C" {
     38 +#endif
     39 + 
     40 + 
     41 +/* static assert is triggered at compile time, leaving no runtime artefact.
     42 + * static assert only works with compile-time constants.
     43 + * Also, this variant can only be used inside a function. */
     44 +#define DEBUG_STATIC_ASSERT(c) (void)sizeof(char[(c) ? 1 : -1])
     45 + 
     46 + 
     47 +/* DEBUGLEVEL is expected to be defined externally,
     48 + * typically through compiler command line.
     49 + * Value must be a number. */
     50 +#ifndef DEBUGLEVEL
     51 +# define DEBUGLEVEL 0
     52 +#endif
     53 + 
     54 + 
     55 +/* recommended values for DEBUGLEVEL :
     56 + * 0 : release mode, no debug, all run-time checks disabled
     57 + * 1 : enables assert() only, no display
     58 + * 2 : reserved, for currently active debug path
     59 + * 3 : events once per object lifetime (CCtx, CDict, etc.)
     60 + * 4 : events once per frame
     61 + * 5 : events once per block
     62 + * 6 : events once per sequence (verbose)
     63 + * 7+: events at every position (*very* verbose)
     64 + *
     65 + * It's generally inconvenient to output traces > 5.
     66 + * In which case, it's possible to selectively trigger high verbosity levels
     67 + * by modifying g_debug_level.
     68 + */
     69 + 
     70 +#if (DEBUGLEVEL>=1)
     71 +# define ZSTD_DEPS_NEED_ASSERT
     72 +# include "zstd_deps.h"
     73 +#else
     74 +# ifndef assert /* assert may be already defined, due to prior #include <assert.h> */
     75 +# define assert(condition) ((void)0) /* disable assert (default) */
     76 +# endif
     77 +#endif
     78 + 
     79 +#if (DEBUGLEVEL>=2)
     80 +# define ZSTD_DEPS_NEED_IO
     81 +# include "zstd_deps.h"
     82 +extern int g_debuglevel; /* the variable is only declared,
     83 + it actually lives in debug.c,
     84 + and is shared by the whole process.
     85 + It's not thread-safe.
     86 + It's useful when enabling very verbose levels
     87 + on selective conditions (such as position in src) */
     88 + 
     89 +# define RAWLOG(l, ...) { \
     90 + if (l<=g_debuglevel) { \
     91 + ZSTD_DEBUG_PRINT(__VA_ARGS__); \
     92 + } }
     93 +# define DEBUGLOG(l, ...) { \
     94 + if (l<=g_debuglevel) { \
     95 + ZSTD_DEBUG_PRINT(__FILE__ ": " __VA_ARGS__); \
     96 + ZSTD_DEBUG_PRINT(" \n"); \
     97 + } }
     98 +#else
     99 +# define RAWLOG(l, ...) {} /* disabled */
     100 +# define DEBUGLOG(l, ...) {} /* disabled */
     101 +#endif
     102 + 
     103 + 
     104 +#if defined (__cplusplus)
     105 +}
     106 +#endif
     107 + 
     108 +#endif /* DEBUG_H_12987983217 */
     109 + 
     110 +#endif /* USE_EXTERNAL_ZSTD */
     111 + 
Please wait...
Page is in error, reload to recover