[rand] Bump rand to 0.3.23, 0.4.6, 0.5.6, 0.6.5

This updates all the various versions of the rand crate in order
to migrate away from their use of fuchsia-zircon over to the new
fuchsia-cprng.

Along the way, this makes the following additional changes:

* wires up fuchsia-cprng to point at the one in garnet
* removes fuchsia-zircon and fuchsia-async-macro (yay!)
* updates autocfg from 0.1.1 to 0.1.2
* updates libc from 0.2.46 to 0.2.48
* removes rand_core 0.2.2
* updates rand_core 0.3.0 to 0.3.1
* adds rand_core 0.4.0
* adds rand_jitter 0.1.2
* updates rand_os 0.1.0 to 0.1.2
* adds rdrand 0.4.0

These new crates have been approved in OSRB-133.

Change-Id: I35c0e622b72c6c0d0c516db8cf80c3388c397986
diff --git a/rustc_deps/BUILD.gn b/rustc_deps/BUILD.gn
index 1189971..9f995f5 100644
--- a/rustc_deps/BUILD.gn
+++ b/rustc_deps/BUILD.gn
@@ -9,32 +9,14 @@
 third_party_lock = "//third_party/rust-crates/rustc_deps/Cargo.lock"
 third_party_toml = "//third_party/rust-crates/rustc_deps/Cargo.toml"
 
-fuchsia_zircon_dir = "//garnet/public/rust/fuchsia-zircon"
-fuchsia_zircon_sys_dir = "${fuchsia_zircon_dir}/fuchsia-zircon-sys"
-fuchsia_async_macro_dir = "//garnet/public/rust/fuchsia-async-macro"
+fuchsia_cprng_dir = "//garnet/public/rust/fuchsia-cprng"
 
-fuchsia_zircon_src = exec_script(
+fuchsia_cprng_src = exec_script(
   "//build/rust/list_files_in_dir.py",
-  ["--dir", rebase_path("${fuchsia_zircon_dir}/src")],
+  ["--dir", rebase_path("${fuchsia_cprng_dir}/src")],
   "list lines",
   # lib.rs will contain `mod` statements for all top-level files
-  [rebase_path("${fuchsia_zircon_dir}/src/lib.rs")]
-)
-
-fuchsia_zircon_sys_src = exec_script(
-  "//build/rust/list_files_in_dir.py",
-  ["--dir", rebase_path("${fuchsia_zircon_sys_dir}/src")],
-  "list lines",
-  # lib.rs will contain `mod` statements for all top-level files
-  [rebase_path("${fuchsia_zircon_sys_dir}/src/lib.rs")]
-)
-
-fuchsia_async_macro_src = exec_script(
-  "//build/rust/list_files_in_dir.py",
-  ["--dir", rebase_path("${fuchsia_async_macro_dir}/src")],
-  "list lines",
-  # lib.rs will contain `mod` statements for all top-level files
-  [rebase_path("${fuchsia_async_macro_dir}/src/lib.rs")]
+  [rebase_path("${fuchsia_cprng_dir}/src/lib.rs")]
 )
 
 third_party_crate_names = exec_script(
@@ -58,9 +40,7 @@
   script = "//build/rust/compile_3p_crates.py"
 
   inputs = [ third_party_lock, third_party_toml ]
-  inputs += fuchsia_zircon_src
-  inputs += fuchsia_zircon_sys_src
-  inputs += fuchsia_async_macro_src
+  inputs += fuchsia_cprng_src
 
   out_dir = "${root_out_dir}/rust_third_party"
   out_deps_data = "${out_dir}/deps_data.json"
diff --git a/rustc_deps/Cargo.lock b/rustc_deps/Cargo.lock
index 74c3de4..22ca5e3 100644
--- a/rustc_deps/Cargo.lock
+++ b/rustc_deps/Cargo.lock
@@ -1,3 +1,5 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
 [[package]]
 name = "adler32"
 version = "1.0.3"
@@ -55,14 +57,14 @@
 version = "0.2.11"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
- "libc 0.2.46 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.48 (registry+https://github.com/rust-lang/crates.io-index)",
  "termion 1.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "winapi 0.3.6",
 ]
 
 [[package]]
 name = "autocfg"
-version = "0.1.1"
+version = "0.1.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [[package]]
@@ -70,10 +72,10 @@
 version = "0.3.13"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
- "autocfg 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "autocfg 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "backtrace-sys 0.1.28",
  "cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "libc 0.2.46 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.48 (registry+https://github.com/rust-lang/crates.io-index)",
  "rustc-demangle 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)",
  "winapi 0.3.6",
 ]
@@ -82,7 +84,7 @@
 name = "backtrace-sys"
 version = "0.1.28"
 dependencies = [
- "libc 0.2.46 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.48 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
@@ -167,7 +169,7 @@
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "cc 1.0.28 (registry+https://github.com/rust-lang/crates.io-index)",
- "libc 0.2.46 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.48 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
@@ -176,7 +178,7 @@
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "brotli-sys 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "libc 0.2.46 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.48 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
@@ -307,7 +309,7 @@
 dependencies = [
  "crossbeam-utils 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "parking_lot 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "rand 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)",
  "smallvec 0.6.7 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
@@ -443,7 +445,7 @@
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "libc 0.2.46 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.48 (registry+https://github.com/rust-lang/crates.io-index)",
  "redox_syscall 0.1.50 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
@@ -453,7 +455,7 @@
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "crc32fast 1.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "libc 0.2.46 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.48 (registry+https://github.com/rust-lang/crates.io-index)",
  "miniz_oxide_c_api 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
@@ -471,13 +473,8 @@
 ]
 
 [[package]]
-name = "fuchsia-async-macro"
-version = "0.1.0"
-dependencies = [
- "proc-macro2 0.4.24 (registry+https://github.com/rust-lang/crates.io-index)",
- "quote 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)",
- "syn 0.15.25 (registry+https://github.com/rust-lang/crates.io-index)",
-]
+name = "fuchsia-cprng"
+version = "0.1.1"
 
 [[package]]
 name = "fuchsia-third-party"
@@ -500,7 +497,6 @@
  "eui48 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
  "font-rs 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "fuchsia-async-macro 0.1.0",
  "futures-preview 0.3.0-alpha.12 (registry+https://github.com/rust-lang/crates.io-index)",
  "getopts 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)",
  "heck 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -511,7 +507,7 @@
  "itoa 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "json5 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "libc 0.2.46 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.48 (registry+https://github.com/rust-lang/crates.io-index)",
  "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "maplit 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "memchr 2.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -529,7 +525,7 @@
  "proc-macro2 0.4.24 (registry+https://github.com/rust-lang/crates.io-index)",
  "proptest 0.8.7 (registry+https://github.com/rust-lang/crates.io-index)",
  "quote 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)",
- "rand 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)",
  "regex 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "ring 0.14.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "rouille 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -564,19 +560,6 @@
 ]
 
 [[package]]
-name = "fuchsia-zircon"
-version = "0.3.3"
-dependencies = [
- "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
- "fuchsia-zircon-sys 0.3.3",
-]
-
-[[package]]
-name = "fuchsia-zircon-sys"
-version = "0.3.3"
-
-[[package]]
 name = "futures"
 version = "0.1.25"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -668,7 +651,7 @@
  "pin-utils 0.1.0-alpha.4 (registry+https://github.com/rust-lang/crates.io-index)",
  "proc-macro-hack 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)",
  "proc-macro-nested 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "rand 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "slab 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "tokio-io 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
@@ -785,7 +768,7 @@
 version = "0.1.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
- "libc 0.2.46 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.48 (registry+https://github.com/rust-lang/crates.io-index)",
  "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
@@ -833,7 +816,7 @@
 
 [[package]]
 name = "libc"
-version = "0.2.46"
+version = "0.2.48"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [[package]]
@@ -876,7 +859,7 @@
 version = "1.0.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
- "libc 0.2.46 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.48 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
@@ -885,7 +868,7 @@
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "libc 0.2.46 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.48 (registry+https://github.com/rust-lang/crates.io-index)",
  "version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
@@ -928,7 +911,7 @@
 dependencies = [
  "cc 1.0.28 (registry+https://github.com/rust-lang/crates.io-index)",
  "crc 1.8.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "libc 0.2.46 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.48 (registry+https://github.com/rust-lang/crates.io-index)",
  "miniz_oxide 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
@@ -943,7 +926,7 @@
  "mime 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "mime_guess 1.8.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "quick-error 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "rand 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "safemem 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "tempdir 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
  "twoway 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -955,7 +938,7 @@
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "libc 0.2.46 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.48 (registry+https://github.com/rust-lang/crates.io-index)",
  "winapi 0.3.6",
 ]
 
@@ -992,7 +975,7 @@
 dependencies = [
  "num-integer 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)",
  "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "rand 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
@@ -1040,7 +1023,7 @@
 version = "1.9.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
- "libc 0.2.46 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.48 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
@@ -1082,8 +1065,8 @@
 version = "0.3.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
- "libc 0.2.46 (registry+https://github.com/rust-lang/crates.io-index)",
- "rand 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.48 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "smallvec 0.6.7 (registry+https://github.com/rust-lang/crates.io-index)",
  "winapi 0.3.6",
@@ -1094,8 +1077,8 @@
 version = "0.4.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
- "libc 0.2.46 (registry+https://github.com/rust-lang/crates.io-index)",
- "rand 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.48 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)",
  "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "smallvec 0.6.7 (registry+https://github.com/rust-lang/crates.io-index)",
  "winapi 0.3.6",
@@ -1168,7 +1151,7 @@
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "phf_shared 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)",
- "rand 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
@@ -1240,7 +1223,7 @@
  "lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "quick-error 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "rand 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "regex-syntax 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)",
  "rusty-fork 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "tempfile 3.0.5 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -1270,48 +1253,50 @@
 
 [[package]]
 name = "rand"
-version = "0.3.22"
+version = "0.3.23"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
- "fuchsia-zircon 0.3.3",
- "libc 0.2.46 (registry+https://github.com/rust-lang/crates.io-index)",
- "rand 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.48 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "rand"
-version = "0.4.3"
+version = "0.4.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
- "fuchsia-zircon 0.3.3",
- "libc 0.2.46 (registry+https://github.com/rust-lang/crates.io-index)",
+ "fuchsia-cprng 0.1.1",
+ "libc 0.2.48 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "winapi 0.3.6",
 ]
 
 [[package]]
 name = "rand"
-version = "0.5.5"
+version = "0.5.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "fuchsia-zircon 0.3.3",
- "libc 0.2.46 (registry+https://github.com/rust-lang/crates.io-index)",
- "rand_core 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "fuchsia-cprng 0.1.1",
+ "libc 0.2.48 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "winapi 0.3.6",
 ]
 
 [[package]]
 name = "rand"
-version = "0.6.3"
+version = "0.6.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
- "autocfg 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "libc 0.2.46 (registry+https://github.com/rust-lang/crates.io-index)",
+ "autocfg 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.48 (registry+https://github.com/rust-lang/crates.io-index)",
  "rand_chacha 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "rand_core 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "rand_hc 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "rand_isaac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "rand_os 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand_jitter 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand_os 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "rand_pcg 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "rand_xorshift 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "winapi 0.3.6",
@@ -1322,21 +1307,21 @@
 version = "0.1.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
- "autocfg 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "rand_core 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "autocfg 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "rand_core"
-version = "0.2.2"
+version = "0.3.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
- "rand_core 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "rand_core"
-version = "0.3.0"
+version = "0.4.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [[package]]
@@ -1344,7 +1329,7 @@
 version = "0.1.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
- "rand_core 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
@@ -1352,18 +1337,29 @@
 version = "0.1.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
- "rand_core 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "rand_jitter"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "libc 0.2.48 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi 0.3.6",
 ]
 
 [[package]]
 name = "rand_os"
-version = "0.1.0"
+version = "0.1.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "fuchsia-zircon 0.3.3",
- "libc 0.2.46 (registry+https://github.com/rust-lang/crates.io-index)",
- "rand_core 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "fuchsia-cprng 0.1.1",
+ "libc 0.2.48 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "winapi 0.3.6",
 ]
 
@@ -1372,7 +1368,7 @@
 version = "0.1.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
- "rand_core 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
@@ -1381,7 +1377,15 @@
 version = "0.1.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
- "rand_core 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "rdrand"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
@@ -1432,7 +1436,7 @@
 dependencies = [
  "cc 1.0.28 (registry+https://github.com/rust-lang/crates.io-index)",
  "lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "libc 0.2.46 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.48 (registry+https://github.com/rust-lang/crates.io-index)",
  "untrusted 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
@@ -1448,7 +1452,7 @@
  "filetime 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)",
  "multipart 0.15.4 (registry+https://github.com/rust-lang/crates.io-index)",
  "num_cpus 1.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "rand 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "serde 1.0.84 (registry+https://github.com/rust-lang/crates.io-index)",
  "serde_derive 1.0.84 (registry+https://github.com/rust-lang/crates.io-index)",
  "serde_json 1.0.34 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -1465,8 +1469,8 @@
 version = "0.2.36"
 dependencies = [
  "gcc 0.3.55 (registry+https://github.com/rust-lang/crates.io-index)",
- "libc 0.2.46 (registry+https://github.com/rust-lang/crates.io-index)",
- "rand 0.3.22 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.48 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand 0.3.23 (registry+https://github.com/rust-lang/crates.io-index)",
  "rustc-serialize 0.3.24 (registry+https://github.com/rust-lang/crates.io-index)",
  "time 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
@@ -1729,7 +1733,7 @@
 version = "0.3.7"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
- "rand 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "remove_dir_all 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
@@ -1739,8 +1743,8 @@
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "libc 0.2.46 (registry+https://github.com/rust-lang/crates.io-index)",
- "rand 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.48 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)",
  "redox_syscall 0.1.50 (registry+https://github.com/rust-lang/crates.io-index)",
  "remove_dir_all 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "winapi 0.3.6",
@@ -1760,7 +1764,7 @@
 version = "1.5.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
- "libc 0.2.46 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.48 (registry+https://github.com/rust-lang/crates.io-index)",
  "redox_syscall 0.1.50 (registry+https://github.com/rust-lang/crates.io-index)",
  "redox_termios 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
@@ -1794,7 +1798,7 @@
 version = "0.1.41"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
- "libc 0.2.46 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.48 (registry+https://github.com/rust-lang/crates.io-index)",
  "redox_syscall 0.1.50 (registry+https://github.com/rust-lang/crates.io-index)",
  "winapi 0.3.6",
 ]
@@ -1948,7 +1952,7 @@
 version = "0.7.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
- "rand 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
@@ -1995,7 +1999,7 @@
 version = "0.1.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
- "libc 0.2.46 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.48 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
@@ -2085,7 +2089,7 @@
 version = "0.1.0"
 dependencies = [
  "lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "libc 0.2.46 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.48 (registry+https://github.com/rust-lang/crates.io-index)",
  "serde 1.0.84 (registry+https://github.com/rust-lang/crates.io-index)",
  "serde_derive 1.0.84 (registry+https://github.com/rust-lang/crates.io-index)",
  "time 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -2129,7 +2133,7 @@
 "checksum ascii 0.8.7 (registry+https://github.com/rust-lang/crates.io-index)" = "97be891acc47ca214468e09425d02cef3af2c94d0d82081cd02061f996802f14"
 "checksum atom 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "3c86699c3f02778ec07158376991c8f783dd1f2f95c579ffaf0738dc984b2fe2"
 "checksum atty 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "9a7d5b8723950951411ee34d271d99dddcc2035a16ab25310ea2c8cfd4369652"
-"checksum autocfg 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4e5f34df7a019573fb8bdc7e24a2bfebe51a2a1d6bfdbaeccedb3c41fc574727"
+"checksum autocfg 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "a6d640bee2da49f60a4068a7fae53acde8982514ab7bae8b8cea9e88cbcfd799"
 "checksum backtrace 0.3.13 (registry+https://github.com/rust-lang/crates.io-index)" = "b5b493b66e03090ebc4343eb02f94ff944e0cbc9ac6571491d170ba026741eb5"
 "checksum base64 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "621fc7ecb8008f86d7fb9b95356cd692ce9514b80a86d85b397f32a22da7b9e2"
 "checksum base64 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7c4a342b450b268e1be8036311e2c613d7f8a7ed31214dff1cc3b60852a3168d"
@@ -2207,7 +2211,7 @@
 "checksum jsonway 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "effcb749443c905fbaef49d214f8b1049c240e0adb7af9baa0e201e625e4f9de"
 "checksum lazy_static 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "76f033c7ad61445c5b347c7382dd1237847eb1bce590fe50365dcb33d546be73"
 "checksum lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a374c89b9db55895453a74c1e38861d9deec0b01b405a82516e9d5de4820dea1"
-"checksum libc 0.2.46 (registry+https://github.com/rust-lang/crates.io-index)" = "023a4cd09b2ff695f9734c1934145a315594b7986398496841c7031a5a1bbdbd"
+"checksum libc 0.2.48 (registry+https://github.com/rust-lang/crates.io-index)" = "e962c7641008ac010fa60a7dfdc1712449f29c44ef2d4702394aea943ee75047"
 "checksum lock_api 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "62ebf1391f6acad60e5c8b43706dde4582df75c06698ab44511d15016bc2442c"
 "checksum log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "e19e8d5c34a3e0e2223db8e060f9e8264aeeb5c5fc64a4ee9965c062211c024b"
 "checksum log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c84ec4b527950aa83a329754b01dbe3f58361d1c5efacd1f6d68c494d08a17c6"
@@ -2257,18 +2261,20 @@
 "checksum pulse 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "655612b6c8d96a8a02f331fe296cb4f925b68e87c1d195544675abca2d9b9af0"
 "checksum quick-error 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9274b940887ce9addde99c4eee6b5c44cc494b182b97e73dc8ffdcb3397fd3f0"
 "checksum quote 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)" = "53fa22a1994bd0f9372d7a816207d8a2677ad0325b073f5c5332760f0fb62b5c"
-"checksum rand 0.3.22 (registry+https://github.com/rust-lang/crates.io-index)" = "15a732abf9d20f0ad8eeb6f909bf6868722d9a06e1e50802b6a70351f40b4eb1"
-"checksum rand 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "8356f47b32624fef5b3301c1be97e5944ecdd595409cc5da11d05f211db6cfbd"
-"checksum rand 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)" = "e464cd887e869cddcae8792a4ee31d23c7edd516700695608f5b98c67ee0131c"
-"checksum rand 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)" = "b65e163105a6284f841bd23100a015895f54340e88a5ffc9ca7b8b33827cfce0"
+"checksum rand 0.3.23 (registry+https://github.com/rust-lang/crates.io-index)" = "64ac302d8f83c0c1974bf758f6b041c6c8ada916fbb44a609158ca8b064cc76c"
+"checksum rand 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "552840b97013b1a26992c11eac34bdd778e464601a4c2054b5f0bff7c6761293"
+"checksum rand 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c618c47cd3ebd209790115ab837de41425723956ad3ce2e6a7f09890947cacb9"
+"checksum rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)" = "6d71dacdc3c88c1fde3885a3be3fbab9f35724e6ce99467f7d9c5026132184ca"
 "checksum rand_chacha 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "556d3a1ca6600bfcbab7c7c91ccb085ac7fbbcd70e008a98742e7847f4f7bcef"
-"checksum rand_core 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "1961a422c4d189dfb50ffa9320bf1f2a9bd54ecb92792fb9477f99a1045f3372"
-"checksum rand_core 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0905b6b7079ec73b314d4c748701f6931eb79fd97c668caa3f1899b22b32c6db"
+"checksum rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b"
+"checksum rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d0e7a549d590831370895ab7ba4ea0c1b6b011d106b5ff2da6eee112615e6dc0"
 "checksum rand_hc 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7b40677c7be09ae76218dc623efbf7b18e34bced3f38883af07bb75630a21bc4"
 "checksum rand_isaac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ded997c9d5f13925be2a6fd7e66bf1872597f759fd9dd93513dd7e92e5a5ee08"
-"checksum rand_os 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "de5ac4de1c2973e1391dc305cb0fbf8788cb58068e98255439b7485a77022273"
+"checksum rand_jitter 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "080723c6145e37503a2224f801f252e14ac5531cb450f4502698542d188cb3c0"
+"checksum rand_os 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "b7c690732391ae0abafced5015ffb53656abfaec61b342290e5eb56b286a679d"
 "checksum rand_pcg 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "086bd09a33c7044e56bb44d5bdde5a60e7f119a9e95b0775f545de759a32fe05"
 "checksum rand_xorshift 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cbf7e9e623549b0e21f6e97cf8ecf247c1a8fd2e8a992ae265314300b2455d5c"
+"checksum rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2"
 "checksum redox_syscall 0.1.50 (registry+https://github.com/rust-lang/crates.io-index)" = "52ee9a534dc1301776eff45b4fa92d2c39b1d8c3d3357e6eb593e0d795506fc2"
 "checksum redox_termios 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7e891cfe48e9100a70a3b6eb652fef28920c117d366339687bd5576160db0f76"
 "checksum regex 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "37e7cbbd370869ce2e8dff25c7018702d10b21a20ef7135316f8daecd6c25b7f"
diff --git a/rustc_deps/Cargo.toml b/rustc_deps/Cargo.toml
index 4104879..3666b0c 100644
--- a/rustc_deps/Cargo.toml
+++ b/rustc_deps/Cargo.toml
@@ -25,7 +25,6 @@
 eui48 = { version = "0.4.6", features = ["serde", "disp_hexstring"] }
 failure = "0.1.1"
 font-rs = "0.1.3"
-fuchsia-async-macro = "0.1"
 futures-preview = { version = "=0.3.0-alpha.12", features = ["io-compat"] }
 getopts = "0.2"
 heck = "0.3.1"
@@ -51,7 +50,7 @@
 pest = "2.1"
 pest_derive = "2.1"
 proptest = "0.8.7"
-rand = "0.5"
+rand = "0.6"
 ring = "0.14"
 regex = "1.0.6"
 rouille = "3.0.0"
@@ -97,9 +96,7 @@
 
 [patch.crates-io]
 backtrace-sys = { path = "tiny_mirrors/backtrace-sys" }
-fuchsia-async-macro = { path = "../../../garnet/public/rust/fuchsia-async-macro" }
-fuchsia-zircon = { path = "../../../garnet/public/rust/fuchsia-zircon" }
-fuchsia-zircon-sys = { path = "../../../garnet/public/rust/fuchsia-zircon/fuchsia-zircon-sys" }
+fuchsia-cprng = { path = "../../../garnet/public/rust/fuchsia-cprng" }
 rust-crypto = { path = "../../rust-mirrors/rust-crypto" }
 xi-core-lib = { path = "../../rust-mirrors/xi-editor/rust/core-lib" }
 xi-rope = { path = "../../rust-mirrors/xi-editor/rust/rope" }
diff --git a/rustc_deps/vendor/autocfg/.cargo-checksum.json b/rustc_deps/vendor/autocfg/.cargo-checksum.json
index 301f0d1..30e2d81 100644
--- a/rustc_deps/vendor/autocfg/.cargo-checksum.json
+++ b/rustc_deps/vendor/autocfg/.cargo-checksum.json
@@ -1 +1 @@
-{"files":{"Cargo.toml":"45d83bf70a43c91ae7b441e0bb9e6be43f6f10e96f59eee58855a92beeeb0bd8","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"27995d58ad5c1145c1a8cd86244ce844886958a35eb2b78c6b772748669999ac","README.md":"9deb6c4ce1011130eb2d2e32c47a9d3e82237c45a4e5a4f7ef0a7bb687b0e345","examples/integers.rs":"589ff4271566dfa322becddf3e2c7b592e6e0bc97b02892ce75619b7e452e930","examples/paths.rs":"1b30e466b824ce8df7ad0a55334424131d9d2573d6cf9f7d5d50c09c8901d526","examples/traits.rs":"cbee6a3e1f7db60b02ae25b714926517144a77cb492021f492774cf0e1865a9e","examples/versions.rs":"38535e6d9f5bfae0de474a3db79a40e8f5da8ba9334c5ff4c363de9bc99d4d12","src/error.rs":"12de7dafea4a35d1dc2f0fa79bfa038386bbbea72bf083979f4ddf227999eeda","src/lib.rs":"b4ae89dfb38d979badba9b3e6b8e170be53a210e3d3cd566746a9bc2aec20a23","src/tests.rs":"34bdceeffdbdd7f2535a6ed8272482b17325dba044c91bb96f3f8caeec58a83d","src/version.rs":"165324950f2195aaf068c47a4f2f0992b2bf18d8b7f4f17b6b264767523c0e5d"},"package":"4e5f34df7a019573fb8bdc7e24a2bfebe51a2a1d6bfdbaeccedb3c41fc574727"}
\ No newline at end of file
+{"files":{"Cargo.toml":"59b541962c15f51087a11d7296e3b69ec6d9b8a8e9e8db949e7629ea28183564","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"27995d58ad5c1145c1a8cd86244ce844886958a35eb2b78c6b772748669999ac","README.md":"d0e320dccace525a2cbcf3bc5d43ac9b7b61ee86b9c9713bf68993c3ad789d0a","examples/integers.rs":"589ff4271566dfa322becddf3e2c7b592e6e0bc97b02892ce75619b7e452e930","examples/paths.rs":"1b30e466b824ce8df7ad0a55334424131d9d2573d6cf9f7d5d50c09c8901d526","examples/traits.rs":"cbee6a3e1f7db60b02ae25b714926517144a77cb492021f492774cf0e1865a9e","examples/versions.rs":"38535e6d9f5bfae0de474a3db79a40e8f5da8ba9334c5ff4c363de9bc99d4d12","src/error.rs":"12de7dafea4a35d1dc2f0fa79bfa038386bbbea72bf083979f4ddf227999eeda","src/lib.rs":"7392068683dc86107bcf8073c81ff8fb7026f5fb98a355a4d47301c5946eeccb","src/tests.rs":"34bdceeffdbdd7f2535a6ed8272482b17325dba044c91bb96f3f8caeec58a83d","src/version.rs":"165324950f2195aaf068c47a4f2f0992b2bf18d8b7f4f17b6b264767523c0e5d"},"package":"a6d640bee2da49f60a4068a7fae53acde8982514ab7bae8b8cea9e88cbcfd799"}
\ No newline at end of file
diff --git a/rustc_deps/vendor/autocfg/Cargo.toml b/rustc_deps/vendor/autocfg/Cargo.toml
index 6650188..cf59906 100644
--- a/rustc_deps/vendor/autocfg/Cargo.toml
+++ b/rustc_deps/vendor/autocfg/Cargo.toml
@@ -12,7 +12,7 @@
 
 [package]
 name = "autocfg"
-version = "0.1.1"
+version = "0.1.2"
 authors = ["Josh Stone <cuviper@gmail.com>"]
 description = "Automatic cfg for Rust compiler features"
 readme = "README.md"
diff --git a/rustc_deps/vendor/autocfg/README.md b/rustc_deps/vendor/autocfg/README.md
index 3442505..7295b3f 100644
--- a/rustc_deps/vendor/autocfg/README.md
+++ b/rustc_deps/vendor/autocfg/README.md
@@ -31,7 +31,7 @@
     ac.emit_has_type("i128");
 
     // (optional) We don't need to rerun for anything external.
-    println!("cargo:rerun-if-changed=build.rs");
+    autocfg::rerun_path(file!());
 }
 ```
 
@@ -41,6 +41,13 @@
 should only be used when the compiler supports it.
 
 
+## Release Notes
+
+- 0.1.2 (2018-01-16)
+  - Add `rerun_env(ENV)` to print `cargo:rerun-if-env-changed=ENV`
+  - Add `rerun_path(PATH)` to print `cargo:rerun-if-changed=PATH`
+
+
 ## Minimum Rust version policy
 
 This crate's minimum supported `rustc` version is `1.0.0`.  Compatibility is
diff --git a/rustc_deps/vendor/autocfg/src/lib.rs b/rustc_deps/vendor/autocfg/src/lib.rs
index 760648b..6d37292 100644
--- a/rustc_deps/vendor/autocfg/src/lib.rs
+++ b/rustc_deps/vendor/autocfg/src/lib.rs
@@ -25,7 +25,7 @@
 //!     ac.emit_has_type("i128");
 //!
 //!     // (optional) We don't need to rerun for anything external.
-//!     println!("cargo:rerun-if-changed=build.rs");
+//!     autocfg::rerun_path(file!());
 //! }
 //! ```
 //!
@@ -63,10 +63,35 @@
 }
 
 /// Writes a config flag for rustc on standard out.
+///
+/// This looks like: `cargo:rustc-cfg=CFG`
+///
+/// Cargo will use this in arguments to rustc, like `--cfg CFG`.
 pub fn emit(cfg: &str) {
     println!("cargo:rustc-cfg={}", cfg);
 }
 
+/// Writes a line telling Cargo to rerun the build script if `path` changes.
+///
+/// This looks like: `cargo:rerun-if-changed=PATH`
+///
+/// This requires at least cargo 0.7.0, corresponding to rustc 1.6.0.  Earlier
+/// versions of cargo will simply ignore the directive.
+pub fn rerun_path(path: &str) {
+    println!("cargo:rerun-if-changed={}", path);
+}
+
+/// Writes a line telling Cargo to rerun the build script if the environment
+/// variable `var` changes.
+///
+/// This looks like: `cargo:rerun-if-env-changed=VAR`
+///
+/// This requires at least cargo 0.21.0, corresponding to rustc 1.20.0.  Earlier
+/// versions of cargo will simply ignore the directive.
+pub fn rerun_env(var: &str) {
+    println!("cargo:rerun-if-env-changed={}", var);
+}
+
 /// Create a new `AutoCfg` instance.
 ///
 /// # Panics
diff --git a/rustc_deps/vendor/libc/.cargo-checksum.json b/rustc_deps/vendor/libc/.cargo-checksum.json
index b580eeb..e959eb6 100644
--- a/rustc_deps/vendor/libc/.cargo-checksum.json
+++ b/rustc_deps/vendor/libc/.cargo-checksum.json
@@ -1 +1 @@
-{"files":{"Cargo.toml":"e1bbf88a55a1ba674f5192fe1585b57a51751ee6c5aa7edeb87df8027c3bb912","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"6485b8ed310d3f0340bf1ad1f47645069ce4069dcc6bb46c7d5c6faf41de1fdb","README.md":"40ddea9181e5374cf535aae33ad4ace80bd9b1beea8f881ff8d2b777da9489b2","build.rs":"2d1cbe87e0478de12a15a230d7ef0997020ba845b5b7d221d74cd2ce3fe0e720","src/cloudabi/aarch64.rs":"b8550bf1fd7344972aa4db29441486f39f31482d0327534981dbb75959c29114","src/cloudabi/arm.rs":"c197e2781c2839808bd6fcef219a29705b27b992d3ef920e9cf6ac96e2022bbf","src/cloudabi/mod.rs":"640375751825b8d4adf4fb089a53c4d883f265f96b07daf06f2dcf3acf6639c9","src/cloudabi/x86.rs":"33eb97f272d2201f3838ae74d444583c7de8f67856852ca375293b20bbd05636","src/cloudabi/x86_64.rs":"400d85d4fe39e26cf2e6ece9ee31c75fe9e88c4bcf4d836ca9f765c05c9c5be3","src/dox.rs":"b4b96dcba47797a6160c07f29982dd15d48fd2813d7d1000484bd9adc4a89de1","src/fuchsia/aarch64.rs":"40dce617877e606e92353491e1913711b1ecfa510bb983156f4a8460f490419e","src/fuchsia/mod.rs":"784dee21605f00a41d7cae1fc3d782646a84515a687a4952700eae51cc3840f0","src/fuchsia/x86_64.rs":"b4a3eff94dcf1ffe41e6500468ca2cff0e97ddbcc75fe079b6ac7adb1e493f56","src/lib.rs":"d456d34fc58c8d194f8f24201b4021860f61c5f125904bb8dcc954d1f813f6b7","src/macros.rs":"29d61c13523328c4742a7290dbb7d718ce198740824592e029199e9df5429b20","src/redox/mod.rs":"87cb35a988be84d45e79206f7cb5d098e8e7c5a1825cfcd0bd663453dedc3103","src/redox/net.rs":"f2e1922883f208cb46c00744da4a68feccfbec576c6981978ad404e46f818c8b","src/sgx.rs":"18d33a470d06c15b00be5a3bf45b6e51da6104ae7437f50c0eccbd3b79994389","src/switch.rs":"00365ed196519b260fc99a32f02d60b3fb1aaf0484654b19fec8c25bc1687420","src/unix/bsd/apple/b32.rs":"da60c99ee3d773f9c0767b93ccf18b67ad67576e2c58e2e86d05b23c23fd989a","src/unix/bsd/apple/b64.rs":"0cc15406c3a91abde65b28c7783ccab7801474ecc51c78dbd1d7332d4b834390","src/unix/bsd/apple/mod.rs":"b0e2d1f7fdb71d7a02bc5994c66a5ae660955227a0c0f808172a30b38fd40299","src/unix/bsd/freebsdlike/dragonfly/mod.rs":"6c69319675328d4d16939c9c2aba3fb8ca9381a8b390d18d766949307090304b","src/unix/bsd/freebsdlike/freebsd/aarch64.rs":"97132e2097411034271b8c927ecc94a208a361564680972a6c82998bd30a9826","src/unix/bsd/freebsdlike/freebsd/mod.rs":"6bbb3c3cf0753f32a2e61ac0f011a6c5e870a0814a6ed4eb9bb9dcdc58a9dca3","src/unix/bsd/freebsdlike/freebsd/x86.rs":"54311d3ebf2bb091ab22361e377e6ef9224aec2ecfe459fbfcedde4932db9c58","src/unix/bsd/freebsdlike/freebsd/x86_64.rs":"97132e2097411034271b8c927ecc94a208a361564680972a6c82998bd30a9826","src/unix/bsd/freebsdlike/mod.rs":"596def64669e2f27cffebca8e5c682ee7d576f84f8f99771c27e86ce8e818221","src/unix/bsd/mod.rs":"0c846b3a2c9390dfe090603f1ad643b107cc7e7605866c5399aa81dfea4e74bd","src/unix/bsd/netbsdlike/mod.rs":"9f55f35f8e4e26c7c63eaf67ddda0e40cc2abbabc2a68750809162e6f80144f1","src/unix/bsd/netbsdlike/netbsd/aarch64.rs":"f455848cd03cb80897776f2355dbd14bbb3aa88b1aa6aec22122ec47cdbd0f20","src/unix/bsd/netbsdlike/netbsd/arm.rs":"4c9eac982c385165f475ef3a80770fd634c6dde8fb400b3cb7e08c9bb7498af6","src/unix/bsd/netbsdlike/netbsd/mod.rs":"88617ada3bc740c5262926b9c45d7f51120d358522f051f0afdf7465edd13c29","src/unix/bsd/netbsdlike/netbsd/powerpc.rs":"183818c62dff72db6ee1d329d90ad8727628775ed5cd823c8485c6769003c91e","src/unix/bsd/netbsdlike/netbsd/sparc64.rs":"4db043327fb2615af2fb0f999d162310bea2294e7d050806e19a46b083561f16","src/unix/bsd/netbsdlike/netbsd/x86.rs":"979c4cbacbde37b9053f2c9df4b8f87d37b255436ef4a383e1e5f40ee21180d6","src/unix/bsd/netbsdlike/netbsd/x86_64.rs":"741353a1c6451efb0c7c7c486fd2cb54e3d36fd1c3dd280f6432d8858b0a5356","src/unix/bsd/netbsdlike/openbsdlike/bitrig/mod.rs":"4d2ad2e885d83ad3134add61580f49a8e58cb03284ae328273a9e2e104a4d084","src/unix/bsd/netbsdlike/openbsdlike/bitrig/x86.rs":"bd251a102bed65d5cb3459275f6ec3310fe5803ff4c9651212115548f86256d0","src/unix/bsd/netbsdlike/openbsdlike/bitrig/x86_64.rs":"6e6f15e81597d85d83ca0eeb154e4f8b8e7f9cbb6a9cfa176601f78642ef94f9","src/unix/bsd/netbsdlike/openbsdlike/mod.rs":"6320b7bc7283dbc2a07cfb8b5a793c0153535601d050f33c1ff5e4a5cc57c2be","src/unix/bsd/netbsdlike/openbsdlike/openbsd/aarch64.rs":"820092e397c7ec259cd2de8f2444083a8e57071c02d73d678701dfa7807726e9","src/unix/bsd/netbsdlike/openbsdlike/openbsd/mod.rs":"6adc0dcb1b358ef91bbeb5512e19ba6f40adc77b7d259cb11641a69426fc5ea2","src/unix/bsd/netbsdlike/openbsdlike/openbsd/x86.rs":"44b7ea81cf363777b29935da175e702cbf45ed78f7498ae57faf44aa32335085","src/unix/bsd/netbsdlike/openbsdlike/openbsd/x86_64.rs":"97956c3a53aa07a2edf8865252f980dade0d34e930adca0e870e7344d7e2b0bb","src/unix/haiku/b32.rs":"69ae47fc52c6880e85416b4744500d5655c9ec6131cb737f3b649fceaadce15a","src/unix/haiku/b64.rs":"73e64db09275a8da8d50a13cce2cfa2b136036ddf3a930d2939f337fc995900b","src/unix/haiku/mod.rs":"b00fa310b6d835cb613a02101c7b1a72c636faec316586587cb63aebdcb9de8f","src/unix/hermit/aarch64.rs":"86048676e335944c37a63d0083d0f368ae10ceccefeed9debb3bbe08777fc682","src/unix/hermit/mod.rs":"248c0b0abaa7d56a7dc3293e67a0ce70a4ef8c83638bda8aa222ad8bb0ef6801","src/unix/hermit/x86_64.rs":"ab832b7524e5fb15c49ff7431165ab1a37dc4667ae0b58e8306f4c539bfa110c","src/unix/mod.rs":"c5f3c6d74ac8e8ef83374b6115bab7c6e57297336a7635aa4c47462649b00dfb","src/unix/newlib/aarch64/mod.rs":"c408a990f22fb4292a824f38367e9b517e6e6f8623328397ee631cc88b3d1f7d","src/unix/newlib/arm/mod.rs":"2b6dba2e697ab9b4f4bc4dd5f28057249e9b596d1cb395a9322ec87605c4a5c4","src/unix/newlib/mod.rs":"eea5f1eb720184d9a00be966e4161fddb3733362fc349182e85b1599ba4e825f","src/unix/notbsd/android/b32/arm.rs":"3625a32c7e58cfe683a53486fbe3d42d4e28f00bea31e19cb46ed2bb0b6a140b","src/unix/notbsd/android/b32/mod.rs":"2fbe398c1fb5251dda6213741a193e50aae4622807cb255d1dd2e82b536f0c65","src/unix/notbsd/android/b32/x86.rs":"ae2b7f1d6278caddc007749bb1d09ca33f7593478a0fd7fe98b457dae86c7814","src/unix/notbsd/android/b64/aarch64.rs":"63d65629d79371814910f691672ef593d20244ee09be26f1ebe07ee6212d0163","src/unix/notbsd/android/b64/mod.rs":"90d4f6b063fd4de42fd302cbc9d9902fd99ac1d71dc48cb8bc6ad7b4c902e481","src/unix/notbsd/android/b64/x86_64.rs":"5547aef8dcbaa5a932559f34606fd8d89f6c9c15173d2b1412c12d39b3c1045f","src/unix/notbsd/android/mod.rs":"19013f41ac8ccac034eb48777a4041d69342edb9ca25d4e0bb9c5938f62eef3e","src/unix/notbsd/emscripten.rs":"9ed47a0a5020c8f72d9496f87ef0da669c1ed2b85980013100c466f18cd8a4c5","src/unix/notbsd/linux/mips/mips32.rs":"a483ddfd10765b7d5090dc21686eee8842649cd21236828a42d634114885f5f9","src/unix/notbsd/linux/mips/mips64.rs":"9fff696e3943cf206b549d1ae13fa361828e9a8454e2d5730eeaa1c172ff370d","src/unix/notbsd/linux/mips/mod.rs":"d18a40011e9090a4a2a1f27e5bd96eb2503ac352f4809648e15841083d7f3a68","src/unix/notbsd/linux/mod.rs":"d84e95d36f9477fa1aa694bf18a919ba20e65aa71539c3f3dc06e8f92acee521","src/unix/notbsd/linux/musl/b32/arm.rs":"fdf170e03812072785ec531f1ae810d0c4feb9b29d0c316681b9f7affe1262c0","src/unix/notbsd/linux/musl/b32/mips.rs":"afa4981d93f29b3fb0083a73ce1323f7dce1392f90d5cf1966b1fae10d510033","src/unix/notbsd/linux/musl/b32/mod.rs":"540928f168f145c136f9dd729ffa12b9d1838d9fe664fc642365d17d7fae648f","src/unix/notbsd/linux/musl/b32/powerpc.rs":"16c615770a96f155540511f58b5a8070c9c7a43e12bdfed83996690e7558bcb5","src/unix/notbsd/linux/musl/b32/x86.rs":"3abf1610c68c37f407cdd0f93563c3542c024219e0e8c9888266a6ee014e0c87","src/unix/notbsd/linux/musl/b64/aarch64.rs":"d98643408c2837387988f78adc95c90ad21196a6f8f879e3d33d7e8ccf612640","src/unix/notbsd/linux/musl/b64/mod.rs":"d9285cd705e2e92552a08c9aa69b810e7e1bd0e9da6edf069c678af285579661","src/unix/notbsd/linux/musl/b64/powerpc64.rs":"544d8a7f6d6d84143df8a4c3537c9a3a36bf3d338d7a1c15689b94492498d8d7","src/unix/notbsd/linux/musl/b64/x86_64.rs":"25340999290a63d564ec149532c905f59c312ec369f8806d6b15df66fa1b8857","src/unix/notbsd/linux/musl/mod.rs":"4e582af62a11e8a5235ccbeabe5b1003fc17705e606c1ed9b21b931a470681fc","src/unix/notbsd/linux/other/b32/arm.rs":"d9892f7350b2978335f734f1cd2d7fed60f0f2e66aa05bee3f69549c031f8b14","src/unix/notbsd/linux/other/b32/mod.rs":"26211878c6481861e11393625620edaa0700cac41f55f0118c0f0bd42c1b7520","src/unix/notbsd/linux/other/b32/powerpc.rs":"253fcd2f9978525285be1903cc08f3fec2dc3b12d1660a33e2995b4f6b810d1c","src/unix/notbsd/linux/other/b32/x86.rs":"49376e3ed0f3ff95c230ac20751911fe3c608dfe15c7c118b069fd7a954d8db9","src/unix/notbsd/linux/other/b64/aarch64.rs":"1124ab5e974718b94fa40ae0f1772fb1c537910ef3e018b7c6c94a38b83dd742","src/unix/notbsd/linux/other/b64/mod.rs":"63e1a3fdf5f4d1b9820934ab344c91aed5e458e7e05908535d2e942d51a08bf8","src/unix/notbsd/linux/other/b64/not_x32.rs":"fa8636fb93eab230ed53bdec0a06f5b81d6d982cc0800103563c8c1eefcdb2d9","src/unix/notbsd/linux/other/b64/powerpc64.rs":"a771d982ed8a9458e1f2f039f959b5075b22443159875ba5612eebba96661c24","src/unix/notbsd/linux/other/b64/sparc64.rs":"0caffe5924886f3aed187531dfe78189b3df40adb96782ec4b471647ff83e9b1","src/unix/notbsd/linux/other/b64/x32.rs":"06a26c5120ced30fc015c220799b67c4401be2f13fc6c7361bebd3d37ff4982d","src/unix/notbsd/linux/other/b64/x86_64.rs":"70d0cec088630502128c1c28ffef9dcc0fd9c0644f6a71b1325961d075625226","src/unix/notbsd/linux/other/mod.rs":"fe76beac87fc549b076078a0fa3e2ecd4c13b0e6e4fcb34a89e16c6584f5259b","src/unix/notbsd/linux/s390x.rs":"9e990574dfc22b6eb91bcc7c6f8297f9ad42f9183efb366a818be88180a3fac3","src/unix/notbsd/mod.rs":"a0fdecac118b70fb670f0fcccaa7f826440873448a96dd557fb1fe52cf391e89","src/unix/solaris/mod.rs":"7950a26f3eb0b7bc8e71f524cc2e05832b759fe2ce12a58e0c1957e0ec1286dc","src/unix/uclibc/mips/mips32.rs":"9739c5fb47f389a0394ef08ee30da97a3de0a1300020731a8cc0a033616011b2","src/unix/uclibc/mips/mips64.rs":"230583280bbc7b3c7fcdb61244f51fa1af5944ca127c7cf83c598fe2313713d0","src/unix/uclibc/mips/mod.rs":"2d76e6cfeb2b7f7c59231a6e099f1aed811a45659e62153aaf00c220b9488a9d","src/unix/uclibc/mod.rs":"521818507cef958376edfd8401c35db7ee1c51ee3cf106ad962002104a184cf5","src/unix/uclibc/x86_64/l4re.rs":"68fd3a833fd1f7caf784a084224f384bdbdfb8b5a14ef94c4f5155409afb3439","src/unix/uclibc/x86_64/mod.rs":"419182836aedd426a5c9e6b8667058adf86ac8f43af73ce8d00c503f8ff8f414","src/unix/uclibc/x86_64/other.rs":"f03b47842896f2f3ae6f8ebdcbcf0276454f880349d9cf00e3d304f8136893c5","src/windows/gnu.rs":"4d9033162cc6f7d245256c7b165c1ec18a741771fd9b99a55b421e8d14978599","src/windows/mod.rs":"7d74b12f71de86ee517a9cd93b1b38d0551646db0eaf526048abcbdd4bbeb250","src/windows/msvc.rs":"8f46cf66883c794175609a3b2bafaa094d0ba63eb6720ef1b84b175603f1074f"},"package":"023a4cd09b2ff695f9734c1934145a315594b7986398496841c7031a5a1bbdbd"}
\ No newline at end of file
+{"files":{"Cargo.toml":"45864ebcb9862ada00879a5633c119531538c543a92ad01eadbd1ea1358f2569","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"6485b8ed310d3f0340bf1ad1f47645069ce4069dcc6bb46c7d5c6faf41de1fdb","README.md":"40ddea9181e5374cf535aae33ad4ace80bd9b1beea8f881ff8d2b777da9489b2","build.rs":"2d1cbe87e0478de12a15a230d7ef0997020ba845b5b7d221d74cd2ce3fe0e720","src/cloudabi/aarch64.rs":"b8550bf1fd7344972aa4db29441486f39f31482d0327534981dbb75959c29114","src/cloudabi/arm.rs":"c197e2781c2839808bd6fcef219a29705b27b992d3ef920e9cf6ac96e2022bbf","src/cloudabi/mod.rs":"640375751825b8d4adf4fb089a53c4d883f265f96b07daf06f2dcf3acf6639c9","src/cloudabi/x86.rs":"33eb97f272d2201f3838ae74d444583c7de8f67856852ca375293b20bbd05636","src/cloudabi/x86_64.rs":"400d85d4fe39e26cf2e6ece9ee31c75fe9e88c4bcf4d836ca9f765c05c9c5be3","src/dox.rs":"b4b96dcba47797a6160c07f29982dd15d48fd2813d7d1000484bd9adc4a89de1","src/fuchsia/aarch64.rs":"40dce617877e606e92353491e1913711b1ecfa510bb983156f4a8460f490419e","src/fuchsia/mod.rs":"784dee21605f00a41d7cae1fc3d782646a84515a687a4952700eae51cc3840f0","src/fuchsia/x86_64.rs":"b4a3eff94dcf1ffe41e6500468ca2cff0e97ddbcc75fe079b6ac7adb1e493f56","src/lib.rs":"d456d34fc58c8d194f8f24201b4021860f61c5f125904bb8dcc954d1f813f6b7","src/macros.rs":"29d61c13523328c4742a7290dbb7d718ce198740824592e029199e9df5429b20","src/redox/mod.rs":"79766cef9ccfaed37052ebbe0a8f2951775b6d984fbce2c1a24fb08abf7761a3","src/redox/net.rs":"f2e1922883f208cb46c00744da4a68feccfbec576c6981978ad404e46f818c8b","src/sgx.rs":"18d33a470d06c15b00be5a3bf45b6e51da6104ae7437f50c0eccbd3b79994389","src/switch.rs":"00365ed196519b260fc99a32f02d60b3fb1aaf0484654b19fec8c25bc1687420","src/unix/bsd/apple/b32.rs":"da60c99ee3d773f9c0767b93ccf18b67ad67576e2c58e2e86d05b23c23fd989a","src/unix/bsd/apple/b64.rs":"0cc15406c3a91abde65b28c7783ccab7801474ecc51c78dbd1d7332d4b834390","src/unix/bsd/apple/mod.rs":"6a9448db8edd5713c190ba736edf3f3d4acde05acbade320702063b398f245ac","src/unix/bsd/freebsdlike/dragonfly/mod.rs":"d9a071f5a007fac66339966345610fcab03625becbe642b819de6cf0932e95c9","src/unix/bsd/freebsdlike/freebsd/aarch64.rs":"434f20ea1318d98c2000c514e735194c7268a9be24ef3933755c27911606a4a6","src/unix/bsd/freebsdlike/freebsd/mod.rs":"629cc839712a41f347bd2e136445b432a621977f60da10f16726b7149596e813","src/unix/bsd/freebsdlike/freebsd/x86.rs":"3c58071ada4ab97c1fb94168f09c97adc9f3b32613df71c671fe8fbed396f236","src/unix/bsd/freebsdlike/freebsd/x86_64.rs":"e9b1218fe3d70b7dcf112fbc0e96e54072ef5dec1fb94052e094b16bbce7272a","src/unix/bsd/freebsdlike/mod.rs":"e55a99a7f56c074f8e9f0dcede35c9b502675d730010c2e52a756ded3cbcf2ee","src/unix/bsd/mod.rs":"aa5ddeb33bdefa44b99b1f5bf1df2d4a5c2a5137be1c6905b23345c425e632c0","src/unix/bsd/netbsdlike/mod.rs":"5049783cf1780e13bf45c6ba20e8e8105dfa39424259434090568667d67130d5","src/unix/bsd/netbsdlike/netbsd/aarch64.rs":"efc43174854fc00135008b4cbec2535bbcce1020b4face6d44ed74343c3bef87","src/unix/bsd/netbsdlike/netbsd/arm.rs":"2bfa308308d5afa5baf9b8c1fe2faf07cc20005355e580c505000eae4e3ebda7","src/unix/bsd/netbsdlike/netbsd/mod.rs":"8a796dc7a458233f0ac03a6056e48f11ac93e9d14801309a2526456753ed0d4e","src/unix/bsd/netbsdlike/netbsd/powerpc.rs":"aa1d3faeabce2b90a9071efbb936fd6df0c7376dbef06c8fde7aa2fd2260f6e9","src/unix/bsd/netbsdlike/netbsd/sparc64.rs":"9489f4b3e4566f43bb12dfb92238960613dac7f6a45cc13068a8d152b902d7d9","src/unix/bsd/netbsdlike/netbsd/x86.rs":"c1e45fecce9754a4abca9db6bce2a892c082d58aab79eae3ff44082e9b1ded10","src/unix/bsd/netbsdlike/netbsd/x86_64.rs":"d21a406568314bf8f61cec789c1d691720b3dd315967a0692cdddae3a1954f76","src/unix/bsd/netbsdlike/openbsdlike/bitrig/mod.rs":"4d2ad2e885d83ad3134add61580f49a8e58cb03284ae328273a9e2e104a4d084","src/unix/bsd/netbsdlike/openbsdlike/bitrig/x86.rs":"bd251a102bed65d5cb3459275f6ec3310fe5803ff4c9651212115548f86256d0","src/unix/bsd/netbsdlike/openbsdlike/bitrig/x86_64.rs":"6e6f15e81597d85d83ca0eeb154e4f8b8e7f9cbb6a9cfa176601f78642ef94f9","src/unix/bsd/netbsdlike/openbsdlike/mod.rs":"6320b7bc7283dbc2a07cfb8b5a793c0153535601d050f33c1ff5e4a5cc57c2be","src/unix/bsd/netbsdlike/openbsdlike/openbsd/aarch64.rs":"41e35e7549d3dfb625350ce9f6953e7d99c6e8ee849e171c2f7dc21b20981b00","src/unix/bsd/netbsdlike/openbsdlike/openbsd/mod.rs":"6adc0dcb1b358ef91bbeb5512e19ba6f40adc77b7d259cb11641a69426fc5ea2","src/unix/bsd/netbsdlike/openbsdlike/openbsd/x86.rs":"13e234c6767689ee66971f56188dd85649fcf004fc1cb3551275663882e21205","src/unix/bsd/netbsdlike/openbsdlike/openbsd/x86_64.rs":"30ca8b311a4e2b54173f4517325da7ad6ddbf565e33c6a796509f9a3d7dabd9a","src/unix/haiku/b32.rs":"69ae47fc52c6880e85416b4744500d5655c9ec6131cb737f3b649fceaadce15a","src/unix/haiku/b64.rs":"73e64db09275a8da8d50a13cce2cfa2b136036ddf3a930d2939f337fc995900b","src/unix/haiku/mod.rs":"3ea8713d3603c9263b79c6fddf68e0d947a7b4aabe5435263f0971718c1b5ba1","src/unix/hermit/aarch64.rs":"86048676e335944c37a63d0083d0f368ae10ceccefeed9debb3bbe08777fc682","src/unix/hermit/mod.rs":"bde2a474a82d10d8954240d9e4c4ddf89349cbadf4ae2776bfda624004ea98be","src/unix/hermit/x86_64.rs":"ab832b7524e5fb15c49ff7431165ab1a37dc4667ae0b58e8306f4c539bfa110c","src/unix/mod.rs":"8234ffc53b36e4f4769f5cf8151724ce9e0f81a0da83636a8c2d4fa8cdba0232","src/unix/newlib/aarch64/mod.rs":"c408a990f22fb4292a824f38367e9b517e6e6f8623328397ee631cc88b3d1f7d","src/unix/newlib/arm/mod.rs":"2b6dba2e697ab9b4f4bc4dd5f28057249e9b596d1cb395a9322ec87605c4a5c4","src/unix/newlib/mod.rs":"986e8b2e6530ed54d0e44adc36c0d9aca8c56b564cf805e948b6c8041e09e298","src/unix/notbsd/android/b32/arm.rs":"3625a32c7e58cfe683a53486fbe3d42d4e28f00bea31e19cb46ed2bb0b6a140b","src/unix/notbsd/android/b32/mod.rs":"2fbe398c1fb5251dda6213741a193e50aae4622807cb255d1dd2e82b536f0c65","src/unix/notbsd/android/b32/x86.rs":"ae2b7f1d6278caddc007749bb1d09ca33f7593478a0fd7fe98b457dae86c7814","src/unix/notbsd/android/b64/aarch64.rs":"63d65629d79371814910f691672ef593d20244ee09be26f1ebe07ee6212d0163","src/unix/notbsd/android/b64/mod.rs":"90d4f6b063fd4de42fd302cbc9d9902fd99ac1d71dc48cb8bc6ad7b4c902e481","src/unix/notbsd/android/b64/x86_64.rs":"5547aef8dcbaa5a932559f34606fd8d89f6c9c15173d2b1412c12d39b3c1045f","src/unix/notbsd/android/mod.rs":"19013f41ac8ccac034eb48777a4041d69342edb9ca25d4e0bb9c5938f62eef3e","src/unix/notbsd/emscripten.rs":"9ed47a0a5020c8f72d9496f87ef0da669c1ed2b85980013100c466f18cd8a4c5","src/unix/notbsd/linux/mips/mips32.rs":"a483ddfd10765b7d5090dc21686eee8842649cd21236828a42d634114885f5f9","src/unix/notbsd/linux/mips/mips64.rs":"9fff696e3943cf206b549d1ae13fa361828e9a8454e2d5730eeaa1c172ff370d","src/unix/notbsd/linux/mips/mod.rs":"d18a40011e9090a4a2a1f27e5bd96eb2503ac352f4809648e15841083d7f3a68","src/unix/notbsd/linux/mod.rs":"d84e95d36f9477fa1aa694bf18a919ba20e65aa71539c3f3dc06e8f92acee521","src/unix/notbsd/linux/musl/b32/arm.rs":"fdf170e03812072785ec531f1ae810d0c4feb9b29d0c316681b9f7affe1262c0","src/unix/notbsd/linux/musl/b32/mips.rs":"afa4981d93f29b3fb0083a73ce1323f7dce1392f90d5cf1966b1fae10d510033","src/unix/notbsd/linux/musl/b32/mod.rs":"540928f168f145c136f9dd729ffa12b9d1838d9fe664fc642365d17d7fae648f","src/unix/notbsd/linux/musl/b32/powerpc.rs":"16c615770a96f155540511f58b5a8070c9c7a43e12bdfed83996690e7558bcb5","src/unix/notbsd/linux/musl/b32/x86.rs":"3abf1610c68c37f407cdd0f93563c3542c024219e0e8c9888266a6ee014e0c87","src/unix/notbsd/linux/musl/b64/aarch64.rs":"d98643408c2837387988f78adc95c90ad21196a6f8f879e3d33d7e8ccf612640","src/unix/notbsd/linux/musl/b64/mod.rs":"d9285cd705e2e92552a08c9aa69b810e7e1bd0e9da6edf069c678af285579661","src/unix/notbsd/linux/musl/b64/powerpc64.rs":"544d8a7f6d6d84143df8a4c3537c9a3a36bf3d338d7a1c15689b94492498d8d7","src/unix/notbsd/linux/musl/b64/x86_64.rs":"25340999290a63d564ec149532c905f59c312ec369f8806d6b15df66fa1b8857","src/unix/notbsd/linux/musl/mod.rs":"4e582af62a11e8a5235ccbeabe5b1003fc17705e606c1ed9b21b931a470681fc","src/unix/notbsd/linux/other/b32/arm.rs":"d9892f7350b2978335f734f1cd2d7fed60f0f2e66aa05bee3f69549c031f8b14","src/unix/notbsd/linux/other/b32/mod.rs":"26211878c6481861e11393625620edaa0700cac41f55f0118c0f0bd42c1b7520","src/unix/notbsd/linux/other/b32/powerpc.rs":"253fcd2f9978525285be1903cc08f3fec2dc3b12d1660a33e2995b4f6b810d1c","src/unix/notbsd/linux/other/b32/x86.rs":"0b0e2dbfc5378cb674ba8bb22f9aa322595e5e9466f48bb8e5e2761b94778e49","src/unix/notbsd/linux/other/b64/aarch64.rs":"1124ab5e974718b94fa40ae0f1772fb1c537910ef3e018b7c6c94a38b83dd742","src/unix/notbsd/linux/other/b64/mod.rs":"63e1a3fdf5f4d1b9820934ab344c91aed5e458e7e05908535d2e942d51a08bf8","src/unix/notbsd/linux/other/b64/not_x32.rs":"fa8636fb93eab230ed53bdec0a06f5b81d6d982cc0800103563c8c1eefcdb2d9","src/unix/notbsd/linux/other/b64/powerpc64.rs":"a771d982ed8a9458e1f2f039f959b5075b22443159875ba5612eebba96661c24","src/unix/notbsd/linux/other/b64/sparc64.rs":"0caffe5924886f3aed187531dfe78189b3df40adb96782ec4b471647ff83e9b1","src/unix/notbsd/linux/other/b64/x32.rs":"06a26c5120ced30fc015c220799b67c4401be2f13fc6c7361bebd3d37ff4982d","src/unix/notbsd/linux/other/b64/x86_64.rs":"5b4f43be8b4052266b498c05f08a727eccfc4c0984e71ad756d60d28197f29d8","src/unix/notbsd/linux/other/mod.rs":"fe76beac87fc549b076078a0fa3e2ecd4c13b0e6e4fcb34a89e16c6584f5259b","src/unix/notbsd/linux/s390x.rs":"9e990574dfc22b6eb91bcc7c6f8297f9ad42f9183efb366a818be88180a3fac3","src/unix/notbsd/mod.rs":"d9515c1cb8e1fed73a636dea1916d53611219ab5f400a97b53b9ebc88674ab8d","src/unix/solaris/mod.rs":"a80d0091da93f8a4f1a828b42eb56764d9d91d10e685dbf2c9b28a796c94c459","src/unix/uclibc/mips/mips32.rs":"9739c5fb47f389a0394ef08ee30da97a3de0a1300020731a8cc0a033616011b2","src/unix/uclibc/mips/mips64.rs":"230583280bbc7b3c7fcdb61244f51fa1af5944ca127c7cf83c598fe2313713d0","src/unix/uclibc/mips/mod.rs":"2d76e6cfeb2b7f7c59231a6e099f1aed811a45659e62153aaf00c220b9488a9d","src/unix/uclibc/mod.rs":"ce1c0772a5d22ff4cab1738680e0d3228b1a9e9d35cb6cb17db04685143aad33","src/unix/uclibc/x86_64/l4re.rs":"68fd3a833fd1f7caf784a084224f384bdbdfb8b5a14ef94c4f5155409afb3439","src/unix/uclibc/x86_64/mod.rs":"419182836aedd426a5c9e6b8667058adf86ac8f43af73ce8d00c503f8ff8f414","src/unix/uclibc/x86_64/other.rs":"f03b47842896f2f3ae6f8ebdcbcf0276454f880349d9cf00e3d304f8136893c5","src/windows/gnu.rs":"4d9033162cc6f7d245256c7b165c1ec18a741771fd9b99a55b421e8d14978599","src/windows/mod.rs":"7d74b12f71de86ee517a9cd93b1b38d0551646db0eaf526048abcbdd4bbeb250","src/windows/msvc.rs":"8f46cf66883c794175609a3b2bafaa094d0ba63eb6720ef1b84b175603f1074f"},"package":"e962c7641008ac010fa60a7dfdc1712449f29c44ef2d4702394aea943ee75047"}
\ No newline at end of file
diff --git a/rustc_deps/vendor/libc/Cargo.toml b/rustc_deps/vendor/libc/Cargo.toml
index fa65c2a..f2d7520 100644
--- a/rustc_deps/vendor/libc/Cargo.toml
+++ b/rustc_deps/vendor/libc/Cargo.toml
@@ -12,7 +12,7 @@
 
 [package]
 name = "libc"
-version = "0.2.46"
+version = "0.2.48"
 authors = ["The Rust Project Developers"]
 build = "build.rs"
 exclude = ["/ci/*", "/.travis.yml", "/appveyor.yml"]
diff --git a/rustc_deps/vendor/libc/src/redox/mod.rs b/rustc_deps/vendor/libc/src/redox/mod.rs
index 9f68632..8dabd90 100644
--- a/rustc_deps/vendor/libc/src/redox/mod.rs
+++ b/rustc_deps/vendor/libc/src/redox/mod.rs
@@ -1,4 +1,3 @@
-
 pub type int8_t = i8;
 pub type int16_t = i16;
 pub type int32_t = i32;
@@ -31,18 +30,66 @@
 pub type c_long = i64;
 pub type c_ulong = u64;
 
-pub type wchar_t = i16;
+pub type wchar_t = i32;
+pub type wint_t = u32;
+pub type wctype_t = i64;
 
+pub type regoff_t = size_t;
 pub type off_t = c_long;
-pub type mode_t = u16;
-pub type time_t = i64;
-pub type pid_t = usize;
-pub type gid_t = usize;
-pub type uid_t = usize;
+pub type mode_t = c_int;
+pub type time_t = c_long;
+pub type pid_t = c_int;
+pub type id_t = c_uint;
+pub type gid_t = c_int;
+pub type uid_t = c_int;
+pub type dev_t = c_long;
+pub type ino_t = c_ulong;
+pub type nlink_t = c_ulong;
+pub type blksize_t = c_long;
+pub type blkcnt_t = c_ulong;
 
-pub type suseconds_t = i64;
+pub type fsblkcnt_t = c_ulong;
+pub type fsfilcnt_t = c_ulong;
+
+pub type useconds_t = c_uint;
+pub type suseconds_t = c_int;
+
+pub type clock_t = c_long;
+pub type clockid_t = c_int;
+pub type timer_t = *mut c_void;
+
+pub type nfds_t = c_ulong;
 
 s! {
+    pub struct fd_set {
+        fds_bits: [::c_ulong; FD_SETSIZE / ULONG_SIZE],
+    }
+
+    pub struct pollfd {
+        pub fd: ::c_int,
+        pub events: ::c_short,
+        pub revents: ::c_short,
+    }
+
+    pub struct stat {
+        pub st_dev: ::dev_t,
+        pub st_ino: ::ino_t,
+        pub st_nlink: ::nlink_t,
+        pub st_mode: ::mode_t,
+        pub st_uid: ::uid_t,
+        pub st_gid: ::gid_t,
+        pub st_rdev: ::dev_t,
+        pub st_size: ::off_t,
+        pub st_blksize: ::blksize_t,
+        pub st_blocks: ::blkcnt_t,
+
+        pub st_atime: ::timespec,
+        pub st_mtime: ::timespec,
+        pub st_ctime: ::timespec,
+
+        _pad: [c_char; 24],
+    }
+
     pub struct timeval {
         pub tv_sec: time_t,
         pub tv_usec: suseconds_t,
@@ -64,6 +111,27 @@
 pub const EXIT_FAILURE: ::c_int = 1;
 pub const EXIT_SUCCESS: ::c_int = 0;
 
+pub const FD_SETSIZE: usize = 1024;
+
+pub const MAP_SHARED: ::c_int = 1;
+pub const MAP_PRIVATE: ::c_int = 2;
+pub const MAP_ANONYMOUS: ::c_int = 4;
+pub const MAP_ANON: ::c_int = MAP_ANONYMOUS;
+
+pub const MAP_FAILED: *mut ::c_void = !0 as *mut ::c_void;
+
+pub const POLLIN: ::c_short = 0x001;
+pub const POLLPRI: ::c_short = 0x002;
+pub const POLLOUT: ::c_short = 0x004;
+pub const POLLERR: ::c_short = 0x008;
+pub const POLLHUP: ::c_short = 0x010;
+pub const POLLNVAL: ::c_short = 0x020;
+
+pub const PROT_NONE: ::c_int = 0;
+pub const PROT_EXEC: ::c_int = 1;
+pub const PROT_WRITE: ::c_int = 2;
+pub const PROT_READ: ::c_int = 4;
+
 pub const S_ISUID: ::c_int = 0x800;
 pub const S_ISGID: ::c_int = 0x400;
 pub const S_ISVTX: ::c_int = 0x200;
@@ -98,6 +166,8 @@
 pub const F_GETFL: ::c_int = 3;
 pub const F_SETFL: ::c_int = 4;
 
+pub const FD_CLOEXEC: ::c_int =   0x0100_0000;
+
 pub const O_RDONLY: ::c_int =     0x0001_0000;
 pub const O_WRONLY: ::c_int =     0x0002_0000;
 pub const O_RDWR: ::c_int =       0x0003_0000;
@@ -152,6 +222,17 @@
 pub enum FILE {}
 pub enum fpos_t {} // TODO: fill this out with a struct
 
+// intentionally not public, only used for fd_set
+cfg_if! {
+    if #[cfg(target_pointer_width = "32")] {
+        const ULONG_SIZE: usize = 32;
+    } else if #[cfg(target_pointer_width = "64")] {
+        const ULONG_SIZE: usize = 64;
+    } else {
+        // Unknown target_pointer_width
+    }
+}
+
 extern {
     pub fn isalnum(c: c_int) -> c_int;
     pub fn isalpha(c: c_int) -> c_int;
@@ -262,9 +343,22 @@
     pub fn close(fd: ::c_int) -> ::c_int;
     pub fn fchown(fd: ::c_int, uid: ::uid_t, gid: ::gid_t) -> ::c_int;
     pub fn fcntl(fd: ::c_int, cmd: ::c_int, ...) -> ::c_int;
+    pub fn fstat(fd: ::c_int, buf: *mut stat) -> ::c_int;
+    pub fn fsync(fd: ::c_int) -> ::c_int;
     pub fn gethostname(name: *mut ::c_char, len: ::size_t) -> ::c_int;
     pub fn getpid() -> pid_t;
     pub fn memalign(align: ::size_t, size: ::size_t) -> *mut ::c_void;
+    pub fn mmap(addr: *mut ::c_void,
+         len: ::size_t,
+         prot: ::c_int,
+         flags: ::c_int,
+         fd: ::c_int,
+         offset: off_t)
+         -> *mut ::c_void;
+    pub fn mprotect(addr: *mut ::c_void, len: ::size_t, prot: ::c_int)
+                    -> ::c_int;
+    pub fn munmap(addr: *mut ::c_void, len: ::size_t) -> ::c_int;
+    pub fn poll(fds: *mut pollfd, nfds: nfds_t, timeout: ::c_int) -> ::c_int;
     pub fn read(fd: ::c_int, buf: *mut ::c_void, count: ::size_t) -> ::ssize_t;
     pub fn setenv(name: *const c_char, val: *const c_char, overwrite: ::c_int)
                   -> ::c_int;
diff --git a/rustc_deps/vendor/libc/src/unix/bsd/apple/mod.rs b/rustc_deps/vendor/libc/src/unix/bsd/apple/mod.rs
index 3d9dd94..837efff 100644
--- a/rustc_deps/vendor/libc/src/unix/bsd/apple/mod.rs
+++ b/rustc_deps/vendor/libc/src/unix/bsd/apple/mod.rs
@@ -1,6 +1,7 @@
 //! Apple (ios/darwin)-specific definitions
 //!
 //! This covers *-apple-* triples currently
+use dox::mem;
 
 pub type c_char = i8;
 pub type clock_t = c_ulong;
@@ -2383,7 +2384,45 @@
 pub const SF_APPEND:        ::c_uint = 0x00040000;
 pub const UF_HIDDEN:        ::c_uint = 0x00008000;
 
+fn __DARWIN_ALIGN32(p: usize) -> usize {
+    const __DARWIN_ALIGNBYTES32: usize = mem::size_of::<u32>() - 1;
+    p + __DARWIN_ALIGNBYTES32 & !__DARWIN_ALIGNBYTES32
+}
+
 f! {
+    pub fn CMSG_NXTHDR(mhdr: *const ::msghdr,
+                       cmsg: *const ::cmsghdr) -> *mut ::cmsghdr {
+        if cmsg.is_null() {
+            return ::CMSG_FIRSTHDR(mhdr);
+        };
+        let cmsg_len = (*cmsg).cmsg_len as usize;
+        let next = cmsg as usize + __DARWIN_ALIGN32(cmsg_len as usize)
+            + __DARWIN_ALIGN32(mem::size_of::<::cmsghdr>());
+        let max = (*mhdr).msg_control as usize
+                   + (*mhdr).msg_controllen as usize;
+        if next > max {
+            0 as *mut ::cmsghdr
+        } else {
+            next as *mut ::cmsghdr
+        }
+    }
+
+    pub fn CMSG_DATA(cmsg: *const ::cmsghdr) -> *mut ::c_uchar {
+        (cmsg as *mut ::c_uchar)
+            .offset(__DARWIN_ALIGN32(mem::size_of::<::cmsghdr>()) as isize)
+    }
+
+    pub fn CMSG_SPACE(length: ::c_uint) -> ::c_uint {
+        (__DARWIN_ALIGN32(mem::size_of::<::cmsghdr>())
+            + __DARWIN_ALIGN32(length as usize))
+            as ::c_uint
+    }
+
+    pub fn CMSG_LEN(length: ::c_uint) -> ::c_uint {
+        __DARWIN_ALIGN32(mem::size_of::<::cmsghdr>() + length as usize)
+            as ::c_uint
+    }
+
     pub fn WSTOPSIG(status: ::c_int) -> ::c_int {
         status >> 8
     }
@@ -2659,6 +2698,7 @@
         fd: ::c_int,
         newfd: ::c_int,
     ) -> ::c_int;
+    pub fn uname(buf: *mut ::utsname) -> ::c_int;
 }
 
 cfg_if! {
diff --git a/rustc_deps/vendor/libc/src/unix/bsd/freebsdlike/dragonfly/mod.rs b/rustc_deps/vendor/libc/src/unix/bsd/freebsdlike/dragonfly/mod.rs
index 0414380..992d008 100644
--- a/rustc_deps/vendor/libc/src/unix/bsd/freebsdlike/dragonfly/mod.rs
+++ b/rustc_deps/vendor/libc/src/unix/bsd/freebsdlike/dragonfly/mod.rs
@@ -210,6 +210,12 @@
         pub sdl_rcf: ::c_ushort,
         pub sdl_route: [::c_ushort; 16],
     }
+
+    pub struct stack_t {
+        pub ss_sp: *mut ::c_char,
+        pub ss_size: ::size_t,
+        pub ss_flags: ::c_int,
+    }
 }
 
 pub const RAND_MAX: ::c_int = 0x7fff_ffff;
@@ -782,6 +788,39 @@
 pub const SF_CACHE:     ::c_ulong = 0x00800000;
 pub const SF_XLINK:     ::c_ulong = 0x01000000;
 
+fn _CMSG_ALIGN(n: usize) -> usize {
+    (n + 3) & !3
+}
+
+f! {
+    pub fn CMSG_DATA(cmsg: *const ::cmsghdr) -> *mut ::c_uchar {
+        (cmsg as *mut ::c_uchar)
+            .offset(_CMSG_ALIGN(mem::size_of::<::cmsghdr>()) as isize)
+    }
+
+    pub fn CMSG_LEN(length: ::c_uint) -> ::c_uint {
+        _CMSG_ALIGN(mem::size_of::<::cmsghdr>()) + length as usize
+    }
+
+    pub fn CMSG_NXTHDR(mhdr: *const ::msghdr, cmsg: *const ::cmsghdr)
+        -> *mut ::cmsghdr
+    {
+        let next = cmsg as usize + _CMSG_ALIGN((*cmsg).cmsg_len)
+            + _CMSG_ALIGN(mem::size_of::<::cmsghdr>());
+        let max = (*mhdr).msg_control as usize
+            + (*mhdr).msg_controllen as usize;
+        if next <= max {
+            (cmsg as usize + _CMSG_ALIGN((*cmsg).cmsg_len)) as *mut ::cmsghdr
+        } else {
+            0 as *mut ::cmsghdr
+        }
+    }
+
+    pub fn CMSG_SPACE(length: ::c_uint) -> ::c_uint {
+        _CMSG_ALIGN(mem::size_of::<::cmsghdr>()) + _CMSG_ALIGN(length as usize)
+    }
+}
+
 extern {
     pub fn mprotect(addr: *mut ::c_void, len: ::size_t, prot: ::c_int)
                     -> ::c_int;
@@ -801,4 +840,5 @@
 
     pub fn statfs(path: *const ::c_char, buf: *mut statfs) -> ::c_int;
     pub fn fstatfs(fd: ::c_int, buf: *mut statfs) -> ::c_int;
+    pub fn uname(buf: *mut ::utsname) -> ::c_int;
 }
diff --git a/rustc_deps/vendor/libc/src/unix/bsd/freebsdlike/freebsd/aarch64.rs b/rustc_deps/vendor/libc/src/unix/bsd/freebsdlike/freebsd/aarch64.rs
index 3d61f88..d33b475 100644
--- a/rustc_deps/vendor/libc/src/unix/bsd/freebsdlike/freebsd/aarch64.rs
+++ b/rustc_deps/vendor/libc/src/unix/bsd/freebsdlike/freebsd/aarch64.rs
@@ -1,3 +1,5 @@
+use dox::mem;
+
 pub type c_long = i64;
 pub type c_ulong = u64;
 pub type time_t = i64;
@@ -29,4 +31,7 @@
     }
 }
 
+// should be pub(crate), but that requires Rust 1.18.0
+#[doc(hidden)]
+pub const _ALIGNBYTES: usize = mem::size_of::<::c_longlong>() - 1;
 pub const MAP_32BIT: ::c_int = 0x00080000;
diff --git a/rustc_deps/vendor/libc/src/unix/bsd/freebsdlike/freebsd/mod.rs b/rustc_deps/vendor/libc/src/unix/bsd/freebsdlike/freebsd/mod.rs
index 03b19eb..91eab30 100644
--- a/rustc_deps/vendor/libc/src/unix/bsd/freebsdlike/freebsd/mod.rs
+++ b/rustc_deps/vendor/libc/src/unix/bsd/freebsdlike/freebsd/mod.rs
@@ -1,3 +1,5 @@
+use dox::mem;
+
 pub type fflags_t = u32;
 pub type clock_t = i32;
 pub type ino_t = u32;
@@ -182,6 +184,12 @@
         pub sdl_slen: ::c_uchar,
         pub sdl_data: [::c_char; 46],
     }
+
+    pub struct stack_t {
+        pub ss_sp: *mut ::c_void,
+        pub ss_size: ::size_t,
+        pub ss_flags: ::c_int,
+    }
 }
 
 pub const SIGEV_THREAD_ID: ::c_int = 4;
@@ -447,6 +455,19 @@
 pub const TIOCM_DCD: ::c_int = 0x40;
 pub const H4DISC: ::c_int = 0x7;
 
+pub const FIONCLEX: ::c_ulong = 0x20006602;
+pub const FIONREAD: ::c_ulong = 0x4004667f;
+pub const FIOASYNC: ::c_ulong = 0x8004667d;
+pub const FIOSETOWN: ::c_ulong = 0x8004667c;
+pub const FIOGETOWN: ::c_ulong = 0x4004667b;
+pub const FIODTYPE: ::c_ulong = 0x4004667a;
+pub const FIOGETLBA: ::c_ulong = 0x40046679;
+pub const FIODGNAME: ::c_ulong = 0x80106678;
+pub const FIONWRITE: ::c_ulong = 0x40046677;
+pub const FIONSPACE: ::c_ulong = 0x40046676;
+pub const FIOSEEKDATA: ::c_ulong = 0xc0086661;
+pub const FIOSEEKHOLE: ::c_ulong = 0xc0086662;
+
 pub const JAIL_API_VERSION: u32 = 2;
 pub const JAIL_CREATE: ::c_int = 0x01;
 pub const JAIL_UPDATE: ::c_int = 0x02;
@@ -949,6 +970,48 @@
 pub const UF_HIDDEN:    ::c_ulong = 0x00008000;
 pub const SF_SNAPSHOT:  ::c_ulong = 0x00200000;
 
+fn _ALIGN(p: usize) -> usize {
+    (p + _ALIGNBYTES) & !_ALIGNBYTES
+}
+
+f! {
+    pub fn CMSG_DATA(cmsg: *const ::cmsghdr) -> *mut ::c_uchar {
+        (cmsg as *mut ::c_uchar)
+            .offset(_ALIGN(mem::size_of::<::cmsghdr>()) as isize)
+    }
+
+    pub fn CMSG_LEN(length: ::c_uint) -> ::c_uint {
+        _ALIGN(mem::size_of::<::cmsghdr>()) as ::c_uint + length
+    }
+
+    pub fn CMSG_NXTHDR(mhdr: *const ::msghdr, cmsg: *const ::cmsghdr)
+        -> *mut ::cmsghdr
+    {
+        if cmsg.is_null() {
+            return ::CMSG_FIRSTHDR(mhdr);
+        };
+        let next = cmsg as usize + _ALIGN((*cmsg).cmsg_len as usize)
+            + _ALIGN(mem::size_of::<::cmsghdr>());
+        let max = (*mhdr).msg_control as usize
+            + (*mhdr).msg_controllen as usize;
+        if next > max {
+            0 as *mut ::cmsghdr
+        } else {
+            (cmsg as usize + _ALIGN((*cmsg).cmsg_len as usize))
+                as *mut ::cmsghdr
+        }
+    }
+
+    pub fn CMSG_SPACE(length: ::c_uint) -> ::c_uint {
+        (_ALIGN(mem::size_of::<::cmsghdr>()) + _ALIGN(length as usize))
+            as ::c_uint
+    }
+
+    pub fn uname(buf: *mut ::utsname) -> ::c_int {
+        __xuname(256, buf as *mut ::c_void)
+    }
+}
+
 extern {
     pub fn __error() -> *mut ::c_int;
 
@@ -1135,6 +1198,7 @@
     pub fn fstatfs(fd: ::c_int, buf: *mut statfs) -> ::c_int;
 
     pub fn dup3(src: ::c_int, dst: ::c_int, flags: ::c_int) -> ::c_int;
+    pub fn __xuname(nmln: ::c_int, buf: *mut ::c_void) -> ::c_int;
 }
 
 #[link(name = "util")]
diff --git a/rustc_deps/vendor/libc/src/unix/bsd/freebsdlike/freebsd/x86.rs b/rustc_deps/vendor/libc/src/unix/bsd/freebsdlike/freebsd/x86.rs
index 8a5e5f9..a5495aa 100644
--- a/rustc_deps/vendor/libc/src/unix/bsd/freebsdlike/freebsd/x86.rs
+++ b/rustc_deps/vendor/libc/src/unix/bsd/freebsdlike/freebsd/x86.rs
@@ -1,3 +1,5 @@
+use dox::mem;
+
 pub type c_long = i32;
 pub type c_ulong = u32;
 pub type time_t = i32;
@@ -29,3 +31,7 @@
         __unused: [u8; 8],
     }
 }
+
+// should be pub(crate), but that requires Rust 1.18.0
+#[doc(hidden)]
+pub const _ALIGNBYTES: usize = mem::size_of::<::c_long>() - 1;
diff --git a/rustc_deps/vendor/libc/src/unix/bsd/freebsdlike/freebsd/x86_64.rs b/rustc_deps/vendor/libc/src/unix/bsd/freebsdlike/freebsd/x86_64.rs
index 3d61f88..711feb7 100644
--- a/rustc_deps/vendor/libc/src/unix/bsd/freebsdlike/freebsd/x86_64.rs
+++ b/rustc_deps/vendor/libc/src/unix/bsd/freebsdlike/freebsd/x86_64.rs
@@ -1,3 +1,5 @@
+use dox::mem;
+
 pub type c_long = i64;
 pub type c_ulong = u64;
 pub type time_t = i64;
@@ -29,4 +31,7 @@
     }
 }
 
+// should be pub(crate), but that requires Rust 1.18.0
+#[doc(hidden)]
+pub const _ALIGNBYTES: usize = mem::size_of::<::c_long>() - 1;
 pub const MAP_32BIT: ::c_int = 0x00080000;
diff --git a/rustc_deps/vendor/libc/src/unix/bsd/freebsdlike/mod.rs b/rustc_deps/vendor/libc/src/unix/bsd/freebsdlike/mod.rs
index 9829dde..22c11b3 100644
--- a/rustc_deps/vendor/libc/src/unix/bsd/freebsdlike/mod.rs
+++ b/rustc_deps/vendor/libc/src/unix/bsd/freebsdlike/mod.rs
@@ -82,13 +82,6 @@
         pub sa_mask: sigset_t,
     }
 
-    pub struct stack_t {
-        // In FreeBSD 11 and later, ss_sp is actually a void*
-        pub ss_sp: *mut ::c_char,
-        pub ss_size: ::size_t,
-        pub ss_flags: ::c_int,
-    }
-
     pub struct sched_param {
         pub sched_priority: ::c_int,
     }
diff --git a/rustc_deps/vendor/libc/src/unix/bsd/mod.rs b/rustc_deps/vendor/libc/src/unix/bsd/mod.rs
index 03125c9..12f6e14 100644
--- a/rustc_deps/vendor/libc/src/unix/bsd/mod.rs
+++ b/rustc_deps/vendor/libc/src/unix/bsd/mod.rs
@@ -57,7 +57,9 @@
         pub ifa_addr: *mut ::sockaddr,
         pub ifa_netmask: *mut ::sockaddr,
         pub ifa_dstaddr: *mut ::sockaddr,
-        pub ifa_data: *mut ::c_void
+        pub ifa_data: *mut ::c_void,
+        #[cfg(target_os = "netbsd")]
+        pub ifa_addrflags: ::c_uint
     }
 
     pub struct fd_set {
@@ -340,43 +342,14 @@
 pub const POLLWRBAND: ::c_short = 0x100;
 
 f! {
-    pub fn CMSG_FIRSTHDR(mhdr: *const msghdr) -> *mut cmsghdr {
-        if (*mhdr).msg_controllen as usize >= mem::size_of::<cmsghdr>() {
-            (*mhdr).msg_control as *mut cmsghdr
+    pub fn CMSG_FIRSTHDR(mhdr: *const ::msghdr) -> *mut ::cmsghdr {
+        if (*mhdr).msg_controllen as usize >= mem::size_of::<::cmsghdr>() {
+            (*mhdr).msg_control as *mut ::cmsghdr
         } else {
-            0 as *mut cmsghdr
+            0 as *mut ::cmsghdr
         }
     }
 
-    pub fn CMSG_NXTHDR(mhdr: *const msghdr,
-                       cmsg: *const cmsghdr) -> *mut cmsghdr {
-        if cmsg.is_null() {
-            return CMSG_FIRSTHDR(mhdr);
-        };
-        let pad = mem::align_of::<cmsghdr>() - 1;
-        let next = cmsg as usize + (*cmsg).cmsg_len as usize + pad & !pad;
-        let max = (*mhdr).msg_control as usize
-            + (*mhdr).msg_controllen as usize;
-        if next < max {
-            next as *mut cmsghdr
-        } else {
-            0 as *mut cmsghdr
-        }
-    }
-
-    pub fn CMSG_DATA(cmsg: *const cmsghdr) -> *mut ::c_uchar {
-        cmsg.offset(1) as *mut ::c_uchar
-    }
-
-    pub fn CMSG_SPACE(length: ::c_uint) -> ::c_uint {
-        let pad = mem::align_of::<cmsghdr>() as ::c_uint - 1;
-        mem::size_of::<cmsghdr>() as ::c_uint + ((length + pad) & !pad)
-    }
-
-    pub fn CMSG_LEN(length: ::c_uint) -> ::c_uint {
-        mem::size_of::<cmsghdr>() as ::c_uint + length
-    }
-
     pub fn FD_CLR(fd: ::c_int, set: *mut fd_set) -> () {
         let bits = mem::size_of_val(&(*set).fds_bits[0]) * 8;
         let fd = fd as usize;
diff --git a/rustc_deps/vendor/libc/src/unix/bsd/netbsdlike/mod.rs b/rustc_deps/vendor/libc/src/unix/bsd/netbsdlike/mod.rs
index abd014c..291c081 100644
--- a/rustc_deps/vendor/libc/src/unix/bsd/netbsdlike/mod.rs
+++ b/rustc_deps/vendor/libc/src/unix/bsd/netbsdlike/mod.rs
@@ -1,3 +1,5 @@
+use dox::mem;
+
 pub type time_t = i64;
 pub type mode_t = u32;
 pub type nlink_t = ::uint32_t;
@@ -593,7 +595,43 @@
 
 pub const TIMER_ABSTIME: ::c_int = 1;
 
+fn _ALIGN(p: usize) -> usize {
+    (p + _ALIGNBYTES) & !_ALIGNBYTES
+}
+
 f! {
+    pub fn CMSG_DATA(cmsg: *const ::cmsghdr) -> *mut ::c_uchar {
+        (cmsg as *mut ::c_uchar)
+            .offset(_ALIGN(mem::size_of::<::cmsghdr>()) as isize)
+    }
+
+    pub fn CMSG_LEN(length: ::c_uint) -> ::c_uint {
+        _ALIGN(mem::size_of::<::cmsghdr>()) as ::c_uint + length
+    }
+
+    pub fn CMSG_NXTHDR(mhdr: *const ::msghdr, cmsg: *const ::cmsghdr)
+        -> *mut ::cmsghdr
+    {
+        if cmsg.is_null() {
+            return ::CMSG_FIRSTHDR(mhdr);
+        };
+        let next = cmsg as usize + _ALIGN((*cmsg).cmsg_len as usize)
+            + _ALIGN(mem::size_of::<::cmsghdr>());
+        let max = (*mhdr).msg_control as usize
+            + (*mhdr).msg_controllen as usize;
+        if next > max {
+            0 as *mut ::cmsghdr
+        } else {
+            (cmsg as usize + _ALIGN((*cmsg).cmsg_len as usize))
+                as *mut ::cmsghdr
+        }
+    }
+
+    pub fn CMSG_SPACE(length: ::c_uint) -> ::c_uint {
+        (_ALIGN(mem::size_of::<::cmsghdr>()) + _ALIGN(length as usize))
+            as ::c_uint
+    }
+
     pub fn WSTOPSIG(status: ::c_int) -> ::c_int {
         status >> 8
     }
@@ -671,11 +709,9 @@
                         groups: *mut ::gid_t,
                         ngroups: *mut ::c_int) -> ::c_int;
     pub fn initgroups(name: *const ::c_char, basegid: ::gid_t) -> ::c_int;
-    pub fn fexecve(fd: ::c_int, argv: *const *const ::c_char,
-                   envp: *const *const ::c_char)
-                   -> ::c_int;
     pub fn getdomainname(name: *mut ::c_char, len: ::size_t) -> ::c_int;
     pub fn setdomainname(name: *const ::c_char, len: ::size_t) -> ::c_int;
+    pub fn uname(buf: *mut ::utsname) -> ::c_int;
 }
 
 cfg_if! {
diff --git a/rustc_deps/vendor/libc/src/unix/bsd/netbsdlike/netbsd/aarch64.rs b/rustc_deps/vendor/libc/src/unix/bsd/netbsdlike/netbsd/aarch64.rs
index 66f3301..cda75bc 100644
--- a/rustc_deps/vendor/libc/src/unix/bsd/netbsdlike/netbsd/aarch64.rs
+++ b/rustc_deps/vendor/libc/src/unix/bsd/netbsdlike/netbsd/aarch64.rs
@@ -1,3 +1,5 @@
+use dox::mem;
+
 use PT_FIRSTMACH;
 
 pub type c_long = i64;
@@ -5,6 +7,10 @@
 pub type c_char = u8;
 pub type __cpu_simple_lock_nv_t = ::c_uchar;
 
+// should be pub(crate), but that requires Rust 1.18.0
+#[doc(hidden)]
+pub const _ALIGNBYTES: usize = mem::size_of::<::c_int>() - 1;
+
 pub const PT_GETREGS: ::c_int = PT_FIRSTMACH + 0;
 pub const PT_SETREGS: ::c_int = PT_FIRSTMACH + 1;
 pub const PT_GETFPREGS: ::c_int = PT_FIRSTMACH + 2;
diff --git a/rustc_deps/vendor/libc/src/unix/bsd/netbsdlike/netbsd/arm.rs b/rustc_deps/vendor/libc/src/unix/bsd/netbsdlike/netbsd/arm.rs
index 9e67316..71c2cb7 100644
--- a/rustc_deps/vendor/libc/src/unix/bsd/netbsdlike/netbsd/arm.rs
+++ b/rustc_deps/vendor/libc/src/unix/bsd/netbsdlike/netbsd/arm.rs
@@ -1,3 +1,5 @@
+use dox::mem;
+
 use PT_FIRSTMACH;
 
 pub type c_long = i32;
@@ -5,6 +7,10 @@
 pub type c_char = u8;
 pub type __cpu_simple_lock_nv_t = ::c_int;
 
+// should be pub(crate), but that requires Rust 1.18.0
+#[doc(hidden)]
+pub const _ALIGNBYTES: usize = mem::size_of::<::c_longlong>() - 1;
+
 pub const PT_GETREGS: ::c_int = PT_FIRSTMACH + 1;
 pub const PT_SETREGS: ::c_int = PT_FIRSTMACH + 2;
 pub const PT_GETFPREGS: ::c_int = PT_FIRSTMACH + 3;
diff --git a/rustc_deps/vendor/libc/src/unix/bsd/netbsdlike/netbsd/mod.rs b/rustc_deps/vendor/libc/src/unix/bsd/netbsdlike/netbsd/mod.rs
index 9c8173f..d3acfb9 100644
--- a/rustc_deps/vendor/libc/src/unix/bsd/netbsdlike/netbsd/mod.rs
+++ b/rustc_deps/vendor/libc/src/unix/bsd/netbsdlike/netbsd/mod.rs
@@ -526,15 +526,16 @@
 pub const AF_IEEE80211: ::c_int = 32;
 pub const AF_MPLS: ::c_int = 33;
 pub const AF_ROUTE: ::c_int = 34;
-pub const AF_MAX: ::c_int = 35;
+pub const AF_MAX: ::c_int = 36;
 
 pub const NET_MAXID: ::c_int = AF_MAX;
 pub const NET_RT_DUMP: ::c_int = 1;
 pub const NET_RT_FLAGS: ::c_int = 2;
-pub const NET_RT_OOIFLIST: ::c_int = 3;
-pub const NET_RT_OIFLIST: ::c_int = 4;
-pub const NET_RT_IFLIST: ::c_int = 5;
-pub const NET_RT_MAXID: ::c_int = 6;
+pub const NET_RT_OOOIFLIST: ::c_int = 3;
+pub const NET_RT_OOIFLIST: ::c_int = 4;
+pub const NET_RT_OIFLIST: ::c_int = 5;
+pub const NET_RT_IFLIST: ::c_int = 6;
+pub const NET_RT_MAXID: ::c_int = 7;
 
 pub const PF_OROUTE: ::c_int = AF_OROUTE;
 pub const PF_ARP: ::c_int = AF_ARP;
@@ -987,6 +988,20 @@
 pub const SOCK_CLOEXEC: ::c_int = 0x10000000;
 pub const SOCK_NONBLOCK: ::c_int = 0x20000000;
 
+pub const FIONCLEX: ::c_ulong = 0x20006602;
+// Uncomment on next NetBSD release
+// pub const FIOSEEKDATA: ::c_ulong = 0xc0086661;
+// pub const FIOSEEKHOLE: ::c_ulong = 0xc0086662;
+pub const FIONREAD: ::c_ulong = 0x4004667f;
+pub const FIOASYNC: ::c_ulong = 0x8004667d;
+pub const FIOSETOWN: ::c_ulong = 0x8004667c;
+pub const FIOGETOWN: ::c_ulong = 0x4004667b;
+pub const OFIOGETBMAP: ::c_ulong = 0xc004667a;
+pub const FIOGETBMAP: ::c_ulong = 0xc008667a;
+pub const FIONWRITE: ::c_ulong = 0x40046679;
+pub const FIONSPACE: ::c_ulong = 0x40046678;
+pub const FIBMAP: ::c_ulong = 0xc008667a;
+
 pub const SIGSTKSZ : ::size_t = 40960;
 
 pub const PT_DUMPCORE: ::c_int = 12;
@@ -1025,6 +1040,7 @@
     }
 }
 
+#[link(name = "rt")]
 extern {
     pub fn aio_read(aiocbp: *mut aiocb) -> ::c_int;
     pub fn aio_write(aiocbp: *mut aiocb) -> ::c_int;
@@ -1037,7 +1053,9 @@
     pub fn aio_cancel(fd: ::c_int, aiocbp: *mut aiocb) -> ::c_int;
     pub fn lio_listio(mode: ::c_int, aiocb_list: *const *mut aiocb,
                       nitems: ::c_int, sevp: *mut sigevent) -> ::c_int;
+}
 
+extern {
     pub fn chflags(path: *const ::c_char, flags: ::c_ulong) -> ::c_int;
     pub fn fchflags(fd: ::c_int, flags: ::c_ulong) -> ::c_int;
     pub fn lchflags(path: *const ::c_char, flags: ::c_ulong) -> ::c_int;
diff --git a/rustc_deps/vendor/libc/src/unix/bsd/netbsdlike/netbsd/powerpc.rs b/rustc_deps/vendor/libc/src/unix/bsd/netbsdlike/netbsd/powerpc.rs
index 54d069e..3c682c3 100644
--- a/rustc_deps/vendor/libc/src/unix/bsd/netbsdlike/netbsd/powerpc.rs
+++ b/rustc_deps/vendor/libc/src/unix/bsd/netbsdlike/netbsd/powerpc.rs
@@ -1,3 +1,5 @@
+use dox::mem;
+
 use PT_FIRSTMACH;
 
 pub type c_long = i32;
@@ -5,6 +7,10 @@
 pub type c_char = u8;
 pub type __cpu_simple_lock_nv_t = ::c_int;
 
+// should be pub(crate), but that requires Rust 1.18.0
+#[doc(hidden)]
+pub const _ALIGNBYTES: usize = mem::size_of::<::c_double>() - 1;
+
 pub const PT_STEP: ::c_int = PT_FIRSTMACH + 0;
 pub const PT_GETREGS: ::c_int = PT_FIRSTMACH + 1;
 pub const PT_SETREGS: ::c_int = PT_FIRSTMACH + 2;
diff --git a/rustc_deps/vendor/libc/src/unix/bsd/netbsdlike/netbsd/sparc64.rs b/rustc_deps/vendor/libc/src/unix/bsd/netbsdlike/netbsd/sparc64.rs
index db8f2a9..6a86759 100644
--- a/rustc_deps/vendor/libc/src/unix/bsd/netbsdlike/netbsd/sparc64.rs
+++ b/rustc_deps/vendor/libc/src/unix/bsd/netbsdlike/netbsd/sparc64.rs
@@ -2,3 +2,7 @@
 pub type c_ulong = u64;
 pub type c_char = i8;
 pub type __cpu_simple_lock_nv_t = ::c_uchar;
+
+// should be pub(crate), but that requires Rust 1.18.0
+#[doc(hidden)]
+pub const _ALIGNBYTES: usize = 0xf;
diff --git a/rustc_deps/vendor/libc/src/unix/bsd/netbsdlike/netbsd/x86.rs b/rustc_deps/vendor/libc/src/unix/bsd/netbsdlike/netbsd/x86.rs
index 8bd1058..4da9968 100644
--- a/rustc_deps/vendor/libc/src/unix/bsd/netbsdlike/netbsd/x86.rs
+++ b/rustc_deps/vendor/libc/src/unix/bsd/netbsdlike/netbsd/x86.rs
@@ -1,4 +1,10 @@
+use dox::mem;
+
 pub type c_long = i32;
 pub type c_ulong = u32;
 pub type c_char = i8;
 pub type __cpu_simple_lock_nv_t = ::c_uchar;
+
+// should be pub(crate), but that requires Rust 1.18.0
+#[doc(hidden)]
+pub const _ALIGNBYTES: usize = mem::size_of::<::c_int>() - 1;
diff --git a/rustc_deps/vendor/libc/src/unix/bsd/netbsdlike/netbsd/x86_64.rs b/rustc_deps/vendor/libc/src/unix/bsd/netbsdlike/netbsd/x86_64.rs
index 8d3de84..af1b8f8 100644
--- a/rustc_deps/vendor/libc/src/unix/bsd/netbsdlike/netbsd/x86_64.rs
+++ b/rustc_deps/vendor/libc/src/unix/bsd/netbsdlike/netbsd/x86_64.rs
@@ -1,3 +1,5 @@
+use dox::mem;
+
 use PT_FIRSTMACH;
 
 pub type c_long = i64;
@@ -5,6 +7,10 @@
 pub type c_char = i8;
 pub type __cpu_simple_lock_nv_t = ::c_uchar;
 
+// should be pub(crate), but that requires Rust 1.18.0
+#[doc(hidden)]
+pub const _ALIGNBYTES: usize = mem::size_of::<::c_long>() - 1;
+
 pub const PT_STEP: ::c_int = PT_FIRSTMACH + 0;
 pub const PT_GETREGS: ::c_int = PT_FIRSTMACH + 1;
 pub const PT_SETREGS: ::c_int = PT_FIRSTMACH + 2;
diff --git a/rustc_deps/vendor/libc/src/unix/bsd/netbsdlike/openbsdlike/openbsd/aarch64.rs b/rustc_deps/vendor/libc/src/unix/bsd/netbsdlike/openbsdlike/openbsd/aarch64.rs
index 6aa9950..2a28c2a 100644
--- a/rustc_deps/vendor/libc/src/unix/bsd/netbsdlike/openbsdlike/openbsd/aarch64.rs
+++ b/rustc_deps/vendor/libc/src/unix/bsd/netbsdlike/openbsdlike/openbsd/aarch64.rs
@@ -1,3 +1,9 @@
+use dox::mem;
+
 pub type c_long = i64;
 pub type c_ulong = u64;
 pub type c_char = u8;
+
+// should be pub(crate), but that requires Rust 1.18.0
+#[doc(hidden)]
+pub const _ALIGNBYTES: usize = mem::size_of::<::c_long>() - 1;
diff --git a/rustc_deps/vendor/libc/src/unix/bsd/netbsdlike/openbsdlike/openbsd/x86.rs b/rustc_deps/vendor/libc/src/unix/bsd/netbsdlike/openbsdlike/openbsd/x86.rs
index a00e333..b63b69f 100644
--- a/rustc_deps/vendor/libc/src/unix/bsd/netbsdlike/openbsdlike/openbsd/x86.rs
+++ b/rustc_deps/vendor/libc/src/unix/bsd/netbsdlike/openbsdlike/openbsd/x86.rs
@@ -1,3 +1,9 @@
+use dox::mem;
+
 pub type c_long = i32;
 pub type c_ulong = u32;
 pub type c_char = i8;
+
+// should be pub(crate), but that requires Rust 1.18.0
+#[doc(hidden)]
+pub const _ALIGNBYTES: usize = mem::size_of::<::c_int>() - 1;
diff --git a/rustc_deps/vendor/libc/src/unix/bsd/netbsdlike/openbsdlike/openbsd/x86_64.rs b/rustc_deps/vendor/libc/src/unix/bsd/netbsdlike/openbsdlike/openbsd/x86_64.rs
index 3bc7f52..581096f 100644
--- a/rustc_deps/vendor/libc/src/unix/bsd/netbsdlike/openbsdlike/openbsd/x86_64.rs
+++ b/rustc_deps/vendor/libc/src/unix/bsd/netbsdlike/openbsdlike/openbsd/x86_64.rs
@@ -1,9 +1,15 @@
+use dox::mem;
+
 use PT_FIRSTMACH;
 
 pub type c_long = i64;
 pub type c_ulong = u64;
 pub type c_char = i8;
 
+// should be pub(crate), but that requires Rust 1.18.0
+#[doc(hidden)]
+pub const _ALIGNBYTES: usize = mem::size_of::<::c_long>() - 1;
+
 pub const PT_STEP: ::c_int = PT_FIRSTMACH + 0;
 pub const PT_GETREGS: ::c_int = PT_FIRSTMACH + 1;
 pub const PT_SETREGS: ::c_int = PT_FIRSTMACH + 2;
diff --git a/rustc_deps/vendor/libc/src/unix/haiku/mod.rs b/rustc_deps/vendor/libc/src/unix/haiku/mod.rs
index e65bca7..2aa5d13 100644
--- a/rustc_deps/vendor/libc/src/unix/haiku/mod.rs
+++ b/rustc_deps/vendor/libc/src/unix/haiku/mod.rs
@@ -1242,6 +1242,7 @@
                    termp: *mut termios,
                    winp: *mut ::winsize) -> ::pid_t;
     pub fn sethostname(name: *const ::c_char, len: ::size_t) -> ::c_int;
+    pub fn uname(buf: *mut ::utsname) -> ::c_int;
 }
 
 cfg_if! {
diff --git a/rustc_deps/vendor/libc/src/unix/hermit/mod.rs b/rustc_deps/vendor/libc/src/unix/hermit/mod.rs
index aadfa1c..ba7a90f 100644
--- a/rustc_deps/vendor/libc/src/unix/hermit/mod.rs
+++ b/rustc_deps/vendor/libc/src/unix/hermit/mod.rs
@@ -727,6 +727,7 @@
         -> ::c_int;
 
     pub fn setgroups(ngroups: ::c_int, grouplist: *const ::gid_t) -> ::c_int;
+    pub fn uname(buf: *mut ::utsname) -> ::c_int;
 }
 
 cfg_if! {
diff --git a/rustc_deps/vendor/libc/src/unix/mod.rs b/rustc_deps/vendor/libc/src/unix/mod.rs
index 370d7f4..88e13c5 100644
--- a/rustc_deps/vendor/libc/src/unix/mod.rs
+++ b/rustc_deps/vendor/libc/src/unix/mod.rs
@@ -972,7 +972,6 @@
     #[cfg_attr(target_os = "freebsd", link_name = "mknod@FBSD_1.0")]
     pub fn mknod(pathname: *const ::c_char, mode: ::mode_t,
                  dev: ::dev_t) -> ::c_int;
-    pub fn uname(buf: *mut ::utsname) -> ::c_int;
     pub fn gethostname(name: *mut ::c_char, len: ::size_t) -> ::c_int;
     pub fn getservbyname(name: *const ::c_char,
                          proto: *const ::c_char) -> *mut servent;
diff --git a/rustc_deps/vendor/libc/src/unix/newlib/mod.rs b/rustc_deps/vendor/libc/src/unix/newlib/mod.rs
index 77a4eb9..0cc411d 100644
--- a/rustc_deps/vendor/libc/src/unix/newlib/mod.rs
+++ b/rustc_deps/vendor/libc/src/unix/newlib/mod.rs
@@ -728,6 +728,7 @@
                link_name = "popen$UNIX2003")]
     pub fn popen(command: *const c_char,
                  mode: *const c_char) -> *mut ::FILE;
+    pub fn uname(buf: *mut ::utsname) -> ::c_int;
 }
 
 cfg_if! {
diff --git a/rustc_deps/vendor/libc/src/unix/notbsd/linux/other/b32/x86.rs b/rustc_deps/vendor/libc/src/unix/notbsd/linux/other/b32/x86.rs
index 1506aca..6c41718 100644
--- a/rustc_deps/vendor/libc/src/unix/notbsd/linux/other/b32/x86.rs
+++ b/rustc_deps/vendor/libc/src/unix/notbsd/linux/other/b32/x86.rs
@@ -758,6 +758,27 @@
 pub const UESP: ::c_int = 15;
 pub const SS: ::c_int = 16;
 
+// offsets in mcontext_t.gregs from sys/ucontext.h
+pub const REG_GS: ::c_int = 0;
+pub const REG_FS: ::c_int = 1;
+pub const REG_ES: ::c_int = 2;
+pub const REG_DS: ::c_int = 3;
+pub const REG_EDI: ::c_int = 4;
+pub const REG_ESI: ::c_int = 5;
+pub const REG_EBP: ::c_int = 6;
+pub const REG_ESP: ::c_int = 7;
+pub const REG_EBX: ::c_int = 8;
+pub const REG_EDX: ::c_int = 9;
+pub const REG_ECX: ::c_int = 10;
+pub const REG_EAX: ::c_int = 11;
+pub const REG_TRAPNO: ::c_int = 12;
+pub const REG_ERR: ::c_int = 13;
+pub const REG_EIP: ::c_int = 14;
+pub const REG_CS: ::c_int = 15;
+pub const REG_EFL: ::c_int = 16;
+pub const REG_UESP: ::c_int = 17;
+pub const REG_SS: ::c_int = 18;
+
 extern {
     pub fn getcontext(ucp: *mut ucontext_t) -> ::c_int;
     pub fn setcontext(ucp: *const ucontext_t) -> ::c_int;
diff --git a/rustc_deps/vendor/libc/src/unix/notbsd/linux/other/b64/x86_64.rs b/rustc_deps/vendor/libc/src/unix/notbsd/linux/other/b64/x86_64.rs
index 43b8b9f..0d7137e 100644
--- a/rustc_deps/vendor/libc/src/unix/notbsd/linux/other/b64/x86_64.rs
+++ b/rustc_deps/vendor/libc/src/unix/notbsd/linux/other/b64/x86_64.rs
@@ -644,6 +644,31 @@
 pub const FS: ::c_int = 25;
 pub const GS: ::c_int = 26;
 
+// offsets in mcontext_t.gregs from sys/ucontext.h
+pub const REG_R8: ::c_int = 0;
+pub const REG_R9: ::c_int = 1;
+pub const REG_R10: ::c_int = 2;
+pub const REG_R11: ::c_int = 3;
+pub const REG_R12: ::c_int = 4;
+pub const REG_R13: ::c_int = 5;
+pub const REG_R14: ::c_int = 6;
+pub const REG_R15: ::c_int = 7;
+pub const REG_RDI: ::c_int = 8;
+pub const REG_RSI: ::c_int = 9;
+pub const REG_RBP: ::c_int = 10;
+pub const REG_RBX: ::c_int = 11;
+pub const REG_RDX: ::c_int = 12;
+pub const REG_RAX: ::c_int = 13;
+pub const REG_RCX: ::c_int = 14;
+pub const REG_RSP: ::c_int = 15;
+pub const REG_RIP: ::c_int = 16;
+pub const REG_EFL: ::c_int = 17;
+pub const REG_CSGSFS: ::c_int = 18;
+pub const REG_ERR: ::c_int = 19;
+pub const REG_TRAPNO: ::c_int = 20;
+pub const REG_OLDMASK: ::c_int = 21;
+pub const REG_CR2: ::c_int = 22;
+
 extern {
     pub fn getcontext(ucp: *mut ucontext_t) -> ::c_int;
     pub fn setcontext(ucp: *const ucontext_t) -> ::c_int;
diff --git a/rustc_deps/vendor/libc/src/unix/notbsd/mod.rs b/rustc_deps/vendor/libc/src/unix/notbsd/mod.rs
index 6ff0807..668c25f 100644
--- a/rustc_deps/vendor/libc/src/unix/notbsd/mod.rs
+++ b/rustc_deps/vendor/libc/src/unix/notbsd/mod.rs
@@ -1242,6 +1242,7 @@
                    flags: ::c_int) -> ::ssize_t;
     pub fn recvmsg(fd: ::c_int, msg: *mut ::msghdr, flags: ::c_int)
                    -> ::ssize_t;
+    pub fn uname(buf: *mut ::utsname) -> ::c_int;
 }
 
 cfg_if! {
diff --git a/rustc_deps/vendor/libc/src/unix/solaris/mod.rs b/rustc_deps/vendor/libc/src/unix/solaris/mod.rs
index c4ec111..c991e62 100644
--- a/rustc_deps/vendor/libc/src/unix/solaris/mod.rs
+++ b/rustc_deps/vendor/libc/src/unix/solaris/mod.rs
@@ -1466,4 +1466,5 @@
                  mode: *const c_char) -> *mut ::FILE;
 
     pub fn dup3(src: ::c_int, dst: ::c_int, flags: ::c_int) -> ::c_int;
+    pub fn uname(buf: *mut ::utsname) -> ::c_int;
 }
diff --git a/rustc_deps/vendor/libc/src/unix/uclibc/mod.rs b/rustc_deps/vendor/libc/src/unix/uclibc/mod.rs
index 9d8e97e..c04c22a 100644
--- a/rustc_deps/vendor/libc/src/unix/uclibc/mod.rs
+++ b/rustc_deps/vendor/libc/src/unix/uclibc/mod.rs
@@ -1953,6 +1953,7 @@
                link_name = "popen$UNIX2003")]
     pub fn popen(command: *const c_char,
                  mode: *const c_char) -> *mut ::FILE;
+    pub fn uname(buf: *mut ::utsname) -> ::c_int;
 }
 
 cfg_if! {
diff --git a/rustc_deps/vendor/rand-0.3.22/.cargo-checksum.json b/rustc_deps/vendor/rand-0.3.23/.cargo-checksum.json
similarity index 67%
rename from rustc_deps/vendor/rand-0.3.22/.cargo-checksum.json
rename to rustc_deps/vendor/rand-0.3.23/.cargo-checksum.json
index 50d2f7c..6660525 100644
--- a/rustc_deps/vendor/rand-0.3.22/.cargo-checksum.json
+++ b/rustc_deps/vendor/rand-0.3.23/.cargo-checksum.json
@@ -1 +1 @@
-{"files":{"Cargo.toml":"8728561c8ff137b00ca07c2d2040b81bb5bc6360a17d1a7d371420ccb2fc2fe7","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"6485b8ed310d3f0340bf1ad1f47645069ce4069dcc6bb46c7d5c6faf41de1fdb","README.md":"73faa8e1032381321d2f8746976d3780d26e122d43f755080d9a67acdaa4ada2","appveyor.yml":"6bf2f0c8f17d2dc4957dd39aba9a88ced3130200cf847a76d47b6c8fdcc2cbd8","src/distributions/mod.rs":"7d75162ba315a9c5ccb6277bc949e5ffb1c9522cd380a0c31078b573ac885137","src/lib.rs":"15f68f5b31fc79db77ad1931ac85df15828382ad611b1684e4c1b56f2af093c9","src/rand_impls.rs":"958d0056a2c3804b187fc8e1d825a8335361fba2b129c165bd88709d5cdf595d"},"package":"15a732abf9d20f0ad8eeb6f909bf6868722d9a06e1e50802b6a70351f40b4eb1"}
\ No newline at end of file
+{"files":{"Cargo.toml":"d54d402f91f7dc326328315c44f7304366e7e5cc94019e2f824e5d2fb7af4e8f","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"6485b8ed310d3f0340bf1ad1f47645069ce4069dcc6bb46c7d5c6faf41de1fdb","README.md":"73faa8e1032381321d2f8746976d3780d26e122d43f755080d9a67acdaa4ada2","appveyor.yml":"6bf2f0c8f17d2dc4957dd39aba9a88ced3130200cf847a76d47b6c8fdcc2cbd8","src/distributions/mod.rs":"7d75162ba315a9c5ccb6277bc949e5ffb1c9522cd380a0c31078b573ac885137","src/lib.rs":"15f68f5b31fc79db77ad1931ac85df15828382ad611b1684e4c1b56f2af093c9","src/rand_impls.rs":"958d0056a2c3804b187fc8e1d825a8335361fba2b129c165bd88709d5cdf595d"},"package":"64ac302d8f83c0c1974bf758f6b041c6c8ada916fbb44a609158ca8b064cc76c"}
\ No newline at end of file
diff --git a/rustc_deps/vendor/rand-0.3.22/Cargo.toml b/rustc_deps/vendor/rand-0.3.23/Cargo.toml
similarity index 90%
rename from rustc_deps/vendor/rand-0.3.22/Cargo.toml
rename to rustc_deps/vendor/rand-0.3.23/Cargo.toml
index 31b6f52..7ffb232 100644
--- a/rustc_deps/vendor/rand-0.3.22/Cargo.toml
+++ b/rustc_deps/vendor/rand-0.3.23/Cargo.toml
@@ -12,7 +12,7 @@
 
 [package]
 name = "rand"
-version = "0.3.22"
+version = "0.3.23"
 authors = ["The Rust Project Developers"]
 description = "Random number generators and other randomness functionality.\n"
 homepage = "https://github.com/rust-lang-nursery/rand"
@@ -34,5 +34,3 @@
 [features]
 i128_support = []
 nightly = ["i128_support"]
-[target."cfg(target_os = \"fuchsia\")".dependencies.fuchsia-zircon]
-version = "0.3.2"
diff --git a/rustc_deps/vendor/rand-0.3.22/LICENSE-APACHE b/rustc_deps/vendor/rand-0.3.23/LICENSE-APACHE
similarity index 100%
rename from rustc_deps/vendor/rand-0.3.22/LICENSE-APACHE
rename to rustc_deps/vendor/rand-0.3.23/LICENSE-APACHE
diff --git a/rustc_deps/vendor/rand-0.3.22/LICENSE-MIT b/rustc_deps/vendor/rand-0.3.23/LICENSE-MIT
similarity index 100%
rename from rustc_deps/vendor/rand-0.3.22/LICENSE-MIT
rename to rustc_deps/vendor/rand-0.3.23/LICENSE-MIT
diff --git a/rustc_deps/vendor/rand-0.3.22/README.md b/rustc_deps/vendor/rand-0.3.23/README.md
similarity index 100%
rename from rustc_deps/vendor/rand-0.3.22/README.md
rename to rustc_deps/vendor/rand-0.3.23/README.md
diff --git a/rustc_deps/vendor/rand-0.3.22/appveyor.yml b/rustc_deps/vendor/rand-0.3.23/appveyor.yml
similarity index 100%
rename from rustc_deps/vendor/rand-0.3.22/appveyor.yml
rename to rustc_deps/vendor/rand-0.3.23/appveyor.yml
diff --git a/rustc_deps/vendor/rand-0.3.22/src/distributions/mod.rs b/rustc_deps/vendor/rand-0.3.23/src/distributions/mod.rs
similarity index 100%
rename from rustc_deps/vendor/rand-0.3.22/src/distributions/mod.rs
rename to rustc_deps/vendor/rand-0.3.23/src/distributions/mod.rs
diff --git a/rustc_deps/vendor/rand-0.3.22/src/lib.rs b/rustc_deps/vendor/rand-0.3.23/src/lib.rs
similarity index 100%
rename from rustc_deps/vendor/rand-0.3.22/src/lib.rs
rename to rustc_deps/vendor/rand-0.3.23/src/lib.rs
diff --git a/rustc_deps/vendor/rand-0.3.22/src/rand_impls.rs b/rustc_deps/vendor/rand-0.3.23/src/rand_impls.rs
similarity index 100%
rename from rustc_deps/vendor/rand-0.3.22/src/rand_impls.rs
rename to rustc_deps/vendor/rand-0.3.23/src/rand_impls.rs
diff --git a/rustc_deps/vendor/rand-0.4.3/.cargo-checksum.json b/rustc_deps/vendor/rand-0.4.6/.cargo-checksum.json
similarity index 80%
rename from rustc_deps/vendor/rand-0.4.3/.cargo-checksum.json
rename to rustc_deps/vendor/rand-0.4.6/.cargo-checksum.json
index 824131b..56e7916 100644
--- a/rustc_deps/vendor/rand-0.4.3/.cargo-checksum.json
+++ b/rustc_deps/vendor/rand-0.4.6/.cargo-checksum.json
@@ -1 +1 @@
-{"files":{"CHANGELOG.md":"460c7dbfdf227b4c725f7da8131fd51a54d0355b3c5804c0d388c70d3c1c49ec","Cargo.toml":"7d29da51fe4bf73964b3b3dea0af88040514569e2d184c9e8eb2f1746d540fb7","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"6485b8ed310d3f0340bf1ad1f47645069ce4069dcc6bb46c7d5c6faf41de1fdb","README.md":"fb8071c3bc1013107b16ebcb303f31ef614e81440f2d58a46bfb9ff1e311b792","appveyor.yml":"8796156caf7041ef2a43f7a313df21ea639de3f2563b6181bba1096b1c489f1b","benches/bench.rs":"35c4ab609f2a5f5aab6c52c257415258dc0780621b492b5a82bb12d048cab6db","benches/distributions/exponential.rs":"99cb59c013a0b6bb390d34c5649b341fc3b88ea7df0caf2470bdda8798f9fe3d","benches/distributions/gamma.rs":"3533f311e4b55d743c5b01a7eb6529c94fd97726ef6702a6372f914f5f33666b","benches/distributions/mod.rs":"0028f1cb96f61152ed5b49a4fe91227d809ef6d19035592c36032a538af7f95e","benches/distributions/normal.rs":"4e10c18cb583ccb96301ea953c8e0aa9ee3b6662060271d1b8d19ca23364dc6b","benches/generators.rs":"aaa2f1dbfb399df8323d8a5796b92add6210cd5f0f1d916895ffdd81d60f812b","benches/misc.rs":"bd2f7c5a16f0fcb59022d5aeef66ed3c94e89ebf6c06667851dd23d0b1595504","src/distributions/exponential.rs":"103c8412c8a581b71835f1c00e40f6370e7702adf9d499243933a793d132d4e7","src/distributions/gamma.rs":"7a3f85c8daad4e56e334586ddb9fc9d83df3b0699738ed681a6c41e4ed455be9","src/distributions/mod.rs":"7943c4f83721bac816f831cca3b1574b6136932f7b4927aa6101130080ba62c5","src/distributions/normal.rs":"1562b43f80e4d5f83a8deb5af18de5a18dfeeeeda11fefc577da26672b14c949","src/distributions/range.rs":"a72a538d3ec4ed23f8d632aa55fd4793c464f24a5872d04ce8095ddd5db92115","src/distributions/ziggurat_tables.rs":"4eacf94fc352c91c455a6623de6a721e53842e1690f13a5662b6a79c7fbb73de","src/jitter.rs":"befd4b84bf753c107370b5b9498ad49611c220bdae2e4be9ee4398e9fa497042","src/lib.rs":"fbdc5f56ce1a52b15c85b0aa70a555c64be8f65d9f6f90fa0a3555d7862666b4","src/os.rs":"4860f165f68b7c978b0488c75d264cd9aaf54e7e4484036736ee5c4f5b6bd78d","src/prng/chacha.rs":"558007276f9c22933d39e5b8e853f4dd9533e823ed66df8dc1f23ad6925b1d51","src/prng/isaac.rs":"a8a2ee8b38d312663308e3bdf03376e342fd91330655f39144e5bba7392b2a8e","src/prng/isaac64.rs":"f28f7596ccab910db265b42671116abb9d2039fa8a421cbc75312bd0e7715d3a","src/prng/mod.rs":"c1a73450f49e819a20942a5b591f84a08ebb5ac33aa0f65b18ac1dc9a19a3084","src/prng/xorshift.rs":"606c308747293652c868b46dc3cad847d0c3717629c04ba75681c887c7634114","src/rand_impls.rs":"e1f27077fc13d5855bb66235f8ccfb216e116337eb38424d9c30c090e112215c","src/read.rs":"bd0eb508a6b659dc578d546fc2f231484aed80c73cfe8c475e0d65c8d699a769","src/reseeding.rs":"a97b86387b87ea1adc5262ddea480fe735c9c2a86762abaace29119022ac9f6e","src/seq.rs":"76dd58af0f580aed2721c393a5c036322186dc7cb3b4abed33436620c7c49288","utils/ziggurat_tables.py":"a9fc0a2fdae9b5c798c238788f94b720c156e13fd96f2356c409aa533191eb94"},"package":"8356f47b32624fef5b3301c1be97e5944ecdd595409cc5da11d05f211db6cfbd"}
\ No newline at end of file
+{"files":{"CHANGELOG.md":"f5e9c71d4123971f9f6c54eed8837245e6cac4b610c9d23b680fa95538946142","Cargo.toml":"4c770ee471e19f4a453a36d76479f9a530987058b793c735cd7a2bcf937d7edb","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"6485b8ed310d3f0340bf1ad1f47645069ce4069dcc6bb46c7d5c6faf41de1fdb","README.md":"fb8071c3bc1013107b16ebcb303f31ef614e81440f2d58a46bfb9ff1e311b792","appveyor.yml":"8796156caf7041ef2a43f7a313df21ea639de3f2563b6181bba1096b1c489f1b","benches/bench.rs":"35c4ab609f2a5f5aab6c52c257415258dc0780621b492b5a82bb12d048cab6db","benches/distributions/exponential.rs":"99cb59c013a0b6bb390d34c5649b341fc3b88ea7df0caf2470bdda8798f9fe3d","benches/distributions/gamma.rs":"3533f311e4b55d743c5b01a7eb6529c94fd97726ef6702a6372f914f5f33666b","benches/distributions/mod.rs":"0028f1cb96f61152ed5b49a4fe91227d809ef6d19035592c36032a538af7f95e","benches/distributions/normal.rs":"4e10c18cb583ccb96301ea953c8e0aa9ee3b6662060271d1b8d19ca23364dc6b","benches/generators.rs":"aaa2f1dbfb399df8323d8a5796b92add6210cd5f0f1d916895ffdd81d60f812b","benches/misc.rs":"bd2f7c5a16f0fcb59022d5aeef66ed3c94e89ebf6c06667851dd23d0b1595504","src/distributions/exponential.rs":"103c8412c8a581b71835f1c00e40f6370e7702adf9d499243933a793d132d4e7","src/distributions/gamma.rs":"7a3f85c8daad4e56e334586ddb9fc9d83df3b0699738ed681a6c41e4ed455be9","src/distributions/mod.rs":"7943c4f83721bac816f831cca3b1574b6136932f7b4927aa6101130080ba62c5","src/distributions/normal.rs":"1562b43f80e4d5f83a8deb5af18de5a18dfeeeeda11fefc577da26672b14c949","src/distributions/range.rs":"a72a538d3ec4ed23f8d632aa55fd4793c464f24a5872d04ce8095ddd5db92115","src/distributions/ziggurat_tables.rs":"4eacf94fc352c91c455a6623de6a721e53842e1690f13a5662b6a79c7fbb73de","src/jitter.rs":"befd4b84bf753c107370b5b9498ad49611c220bdae2e4be9ee4398e9fa497042","src/lib.rs":"f9f4d15c2ce67f9ba21261a4bc76599523b930698cee2ae1e37d01f0d2ba834e","src/os.rs":"bbba4481432ae0f19bafb2168af5e7e1a858547ff8a7f8996286ea1b2a951158","src/prng/chacha.rs":"558007276f9c22933d39e5b8e853f4dd9533e823ed66df8dc1f23ad6925b1d51","src/prng/isaac.rs":"a8a2ee8b38d312663308e3bdf03376e342fd91330655f39144e5bba7392b2a8e","src/prng/isaac64.rs":"f28f7596ccab910db265b42671116abb9d2039fa8a421cbc75312bd0e7715d3a","src/prng/mod.rs":"c1a73450f49e819a20942a5b591f84a08ebb5ac33aa0f65b18ac1dc9a19a3084","src/prng/xorshift.rs":"606c308747293652c868b46dc3cad847d0c3717629c04ba75681c887c7634114","src/rand_impls.rs":"e1f27077fc13d5855bb66235f8ccfb216e116337eb38424d9c30c090e112215c","src/read.rs":"bd0eb508a6b659dc578d546fc2f231484aed80c73cfe8c475e0d65c8d699a769","src/reseeding.rs":"a97b86387b87ea1adc5262ddea480fe735c9c2a86762abaace29119022ac9f6e","src/seq.rs":"76dd58af0f580aed2721c393a5c036322186dc7cb3b4abed33436620c7c49288","utils/ziggurat_tables.py":"a9fc0a2fdae9b5c798c238788f94b720c156e13fd96f2356c409aa533191eb94"},"package":"552840b97013b1a26992c11eac34bdd778e464601a4c2054b5f0bff7c6761293"}
\ No newline at end of file
diff --git a/rustc_deps/vendor/rand-0.4.3/CHANGELOG.md b/rustc_deps/vendor/rand-0.4.6/CHANGELOG.md
similarity index 97%
rename from rustc_deps/vendor/rand-0.4.3/CHANGELOG.md
rename to rustc_deps/vendor/rand-0.4.6/CHANGELOG.md
index 1811b45..aa4c293 100644
--- a/rustc_deps/vendor/rand-0.4.3/CHANGELOG.md
+++ b/rustc_deps/vendor/rand-0.4.6/CHANGELOG.md
@@ -4,6 +4,14 @@
 The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
 and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
 
+## [0.4.5] - 2019-01-25
+### Platforms
+- Fuchsia: Replaced fuchsia-zircon with fuchsia-cprng
+
+## [0.4.4] - 2019-01-06
+### Added
+- SGX support
+
 ## [0.4.3] - 2018-08-16
 ### Fixed
 - Use correct syscall number for PowerPC (#589)
diff --git a/rustc_deps/vendor/rand-0.4.3/Cargo.toml b/rustc_deps/vendor/rand-0.4.6/Cargo.toml
similarity index 81%
rename from rustc_deps/vendor/rand-0.4.3/Cargo.toml
rename to rustc_deps/vendor/rand-0.4.6/Cargo.toml
index 4f80003..64d240c 100644
--- a/rustc_deps/vendor/rand-0.4.3/Cargo.toml
+++ b/rustc_deps/vendor/rand-0.4.6/Cargo.toml
@@ -12,7 +12,7 @@
 
 [package]
 name = "rand"
-version = "0.4.3"
+version = "0.4.6"
 authors = ["The Rust Project Developers"]
 description = "Random number generators and other randomness functionality.\n"
 homepage = "https://github.com/rust-lang-nursery/rand"
@@ -29,8 +29,14 @@
 i128_support = []
 nightly = ["i128_support"]
 std = ["libc"]
-[target."cfg(target_os = \"fuchsia\")".dependencies.fuchsia-zircon]
-version = "0.3.2"
+[target."cfg(target_env = \"sgx\")".dependencies.rand_core]
+version = "0.3"
+default-features = false
+
+[target."cfg(target_env = \"sgx\")".dependencies.rdrand]
+version = "0.4.0"
+[target."cfg(target_os = \"fuchsia\")".dependencies.fuchsia-cprng]
+version = "0.1.0"
 [target."cfg(unix)".dependencies.libc]
 version = "0.2"
 optional = true
diff --git a/rustc_deps/vendor/rand-0.4.3/LICENSE-APACHE b/rustc_deps/vendor/rand-0.4.6/LICENSE-APACHE
similarity index 100%
rename from rustc_deps/vendor/rand-0.4.3/LICENSE-APACHE
rename to rustc_deps/vendor/rand-0.4.6/LICENSE-APACHE
diff --git a/rustc_deps/vendor/rand-0.4.3/LICENSE-MIT b/rustc_deps/vendor/rand-0.4.6/LICENSE-MIT
similarity index 100%
rename from rustc_deps/vendor/rand-0.4.3/LICENSE-MIT
rename to rustc_deps/vendor/rand-0.4.6/LICENSE-MIT
diff --git a/rustc_deps/vendor/rand-0.4.3/README.md b/rustc_deps/vendor/rand-0.4.6/README.md
similarity index 100%
rename from rustc_deps/vendor/rand-0.4.3/README.md
rename to rustc_deps/vendor/rand-0.4.6/README.md
diff --git a/rustc_deps/vendor/rand-0.4.3/appveyor.yml b/rustc_deps/vendor/rand-0.4.6/appveyor.yml
similarity index 100%
rename from rustc_deps/vendor/rand-0.4.3/appveyor.yml
rename to rustc_deps/vendor/rand-0.4.6/appveyor.yml
diff --git a/rustc_deps/vendor/rand-0.4.3/benches/bench.rs b/rustc_deps/vendor/rand-0.4.6/benches/bench.rs
similarity index 100%
rename from rustc_deps/vendor/rand-0.4.3/benches/bench.rs
rename to rustc_deps/vendor/rand-0.4.6/benches/bench.rs
diff --git a/rustc_deps/vendor/rand-0.4.3/benches/distributions/exponential.rs b/rustc_deps/vendor/rand-0.4.6/benches/distributions/exponential.rs
similarity index 100%
rename from rustc_deps/vendor/rand-0.4.3/benches/distributions/exponential.rs
rename to rustc_deps/vendor/rand-0.4.6/benches/distributions/exponential.rs
diff --git a/rustc_deps/vendor/rand-0.4.3/benches/distributions/gamma.rs b/rustc_deps/vendor/rand-0.4.6/benches/distributions/gamma.rs
similarity index 100%
rename from rustc_deps/vendor/rand-0.4.3/benches/distributions/gamma.rs
rename to rustc_deps/vendor/rand-0.4.6/benches/distributions/gamma.rs
diff --git a/rustc_deps/vendor/rand-0.4.3/benches/distributions/mod.rs b/rustc_deps/vendor/rand-0.4.6/benches/distributions/mod.rs
similarity index 100%
rename from rustc_deps/vendor/rand-0.4.3/benches/distributions/mod.rs
rename to rustc_deps/vendor/rand-0.4.6/benches/distributions/mod.rs
diff --git a/rustc_deps/vendor/rand-0.4.3/benches/distributions/normal.rs b/rustc_deps/vendor/rand-0.4.6/benches/distributions/normal.rs
similarity index 100%
rename from rustc_deps/vendor/rand-0.4.3/benches/distributions/normal.rs
rename to rustc_deps/vendor/rand-0.4.6/benches/distributions/normal.rs
diff --git a/rustc_deps/vendor/rand-0.4.3/benches/generators.rs b/rustc_deps/vendor/rand-0.4.6/benches/generators.rs
similarity index 100%
rename from rustc_deps/vendor/rand-0.4.3/benches/generators.rs
rename to rustc_deps/vendor/rand-0.4.6/benches/generators.rs
diff --git a/rustc_deps/vendor/rand-0.4.3/benches/misc.rs b/rustc_deps/vendor/rand-0.4.6/benches/misc.rs
similarity index 100%
rename from rustc_deps/vendor/rand-0.4.3/benches/misc.rs
rename to rustc_deps/vendor/rand-0.4.6/benches/misc.rs
diff --git a/rustc_deps/vendor/rand-0.4.3/src/distributions/exponential.rs b/rustc_deps/vendor/rand-0.4.6/src/distributions/exponential.rs
similarity index 100%
rename from rustc_deps/vendor/rand-0.4.3/src/distributions/exponential.rs
rename to rustc_deps/vendor/rand-0.4.6/src/distributions/exponential.rs
diff --git a/rustc_deps/vendor/rand-0.4.3/src/distributions/gamma.rs b/rustc_deps/vendor/rand-0.4.6/src/distributions/gamma.rs
similarity index 100%
rename from rustc_deps/vendor/rand-0.4.3/src/distributions/gamma.rs
rename to rustc_deps/vendor/rand-0.4.6/src/distributions/gamma.rs
diff --git a/rustc_deps/vendor/rand-0.4.3/src/distributions/mod.rs b/rustc_deps/vendor/rand-0.4.6/src/distributions/mod.rs
similarity index 100%
rename from rustc_deps/vendor/rand-0.4.3/src/distributions/mod.rs
rename to rustc_deps/vendor/rand-0.4.6/src/distributions/mod.rs
diff --git a/rustc_deps/vendor/rand-0.4.3/src/distributions/normal.rs b/rustc_deps/vendor/rand-0.4.6/src/distributions/normal.rs
similarity index 100%
rename from rustc_deps/vendor/rand-0.4.3/src/distributions/normal.rs
rename to rustc_deps/vendor/rand-0.4.6/src/distributions/normal.rs
diff --git a/rustc_deps/vendor/rand-0.4.3/src/distributions/range.rs b/rustc_deps/vendor/rand-0.4.6/src/distributions/range.rs
similarity index 100%
rename from rustc_deps/vendor/rand-0.4.3/src/distributions/range.rs
rename to rustc_deps/vendor/rand-0.4.6/src/distributions/range.rs
diff --git a/rustc_deps/vendor/rand-0.4.3/src/distributions/ziggurat_tables.rs b/rustc_deps/vendor/rand-0.4.6/src/distributions/ziggurat_tables.rs
similarity index 100%
rename from rustc_deps/vendor/rand-0.4.3/src/distributions/ziggurat_tables.rs
rename to rustc_deps/vendor/rand-0.4.6/src/distributions/ziggurat_tables.rs
diff --git a/rustc_deps/vendor/rand-0.4.3/src/jitter.rs b/rustc_deps/vendor/rand-0.4.6/src/jitter.rs
similarity index 100%
rename from rustc_deps/vendor/rand-0.4.3/src/jitter.rs
rename to rustc_deps/vendor/rand-0.4.6/src/jitter.rs
diff --git a/rustc_deps/vendor/rand-0.4.3/src/lib.rs b/rustc_deps/vendor/rand-0.4.6/src/lib.rs
similarity index 99%
rename from rustc_deps/vendor/rand-0.4.3/src/lib.rs
rename to rustc_deps/vendor/rand-0.4.6/src/lib.rs
index 7b22dd4..696ff6f 100644
--- a/rustc_deps/vendor/rand-0.4.3/src/lib.rs
+++ b/rustc_deps/vendor/rand-0.4.6/src/lib.rs
@@ -250,6 +250,12 @@
 #[cfg(feature="std")] extern crate std as core;
 #[cfg(all(feature = "alloc", not(feature="std")))] extern crate alloc;
 
+#[cfg(target_env = "sgx")]
+extern crate rdrand;
+
+#[cfg(target_env = "sgx")]
+extern crate rand_core;
+
 use core::marker;
 use core::mem;
 #[cfg(feature="std")] use std::cell::RefCell;
diff --git a/rustc_deps/vendor/rand-0.4.3/src/os.rs b/rustc_deps/vendor/rand-0.4.6/src/os.rs
similarity index 92%
rename from rustc_deps/vendor/rand-0.4.3/src/os.rs
rename to rustc_deps/vendor/rand-0.4.6/src/os.rs
index 10022fb..c33a8cb 100644
--- a/rustc_deps/vendor/rand-0.4.3/src/os.rs
+++ b/rustc_deps/vendor/rand-0.4.6/src/os.rs
@@ -11,7 +11,11 @@
 //! Interfaces to the operating system provided random number
 //! generators.
 
-use std::{io, mem, fmt};
+use std::{io, fmt};
+
+#[cfg(not(target_env = "sgx"))]
+use std::mem;
+
 use Rng;
 
 /// A random number generator that retrieves randomness straight from
@@ -53,12 +57,14 @@
     }
 }
 
+#[cfg(not(target_env = "sgx"))]
 fn next_u32(fill_buf: &mut FnMut(&mut [u8])) -> u32 {
     let mut buf: [u8; 4] = [0; 4];
     fill_buf(&mut buf);
     unsafe { mem::transmute::<[u8; 4], u32>(buf) }
 }
 
+#[cfg(not(target_env = "sgx"))]
 fn next_u64(fill_buf: &mut FnMut(&mut [u8])) -> u64 {
     let mut buf: [u8; 8] = [0; 8];
     fill_buf(&mut buf);
@@ -383,7 +389,7 @@
 
 #[cfg(target_os = "fuchsia")]
 mod imp {
-    extern crate fuchsia_zircon;
+    extern crate fuchsia_cprng;
 
     use std::io;
     use Rng;
@@ -407,15 +413,7 @@
             next_u64(&mut |v| self.fill_bytes(v))
         }
         fn fill_bytes(&mut self, v: &mut [u8]) {
-            for s in v.chunks_mut(fuchsia_zircon::sys::ZX_CPRNG_DRAW_MAX_LEN) {
-                let mut filled = 0;
-                while filled < s.len() {
-                    match fuchsia_zircon::cprng_draw(&mut s[filled..]) {
-                        Ok(actual) => filled += actual,
-                        Err(e) => panic!("cprng_draw failed: {:?}", e),
-                    };
-                }
-            }
+            fuchsia_cprng::cprng_draw(v);
         }
     }
 }
@@ -562,6 +560,47 @@
     }
 }
 
+#[cfg(target_env = "sgx")]
+mod imp {
+    use rdrand::RdRand;
+    use std::io;
+    use rand_core::RngCore;
+
+    pub struct OsRng{
+        gen: RdRand
+    }
+
+    impl OsRng {
+        pub fn new() -> io::Result<OsRng> {
+            match RdRand::new() {
+                Ok(rng) => Ok(OsRng { gen: rng }),
+                Err(_) => Err(io::Error::new(io::ErrorKind::Other, "Not supported"))
+            }
+        }
+
+        pub(crate) fn next_u32(&mut self) -> u32 {
+            match self.gen.try_next_u32() {
+                Some(n) => n,
+                None => panic!("Non-recoverable hardware failure has occured")
+            }
+        }
+
+        pub(crate) fn next_u64(&mut self) -> u64 {
+            match self.gen.try_next_u64() {
+                Some(n) => n,
+                None => panic!("Non-recoverable hardware failure has occured")
+            }
+        }
+
+        pub(crate) fn fill_bytes(&mut self, v: &mut [u8]) {
+            match self.gen.try_fill_bytes(v) {
+                Ok(_) => {},
+                Err(_) => panic!("Non-recoverable hardware failure has occured")
+            }
+        }
+    }
+}
+
 #[cfg(test)]
 mod test {
     use std::sync::mpsc::channel;
diff --git a/rustc_deps/vendor/rand-0.4.3/src/prng/chacha.rs b/rustc_deps/vendor/rand-0.4.6/src/prng/chacha.rs
similarity index 100%
rename from rustc_deps/vendor/rand-0.4.3/src/prng/chacha.rs
rename to rustc_deps/vendor/rand-0.4.6/src/prng/chacha.rs
diff --git a/rustc_deps/vendor/rand-0.4.3/src/prng/isaac.rs b/rustc_deps/vendor/rand-0.4.6/src/prng/isaac.rs
similarity index 100%
rename from rustc_deps/vendor/rand-0.4.3/src/prng/isaac.rs
rename to rustc_deps/vendor/rand-0.4.6/src/prng/isaac.rs
diff --git a/rustc_deps/vendor/rand-0.4.3/src/prng/isaac64.rs b/rustc_deps/vendor/rand-0.4.6/src/prng/isaac64.rs
similarity index 100%
rename from rustc_deps/vendor/rand-0.4.3/src/prng/isaac64.rs
rename to rustc_deps/vendor/rand-0.4.6/src/prng/isaac64.rs
diff --git a/rustc_deps/vendor/rand-0.4.3/src/prng/mod.rs b/rustc_deps/vendor/rand-0.4.6/src/prng/mod.rs
similarity index 100%
rename from rustc_deps/vendor/rand-0.4.3/src/prng/mod.rs
rename to rustc_deps/vendor/rand-0.4.6/src/prng/mod.rs
diff --git a/rustc_deps/vendor/rand-0.4.3/src/prng/xorshift.rs b/rustc_deps/vendor/rand-0.4.6/src/prng/xorshift.rs
similarity index 100%
rename from rustc_deps/vendor/rand-0.4.3/src/prng/xorshift.rs
rename to rustc_deps/vendor/rand-0.4.6/src/prng/xorshift.rs
diff --git a/rustc_deps/vendor/rand-0.4.3/src/rand_impls.rs b/rustc_deps/vendor/rand-0.4.6/src/rand_impls.rs
similarity index 100%
rename from rustc_deps/vendor/rand-0.4.3/src/rand_impls.rs
rename to rustc_deps/vendor/rand-0.4.6/src/rand_impls.rs
diff --git a/rustc_deps/vendor/rand-0.4.3/src/read.rs b/rustc_deps/vendor/rand-0.4.6/src/read.rs
similarity index 100%
rename from rustc_deps/vendor/rand-0.4.3/src/read.rs
rename to rustc_deps/vendor/rand-0.4.6/src/read.rs
diff --git a/rustc_deps/vendor/rand-0.4.3/src/reseeding.rs b/rustc_deps/vendor/rand-0.4.6/src/reseeding.rs
similarity index 100%
rename from rustc_deps/vendor/rand-0.4.3/src/reseeding.rs
rename to rustc_deps/vendor/rand-0.4.6/src/reseeding.rs
diff --git a/rustc_deps/vendor/rand-0.4.3/src/seq.rs b/rustc_deps/vendor/rand-0.4.6/src/seq.rs
similarity index 100%
rename from rustc_deps/vendor/rand-0.4.3/src/seq.rs
rename to rustc_deps/vendor/rand-0.4.6/src/seq.rs
diff --git a/rustc_deps/vendor/rand-0.4.3/utils/ziggurat_tables.py b/rustc_deps/vendor/rand-0.4.6/utils/ziggurat_tables.py
similarity index 100%
rename from rustc_deps/vendor/rand-0.4.3/utils/ziggurat_tables.py
rename to rustc_deps/vendor/rand-0.4.6/utils/ziggurat_tables.py
diff --git a/rustc_deps/vendor/rand-0.5.5/.cargo-checksum.json b/rustc_deps/vendor/rand-0.5.6/.cargo-checksum.json
similarity index 84%
rename from rustc_deps/vendor/rand-0.5.5/.cargo-checksum.json
rename to rustc_deps/vendor/rand-0.5.6/.cargo-checksum.json
index faa2555..a5c9a91 100644
--- a/rustc_deps/vendor/rand-0.5.5/.cargo-checksum.json
+++ b/rustc_deps/vendor/rand-0.5.6/.cargo-checksum.json
@@ -1 +1 @@
-{"files":{"CHANGELOG.md":"77575727dec69456b3a9788193c8d583f87b8b6735933b177dff766a47abd8d6","CONTRIBUTING.md":"ce1d116f2991f195479a217ecad883e65812d739476ce313adbbed16425e9730","Cargo.toml":"7c55ef13822709e0059ce4145523a07b0879bf1011834c673a978fa6447bbbdf","LICENSE-APACHE":"aaff376532ea30a0cd5330b9502ad4a4c8bf769c539c87ffe78819d188a18ebf","LICENSE-MIT":"6485b8ed310d3f0340bf1ad1f47645069ce4069dcc6bb46c7d5c6faf41de1fdb","README.md":"2a9b60793f4b06217710ba574fb266850f64d265359c00d06ab05e0e3f4b7bb3","UPDATING.md":"995b503e4e25662c63df1710ca557e9688e1095644a4de80c6d19a2aa4281f2d","appveyor.yml":"e72b9bf8fa81ec7bc8939da12f51df6de946b93246542cf1f538ff1119497de6","benches/distributions.rs":"041c5adb223ee3a42bf6d5841e123ed1ea24838463bf88c29a5cb5a5dcfb320b","benches/generators.rs":"ef5e38c2462f9fb6dfeb7892061123b668826404a4546463bf34a8a939b39d1b","benches/misc.rs":"674e06347bc95cdd14588fefa673dbbc52d043b8e93d2bd56ee2fc9ad030d570","examples/monte-carlo.rs":"5b52e0dff8b2c29b2037c1f93f703e1c203d05b884640db99520137307fd9d6e","examples/monty-hall.rs":"d4873d567a606822dcb2be7e06517144f44d0d0ec39990751756b6265acaa88c","src/distributions/bernoulli.rs":"3a8dbab7dc97e6ad8d3225857dd6413e44a78d49ff870c25b1cd2c3bf7fdb6c3","src/distributions/binomial.rs":"38e46f348097920583707d86ec30522fb816355f216fd2a97fb427a5ed03c860","src/distributions/cauchy.rs":"a075e8e4d181bac25136a80f2af6cdc8b6d60c6d16df5b67a5181ea00ae3a34e","src/distributions/exponential.rs":"1702c7640d6027c49913d7e46b12c292646f9f4007ef74ba238c582de47014ee","src/distributions/float.rs":"0d0e79423d002a3187a7dec73e11e5acd9060590e71a3e39ca44375cafc687d4","src/distributions/gamma.rs":"8763faa2f6a244ea95d5af2b1e48ec8ddd1983eb4e170cf873c513fc8bc0746c","src/distributions/integer.rs":"a9c9edda09a457831c06e93ce94e7074af5bf97fd663a940b2f09ea21b1106a9","src/distributions/log_gamma.rs":"9f1fda43162c3f6184af15e9fabf3475de7e4e2e46412e7ae1480de1c7e5a68e","src/distributions/mod.rs":"3b7d190ce0d0c60fabac2902538116af27c5fa9291899287d281e2a16a8078bb","src/distributions/normal.rs":"987dc08c94e33f4f07e227d3b887d3cb522ddc6439bb93adcd0daf9b64097900","src/distributions/other.rs":"9962a738ed861d6c59e46272401290eca4237862127b3a143c7865616d9c1bed","src/distributions/pareto.rs":"ba207487d655295db7a566fec97ed636f0bcf4e50642138da553fd58e613cefe","src/distributions/poisson.rs":"3a44644936dea768ef83b45c9be86626356c67fc72f48f10d72111428ad77ddf","src/distributions/uniform.rs":"6cc7b9916e72a5807a9f7fdd90cb2944e9d175570758a507d6ce5779abda5a45","src/distributions/ziggurat_tables.rs":"4757d144fd1fc13fc0118e073f9ecf2a3cc94144a254a6633900705c3d9f7db3","src/lib.rs":"49648af51a5d2a457a98cf6a5c2cf8c54b5e09f6af4f56d34b648d4ab115b6c7","src/prelude.rs":"a2f76c76bc2c7822bb4ce67ba13b076305b434a542aaa5f07b67f66f65e3e8cc","src/prng/chacha.rs":"f8659eb5beceb19e582f81050584007f6893b537da60e697fa04b1302a1e161f","src/prng/hc128.rs":"0b44d4877159ee82109fcd4415635db6baf27db1381598b0f18cecb7841c975c","src/prng/isaac.rs":"687ba5356daa8a18c91f652756d8fdacbcd87a20464a1e98802388ce7a280073","src/prng/isaac64.rs":"e5f4d7b78e6492724647bbbf5c42fcb06fe4f4269dd5682c50cac36c10ce0829","src/prng/isaac_array.rs":"9371fcd04f29aa21b10a6bba76949853d8a80b72fbb5c61ba9b0d9db8d6bbb3c","src/prng/mod.rs":"1055528c5755d280ef9e420615e69dde35f8267c7cf20d178b75145a722ad462","src/prng/xorshift.rs":"dacb87577d3faafe5a5333c7e4eae6cab5a9f23eef68069a9b7195dfd74a2901","src/rngs/adapter/mod.rs":"1f956553588693682d29be3a61385a6738d0c682719138a32460407aa626d5a3","src/rngs/adapter/read.rs":"72000e758119093ca090b281a5d2e76981e218175162c8502ceaff021b706198","src/rngs/adapter/reseeding.rs":"0b0ad2f47fba9d5aa787c7c2284d7f0dc9464830a63a3347a63270c011b1a1a5","src/rngs/entropy.rs":"8024dde0ae9fa5a87235c7fb09568c59f2a1fcab86324992192ed3e6c5eed7eb","src/rngs/jitter.rs":"24797e2fb6c7f2fa896b824591a74841fe1e5da980725161ab03882404ffd13a","src/rngs/mock.rs":"5ce40a4da78a623dd379035ccb2bc58e713508d0db0e89098dc362f7d7fbb4e3","src/rngs/mod.rs":"a6d2fba84dd76a96f43ba4a47b7ad067625f3acaeb3c532edbc82b9222f62a92","src/rngs/os.rs":"cb94a0b54e47022b2e9b58b45e0196785c61d083760333276226da435cc040d9","src/rngs/small.rs":"a6d51c0066e225bcab8a563b26a0f1b8a555ef1e3aca20210b6cd38513f08c8a","src/rngs/std.rs":"a38628a9bb2ed68daa9f9288380f274713f035b27f287e67a310c5bb4cb14f97","src/rngs/thread.rs":"645cfaa31458ad20d0bebc12a0f1aa4a6a3b00bcc6a446c5e232a14c6a396329","src/seq.rs":"124236e85d71c9cc7a8d065b45f0746cddc1a2af997d34abf664cfdab7354e81","tests/bool.rs":"b57dd7c6e597383f7f84a172cd29e85246475f2686159ca6aa61c52989f762ba","utils/ci/install.sh":"cbc29da047c6e516ff5d13731c8b07812fd40986e7b19b61a7c5deaf5d6ffdd0","utils/ci/script.sh":"309a982ecc8f5669cc1a9d0d67e0f743f3969f1a5a49e8285966ab5518767c43","utils/ziggurat_tables.py":"97d156574ad51465dd023ee63a3fbb52a5603963b09f3f30a50cdfd2bbf1a1e1"},"package":"e464cd887e869cddcae8792a4ee31d23c7edd516700695608f5b98c67ee0131c"}
\ No newline at end of file
+{"files":{"CHANGELOG.md":"f5372c19151008367e30b37ced248ed2aac4ba74294204cf657070f54d405aac","CONTRIBUTING.md":"ce1d116f2991f195479a217ecad883e65812d739476ce313adbbed16425e9730","Cargo.toml":"226ebec959d588987fb0006d0ad708dd2a21a48ab70fd4581079a13c1a513203","LICENSE-APACHE":"aaff376532ea30a0cd5330b9502ad4a4c8bf769c539c87ffe78819d188a18ebf","LICENSE-MIT":"6485b8ed310d3f0340bf1ad1f47645069ce4069dcc6bb46c7d5c6faf41de1fdb","README.md":"2a9b60793f4b06217710ba574fb266850f64d265359c00d06ab05e0e3f4b7bb3","UPDATING.md":"995b503e4e25662c63df1710ca557e9688e1095644a4de80c6d19a2aa4281f2d","appveyor.yml":"e72b9bf8fa81ec7bc8939da12f51df6de946b93246542cf1f538ff1119497de6","benches/distributions.rs":"041c5adb223ee3a42bf6d5841e123ed1ea24838463bf88c29a5cb5a5dcfb320b","benches/generators.rs":"ef5e38c2462f9fb6dfeb7892061123b668826404a4546463bf34a8a939b39d1b","benches/misc.rs":"674e06347bc95cdd14588fefa673dbbc52d043b8e93d2bd56ee2fc9ad030d570","examples/monte-carlo.rs":"5b52e0dff8b2c29b2037c1f93f703e1c203d05b884640db99520137307fd9d6e","examples/monty-hall.rs":"d4873d567a606822dcb2be7e06517144f44d0d0ec39990751756b6265acaa88c","src/distributions/bernoulli.rs":"3a8dbab7dc97e6ad8d3225857dd6413e44a78d49ff870c25b1cd2c3bf7fdb6c3","src/distributions/binomial.rs":"38e46f348097920583707d86ec30522fb816355f216fd2a97fb427a5ed03c860","src/distributions/cauchy.rs":"a075e8e4d181bac25136a80f2af6cdc8b6d60c6d16df5b67a5181ea00ae3a34e","src/distributions/exponential.rs":"1702c7640d6027c49913d7e46b12c292646f9f4007ef74ba238c582de47014ee","src/distributions/float.rs":"0d0e79423d002a3187a7dec73e11e5acd9060590e71a3e39ca44375cafc687d4","src/distributions/gamma.rs":"8763faa2f6a244ea95d5af2b1e48ec8ddd1983eb4e170cf873c513fc8bc0746c","src/distributions/integer.rs":"a9c9edda09a457831c06e93ce94e7074af5bf97fd663a940b2f09ea21b1106a9","src/distributions/log_gamma.rs":"9f1fda43162c3f6184af15e9fabf3475de7e4e2e46412e7ae1480de1c7e5a68e","src/distributions/mod.rs":"3b7d190ce0d0c60fabac2902538116af27c5fa9291899287d281e2a16a8078bb","src/distributions/normal.rs":"987dc08c94e33f4f07e227d3b887d3cb522ddc6439bb93adcd0daf9b64097900","src/distributions/other.rs":"9962a738ed861d6c59e46272401290eca4237862127b3a143c7865616d9c1bed","src/distributions/pareto.rs":"ba207487d655295db7a566fec97ed636f0bcf4e50642138da553fd58e613cefe","src/distributions/poisson.rs":"3a44644936dea768ef83b45c9be86626356c67fc72f48f10d72111428ad77ddf","src/distributions/uniform.rs":"6cc7b9916e72a5807a9f7fdd90cb2944e9d175570758a507d6ce5779abda5a45","src/distributions/ziggurat_tables.rs":"4757d144fd1fc13fc0118e073f9ecf2a3cc94144a254a6633900705c3d9f7db3","src/lib.rs":"1560e7529869bc73603410a76a9d9c434953288d06c9743c4dd0d4f5d7438b94","src/prelude.rs":"a2f76c76bc2c7822bb4ce67ba13b076305b434a542aaa5f07b67f66f65e3e8cc","src/prng/chacha.rs":"f8659eb5beceb19e582f81050584007f6893b537da60e697fa04b1302a1e161f","src/prng/hc128.rs":"0b44d4877159ee82109fcd4415635db6baf27db1381598b0f18cecb7841c975c","src/prng/isaac.rs":"e8b9ee17f39c38b51fd2baeedc130979a81ff4b963a1016f57e78ffc16fb0d3f","src/prng/isaac64.rs":"32a1fee407b95349ff115e7bd9768214f953664124e577f62388a7bc5c129051","src/prng/isaac_array.rs":"9371fcd04f29aa21b10a6bba76949853d8a80b72fbb5c61ba9b0d9db8d6bbb3c","src/prng/mod.rs":"1055528c5755d280ef9e420615e69dde35f8267c7cf20d178b75145a722ad462","src/prng/xorshift.rs":"dacb87577d3faafe5a5333c7e4eae6cab5a9f23eef68069a9b7195dfd74a2901","src/rngs/adapter/mod.rs":"1f956553588693682d29be3a61385a6738d0c682719138a32460407aa626d5a3","src/rngs/adapter/read.rs":"72000e758119093ca090b281a5d2e76981e218175162c8502ceaff021b706198","src/rngs/adapter/reseeding.rs":"0b0ad2f47fba9d5aa787c7c2284d7f0dc9464830a63a3347a63270c011b1a1a5","src/rngs/entropy.rs":"8024dde0ae9fa5a87235c7fb09568c59f2a1fcab86324992192ed3e6c5eed7eb","src/rngs/jitter.rs":"24797e2fb6c7f2fa896b824591a74841fe1e5da980725161ab03882404ffd13a","src/rngs/mock.rs":"5ce40a4da78a623dd379035ccb2bc58e713508d0db0e89098dc362f7d7fbb4e3","src/rngs/mod.rs":"a6d2fba84dd76a96f43ba4a47b7ad067625f3acaeb3c532edbc82b9222f62a92","src/rngs/os.rs":"cf38bed5e8af7e1f1838cf8d3d5abf00702fc05aee34dd3e7d1b6ab8f1bafa2c","src/rngs/small.rs":"a6d51c0066e225bcab8a563b26a0f1b8a555ef1e3aca20210b6cd38513f08c8a","src/rngs/std.rs":"a38628a9bb2ed68daa9f9288380f274713f035b27f287e67a310c5bb4cb14f97","src/rngs/thread.rs":"645cfaa31458ad20d0bebc12a0f1aa4a6a3b00bcc6a446c5e232a14c6a396329","src/seq.rs":"124236e85d71c9cc7a8d065b45f0746cddc1a2af997d34abf664cfdab7354e81","tests/bool.rs":"b57dd7c6e597383f7f84a172cd29e85246475f2686159ca6aa61c52989f762ba","utils/ci/install.sh":"cbc29da047c6e516ff5d13731c8b07812fd40986e7b19b61a7c5deaf5d6ffdd0","utils/ci/script.sh":"309a982ecc8f5669cc1a9d0d67e0f743f3969f1a5a49e8285966ab5518767c43","utils/ziggurat_tables.py":"97d156574ad51465dd023ee63a3fbb52a5603963b09f3f30a50cdfd2bbf1a1e1"},"package":"c618c47cd3ebd209790115ab837de41425723956ad3ce2e6a7f09890947cacb9"}
\ No newline at end of file
diff --git a/rustc_deps/vendor/rand-0.5.5/CHANGELOG.md b/rustc_deps/vendor/rand-0.5.6/CHANGELOG.md
similarity index 98%
rename from rustc_deps/vendor/rand-0.5.5/CHANGELOG.md
rename to rustc_deps/vendor/rand-0.5.6/CHANGELOG.md
index 84378f8..4a09a5d 100644
--- a/rustc_deps/vendor/rand-0.5.5/CHANGELOG.md
+++ b/rustc_deps/vendor/rand-0.5.6/CHANGELOG.md
@@ -8,22 +8,32 @@
 
 You may also find the [Update Guide](UPDATING.md) useful.
 
+
+## [0.5.6] - 2019-01-25
+### Platforms
+- Fuchsia: Replaced fuchsia-zircon with fuchsia-cprng
+
+
 ## [0.5.5] - 2018-08-07
 ### Documentation
 - Fix links in documentation (#582)
 
+
 ## [0.5.4] - 2018-07-11
 ### Platform support
 - Make `OsRng` work via WASM/stdweb for WebWorkers
 
+
 ## [0.5.3] - 2018-06-26
 ### Platform support
 - OpenBSD, Bitrig: fix compilation (broken in 0.5.1) (#530)
 
+
 ## [0.5.2] - 2018-06-18
 ### Platform support
 - Hide `OsRng` and `JitterRng` on unsupported platforms (#512; fixes #503).
 
+
 ## [0.5.1] - 2018-06-08
 
 ### New distributions
@@ -41,6 +51,7 @@
 - Linux, NetBSD, Solaris: read in blocking mode on first use in `fill_bytes`. (#484)
 - Fuchsia, CloudABI: fix compilation (broken in Rand 0.5). (#484)
 
+
 ## [0.5.0] - 2018-05-21
 
 ### Crate features and organisation
@@ -130,6 +141,11 @@
 - Implement `Uniform` distribution for `Duration`. (#427)
 
 
+## [0.4.3] - 2018-08-16
+### Fixed
+- Use correct syscall number for PowerPC (#589)
+
+
 ## [0.4.2] - 2018-01-06
 ### Changed
 - Use `winapi` on Windows
diff --git a/rustc_deps/vendor/rand-0.5.5/CONTRIBUTING.md b/rustc_deps/vendor/rand-0.5.6/CONTRIBUTING.md
similarity index 100%
rename from rustc_deps/vendor/rand-0.5.5/CONTRIBUTING.md
rename to rustc_deps/vendor/rand-0.5.6/CONTRIBUTING.md
diff --git a/rustc_deps/vendor/rand-0.5.5/Cargo.toml b/rustc_deps/vendor/rand-0.5.6/Cargo.toml
similarity index 93%
rename from rustc_deps/vendor/rand-0.5.5/Cargo.toml
rename to rustc_deps/vendor/rand-0.5.6/Cargo.toml
index 22f6971..32d6ef0 100644
--- a/rustc_deps/vendor/rand-0.5.5/Cargo.toml
+++ b/rustc_deps/vendor/rand-0.5.6/Cargo.toml
@@ -12,7 +12,7 @@
 
 [package]
 name = "rand"
-version = "0.5.5"
+version = "0.5.6"
 authors = ["The Rust Project Developers"]
 description = "Random number generators and other randomness functionality.\n"
 homepage = "https://crates.io/crates/rand"
@@ -29,7 +29,7 @@
 optional = true
 
 [dependencies.rand_core]
-version = "0.2"
+version = "0.3"
 default-features = false
 
 [dependencies.serde]
@@ -48,12 +48,12 @@
 i128_support = []
 nightly = ["i128_support"]
 serde1 = ["serde", "serde_derive", "rand_core/serde1"]
-std = ["rand_core/std", "alloc", "libc", "winapi", "cloudabi", "fuchsia-zircon"]
+std = ["rand_core/std", "alloc", "libc", "winapi", "cloudabi", "fuchsia-cprng"]
 [target."cfg(target_os = \"cloudabi\")".dependencies.cloudabi]
 version = "0.0.3"
 optional = true
-[target."cfg(target_os = \"fuchsia\")".dependencies.fuchsia-zircon]
-version = "0.3.2"
+[target."cfg(target_os = \"fuchsia\")".dependencies.fuchsia-cprng]
+version = "0.1.0"
 optional = true
 [target."cfg(unix)".dependencies.libc]
 version = "0.2"
diff --git a/rustc_deps/vendor/rand-0.5.5/LICENSE-APACHE b/rustc_deps/vendor/rand-0.5.6/LICENSE-APACHE
similarity index 100%
rename from rustc_deps/vendor/rand-0.5.5/LICENSE-APACHE
rename to rustc_deps/vendor/rand-0.5.6/LICENSE-APACHE
diff --git a/rustc_deps/vendor/rand-0.5.5/LICENSE-MIT b/rustc_deps/vendor/rand-0.5.6/LICENSE-MIT
similarity index 100%
rename from rustc_deps/vendor/rand-0.5.5/LICENSE-MIT
rename to rustc_deps/vendor/rand-0.5.6/LICENSE-MIT
diff --git a/rustc_deps/vendor/rand-0.5.5/README.md b/rustc_deps/vendor/rand-0.5.6/README.md
similarity index 100%
rename from rustc_deps/vendor/rand-0.5.5/README.md
rename to rustc_deps/vendor/rand-0.5.6/README.md
diff --git a/rustc_deps/vendor/rand-0.5.5/UPDATING.md b/rustc_deps/vendor/rand-0.5.6/UPDATING.md
similarity index 100%
rename from rustc_deps/vendor/rand-0.5.5/UPDATING.md
rename to rustc_deps/vendor/rand-0.5.6/UPDATING.md
diff --git a/rustc_deps/vendor/rand-0.5.5/appveyor.yml b/rustc_deps/vendor/rand-0.5.6/appveyor.yml
similarity index 100%
rename from rustc_deps/vendor/rand-0.5.5/appveyor.yml
rename to rustc_deps/vendor/rand-0.5.6/appveyor.yml
diff --git a/rustc_deps/vendor/rand-0.5.5/benches/distributions.rs b/rustc_deps/vendor/rand-0.5.6/benches/distributions.rs
similarity index 100%
rename from rustc_deps/vendor/rand-0.5.5/benches/distributions.rs
rename to rustc_deps/vendor/rand-0.5.6/benches/distributions.rs
diff --git a/rustc_deps/vendor/rand-0.5.5/benches/generators.rs b/rustc_deps/vendor/rand-0.5.6/benches/generators.rs
similarity index 100%
rename from rustc_deps/vendor/rand-0.5.5/benches/generators.rs
rename to rustc_deps/vendor/rand-0.5.6/benches/generators.rs
diff --git a/rustc_deps/vendor/rand-0.5.5/benches/misc.rs b/rustc_deps/vendor/rand-0.5.6/benches/misc.rs
similarity index 100%
rename from rustc_deps/vendor/rand-0.5.5/benches/misc.rs
rename to rustc_deps/vendor/rand-0.5.6/benches/misc.rs
diff --git a/rustc_deps/vendor/rand-0.5.5/examples/monte-carlo.rs b/rustc_deps/vendor/rand-0.5.6/examples/monte-carlo.rs
similarity index 100%
rename from rustc_deps/vendor/rand-0.5.5/examples/monte-carlo.rs
rename to rustc_deps/vendor/rand-0.5.6/examples/monte-carlo.rs
diff --git a/rustc_deps/vendor/rand-0.5.5/examples/monty-hall.rs b/rustc_deps/vendor/rand-0.5.6/examples/monty-hall.rs
similarity index 100%
rename from rustc_deps/vendor/rand-0.5.5/examples/monty-hall.rs
rename to rustc_deps/vendor/rand-0.5.6/examples/monty-hall.rs
diff --git a/rustc_deps/vendor/rand-0.5.5/src/distributions/bernoulli.rs b/rustc_deps/vendor/rand-0.5.6/src/distributions/bernoulli.rs
similarity index 100%
rename from rustc_deps/vendor/rand-0.5.5/src/distributions/bernoulli.rs
rename to rustc_deps/vendor/rand-0.5.6/src/distributions/bernoulli.rs
diff --git a/rustc_deps/vendor/rand-0.5.5/src/distributions/binomial.rs b/rustc_deps/vendor/rand-0.5.6/src/distributions/binomial.rs
similarity index 100%
rename from rustc_deps/vendor/rand-0.5.5/src/distributions/binomial.rs
rename to rustc_deps/vendor/rand-0.5.6/src/distributions/binomial.rs
diff --git a/rustc_deps/vendor/rand-0.5.5/src/distributions/cauchy.rs b/rustc_deps/vendor/rand-0.5.6/src/distributions/cauchy.rs
similarity index 100%
rename from rustc_deps/vendor/rand-0.5.5/src/distributions/cauchy.rs
rename to rustc_deps/vendor/rand-0.5.6/src/distributions/cauchy.rs
diff --git a/rustc_deps/vendor/rand-0.5.5/src/distributions/exponential.rs b/rustc_deps/vendor/rand-0.5.6/src/distributions/exponential.rs
similarity index 100%
rename from rustc_deps/vendor/rand-0.5.5/src/distributions/exponential.rs
rename to rustc_deps/vendor/rand-0.5.6/src/distributions/exponential.rs
diff --git a/rustc_deps/vendor/rand-0.5.5/src/distributions/float.rs b/rustc_deps/vendor/rand-0.5.6/src/distributions/float.rs
similarity index 100%
rename from rustc_deps/vendor/rand-0.5.5/src/distributions/float.rs
rename to rustc_deps/vendor/rand-0.5.6/src/distributions/float.rs
diff --git a/rustc_deps/vendor/rand-0.5.5/src/distributions/gamma.rs b/rustc_deps/vendor/rand-0.5.6/src/distributions/gamma.rs
similarity index 100%
rename from rustc_deps/vendor/rand-0.5.5/src/distributions/gamma.rs
rename to rustc_deps/vendor/rand-0.5.6/src/distributions/gamma.rs
diff --git a/rustc_deps/vendor/rand-0.5.5/src/distributions/integer.rs b/rustc_deps/vendor/rand-0.5.6/src/distributions/integer.rs
similarity index 100%
rename from rustc_deps/vendor/rand-0.5.5/src/distributions/integer.rs
rename to rustc_deps/vendor/rand-0.5.6/src/distributions/integer.rs
diff --git a/rustc_deps/vendor/rand-0.5.5/src/distributions/log_gamma.rs b/rustc_deps/vendor/rand-0.5.6/src/distributions/log_gamma.rs
similarity index 100%
rename from rustc_deps/vendor/rand-0.5.5/src/distributions/log_gamma.rs
rename to rustc_deps/vendor/rand-0.5.6/src/distributions/log_gamma.rs
diff --git a/rustc_deps/vendor/rand-0.5.5/src/distributions/mod.rs b/rustc_deps/vendor/rand-0.5.6/src/distributions/mod.rs
similarity index 100%
rename from rustc_deps/vendor/rand-0.5.5/src/distributions/mod.rs
rename to rustc_deps/vendor/rand-0.5.6/src/distributions/mod.rs
diff --git a/rustc_deps/vendor/rand-0.5.5/src/distributions/normal.rs b/rustc_deps/vendor/rand-0.5.6/src/distributions/normal.rs
similarity index 100%
rename from rustc_deps/vendor/rand-0.5.5/src/distributions/normal.rs
rename to rustc_deps/vendor/rand-0.5.6/src/distributions/normal.rs
diff --git a/rustc_deps/vendor/rand-0.5.5/src/distributions/other.rs b/rustc_deps/vendor/rand-0.5.6/src/distributions/other.rs
similarity index 100%
rename from rustc_deps/vendor/rand-0.5.5/src/distributions/other.rs
rename to rustc_deps/vendor/rand-0.5.6/src/distributions/other.rs
diff --git a/rustc_deps/vendor/rand-0.5.5/src/distributions/pareto.rs b/rustc_deps/vendor/rand-0.5.6/src/distributions/pareto.rs
similarity index 100%
rename from rustc_deps/vendor/rand-0.5.5/src/distributions/pareto.rs
rename to rustc_deps/vendor/rand-0.5.6/src/distributions/pareto.rs
diff --git a/rustc_deps/vendor/rand-0.5.5/src/distributions/poisson.rs b/rustc_deps/vendor/rand-0.5.6/src/distributions/poisson.rs
similarity index 100%
rename from rustc_deps/vendor/rand-0.5.5/src/distributions/poisson.rs
rename to rustc_deps/vendor/rand-0.5.6/src/distributions/poisson.rs
diff --git a/rustc_deps/vendor/rand-0.5.5/src/distributions/uniform.rs b/rustc_deps/vendor/rand-0.5.6/src/distributions/uniform.rs
similarity index 100%
rename from rustc_deps/vendor/rand-0.5.5/src/distributions/uniform.rs
rename to rustc_deps/vendor/rand-0.5.6/src/distributions/uniform.rs
diff --git a/rustc_deps/vendor/rand-0.5.5/src/distributions/ziggurat_tables.rs b/rustc_deps/vendor/rand-0.5.6/src/distributions/ziggurat_tables.rs
similarity index 100%
rename from rustc_deps/vendor/rand-0.5.5/src/distributions/ziggurat_tables.rs
rename to rustc_deps/vendor/rand-0.5.6/src/distributions/ziggurat_tables.rs
diff --git a/rustc_deps/vendor/rand-0.5.5/src/lib.rs b/rustc_deps/vendor/rand-0.5.6/src/lib.rs
similarity index 98%
rename from rustc_deps/vendor/rand-0.5.5/src/lib.rs
rename to rustc_deps/vendor/rand-0.5.6/src/lib.rs
index bbea5cb..a1eb469 100644
--- a/rustc_deps/vendor/rand-0.5.5/src/lib.rs
+++ b/rustc_deps/vendor/rand-0.5.6/src/lib.rs
@@ -224,7 +224,7 @@
 
 #![doc(html_logo_url = "https://www.rust-lang.org/logos/rust-logo-128x128-blk.png",
        html_favicon_url = "https://www.rust-lang.org/favicon.ico",
-       html_root_url = "https://docs.rs/rand/0.5.5")]
+       html_root_url = "https://docs.rs/rand/0.5.6")]
 
 #![deny(missing_docs)]
 #![deny(missing_debug_implementations)]
@@ -1061,21 +1061,7 @@
     }
 
     pub fn rng(seed: u64) -> TestRng<StdRng> {
-        // TODO: use from_hashable
-        let mut state = seed;
-        let mut seed = <StdRng as SeedableRng>::Seed::default();
-        for x in seed.iter_mut() {
-            // PCG algorithm
-            const MUL: u64 = 6364136223846793005;
-            const INC: u64 = 11634580027462260723;
-            let oldstate = state;
-            state = oldstate.wrapping_mul(MUL).wrapping_add(INC);
-
-            let xorshifted = (((oldstate >> 18) ^ oldstate) >> 27) as u32;
-            let rot = (oldstate >> 59) as u32;
-            *x = xorshifted.rotate_right(rot) as u8;
-        }
-        TestRng { inner: StdRng::from_seed(seed) }
+        TestRng { inner: StdRng::seed_from_u64(seed) }
     }
 
     #[test]
diff --git a/rustc_deps/vendor/rand-0.5.5/src/prelude.rs b/rustc_deps/vendor/rand-0.5.6/src/prelude.rs
similarity index 100%
rename from rustc_deps/vendor/rand-0.5.5/src/prelude.rs
rename to rustc_deps/vendor/rand-0.5.6/src/prelude.rs
diff --git a/rustc_deps/vendor/rand-0.5.5/src/prng/chacha.rs b/rustc_deps/vendor/rand-0.5.6/src/prng/chacha.rs
similarity index 100%
rename from rustc_deps/vendor/rand-0.5.5/src/prng/chacha.rs
rename to rustc_deps/vendor/rand-0.5.6/src/prng/chacha.rs
diff --git a/rustc_deps/vendor/rand-0.5.5/src/prng/hc128.rs b/rustc_deps/vendor/rand-0.5.6/src/prng/hc128.rs
similarity index 100%
rename from rustc_deps/vendor/rand-0.5.5/src/prng/hc128.rs
rename to rustc_deps/vendor/rand-0.5.6/src/prng/hc128.rs
diff --git a/rustc_deps/vendor/rand-0.5.5/src/prng/isaac.rs b/rustc_deps/vendor/rand-0.5.6/src/prng/isaac.rs
similarity index 96%
rename from rustc_deps/vendor/rand-0.5.5/src/prng/isaac.rs
rename to rustc_deps/vendor/rand-0.5.6/src/prng/isaac.rs
index d37856f..99c80d6 100644
--- a/rustc_deps/vendor/rand-0.5.5/src/prng/isaac.rs
+++ b/rustc_deps/vendor/rand-0.5.6/src/prng/isaac.rs
@@ -120,6 +120,13 @@
     fn from_seed(seed: Self::Seed) -> Self {
         IsaacRng(BlockRng::<IsaacCore>::from_seed(seed))
     }
+    
+    /// Create an ISAAC random number generator using an `u64` as seed.
+    /// If `seed == 0` this will produce the same stream of random numbers as
+    /// the reference implementation when used unseeded.
+    fn seed_from_u64(seed: u64) -> Self {
+        IsaacRng(BlockRng::<IsaacCore>::seed_from_u64(seed))
+    }
 
     fn from_rng<S: RngCore>(rng: S) -> Result<Self, Error> {
         BlockRng::<IsaacCore>::from_rng(rng).map(|rng| IsaacRng(rng))
@@ -133,14 +140,15 @@
     /// DEPRECATED. `IsaacRng::new_from_u64(0)` will produce identical results.
     #[deprecated(since="0.5.0", note="use the FromEntropy or SeedableRng trait")]
     pub fn new_unseeded() -> Self {
-        Self::new_from_u64(0)
+        Self::seed_from_u64(0)
     }
 
     /// Create an ISAAC random number generator using an `u64` as seed.
     /// If `seed == 0` this will produce the same stream of random numbers as
     /// the reference implementation when used unseeded.
+    #[deprecated(since="0.6.0", note="use SeedableRng::seed_from_u64 instead")]
     pub fn new_from_u64(seed: u64) -> Self {
-        IsaacRng(BlockRng::new(IsaacCore::new_from_u64(seed)))
+        Self::seed_from_u64(seed)
     }
 }
 
@@ -311,22 +319,6 @@
 
         Self { mem, a: w(0), b: w(0), c: w(0) }
     }
-
-    /// Create an ISAAC random number generator using an `u64` as seed.
-    /// If `seed == 0` this will produce the same stream of random numbers as
-    /// the reference implementation when used unseeded.
-    fn new_from_u64(seed: u64) -> Self {
-        let mut key = [w(0); RAND_SIZE];
-        key[0] = w(seed as u32);
-        key[1] = w((seed >> 32) as u32);
-        // Initialize with only one pass.
-        // A second pass does not improve the quality here, because all of the
-        // seed was already available in the first round.
-        // Not doing the second pass has the small advantage that if
-        // `seed == 0` this method produces exactly the same state as the
-        // reference implementation when used unseeded.
-        Self::init(key, 1)
-    }
 }
 
 impl SeedableRng for IsaacCore {
@@ -342,6 +334,22 @@
         }
         Self::init(seed_extended, 2)
     }
+    
+    /// Create an ISAAC random number generator using an `u64` as seed.
+    /// If `seed == 0` this will produce the same stream of random numbers as
+    /// the reference implementation when used unseeded.
+    fn seed_from_u64(seed: u64) -> Self {
+        let mut key = [w(0); RAND_SIZE];
+        key[0] = w(seed as u32);
+        key[1] = w((seed >> 32) as u32);
+        // Initialize with only one pass.
+        // A second pass does not improve the quality here, because all of the
+        // seed was already available in the first round.
+        // Not doing the second pass has the small advantage that if
+        // `seed == 0` this method produces exactly the same state as the
+        // reference implementation when used unseeded.
+        Self::init(key, 1)
+    }
 
     fn from_rng<R: RngCore>(mut rng: R) -> Result<Self, Error> {
         // Custom `from_rng` implementation that fills a seed with the same size
@@ -435,11 +443,11 @@
     #[test]
     fn test_isaac_new_uninitialized() {
         // Compare the results from initializing `IsaacRng` with
-        // `new_from_u64(0)`, to make sure it is the same as the reference
+        // `seed_from_u64(0)`, to make sure it is the same as the reference
         // implementation when used uninitialized.
         // Note: We only test the first 16 integers, not the full 256 of the
         // first block.
-        let mut rng = IsaacRng::new_from_u64(0);
+        let mut rng = IsaacRng::seed_from_u64(0);
         let mut results = [0u32; 16];
         for i in results.iter_mut() { *i = rng.next_u32(); }
         let expected: [u32; 16] = [
diff --git a/rustc_deps/vendor/rand-0.5.5/src/prng/isaac64.rs b/rustc_deps/vendor/rand-0.5.6/src/prng/isaac64.rs
similarity index 95%
rename from rustc_deps/vendor/rand-0.5.5/src/prng/isaac64.rs
rename to rustc_deps/vendor/rand-0.5.6/src/prng/isaac64.rs
index 1a7c69d..fb3156d 100644
--- a/rustc_deps/vendor/rand-0.5.5/src/prng/isaac64.rs
+++ b/rustc_deps/vendor/rand-0.5.6/src/prng/isaac64.rs
@@ -111,6 +111,13 @@
         Isaac64Rng(BlockRng64::<Isaac64Core>::from_seed(seed))
     }
 
+    /// Create an ISAAC random number generator using an `u64` as seed.
+    /// If `seed == 0` this will produce the same stream of random numbers as
+    /// the reference implementation when used unseeded.
+    fn seed_from_u64(seed: u64) -> Self {
+        Isaac64Rng(BlockRng64::<Isaac64Core>::seed_from_u64(seed))
+    }
+
     fn from_rng<S: RngCore>(rng: S) -> Result<Self, Error> {
         BlockRng64::<Isaac64Core>::from_rng(rng).map(|rng| Isaac64Rng(rng))
     }
@@ -123,14 +130,15 @@
     /// DEPRECATED. `Isaac64Rng::new_from_u64(0)` will produce identical results.
     #[deprecated(since="0.5.0", note="use the FromEntropy or SeedableRng trait")]
     pub fn new_unseeded() -> Self {
-        Self::new_from_u64(0)
+        Self::seed_from_u64(0)
     }
 
     /// Create an ISAAC-64 random number generator using an `u64` as seed.
     /// If `seed == 0` this will produce the same stream of random numbers as
     /// the reference implementation when used unseeded.
+    #[deprecated(since="0.6.0", note="use SeedableRng::seed_from_u64 instead")]
     pub fn new_from_u64(seed: u64) -> Self {
-        Isaac64Rng(BlockRng64::new(Isaac64Core::new_from_u64(seed)))
+        Self::seed_from_u64(seed)
     }
 }
 
@@ -280,16 +288,9 @@
     /// Create an ISAAC-64 random number generator using an `u64` as seed.
     /// If `seed == 0` this will produce the same stream of random numbers as
     /// the reference implementation when used unseeded.
+    #[deprecated(since="0.6.0", note="use SeedableRng::seed_from_u64 instead")]
     pub fn new_from_u64(seed: u64) -> Self {
-        let mut key = [w(0); RAND_SIZE];
-        key[0] = w(seed);
-        // Initialize with only one pass.
-        // A second pass does not improve the quality here, because all of the
-        // seed was already available in the first round.
-        // Not doing the second pass has the small advantage that if
-        // `seed == 0` this method produces exactly the same state as the
-        // reference implementation when used unseeded.
-        Self::init(key, 1)
+        Self::seed_from_u64(seed)
     }
 }
 
@@ -306,6 +307,18 @@
         }
         Self::init(seed_extended, 2)
     }
+    
+    fn seed_from_u64(seed: u64) -> Self {
+        let mut key = [w(0); RAND_SIZE];
+        key[0] = w(seed);
+        // Initialize with only one pass.
+        // A second pass does not improve the quality here, because all of the
+        // seed was already available in the first round.
+        // Not doing the second pass has the small advantage that if
+        // `seed == 0` this method produces exactly the same state as the
+        // reference implementation when used unseeded.
+        Self::init(key, 1)
+    }
 
     fn from_rng<R: RngCore>(mut rng: R) -> Result<Self, Error> {
         // Custom `from_rng` implementation that fills a seed with the same size
@@ -425,11 +438,11 @@
     #[test]
     fn test_isaac64_new_uninitialized() {
         // Compare the results from initializing `IsaacRng` with
-        // `new_from_u64(0)`, to make sure it is the same as the reference
+        // `seed_from_u64(0)`, to make sure it is the same as the reference
         // implementation when used uninitialized.
         // Note: We only test the first 16 integers, not the full 256 of the
         // first block.
-        let mut rng = Isaac64Rng::new_from_u64(0);
+        let mut rng = Isaac64Rng::seed_from_u64(0);
         let mut results = [0u64; 16];
         for i in results.iter_mut() { *i = rng.next_u64(); }
         let expected: [u64; 16] = [
diff --git a/rustc_deps/vendor/rand-0.5.5/src/prng/isaac_array.rs b/rustc_deps/vendor/rand-0.5.6/src/prng/isaac_array.rs
similarity index 100%
rename from rustc_deps/vendor/rand-0.5.5/src/prng/isaac_array.rs
rename to rustc_deps/vendor/rand-0.5.6/src/prng/isaac_array.rs
diff --git a/rustc_deps/vendor/rand-0.5.5/src/prng/mod.rs b/rustc_deps/vendor/rand-0.5.6/src/prng/mod.rs
similarity index 100%
rename from rustc_deps/vendor/rand-0.5.5/src/prng/mod.rs
rename to rustc_deps/vendor/rand-0.5.6/src/prng/mod.rs
diff --git a/rustc_deps/vendor/rand-0.5.5/src/prng/xorshift.rs b/rustc_deps/vendor/rand-0.5.6/src/prng/xorshift.rs
similarity index 100%
rename from rustc_deps/vendor/rand-0.5.5/src/prng/xorshift.rs
rename to rustc_deps/vendor/rand-0.5.6/src/prng/xorshift.rs
diff --git a/rustc_deps/vendor/rand-0.5.5/src/rngs/adapter/mod.rs b/rustc_deps/vendor/rand-0.5.6/src/rngs/adapter/mod.rs
similarity index 100%
rename from rustc_deps/vendor/rand-0.5.5/src/rngs/adapter/mod.rs
rename to rustc_deps/vendor/rand-0.5.6/src/rngs/adapter/mod.rs
diff --git a/rustc_deps/vendor/rand-0.5.5/src/rngs/adapter/read.rs b/rustc_deps/vendor/rand-0.5.6/src/rngs/adapter/read.rs
similarity index 100%
rename from rustc_deps/vendor/rand-0.5.5/src/rngs/adapter/read.rs
rename to rustc_deps/vendor/rand-0.5.6/src/rngs/adapter/read.rs
diff --git a/rustc_deps/vendor/rand-0.5.5/src/rngs/adapter/reseeding.rs b/rustc_deps/vendor/rand-0.5.6/src/rngs/adapter/reseeding.rs
similarity index 100%
rename from rustc_deps/vendor/rand-0.5.5/src/rngs/adapter/reseeding.rs
rename to rustc_deps/vendor/rand-0.5.6/src/rngs/adapter/reseeding.rs
diff --git a/rustc_deps/vendor/rand-0.5.5/src/rngs/entropy.rs b/rustc_deps/vendor/rand-0.5.6/src/rngs/entropy.rs
similarity index 100%
rename from rustc_deps/vendor/rand-0.5.5/src/rngs/entropy.rs
rename to rustc_deps/vendor/rand-0.5.6/src/rngs/entropy.rs
diff --git a/rustc_deps/vendor/rand-0.5.5/src/rngs/jitter.rs b/rustc_deps/vendor/rand-0.5.6/src/rngs/jitter.rs
similarity index 100%
rename from rustc_deps/vendor/rand-0.5.5/src/rngs/jitter.rs
rename to rustc_deps/vendor/rand-0.5.6/src/rngs/jitter.rs
diff --git a/rustc_deps/vendor/rand-0.5.5/src/rngs/mock.rs b/rustc_deps/vendor/rand-0.5.6/src/rngs/mock.rs
similarity index 100%
rename from rustc_deps/vendor/rand-0.5.5/src/rngs/mock.rs
rename to rustc_deps/vendor/rand-0.5.6/src/rngs/mock.rs
diff --git a/rustc_deps/vendor/rand-0.5.5/src/rngs/mod.rs b/rustc_deps/vendor/rand-0.5.6/src/rngs/mod.rs
similarity index 100%
rename from rustc_deps/vendor/rand-0.5.5/src/rngs/mod.rs
rename to rustc_deps/vendor/rand-0.5.6/src/rngs/mod.rs
diff --git a/rustc_deps/vendor/rand-0.5.5/src/rngs/os.rs b/rustc_deps/vendor/rand-0.5.6/src/rngs/os.rs
similarity index 98%
rename from rustc_deps/vendor/rand-0.5.5/src/rngs/os.rs
rename to rustc_deps/vendor/rand-0.5.6/src/rngs/os.rs
index 7e1945b..ecc5f32 100644
--- a/rustc_deps/vendor/rand-0.5.5/src/rngs/os.rs
+++ b/rustc_deps/vendor/rand-0.5.6/src/rngs/os.rs
@@ -924,9 +924,9 @@
 
 #[cfg(target_os = "fuchsia")]
 mod imp {
-    extern crate fuchsia_zircon;
+    extern crate fuchsia_cprng;
 
-    use {Error, ErrorKind};
+    use Error;
     use super::OsRngImpl;
 
     #[derive(Clone, Debug)]
@@ -936,25 +936,10 @@
         fn new() -> Result<OsRng, Error> { Ok(OsRng) }
 
         fn fill_chunk(&mut self, dest: &mut [u8]) -> Result<(), Error> {
-            let mut read = 0;
-            while read < dest.len() {
-                match fuchsia_zircon::cprng_draw(&mut dest[read..]) {
-                    Ok(actual) => read += actual,
-                    Err(e) => {
-                        return Err(Error::with_cause(
-                            ErrorKind::Unavailable,
-                            "cprng_draw failed",
-                            e.into_io_error()));
-                    }
-                };
-            }
+            fuchsia_cprng::cprng_draw(dest);
             Ok(())
         }
 
-        fn max_chunk_size(&self) -> usize {
-            fuchsia_zircon::sys::ZX_CPRNG_DRAW_MAX_LEN
-        }
-
         fn method_str(&self) -> &'static str { "cprng_draw" }
     }
 }
diff --git a/rustc_deps/vendor/rand-0.5.5/src/rngs/small.rs b/rustc_deps/vendor/rand-0.5.6/src/rngs/small.rs
similarity index 100%
rename from rustc_deps/vendor/rand-0.5.5/src/rngs/small.rs
rename to rustc_deps/vendor/rand-0.5.6/src/rngs/small.rs
diff --git a/rustc_deps/vendor/rand-0.5.5/src/rngs/std.rs b/rustc_deps/vendor/rand-0.5.6/src/rngs/std.rs
similarity index 100%
rename from rustc_deps/vendor/rand-0.5.5/src/rngs/std.rs
rename to rustc_deps/vendor/rand-0.5.6/src/rngs/std.rs
diff --git a/rustc_deps/vendor/rand-0.5.5/src/rngs/thread.rs b/rustc_deps/vendor/rand-0.5.6/src/rngs/thread.rs
similarity index 100%
rename from rustc_deps/vendor/rand-0.5.5/src/rngs/thread.rs
rename to rustc_deps/vendor/rand-0.5.6/src/rngs/thread.rs
diff --git a/rustc_deps/vendor/rand-0.5.5/src/seq.rs b/rustc_deps/vendor/rand-0.5.6/src/seq.rs
similarity index 100%
rename from rustc_deps/vendor/rand-0.5.5/src/seq.rs
rename to rustc_deps/vendor/rand-0.5.6/src/seq.rs
diff --git a/rustc_deps/vendor/rand-0.5.5/tests/bool.rs b/rustc_deps/vendor/rand-0.5.6/tests/bool.rs
similarity index 100%
rename from rustc_deps/vendor/rand-0.5.5/tests/bool.rs
rename to rustc_deps/vendor/rand-0.5.6/tests/bool.rs
diff --git a/rustc_deps/vendor/rand-0.5.5/utils/ci/install.sh b/rustc_deps/vendor/rand-0.5.6/utils/ci/install.sh
similarity index 100%
rename from rustc_deps/vendor/rand-0.5.5/utils/ci/install.sh
rename to rustc_deps/vendor/rand-0.5.6/utils/ci/install.sh
diff --git a/rustc_deps/vendor/rand-0.5.5/utils/ci/script.sh b/rustc_deps/vendor/rand-0.5.6/utils/ci/script.sh
similarity index 100%
rename from rustc_deps/vendor/rand-0.5.5/utils/ci/script.sh
rename to rustc_deps/vendor/rand-0.5.6/utils/ci/script.sh
diff --git a/rustc_deps/vendor/rand-0.5.5/utils/ziggurat_tables.py b/rustc_deps/vendor/rand-0.5.6/utils/ziggurat_tables.py
similarity index 100%
rename from rustc_deps/vendor/rand-0.5.5/utils/ziggurat_tables.py
rename to rustc_deps/vendor/rand-0.5.6/utils/ziggurat_tables.py
diff --git a/rustc_deps/vendor/rand/.cargo-checksum.json b/rustc_deps/vendor/rand/.cargo-checksum.json
index 5121a3e..875021e 100644
--- a/rustc_deps/vendor/rand/.cargo-checksum.json
+++ b/rustc_deps/vendor/rand/.cargo-checksum.json
@@ -1 +1 @@
-{"files":{"CHANGELOG.md":"b3a8602318e36ae7b80bc72d86b7e5d28a2d5fdf0bc6bf96fc1d8b924abc60d5","COPYRIGHT":"90eb64f0279b0d9432accfa6023ff803bc4965212383697eee27a0f426d5f8d5","Cargo.toml":"79115f597f32724059f85982dd3af1e1d91caab3f48620f5a862a825814bc42e","LICENSE-APACHE":"aaff376532ea30a0cd5330b9502ad4a4c8bf769c539c87ffe78819d188a18ebf","LICENSE-MIT":"209fbbe0ad52d9235e37badf9cadfe4dbdc87203179c0899e738b39ade42177b","README.md":"a455903b6a45dc390b76181b808c0cb3cbaf1151c8a2a9ba2ac8eb77046e65f8","benches/distributions.rs":"fea4337cd3eb6eaa7bb3250bb04b084290a2b081d3f4679510f3e1dab9c9506b","benches/generators.rs":"19286f1022041bca7e9f83ff615534397565246d5cd26c53abcaeaebebad6773","benches/misc.rs":"c0302e0d9ab973ba4463506d90f89f903104b2a42fc11247be2056a2e1cb561f","benches/seq.rs":"188043fe02640c3936da7634517d0bc0bbdbf685739c52d2ec51a95f238aa347","build.rs":"00d4e7d3521f631913001cfaeb5c97f9dab8b550346046deb2683b962a99e9b3","examples/monte-carlo.rs":"2161c9c1ed90af6b72a5b05b6650d5fce6a983873c29c99798957099cd7a5153","examples/monty-hall.rs":"6a1921868c41d4c130a6b098632f2c127d2446ac6a73aeea10b79b845df1cbbc","src/deprecated.rs":"57410b840848f7ad00db40e1f69f743cbf163bf0688c8ce8c844e8417e910eb3","src/distributions/bernoulli.rs":"02526bdc24fe17f390505779fb38a441c6a1792c1f7e6093d8b86e143bf9e07e","src/distributions/binomial.rs":"5e2cd6ebc0a5411a4af26ff07d05dd30ae91fc47852cd29757b370ce496074b6","src/distributions/cauchy.rs":"b49d4abd1d861e9f9e9a27444680ea0e24779a6a263dce07c400cf43bab9363c","src/distributions/dirichlet.rs":"b6c0273216a05d32ab21320c11f46f80bc6a6173c93f7aa63fd397927fa365fb","src/distributions/exponential.rs":"dab0a02957a0b3233be30aef494258932fa795c0d274d051c4b64567b420aed4","src/distributions/float.rs":"ddb4b814bda904a1653824180042690a574be07b0dd99443fe51b3b8b202a3c4","src/distributions/gamma.rs":"c922a1b7b2f20ee5a7f5241a252b8b947ab998a88a747df488380211b865f9a6","src/distributions/integer.rs":"b615123a814b118f8bc0563cd7615eec7ee171223bf8100416fb7d22e350c8d7","src/distributions/mod.rs":"e7d8bf4caa7cf7696a03839fde739245d183c281144c26fc8febb71e9f1d872b","src/distributions/normal.rs":"8e935a97c828243a5e9a8e024cd8397174f5e43aa0462022e131bdc18b90a561","src/distributions/other.rs":"44abe480bdc2000ca91a9d41c04e3d5fff2b08e81dfc9168d82c90ddc5cbf616","src/distributions/pareto.rs":"8a9d0f6a7b7221c5716f92b4b65dc19954c146eaeeddcc0b9533d01e2b7414ff","src/distributions/poisson.rs":"918f36d9f7b6c9c4a249b49138cf4df5e1498dd894e3856c21d2f82b83d33e53","src/distributions/triangular.rs":"5a3927b4f1306686591c6d6f3df01d774a5dbf9ec2450ee2f3ce6a71b54f744d","src/distributions/uniform.rs":"69eb2e907eaa168f8a7bb1f102096124af16bc9a99d80d25342b0528d006f07d","src/distributions/unit_circle.rs":"007815186a3696a3d835e9004f51e52402557a7cda09219a0ade13122578e1bd","src/distributions/unit_sphere.rs":"24b8dea60bee580378713477235ddac5e8da07e4f9ceb610fe655ec82390abaf","src/distributions/utils.rs":"68a8257290fdbbd1e72c77e55f21aab4420c6ff168ffb82f7cabc3ad815f4803","src/distributions/weibull.rs":"7678c47145bbb8455fb34326e59d05c2564d427b9c13d5d32435119fd37b5eeb","src/distributions/weighted.rs":"db9a91ff89d62f93aea67a095acf992dc220b22fa2aff5915ace614dfa6f9286","src/distributions/ziggurat_tables.rs":"6368acec20801c703ae76dd1e08983793732c5ac221c491f85d719ef75448b6d","src/lib.rs":"29ac7e442da1fe9c2e01eb5bf372fc8a24652fa00ffa560bb8315ba38809cde2","src/prelude.rs":"36f87f720c1ce0c9d0041872b0498e016b5578b96ba4f6152765ac5084d3b5da","src/prng/mod.rs":"e38182ca652acd0f9348e70e6896e2143b11e9cdcdb34fc78ad13b150dbd7da9","src/rngs/adapter/mod.rs":"e8f37aed72eaebc7dff20787f194e3a74da3e824e2b92a6839b7e6f01fcd911c","src/rngs/adapter/read.rs":"55fef71647799494d8dd9d472042768fd66dc3ba1b17563cec7b4a4c19db6a98","src/rngs/adapter/reseeding.rs":"a47f72552c00cc1dce53831410e4982ea92887ad0a9f9599476a51948b39ccf3","src/rngs/entropy.rs":"96b9dc114a971f284c70adc77cebb61bd5e635ce266451aed437b6ef4bdb0507","src/rngs/jitter.rs":"eac0a06dc813693e7db22f2a52fcf00b33edabdacb29cc97f51983a8b4297bb7","src/rngs/mock.rs":"ef812949b98e4f2eea3e62f8b3ee56edaeffc99d17625337efc882b7b2b19f4b","src/rngs/mod.rs":"fea27f97751a9595d07b25cf88a3fd4c06650a7b741a5083ba87c76102c7efa3","src/rngs/small.rs":"3f4d68bb58b11f7fa039eccd45271852286dcf8f1e3d850ad3d471edd3e1dbba","src/rngs/std.rs":"36759ad31d7a8aaf6ff5fe73d733a1332251659570844f0d3f226990e08d25c1","src/rngs/thread.rs":"c5fd4fae14797d9dada7f67c1d411556fdac73adbe7c92338ad2d84eac61e4fc","src/seq/index.rs":"3ae566bdc4692370c4d590d82cc3da2c057d57c41a2c9f66e07243eefa00bfa8","src/seq/mod.rs":"3eee8782278305e2c8cf93a7210f8f70d51800c1f5ec60e47aa85825387378d3","tests/uniformity.rs":"0b774361f7db445bd910ad2cbac71207d01ace6881b8d501f4ff01bffd16cd68"},"package":"b65e163105a6284f841bd23100a015895f54340e88a5ffc9ca7b8b33827cfce0"}
\ No newline at end of file
+{"files":{"CHANGELOG.md":"ddc101ef9368ef83c21ea9e43064307b1c59b0698b78f59ea01cba32c0ef55bf","COPYRIGHT":"90eb64f0279b0d9432accfa6023ff803bc4965212383697eee27a0f426d5f8d5","Cargo.toml":"54c97aa3fc80f7482358b32df3fb96dbd63a4b52fb7f2eb06f1707cda7d15f09","LICENSE-APACHE":"aaff376532ea30a0cd5330b9502ad4a4c8bf769c539c87ffe78819d188a18ebf","LICENSE-MIT":"209fbbe0ad52d9235e37badf9cadfe4dbdc87203179c0899e738b39ade42177b","README.md":"d442009fc242a0670f6e7a418862c67514e2c544a43c88b24cb7f37695b8ae38","benches/distributions.rs":"fea4337cd3eb6eaa7bb3250bb04b084290a2b081d3f4679510f3e1dab9c9506b","benches/generators.rs":"19286f1022041bca7e9f83ff615534397565246d5cd26c53abcaeaebebad6773","benches/misc.rs":"c0302e0d9ab973ba4463506d90f89f903104b2a42fc11247be2056a2e1cb561f","benches/seq.rs":"188043fe02640c3936da7634517d0bc0bbdbf685739c52d2ec51a95f238aa347","build.rs":"00d4e7d3521f631913001cfaeb5c97f9dab8b550346046deb2683b962a99e9b3","examples/monte-carlo.rs":"2161c9c1ed90af6b72a5b05b6650d5fce6a983873c29c99798957099cd7a5153","examples/monty-hall.rs":"6a1921868c41d4c130a6b098632f2c127d2446ac6a73aeea10b79b845df1cbbc","src/deprecated.rs":"da2a39dfc440a09bdcdf5af93842dce0fbbc179e5e7146dc94ea861c244bf4c5","src/distributions/bernoulli.rs":"02526bdc24fe17f390505779fb38a441c6a1792c1f7e6093d8b86e143bf9e07e","src/distributions/binomial.rs":"5e2cd6ebc0a5411a4af26ff07d05dd30ae91fc47852cd29757b370ce496074b6","src/distributions/cauchy.rs":"b49d4abd1d861e9f9e9a27444680ea0e24779a6a263dce07c400cf43bab9363c","src/distributions/dirichlet.rs":"b6c0273216a05d32ab21320c11f46f80bc6a6173c93f7aa63fd397927fa365fb","src/distributions/exponential.rs":"7e8a98b63a271714c1f982dd15bc21626593691eaa92c7a76bd59af7b37a56a2","src/distributions/float.rs":"6e1e15b47f9efd282a0e7d140c141d35ece4ebbb748ce7ead620782dc492e88f","src/distributions/gamma.rs":"c922a1b7b2f20ee5a7f5241a252b8b947ab998a88a747df488380211b865f9a6","src/distributions/integer.rs":"b615123a814b118f8bc0563cd7615eec7ee171223bf8100416fb7d22e350c8d7","src/distributions/mod.rs":"6824a6a461d84aef22646d6c3ac8af5d2b5dfc90f09d537be2112fde98a9a8ea","src/distributions/normal.rs":"fe5df9d00ff4038ef6e1f6ca22971547aaec57887c700a511806da01bb4a2f17","src/distributions/other.rs":"44abe480bdc2000ca91a9d41c04e3d5fff2b08e81dfc9168d82c90ddc5cbf616","src/distributions/pareto.rs":"8a9d0f6a7b7221c5716f92b4b65dc19954c146eaeeddcc0b9533d01e2b7414ff","src/distributions/poisson.rs":"918f36d9f7b6c9c4a249b49138cf4df5e1498dd894e3856c21d2f82b83d33e53","src/distributions/triangular.rs":"5a3927b4f1306686591c6d6f3df01d774a5dbf9ec2450ee2f3ce6a71b54f744d","src/distributions/uniform.rs":"9536012592e978cda4e72cd936f21b9986704468de531fbe873f25f763afa4da","src/distributions/unit_circle.rs":"007815186a3696a3d835e9004f51e52402557a7cda09219a0ade13122578e1bd","src/distributions/unit_sphere.rs":"24b8dea60bee580378713477235ddac5e8da07e4f9ceb610fe655ec82390abaf","src/distributions/utils.rs":"68a8257290fdbbd1e72c77e55f21aab4420c6ff168ffb82f7cabc3ad815f4803","src/distributions/weibull.rs":"7678c47145bbb8455fb34326e59d05c2564d427b9c13d5d32435119fd37b5eeb","src/distributions/weighted.rs":"2c98d09ed15d204687efce857129742f905e50e96ba0518122a742f3b47753df","src/distributions/ziggurat_tables.rs":"6368acec20801c703ae76dd1e08983793732c5ac221c491f85d719ef75448b6d","src/lib.rs":"5a7c48d633e75c6d9f2598651ac7b754b3b34fec4212bdc50358a0abbc4ffc62","src/prelude.rs":"36f87f720c1ce0c9d0041872b0498e016b5578b96ba4f6152765ac5084d3b5da","src/prng/mod.rs":"e38182ca652acd0f9348e70e6896e2143b11e9cdcdb34fc78ad13b150dbd7da9","src/rngs/adapter/mod.rs":"e8f37aed72eaebc7dff20787f194e3a74da3e824e2b92a6839b7e6f01fcd911c","src/rngs/adapter/read.rs":"f9502c774607b5c3e62b87ea58698db258486b7c0dbb9b01559e3c18b468bb34","src/rngs/adapter/reseeding.rs":"0ce93bd0f00da429459bca7081346bddea85735bf2d617bcde92708907016a0d","src/rngs/entropy.rs":"cd89359f7891e955245279e4848c37733c508a8cf126eee34f2361a228014f4e","src/rngs/mock.rs":"ef812949b98e4f2eea3e62f8b3ee56edaeffc99d17625337efc882b7b2b19f4b","src/rngs/mod.rs":"440870d8066f1fbeb5d3b178bbf62d899f565d3cbc99c9b179ae4bca81b45a4f","src/rngs/small.rs":"eb942851fe2c2ce11eb0fe179efdfe2889dfc9bc72398bddbdfa327882935dd9","src/rngs/std.rs":"8420c2c32f312b2400ed23afdd9019632c2dd61bb5bd935d6d73bacbcbb9a5b2","src/rngs/thread.rs":"82ef4cf043d16d1d3e6f0037b269f817b133833240f866cd8a7b6e82d3c279ff","src/seq/index.rs":"384500a66361d21531db1380474066fa0bafb672ff7c9db00208b30a94664511","src/seq/mod.rs":"5a9938dc2ac75f393b54267abced2c5f7fbba4ffbdeb6ecdc80afe618c28fea6","tests/uniformity.rs":"0b774361f7db445bd910ad2cbac71207d01ace6881b8d501f4ff01bffd16cd68"},"package":"6d71dacdc3c88c1fde3885a3be3fbab9f35724e6ce99467f7d9c5026132184ca"}
\ No newline at end of file
diff --git a/rustc_deps/vendor/rand/CHANGELOG.md b/rustc_deps/vendor/rand/CHANGELOG.md
index 061d1cb..955e872 100644
--- a/rustc_deps/vendor/rand/CHANGELOG.md
+++ b/rustc_deps/vendor/rand/CHANGELOG.md
@@ -9,6 +9,24 @@
 You may also find the [Upgrade Guide](https://rust-random.github.io/book/update.html) useful.
 
 
+## [0.6.5] - 2019-01-28
+### Crates
+- Update `rand_core` to 0.4 (#703)
+- Move `JitterRng` to its own crate (#685)
+- Add a warm-bindgen test crate (#696)
+
+### Platforms
+- Fuchsia: Replaced fuchsia-zircon with fuchsia-cprng
+
+### Doc
+- Use RFC 1946 for doc links (#691)
+- Fix some doc links and notes (#711)
+
+## [0.6.4] - 2019-01-08
+### Fixes
+- Move wasm-bindgen shims to correct crate (#686)
+- Make `wasm32-unknown-unknown` compile but fail at run-time if missing bindingsg (#686)
+
 ## [0.6.3] - 2019-01-04
 ### Fixes
 - Make the `std` feature require the optional `rand_os` dependency (#675)
diff --git a/rustc_deps/vendor/rand/Cargo.toml b/rustc_deps/vendor/rand/Cargo.toml
index 4c14362..fc0313a 100644
--- a/rustc_deps/vendor/rand/Cargo.toml
+++ b/rustc_deps/vendor/rand/Cargo.toml
@@ -12,7 +12,7 @@
 
 [package]
 name = "rand"
-version = "0.6.3"
+version = "0.6.5"
 authors = ["The Rand Project Developers", "The Rust Project Developers"]
 build = "build.rs"
 exclude = ["/utils/*", "/.travis.yml", "/appveyor.yml", ".gitignore"]
@@ -39,8 +39,7 @@
 version = "0.1"
 
 [dependencies.rand_core]
-version = "0.3"
-default-features = false
+version = "0.4"
 
 [dependencies.rand_hc]
 version = "0.1"
@@ -48,6 +47,9 @@
 [dependencies.rand_isaac]
 version = "0.1"
 
+[dependencies.rand_jitter]
+version = "0.1"
+
 [dependencies.rand_os]
 version = "0.1"
 optional = true
@@ -67,12 +69,12 @@
 
 [features]
 alloc = ["rand_core/alloc"]
-default = ["std", "rand_os"]
+default = ["std"]
 i128_support = []
 nightly = ["simd_support"]
 serde1 = ["rand_core/serde1", "rand_isaac/serde1", "rand_xorshift/serde1"]
 simd_support = ["packed_simd"]
-std = ["rand_core/std", "alloc", "rand_os"]
+std = ["rand_core/std", "alloc", "rand_os", "rand_jitter/std"]
 stdweb = ["rand_os/stdweb"]
 wasm-bindgen = ["rand_os/wasm-bindgen"]
 [target."cfg(unix)".dependencies.libc]
diff --git a/rustc_deps/vendor/rand/README.md b/rustc_deps/vendor/rand/README.md
index 95970af..314a57f 100644
--- a/rustc_deps/vendor/rand/README.md
+++ b/rustc_deps/vendor/rand/README.md
@@ -74,8 +74,15 @@
 
 ## Crate Features
 
-Rand is built with only the `std` feature enabled by default. The following
-optional features are available:
+Rand is built with the `std` and `rand_os` features enabled by default:
+
+-   `std` enables functionality dependent on the `std` lib and implies `alloc`
+    and `rand_os`
+-   `rand_os` enables the `rand_os` crate, `rngs::OsRng` and enables its usage;
+    the continued existance of this feature is not guaranteed so users are
+    encouraged to specify `std` instead
+
+The following optional features are available:
 
 - `alloc` can be used instead of `std` to provide `Vec` and `Box`.
 - `log` enables some logging via the `log` crate.
diff --git a/rustc_deps/vendor/rand/src/deprecated.rs b/rustc_deps/vendor/rand/src/deprecated.rs
index 76055c1..88eb09f 100644
--- a/rustc_deps/vendor/rand/src/deprecated.rs
+++ b/rustc_deps/vendor/rand/src/deprecated.rs
@@ -291,45 +291,12 @@
 impl CryptoRng for StdRng {}
 
 
-#[cfg(all(feature="std",
-          any(target_os = "linux", target_os = "android",
-              target_os = "netbsd",
-              target_os = "dragonfly",
-              target_os = "haiku",
-              target_os = "emscripten",
-              target_os = "solaris",
-              target_os = "cloudabi",
-              target_os = "macos", target_os = "ios",
-              target_os = "freebsd",
-              target_os = "openbsd", target_os = "bitrig",
-              target_os = "redox",
-              target_os = "fuchsia",
-              windows,
-              all(target_arch = "wasm32", feature = "stdweb"),
-              all(target_arch = "wasm32", feature = "wasm-bindgen"),
-)))]
+#[cfg(feature="rand_os")]
 #[derive(Clone, Debug)]
 #[deprecated(since="0.6.0", note="import with rand::rngs::OsRng instead")]
 pub struct OsRng(rngs::OsRng);
 
-#[cfg(all(feature="std",
-          any(target_os = "linux", target_os = "android",
-              target_os = "netbsd",
-              target_os = "dragonfly",
-              target_os = "haiku",
-              target_os = "emscripten",
-              target_os = "solaris",
-              target_os = "cloudabi",
-              target_os = "macos", target_os = "ios",
-              target_os = "freebsd",
-              target_os = "openbsd", target_os = "bitrig",
-              target_os = "redox",
-              target_os = "fuchsia",
-              windows,
-              all(target_arch = "wasm32", feature = "stdweb"),
-              all(target_arch = "wasm32", feature = "wasm-bindgen"),
-)))]
-#[cfg(feature="std")]
+#[cfg(feature="rand_os")]
 impl RngCore for OsRng {
     #[inline(always)]
     fn next_u32(&mut self) -> u32 {
@@ -352,48 +319,14 @@
     }
 }
 
-#[cfg(all(feature="std",
-          any(target_os = "linux", target_os = "android",
-              target_os = "netbsd",
-              target_os = "dragonfly",
-              target_os = "haiku",
-              target_os = "emscripten",
-              target_os = "solaris",
-              target_os = "cloudabi",
-              target_os = "macos", target_os = "ios",
-              target_os = "freebsd",
-              target_os = "openbsd", target_os = "bitrig",
-              target_os = "redox",
-              target_os = "fuchsia",
-              windows,
-              all(target_arch = "wasm32", feature = "stdweb"),
-              all(target_arch = "wasm32", feature = "wasm-bindgen"),
-)))]
-#[cfg(feature="std")]
+#[cfg(feature="rand_os")]
 impl OsRng {
     pub fn new() -> Result<Self, Error> {
         rngs::OsRng::new().map(OsRng)
     }
 }
 
-#[cfg(all(feature="std",
-          any(target_os = "linux", target_os = "android",
-              target_os = "netbsd",
-              target_os = "dragonfly",
-              target_os = "haiku",
-              target_os = "emscripten",
-              target_os = "solaris",
-              target_os = "cloudabi",
-              target_os = "macos", target_os = "ios",
-              target_os = "freebsd",
-              target_os = "openbsd", target_os = "bitrig",
-              target_os = "redox",
-              target_os = "fuchsia",
-              windows,
-              all(target_arch = "wasm32", feature = "stdweb"),
-              all(target_arch = "wasm32", feature = "wasm-bindgen"),
-)))]
-#[cfg(feature="std")]
+#[cfg(feature="rand_os")]
 impl CryptoRng for OsRng {}
 
 
diff --git a/rustc_deps/vendor/rand/src/distributions/exponential.rs b/rustc_deps/vendor/rand/src/distributions/exponential.rs
index a7d0500..76752a6 100644
--- a/rustc_deps/vendor/rand/src/distributions/exponential.rs
+++ b/rustc_deps/vendor/rand/src/distributions/exponential.rs
@@ -64,7 +64,7 @@
 /// This distribution has density function: `f(x) = lambda * exp(-lambda * x)`
 /// for `x > 0`.
 /// 
-/// Note that [`Exp1`](struct.Exp1.html) is an optimised implementation for `lambda = 1`.
+/// Note that [`Exp1`][crate::distributions::Exp1] is an optimised implementation for `lambda = 1`.
 ///
 /// # Example
 ///
diff --git a/rustc_deps/vendor/rand/src/distributions/float.rs b/rustc_deps/vendor/rand/src/distributions/float.rs
index ece12f5..0dd5caa 100644
--- a/rustc_deps/vendor/rand/src/distributions/float.rs
+++ b/rustc_deps/vendor/rand/src/distributions/float.rs
@@ -36,9 +36,9 @@
 /// println!("f32 from (0, 1): {}", val);
 /// ```
 ///
-/// [`Standard`]: struct.Standard.html
-/// [`Open01`]: struct.Open01.html
-/// [`Uniform`]: uniform/struct.Uniform.html
+/// [`Standard`]: crate::distributions::Standard
+/// [`Open01`]: crate::distributions::Open01
+/// [`Uniform`]: crate::distributions::uniform::Uniform
 #[derive(Clone, Copy, Debug)]
 pub struct OpenClosed01;
 
@@ -62,9 +62,9 @@
 /// println!("f32 from (0, 1): {}", val);
 /// ```
 ///
-/// [`Standard`]: struct.Standard.html
-/// [`OpenClosed01`]: struct.OpenClosed01.html
-/// [`Uniform`]: uniform/struct.Uniform.html
+/// [`Standard`]: crate::distributions::Standard
+/// [`OpenClosed01`]: crate::distributions::OpenClosed01
+/// [`Uniform`]: crate::distributions::uniform::Uniform
 #[derive(Clone, Copy, Debug)]
 pub struct Open01;
 
diff --git a/rustc_deps/vendor/rand/src/distributions/mod.rs b/rustc_deps/vendor/rand/src/distributions/mod.rs
index 5e879cb..6e2d6c7 100644
--- a/rustc_deps/vendor/rand/src/distributions/mod.rs
+++ b/rustc_deps/vendor/rand/src/distributions/mod.rs
@@ -56,7 +56,7 @@
 //!
 //! User types `T` may also implement `Distribution<T>` for [`Uniform`],
 //! although this is less straightforward than for [`Standard`] (see the
-//! documentation in the [`uniform` module]. Doing so enables generation of
+//! documentation in the [`uniform`] module. Doing so enables generation of
 //! values of type `T` with  [`Rng::gen_range`].
 //!
 //!
@@ -65,8 +65,8 @@
 //! There are surprisingly many ways to uniformly generate random floats. A
 //! range between 0 and 1 is standard, but the exact bounds (open vs closed)
 //! and accuracy differ. In addition to the [`Standard`] distribution Rand offers
-//! [`Open01`] and [`OpenClosed01`]. See [Floating point implementation] for
-//! more details.
+//! [`Open01`] and [`OpenClosed01`]. See "Floating point implementation" section of
+//! [`Standard`] documentation for more details.
 //!
 //! [`Alphanumeric`] is a simple distribution to sample random letters and
 //! numbers of the `char` type; in contrast [`Standard`] may sample any valid
@@ -140,47 +140,38 @@
 //!
 //!
 //! [probability distribution]: https://en.wikipedia.org/wiki/Probability_distribution
-//! [`Distribution`]: trait.Distribution.html
-//! [`gen_range`]: ../trait.Rng.html#method.gen_range
-//! [`gen`]: ../trait.Rng.html#method.gen
-//! [`sample`]: ../trait.Rng.html#method.sample
-//! [`new_inclusive`]: struct.Uniform.html#method.new_inclusive
-//! [`random()`]: ../fn.random.html
-//! [`Rng::gen_bool`]: ../trait.Rng.html#method.gen_bool
-//! [`Rng::gen_range`]: ../trait.Rng.html#method.gen_range
-//! [`Rng::gen()`]: ../trait.Rng.html#method.gen
-//! [`Rng`]: ../trait.Rng.html
-//! [`uniform` module]: uniform/index.html
-//! [Floating point implementation]: struct.Standard.html#floating-point-implementation
-// distributions
-//! [`Alphanumeric`]: struct.Alphanumeric.html
-//! [`Bernoulli`]: struct.Bernoulli.html
-//! [`Beta`]: struct.Beta.html
-//! [`Binomial`]: struct.Binomial.html
-//! [`Cauchy`]: struct.Cauchy.html
-//! [`ChiSquared`]: struct.ChiSquared.html
-//! [`Dirichlet`]: struct.Dirichlet.html
-//! [`Exp`]: struct.Exp.html
-//! [`Exp1`]: struct.Exp1.html
-//! [`FisherF`]: struct.FisherF.html
-//! [`Gamma`]: struct.Gamma.html
-//! [`LogNormal`]: struct.LogNormal.html
-//! [`Normal`]: struct.Normal.html
-//! [`Open01`]: struct.Open01.html
-//! [`OpenClosed01`]: struct.OpenClosed01.html
-//! [`Pareto`]: struct.Pareto.html
-//! [`Poisson`]: struct.Poisson.html
-//! [`Standard`]: struct.Standard.html
-//! [`StandardNormal`]: struct.StandardNormal.html
-//! [`StudentT`]: struct.StudentT.html
-//! [`Triangular`]: struct.Triangular.html
-//! [`Uniform`]: struct.Uniform.html
-//! [`Uniform::new`]: struct.Uniform.html#method.new
-//! [`Uniform::new_inclusive`]: struct.Uniform.html#method.new_inclusive
-//! [`UnitSphereSurface`]: struct.UnitSphereSurface.html
-//! [`UnitCircle`]: struct.UnitCircle.html
-//! [`Weibull`]: struct.Weibull.html
-//! [`WeightedIndex`]: struct.WeightedIndex.html
+//! [`gen_range`]: Rng::gen_range
+//! [`gen`]: Rng::gen
+//! [`sample`]: Rng::sample
+//! [`new_inclusive`]: Uniform::new_inclusive
+//! [`Alphanumeric`]: distributions::Alphanumeric
+//! [`Bernoulli`]: distributions::Bernoulli
+//! [`Beta`]: distributions::Beta
+//! [`Binomial`]: distributions::Binomial
+//! [`Cauchy`]: distributions::Cauchy
+//! [`ChiSquared`]: distributions::ChiSquared
+//! [`Dirichlet`]: distributions::Dirichlet
+//! [`Exp`]: distributions::Exp
+//! [`Exp1`]: distributions::Exp1
+//! [`FisherF`]: distributions::FisherF
+//! [`Gamma`]: distributions::Gamma
+//! [`LogNormal`]: distributions::LogNormal
+//! [`Normal`]: distributions::Normal
+//! [`Open01`]: distributions::Open01
+//! [`OpenClosed01`]: distributions::OpenClosed01
+//! [`Pareto`]: distributions::Pareto
+//! [`Poisson`]: distributions::Poisson
+//! [`Standard`]: distributions::Standard
+//! [`StandardNormal`]: distributions::StandardNormal
+//! [`StudentT`]: distributions::StudentT
+//! [`Triangular`]: distributions::Triangular
+//! [`Uniform`]: distributions::Uniform
+//! [`Uniform::new`]: distributions::Uniform::new
+//! [`Uniform::new_inclusive`]: distributions::Uniform::new_inclusive
+//! [`UnitSphereSurface`]: distributions::UnitSphereSurface
+//! [`UnitCircle`]: distributions::UnitCircle
+//! [`Weibull`]: distributions::Weibull
+//! [`WeightedIndex`]: distributions::WeightedIndex
 
 #[cfg(any(rustc_1_26, features="nightly"))]
 use core::iter;
@@ -238,8 +229,7 @@
 /// advantage of not needing to consider thread safety, and for most
 /// distributions efficient state-less sampling algorithms are available.
 ///
-/// [`Rng`]: ../trait.Rng.html
-/// [`sample_iter`]: trait.Distribution.html#method.sample_iter
+/// [`sample_iter`]: Distribution::method.sample_iter
 pub trait Distribution<T> {
     /// Generate a random value of `T`, using `rng` as the source of randomness.
     fn sample<R: Rng + ?Sized>(&self, rng: &mut R) -> T;
@@ -292,8 +282,7 @@
 /// This `struct` is created by the [`sample_iter`] method on [`Distribution`].
 /// See its documentation for more.
 ///
-/// [`Distribution`]: trait.Distribution.html
-/// [`sample_iter`]: trait.Distribution.html#method.sample_iter
+/// [`sample_iter`]: Distribution::sample_iter
 #[derive(Debug)]
 pub struct DistIter<'a, D: 'a, R: 'a, T> {
     distr: &'a D,
@@ -379,9 +368,7 @@
 /// faster on some architectures (on modern Intel CPUs all methods have
 /// approximately equal performance).
 ///
-/// [`Open01`]: struct.Open01.html
-/// [`OpenClosed01`]: struct.OpenClosed01.html
-/// [`Uniform`]: uniform/struct.Uniform.html
+/// [`Uniform`]: uniform::Uniform
 #[derive(Clone, Copy, Debug)]
 pub struct Standard;
 
@@ -401,7 +388,7 @@
 ///
 /// Deprecated: use [`WeightedIndex`] instead.
 ///
-/// [`WeightedIndex`]: struct.WeightedIndex.html
+/// [`WeightedIndex`]: WeightedIndex
 #[deprecated(since="0.6.0", note="use WeightedIndex instead")]
 #[allow(deprecated)]
 #[derive(Debug)]
diff --git a/rustc_deps/vendor/rand/src/distributions/normal.rs b/rustc_deps/vendor/rand/src/distributions/normal.rs
index b8d632e..089865e 100644
--- a/rustc_deps/vendor/rand/src/distributions/normal.rs
+++ b/rustc_deps/vendor/rand/src/distributions/normal.rs
@@ -91,7 +91,7 @@
 /// println!("{} is from a N(2, 9) distribution", v)
 /// ```
 ///
-/// [`StandardNormal`]: struct.StandardNormal.html
+/// [`StandardNormal`]: crate::distributions::StandardNormal
 #[derive(Clone, Copy, Debug)]
 pub struct Normal {
     mean: f64,
diff --git a/rustc_deps/vendor/rand/src/distributions/uniform.rs b/rustc_deps/vendor/rand/src/distributions/uniform.rs
index ceed77d..19b4934 100644
--- a/rustc_deps/vendor/rand/src/distributions/uniform.rs
+++ b/rustc_deps/vendor/rand/src/distributions/uniform.rs
@@ -15,13 +15,13 @@
 //! [`Uniform`].
 //!
 //! This distribution is provided with support for several primitive types
-//! (all integer and floating-point types) as well as `std::time::Duration`,
+//! (all integer and floating-point types) as well as [`std::time::Duration`],
 //! and supports extension to user-defined types via a type-specific *back-end*
 //! implementation.
 //!
 //! The types [`UniformInt`], [`UniformFloat`] and [`UniformDuration`] are the
 //! back-ends supporting sampling from primitive integer and floating-point
-//! ranges as well as from `std::time::Duration`; these types do not normally
+//! ranges as well as from [`std::time::Duration`]; these types do not normally
 //! need to be used directly (unless implementing a derived back-end).
 //!
 //! # Example usage
@@ -100,14 +100,12 @@
 //! let x = uniform.sample(&mut thread_rng());
 //! ```
 //!
-//! [`Uniform`]: struct.Uniform.html
-//! [`Rng::gen_range`]: ../../trait.Rng.html#method.gen_range
-//! [`SampleUniform`]: trait.SampleUniform.html
-//! [`UniformSampler`]: trait.UniformSampler.html
-//! [`UniformInt`]: struct.UniformInt.html
-//! [`UniformFloat`]: struct.UniformFloat.html
-//! [`UniformDuration`]: struct.UniformDuration.html
-//! [`SampleBorrow::borrow`]: trait.SampleBorrow.html#method.borrow
+//! [`SampleUniform`]: crate::distributions::uniform::SampleUniform
+//! [`UniformSampler`]: crate::distributions::uniform::UniformSampler
+//! [`UniformInt`]: crate::distributions::uniform::UniformInt
+//! [`UniformFloat`]: crate::distributions::uniform::UniformFloat
+//! [`UniformDuration`]: crate::distributions::uniform::UniformDuration
+//! [`SampleBorrow::borrow`]: crate::distributions::uniform::SampleBorrow::borrow
 
 #[cfg(feature = "std")]
 use std::time::Duration;
@@ -165,10 +163,8 @@
 /// }
 /// ```
 ///
-/// [`Uniform::new`]: struct.Uniform.html#method.new
-/// [`Uniform::new_inclusive`]: struct.Uniform.html#method.new_inclusive
-/// [`new`]: struct.Uniform.html#method.new
-/// [`new_inclusive`]: struct.Uniform.html#method.new_inclusive
+/// [`new`]: Uniform::new
+/// [`new_inclusive`]: Uniform::new_inclusive
 #[derive(Clone, Copy, Debug)]
 pub struct Uniform<X: SampleUniform> {
     inner: X::Sampler,
@@ -206,9 +202,7 @@
 /// See the [module documentation] on how to implement [`Uniform`] range
 /// sampling for a custom type.
 ///
-/// [`UniformSampler`]: trait.UniformSampler.html
-/// [module documentation]: index.html
-/// [`Uniform`]: struct.Uniform.html
+/// [module documentation]: crate::distributions::uniform
 pub trait SampleUniform: Sized {
     /// The `UniformSampler` implementation supporting type `X`.
     type Sampler: UniformSampler<X = Self>;
@@ -222,9 +216,8 @@
 /// Implementation of [`sample_single`] is optional, and is only useful when
 /// the implementation can be faster than `Self::new(low, high).sample(rng)`.
 ///
-/// [module documentation]: index.html
-/// [`Uniform`]: struct.Uniform.html
-/// [`sample_single`]: trait.UniformSampler.html#method.sample_single
+/// [module documentation]: crate::distributions::uniform
+/// [`sample_single`]: UniformSampler::sample_single
 pub trait UniformSampler: Sized {
     /// The type sampled by this implementation.
     type X;
@@ -288,11 +281,11 @@
 /// only for SampleUniform and references to SampleUniform in
 /// order to resolve ambiguity issues.
 ///
-/// [`Borrow`]: https://doc.rust-lang.org/std/borrow/trait.Borrow.html
+/// [`Borrow`]: std::borrow::Borrow
 pub trait SampleBorrow<Borrowed> {
     /// Immutably borrows from an owned value. See [`Borrow::borrow`]
     ///
-    /// [`Borrow::borrow`]: https://doc.rust-lang.org/std/borrow/trait.Borrow.html#tymethod.borrow
+    /// [`Borrow::borrow`]: std::borrow::Borrow::borrow
     fn borrow(&self) -> &Borrowed;
 }
 impl<Borrowed> SampleBorrow<Borrowed> for Borrowed where Borrowed: SampleUniform {
@@ -345,9 +338,6 @@
 /// An alternative to using a modulus is widening multiply: After a widening
 /// multiply by `range`, the result is in the high word. Then comparing the low
 /// word against `zone` makes sure our distribution is uniform.
-///
-/// [`UniformSampler`]: trait.UniformSampler.html
-/// [`Uniform`]: struct.Uniform.html
 #[derive(Clone, Copy, Debug)]
 pub struct UniformInt<X> {
     low: X,
@@ -646,11 +636,9 @@
 /// multiply and addition. Values produced this way have what equals 22 bits of
 /// random digits for an `f32`, and 52 for an `f64`.
 ///
-/// [`UniformSampler`]: trait.UniformSampler.html
-/// [`new`]: trait.UniformSampler.html#tymethod.new
-/// [`new_inclusive`]: trait.UniformSampler.html#tymethod.new_inclusive
-/// [`Uniform`]: struct.Uniform.html
-/// [`Standard`]: ../struct.Standard.html
+/// [`new`]: UniformSampler::new
+/// [`new_inclusive`]: UniformSampler::new_inclusive
+/// [`Standard`]: crate::distributions::Standard
 #[derive(Clone, Copy, Debug)]
 pub struct UniformFloat<X> {
     low: X,
@@ -833,9 +821,6 @@
 ///
 /// Unless you are implementing [`UniformSampler`] for your own types, this type
 /// should not be used directly, use [`Uniform`] instead.
-///
-/// [`UniformSampler`]: trait.UniformSampler.html
-/// [`Uniform`]: struct.Uniform.html
 #[cfg(any(feature = "std", rustc_1_25))]
 #[derive(Clone, Copy, Debug)]
 pub struct UniformDuration {
diff --git a/rustc_deps/vendor/rand/src/distributions/weighted.rs b/rustc_deps/vendor/rand/src/distributions/weighted.rs
index 01c8fe6..d749959 100644
--- a/rustc_deps/vendor/rand/src/distributions/weighted.rs
+++ b/rustc_deps/vendor/rand/src/distributions/weighted.rs
@@ -40,9 +40,9 @@
 /// `N` is the number of weights.
 ///
 /// Sampling from `WeightedIndex` will result in a single call to
-/// [`Uniform<X>::sample`], which typically will request a single value from
-/// the underlying [`RngCore`], though the exact number depends on the
-/// implementaiton of [`Uniform<X>::sample`].
+/// `Uniform<X>::sample` (method of the [`Distribution`] trait), which typically
+/// will request a single value from the underlying [`RngCore`], though the
+/// exact number depends on the implementaiton of `Uniform<X>::sample`.
 ///
 /// # Example
 ///
@@ -67,9 +67,8 @@
 /// }
 /// ```
 ///
-/// [`Uniform<X>`]: struct.Uniform.html
-/// [`Uniform<X>::sample`]: struct.Uniform.html#method.sample
-/// [`RngCore`]: ../trait.RngCore.html
+/// [`Uniform<X>`]: crate::distributions::uniform::Uniform
+/// [`RngCore`]: rand_core::RngCore
 #[derive(Debug, Clone)]
 pub struct WeightedIndex<X: SampleUniform + PartialOrd> {
     cumulative_weights: Vec<X>,
@@ -84,8 +83,7 @@
     /// Returns an error if the iterator is empty, if any weight is `< 0`, or
     /// if its total value is 0.
     ///
-    /// [`Distribution`]: trait.Distribution.html
-    /// [`Uniform<X>`]: struct.Uniform.html
+    /// [`Uniform<X>`]: crate::distributions::uniform::Uniform
     pub fn new<I>(weights: I) -> Result<WeightedIndex<X>, WeightedError>
         where I: IntoIterator,
               I::Item: SampleBorrow<X>,
diff --git a/rustc_deps/vendor/rand/src/lib.rs b/rustc_deps/vendor/rand/src/lib.rs
index 052621e..9c0482f 100644
--- a/rustc_deps/vendor/rand/src/lib.rs
+++ b/rustc_deps/vendor/rand/src/lib.rs
@@ -17,7 +17,7 @@
 //! To get you started quickly, the easiest and highest-level way to get
 //! a random value is to use [`random()`]; alternatively you can use
 //! [`thread_rng()`]. The [`Rng`] trait provides a useful API on all RNGs, while
-//! the [`distributions` module] and [`seq` module] provide further
+//! the [`distributions`] and [`seq`] modules provide further
 //! functionality on top of RNGs.
 //!
 //! ```
@@ -39,12 +39,6 @@
 //!
 //! For the user guide and futher documentation, please read
 //! [The Rust Rand Book](https://rust-random.github.io/book).
-//!
-//! [`distributions` module]: distributions/index.html
-//! [`random()`]: fn.random.html
-//! [`Rng`]: trait.Rng.html
-//! [`seq` module]: seq/index.html
-//! [`thread_rng()`]: fn.thread_rng.html
 
 
 #![doc(html_logo_url = "https://www.rust-lang.org/logos/rust-logo-128x128-blk.png",
@@ -58,17 +52,13 @@
 #![cfg_attr(not(feature="std"), no_std)]
 #![cfg_attr(all(feature="alloc", not(feature="std")), feature(alloc))]
 #![cfg_attr(all(feature="simd_support", feature="nightly"), feature(stdsimd))]
-#![cfg_attr(feature = "stdweb", recursion_limit="128")]
 
 #[cfg(feature = "std")] extern crate core;
 #[cfg(all(feature = "alloc", not(feature="std")))] #[macro_use] extern crate alloc;
 
 #[cfg(feature="simd_support")] extern crate packed_simd;
 
-#[cfg(all(target_arch="wasm32", not(target_os="emscripten"), feature="stdweb"))]
-#[macro_use]
-extern crate stdweb;
-
+extern crate rand_jitter;
 #[cfg(feature = "rand_os")]
 extern crate rand_os;
 
@@ -119,23 +109,7 @@
 #[cfg(feature="std")] #[doc(hidden)] pub use deprecated::EntropyRng;
 
 #[allow(deprecated)]
-#[cfg(all(feature="std",
-          any(target_os = "linux", target_os = "android",
-              target_os = "netbsd",
-              target_os = "dragonfly",
-              target_os = "haiku",
-              target_os = "emscripten",
-              target_os = "solaris",
-              target_os = "cloudabi",
-              target_os = "macos", target_os = "ios",
-              target_os = "freebsd",
-              target_os = "openbsd", target_os = "bitrig",
-              target_os = "redox",
-              target_os = "fuchsia",
-              windows,
-              all(target_arch = "wasm32", feature = "stdweb"),
-              all(target_arch = "wasm32", feature = "wasm-bindgen"),
-)))]
+#[cfg(feature="rand_os")]
 #[doc(hidden)]
 pub use deprecated::OsRng;
 
@@ -152,23 +126,7 @@
     pub use rngs::TimerError;
 }
 #[allow(deprecated)]
-#[cfg(all(feature="std",
-          any(target_os = "linux", target_os = "android",
-              target_os = "netbsd",
-              target_os = "dragonfly",
-              target_os = "haiku",
-              target_os = "emscripten",
-              target_os = "solaris",
-              target_os = "cloudabi",
-              target_os = "macos", target_os = "ios",
-              target_os = "freebsd",
-              target_os = "openbsd", target_os = "bitrig",
-              target_os = "redox",
-              target_os = "fuchsia",
-              windows,
-              all(target_arch = "wasm32", feature = "stdweb"),
-              all(target_arch = "wasm32", feature = "wasm-bindgen"),
-)))]
+#[cfg(feature="rand_os")]
 #[doc(hidden)]
 pub mod os {
     pub use deprecated::OsRng;
@@ -237,12 +195,10 @@
 ///
 /// # let v = foo(&mut thread_rng());
 /// ```
-///
-/// [`RngCore`]: trait.RngCore.html
 pub trait Rng: RngCore {
     /// Return a random value supporting the [`Standard`] distribution.
     ///
-    /// [`Standard`]: distributions/struct.Standard.html
+    /// [`Standard`]: distributions::Standard
     ///
     /// # Example
     ///
@@ -282,7 +238,7 @@
     /// println!("{}", m);
     /// ```
     ///
-    /// [`Uniform`]: distributions/uniform/struct.Uniform.html
+    /// [`Uniform`]: distributions::uniform::Uniform
     fn gen_range<T: SampleUniform, B1, B2>(&mut self, low: B1, high: B2) -> T
         where B1: SampleBorrow<T> + Sized,
               B2: SampleBorrow<T> + Sized {
@@ -360,9 +316,8 @@
     /// thread_rng().fill(&mut arr[..]);
     /// ```
     ///
-    /// [`fill_bytes`]: trait.RngCore.html#method.fill_bytes
-    /// [`try_fill`]: trait.Rng.html#method.try_fill
-    /// [`AsByteSliceMut`]: trait.AsByteSliceMut.html
+    /// [`fill_bytes`]: RngCore::fill_bytes
+    /// [`try_fill`]: Rng::try_fill
     fn fill<T: AsByteSliceMut + ?Sized>(&mut self, dest: &mut T) {
         self.fill_bytes(dest.as_byte_slice_mut());
         dest.to_le();
@@ -395,10 +350,8 @@
     /// # try_inner().unwrap()
     /// ```
     ///
-    /// [`ErrorKind`]: enum.ErrorKind.html
-    /// [`try_fill_bytes`]: trait.RngCore.html#method.try_fill_bytes
-    /// [`fill`]: trait.Rng.html#method.fill
-    /// [`AsByteSliceMut`]: trait.AsByteSliceMut.html
+    /// [`try_fill_bytes`]: RngCore::try_fill_bytes
+    /// [`fill`]: Rng::fill
     fn try_fill<T: AsByteSliceMut + ?Sized>(&mut self, dest: &mut T) -> Result<(), Error> {
         self.try_fill_bytes(dest.as_byte_slice_mut())?;
         dest.to_le();
@@ -423,7 +376,7 @@
     ///
     /// If `p < 0` or `p > 1`.
     ///
-    /// [`Bernoulli`]: distributions/bernoulli/struct.Bernoulli.html
+    /// [`Bernoulli`]: distributions::bernoulli::Bernoulli
     #[inline]
     fn gen_bool(&mut self, p: f64) -> bool {
         let d = distributions::Bernoulli::new(p);
@@ -452,7 +405,7 @@
     /// println!("{}", rng.gen_ratio(2, 3));
     /// ```
     ///
-    /// [`Bernoulli`]: distributions/bernoulli/struct.Bernoulli.html
+    /// [`Bernoulli`]: distributions::bernoulli::Bernoulli
     #[inline]
     fn gen_ratio(&mut self, numerator: u32, denominator: u32) -> bool {
         let d = distributions::Bernoulli::from_ratio(numerator, denominator);
@@ -461,9 +414,7 @@
 
     /// Return a random element from `values`.
     ///
-    /// Deprecated: use [`SliceRandom::choose`] instead.
-    ///
-    /// [`SliceRandom::choose`]: seq/trait.SliceRandom.html#method.choose
+    /// Deprecated: use [`seq::SliceRandom::choose`] instead.
     #[deprecated(since="0.6.0", note="use SliceRandom::choose instead")]
     fn choose<'a, T>(&mut self, values: &'a [T]) -> Option<&'a T> {
         use seq::SliceRandom;
@@ -472,9 +423,7 @@
 
     /// Return a mutable pointer to a random element from `values`.
     ///
-    /// Deprecated: use [`SliceRandom::choose_mut`] instead.
-    ///
-    /// [`SliceRandom::choose_mut`]: seq/trait.SliceRandom.html#method.choose_mut
+    /// Deprecated: use [`seq::SliceRandom::choose_mut`] instead.
     #[deprecated(since="0.6.0", note="use SliceRandom::choose_mut instead")]
     fn choose_mut<'a, T>(&mut self, values: &'a mut [T]) -> Option<&'a mut T> {
         use seq::SliceRandom;
@@ -483,9 +432,7 @@
 
     /// Shuffle a mutable slice in place.
     ///
-    /// Deprecated: use [`SliceRandom::shuffle`] instead.
-    ///
-    /// [`SliceRandom::shuffle`]: seq/trait.SliceRandom.html#method.shuffle
+    /// Deprecated: use [`seq::SliceRandom::shuffle`] instead.
     #[deprecated(since="0.6.0", note="use SliceRandom::shuffle instead")]
     fn shuffle<T>(&mut self, values: &mut [T]) {
         use seq::SliceRandom;
@@ -497,10 +444,7 @@
 
 /// Trait for casting types to byte slices
 ///
-/// This is used by the [`fill`] and [`try_fill`] methods.
-///
-/// [`fill`]: trait.Rng.html#method.fill
-/// [`try_fill`]: trait.Rng.html#method.try_fill
+/// This is used by the [`Rng::fill`] and [`Rng::try_fill`] methods.
 pub trait AsByteSliceMut {
     /// Return a mutable reference to self as a byte slice
     fn as_byte_slice_mut(&mut self) -> &mut [u8];
@@ -617,9 +561,7 @@
 /// println!("Random die roll: {}", rng.gen_range(1, 7));
 /// ```
 ///
-/// [`EntropyRng`]: rngs/struct.EntropyRng.html
-/// [`SeedableRng`]: trait.SeedableRng.html
-/// [`SeedableRng::from_seed`]: trait.SeedableRng.html#tymethod.from_seed
+/// [`EntropyRng`]: rngs::EntropyRng
 #[cfg(feature="std")]
 pub trait FromEntropy: SeedableRng {
     /// Creates a new instance, automatically seeded with fresh entropy.
@@ -704,69 +646,13 @@
 /// }
 /// ```
 ///
-/// [`thread_rng`]: fn.thread_rng.html
-/// [`Standard`]: distributions/struct.Standard.html
+/// [`Standard`]: distributions::Standard
 #[cfg(feature="std")]
 #[inline]
 pub fn random<T>() -> T where Standard: Distribution<T> {
     thread_rng().gen()
 }
 
-// Due to rustwasm/wasm-bindgen#201 this can't be defined in the inner os
-// modules, so hack around it for now and place it at the root.
-#[cfg(all(feature = "wasm-bindgen", target_arch = "wasm32"))]
-#[doc(hidden)]
-#[allow(missing_debug_implementations)]
-pub mod __wbg_shims {
-
-    // `extern { type Foo; }` isn't supported on 1.22 syntactically, so use a
-    // macro to work around that.
-    macro_rules! rust_122_compat {
-        ($($t:tt)*) => ($($t)*)
-    }
-
-    rust_122_compat! {
-        extern crate wasm_bindgen;
-
-        pub use wasm_bindgen::prelude::*;
-
-        #[wasm_bindgen]
-        extern "C" {
-            pub type Function;
-            #[wasm_bindgen(constructor)]
-            pub fn new(s: &str) -> Function;
-            #[wasm_bindgen(method)]
-            pub fn call(this: &Function, self_: &JsValue) -> JsValue;
-
-            pub type This;
-            #[wasm_bindgen(method, getter, structural, js_name = self)]
-            pub fn self_(me: &This) -> JsValue;
-            #[wasm_bindgen(method, getter, structural)]
-            pub fn crypto(me: &This) -> JsValue;
-
-            #[derive(Clone, Debug)]
-            pub type BrowserCrypto;
-
-            // TODO: these `structural` annotations here ideally wouldn't be here to
-            // avoid a JS shim, but for now with feature detection they're
-            // unavoidable.
-            #[wasm_bindgen(method, js_name = getRandomValues, structural, getter)]
-            pub fn get_random_values_fn(me: &BrowserCrypto) -> JsValue;
-            #[wasm_bindgen(method, js_name = getRandomValues, structural)]
-            pub fn get_random_values(me: &BrowserCrypto, buf: &mut [u8]);
-
-            #[wasm_bindgen(js_name = require)]
-            pub fn node_require(s: &str) -> NodeCrypto;
-
-            #[derive(Clone, Debug)]
-            pub type NodeCrypto;
-
-            #[wasm_bindgen(method, js_name = randomFillSync, structural)]
-            pub fn random_fill_sync(me: &NodeCrypto, buf: &mut [u8]);
-        }
-    }
-}
-
 #[cfg(test)]
 mod test {
     use rngs::mock::StepRng;
diff --git a/rustc_deps/vendor/rand/src/rngs/adapter/read.rs b/rustc_deps/vendor/rand/src/rngs/adapter/read.rs
index 30b6de6..9b9c18b 100644
--- a/rustc_deps/vendor/rand/src/rngs/adapter/read.rs
+++ b/rustc_deps/vendor/rand/src/rngs/adapter/read.rs
@@ -15,7 +15,7 @@
 
 
 /// An RNG that reads random bytes straight from any type supporting
-/// `std::io::Read`, for example files.
+/// [`std::io::Read`], for example files.
 ///
 /// This will work best with an infinite reader, but that is not required.
 ///
@@ -24,10 +24,10 @@
 ///
 /// # Panics
 ///
-/// `ReadRng` uses `std::io::read_exact`, which retries on interrupts. All other
-/// errors from the underlying reader, including when it does not have enough
-/// data, will only be reported through [`try_fill_bytes`]. The other
-/// [`RngCore`] methods will panic in case of an error.
+/// `ReadRng` uses [`std::io::Read::read_exact`], which retries on interrupts.
+/// All other errors from the underlying reader, including when it does not
+/// have enough data, will only be reported through [`try_fill_bytes`].
+/// The other [`RngCore`] methods will panic in case of an error.
 ///
 /// # Example
 ///
@@ -40,9 +40,8 @@
 /// println!("{:x}", rng.gen::<u32>());
 /// ```
 ///
-/// [`OsRng`]: ../struct.OsRng.html
-/// [`RngCore`]: ../../trait.RngCore.html
-/// [`try_fill_bytes`]: ../../trait.RngCore.html#method.tymethod.try_fill_bytes
+/// [`OsRng`]: rand_os::OsRng
+/// [`try_fill_bytes`]: RngCore::try_fill_bytes
 #[derive(Debug)]
 pub struct ReadRng<R> {
     reader: R
diff --git a/rustc_deps/vendor/rand/src/rngs/adapter/reseeding.rs b/rustc_deps/vendor/rand/src/rngs/adapter/reseeding.rs
index 016afab..ed2aab4 100644
--- a/rustc_deps/vendor/rand/src/rngs/adapter/reseeding.rs
+++ b/rustc_deps/vendor/rand/src/rngs/adapter/reseeding.rs
@@ -79,11 +79,11 @@
 /// # }
 /// ```
 ///
-/// [`ChaChaCore`]: ../../../rand_chacha/struct.ChaChaCore.html
-/// [`Hc128Core`]: ../../../rand_hc/struct.Hc128Core.html
-/// [`BlockRngCore`]: ../../../rand_core/block/trait.BlockRngCore.html
-/// [`ReseedingRng::new`]: struct.ReseedingRng.html#method.new
-/// [`reseed()`]: struct.ReseedingRng.html#method.reseed
+/// [`ChaChaCore`]: rand_chacha::ChaChaCore
+/// [`Hc128Core`]: rand_hc::Hc128Core
+/// [`BlockRngCore`]: rand_core::block::BlockRngCore
+/// [`ReseedingRng::new`]: ReseedingRng::new
+/// [`reseed()`]: ReseedingRng::reseed
 #[derive(Debug)]
 pub struct ReseedingRng<R, Rsdr>(BlockRng<ReseedingCore<R, Rsdr>>)
 where R: BlockRngCore + SeedableRng,
diff --git a/rustc_deps/vendor/rand/src/rngs/entropy.rs b/rustc_deps/vendor/rand/src/rngs/entropy.rs
index 8736324..9a2affd 100644
--- a/rustc_deps/vendor/rand/src/rngs/entropy.rs
+++ b/rustc_deps/vendor/rand/src/rngs/entropy.rs
@@ -38,11 +38,10 @@
 /// report the error, and only the one from `OsRng`. The other [`RngCore`]
 /// methods will panic in case of an error.
 ///
-/// [`OsRng`]: struct.OsRng.html
-/// [`JitterRng`]: jitter/struct.JitterRng.html
-/// [`thread_rng`]: ../fn.thread_rng.html
-/// [`RngCore`]: ../trait.RngCore.html
-/// [`try_fill_bytes`]: ../trait.RngCore.html#method.tymethod.try_fill_bytes
+/// [`OsRng`]: rand_os::OsRng
+/// [`thread_rng`]: crate::thread_rng
+/// [`JitterRng`]: crate::rngs::JitterRng
+/// [`try_fill_bytes`]: RngCore::try_fill_bytes
 #[derive(Debug)]
 pub struct EntropyRng {
     source: Source,
@@ -191,43 +190,11 @@
 }
 
 
-#[cfg(all(feature="std",
-          any(target_os = "linux", target_os = "android",
-              target_os = "netbsd",
-              target_os = "dragonfly",
-              target_os = "haiku",
-              target_os = "emscripten",
-              target_os = "solaris",
-              target_os = "cloudabi",
-              target_os = "macos", target_os = "ios",
-              target_os = "freebsd",
-              target_os = "openbsd", target_os = "bitrig",
-              target_os = "redox",
-              target_os = "fuchsia",
-              windows,
-              all(target_arch = "wasm32", feature = "stdweb"),
-              all(target_arch = "wasm32", feature = "wasm-bindgen"),
-)))]
+#[cfg(feature="rand_os")]
 #[derive(Clone, Debug)]
 pub struct Os(rngs::OsRng);
 
-#[cfg(all(feature="std",
-          any(target_os = "linux", target_os = "android",
-              target_os = "netbsd",
-              target_os = "dragonfly",
-              target_os = "haiku",
-              target_os = "emscripten",
-              target_os = "solaris",
-              target_os = "cloudabi",
-              target_os = "macos", target_os = "ios",
-              target_os = "freebsd",
-              target_os = "openbsd", target_os = "bitrig",
-              target_os = "redox",
-              target_os = "fuchsia",
-              windows,
-              all(target_arch = "wasm32", feature = "stdweb"),
-              all(target_arch = "wasm32", feature = "wasm-bindgen"),
-)))]
+#[cfg(feature="rand_os")]
 impl EntropySource for Os {
     fn new_and_fill(dest: &mut [u8]) -> Result<Self, Error> {
         let mut rng = rngs::OsRng::new()?;
@@ -240,23 +207,7 @@
     }
 }
 
-#[cfg(not(all(feature="std",
-              any(target_os = "linux", target_os = "android",
-                  target_os = "netbsd",
-                  target_os = "dragonfly",
-                  target_os = "haiku",
-                  target_os = "emscripten",
-                  target_os = "solaris",
-                  target_os = "cloudabi",
-                  target_os = "macos", target_os = "ios",
-                  target_os = "freebsd",
-                  target_os = "openbsd", target_os = "bitrig",
-                  target_os = "redox",
-                  target_os = "fuchsia",
-                  windows,
-                  all(target_arch = "wasm32", feature = "stdweb"),
-                  all(target_arch = "wasm32", feature = "wasm-bindgen"),
-))))]
+#[cfg(not(feature="std"))]
 type Os = NoSource;
 
 
diff --git a/rustc_deps/vendor/rand/src/rngs/mod.rs b/rustc_deps/vendor/rand/src/rngs/mod.rs
index 528e24d..b3f05a0 100644
--- a/rustc_deps/vendor/rand/src/rngs/mod.rs
+++ b/rustc_deps/vendor/rand/src/rngs/mod.rs
@@ -53,7 +53,7 @@
 //!   which is one of the recommendations by ECRYPT's eSTREAM project.
 //!
 //! The above PRNGs do not cover all use-cases; more algorithms can be found in
-//! the [`prng` module], as well as in several other crates. For example, you
+//! the [`prng`][crate::prng] module, as well as in several other crates. For example, you
 //! may wish a CSPRNG with significantly lower memory usage than [`StdRng`]
 //! while being less concerned about performance, in which case [`ChaChaRng`]
 //! is a good choice.
@@ -83,19 +83,19 @@
 //!   to reproduce the output sequence by using a fixed seed. (Don't use
 //!   [`StdRng`] or [`SmallRng`] in this case since different algorithms may be
 //!   used by future versions of Rand; use an algorithm from the
-//!   [`prng` module].)
+//!   [`prng`] module.)
 //!
 //! ## Conclusion
 //!
 //! - [`thread_rng`] is what you often want to use.
 //! - If you want more control, flexibility, or better performance, use
-//!   [`StdRng`], [`SmallRng`] or an algorithm from the [`prng` module].
+//!   [`StdRng`], [`SmallRng`] or an algorithm from the [`prng`] module.
 //! - Use [`FromEntropy::from_entropy`] to seed new PRNGs.
 //! - If you need reproducibility, use [`SeedableRng::from_seed`] combined with
 //!   a named PRNG.
 //!
 //! More information and notes on cryptographic security can be found
-//! in the [`prng` module].
+//! in the [`prng`] module.
 //!
 //! ## Examples
 //!
@@ -135,35 +135,20 @@
 //! [`CryptoRng`] is a marker trait cryptographically secure PRNGs can
 //! implement.
 //!
-//!
-// This module:
-//! [`ThreadRng`]: struct.ThreadRng.html
-//! [`StdRng`]: struct.StdRng.html
-//! [`SmallRng`]: struct.SmallRng.html
-//! [`EntropyRng`]: struct.EntropyRng.html
-//! [`OsRng`]: struct.OsRng.html
-//! [`JitterRng`]: struct.JitterRng.html
-// Other traits and functions:
-//! [`rand_core`]: https://crates.io/crates/rand_core
-//! [`prng` module]: ../prng/index.html
-//! [`CryptoRng`]: ../trait.CryptoRng.html
-//! [`FromEntropy`]: ../trait.FromEntropy.html
-//! [`FromEntropy::from_entropy`]: ../trait.FromEntropy.html#tymethod.from_entropy
-//! [`RngCore`]: ../trait.RngCore.html
-//! [`Rng`]: ../trait.Rng.html
-//! [`SeedableRng`]: ../trait.SeedableRng.html
-//! [`SeedableRng::from_rng`]: ../trait.SeedableRng.html#tymethod.from_rng
-//! [`SeedableRng::from_seed`]: ../trait.SeedableRng.html#tymethod.from_seed
-//! [`thread_rng`]: ../fn.thread_rng.html
-//! [`mock::StepRng`]: mock/struct.StepRng.html
-//! [`adapter::ReadRng`]: adapter/struct.ReadRng.html
-//! [`adapter::ReseedingRng`]: adapter/struct.ReseedingRng.html
-//! [`ChaChaRng`]: ../../rand_chacha/struct.ChaChaRng.html
+//! [`OsRng`]: rand_os::OsRng
+//! [`SmallRng`]: rngs::SmallRng
+//! [`StdRng`]: rngs::StdRng
+//! [`ThreadRng`]: rngs::ThreadRng
+//! [`EntropyRng`]: rngs::EntropyRng
+//! [`JitterRng`]: rngs::JitterRng
+//! [`mock::StepRng`]: rngs::mock::StepRng
+//! [`adapter::ReadRng`]: rngs::adapter::ReadRng
+//! [`adapter::ReseedingRng`]: rngs::adapter::ReseedingRng
+//! [`ChaChaRng`]: rand_chacha::ChaChaRng
 
 pub mod adapter;
 
 #[cfg(feature="std")] mod entropy;
-mod jitter;
 pub mod mock;   // Public so we don't export `StepRng` directly, making it a bit
                 // more clear it is intended for testing.
 mod small;
@@ -171,12 +156,12 @@
 #[cfg(feature="std")] pub(crate) mod thread;
 
 
-pub use self::jitter::{JitterRng, TimerError};
+pub use rand_jitter::{JitterRng, TimerError};
 #[cfg(feature="std")] pub use self::entropy::EntropyRng;
 
 pub use self::small::SmallRng;
 pub use self::std::StdRng;
 #[cfg(feature="std")] pub use self::thread::ThreadRng;
 
-#[cfg(feature="std")]
+#[cfg(feature="rand_os")]
 pub use rand_os::OsRng;
diff --git a/rustc_deps/vendor/rand/src/rngs/small.rs b/rustc_deps/vendor/rand/src/rngs/small.rs
index b652c8c..9874d24 100644
--- a/rustc_deps/vendor/rand/src/rngs/small.rs
+++ b/rustc_deps/vendor/rand/src/rngs/small.rs
@@ -24,11 +24,13 @@
 /// future library versions may use a different internal generator with
 /// different output. Further, this generator may not be portable and can
 /// produce different output depending on the architecture. If you require
-/// reproducible output, use a named RNG. Refer to the documentation on the
-/// [`prng` module](../prng/index.html).
+/// reproducible output, use a named RNG.
+/// Refer to [The Book](https://rust-random.github.io/book/guide-rngs.html).
+/// 
 ///
-/// The current algorithm is [`Pcg64Mcg`] on 64-bit platforms with Rust version
-/// 1.26 and later, or [`Pcg32`] otherwise.
+/// The current algorithm is [`Pcg64Mcg`][rand_pcg::Pcg64Mcg] on 64-bit platforms with Rust version
+/// 1.26 and later, or [`Pcg32`][rand_pcg::Pcg32] otherwise. Both are found in
+/// the [rand_pcg] crate.
 ///
 /// # Examples
 ///
@@ -64,11 +66,10 @@
 ///     .collect();
 /// ```
 ///
-/// [`FromEntropy`]: ../trait.FromEntropy.html
-/// [`StdRng`]: struct.StdRng.html
-/// [`thread_rng`]: ../fn.thread_rng.html
-/// [`Pcg64Mcg`]: ../../rand_pcg/type.Pcg64Mcg.html
-/// [`Pcg32`]: ../../rand_pcg/type.Pcg32.html
+/// [`FromEntropy`]: crate::FromEntropy
+/// [`StdRng`]: crate::rngs::StdRng
+/// [`thread_rng`]: crate::thread_rng
+/// [rand_pcg]: https://crates.io/crates/rand_pcg
 #[derive(Clone, Debug)]
 pub struct SmallRng(Rng);
 
diff --git a/rustc_deps/vendor/rand/src/rngs/std.rs b/rustc_deps/vendor/rand/src/rngs/std.rs
index ce1658b..e67a76d 100644
--- a/rustc_deps/vendor/rand/src/rngs/std.rs
+++ b/rustc_deps/vendor/rand/src/rngs/std.rs
@@ -15,16 +15,20 @@
 /// on the current platform, to be statistically strong and unpredictable
 /// (meaning a cryptographically secure PRNG).
 ///
-/// The current algorithm used on all platforms is [HC-128].
+/// The current algorithm used on all platforms is [HC-128], found in the
+/// [rand_hc] crate.
 ///
 /// Reproducibility of output from this generator is however not required, thus
 /// future library versions may use a different internal generator with
 /// different output. Further, this generator may not be portable and can
 /// produce different output depending on the architecture. If you require
-/// reproducible output, use a named RNG, for example [`ChaChaRng`].
+/// reproducible output, use a named RNG, for example [`ChaChaRng`] from the
+/// [rand_chacha] crate.
 ///
-/// [HC-128]: ../../rand_hc/struct.Hc128Rng.html
-/// [`ChaChaRng`]: ../../rand_chacha/struct.ChaChaRng.html
+/// [HC-128]: rand_hc::Hc128Rng
+/// [`ChaChaRng`]: rand_chacha::ChaChaRng
+/// [rand_hc]: https://crates.io/crates/rand_hc
+/// [rand_chacha]: https://crates.io/crates/rand_chacha
 #[derive(Clone, Debug)]
 pub struct StdRng(Hc128Rng);
 
diff --git a/rustc_deps/vendor/rand/src/rngs/thread.rs b/rustc_deps/vendor/rand/src/rngs/thread.rs
index be77ddf..f1aa787 100644
--- a/rustc_deps/vendor/rand/src/rngs/thread.rs
+++ b/rustc_deps/vendor/rand/src/rngs/thread.rs
@@ -64,11 +64,9 @@
 /// Cloning this handle just produces a new reference to the same thread-local
 /// generator.
 /// 
-/// [`thread_rng`]: ../fn.thread_rng.html
-/// [`ReseedingRng`]: adapter/struct.ReseedingRng.html
-/// [`StdRng`]: struct.StdRng.html
-/// [`EntropyRng`]: struct.EntropyRng.html
-/// [HC-128]: ../../rand_hc/struct.Hc128Rng.html
+/// [`ReseedingRng`]: crate::rngs::adapter::ReseedingRng
+/// [`StdRng`]: crate::rngs::StdRng
+/// [HC-128]: rand_hc::Hc128Rng
 #[derive(Clone, Debug)]
 pub struct ThreadRng {
     // use of raw pointer implies type is neither Send nor Sync
@@ -94,8 +92,6 @@
 /// `ThreadRng::default()` equivelent.
 ///
 /// For more information see [`ThreadRng`].
-///
-/// [`ThreadRng`]: rngs/struct.ThreadRng.html
 pub fn thread_rng() -> ThreadRng {
     ThreadRng { rng: THREAD_RNG_KEY.with(|t| t.get()) }
 }
@@ -132,7 +128,6 @@
 #[cfg(test)]
 mod test {
     #[test]
-    #[cfg(not(feature="stdweb"))]
     fn test_thread_rng() {
         use Rng;
         let mut r = ::thread_rng();
diff --git a/rustc_deps/vendor/rand/src/seq/index.rs b/rustc_deps/vendor/rand/src/seq/index.rs
index 3d4df3a..a70c736 100644
--- a/rustc_deps/vendor/rand/src/seq/index.rs
+++ b/rustc_deps/vendor/rand/src/seq/index.rs
@@ -39,7 +39,7 @@
 
     /// Return the value at the given `index`.
     ///
-    /// (Note: we cannot implement `std::ops::Index` because of lifetime
+    /// (Note: we cannot implement [`std::ops::Index`] because of lifetime
     /// restrictions.)
     pub fn index(&self, index: usize) -> usize {
         match self {
diff --git a/rustc_deps/vendor/rand/src/seq/mod.rs b/rustc_deps/vendor/rand/src/seq/mod.rs
index 9959602..d0f8308 100644
--- a/rustc_deps/vendor/rand/src/seq/mod.rs
+++ b/rustc_deps/vendor/rand/src/seq/mod.rs
@@ -98,7 +98,7 @@
     /// // 50% chance to print 'a', 25% chance to print 'b', 25% chance to print 'c'
     /// println!("{:?}", choices.choose_weighted(&mut rng, |item| item.1).unwrap().0);
     /// ```
-    /// [`choose`]: trait.SliceRandom.html#method.choose
+    /// [`choose`]: SliceRandom::choose
     #[cfg(feature = "alloc")]
     fn choose_weighted<R, F, B, X>(&self, rng: &mut R, weight: F) -> Result<&Self::Item, WeightedError>
         where R: Rng + ?Sized,
@@ -117,8 +117,8 @@
     ///
     /// See also [`choose_weighted`].
     ///
-    /// [`choose_mut`]: trait.SliceRandom.html#method.choose_mut
-    /// [`choose_weighted`]: trait.SliceRandom.html#method.choose_weighted
+    /// [`choose_mut`]: SliceRandom::choose_mut
+    /// [`choose_weighted`]: SliceRandom::choose_weighted
     #[cfg(feature = "alloc")]
     fn choose_weighted_mut<R, F, B, X>(&mut self, rng: &mut R, weight: F) -> Result<&mut Self::Item, WeightedError>
         where R: Rng + ?Sized,
@@ -181,8 +181,8 @@
     /// This likely consumes multiple random numbers, but the exact number
     /// is unspecified.
     ///
-    /// [`choose`]: trait.SliceRandom.html#method.choose
-    /// [`choose_mut`]: trait.SliceRandom.html#method.choose_mut
+    /// [`choose`]: SliceRandom::method.choose
+    /// [`choose_mut`]: SliceRandom::choose_mut
     fn choose<R>(mut self, rng: &mut R) -> Option<Self::Item>
         where R: Rng + ?Sized
     {
@@ -406,8 +406,7 @@
 impl<I> IteratorRandom for I where I: Iterator + Sized {}
 
 
-/// Iterator over multiple choices, as returned by [`SliceRandom::choose_multiple](
-/// trait.SliceRandom.html#method.choose_multiple).
+/// Iterator over multiple choices, as returned by [`SliceRandom::choose_multiple]
 #[cfg(feature = "alloc")]
 #[derive(Debug)]
 pub struct SliceChooseIter<'a, S: ?Sized + 'a, T: 'a> {
@@ -443,8 +442,6 @@
 /// Randomly sample `amount` elements from a finite iterator.
 ///
 /// Deprecated: use [`IteratorRandom::choose_multiple`] instead.
-/// 
-/// [`IteratorRandom::choose_multiple`]: trait.IteratorRandom.html#method.choose_multiple
 #[cfg(feature = "alloc")]
 #[deprecated(since="0.6.0", note="use IteratorRandom::choose_multiple instead")]
 pub fn sample_iter<T, I, R>(rng: &mut R, iterable: I, amount: usize) -> Result<Vec<T>, Vec<T>>
@@ -470,8 +467,6 @@
 /// Panics if `amount > slice.len()`
 ///
 /// Deprecated: use [`SliceRandom::choose_multiple`] instead.
-/// 
-/// [`SliceRandom::choose_multiple`]: trait.SliceRandom.html#method.choose_multiple
 #[cfg(feature = "alloc")]
 #[deprecated(since="0.6.0", note="use SliceRandom::choose_multiple instead")]
 pub fn sample_slice<R, T>(rng: &mut R, slice: &[T], amount: usize) -> Vec<T>
@@ -494,8 +489,6 @@
 /// Panics if `amount > slice.len()`
 ///
 /// Deprecated: use [`SliceRandom::choose_multiple`] instead.
-/// 
-/// [`SliceRandom::choose_multiple`]: trait.SliceRandom.html#method.choose_multiple
 #[cfg(feature = "alloc")]
 #[deprecated(since="0.6.0", note="use SliceRandom::choose_multiple instead")]
 pub fn sample_slice_ref<'a, R, T>(rng: &mut R, slice: &'a [T], amount: usize) -> Vec<&'a T>
diff --git a/rustc_deps/vendor/rand_core-0.2.2/.cargo-checksum.json b/rustc_deps/vendor/rand_core-0.2.2/.cargo-checksum.json
deleted file mode 100644
index 199b5c6..0000000
--- a/rustc_deps/vendor/rand_core-0.2.2/.cargo-checksum.json
+++ /dev/null
@@ -1 +0,0 @@
-{"files":{"CHANGELOG.md":"2100b7980aca4ab3c8a18e328e44f188d1228f7fbd03b3b199ad0a26420c13e9","Cargo.toml":"e826280705d51d40b41c5024e7cce9290cd4ad851fad9deb13c1297f2e7da0e9","LICENSE-APACHE":"aaff376532ea30a0cd5330b9502ad4a4c8bf769c539c87ffe78819d188a18ebf","LICENSE-MIT":"6485b8ed310d3f0340bf1ad1f47645069ce4069dcc6bb46c7d5c6faf41de1fdb","README.md":"a0b90ee9e161a6d88a935ef08e223d2fa693ec445f1e8b089e07ebb6a4e8ed0a","src/block.rs":"c62afe06bc6c8160e0511d54c963fca892a11ae19e9ebf7c1637971f7d9f5571","src/error.rs":"574eba8dc83268b25614fe1ed23d57ac8db77f01fb20bf7771a90907c53f09da","src/impls.rs":"e99b27b77ab7a47fc92f832e51807fc80617a72e70e28343e2c59caa5ce7e109","src/le.rs":"d2c029d5d215769eb6136d3678053d013cad49996c67cd6734412b5249869634","src/lib.rs":"a56fe0ef1ebeac386bdf69a544aee4f3612a0a2bb9d361a1f9ec4685ebfe7ad6"},"package":"1961a422c4d189dfb50ffa9320bf1f2a9bd54ecb92792fb9477f99a1045f3372"}
\ No newline at end of file
diff --git a/rustc_deps/vendor/rand_core-0.3.1/.cargo-checksum.json b/rustc_deps/vendor/rand_core-0.3.1/.cargo-checksum.json
new file mode 100644
index 0000000..1fd20d4
--- /dev/null
+++ b/rustc_deps/vendor/rand_core-0.3.1/.cargo-checksum.json
@@ -0,0 +1 @@
+{"files":{"CHANGELOG.md":"35b32c8dc19610e66f7c6967e93f5a0f49e5a021c633da72e7219571cfb7b457","COPYRIGHT":"90eb64f0279b0d9432accfa6023ff803bc4965212383697eee27a0f426d5f8d5","Cargo.toml":"38f22c1be27541f74b322a721c95aaacd622cddfa02cfa22f7976d613453dc78","LICENSE-APACHE":"aaff376532ea30a0cd5330b9502ad4a4c8bf769c539c87ffe78819d188a18ebf","LICENSE-MIT":"209fbbe0ad52d9235e37badf9cadfe4dbdc87203179c0899e738b39ade42177b","README.md":"2781af9ae12e434bb3f43c5a3b16b330eea7a8c80065e28e967333a82be7a507","src/block.rs":"43778ab70f0b650c3203a6da70b40bc33afa845a5e14ef88dd26c18a07b70f88","src/error.rs":"8403a968d7c9bd95cc9f23d9dc5cc4771ede8e81dda5a8fdd59d347590345d14","src/impls.rs":"c248ddd04a65c974768baaec028fa0d2a6117525fa27bce8a98f2ba2f352700a","src/le.rs":"cb187f58f7514877918f7f47633397e08e20392dcf072bc245d62c9e5238198c","src/lib.rs":"4452ea591ce26f69e6a3dd1341795faeec5c14af35eb4a17aaf2b5d342753cf0"},"package":"7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b"}
\ No newline at end of file
diff --git a/rustc_deps/vendor/rand_core-0.2.2/CHANGELOG.md b/rustc_deps/vendor/rand_core-0.3.1/CHANGELOG.md
similarity index 89%
rename from rustc_deps/vendor/rand_core-0.2.2/CHANGELOG.md
rename to rustc_deps/vendor/rand_core-0.3.1/CHANGELOG.md
index 76da38b..e375536 100644
--- a/rustc_deps/vendor/rand_core-0.2.2/CHANGELOG.md
+++ b/rustc_deps/vendor/rand_core-0.3.1/CHANGELOG.md
@@ -4,8 +4,11 @@
 The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
 and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
 
-## [0.2.2] - 2018-10-03
-Create a compatibility shim around 0.3.
+## [0.3.1] - 2019-01-25
+- Compatibility shim around version 0.4
+
+## [0.3.0] - 2018-09-24
+- Add `SeedableRng::seed_from_u64` for convenient seeding. (#537)
 
 ## [0.2.1] - 2018-06-08
 - References to a `CryptoRng` now also implement `CryptoRng`. (#470)
diff --git a/rustc_deps/vendor/rand_core-0.3.1/COPYRIGHT b/rustc_deps/vendor/rand_core-0.3.1/COPYRIGHT
new file mode 100644
index 0000000..468d907
--- /dev/null
+++ b/rustc_deps/vendor/rand_core-0.3.1/COPYRIGHT
@@ -0,0 +1,12 @@
+Copyrights in the Rand project are retained by their contributors. No
+copyright assignment is required to contribute to the Rand project.
+
+For full authorship information, see the version control history.
+
+Except as otherwise noted (below and/or in individual files), Rand is
+licensed under the Apache License, Version 2.0 <LICENSE-APACHE> or
+<http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+<LICENSE-MIT> or <http://opensource.org/licenses/MIT>, at your option.
+
+The Rand project includes code from the Rust project
+published under these same licenses.
diff --git a/rustc_deps/vendor/rand_core-0.2.2/Cargo.toml b/rustc_deps/vendor/rand_core-0.3.1/Cargo.toml
similarity index 84%
rename from rustc_deps/vendor/rand_core-0.2.2/Cargo.toml
rename to rustc_deps/vendor/rand_core-0.3.1/Cargo.toml
index d48260f..439b7d1 100644
--- a/rustc_deps/vendor/rand_core-0.2.2/Cargo.toml
+++ b/rustc_deps/vendor/rand_core-0.3.1/Cargo.toml
@@ -12,22 +12,22 @@
 
 [package]
 name = "rand_core"
-version = "0.2.2"
-authors = ["The Rust Project Developers"]
+version = "0.3.1"
+authors = ["The Rand Project Developers", "The Rust Project Developers"]
 description = "Core random number generator traits and tools for implementation.\n"
 homepage = "https://crates.io/crates/rand_core"
-documentation = "https://docs.rs/rand_core"
+documentation = "https://rust-random.github.io/rand/rand_core"
 readme = "README.md"
 keywords = ["random", "rng"]
 categories = ["algorithms", "no-std"]
 license = "MIT/Apache-2.0"
 repository = "https://github.com/rust-random/rand"
 [dependencies.rand_core]
-version = "0.3"
-default-features = false
+version = "0.4"
 
 [features]
 alloc = ["rand_core/alloc"]
+default = ["std"]
 serde1 = ["rand_core/serde1"]
 std = ["rand_core/std"]
 [badges.appveyor]
diff --git a/rustc_deps/vendor/rand_core-0.2.2/LICENSE-APACHE b/rustc_deps/vendor/rand_core-0.3.1/LICENSE-APACHE
similarity index 100%
rename from rustc_deps/vendor/rand_core-0.2.2/LICENSE-APACHE
rename to rustc_deps/vendor/rand_core-0.3.1/LICENSE-APACHE
diff --git a/rustc_deps/vendor/rand_core-0.2.2/LICENSE-MIT b/rustc_deps/vendor/rand_core-0.3.1/LICENSE-MIT
similarity index 95%
rename from rustc_deps/vendor/rand_core-0.2.2/LICENSE-MIT
rename to rustc_deps/vendor/rand_core-0.3.1/LICENSE-MIT
index 39d4bdb..d93b5ba 100644
--- a/rustc_deps/vendor/rand_core-0.2.2/LICENSE-MIT
+++ b/rustc_deps/vendor/rand_core-0.3.1/LICENSE-MIT
@@ -1,3 +1,4 @@
+Copyright 2018 Developers of the Rand project
 Copyright (c) 2014 The Rust Project Developers
 
 Permission is hereby granted, free of charge, to any
diff --git a/rustc_deps/vendor/rand_core-0.2.2/README.md b/rustc_deps/vendor/rand_core-0.3.1/README.md
similarity index 73%
rename from rustc_deps/vendor/rand_core-0.2.2/README.md
rename to rustc_deps/vendor/rand_core-0.3.1/README.md
index 94ee8c5..dee6504 100644
--- a/rustc_deps/vendor/rand_core-0.2.2/README.md
+++ b/rustc_deps/vendor/rand_core-0.3.1/README.md
@@ -1,16 +1,16 @@
 # rand_core
 
-[![Build Status](https://travis-ci.org/rust-lang-nursery/rand.svg)](https://travis-ci.org/rust-lang-nursery/rand)
-[![Build Status](https://ci.appveyor.com/api/projects/status/github/rust-lang-nursery/rand?svg=true)](https://ci.appveyor.com/project/alexcrichton/rand)
+[![Build Status](https://travis-ci.org/rust-random/rand.svg)](https://travis-ci.org/rust-random/rand)
+[![Build Status](https://ci.appveyor.com/api/projects/status/github/rust-random/rand?svg=true)](https://ci.appveyor.com/project/rust-random/rand)
 [![Latest version](https://img.shields.io/crates/v/rand_core.svg)](https://crates.io/crates/rand_core)
-[![Documentation](https://docs.rs/rand_core/badge.svg)](https://docs.rs/rand_core)
-[![Minimum rustc version](https://img.shields.io/badge/rustc-1.22+-yellow.svg)](https://github.com/rust-lang-nursery/rand#rust-version-requirements)
+[![Book](https://img.shields.io/badge/book-master-yellow.svg)](https://rust-random.github.io/book/)
+[![API](https://img.shields.io/badge/api-master-yellow.svg)](https://rust-random.github.io/rand/rand_core)
+[![API](https://docs.rs/rand_core/badge.svg)](https://docs.rs/rand_core)
+[![Minimum rustc version](https://img.shields.io/badge/rustc-1.22+-lightgray.svg)](https://github.com/rust-random/rand#rust-version-requirements)
 
 Core traits and error types of the [rand] library, plus tools for implementing
 RNGs.
 
-This version of `rand_core` is a compatibility shim around version 0.3.
-
 This crate is intended for use when implementing the core trait, `RngCore`; it
 defines the core traits to be implemented as well as several small functions to
 aid in their implementation and types required for error handling.
@@ -21,11 +21,11 @@
 point, list permutations and secure initialisation of RNGs). Most users should
 prefer to use the main [rand] crate.
 
-Documentation:
-[master branch](https://rust-lang-nursery.github.io/rand/rand_core/index.html),
-[by release](https://docs.rs/rand_core)
+Links:
 
-[Changelog](CHANGELOG.md)
+-   [API documentation (master)](https://rust-random.github.io/rand/rand_core)
+-   [API documentation (docs.rs)](https://docs.rs/rand_core)
+-   [Changelog](CHANGELOG.md)
 
 [rand]: https://crates.io/crates/rand
 
@@ -61,4 +61,5 @@
 `rand_core` is distributed under the terms of both the MIT license and the
 Apache License (Version 2.0).
 
-See [LICENSE-APACHE](LICENSE-APACHE) and [LICENSE-MIT](LICENSE-MIT) for details.
+See [LICENSE-APACHE](LICENSE-APACHE) and [LICENSE-MIT](LICENSE-MIT), and
+[COPYRIGHT](COPYRIGHT) for details.
diff --git a/rustc_deps/vendor/rand_core-0.2.2/src/block.rs b/rustc_deps/vendor/rand_core-0.3.1/src/block.rs
similarity index 91%
rename from rustc_deps/vendor/rand_core-0.2.2/src/block.rs
rename to rustc_deps/vendor/rand_core-0.3.1/src/block.rs
index f8209e5..3045b94 100644
--- a/rustc_deps/vendor/rand_core-0.2.2/src/block.rs
+++ b/rustc_deps/vendor/rand_core-0.3.1/src/block.rs
@@ -1,6 +1,4 @@
-// Copyright 2018 The Rust Project Developers. See the COPYRIGHT
-// file at the top-level directory of this distribution and at
-// https://rust-lang.org/COPYRIGHT.
+// Copyright 2018 Developers of the Rand project.
 //
 // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
 // https://www.apache.org/licenses/LICENSE-2.0> or the MIT license
@@ -18,40 +16,39 @@
 //! implementations only need to concern themselves with generation of the
 //! block, not the various [`RngCore`] methods (especially [`fill_bytes`], where
 //! the optimal implementations are not trivial), and this allows
-//! [`ReseedingRng`] perform periodic reseeding with very low overhead.
+//! `ReseedingRng` (see [`rand`](https://docs.rs/rand) crate) perform periodic
+//! reseeding with very low overhead.
 //!
 //! # Example
-//! 
+//!
 //! ```norun
 //! use rand_core::block::{BlockRngCore, BlockRng};
-//! 
+//!
 //! struct MyRngCore;
-//! 
+//!
 //! impl BlockRngCore for MyRngCore {
 //!     type Results = [u32; 16];
-//!     
+//!
 //!     fn generate(&mut self, results: &mut Self::Results) {
 //!         unimplemented!()
 //!     }
 //! }
-//! 
+//!
 //! impl SeedableRng for MyRngCore {
 //!     type Seed = unimplemented!();
 //!     fn from_seed(seed: Self::Seed) -> Self {
 //!         unimplemented!()
 //!     }
 //! }
-//! 
+//!
 //! // optionally, also implement CryptoRng for MyRngCore
-//! 
+//!
 //! // Final RNG.
 //! type MyRng = BlockRng<u32, MyRngCore>;
 //! ```
-//! 
-//! [`BlockRngCore`]: trait.BlockRngCore.html
-//! [`RngCore`]: ../trait.RngCore.html
-//! [`fill_bytes`]: ../trait.RngCore.html#tymethod.fill_bytes
-//! [`ReseedingRng`]: ../../rand/rngs/adapter/struct.ReseedingRng.html
+//!
+//! [`BlockRngCore`]: crate::block::BlockRngCore
+//! [`fill_bytes`]: RngCore::fill_bytes
 
 use core::convert::AsRef;
 use core::fmt;
@@ -61,12 +58,12 @@
 /// A trait for RNGs which do not generate random numbers individually, but in
 /// blocks (typically `[u32; N]`). This technique is commonly used by
 /// cryptographic RNGs to improve performance.
-/// 
-/// See the [module documentation](index.html) for details.
+///
+/// See the [module][crate::block] documentation for details.
 pub trait BlockRngCore {
     /// Results element type, e.g. `u32`.
     type Item;
-    
+
     /// Results type. This is the 'block' an RNG implementing `BlockRngCore`
     /// generates, which will usually be an array like `[u32; 16]`.
     type Results: AsRef<[Self::Item]> + AsMut<[Self::Item]> + Default;
@@ -107,15 +104,10 @@
 ///
 /// For easy initialization `BlockRng` also implements [`SeedableRng`].
 ///
-/// [`BlockRngCore`]: BlockRngCore.t.html
-/// [`BlockRngCore::generate`]: trait.BlockRngCore.html#tymethod.generate
-/// [`BlockRng64`]: struct.BlockRng64.html
-/// [`RngCore`]: ../RngCore.t.html
-/// [`next_u32`]: ../trait.RngCore.html#tymethod.next_u32
-/// [`next_u64`]: ../trait.RngCore.html#tymethod.next_u64
-/// [`fill_bytes`]: ../trait.RngCore.html#tymethod.fill_bytes
-/// [`try_fill_bytes`]: ../trait.RngCore.html#tymethod.try_fill_bytes
-/// [`SeedableRng`]: ../SeedableRng.t.html
+/// [`next_u32`]: RngCore::next_u32
+/// [`next_u64`]: RngCore::next_u64
+/// [`fill_bytes`]: RngCore::fill_bytes
+/// [`try_fill_bytes`]: RngCore::try_fill_bytes
 #[derive(Clone)]
 #[cfg_attr(feature="serde1", derive(Serialize, Deserialize))]
 pub struct BlockRng<R: BlockRngCore + ?Sized> {
@@ -149,7 +141,7 @@
     }
 
     /// Get the index into the result buffer.
-    /// 
+    ///
     /// If this is equal to or larger than the size of the result buffer then
     /// the buffer is "empty" and `generate()` must be called to produce new
     /// results.
@@ -287,6 +279,10 @@
         Self::new(R::from_seed(seed))
     }
 
+    fn seed_from_u64(seed: u64) -> Self {
+        Self::new(R::seed_from_u64(seed))
+    }
+
     fn from_rng<S: RngCore>(rng: S) -> Result<Self, Error> {
         Ok(Self::new(R::from_rng(rng)?))
     }
@@ -312,13 +308,10 @@
 /// values. If the requested length is not a multiple of 8, some bytes will be
 /// discarded.
 ///
-/// [`BlockRngCore`]: BlockRngCore.t.html
-/// [`RngCore`]: ../RngCore.t.html
-/// [`next_u32`]: ../trait.RngCore.html#tymethod.next_u32
-/// [`next_u64`]: ../trait.RngCore.html#tymethod.next_u64
-/// [`fill_bytes`]: ../trait.RngCore.html#tymethod.fill_bytes
-/// [`try_fill_bytes`]: ../trait.RngCore.html#tymethod.try_fill_bytes
-/// [`BlockRng`]: struct.BlockRng.html
+/// [`next_u32`]: RngCore::next_u32
+/// [`next_u64`]: RngCore::next_u64
+/// [`fill_bytes`]: RngCore::fill_bytes
+/// [`try_fill_bytes`]: RngCore::try_fill_bytes
 #[derive(Clone)]
 #[cfg_attr(feature="serde1", derive(Serialize, Deserialize))]
 pub struct BlockRng64<R: BlockRngCore + ?Sized> {
@@ -494,6 +487,10 @@
         Self::new(R::from_seed(seed))
     }
 
+    fn seed_from_u64(seed: u64) -> Self {
+        Self::new(R::seed_from_u64(seed))
+    }
+
     fn from_rng<S: RngCore>(rng: S) -> Result<Self, Error> {
         Ok(Self::new(R::from_rng(rng)?))
     }
diff --git a/rustc_deps/vendor/rand_core-0.2.2/src/error.rs b/rustc_deps/vendor/rand_core-0.3.1/src/error.rs
similarity index 97%
rename from rustc_deps/vendor/rand_core-0.2.2/src/error.rs
rename to rustc_deps/vendor/rand_core-0.3.1/src/error.rs
index 594d357..5a8459e 100644
--- a/rustc_deps/vendor/rand_core-0.2.2/src/error.rs
+++ b/rustc_deps/vendor/rand_core-0.3.1/src/error.rs
@@ -1,6 +1,4 @@
-// Copyright 2017-2018 The Rust Project Developers. See the COPYRIGHT
-// file at the top-level directory of this distribution and at
-// https://rust-lang.org/COPYRIGHT.
+// Copyright 2018 Developers of the Rand project.
 //
 // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
 // https://www.apache.org/licenses/LICENSE-2.0> or the MIT license
diff --git a/rustc_deps/vendor/rand_core-0.2.2/src/impls.rs b/rustc_deps/vendor/rand_core-0.3.1/src/impls.rs
similarity index 96%
rename from rustc_deps/vendor/rand_core-0.2.2/src/impls.rs
rename to rustc_deps/vendor/rand_core-0.3.1/src/impls.rs
index 439b46b..57bdd07 100644
--- a/rustc_deps/vendor/rand_core-0.2.2/src/impls.rs
+++ b/rustc_deps/vendor/rand_core-0.3.1/src/impls.rs
@@ -1,6 +1,4 @@
-// Copyright 2013-2017 The Rust Project Developers. See the COPYRIGHT
-// file at the top-level directory of this distribution and at
-// https://rust-lang.org/COPYRIGHT.
+// Copyright 2018 Developers of the Rand project.
 //
 // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
 // https://www.apache.org/licenses/LICENSE-2.0> or the MIT license
diff --git a/rustc_deps/vendor/rand_core-0.2.2/src/le.rs b/rustc_deps/vendor/rand_core-0.3.1/src/le.rs
similarity index 91%
rename from rustc_deps/vendor/rand_core-0.2.2/src/le.rs
rename to rustc_deps/vendor/rand_core-0.3.1/src/le.rs
index bcc560e..266651f 100644
--- a/rustc_deps/vendor/rand_core-0.2.2/src/le.rs
+++ b/rustc_deps/vendor/rand_core-0.3.1/src/le.rs
@@ -1,6 +1,4 @@
-// Copyright 2017-2018 The Rust Project Developers. See the COPYRIGHT
-// file at the top-level directory of this distribution and at
-// https://rust-lang.org/COPYRIGHT.
+// Copyright 2018 Developers of the Rand project.
 //
 // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
 // https://www.apache.org/licenses/LICENSE-2.0> or the MIT license
diff --git a/rustc_deps/vendor/rand_core-0.2.2/src/lib.rs b/rustc_deps/vendor/rand_core-0.3.1/src/lib.rs
similarity index 65%
rename from rustc_deps/vendor/rand_core-0.2.2/src/lib.rs
rename to rustc_deps/vendor/rand_core-0.3.1/src/lib.rs
index 0d1550c..8923142 100644
--- a/rustc_deps/vendor/rand_core-0.2.2/src/lib.rs
+++ b/rustc_deps/vendor/rand_core-0.3.1/src/lib.rs
@@ -1,6 +1,5 @@
-// Copyright 2017-2018 The Rust Project Developers. See the COPYRIGHT
-// file at the top-level directory of this distribution and at
-// https://rust-lang.org/COPYRIGHT.
+// Copyright 2018 Developers of the Rand project.
+// Copyright 2017-2018 The Rust Project Developers.
 //
 // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
 // https://www.apache.org/licenses/LICENSE-2.0> or the MIT license
@@ -9,35 +8,30 @@
 // except according to those terms.
 
 //! Random number generation traits
-//! 
+//!
 //! This version of `rand_core` is a compatibility shim around version 0.3.
-//! 
+//!
 //! This crate is mainly of interest to crates publishing implementations of
-//! [`RngCore`]. Other users are encouraged to use the [rand] crate instead
+//! [`RngCore`]. Other users are encouraged to use the [`rand`] crate instead
 //! which re-exports the main traits and error types.
 //!
 //! [`RngCore`] is the core trait implemented by algorithmic pseudo-random number
 //! generators and external random-number sources.
-//! 
+//!
 //! [`SeedableRng`] is an extension trait for construction from fixed seeds and
 //! other random number generators.
-//! 
+//!
 //! [`Error`] is provided for error-handling. It is safe to use in `no_std`
 //! environments.
-//! 
+//!
 //! The [`impls`] and [`le`] sub-modules include a few small functions to assist
 //! implementation of [`RngCore`].
-//! 
-//! [rand]: https://crates.io/crates/rand
-//! [`RngCore`]: trait.RngCore.html
-//! [`SeedableRng`]: trait.SeedableRng.html
-//! [`Error`]: struct.Error.html
-//! [`impls`]: impls/index.html
-//! [`le`]: le/index.html
+//!
+//! [`rand`]: https://docs.rs/rand
 
 #![doc(html_logo_url = "https://www.rust-lang.org/logos/rust-logo-128x128-blk.png",
        html_favicon_url = "https://www.rust-lang.org/favicon.ico",
-       html_root_url = "https://docs.rs/rand_core/0.2.2")]
+       html_root_url = "https://rust-random.github.io/rand/")]
 
 #![deny(missing_docs)]
 #![deny(missing_debug_implementations)]
@@ -45,8 +39,8 @@
 
 #![no_std]
 
-extern crate rand_core as core3;
+extern crate rand_core as core4;
 
-pub use core3::{ErrorKind, Error};
-pub use core3::{block, impls, le};
-pub use core3::{RngCore, CryptoRng, SeedableRng};
+pub use core4::{ErrorKind, Error};
+pub use core4::{block, impls, le};
+pub use core4::{RngCore, CryptoRng, SeedableRng};
diff --git a/rustc_deps/vendor/rand_core/.cargo-checksum.json b/rustc_deps/vendor/rand_core/.cargo-checksum.json
index 47f9a08..2979fb2 100644
--- a/rustc_deps/vendor/rand_core/.cargo-checksum.json
+++ b/rustc_deps/vendor/rand_core/.cargo-checksum.json
@@ -1 +1 @@
-{"files":{"CHANGELOG.md":"ca84cb13a03a23740f15d93088498f44b2e3977ae65c5ad45985a230634b750a","COPYRIGHT":"90eb64f0279b0d9432accfa6023ff803bc4965212383697eee27a0f426d5f8d5","Cargo.toml":"5e4b3c5dfdf18570b59469b7191ee3dd61c76c16ca15f49dafec357a81ae09c7","LICENSE-APACHE":"aaff376532ea30a0cd5330b9502ad4a4c8bf769c539c87ffe78819d188a18ebf","LICENSE-MIT":"6485b8ed310d3f0340bf1ad1f47645069ce4069dcc6bb46c7d5c6faf41de1fdb","README.md":"24839a2fcc7c65956c471dbd5312d302589785c8cb9c5b782881b54f79bf718d","src/block.rs":"3d9e3a33c144998a3e68014f54365751869a98d0a242ae3f6f7b13bc84ca91b6","src/error.rs":"8403a968d7c9bd95cc9f23d9dc5cc4771ede8e81dda5a8fdd59d347590345d14","src/impls.rs":"c248ddd04a65c974768baaec028fa0d2a6117525fa27bce8a98f2ba2f352700a","src/le.rs":"cb187f58f7514877918f7f47633397e08e20392dcf072bc245d62c9e5238198c","src/lib.rs":"adb6675982dd7815c7e3a16812f86b32cb2f821c42c94f239973c271ce1904b8"},"package":"0905b6b7079ec73b314d4c748701f6931eb79fd97c668caa3f1899b22b32c6db"}
\ No newline at end of file
+{"files":{"CHANGELOG.md":"93b4744c0355f232107547993a0d771bd276962c9233d4ea1cd4771d7c2f7f92","COPYRIGHT":"90eb64f0279b0d9432accfa6023ff803bc4965212383697eee27a0f426d5f8d5","Cargo.toml":"faab1bf947b13c78f97d87f0bd1ab5611b5fd9e128106282c50f03077b22cd2c","LICENSE-APACHE":"aaff376532ea30a0cd5330b9502ad4a4c8bf769c539c87ffe78819d188a18ebf","LICENSE-MIT":"209fbbe0ad52d9235e37badf9cadfe4dbdc87203179c0899e738b39ade42177b","README.md":"26d2c4a2f9c2c3016b76f27eed164adfffcc359b395ed8ec6df255c42eb9a117","src/block.rs":"43778ab70f0b650c3203a6da70b40bc33afa845a5e14ef88dd26c18a07b70f88","src/error.rs":"8403a968d7c9bd95cc9f23d9dc5cc4771ede8e81dda5a8fdd59d347590345d14","src/impls.rs":"c248ddd04a65c974768baaec028fa0d2a6117525fa27bce8a98f2ba2f352700a","src/le.rs":"cb187f58f7514877918f7f47633397e08e20392dcf072bc245d62c9e5238198c","src/lib.rs":"5b3d95e405bed6dc1e4525cc010f0afb2c9f0fc9fe8533f6a02e70ea112c22be"},"package":"d0e7a549d590831370895ab7ba4ea0c1b6b011d106b5ff2da6eee112615e6dc0"}
\ No newline at end of file
diff --git a/rustc_deps/vendor/rand_core/CHANGELOG.md b/rustc_deps/vendor/rand_core/CHANGELOG.md
index 2cbb259..7f2d797 100644
--- a/rustc_deps/vendor/rand_core/CHANGELOG.md
+++ b/rustc_deps/vendor/rand_core/CHANGELOG.md
@@ -4,6 +4,9 @@
 The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
 and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
 
+## [0.4.0] - 2019-01-24
+- Disable the `std` feature by default (#702)
+
 ## [0.3.0] - 2018-09-24
 - Add `SeedableRng::seed_from_u64` for convenient seeding. (#537)
 
diff --git a/rustc_deps/vendor/rand_core/Cargo.toml b/rustc_deps/vendor/rand_core/Cargo.toml
index ac98346..aee2ec0 100644
--- a/rustc_deps/vendor/rand_core/Cargo.toml
+++ b/rustc_deps/vendor/rand_core/Cargo.toml
@@ -12,11 +12,11 @@
 
 [package]
 name = "rand_core"
-version = "0.3.0"
-authors = ["The Rust Project Developers"]
+version = "0.4.0"
+authors = ["The Rand Project Developers", "The Rust Project Developers"]
 description = "Core random number generator traits and tools for implementation.\n"
 homepage = "https://crates.io/crates/rand_core"
-documentation = "https://docs.rs/rand_core"
+documentation = "https://rust-random.github.io/rand/rand_core"
 readme = "README.md"
 keywords = ["random", "rng"]
 categories = ["algorithms", "no-std"]
@@ -32,11 +32,10 @@
 
 [features]
 alloc = []
-default = ["std"]
 serde1 = ["serde", "serde_derive"]
 std = ["alloc"]
 [badges.appveyor]
-repository = "dhardy/rand"
+repository = "rust-random/rand"
 
 [badges.travis-ci]
 repository = "rust-random/rand"
diff --git a/rustc_deps/vendor/rand_core/LICENSE-MIT b/rustc_deps/vendor/rand_core/LICENSE-MIT
index 39d4bdb..d93b5ba 100644
--- a/rustc_deps/vendor/rand_core/LICENSE-MIT
+++ b/rustc_deps/vendor/rand_core/LICENSE-MIT
@@ -1,3 +1,4 @@
+Copyright 2018 Developers of the Rand project
 Copyright (c) 2014 The Rust Project Developers
 
 Permission is hereby granted, free of charge, to any
diff --git a/rustc_deps/vendor/rand_core/README.md b/rustc_deps/vendor/rand_core/README.md
index 84a97fa..ef076b9 100644
--- a/rustc_deps/vendor/rand_core/README.md
+++ b/rustc_deps/vendor/rand_core/README.md
@@ -1,11 +1,12 @@
 # rand_core
 
 [![Build Status](https://travis-ci.org/rust-random/rand.svg)](https://travis-ci.org/rust-random/rand)
-[![Build Status](https://ci.appveyor.com/api/projects/status/github/rust-random/rand?svg=true)](https://ci.appveyor.com/project/dhardy/rand)
+[![Build Status](https://ci.appveyor.com/api/projects/status/github/rust-random/rand?svg=true)](https://ci.appveyor.com/project/rust-random/rand)
 [![Latest version](https://img.shields.io/crates/v/rand_core.svg)](https://crates.io/crates/rand_core)
-[![Documentation](https://docs.rs/rand_core/badge.svg)](https://docs.rs/rand_core)
-[![Minimum rustc version](https://img.shields.io/badge/rustc-1.22+-yellow.svg)](https://github.com/rust-random/rand#rust-version-requirements)
-[![License](https://img.shields.io/crates/l/rand_core.svg)](https://github.com/rust-random/rand/tree/master/rand_core#license)
+[![Book](https://img.shields.io/badge/book-master-yellow.svg)](https://rust-random.github.io/book/)
+[![API](https://img.shields.io/badge/api-master-yellow.svg)](https://rust-random.github.io/rand/rand_core)
+[![API](https://docs.rs/rand_core/badge.svg)](https://docs.rs/rand_core)
+[![Minimum rustc version](https://img.shields.io/badge/rustc-1.22+-lightgray.svg)](https://github.com/rust-random/rand#rust-version-requirements)
 
 Core traits and error types of the [rand] library, plus tools for implementing
 RNGs.
@@ -20,11 +21,11 @@
 point, list permutations and secure initialisation of RNGs). Most users should
 prefer to use the main [rand] crate.
 
-Documentation:
-[master branch](https://rust-random.github.io/rand/rand_core/index.html),
-[by release](https://docs.rs/rand_core)
+Links:
 
-[Changelog](CHANGELOG.md)
+-   [API documentation (master)](https://rust-random.github.io/rand/rand_core)
+-   [API documentation (docs.rs)](https://docs.rs/rand_core)
+-   [Changelog](CHANGELOG.md)
 
 [rand]: https://crates.io/crates/rand
 
@@ -43,13 +44,14 @@
 
 `rand_core` supports `no_std` and `alloc`-only configurations, as well as full
 `std` functionality. The differences between `no_std` and full `std` are small,
-comprising `RngCore` support for `Box<R>` types where `R: RngCore`, as well as
+comprising `RngCore` support for `Box<R>` types where `R: RngCore`,
+`std::io::Read` support for types supporting `RngCore`, and
 extensions to the `Error` type's functionality.
 
-Due to [rust-lang/cargo#1596](https://github.com/rust-lang/cargo/issues/1596),
-`rand_core` is built without `std` support by default. Since features are
-unioned across the whole dependency tree, any crate using `rand` with its
-default features will also enable `std` support in `rand_core`.
+The `std` feature is *not enabled by default*. This is primarily to avoid build
+problems where one crate implicitly requires `rand_core` with `std` support and
+another crate requires `rand` *without* `std` support. However, the `rand` crate
+continues to enable `std` support by default, both for itself and `rand_core`.
 
 The `serde1` feature can be used to derive `Serialize` and `Deserialize` for RNG
 implementations that use the `BlockRng` or `BlockRng64` wrappers.
diff --git a/rustc_deps/vendor/rand_core/src/block.rs b/rustc_deps/vendor/rand_core/src/block.rs
index de480e4..3045b94 100644
--- a/rustc_deps/vendor/rand_core/src/block.rs
+++ b/rustc_deps/vendor/rand_core/src/block.rs
@@ -16,40 +16,39 @@
 //! implementations only need to concern themselves with generation of the
 //! block, not the various [`RngCore`] methods (especially [`fill_bytes`], where
 //! the optimal implementations are not trivial), and this allows
-//! [`ReseedingRng`] perform periodic reseeding with very low overhead.
+//! `ReseedingRng` (see [`rand`](https://docs.rs/rand) crate) perform periodic
+//! reseeding with very low overhead.
 //!
 //! # Example
-//! 
+//!
 //! ```norun
 //! use rand_core::block::{BlockRngCore, BlockRng};
-//! 
+//!
 //! struct MyRngCore;
-//! 
+//!
 //! impl BlockRngCore for MyRngCore {
 //!     type Results = [u32; 16];
-//!     
+//!
 //!     fn generate(&mut self, results: &mut Self::Results) {
 //!         unimplemented!()
 //!     }
 //! }
-//! 
+//!
 //! impl SeedableRng for MyRngCore {
 //!     type Seed = unimplemented!();
 //!     fn from_seed(seed: Self::Seed) -> Self {
 //!         unimplemented!()
 //!     }
 //! }
-//! 
+//!
 //! // optionally, also implement CryptoRng for MyRngCore
-//! 
+//!
 //! // Final RNG.
 //! type MyRng = BlockRng<u32, MyRngCore>;
 //! ```
-//! 
-//! [`BlockRngCore`]: trait.BlockRngCore.html
-//! [`RngCore`]: ../trait.RngCore.html
-//! [`fill_bytes`]: ../trait.RngCore.html#tymethod.fill_bytes
-//! [`ReseedingRng`]: ../../rand/rngs/adapter/struct.ReseedingRng.html
+//!
+//! [`BlockRngCore`]: crate::block::BlockRngCore
+//! [`fill_bytes`]: RngCore::fill_bytes
 
 use core::convert::AsRef;
 use core::fmt;
@@ -59,12 +58,12 @@
 /// A trait for RNGs which do not generate random numbers individually, but in
 /// blocks (typically `[u32; N]`). This technique is commonly used by
 /// cryptographic RNGs to improve performance.
-/// 
-/// See the [module documentation](index.html) for details.
+///
+/// See the [module][crate::block] documentation for details.
 pub trait BlockRngCore {
     /// Results element type, e.g. `u32`.
     type Item;
-    
+
     /// Results type. This is the 'block' an RNG implementing `BlockRngCore`
     /// generates, which will usually be an array like `[u32; 16]`.
     type Results: AsRef<[Self::Item]> + AsMut<[Self::Item]> + Default;
@@ -105,15 +104,10 @@
 ///
 /// For easy initialization `BlockRng` also implements [`SeedableRng`].
 ///
-/// [`BlockRngCore`]: BlockRngCore.t.html
-/// [`BlockRngCore::generate`]: trait.BlockRngCore.html#tymethod.generate
-/// [`BlockRng64`]: struct.BlockRng64.html
-/// [`RngCore`]: ../RngCore.t.html
-/// [`next_u32`]: ../trait.RngCore.html#tymethod.next_u32
-/// [`next_u64`]: ../trait.RngCore.html#tymethod.next_u64
-/// [`fill_bytes`]: ../trait.RngCore.html#tymethod.fill_bytes
-/// [`try_fill_bytes`]: ../trait.RngCore.html#tymethod.try_fill_bytes
-/// [`SeedableRng`]: ../SeedableRng.t.html
+/// [`next_u32`]: RngCore::next_u32
+/// [`next_u64`]: RngCore::next_u64
+/// [`fill_bytes`]: RngCore::fill_bytes
+/// [`try_fill_bytes`]: RngCore::try_fill_bytes
 #[derive(Clone)]
 #[cfg_attr(feature="serde1", derive(Serialize, Deserialize))]
 pub struct BlockRng<R: BlockRngCore + ?Sized> {
@@ -147,7 +141,7 @@
     }
 
     /// Get the index into the result buffer.
-    /// 
+    ///
     /// If this is equal to or larger than the size of the result buffer then
     /// the buffer is "empty" and `generate()` must be called to produce new
     /// results.
@@ -314,13 +308,10 @@
 /// values. If the requested length is not a multiple of 8, some bytes will be
 /// discarded.
 ///
-/// [`BlockRngCore`]: BlockRngCore.t.html
-/// [`RngCore`]: ../RngCore.t.html
-/// [`next_u32`]: ../trait.RngCore.html#tymethod.next_u32
-/// [`next_u64`]: ../trait.RngCore.html#tymethod.next_u64
-/// [`fill_bytes`]: ../trait.RngCore.html#tymethod.fill_bytes
-/// [`try_fill_bytes`]: ../trait.RngCore.html#tymethod.try_fill_bytes
-/// [`BlockRng`]: struct.BlockRng.html
+/// [`next_u32`]: RngCore::next_u32
+/// [`next_u64`]: RngCore::next_u64
+/// [`fill_bytes`]: RngCore::fill_bytes
+/// [`try_fill_bytes`]: RngCore::try_fill_bytes
 #[derive(Clone)]
 #[cfg_attr(feature="serde1", derive(Serialize, Deserialize))]
 pub struct BlockRng64<R: BlockRngCore + ?Sized> {
diff --git a/rustc_deps/vendor/rand_core/src/lib.rs b/rustc_deps/vendor/rand_core/src/lib.rs
index 385d348..4b0e6e4 100644
--- a/rustc_deps/vendor/rand_core/src/lib.rs
+++ b/rustc_deps/vendor/rand_core/src/lib.rs
@@ -8,33 +8,28 @@
 // except according to those terms.
 
 //! Random number generation traits
-//! 
+//!
 //! This crate is mainly of interest to crates publishing implementations of
-//! [`RngCore`]. Other users are encouraged to use the [rand] crate instead
+//! [`RngCore`]. Other users are encouraged to use the [`rand`] crate instead
 //! which re-exports the main traits and error types.
 //!
 //! [`RngCore`] is the core trait implemented by algorithmic pseudo-random number
 //! generators and external random-number sources.
-//! 
+//!
 //! [`SeedableRng`] is an extension trait for construction from fixed seeds and
 //! other random number generators.
-//! 
+//!
 //! [`Error`] is provided for error-handling. It is safe to use in `no_std`
 //! environments.
-//! 
+//!
 //! The [`impls`] and [`le`] sub-modules include a few small functions to assist
 //! implementation of [`RngCore`].
-//! 
-//! [rand]: https://crates.io/crates/rand
-//! [`RngCore`]: trait.RngCore.html
-//! [`SeedableRng`]: trait.SeedableRng.html
-//! [`Error`]: struct.Error.html
-//! [`impls`]: impls/index.html
-//! [`le`]: le/index.html
+//!
+//! [`rand`]: https://docs.rs/rand
 
 #![doc(html_logo_url = "https://www.rust-lang.org/logos/rust-logo-128x128-blk.png",
        html_favicon_url = "https://www.rust-lang.org/favicon.ico",
-       html_root_url = "https://docs.rs/rand_core/0.3.0")]
+       html_root_url = "https://rust-random.github.io/rand/")]
 
 #![deny(missing_docs)]
 #![deny(missing_debug_implementations)]
@@ -65,34 +60,34 @@
 
 
 /// The core of a random number generator.
-/// 
+///
 /// This trait encapsulates the low-level functionality common to all
 /// generators, and is the "back end", to be implemented by generators.
-/// End users should normally use [`Rng`] from the [rand] crate, which is
-/// automatically implemented for every type implementing `RngCore`.
-/// 
+/// End users should normally use the `Rng` trait from the [`rand`] crate,
+/// which is automatically implemented for every type implementing `RngCore`.
+///
 /// Three different methods for generating random data are provided since the
 /// optimal implementation of each is dependent on the type of generator. There
 /// is no required relationship between the output of each; e.g. many
 /// implementations of [`fill_bytes`] consume a whole number of `u32` or `u64`
 /// values and drop any remaining unused bytes.
-/// 
+///
 /// The [`try_fill_bytes`] method is a variant of [`fill_bytes`] allowing error
 /// handling; it is not deemed sufficiently useful to add equivalents for
 /// [`next_u32`] or [`next_u64`] since the latter methods are almost always used
 /// with algorithmic generators (PRNGs), which are normally infallible.
-/// 
+///
 /// Algorithmic generators implementing [`SeedableRng`] should normally have
 /// *portable, reproducible* output, i.e. fix Endianness when converting values
 /// to avoid platform differences, and avoid making any changes which affect
 /// output (except by communicating that the release has breaking changes).
-/// 
+///
 /// Typically implementators will implement only one of the methods available
 /// in this trait directly, then use the helper functions from the
-/// [`rand_core::impls`] module to implement the other methods.
-/// 
+/// [`impls`] module to implement the other methods.
+///
 /// It is recommended that implementations also implement:
-/// 
+///
 /// - `Debug` with a custom implementation which *does not* print any internal
 ///   state (at least, [`CryptoRng`]s should not risk leaking state through
 ///   `Debug`).
@@ -104,72 +99,69 @@
 ///   implement [`SeedableRng`], to guide users towards proper seeding.
 ///   External / hardware RNGs can choose to implement `Default`.
 /// - `Eq` and `PartialEq` could be implemented, but are probably not useful.
-/// 
+///
 /// # Example
-/// 
+///
 /// A simple example, obviously not generating very *random* output:
-/// 
+///
 /// ```
 /// #![allow(dead_code)]
 /// use rand_core::{RngCore, Error, impls};
-/// 
+///
 /// struct CountingRng(u64);
-/// 
+///
 /// impl RngCore for CountingRng {
 ///     fn next_u32(&mut self) -> u32 {
 ///         self.next_u64() as u32
 ///     }
-///     
+///
 ///     fn next_u64(&mut self) -> u64 {
 ///         self.0 += 1;
 ///         self.0
 ///     }
-///     
+///
 ///     fn fill_bytes(&mut self, dest: &mut [u8]) {
 ///         impls::fill_bytes_via_next(self, dest)
 ///     }
-///     
+///
 ///     fn try_fill_bytes(&mut self, dest: &mut [u8]) -> Result<(), Error> {
 ///         Ok(self.fill_bytes(dest))
 ///     }
 /// }
 /// ```
-/// 
-/// [rand]: https://crates.io/crates/rand
-/// [`Rng`]: ../rand/trait.Rng.html
-/// [`SeedableRng`]: trait.SeedableRng.html
-/// [`rand_core::impls`]: ../rand_core/impls/index.html
-/// [`try_fill_bytes`]: trait.RngCore.html#tymethod.try_fill_bytes
-/// [`fill_bytes`]: trait.RngCore.html#tymethod.fill_bytes
-/// [`next_u32`]: trait.RngCore.html#tymethod.next_u32
-/// [`next_u64`]: trait.RngCore.html#tymethod.next_u64
-/// [`CryptoRng`]: trait.CryptoRng.html
+///
+/// [`rand`]: https://docs.rs/rand
+/// [`try_fill_bytes`]: RngCore::try_fill_bytes
+/// [`fill_bytes`]: RngCore::fill_bytes
+/// [`next_u32`]: RngCore::next_u32
+/// [`next_u64`]: RngCore::next_u64
 pub trait RngCore {
     /// Return the next random `u32`.
     ///
     /// RNGs must implement at least one method from this trait directly. In
     /// the case this method is not implemented directly, it can be implemented
-    /// using `self.next_u64() as u32` or
-    /// [via `fill_bytes`](../rand_core/impls/fn.next_u32_via_fill.html).
+    /// using `self.next_u64() as u32` or via
+    /// [`fill_bytes`][impls::next_u32_via_fill].
     fn next_u32(&mut self) -> u32;
 
     /// Return the next random `u64`.
     ///
     /// RNGs must implement at least one method from this trait directly. In
     /// the case this method is not implemented directly, it can be implemented
-    /// [via `next_u32`](../rand_core/impls/fn.next_u64_via_u32.html) or
-    /// [via `fill_bytes`](../rand_core/impls/fn.next_u64_via_fill.html).
+    /// via [`next_u32`][impls::next_u64_via_u32] or via
+    /// [`fill_bytes`][impls::next_u64_via_fill].
     fn next_u64(&mut self) -> u64;
 
     /// Fill `dest` with random data.
     ///
     /// RNGs must implement at least one method from this trait directly. In
     /// the case this method is not implemented directly, it can be implemented
-    /// [via `next_u*`](../rand_core/impls/fn.fill_bytes_via_next.html) or
-    /// via `try_fill_bytes`; if this generator can fail the implementation
-    /// must choose how best to handle errors here (e.g. panic with a
-    /// descriptive message or log a warning and retry a few times).
-    /// 
+    /// via [`next_u*`][impls::fill_bytes_via_next] or
+    /// via [`try_fill_bytes`][RngCore::try_fill_bytes]; if this generator can
+    /// fail the implementation must choose how best to handle errors here
+    /// (e.g. panic with a descriptive message or log a warning and retry a few
+    /// times).
+    ///
     /// This method should guarantee that `dest` is entirely filled
     /// with new data, and may panic if this is impossible
     /// (e.g. reading past the end of a file that is being used as the
@@ -182,51 +174,50 @@
     /// generating random data thus making this the primary method implemented
     /// by external (true) RNGs (e.g. `OsRng`) which can fail. It may be used
     /// directly to generate keys and to seed (infallible) PRNGs.
-    /// 
+    ///
     /// Other than error handling, this method is identical to [`fill_bytes`];
     /// thus this may be implemented using `Ok(self.fill_bytes(dest))` or
     /// `fill_bytes` may be implemented with
     /// `self.try_fill_bytes(dest).unwrap()` or more specific error handling.
-    /// 
-    /// [`fill_bytes`]: trait.RngCore.html#method.fill_bytes
+    ///
+    /// [`fill_bytes`]: RngCore::fill_bytes
     fn try_fill_bytes(&mut self, dest: &mut [u8]) -> Result<(), Error>;
 }
 
 /// A marker trait used to indicate that an [`RngCore`] or [`BlockRngCore`]
 /// implementation is supposed to be cryptographically secure.
-/// 
+///
 /// *Cryptographically secure generators*, also known as *CSPRNGs*, should
 /// satisfy an additional properties over other generators: given the first
 /// *k* bits of an algorithm's output
 /// sequence, it should not be possible using polynomial-time algorithms to
 /// predict the next bit with probability significantly greater than 50%.
-/// 
+///
 /// Some generators may satisfy an additional property, however this is not
 /// required by this trait: if the CSPRNG's state is revealed, it should not be
 /// computationally-feasible to reconstruct output prior to this. Some other
 /// generators allow backwards-computation and are consided *reversible*.
-/// 
+///
 /// Note that this trait is provided for guidance only and cannot guarantee
 /// suitability for cryptographic applications. In general it should only be
 /// implemented for well-reviewed code implementing well-regarded algorithms.
-/// 
+///
 /// Note also that use of a `CryptoRng` does not protect against other
 /// weaknesses such as seeding from a weak entropy source or leaking state.
-/// 
-/// [`RngCore`]: trait.RngCore.html
-/// [`BlockRngCore`]: ../rand_core/block/trait.BlockRngCore.html
+///
+/// [`BlockRngCore`]: block::BlockRngCore
 pub trait CryptoRng {}
 
 /// A random number generator that can be explicitly seeded.
 ///
 /// This trait encapsulates the low-level functionality common to all
 /// pseudo-random number generators (PRNGs, or algorithmic generators).
-/// 
-/// The [`rand::FromEntropy`] trait is automatically implemented for every type
-/// implementing `SeedableRng`, providing a convenient `from_entropy()`
-/// constructor.
-/// 
-/// [`rand::FromEntropy`]: ../rand/trait.FromEntropy.html
+///
+/// The `FromEntropy` trait from the [`rand`] crate is automatically
+/// implemented for every type implementing `SeedableRng`, providing
+/// a convenient `from_entropy()` constructor.
+///
+/// [`rand`]: https://docs.rs/rand
 pub trait SeedableRng: Sized {
     /// Seed type, which is restricted to types mutably-dereferencable as `u8`
     /// arrays (we recommend `[u8; N]` for some `N`).
@@ -297,17 +288,17 @@
     /// for example `0xBAD5EEDu32` or `0x0DDB1A5E5BAD5EEDu64` ("odd biases? bad
     /// seed"). This is assuming only a small number of values must be rejected.
     fn from_seed(seed: Self::Seed) -> Self;
-    
+
     /// Create a new PRNG using a `u64` seed.
-    /// 
+    ///
     /// This is a convenience-wrapper around `from_seed` to allow construction
     /// of any `SeedableRng` from a simple `u64` value. It is designed such that
     /// low Hamming Weight numbers like 0 and 1 can be used and should still
     /// result in good, independent seeds to the PRNG which is returned.
-    /// 
+    ///
     /// This **is not suitable for cryptography**, as should be clear given that
     /// the input size is only 64 bits.
-    /// 
+    ///
     /// Implementations for PRNGs *may* provide their own implementations of
     /// this function, but the default implementation should be good enough for
     /// all purposes. *Changing* the implementation of this function should be
@@ -316,33 +307,33 @@
         // We use PCG32 to generate a u32 sequence, and copy to the seed
         const MUL: u64 = 6364136223846793005;
         const INC: u64 = 11634580027462260723;
-        
+
         let mut seed = Self::Seed::default();
         for chunk in seed.as_mut().chunks_mut(4) {
             // We advance the state first (to get away from the input value,
             // in case it has low Hamming Weight).
             state = state.wrapping_mul(MUL).wrapping_add(INC);
-            
+
             // Use PCG output function with to_le to generate x:
             let xorshifted = (((state >> 18) ^ state) >> 27) as u32;
             let rot = (state >> 59) as u32;
             let x = xorshifted.rotate_right(rot).to_le();
-            
+
             unsafe {
                 let p = &x as *const u32 as *const u8;
                 copy_nonoverlapping(p, chunk.as_mut_ptr(), chunk.len());
             }
         }
-        
+
         Self::from_seed(seed)
     }
-    
+
     /// Create a new PRNG seeded from another `Rng`.
     ///
     /// This is the recommended way to initialize PRNGs with fresh entropy. The
-    /// [`FromEntropy`] trait provides a convenient `from_entropy` method
-    /// based on `from_rng`.
-    /// 
+    /// `FromEntropy` trait from the [`rand`] crate provides a convenient
+    /// `from_entropy` method based on `from_rng`.
+    ///
     /// Usage of this method is not recommended when reproducibility is required
     /// since implementing PRNGs are not required to fix Endianness and are
     /// allowed to modify implementations in new releases.
@@ -354,9 +345,9 @@
     /// results if their seed numbers are small or if there is a simple pattern
     /// between them.
     ///
-    /// Prefer to seed from a strong external entropy source like [`OsRng`] or
-    /// from a cryptographic PRNG; if creating a new generator for cryptographic
-    /// uses you *must* seed from a strong source.
+    /// Prefer to seed from a strong external entropy source like `OsRng` from
+    /// the [`rand_os`] crate or from a cryptographic PRNG; if creating a new
+    /// generator for cryptographic uses you *must* seed from a strong source.
     ///
     /// Seeding a small PRNG from another small PRNG is possible, but
     /// something to be careful with. An extreme example of how this can go
@@ -366,9 +357,9 @@
     ///
     /// PRNG implementations are allowed to assume that a good RNG is provided
     /// for seeding, and that it is cryptographically secure when appropriate.
-    /// 
-    /// [`FromEntropy`]: ../rand/trait.FromEntropy.html
-    /// [`OsRng`]: ../rand/rngs/struct.OsRng.html
+    ///
+    /// [`rand`]: https://docs.rs/rand
+    /// [`rand_os`]: https://docs.rs/rand_os
     fn from_rng<R: RngCore>(mut rng: R) -> Result<Self, Error> {
         let mut seed = Self::Seed::default();
         rng.try_fill_bytes(seed.as_mut())?;
@@ -445,7 +436,7 @@
 #[cfg(test)]
 mod test {
     use super::*;
-    
+
     #[test]
     fn test_seed_from_u64() {
         struct SeedableNum(u64);
@@ -457,7 +448,7 @@
                 SeedableNum(x[0])
             }
         }
-        
+
         const N: usize = 8;
         const SEEDS: [u64; N] = [0u64, 1, 2, 3, 4, 8, 16, -1i64 as u64];
         let mut results = [0u64; N];
@@ -465,21 +456,21 @@
             let SeedableNum(x) = SeedableNum::seed_from_u64(*seed);
             results[i] = x;
         }
-        
+
         for (i1, r1) in results.iter().enumerate() {
             let weight = r1.count_ones();
             // This is the binomial distribution B(64, 0.5), so chance of
             // weight < 20 is binocdf(19, 64, 0.5) = 7.8e-4, and same for
             // weight > 44.
             assert!(weight >= 20 && weight <= 44);
-            
+
             for (i2, r2) in results.iter().enumerate() {
                 if i1 == i2 { continue; }
                 let diff_weight = (r1 ^ r2).count_ones();
                 assert!(diff_weight >= 20);
             }
         }
-        
+
         // value-breakage test:
         assert_eq!(results[0], 5029875928683246316);
     }
diff --git a/rustc_deps/vendor/rand_jitter/.cargo-checksum.json b/rustc_deps/vendor/rand_jitter/.cargo-checksum.json
new file mode 100644
index 0000000..889c84d
--- /dev/null
+++ b/rustc_deps/vendor/rand_jitter/.cargo-checksum.json
@@ -0,0 +1 @@
+{"files":{"CHANGELOG.md":"748e3ddb180565b62537b441dcfb23d462d4b46247382b640854bcdb0eeb223f","COPYRIGHT":"90eb64f0279b0d9432accfa6023ff803bc4965212383697eee27a0f426d5f8d5","Cargo.toml":"641ad322e0355d275c5adccd10bd4720d4e519e1935d955d52fdbf9c554d2feb","LICENSE-APACHE":"aaff376532ea30a0cd5330b9502ad4a4c8bf769c539c87ffe78819d188a18ebf","LICENSE-MIT":"209fbbe0ad52d9235e37badf9cadfe4dbdc87203179c0899e738b39ade42177b","README.md":"336511f0f49a6e01f507f94f7f0dcd7621f530649b19a300765fb8e69a5c2d9b","benches/mod.rs":"caea9aa8c327d4af18eeabe798cf7919d5f64225c3e5f4685814592a1595b9bf","src/dummy_log.rs":"4e26589c18de568b7da7f0ccc9b77bb430961739a6510c2b043a43dee300c6fa","src/error.rs":"7f3edaa86836fb4f523cf9d96525614ccae2e66d92489e22dfcb2b0ea7ec8805","src/lib.rs":"288c8c2c41a7956f53a2400e41c59623785f7e6c3c4de960a9169fe6a48fa1fe","src/platform.rs":"8c7b75567a28391176de17a3df2a8c6b3517f2c1f044b792db50de19844e9660","tests/mod.rs":"f3f99c64b250b2ddea43e724c47497de3d68cbaf05a0a8a255d360861cd979ec"},"package":"080723c6145e37503a2224f801f252e14ac5531cb450f4502698542d188cb3c0"}
\ No newline at end of file
diff --git a/rustc_deps/vendor/rand_jitter/CHANGELOG.md b/rustc_deps/vendor/rand_jitter/CHANGELOG.md
new file mode 100644
index 0000000..8aa3a1b
--- /dev/null
+++ b/rustc_deps/vendor/rand_jitter/CHANGELOG.md
@@ -0,0 +1,15 @@
+# Changelog
+All notable changes to this project will be documented in this file.
+
+The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
+and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
+
+## [0.1.2] - 2019-01-31
+- Fix for older rustc compilers on Windows (#722)
+
+## [0.1.1] - 2019-01-29
+- Fix for older rustc compilers on Mac OSX / iOS (#720)
+- Misc. doc fixes
+
+## [0.1.0] - 2019-01-24
+Initial release.
diff --git a/rustc_deps/vendor/rand_jitter/COPYRIGHT b/rustc_deps/vendor/rand_jitter/COPYRIGHT
new file mode 100644
index 0000000..468d907
--- /dev/null
+++ b/rustc_deps/vendor/rand_jitter/COPYRIGHT
@@ -0,0 +1,12 @@
+Copyrights in the Rand project are retained by their contributors. No
+copyright assignment is required to contribute to the Rand project.
+
+For full authorship information, see the version control history.
+
+Except as otherwise noted (below and/or in individual files), Rand is
+licensed under the Apache License, Version 2.0 <LICENSE-APACHE> or
+<http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+<LICENSE-MIT> or <http://opensource.org/licenses/MIT>, at your option.
+
+The Rand project includes code from the Rust project
+published under these same licenses.
diff --git a/rustc_deps/vendor/rand_core-0.2.2/Cargo.toml b/rustc_deps/vendor/rand_jitter/Cargo.toml
similarity index 63%
copy from rustc_deps/vendor/rand_core-0.2.2/Cargo.toml
copy to rustc_deps/vendor/rand_jitter/Cargo.toml
index d48260f..74ac352 100644
--- a/rustc_deps/vendor/rand_core-0.2.2/Cargo.toml
+++ b/rustc_deps/vendor/rand_jitter/Cargo.toml
@@ -11,25 +11,29 @@
 # will likely look very different (and much more reasonable)
 
 [package]
-name = "rand_core"
-version = "0.2.2"
-authors = ["The Rust Project Developers"]
-description = "Core random number generator traits and tools for implementation.\n"
-homepage = "https://crates.io/crates/rand_core"
-documentation = "https://docs.rs/rand_core"
+name = "rand_jitter"
+version = "0.1.2"
+authors = ["The Rand Project Developers"]
+description = "Random number generator based on timing jitter"
+documentation = "https://docs.rs/rand_jitter"
 readme = "README.md"
-keywords = ["random", "rng"]
-categories = ["algorithms", "no-std"]
+keywords = ["random", "rng", "os"]
 license = "MIT/Apache-2.0"
 repository = "https://github.com/rust-random/rand"
+[dependencies.log]
+version = "0.4"
+optional = true
+
 [dependencies.rand_core]
-version = "0.3"
-default-features = false
+version = "0.4"
 
 [features]
-alloc = ["rand_core/alloc"]
-serde1 = ["rand_core/serde1"]
 std = ["rand_core/std"]
+[target."cfg(any(target_os = \"macos\", target_os = \"ios\"))".dependencies.libc]
+version = "0.2"
+[target."cfg(target_os = \"windows\")".dependencies.winapi]
+version = "0.3"
+features = ["profileapi"]
 [badges.appveyor]
 repository = "rust-random/rand"
 
diff --git a/rustc_deps/vendor/rand-0.5.5/LICENSE-APACHE b/rustc_deps/vendor/rand_jitter/LICENSE-APACHE
similarity index 100%
copy from rustc_deps/vendor/rand-0.5.5/LICENSE-APACHE
copy to rustc_deps/vendor/rand_jitter/LICENSE-APACHE
diff --git a/rustc_deps/vendor/rand_core-0.2.2/LICENSE-MIT b/rustc_deps/vendor/rand_jitter/LICENSE-MIT
similarity index 95%
copy from rustc_deps/vendor/rand_core-0.2.2/LICENSE-MIT
copy to rustc_deps/vendor/rand_jitter/LICENSE-MIT
index 39d4bdb..d93b5ba 100644
--- a/rustc_deps/vendor/rand_core-0.2.2/LICENSE-MIT
+++ b/rustc_deps/vendor/rand_jitter/LICENSE-MIT
@@ -1,3 +1,4 @@
+Copyright 2018 Developers of the Rand project
 Copyright (c) 2014 The Rust Project Developers
 
 Permission is hereby granted, free of charge, to any
diff --git a/rustc_deps/vendor/rand_jitter/README.md b/rustc_deps/vendor/rand_jitter/README.md
new file mode 100644
index 0000000..cda5d62
--- /dev/null
+++ b/rustc_deps/vendor/rand_jitter/README.md
@@ -0,0 +1,104 @@
+# rand_jitter
+[![Build Status](https://travis-ci.org/rust-random/rand.svg?branch=master)](https://travis-ci.org/rust-random/rand)
+[![Build Status](https://ci.appveyor.com/api/projects/status/github/rust-random/rand?svg=true)](https://ci.appveyor.com/project/rust-random/rand)
+[![Latest version](https://img.shields.io/crates/v/rand_os.svg)](https://crates.io/crates/rand_jitter)
+[![Book](https://img.shields.io/badge/book-master-yellow.svg)](https://rust-random.github.io/book/)
+[![API](https://img.shields.io/badge/api-master-yellow.svg)](https://rust-random.github.io/rand/rand_jitter)
+[![API](https://docs.rs/rand_os/badge.svg)](https://docs.rs/rand_jitter)
+[![Minimum rustc version](https://img.shields.io/badge/rustc-1.22+-lightgray.svg)](https://github.com/rust-random/rand#rust-version-requirements)
+
+Non-physical true random number generator based on timing jitter.
+
+This crate depends on [rand_core](https://crates.io/crates/rand_core) and is
+part of the [Rand project](https://github.com/rust-random/rand).
+
+This crate aims to support all of Rust's `std` platforms with a system-provided
+entropy source. Unlike other Rand crates, this crate does not support `no_std`
+(handling this gracefully is a current discussion topic).
+
+Links:
+
+-   [API documentation (master)](https://rust-random.github.io/rand/rand_jitter)
+-   [API documentation (docs.rs)](https://docs.rs/rand_jitter)
+-   [Changelog](CHANGELOG.md)
+
+## Features
+
+This crate has optional `std` support which is *disabled by default*;
+this feature is required to provide the `JitterRng::new` function;
+without `std` support a timer must be supplied via `JitterRng::new_with_timer`.
+
+## Quality testing
+
+`JitterRng::new()` has build-in, but limited, quality testing, however
+before using `JitterRng` on untested hardware, or after changes that could
+effect how the code is optimized (such as a new LLVM version), it is
+recommend to run the much more stringent
+[NIST SP 800-90B Entropy Estimation Suite](https://github.com/usnistgov/SP800-90B_EntropyAssessment).
+
+Use the following code using `timer_stats` to collect the data:
+
+```rust
+use rand_jitter::JitterRng;
+
+use std::error::Error;
+use std::fs::File;
+use std::io::Write;
+
+fn main() -> Result<(), Box<Error>> {
+    let mut rng = JitterRng::new()?;
+
+    // 1_000_000 results are required for the
+    // NIST SP 800-90B Entropy Estimation Suite
+    const ROUNDS: usize = 1_000_000;
+    let mut deltas_variable: Vec<u8> = Vec::with_capacity(ROUNDS);
+    let mut deltas_minimal: Vec<u8> = Vec::with_capacity(ROUNDS);
+
+    for _ in 0..ROUNDS {
+        deltas_variable.push(rng.timer_stats(true) as u8);
+        deltas_minimal.push(rng.timer_stats(false) as u8);
+    }
+
+    // Write out after the statistics collection loop, to not disturb the
+    // test results.
+    File::create("jitter_rng_var.bin")?.write(&deltas_variable)?;
+    File::create("jitter_rng_min.bin")?.write(&deltas_minimal)?;
+    Ok(())
+}
+```
+
+This will produce two files: `jitter_rng_var.bin` and `jitter_rng_min.bin`.
+Run the Entropy Estimation Suite in three configurations, as outlined below.
+Every run has two steps. One step to produce an estimation, another to
+validate the estimation.
+
+1. Estimate the expected amount of entropy that is at least available with
+   each round of the entropy collector. This number should be greater than
+   the amount estimated with `64 / test_timer()`.
+   ```sh
+   python noniid_main.py -v jitter_rng_var.bin 8
+   restart.py -v jitter_rng_var.bin 8 <min-entropy>
+   ```
+2. Estimate the expected amount of entropy that is available in the last 4
+   bits of the timer delta after running noice sources. Note that a value of
+   `3.70` is the minimum estimated entropy for true randomness.
+   ```sh
+   python noniid_main.py -v -u 4 jitter_rng_var.bin 4
+   restart.py -v -u 4 jitter_rng_var.bin 4 <min-entropy>
+   ```
+3. Estimate the expected amount of entropy that is available to the entropy
+   collector if both noise sources only run their minimal number of times.
+   This measures the absolute worst-case, and gives a lower bound for the
+   available entropy.
+   ```sh
+   python noniid_main.py -v -u 4 jitter_rng_min.bin 4
+   restart.py -v -u 4 jitter_rng_min.bin 4 <min-entropy>
+   ```
+
+## License
+
+`rand_jitter` is distributed under the terms of both the MIT license and the
+Apache License (Version 2.0).
+
+See [LICENSE-APACHE](LICENSE-APACHE) and [LICENSE-MIT](LICENSE-MIT), and
+[COPYRIGHT](COPYRIGHT) for details.
diff --git a/rustc_deps/vendor/rand_jitter/benches/mod.rs b/rustc_deps/vendor/rand_jitter/benches/mod.rs
new file mode 100644
index 0000000..23b3447
--- /dev/null
+++ b/rustc_deps/vendor/rand_jitter/benches/mod.rs
@@ -0,0 +1,18 @@
+#![feature(test)]
+extern crate test;
+extern crate rand_jitter;
+
+use test::Bencher;
+use rand_jitter::rand_core::RngCore;
+
+#[bench]
+fn bench_add_two(b: &mut Bencher) {
+    let mut rng = rand_jitter::JitterRng::new().unwrap();
+    let mut buf = [0u8; 1024];
+    b.iter(|| {
+        rng.fill_bytes(&mut buf[..]);
+        test::black_box(&buf);
+    });
+    b.bytes = buf.len() as u64;
+}
+
diff --git a/rustc_deps/vendor/rand_jitter/src/dummy_log.rs b/rustc_deps/vendor/rand_jitter/src/dummy_log.rs
new file mode 100644
index 0000000..ccfe4ba
--- /dev/null
+++ b/rustc_deps/vendor/rand_jitter/src/dummy_log.rs
@@ -0,0 +1,10 @@
+#[allow(unused)]
+macro_rules! trace { ($($x:tt)*) => () }
+#[allow(unused)]
+macro_rules! debug { ($($x:tt)*) => () }
+#[allow(unused)]
+macro_rules! info { ($($x:tt)*) => () }
+#[allow(unused)]
+macro_rules! warn { ($($x:tt)*) => () }
+#[allow(unused)]
+macro_rules! error { ($($x:tt)*) => () }
diff --git a/rustc_deps/vendor/rand_jitter/src/error.rs b/rustc_deps/vendor/rand_jitter/src/error.rs
new file mode 100644
index 0000000..b8bc37f
--- /dev/null
+++ b/rustc_deps/vendor/rand_jitter/src/error.rs
@@ -0,0 +1,66 @@
+// Copyright 2018 Developers of the Rand project.
+// Copyright 2013-2015 The Rust Project Developers.
+//
+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+// https://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or https://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+use rand_core::{Error, ErrorKind};
+use core::fmt;
+
+/// An error that can occur when [`JitterRng::test_timer`] fails.
+///
+/// [`JitterRng::test_timer`]: crate::JitterRng::test_timer
+#[derive(Debug, Clone, PartialEq, Eq)]
+pub enum TimerError {
+    /// No timer available.
+    NoTimer,
+    /// Timer too coarse to use as an entropy source.
+    CoarseTimer,
+    /// Timer is not monotonically increasing.
+    NotMonotonic,
+    /// Variations of deltas of time too small.
+    TinyVariantions,
+    /// Too many stuck results (indicating no added entropy).
+    TooManyStuck,
+    #[doc(hidden)]
+    __Nonexhaustive,
+}
+
+impl TimerError {
+    fn description(&self) -> &'static str {
+        match *self {
+            TimerError::NoTimer => "no timer available",
+            TimerError::CoarseTimer => "coarse timer",
+            TimerError::NotMonotonic => "timer not monotonic",
+            TimerError::TinyVariantions => "time delta variations too small",
+            TimerError::TooManyStuck => "too many stuck results",
+            TimerError::__Nonexhaustive => unreachable!(),
+        }
+    }
+}
+
+impl fmt::Display for TimerError {
+    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+        write!(f, "{}", self.description())
+    }
+}
+
+#[cfg(feature = "std")]
+impl ::std::error::Error for TimerError {
+    fn description(&self) -> &str {
+        self.description()
+    }
+}
+
+impl From<TimerError> for Error {
+    fn from(err: TimerError) -> Error {
+        // Timer check is already quite permissive of failures so we don't
+        // expect false-positive failures, i.e. any error is irrecoverable.
+        Error::with_cause(ErrorKind::Unavailable,
+                              "timer jitter failed basic quality tests", err)
+    }
+}
+
diff --git a/rustc_deps/vendor/rand/src/rngs/jitter.rs b/rustc_deps/vendor/rand_jitter/src/lib.rs
similarity index 74%
rename from rustc_deps/vendor/rand/src/rngs/jitter.rs
rename to rustc_deps/vendor/rand_jitter/src/lib.rs
index 3e93477..ab9ae39 100644
--- a/rustc_deps/vendor/rand/src/rngs/jitter.rs
+++ b/rustc_deps/vendor/rand_jitter/src/lib.rs
@@ -13,16 +13,68 @@
 // the MIT license.
 
 //! Non-physical true random number generator based on timing jitter.
+//!
+//! This is a true random number generator, as opposed to pseudo-random
+//! generators. Random numbers generated by `JitterRng` can be seen as fresh
+//! entropy. A consequence is that it is orders of magnitude slower than `OsRng`
+//! and PRNGs (about 10<sup>3</sup>..10<sup>6</sup> slower).
+//!
+//! There are very few situations where using this RNG is appropriate. Only very
+//! few applications require true entropy. A normal PRNG can be statistically
+//! indistinguishable, and a cryptographic PRNG should also be as impossible to
+//! predict.
+//!
+//! Use of `JitterRng` is recommended for initializing cryptographic PRNGs when
+//! `OsRng` is not available.
+//!
+//! `JitterRng` can be used without the standard library, but not conveniently,
+//! you must provide a high-precision timer and carefully have to follow the
+//! instructions of [`JitterRng::new_with_timer`].
+//!
+//! This implementation is based on [Jitterentropy] version 2.1.0.
+//!
+//! Note: There is no accurate timer available on WASM platforms, to help
+//! prevent fingerprinting or timing side-channel attacks. Therefore
+//! [`JitterRng::new()`] is not available on WASM. It is also unavailable
+//! with disabled `std` feature.
+//!
+//! [Jitterentropy]: http://www.chronox.de/jent.html
+
+#![doc(html_logo_url = "https://www.rust-lang.org/logos/rust-logo-128x128-blk.png",
+       html_favicon_url = "https://www.rust-lang.org/favicon.ico",
+       html_root_url = "https://rust-random.github.io/rand/")]
+
+#![deny(missing_docs)]
+#![deny(missing_debug_implementations)]
+#![doc(test(attr(allow(unused_variables), deny(warnings))))]
 
 // Note: the C implementation of `Jitterentropy` relies on being compiled
 // without optimizations. This implementation goes through lengths to make the
 // compiler not optimize out code which does influence timing jitter, but is
 // technically dead code.
+#![no_std]
+pub extern crate rand_core;
+#[cfg(feature = "std")]
+extern crate std;
+#[cfg(feature = "log")]
+#[macro_use] extern crate log;
+#[cfg(any(target_os = "macos", target_os = "ios"))]
+extern crate libc;
+#[cfg(target_os = "windows")]
+extern crate winapi;
 
-use rand_core::{RngCore, CryptoRng, Error, ErrorKind, impls};
+
+#[cfg(not(feature = "log"))]
+#[macro_use] mod dummy_log;
+#[cfg(feature = "std")]
+mod platform;
+mod error;
+
+use rand_core::{RngCore, CryptoRng, Error, impls};
+pub use error::TimerError;
 
 use core::{fmt, mem, ptr};
-#[cfg(all(feature="std", not(target_arch = "wasm32")))]
+#[cfg(feature = "std")]
 use std::sync::atomic::{AtomicUsize, ATOMIC_USIZE_INIT, Ordering};
 
 const MEMORY_BLOCKS: usize = 64;
@@ -31,108 +83,6 @@
 
 /// A true random number generator based on jitter in the CPU execution time,
 /// and jitter in memory access time.
-///
-/// This is a true random number generator, as opposed to pseudo-random
-/// generators. Random numbers generated by `JitterRng` can be seen as fresh
-/// entropy. A consequence is that is orders of magnitude slower than [`OsRng`]
-/// and PRNGs (about 10<sup>3</sup>..10<sup>6</sup> slower).
-///
-/// There are very few situations where using this RNG is appropriate. Only very
-/// few applications require true entropy. A normal PRNG can be statistically
-/// indistinguishable, and a cryptographic PRNG should also be as impossible to
-/// predict.
-///
-/// Use of `JitterRng` is recommended for initializing cryptographic PRNGs when
-/// [`OsRng`] is not available.
-///
-/// `JitterRng` can be used without the standard library, but not conveniently,
-/// you must provide a high-precision timer and carefully have to follow the
-/// instructions of [`new_with_timer`].
-///
-/// This implementation is based on
-/// [Jitterentropy](http://www.chronox.de/jent.html) version 2.1.0.
-///
-/// Note: There is no accurate timer available on Wasm platforms, to help
-/// prevent fingerprinting or timing side-channel attacks. Therefore
-/// [`JitterRng::new()`] is not available on Wasm.
-///
-/// # Quality testing
-///
-/// [`JitterRng::new()`] has build-in, but limited, quality testing, however
-/// before using `JitterRng` on untested hardware, or after changes that could
-/// effect how the code is optimized (such as a new LLVM version), it is
-/// recommend to run the much more stringent
-/// [NIST SP 800-90B Entropy Estimation Suite](
-/// https://github.com/usnistgov/SP800-90B_EntropyAssessment).
-///
-/// Use the following code using [`timer_stats`] to collect the data:
-///
-/// ```no_run
-/// use rand::rngs::JitterRng;
-/// #
-/// # use std::error::Error;
-/// # use std::fs::File;
-/// # use std::io::Write;
-/// #
-/// # fn try_main() -> Result<(), Box<Error>> {
-/// let mut rng = JitterRng::new()?;
-///
-/// // 1_000_000 results are required for the
-/// // NIST SP 800-90B Entropy Estimation Suite
-/// const ROUNDS: usize = 1_000_000;
-/// let mut deltas_variable: Vec<u8> = Vec::with_capacity(ROUNDS);
-/// let mut deltas_minimal: Vec<u8> = Vec::with_capacity(ROUNDS);
-///
-/// for _ in 0..ROUNDS {
-///     deltas_variable.push(rng.timer_stats(true) as u8);
-///     deltas_minimal.push(rng.timer_stats(false) as u8);
-/// }
-///
-/// // Write out after the statistics collection loop, to not disturb the
-/// // test results.
-/// File::create("jitter_rng_var.bin")?.write(&deltas_variable)?;
-/// File::create("jitter_rng_min.bin")?.write(&deltas_minimal)?;
-/// #
-/// # Ok(())
-/// # }
-/// #
-/// # fn main() {
-/// #     try_main().unwrap();
-/// # }
-/// ```
-///
-/// This will produce two files: `jitter_rng_var.bin` and `jitter_rng_min.bin`.
-/// Run the Entropy Estimation Suite in three configurations, as outlined below.
-/// Every run has two steps. One step to produce an estimation, another to
-/// validate the estimation.
-///
-/// 1. Estimate the expected amount of entropy that is at least available with
-///    each round of the entropy collector. This number should be greater than
-///    the amount estimated with `64 / test_timer()`.
-///    ```sh
-///    python noniid_main.py -v jitter_rng_var.bin 8
-///    restart.py -v jitter_rng_var.bin 8 <min-entropy>
-///    ```
-/// 2. Estimate the expected amount of entropy that is available in the last 4
-///    bits of the timer delta after running noice sources. Note that a value of
-///    `3.70` is the minimum estimated entropy for true randomness.
-///    ```sh
-///    python noniid_main.py -v -u 4 jitter_rng_var.bin 4
-///    restart.py -v -u 4 jitter_rng_var.bin 4 <min-entropy>
-///    ```
-/// 3. Estimate the expected amount of entropy that is available to the entropy
-///    collector if both noice sources only run their minimal number of times.
-///    This measures the absolute worst-case, and gives a lower bound for the
-///    available entropy.
-///    ```sh
-///    python noniid_main.py -v -u 4 jitter_rng_min.bin 4
-///    restart.py -v -u 4 jitter_rng_min.bin 4 <min-entropy>
-///    ```
-///
-/// [`OsRng`]: struct.OsRng.html
-/// [`JitterRng::new()`]: struct.JitterRng.html#method.new
-/// [`new_with_timer`]: struct.JitterRng.html#method.new_with_timer
-/// [`timer_stats`]: struct.JitterRng.html#method.timer_stats
 pub struct JitterRng {
     data: u64, // Actual random number
     // Number of rounds to run the entropy collector per 64 bits
@@ -215,62 +165,8 @@
     }
 }
 
-/// An error that can occur when [`JitterRng::test_timer`] fails.
-///
-/// [`JitterRng::test_timer`]: struct.JitterRng.html#method.test_timer
-#[derive(Debug, Clone, PartialEq, Eq)]
-pub enum TimerError {
-    /// No timer available.
-    NoTimer,
-    /// Timer too coarse to use as an entropy source.
-    CoarseTimer,
-    /// Timer is not monotonically increasing.
-    NotMonotonic,
-    /// Variations of deltas of time too small.
-    TinyVariantions,
-    /// Too many stuck results (indicating no added entropy).
-    TooManyStuck,
-    #[doc(hidden)]
-    __Nonexhaustive,
-}
-
-impl TimerError {
-    fn description(&self) -> &'static str {
-        match *self {
-            TimerError::NoTimer => "no timer available",
-            TimerError::CoarseTimer => "coarse timer",
-            TimerError::NotMonotonic => "timer not monotonic",
-            TimerError::TinyVariantions => "time delta variations too small",
-            TimerError::TooManyStuck => "too many stuck results",
-            TimerError::__Nonexhaustive => unreachable!(),
-        }
-    }
-}
-
-impl fmt::Display for TimerError {
-    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
-        write!(f, "{}", self.description())
-    }
-}
-
-#[cfg(feature="std")]
-impl ::std::error::Error for TimerError {
-    fn description(&self) -> &str {
-        self.description()
-    }
-}
-
-impl From<TimerError> for Error {
-    fn from(err: TimerError) -> Error {
-        // Timer check is already quite permissive of failures so we don't
-        // expect false-positive failures, i.e. any error is irrecoverable.
-        Error::with_cause(ErrorKind::Unavailable,
-                              "timer jitter failed basic quality tests", err)
-    }
-}
-
 // Initialise to zero; must be positive
-#[cfg(all(feature="std", not(target_arch = "wasm32")))]
+#[cfg(all(feature = "std", not(target_arch = "wasm32")))]
 static JITTER_ROUNDS: AtomicUsize = ATOMIC_USIZE_INIT;
 
 impl JitterRng {
@@ -281,8 +177,11 @@
     /// During initialization CPU execution timing jitter is measured a few
     /// hundred times. If this does not pass basic quality tests, an error is
     /// returned. The test result is cached to make subsequent calls faster.
-    #[cfg(all(feature="std", not(target_arch = "wasm32")))]
+    #[cfg(all(feature = "std", not(target_arch = "wasm32")))]
     pub fn new() -> Result<JitterRng, TimerError> {
+        if cfg!(target_arch = "wasm32") {
+            return Err(TimerError::NoTimer);
+        }
         let mut state = JitterRng::new_with_timer(platform::get_nstime);
         let mut rounds = JITTER_ROUNDS.load(Ordering::Relaxed) as u8;
         if rounds == 0 {
@@ -314,8 +213,8 @@
     /// # Example
     ///
     /// ```
-    /// # use rand::{Rng, Error};
-    /// use rand::rngs::JitterRng;
+    /// # use rand_jitter::rand_core::{RngCore, Error};
+    /// use rand_jitter::JitterRng;
     ///
     /// # fn try_inner() -> Result<(), Error> {
     /// fn get_nstime() -> u64 {
@@ -332,18 +231,18 @@
     /// let mut rng = JitterRng::new_with_timer(get_nstime);
     /// let rounds = rng.test_timer()?;
     /// rng.set_rounds(rounds); // optional
-    /// let _ = rng.gen::<u64>();
+    /// let _ = rng.next_u64();
     ///
     /// // Ready for use
-    /// let v: u64 = rng.gen();
+    /// let v: u64 = rng.next_u64();
     /// # Ok(())
     /// # }
     ///
     /// # let _ = try_inner();
     /// ```
     ///
-    /// [`test_timer`]: struct.JitterRng.html#method.test_timer
-    /// [`set_rounds`]: struct.JitterRng.html#method.set_rounds
+    /// [`test_timer`]: JitterRng::test_timer
+    /// [`set_rounds`]: JitterRng::set_rounds
     pub fn new_with_timer(timer: fn() -> u64) -> JitterRng {
         JitterRng {
             data: 0,
@@ -363,7 +262,7 @@
     /// rounds required for full strength (platform dependent), so one may use
     /// `rng.set_rounds(rng.test_timer()?);` or cache the value.
     ///
-    /// [`new_with_timer`]: struct.JitterRng.html#method.new_with_timer
+    /// [`new_with_timer`]: JitterRng::new_with_timer
     pub fn set_rounds(&mut self, rounds: u8) {
         assert!(rounds > 0);
         self.rounds = rounds;
@@ -600,15 +499,13 @@
         self.stir_pool();
         self.data
     }
-    
+
     /// Basic quality tests on the timer, by measuring CPU timing jitter a few
     /// hundred times.
     ///
     /// If succesful, this will return the estimated number of rounds necessary
     /// to collect 64 bits of entropy. Otherwise a [`TimerError`] with the cause
     /// of the failure will be returned.
-    ///
-    /// [`TimerError`]: enum.TimerError.html
     pub fn test_timer(&mut self) -> Result<u8, TimerError> {
         debug!("JitterRng: testing timer ...");
         // We could add a check for system capabilities such as `clock_getres`
@@ -758,8 +655,8 @@
     /// of entropy one round of the entropy collector can collect in the worst
     /// case.
     ///
-    /// See [Quality testing](struct.JitterRng.html#quality-testing) on how to
-    /// use `timer_stats` to test the quality of `JitterRng`.
+    /// See this crate's README on how to use `timer_stats` to test the quality
+    /// of `JitterRng`.
     pub fn timer_stats(&mut self, var_rounds: bool) -> i64 {
         let mut mem = [0; MEMORY_SIZE];
 
@@ -771,45 +668,6 @@
     }
 }
 
-#[cfg(feature="std")]
-mod platform {
-    #[cfg(not(any(target_os = "macos", target_os = "ios",
-                  target_os = "windows",
-                  target_arch = "wasm32")))]
-    pub fn get_nstime() -> u64 {
-        use std::time::{SystemTime, UNIX_EPOCH};
-
-        let dur = SystemTime::now().duration_since(UNIX_EPOCH).unwrap();
-        // The correct way to calculate the current time is
-        // `dur.as_secs() * 1_000_000_000 + dur.subsec_nanos() as u64`
-        // But this is faster, and the difference in terms of entropy is
-        // negligible (log2(10^9) == 29.9).
-        dur.as_secs() << 30 | dur.subsec_nanos() as u64
-    }
-
-    #[cfg(any(target_os = "macos", target_os = "ios"))]
-    pub fn get_nstime() -> u64 {
-        extern crate libc;
-        // On Mac OS and iOS std::time::SystemTime only has 1000ns resolution.
-        // We use `mach_absolute_time` instead. This provides a CPU dependent
-        // unit, to get real nanoseconds the result should by multiplied by
-        // numer/denom from `mach_timebase_info`.
-        // But we are not interested in the exact nanoseconds, just entropy. So
-        // we use the raw result.
-        unsafe { libc::mach_absolute_time() }
-    }
-
-    #[cfg(target_os = "windows")]
-    pub fn get_nstime() -> u64 {
-        extern crate winapi;
-        unsafe {
-            let mut t = super::mem::zeroed();
-            winapi::um::profileapi::QueryPerformanceCounter(&mut t);
-            *t.QuadPart() as u64
-        }
-    }
-}
-
 // A function that is opaque to the optimizer to assist in avoiding dead-code
 // elimination. Taken from `bencher`.
 fn black_box<T>(dummy: T) -> T {
@@ -854,32 +712,3 @@
 
 impl CryptoRng for JitterRng {}
 
-#[cfg(test)]
-mod test_jitter_init {
-    use super::JitterRng;
-
-    #[cfg(all(feature="std", not(target_arch = "wasm32")))]
-    #[test]
-    fn test_jitter_init() {
-        use RngCore;
-        // Because this is a debug build, measurements here are not representive
-        // of the final release build.
-        // Don't fail this test if initializing `JitterRng` fails because of a
-        // bad timer (the timer from the standard library may not have enough
-        // accuracy on all platforms).
-        match JitterRng::new() {
-            Ok(ref mut rng) => {
-                // false positives are possible, but extremely unlikely
-                assert!(rng.next_u32() | rng.next_u32() != 0);
-            },
-            Err(_) => {},
-        }
-    }
-
-    #[test]
-    fn test_jitter_bad_timer() {
-        fn bad_timer() -> u64 { 0 }
-        let mut rng = JitterRng::new_with_timer(bad_timer);
-        assert!(rng.test_timer().is_err());
-    }
-}
diff --git a/rustc_deps/vendor/rand_jitter/src/platform.rs b/rustc_deps/vendor/rand_jitter/src/platform.rs
new file mode 100644
index 0000000..8e3d0fb
--- /dev/null
+++ b/rustc_deps/vendor/rand_jitter/src/platform.rs
@@ -0,0 +1,44 @@
+// Copyright 2018 Developers of the Rand project.
+// Copyright 2013-2015 The Rust Project Developers.
+//
+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+// https://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or https://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+#[cfg(not(any(target_os = "macos", target_os = "ios", target_os = "windows")))]
+pub fn get_nstime() -> u64 {
+    use std::time::{SystemTime, UNIX_EPOCH};
+
+    let dur = SystemTime::now().duration_since(UNIX_EPOCH).unwrap();
+    // The correct way to calculate the current time is
+    // `dur.as_secs() * 1_000_000_000 + dur.subsec_nanos() as u64`
+    // But this is faster, and the difference in terms of entropy is
+    // negligible (log2(10^9) == 29.9).
+    dur.as_secs() << 30 | dur.subsec_nanos() as u64
+}
+
+#[cfg(any(target_os = "macos", target_os = "ios"))]
+pub fn get_nstime() -> u64 {
+    use libc;
+    
+    // On Mac OS and iOS std::time::SystemTime only has 1000ns resolution.
+    // We use `mach_absolute_time` instead. This provides a CPU dependent
+    // unit, to get real nanoseconds the result should by multiplied by
+    // numer/denom from `mach_timebase_info`.
+    // But we are not interested in the exact nanoseconds, just entropy. So
+    // we use the raw result.
+    unsafe { libc::mach_absolute_time() }
+}
+
+#[cfg(target_os = "windows")]
+pub fn get_nstime() -> u64 {
+    use winapi;
+
+    unsafe {
+        let mut t = super::mem::zeroed();
+        winapi::um::profileapi::QueryPerformanceCounter(&mut t);
+        *t.QuadPart() as u64
+    }
+}
diff --git a/rustc_deps/vendor/rand_jitter/tests/mod.rs b/rustc_deps/vendor/rand_jitter/tests/mod.rs
new file mode 100644
index 0000000..6820c20
--- /dev/null
+++ b/rustc_deps/vendor/rand_jitter/tests/mod.rs
@@ -0,0 +1,31 @@
+extern crate rand_jitter;
+extern crate rand_core;
+
+use rand_jitter::JitterRng;
+#[cfg(feature = "std")]
+use rand_core::RngCore;
+
+#[cfg(feature = "std")]
+#[test]
+fn test_jitter_init() {
+    // Because this is a debug build, measurements here are not representive
+    // of the final release build.
+    // Don't fail this test if initializing `JitterRng` fails because of a
+    // bad timer (the timer from the standard library may not have enough
+    // accuracy on all platforms).
+    match JitterRng::new() {
+        Ok(ref mut rng) => {
+            // false positives are possible, but extremely unlikely
+            assert!(rng.next_u32() | rng.next_u32() != 0);
+        },
+        Err(_) => {},
+    }
+}
+
+#[test]
+fn test_jitter_bad_timer() {
+    fn bad_timer() -> u64 { 0 }
+    let mut rng = JitterRng::new_with_timer(bad_timer);
+    assert!(rng.test_timer().is_err());
+}
+
diff --git a/rustc_deps/vendor/rand_os/.cargo-checksum.json b/rustc_deps/vendor/rand_os/.cargo-checksum.json
index d1dd8a4..3bce8ce 100644
--- a/rustc_deps/vendor/rand_os/.cargo-checksum.json
+++ b/rustc_deps/vendor/rand_os/.cargo-checksum.json
@@ -1 +1 @@
-{"files":{"CHANGELOG.md":"fab8ed70e6ec5bcee7f9e7919751bdb65ee4fa8b98639b41c6a9f7e836aa95ab","COPYRIGHT":"90eb64f0279b0d9432accfa6023ff803bc4965212383697eee27a0f426d5f8d5","Cargo.toml":"895e9ab5a90212ea1db4798dabf3732fff1edcf75378f664fc0a8f7a400d0b26","LICENSE-APACHE":"aaff376532ea30a0cd5330b9502ad4a4c8bf769c539c87ffe78819d188a18ebf","LICENSE-MIT":"209fbbe0ad52d9235e37badf9cadfe4dbdc87203179c0899e738b39ade42177b","README.md":"91ccce04b8ea75d26b78f155b578b92be283b2e740d94192ade9eaa3d59c8c27","src/cloudabi.rs":"4f9f9991a1ef7dc330e81ee5208fcc23ad6acc2c73c257b019a3aa488f3a1291","src/dragonfly_haiku_emscripten.rs":"8e693952f38b2576ce7c454cc51d0209917ec40f2a3224ff0f138f798d2c82b3","src/dummy_log.rs":"4e26589c18de568b7da7f0ccc9b77bb430961739a6510c2b043a43dee300c6fa","src/freebsd.rs":"6b1e0a3735d798d8297a9426721e01672424cc289707dae86e336a207cd43436","src/fuchsia.rs":"d20a73d686217116e4e95f51be28c5cfd940a8db5c1d3a9bfbc1ec4b7dcd150e","src/lib.rs":"2ab52f4ca7ef99561da764cd608045836012edec81f07f8309a809bc67ebbd6c","src/linux_android.rs":"5ed5003248fed1f630dfb1f57a00aea13e412f4aeef0b707d08c42e91a600519","src/macos.rs":"17ccfd5a69068db0580480f680398e20d9ed5219abd726c90e5d9db509539608","src/netbsd.rs":"c1c80d7a3b7587523f321ef2b1f6d3d4028f124bb9e02b11b02f27f61cf2bcc9","src/openbsd_bitrig.rs":"b9601aa0c6cc0129913341adba838aa0fadd698563eca7f0b046e31c97f0ac92","src/random_device.rs":"bc9cf2470619a90bb8444a632a873e431f801cc3230977851e20d54d86093321","src/redox.rs":"c3fd6f418f085d3b5ffaa6ff4540380cf437cbd65c8b87f89c1dbe16222539e4","src/solaris.rs":"9c1d02554bf0d8f066a0db581b466b498ed685957a54ce47c48c50b94bab512f","src/wasm32_bindgen.rs":"fe38c3d5e3c3e5c20140a9dbd198a45acd861a49bd577a021e015fccb2cfccec","src/wasm32_stdweb.rs":"8684b8ce392941c9d7864d45f82e5a4577fc63b0f0bb709fa627f8b9c9e154a6","src/windows.rs":"d72d555013440aeffe764d961a0a095f8a11417d28a13c2a8882abce2dc000f0","tests/mod.rs":"b8a6caeb5aafd13de775488168b0b46592336568ded37be713e422f724f6f086"},"package":"de5ac4de1c2973e1391dc305cb0fbf8788cb58068e98255439b7485a77022273"}
\ No newline at end of file
+{"files":{"CHANGELOG.md":"07e9da067d366c5105661ca8b93c76203d504335eebefa2a00aed324c67babcf","COPYRIGHT":"90eb64f0279b0d9432accfa6023ff803bc4965212383697eee27a0f426d5f8d5","Cargo.toml":"62a2837a9e5ff5dd70dcf148d117188d6c5a81bbe38e029df47b7ad7944c7435","LICENSE-APACHE":"aaff376532ea30a0cd5330b9502ad4a4c8bf769c539c87ffe78819d188a18ebf","LICENSE-MIT":"209fbbe0ad52d9235e37badf9cadfe4dbdc87203179c0899e738b39ade42177b","README.md":"91ccce04b8ea75d26b78f155b578b92be283b2e740d94192ade9eaa3d59c8c27","src/cloudabi.rs":"4f9f9991a1ef7dc330e81ee5208fcc23ad6acc2c73c257b019a3aa488f3a1291","src/dragonfly_haiku_emscripten.rs":"8e693952f38b2576ce7c454cc51d0209917ec40f2a3224ff0f138f798d2c82b3","src/dummy_log.rs":"4e26589c18de568b7da7f0ccc9b77bb430961739a6510c2b043a43dee300c6fa","src/freebsd.rs":"6b1e0a3735d798d8297a9426721e01672424cc289707dae86e336a207cd43436","src/fuchsia.rs":"61159ae3fa469a40214b7ad2f9b0445ed952944c0d5738cd3b7c045eb3e5034a","src/lib.rs":"78e80a23481c1dd9af2595d590a51e4e532a14f8a709a366443c121c66a6cdfe","src/linux_android.rs":"5ed5003248fed1f630dfb1f57a00aea13e412f4aeef0b707d08c42e91a600519","src/macos.rs":"17ccfd5a69068db0580480f680398e20d9ed5219abd726c90e5d9db509539608","src/netbsd.rs":"c1c80d7a3b7587523f321ef2b1f6d3d4028f124bb9e02b11b02f27f61cf2bcc9","src/openbsd_bitrig.rs":"b9601aa0c6cc0129913341adba838aa0fadd698563eca7f0b046e31c97f0ac92","src/random_device.rs":"bc9cf2470619a90bb8444a632a873e431f801cc3230977851e20d54d86093321","src/redox.rs":"c3fd6f418f085d3b5ffaa6ff4540380cf437cbd65c8b87f89c1dbe16222539e4","src/sgx.rs":"140cf6529ebbf28a19c112e6f325ecd9d84427cc962895795e427cb5b1fa8500","src/solaris.rs":"9c1d02554bf0d8f066a0db581b466b498ed685957a54ce47c48c50b94bab512f","src/wasm32_bindgen.rs":"befe5b8a90ed23c2b3adf40281651966a5ee15ae520101704b68890ec4fb4529","src/wasm32_stdweb.rs":"8684b8ce392941c9d7864d45f82e5a4577fc63b0f0bb709fa627f8b9c9e154a6","src/windows.rs":"d72d555013440aeffe764d961a0a095f8a11417d28a13c2a8882abce2dc000f0","tests/mod.rs":"b8a6caeb5aafd13de775488168b0b46592336568ded37be713e422f724f6f086"},"package":"b7c690732391ae0abafced5015ffb53656abfaec61b342290e5eb56b286a679d"}
\ No newline at end of file
diff --git a/rustc_deps/vendor/rand_os/CHANGELOG.md b/rustc_deps/vendor/rand_os/CHANGELOG.md
index b23c990..97a8e84 100644
--- a/rustc_deps/vendor/rand_os/CHANGELOG.md
+++ b/rustc_deps/vendor/rand_os/CHANGELOG.md
@@ -4,5 +4,14 @@
 The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
 and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
 
+
+## [0.1.2] - 2019-01-28
+### Changes
+- Fuchsia: Replaced fuchsia-zircon with fuchsia-cprng
+
+## [0.1.1] - 2019-01-08
+### Additions
+- Add support for x86_64-fortanix-unknown-sgx target (#670)
+
 ## [0.1.0] - 2019-01-04
 Initial release.
diff --git a/rustc_deps/vendor/rand_os/Cargo.toml b/rustc_deps/vendor/rand_os/Cargo.toml
index da5fbdb..e9a55b0 100644
--- a/rustc_deps/vendor/rand_os/Cargo.toml
+++ b/rustc_deps/vendor/rand_os/Cargo.toml
@@ -12,7 +12,7 @@
 
 [package]
 name = "rand_os"
-version = "0.1.0"
+version = "0.1.2"
 authors = ["The Rand Project Developers"]
 description = "OS backed Random Number Generator"
 homepage = "https://crates.io/crates/rand_os"
@@ -26,17 +26,19 @@
 optional = true
 
 [dependencies.rand_core]
-version = "0.3"
-default-features = false
+version = "0.4"
+features = ["std"]
+[target."cfg(target_env = \"sgx\")".dependencies.rdrand]
+version = "0.4.0"
 [target."cfg(target_os = \"cloudabi\")".dependencies.cloudabi]
 version = "0.0.3"
-[target."cfg(target_os = \"fuchsia\")".dependencies.fuchsia-zircon]
-version = "0.3.2"
+[target."cfg(target_os = \"fuchsia\")".dependencies.fuchsia-cprng]
+version = "0.1.0"
 [target."cfg(unix)".dependencies.libc]
 version = "0.2"
 [target."cfg(windows)".dependencies.winapi]
 version = "0.3"
-features = ["minwindef", "ntsecapi", "profileapi", "winnt"]
+features = ["minwindef", "ntsecapi", "winnt"]
 [target.wasm32-unknown-unknown.dependencies.stdweb]
 version = "0.4"
 optional = true
diff --git a/rustc_deps/vendor/rand_os/src/fuchsia.rs b/rustc_deps/vendor/rand_os/src/fuchsia.rs
index 7063ff6..ada3677 100644
--- a/rustc_deps/vendor/rand_os/src/fuchsia.rs
+++ b/rustc_deps/vendor/rand_os/src/fuchsia.rs
@@ -8,9 +8,9 @@
 
 //! Implementation for Fuchsia Zircon
 
-extern crate fuchsia_zircon;
+extern crate fuchsia_cprng;
 
-use rand_core::{Error, ErrorKind};
+use rand_core::Error;
 use super::OsRngImpl;
 
 #[derive(Clone, Debug)]
@@ -20,24 +20,9 @@
     fn new() -> Result<OsRng, Error> { Ok(OsRng) }
 
     fn fill_chunk(&mut self, dest: &mut [u8]) -> Result<(), Error> {
-        let mut read = 0;
-        while read < dest.len() {
-            match fuchsia_zircon::cprng_draw(&mut dest[read..]) {
-                Ok(actual) => read += actual,
-                Err(e) => {
-                    return Err(Error::with_cause(
-                        ErrorKind::Unavailable,
-                        "cprng_draw failed",
-                        e.into_io_error()));
-                }
-            };
-        }
+        fuchsia_cprng::cprng_draw(dest);
         Ok(())
     }
 
-    fn max_chunk_size(&self) -> usize {
-        fuchsia_zircon::sys::ZX_CPRNG_DRAW_MAX_LEN
-    }
-
     fn method_str(&self) -> &'static str { "cprng_draw" }
 }
diff --git a/rustc_deps/vendor/rand_os/src/lib.rs b/rustc_deps/vendor/rand_os/src/lib.rs
index 979392a..907c629 100644
--- a/rustc_deps/vendor/rand_os/src/lib.rs
+++ b/rustc_deps/vendor/rand_os/src/lib.rs
@@ -9,7 +9,7 @@
 
 //! Interface to the random number generator of the operating system.
 //!
-//! `OsRng` is the preferred external source of entropy for most applications.
+//! [`OsRng`] is the preferred external source of entropy for most applications.
 //! Commonly it is used to initialize a user-space RNG, which can then be used
 //! to generate random values with much less overhead than `OsRng`.
 //!
@@ -17,7 +17,7 @@
 //! not entirely theoretical, for `OsRng` to fail. In such cases [`EntropyRng`]
 //! falls back on a good alternative entropy source.
 //!
-//! `OsRng::new()` is guaranteed to be very cheap (after the first successful
+//! [`OsRng::new()`] is guaranteed to be very cheap (after the first successful
 //! call), and will never consume more than one file handle per process.
 //!
 //! # Usage example
@@ -100,9 +100,8 @@
 //! but must eventually panic if the error persists.
 //!
 //! [`EntropyRng`]: ../rand/rngs/struct.EntropyRng.html
-//! [`RngCore`]: ../rand_core/trait.RngCore.html
-//! [`try_fill_bytes`]: ../rand_core/trait.RngCore.html#method.tymethod.try_fill_bytes
-//! [`ErrorKind::NotReady`]: ../rand_core/enum.ErrorKind.html#variant.NotReady
+//! [`try_fill_bytes`]: RngCore::try_fill_bytes
+//! [`ErrorKind::NotReady`]: rand_core::ErrorKind
 //!
 //! [1]: http://man7.org/linux/man-pages/man2/getrandom.2.html
 //! [2]: http://man7.org/linux/man-pages/man4/urandom.4.html
@@ -126,8 +125,8 @@
 #![deny(missing_docs)]
 #![deny(missing_debug_implementations)]
 #![doc(test(attr(allow(unused_variables), deny(warnings))))]
-// for stdweb
-#![recursion_limit="128"]
+
+#![cfg_attr(feature = "stdweb", recursion_limit="128")]
 
 pub extern crate rand_core;
 #[cfg(feature = "log")]
@@ -142,6 +141,8 @@
           feature = "stdweb"))]
 #[macro_use] extern crate stdweb;
 
+#[cfg(target_env = "sgx")]
+extern crate rdrand;
 
 #[cfg(not(feature = "log"))]
 #[macro_use]
@@ -310,6 +311,7 @@
 mod_use!(cfg(target_os = "redox"), redox);
 mod_use!(cfg(target_os = "solaris"), solaris);
 mod_use!(cfg(windows), windows);
+mod_use!(cfg(target_env = "sgx"), sgx);
 
 mod_use!(
     cfg(all(
@@ -330,13 +332,33 @@
     wasm32_stdweb
 );
 
+/// Per #678 we use run-time failure where WASM bindings are missing
 #[cfg(all(
     target_arch = "wasm32",
     not(target_os = "emscripten"),
     not(feature = "wasm-bindgen"),
     not(feature = "stdweb"),
 ))]
-compile_error!("enable either wasm_bindgen or stdweb feature");
+mod imp {
+    use rand_core::{Error, ErrorKind};
+    use super::OsRngImpl;
+    
+    #[derive(Clone, Debug)]
+    pub struct OsRng;
+
+    impl OsRngImpl for OsRng {
+        fn new() -> Result<OsRng, Error> {
+            Err(Error::new(ErrorKind::Unavailable,
+                "OsRng: support for wasm32 requires emscripten, stdweb or wasm-bindgen"))
+        }
+
+        fn fill_chunk(&mut self, _dest: &mut [u8]) -> Result<(), Error> {
+            unimplemented!()
+        }
+
+        fn method_str(&self) -> &'static str { unimplemented!() }
+    }
+}
 
 #[cfg(not(any(
     target_os = "android",
@@ -356,5 +378,61 @@
     target_os = "solaris",
     windows,
     target_arch = "wasm32",
+    target_env = "sgx"
 )))]
 compile_error!("OS RNG support is not available for this platform");
+
+// Due to rustwasm/wasm-bindgen#201 this can't be defined in the inner os
+// modules, so hack around it for now and place it at the root.
+#[cfg(all(feature = "wasm-bindgen", target_arch = "wasm32"))]
+#[doc(hidden)]
+#[allow(missing_debug_implementations)]
+pub mod __wbg_shims {
+
+    // `extern { type Foo; }` isn't supported on 1.22 syntactically, so use a
+    // macro to work around that.
+    macro_rules! rust_122_compat {
+        ($($t:tt)*) => ($($t)*)
+    }
+
+    rust_122_compat! {
+        extern crate wasm_bindgen;
+
+        pub use wasm_bindgen::prelude::*;
+
+        #[wasm_bindgen]
+        extern "C" {
+            pub type Function;
+            #[wasm_bindgen(constructor)]
+            pub fn new(s: &str) -> Function;
+            #[wasm_bindgen(method)]
+            pub fn call(this: &Function, self_: &JsValue) -> JsValue;
+
+            pub type This;
+            #[wasm_bindgen(method, getter, structural, js_name = self)]
+            pub fn self_(me: &This) -> JsValue;
+            #[wasm_bindgen(method, getter, structural)]
+            pub fn crypto(me: &This) -> JsValue;
+
+            #[derive(Clone, Debug)]
+            pub type BrowserCrypto;
+
+            // TODO: these `structural` annotations here ideally wouldn't be here to
+            // avoid a JS shim, but for now with feature detection they're
+            // unavoidable.
+            #[wasm_bindgen(method, js_name = getRandomValues, structural, getter)]
+            pub fn get_random_values_fn(me: &BrowserCrypto) -> JsValue;
+            #[wasm_bindgen(method, js_name = getRandomValues, structural)]
+            pub fn get_random_values(me: &BrowserCrypto, buf: &mut [u8]);
+
+            #[wasm_bindgen(js_name = require)]
+            pub fn node_require(s: &str) -> NodeCrypto;
+
+            #[derive(Clone, Debug)]
+            pub type NodeCrypto;
+
+            #[wasm_bindgen(method, js_name = randomFillSync, structural)]
+            pub fn random_fill_sync(me: &NodeCrypto, buf: &mut [u8]);
+        }
+    }
+}
diff --git a/rustc_deps/vendor/rand_os/src/sgx.rs b/rustc_deps/vendor/rand_os/src/sgx.rs
new file mode 100644
index 0000000..43ae0ef
--- /dev/null
+++ b/rustc_deps/vendor/rand_os/src/sgx.rs
@@ -0,0 +1,38 @@
+// Copyright 2018 Developers of the Rand project.
+//
+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+// https://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or https://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+use super::OsRngImpl;
+use Error;
+use rdrand::RdRand;
+use rand_core::RngCore;
+use std::fmt::{Debug, Formatter, Result as FmtResult};
+
+#[derive(Clone)]
+pub struct OsRng{
+    gen: RdRand
+}
+
+impl OsRngImpl for OsRng {
+    fn new() -> Result<OsRng, Error> {
+        let rng = RdRand::new()?;
+        Ok(OsRng{ gen: rng })
+    }
+
+    fn fill_chunk(&mut self, dest: &mut [u8]) -> Result<(), Error> {
+        self.gen.try_fill_bytes(dest)
+    }
+
+    fn method_str(&self) -> &'static str { "RDRAND" }
+}
+
+impl Debug for OsRng {
+    fn fmt(&self, f: &mut Formatter) -> FmtResult {
+        f.debug_struct("OsRng")
+            .finish()
+    }
+}
diff --git a/rustc_deps/vendor/rand_os/src/wasm32_bindgen.rs b/rustc_deps/vendor/rand_os/src/wasm32_bindgen.rs
index 8e7c979..5ab2d84 100644
--- a/rustc_deps/vendor/rand_os/src/wasm32_bindgen.rs
+++ b/rustc_deps/vendor/rand_os/src/wasm32_bindgen.rs
@@ -10,43 +10,10 @@
 
 use rand_core::{Error, ErrorKind};
 use super::OsRngImpl;
+use super::__wbg_shims::*;
 
 use wasm_bindgen::prelude::*;
 
-#[wasm_bindgen]
-extern "C" {
-    pub type Function;
-    #[wasm_bindgen(constructor)]
-    pub fn new(s: &str) -> Function;
-    #[wasm_bindgen(method)]
-    pub fn call(this: &Function, self_: &JsValue) -> JsValue;
-
-    pub type This;
-    #[wasm_bindgen(method, getter, structural, js_name = self)]
-    pub fn self_(me: &This) -> JsValue;
-    #[wasm_bindgen(method, getter, structural)]
-    pub fn crypto(me: &This) -> JsValue;
-
-    #[derive(Clone, Debug)]
-    pub type BrowserCrypto;
-
-    // TODO: these `structural` annotations here ideally wouldn't be here to
-    // avoid a JS shim, but for now with feature detection they're
-    // unavoidable.
-    #[wasm_bindgen(method, js_name = getRandomValues, structural, getter)]
-    pub fn get_random_values_fn(me: &BrowserCrypto) -> JsValue;
-    #[wasm_bindgen(method, js_name = getRandomValues, structural)]
-    pub fn get_random_values(me: &BrowserCrypto, buf: &mut [u8]);
-
-    #[wasm_bindgen(js_name = require)]
-    pub fn node_require(s: &str) -> NodeCrypto;
-
-    #[derive(Clone, Debug)]
-    pub type NodeCrypto;
-
-    #[wasm_bindgen(method, js_name = randomFillSync, structural)]
-    pub fn random_fill_sync(me: &NodeCrypto, buf: &mut [u8]);
-}
 
 #[derive(Clone, Debug)]
 pub enum OsRng {
diff --git a/rustc_deps/vendor/rdrand/.cargo-checksum.json b/rustc_deps/vendor/rdrand/.cargo-checksum.json
new file mode 100644
index 0000000..c7b5a11
--- /dev/null
+++ b/rustc_deps/vendor/rdrand/.cargo-checksum.json
@@ -0,0 +1 @@
+{"files":{"Cargo.toml":"f11ed31fc1b481c7d0e24251d7d60d34442f1d25747c887c49dc9fbad7e13e59","LICENSE":"00d7b0c8bf95ea93162fccc84da96b906b15add708eade04f7ee6141f7b53141","README.mkd":"93853e9e773543ed0d0cf696b5fb151b15bddc1ad9c39996c9eb11b20a3c7ff6","appveyor.yml":"f502d8a0755b98e904a40b07e8ba270bccd729045b03c24a7db0dfbb4047b515","benches/rdrand.rs":"f3684c360d43bc8a780868c0a3af43b20d56975e03575122cee87277787cc8d0","benches/rdseed.rs":"520097b15a3f11c0c6a357e6cd23add598be22f37839bbc71040b827b05d1064","benches/std.rs":"6a5b52b070b2a594e735aa617f16fc6a861e64534634cdb61801c3297444f6fe","src/changelog.rs":"644e08c06836ecdf94f9a43aec109e9f05f9d85f00541683c72d0d3893ff8d6a","src/lib.rs":"8fc306db8a304d24c28fcefaec1849c0d8bbca97417420af7b81449c352b2e92"},"package":"678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2"}
\ No newline at end of file
diff --git a/rustc_deps/vendor/rdrand/Cargo.toml b/rustc_deps/vendor/rdrand/Cargo.toml
new file mode 100644
index 0000000..6b3c80a
--- /dev/null
+++ b/rustc_deps/vendor/rdrand/Cargo.toml
@@ -0,0 +1,28 @@
+# THIS FILE IS AUTOMATICALLY GENERATED BY CARGO
+#
+# When uploading crates to the registry Cargo will automatically
+# "normalize" Cargo.toml files for maximal compatibility
+# with all versions of Cargo and also rewrite `path` dependencies
+# to registry (e.g. crates.io) dependencies
+#
+# If you believe there's an error in this file please file an
+# issue against the rust-lang/cargo repository. If you're
+# editing this file be aware that the upstream Cargo.toml
+# will likely look very different (and much more reasonable)
+
+[package]
+name = "rdrand"
+version = "0.4.0"
+authors = ["Simonas Kazlauskas <rdrand@kazlauskas.me>"]
+description = "An implementation of random number generator based on rdrand and rdseed instructions"
+documentation = "https://docs.rs/rdrand/0.4.0/"
+keywords = ["rand", "rdrand", "rdseed", "random"]
+license = "ISC"
+repository = "https://github.com/nagisa/rust_rdrand/"
+[dependencies.rand_core]
+version = "0.3"
+default-features = false
+
+[features]
+default = ["std"]
+std = []
diff --git a/rustc_deps/vendor/rdrand/LICENSE b/rustc_deps/vendor/rdrand/LICENSE
new file mode 100644
index 0000000..4d6f40d
--- /dev/null
+++ b/rustc_deps/vendor/rdrand/LICENSE
@@ -0,0 +1,12 @@
+Copyright © 2014, Simonas Kazlauskas
+
+Permission to use, copy, modify, and/or distribute this software for any purpose with or without
+fee is hereby granted, provided that the above copyright notice and this permission notice appear
+in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
+SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
+AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
+NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
+THIS SOFTWARE.
diff --git a/rustc_deps/vendor/rdrand/README.mkd b/rustc_deps/vendor/rdrand/README.mkd
new file mode 100644
index 0000000..55ab48b
--- /dev/null
+++ b/rustc_deps/vendor/rdrand/README.mkd
@@ -0,0 +1,8 @@
+An implementation of random number generators based on `rdrand` and `rdseed` instructions.
+
+The random number generators provided by this crate are fairly slow (the latency for these
+instructions is pretty high), but provide high quality random bits. Caveat is: neither AMD’s
+nor Intel’s designs are public and therefore are not verifiable for lack of backdoors.
+
+Unless you know what you are doing, use the random number generators provided by the `rand`
+crate (such as `EntropyRng`) instead.
diff --git a/rustc_deps/vendor/rdrand/appveyor.yml b/rustc_deps/vendor/rdrand/appveyor.yml
new file mode 100644
index 0000000..2e915cf
--- /dev/null
+++ b/rustc_deps/vendor/rdrand/appveyor.yml
@@ -0,0 +1,27 @@
+environment:
+  matrix:
+  - TARGET: 1.30.0-x86_64-pc-windows-msvc
+  - TARGET: 1.30.0-i686-pc-windows-msvc
+  - TARGET: 1.30.0-x86_64-pc-windows-gnu
+  - TARGET: 1.30.0-i686-pc-windows-gnu
+  - TARGET: nightly-x86_64-pc-windows-msvc
+  - TARGET: nightly-i686-pc-windows-msvc
+install:
+  - ps: Start-FileDownload "https://static.rust-lang.org/dist/rust-${env:TARGET}.exe" -FileName "rust.exe"
+  - ps: .\rust.exe /VERYSILENT /NORESTART /DIR="C:\rust" | Out-Null
+  - ps: $env:PATH="$env:PATH;C:\rust\bin"
+  - rustc -vV
+  - cargo -vV
+build: off
+
+test_script:
+- cargo test
+- cargo test --no-default-features
+
+for:
+- matrix:
+    only:
+      - TARGET: nightly-x86_64-pc-windows-msvc
+      - TARGET: nightly-i686-pc-windows-msvc
+  test_script:
+    - cargo bench
diff --git a/rustc_deps/vendor/rdrand/benches/rdrand.rs b/rustc_deps/vendor/rdrand/benches/rdrand.rs
new file mode 100644
index 0000000..7e70c23
--- /dev/null
+++ b/rustc_deps/vendor/rdrand/benches/rdrand.rs
@@ -0,0 +1,49 @@
+#![feature(test)]
+extern crate rand_core;
+extern crate rdrand;
+extern crate test;
+
+use rand_core::RngCore;
+use test::Bencher;
+
+#[bench]
+fn bench_u16(b : &mut Bencher) {
+    if let Ok(gen) = rdrand::RdRand::new() {
+        b.bytes = 2;
+        b.iter(|| {
+            gen.try_next_u16().unwrap()
+        });
+    }
+}
+
+#[bench]
+fn bench_u32(b : &mut Bencher) {
+    if let Ok(mut gen) = rdrand::RdRand::new() {
+        b.bytes = 4;
+        b.iter(|| {
+            gen.next_u32()
+        });
+    }
+}
+
+#[bench]
+fn bench_u64(b : &mut Bencher) {
+    if let Ok(mut gen) = rdrand::RdRand::new() {
+        b.bytes = 8;
+        b.iter(|| {
+            gen.next_u64()
+        });
+    }
+}
+
+#[bench]
+fn bench_fill(b : &mut Bencher) {
+    if let Ok(mut gen) = rdrand::RdRand::new() {
+        let mut buffer = [0; 128];
+        b.bytes = 128;
+        b.iter(|| {
+            gen.fill_bytes(&mut buffer);
+            buffer
+        });
+    }
+}
diff --git a/rustc_deps/vendor/rdrand/benches/rdseed.rs b/rustc_deps/vendor/rdrand/benches/rdseed.rs
new file mode 100644
index 0000000..6bf8ceb
--- /dev/null
+++ b/rustc_deps/vendor/rdrand/benches/rdseed.rs
@@ -0,0 +1,49 @@
+#![feature(test)]
+extern crate rand_core;
+extern crate rdrand;
+extern crate test;
+
+use rand_core::RngCore;
+use test::Bencher;
+
+#[bench]
+fn bench_rdseed_u16(b : &mut Bencher) {
+    if let Ok(gen) = rdrand::RdSeed::new() {
+        b.bytes = 2;
+        b.iter(|| {
+            gen.try_next_u16().unwrap()
+        });
+    }
+}
+
+#[bench]
+fn bench_rdseed_u32(b : &mut Bencher) {
+    if let Ok(mut gen) = rdrand::RdSeed::new() {
+        b.bytes = 4;
+        b.iter(|| {
+            gen.next_u32()
+        });
+    }
+}
+
+#[bench]
+fn bench_rdseed_u64(b : &mut Bencher) {
+    if let Ok(mut gen) = rdrand::RdSeed::new() {
+        b.bytes = 8;
+        b.iter(|| {
+            gen.next_u64()
+        });
+    }
+}
+
+#[bench]
+fn bench_fill(b : &mut Bencher) {
+    if let Ok(mut gen) = rdrand::RdSeed::new() {
+        let mut buffer = [0; 128];
+        b.bytes = 128;
+        b.iter(|| {
+            gen.fill_bytes(&mut buffer);
+            buffer
+        });
+    }
+}
diff --git a/rustc_deps/vendor/rdrand/benches/std.rs b/rustc_deps/vendor/rdrand/benches/std.rs
new file mode 100644
index 0000000..3fa8fad
--- /dev/null
+++ b/rustc_deps/vendor/rdrand/benches/std.rs
@@ -0,0 +1,31 @@
+// #![feature(test)]
+// extern crate rand;
+// extern crate test;
+//
+// use test::Bencher;
+// use test::black_box;
+// use rand::Rng;
+// use rand::StdRng;
+// use rand::OsRng;
+//
+// // OsRng is supposed to be the default for crypto uses.
+// #[bench]
+// fn bench_osrng_u64(b : &mut Bencher) {
+//     if let Ok(mut gen) = OsRng::new() {
+//         b.bytes = 8;
+//         b.iter(|| {
+//             black_box(gen.next_u64());
+//         });
+//     }
+// }
+//
+// // StdRng is the default for everything else.
+// #[bench]
+// fn bench_stdrng_u64(b : &mut Bencher) {
+//     if let Ok(mut gen) = StdRng::new() {
+//         b.bytes = 8;
+//         b.iter(|| {
+//             gen.next_u64();
+//         });
+//     }
+// }
diff --git a/rustc_deps/vendor/rdrand/src/changelog.rs b/rustc_deps/vendor/rdrand/src/changelog.rs
new file mode 100644
index 0000000..503f738
--- /dev/null
+++ b/rustc_deps/vendor/rdrand/src/changelog.rs
@@ -0,0 +1,25 @@
+//! Project changelog
+
+/// ## Breaking changes
+///
+/// Crate gained an enabled-by-default `std` feature. If you relied on rdrand being `core`-able
+/// change your dependency to appear as such:
+///
+/// ```toml
+/// rdrand = { version = "0.4", default-features = false }
+/// ```
+///
+/// This is done so that an advantage of the common feature detection functionality could be
+/// employed by users that are not constrained by `core`. This functionality is faster, caches the
+/// results and is shared between all users of the functionality.
+///
+/// For `core` usage the feature detection has also been improved and will not be done if e.g.
+/// crate is built with `rdrand` instructions enabled globally.
+pub mod r0_4_0 {}
+
+/// Crate now works on stable!
+///
+/// ## Breaking changes
+///
+/// * Updated to `rand_core = ^0.3`.
+pub mod r0_3_0 {}
diff --git a/rustc_deps/vendor/rdrand/src/lib.rs b/rustc_deps/vendor/rdrand/src/lib.rs
new file mode 100644
index 0000000..423ae21
--- /dev/null
+++ b/rustc_deps/vendor/rdrand/src/lib.rs
@@ -0,0 +1,472 @@
+// Copyright © 2014, Simonas Kazlauskas <rdrand@kazlauskas.me>
+//
+// Permission to use, copy, modify, and/or distribute this software for any purpose with or without
+// fee is hereby granted, provided that the above copyright notice and this permission notice
+// appear in all copies.
+//
+// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
+// SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
+// AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
+// NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+// OF THIS SOFTWARE.
+//! An implementation of random number generators based on `rdrand` and `rdseed` instructions.
+//!
+//! The random number generators provided by this crate are fairly slow (the latency for these
+//! instructions is pretty high), but provide high quality random bits. Caveat is: neither AMD’s
+//! nor Intel’s designs are public and therefore are not verifiable for lack of backdoors.
+//!
+//! Unless you know what you are doing, use the random number generators provided by the `rand`
+//! crate (such as `OsRng`) instead.
+//!
+//! Here are a measurements for select processor architectures. Check [Agner’s instruction tables]
+//! for up-to-date listings.
+//!
+//! <table>
+//!   <tr>
+//!     <th>Architecture</th>
+//!     <th colspan="3">Latency (cycles)</th>
+//!     <th>Maximum throughput (per core)</th>
+//!   </tr>
+//!   <tr>
+//!     <td></td>
+//!     <td>u16</td>
+//!     <td>u32</td>
+//!     <td>u64</td>
+//!     <td></td>
+//!   </tr>
+//!   <tr>
+//!     <td>AMD Ryzen</td>
+//!     <td>~1200</td>
+//!     <td>~1200</td>
+//!     <td>~2500</td>
+//!     <td>~12MB/s @ 3.7GHz</td>
+//!   </tr>
+//!   <tr>
+//!     <td>Intel Skylake</td>
+//!     <td>460</td>
+//!     <td>460</td>
+//!     <td>460</td>
+//!     <td>~72MB/s @ 4.2GHz</td>
+//!   </tr>
+//!   <tr>
+//!     <td>Intel Haswell</td>
+//!     <td>320</td>
+//!     <td>320</td>
+//!     <td>320</td>
+//!     <td>~110MB/s @ 4.4GHz</td>
+//!   </tr>
+//! </table>
+//!
+//! [Agner’s instruction tables]: http://agner.org/optimize/
+#![cfg_attr(not(feature = "std"), no_std)]
+
+extern crate rand_core;
+
+#[cfg(feature = "std")]
+extern crate core;
+
+pub mod changelog;
+
+use rand_core::{RngCore, CryptoRng, Error, ErrorKind};
+use core::slice;
+
+const RETRY_LIMIT: u8 = 127;
+
+#[cold]
+#[inline(never)]
+pub(crate) fn busy_loop_fail() -> ! {
+    panic!("hardware generator failure");
+}
+
+/// A cryptographically secure statistically uniform, non-periodic and non-deterministic random bit
+/// generator.
+///
+/// Note that this generator may be implemented using a deterministic algorithm that is reseeded
+/// routinely from a non-deterministic entropy source to achieve the desirable properties.
+///
+/// This generator is a viable replacement to any generator, however, since nobody has audited
+/// Intel or AMD hardware yet, the usual disclaimers as to their suitability apply.
+///
+/// It is potentially faster than `OsRng`, but is only supported on more recent Intel (Ivy Bridge
+/// and later) and AMD (Ryzen and later) processors.
+#[derive(Clone, Copy)]
+pub struct RdRand(());
+
+/// A cryptographically secure non-deterministic random bit generator.
+///
+/// This generator produces high-entropy output and is suited to seed other pseudo-random
+/// generators.
+///
+/// This instruction currently is only available in Intel Broadwell (and later) and AMD Ryzen
+/// processors.
+///
+/// This generator is not intended for general random number generation purposes and should be used
+/// to seed other generators implementing [rand_core::SeedableRng].
+#[derive(Clone, Copy)]
+pub struct RdSeed(());
+
+impl CryptoRng for RdRand {}
+impl CryptoRng for RdSeed {}
+
+mod arch {
+    #[cfg(target_arch = "x86_64")]
+    pub use core::arch::x86_64::*;
+    #[cfg(target_arch = "x86")]
+    pub use core::arch::x86::*;
+
+    #[cfg(target_arch = "x86")]
+    pub(crate) unsafe fn _rdrand64_step(dest: &mut u64) -> i32 {
+        let mut ret1: u32 = ::core::mem::uninitialized();
+        let mut ret2: u32 = ::core::mem::uninitialized();
+        if _rdrand32_step(&mut ret1) != 0 && _rdrand32_step(&mut ret2) != 0 {
+            *dest = (ret1 as u64) << 32 | (ret2 as u64);
+            1
+        } else {
+            0
+        }
+    }
+
+    #[cfg(target_arch = "x86")]
+    pub(crate) unsafe fn _rdseed64_step(dest: &mut u64) -> i32 {
+        let mut ret1: u32 = ::core::mem::uninitialized();
+        let mut ret2: u32 = ::core::mem::uninitialized();
+        if _rdseed32_step(&mut ret1) != 0 && _rdseed32_step(&mut ret2) != 0 {
+            *dest = (ret1 as u64) << 32 | (ret2 as u64);
+            1
+        } else {
+            0
+        }
+    }
+}
+
+#[cfg(not(feature = "std"))]
+macro_rules! is_x86_feature_detected {
+    ("rdrand") => {{
+        if cfg!(target_feature="rdrand") {
+            true
+        } else if cfg!(target_env = "sgx") {
+            false
+        } else {
+            const FLAG : u32 = 1 << 30;
+            unsafe { ::arch::__cpuid(1).ecx & FLAG == FLAG }
+        }
+    }};
+    ("rdseed") => {{
+        if cfg!(target_feature = "rdseed") {
+            true
+        } else if cfg!(target_env = "sgx") {
+            false
+        } else {
+            const FLAG : u32 = 1 << 18;
+            unsafe { ::arch::__cpuid(7).ebx & FLAG == FLAG }
+        }
+    }};
+}
+
+macro_rules! loop_rand {
+    ($el: ty, $step: path) => { {
+        let mut idx = 0;
+        loop {
+            let mut el: $el = ::core::mem::uninitialized();
+            if $step(&mut el) != 0 {
+                break Some(el);
+            } else if idx == RETRY_LIMIT {
+                break None;
+            }
+            idx += 1;
+        }
+    } }
+}
+
+macro_rules! impl_rand {
+    ($gen:ident, $feat:tt, $step16: path, $step32:path, $step64:path,
+     maxstep = $maxstep:path, maxty = $maxty: ty) => {
+        impl $gen {
+            /// Create a new instance of the random number generator.
+            ///
+            /// This constructor checks whether the CPU the program is running on supports the
+            /// instruction necessary for this generator to operate. If the instruction is not
+            /// supported, an error is returned.
+            pub fn new() -> Result<Self, Error> {
+                if is_x86_feature_detected!($feat) {
+                    Ok($gen(()))
+                } else {
+                    Err(Error::new(rand_core::ErrorKind::Unavailable,
+                                   "the instruction is not supported"))
+                }
+            }
+
+            /// Generate a single random `u16` value.
+            ///
+            /// The underlying instruction may fail for variety reasons (such as actual hardware
+            /// failure or exhausted entropy), however the exact reason for the failure is not
+            /// usually exposed.
+            ///
+            /// This method will retry calling the instruction a few times, however if all the
+            /// attempts fail, it will return `None`.
+            ///
+            /// In case `None` is returned, the caller should assume that an non-recoverable
+            /// hardware failure has occured and use another random number genrator instead.
+            #[inline(always)]
+            pub fn try_next_u16(&self) -> Option<u16> {
+                #[target_feature(enable = $feat)]
+                unsafe fn imp()
+                -> Option<u16> {
+                    loop_rand!(u16, $step16)
+                }
+                unsafe { imp() }
+            }
+
+            /// Generate a single random `u32` value.
+            ///
+            /// The underlying instruction may fail for variety reasons (such as actual hardware
+            /// failure or exhausted entropy), however the exact reason for the failure is not
+            /// usually exposed.
+            ///
+            /// This method will retry calling the instruction a few times, however if all the
+            /// attempts fail, it will return `None`.
+            ///
+            /// In case `None` is returned, the caller should assume that an non-recoverable
+            /// hardware failure has occured and use another random number genrator instead.
+            #[inline(always)]
+            pub fn try_next_u32(&self) -> Option<u32> {
+                #[target_feature(enable = $feat)]
+                unsafe fn imp()
+                -> Option<u32> {
+                    loop_rand!(u32, $step32)
+                }
+                unsafe { imp() }
+            }
+
+            /// Generate a single random `u64` value.
+            ///
+            /// The underlying instruction may fail for variety reasons (such as actual hardware
+            /// failure or exhausted entropy), however the exact reason for the failure is not
+            /// usually exposed.
+            ///
+            /// This method will retry calling the instruction a few times, however if all the
+            /// attempts fail, it will return `None`.
+            ///
+            /// In case `None` is returned, the caller should assume that an non-recoverable
+            /// hardware failure has occured and use another random number genrator instead.
+            ///
+            /// Note, that on 32-bit targets, there’s no underlying instruction to generate a
+            /// 64-bit number, so it is emulated with the 32-bit version of the instruction.
+            #[inline(always)]
+            pub fn try_next_u64(&self) -> Option<u64> {
+                #[target_feature(enable = $feat)]
+                unsafe fn imp()
+                -> Option<u64> {
+                    loop_rand!(u64, $step64)
+                }
+                unsafe { imp() }
+            }
+        }
+
+        impl RngCore for $gen {
+            /// Generate a single random `u32` value.
+            ///
+            /// The underlying instruction may fail for variety reasons (such as actual hardware
+            /// failure or exhausted entropy), however the exact reason for the failure is not
+            /// usually exposed.
+            ///
+            /// # Panic
+            ///
+            /// This method will retry calling the instruction a few times, however if all the
+            /// attempts fail, it will `panic`.
+            ///
+            /// In case `panic` occurs, the caller should assume that an non-recoverable
+            /// hardware failure has occured and use another random number genrator instead.
+            #[inline(always)]
+            fn next_u32(&mut self) -> u32 {
+                if let Some(result) = self.try_next_u32() {
+                    result
+                } else {
+                    busy_loop_fail()
+                }
+            }
+
+            /// Generate a single random `u64` value.
+            ///
+            /// The underlying instruction may fail for variety reasons (such as actual hardware
+            /// failure or exhausted entropy), however the exact reason for the failure is not
+            /// usually exposed.
+            ///
+            /// Note, that on 32-bit targets, there’s no underlying instruction to generate a
+            /// 64-bit number, so it is emulated with the 32-bit version of the instruction.
+            ///
+            /// # Panic
+            ///
+            /// This method will retry calling the instruction a few times, however if all the
+            /// attempts fail, it will `panic`.
+            ///
+            /// In case `panic` occurs, the caller should assume that an non-recoverable
+            /// hardware failure has occured and use another random number genrator instead.
+            #[inline(always)]
+            fn next_u64(&mut self) -> u64 {
+                if let Some(result) = self.try_next_u64() {
+                    result
+                } else {
+                    busy_loop_fail()
+                }
+            }
+
+            /// Fill a buffer `dest` with random data.
+            ///
+            /// See `try_fill_bytes` for a more extensive documentation.
+            ///
+            /// # Panic
+            ///
+            /// This method will panic any time `try_fill_bytes` would return an error.
+            #[inline(always)]
+            fn fill_bytes(&mut self, dest: &mut [u8]) {
+                if let Err(_) = self.try_fill_bytes(dest) {
+                    busy_loop_fail()
+                }
+            }
+
+            /// Fill a buffer `dest` with random data.
+            ///
+            /// This method will use the most appropriate variant of the instruction available on
+            /// the machine to achieve the greatest single-core throughput, however it has a
+            /// slightly higher setup cost than the plain `next_u32` or `next_u64` methods.
+            ///
+            /// The underlying instruction may fail for variety reasons (such as actual hardware
+            /// failure or exhausted entropy), however the exact reason for the failure is not
+            /// usually exposed.
+            ///
+            /// This method will retry calling the instruction a few times, however if all the
+            /// attempts fail, it will return an error.
+            ///
+            /// If an error is returned, the caller should assume that an non-recoverable hardware
+            /// failure has occured and use another random number genrator instead.
+            #[inline(always)]
+            fn try_fill_bytes(&mut self, dest: &mut [u8])
+            -> Result<(), Error> {
+                #[target_feature(enable = $feat)]
+                unsafe fn imp(dest: &mut [u8])
+                -> Result<(), Error>
+                {
+                    unsafe fn imp_less_fast(mut dest: &mut [u8], word: &mut $maxty,
+                                            buffer: &mut &[u8])
+                    -> Result<(), Error>
+                    {
+                        while !dest.is_empty() {
+                            if buffer.is_empty() {
+                                if let Some(w) = loop_rand!($maxty, $maxstep) {
+                                    *word = w;
+                                    *buffer = slice::from_raw_parts(
+                                        word as *const _ as *const u8,
+                                        ::core::mem::size_of::<$maxty>()
+                                    );
+                                } else {
+                                    return Err(Error::new(ErrorKind::Unexpected,
+                                                          "hardware generator failure"));
+                                }
+                            }
+
+                            let len = dest.len().min(buffer.len());
+                            let (copy_src, leftover) = buffer.split_at(len);
+                            let (copy_dest, dest_leftover) = { dest }.split_at_mut(len);
+                            *buffer = leftover;
+                            dest = dest_leftover;
+                            ::core::ptr::copy_nonoverlapping(
+                                copy_src.as_ptr(), copy_dest.as_mut_ptr(), len
+                            );
+                        }
+                        Ok(())
+                    }
+
+                    let destlen = dest.len();
+                    if destlen > ::core::mem::size_of::<$maxty>() {
+                            let (left, mid, right) = dest.align_to_mut();
+                            let mut word = 0;
+                            let mut buffer: &[u8] = &[];
+
+                            for el in mid {
+                                if let Some(val) = loop_rand!($maxty, $maxstep) {
+                                    *el = val;
+                                } else {
+                                    return Err(Error::new(ErrorKind::Unexpected,
+                                                          "hardware generator failure"));
+                                }
+                            }
+
+                            imp_less_fast(left, &mut word, &mut buffer)?;
+                            imp_less_fast(right, &mut word, &mut buffer)
+                    } else {
+                        let mut word = 0;
+                        let mut buffer: &[u8] = &[];
+                        imp_less_fast(dest, &mut word, &mut buffer)
+                    }
+                }
+                unsafe { imp(dest) }
+            }
+        }
+    }
+}
+
+#[cfg(target_arch = "x86_64")]
+impl_rand!(RdRand, "rdrand",
+           ::arch::_rdrand16_step, ::arch::_rdrand32_step, ::arch::_rdrand64_step,
+           maxstep = ::arch::_rdrand64_step, maxty = u64);
+#[cfg(target_arch = "x86_64")]
+impl_rand!(RdSeed, "rdseed",
+           ::arch::_rdseed16_step, ::arch::_rdseed32_step, ::arch::_rdseed64_step,
+           maxstep = ::arch::_rdseed64_step, maxty = u64);
+#[cfg(target_arch = "x86")]
+impl_rand!(RdRand, "rdrand",
+           ::arch::_rdrand16_step, ::arch::_rdrand32_step, ::arch::_rdrand64_step,
+           maxstep = ::arch::_rdrand32_step, maxty = u32);
+#[cfg(target_arch = "x86")]
+impl_rand!(RdSeed, "rdseed",
+           ::arch::_rdseed16_step, ::arch::_rdseed32_step, ::arch::_rdseed64_step,
+           maxstep = ::arch::_rdseed32_step, maxty = u32);
+
+#[test]
+fn rdrand_works() {
+    let _ = RdRand::new().map(|mut r| {
+        r.next_u32();
+        r.next_u64();
+    });
+}
+
+#[test]
+fn fill_fills_all_bytes() {
+    let _ = RdRand::new().map(|mut r| {
+        let mut peach;
+        let mut banana;
+        let mut start = 0;
+        let mut end = 128;
+        'outer: while start < end {
+            banana = [0; 128];
+            for _ in 0..512 {
+                peach = [0; 128];
+                r.fill_bytes(&mut peach[start..end]);
+                for (b, p) in banana.iter_mut().zip(peach.iter()) {
+                    *b = *b | *p;
+                }
+                if (&banana[start..end]).iter().all(|x| *x != 0) {
+                    assert!(banana[..start].iter().all(|x| *x == 0), "all other values must be 0");
+                    assert!(banana[end..].iter().all(|x| *x == 0), "all other values must be 0");
+                    if start < 17 {
+                        start += 1;
+                    } else {
+                        end -= 3;
+                    }
+                    continue 'outer;
+                }
+            }
+            panic!("wow, we broke it? {} {} {:?}", start, end, &banana[..])
+        }
+    });
+}
+
+#[test]
+fn rdseed_works() {
+    let _ = RdSeed::new().map(|mut r| {
+        r.next_u32();
+        r.next_u64();
+    });
+}