From 660c747c51ce721e7e8183a4b82ddcb3f57eacef Mon Sep 17 00:00:00 2001 From: Hero Bird Date: Tue, 6 Nov 2018 15:39:55 +0100 Subject: [PATCH] Update fixed-hash & uint utilities (#1078) * [core/primitives] Update crunchy 0.1 => 0.2 * [core/primitives] Update fixed-hash 0.2 => 0.3.0-beta * [core/primitives] Update `uint` 0.4 => 0.5.0-beta * [core/state-machine] Fix errors emerged by fixed-hash update * [core/state-db] Fix errors that emerged from fixed-hash update * [core/sr-io] Fix errors that emerged from the fixed-hash update * [core/trie] Fix errors emerged from fixed-hash updates * [core/trie] Make use of new Hash::as_fixed_bytes_mut method in tests * [core/sr-primitives] Fix errors emerged from updating fixed-hash * [core/executor] Fix errors that emerged from fixed-hash update * [core/test-runtime] Fix errors that emerged from updating fixed-hash * [core/test-runtime] Fix an error that emerged from fixed-hash update * [core/transaction-pool] Fix errors that emerged from updating fixed-hash * Add From impl for hash types defined in core/primitives * [core/client/db] Fix errors that emerged from fixed-hash update * [core/{client/network/rpc}]: Fix errors emerged by fixed-hash update * [node/{cli/executor/runtime}]: Fix errors emerged by updating fixed-hash * [core/network]: Fix bug in parsing constant str * Update Cargo.lock - Add crunchy 0.2.1 - fixed-hash 0.2.2 => 0.3.0-beta.3 - Add static-assertions 0.2.5 - uint 0.4.1 => 0.5.0-beta.1 * [core/primitives]: Add fixed-hash/rustc-hex feature for FromStr impl * [core/primitives] No longer provide From impl for hash types if byteorder support is not enabled * [core/primitives] Revert to using From impl again in primitives tests * [core/..] Fix some bugs that emerged by recent fixed-hash updates * Update a bunch of Cargo.lock files * [core/state-db] Re-add whitespace between attr and extern crate/mod * [core/primitives] Fix bug in From impl for hash types using the wrong feature guard --- substrate/Cargo.lock | 34 +++++++--- substrate/core/client/db/src/lib.rs | 16 ++--- substrate/core/client/src/genesis.rs | 2 +- substrate/core/client/src/light/fetcher.rs | 2 +- substrate/core/executor/src/wasm_executor.rs | 2 +- substrate/core/executor/wasm/Cargo.lock | 33 +++++++--- substrate/core/network/src/on_demand.rs | 6 +- substrate/core/network/src/test/mod.rs | 2 +- substrate/core/primitives/Cargo.toml | 11 ++-- substrate/core/primitives/src/ed25519.rs | 6 +- substrate/core/primitives/src/hash.rs | 27 ++++++-- substrate/core/rpc/src/author/tests.rs | 4 +- substrate/core/rpc/src/chain/tests.rs | 8 +-- substrate/core/sr-io/with_std.rs | 2 +- substrate/core/sr-primitives/src/lib.rs | 2 +- substrate/core/sr-primitives/src/traits.rs | 8 +-- substrate/core/state-db/src/lib.rs | 61 +++++++++++++++--- substrate/core/state-db/src/noncanonical.rs | 2 +- substrate/core/state-db/src/test.rs | 16 ++++- .../state-machine/src/overlayed_changes.rs | 2 +- .../core/state-machine/src/proving_backend.rs | 3 +- substrate/core/state-machine/src/testing.rs | 2 +- .../core/state-machine/src/trie_backend.rs | 2 +- .../core/test-client/src/block_builder_ext.rs | 2 +- substrate/core/test-runtime/src/genesismap.rs | 2 +- substrate/core/test-runtime/src/system.rs | 14 ++-- substrate/core/test-runtime/wasm/Cargo.lock | 40 +++++++----- .../substrate_test_runtime.compact.wasm | Bin 45231 -> 44807 bytes .../core/transaction-pool/graph/src/pool.rs | 2 +- substrate/core/trie/src/lib.rs | 4 +- substrate/node/cli/src/chain_spec.rs | 2 +- substrate/node/executor/src/lib.rs | 5 +- substrate/node/runtime/src/lib.rs | 2 +- substrate/node/runtime/wasm/Cargo.lock | 40 +++++++----- .../release/node_runtime.compact.wasm | Bin 621533 -> 621448 bytes 35 files changed, 249 insertions(+), 117 deletions(-) diff --git a/substrate/Cargo.lock b/substrate/Cargo.lock index 27163a40d2..5ebc858b57 100644 --- a/substrate/Cargo.lock +++ b/substrate/Cargo.lock @@ -457,6 +457,11 @@ name = "crunchy" version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "crunchy" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "crypto-mac" version = "0.5.2" @@ -679,13 +684,15 @@ dependencies = [ [[package]] name = "fixed-hash" -version = "0.2.2" +version = "0.3.0-beta.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ + "byteorder 1.2.6 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", - "rand 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-hex 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-hex 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", + "static_assertions 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2907,6 +2914,11 @@ name = "stable_deref_trait" version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "static_assertions" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "stdweb" version = "0.1.3" @@ -3275,8 +3287,8 @@ dependencies = [ "base58 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "blake2-rfc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", "byteorder 1.2.6 (registry+https://github.com/rust-lang/crates.io-index)", - "crunchy 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", - "fixed-hash 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "crunchy 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "fixed-hash 0.3.0-beta.3 (registry+https://github.com/rust-lang/crates.io-index)", "hash-db 0.9.0 (git+https://github.com/paritytech/trie)", "hash256-std-hasher 0.9.0 (git+https://github.com/paritytech/trie)", "heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -3291,7 +3303,7 @@ dependencies = [ "sr-std 0.1.0", "substrate-serializer 0.1.0", "twox-hash 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "uint 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", + "uint 0.5.0-beta.1 (registry+https://github.com/rust-lang/crates.io-index)", "untrusted 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", "wasmi 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -3969,11 +3981,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "uint" -version = "0.4.1" +version = "0.5.0-beta.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "byteorder 1.2.6 (registry+https://github.com/rust-lang/crates.io-index)", - "crunchy 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", + "crunchy 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-hex 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -4324,6 +4336,7 @@ dependencies = [ "checksum crossbeam-utils 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "2760899e32a1d58d5abb31129f8fae5de75220bc2176e77ff7c627ae45c918d9" "checksum crossbeam-utils 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "677d453a17e8bd2b913fa38e8b9cf04bcdbb5be790aa294f2389661d72036015" "checksum crunchy 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "a2f4a431c5c9f662e1200b7c7f02c34e91361150e382089a8f2dec3ba680cbda" +"checksum crunchy 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c240f247c278fa08a6d4820a6a222bfc6e0d999e51ba67be94f44c905b2161f2" "checksum crypto-mac 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "0999b4ff4d3446d4ddb19a63e9e00c1876e75cd7000d20e57a693b4b3f08d958" "checksum crypto-mac 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7afa06d05a046c7a47c3a849907ec303504608c927f4e85f7bfff22b7180d971" "checksum ctr 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4b669fcb8e20124db86dbd9b01e74ec0e9e420e65381311ce5249864fc7ff0c0" @@ -4350,7 +4363,7 @@ dependencies = [ "checksum fake-simd 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed" "checksum fdlimit 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b1ee15a7050e5580b3712877157068ea713b245b080ff302ae2ca973cfcd9baa" "checksum finality-grandpa 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "20d8cf871510f0d57630e75f9e65f87cba29581ccab1f78666d8b2e422d0baa6" -"checksum fixed-hash 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "0d5ec8112f00ea8a483e04748a85522184418fd1cf02890b626d8fc28683f7de" +"checksum fixed-hash 0.3.0-beta.3 (registry+https://github.com/rust-lang/crates.io-index)" = "4e71c99c903a9fe54baed1bc701b43daba8c6dc6d4aec89a32f667ab6b3094c4" "checksum fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "2fad85553e09a6f881f739c29f0b00b0f01357c743266d478b68951ce23285f3" "checksum foreign-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" "checksum foreign-types-shared 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" @@ -4539,6 +4552,7 @@ dependencies = [ "checksum slog-scope 4.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "053344c94c0e2b22da6305efddb698d7c485809427cf40555dc936085f67a9df" "checksum smallvec 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)" = "153ffa32fd170e9944f7e0838edf824a754ec4c1fc64746fcc9fe1f8fa602e5d" "checksum stable_deref_trait 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "dba1a27d3efae4351c8051072d619e3ade2820635c3958d826bfea39d59b54c8" +"checksum static_assertions 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)" = "c19be23126415861cb3a23e501d34a708f7f9b2183c5252d690941c2e69199d5" "checksum stdweb 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ef5430c8e36b713e13b48a9f709cc21e046723fe44ce34587b73a830203b533e" "checksum stdweb 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)" = "22203527a18dc1c5c83bbd247fb005f5877d040783b6626571d6b7ed7a6f5e75" "checksum stdweb-derive 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0e21ebd9179de08f2300a65454268a17ea3de204627458588c84319c4def3930" @@ -4593,7 +4607,7 @@ dependencies = [ "checksum typeable 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "1410f6f91f21d1612654e7cc69193b0334f909dcf2c790c4826254fbb86f8887" "checksum typenum 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "612d636f949607bdf9b123b4a6f6d966dedf3ff669f7f045890d3a4a73948169" "checksum ucd-util 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "fd2be2d6639d0f8fe6cdda291ad456e23629558d466e2789d2c3e9892bda285d" -"checksum uint 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "754ba11732b9161b94c41798e5197e5e75388d012f760c42adb5000353e98646" +"checksum uint 0.5.0-beta.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4630460173a57c0af94b8306091e018025d988473f641a4af754b6cde980e1e3" "checksum unicase 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7f4765f83163b74f957c797ad9253caf97f103fb064d3999aea9568d09fc8a33" "checksum unicase 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9d3218ea14b4edcaccfa0df0a64a3792a2c32cc706f1b336e48867f9d3147f90" "checksum unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "49f2bd0c6468a8230e1db229cff8029217cf623c767ea5d60bfbd42729ea54d5" diff --git a/substrate/core/client/db/src/lib.rs b/substrate/core/client/db/src/lib.rs index ed4f64cf44..1e37b61cfd 100644 --- a/substrate/core/client/db/src/lib.rs +++ b/substrate/core/client/db/src/lib.rs @@ -357,7 +357,7 @@ struct StorageDb { impl state_machine::Storage for StorageDb { fn get(&self, key: &H256) -> Result, String> { - self.state_db.get(&key.0.into(), self).map(|r| r.map(|v| DBValue::from_slice(&v))) + self.state_db.get(key, self).map(|r| r.map(|v| DBValue::from_slice(&v))) .map_err(|e| format!("Database backend error: {:?}", e)) } } @@ -367,7 +367,7 @@ impl state_db::HashDb for StorageDb { type Hash = H256; fn get(&self, key: &H256) -> Result>, Self::Error> { - self.db.get(columns::STATE, &key[..]).map(|r| r.map(|v| v.to_vec())) + self.db.get(columns::STATE, key.as_bytes()).map(|r| r.map(|v| v.to_vec())) } } @@ -734,9 +734,9 @@ impl client::backend::Backend for Backend whe let mut changeset: state_db::ChangeSet = state_db::ChangeSet::default(); for (key, (val, rc)) in operation.updates.drain() { if rc > 0 { - changeset.inserted.push((key.0.into(), val.to_vec())); + changeset.inserted.push((key, val.to_vec())); } else if rc < 0 { - changeset.deleted.push(key.0.into()); + changeset.deleted.push(key); } } let number_u64 = number.as_(); @@ -1117,7 +1117,7 @@ mod tests { backend.commit_operation(op).unwrap(); - assert_eq!(backend.storage.db.get(::columns::STATE, &key.0[..]).unwrap().unwrap(), &b"hello"[..]); + assert_eq!(backend.storage.db.get(::columns::STATE, key.as_bytes()).unwrap().unwrap(), &b"hello"[..]); hash }; @@ -1151,7 +1151,7 @@ mod tests { backend.commit_operation(op).unwrap(); - assert_eq!(backend.storage.db.get(::columns::STATE, &key.0[..]).unwrap().unwrap(), &b"hello"[..]); + assert_eq!(backend.storage.db.get(::columns::STATE, key.as_bytes()).unwrap().unwrap(), &b"hello"[..]); hash }; @@ -1183,12 +1183,12 @@ mod tests { backend.commit_operation(op).unwrap(); - assert!(backend.storage.db.get(::columns::STATE, &key.0[..]).unwrap().is_none()); + assert!(backend.storage.db.get(::columns::STATE, key.as_bytes()).unwrap().is_none()); } backend.finalize_block(BlockId::Number(1)).unwrap(); backend.finalize_block(BlockId::Number(2)).unwrap(); - assert!(backend.storage.db.get(::columns::STATE, &key.0[..]).unwrap().is_none()); + assert!(backend.storage.db.get(::columns::STATE, key.as_bytes()).unwrap().is_none()); } #[test] diff --git a/substrate/core/client/src/genesis.rs b/substrate/core/client/src/genesis.rs index 16dc8f5e05..83c4338b8b 100644 --- a/substrate/core/client/src/genesis.rs +++ b/substrate/core/client/src/genesis.rs @@ -67,7 +67,7 @@ mod tests { use trie::ordered_trie_root; let transactions = txs.into_iter().map(|tx| { - let signature = Pair::from(Keyring::from_public(Public::from_raw(tx.from.0)).unwrap()) + let signature = Pair::from(Keyring::from_public(Public::from_raw(tx.from.to_fixed_bytes())).unwrap()) .sign(&tx.encode()).into(); Extrinsic { transfer: tx, signature } diff --git a/substrate/core/client/src/light/fetcher.rs b/substrate/core/client/src/light/fetcher.rs index 38a46c7d68..95e02b91f9 100644 --- a/substrate/core/client/src/light/fetcher.rs +++ b/substrate/core/client/src/light/fetcher.rs @@ -478,7 +478,7 @@ pub mod tests { assert!(local_checker.check_changes_proof(&request, remote_max + 1, remote_proof.clone()).is_err()); // check proof on local client using broken proof - remote_proof = local_roots_range.into_iter().map(|v| v.to_vec()).collect(); + remote_proof = local_roots_range.into_iter().map(|v| v.as_bytes().to_vec()).collect(); assert!(local_checker.check_changes_proof(&request, remote_max, remote_proof).is_err()); } } diff --git a/substrate/core/executor/src/wasm_executor.rs b/substrate/core/executor/src/wasm_executor.rs index 56624060e7..90d6db6001 100644 --- a/substrate/core/executor/src/wasm_executor.rs +++ b/substrate/core/executor/src/wasm_executor.rs @@ -845,7 +845,7 @@ mod tests { let test_code = include_bytes!("../wasm/target/wasm32-unknown-unknown/release/runtime_test.compact.wasm"); assert_eq!( WasmExecutor::new().call(&mut ext, 8, &test_code[..], "test_enumerated_trie_root", &[]).unwrap(), - ordered_trie_root::(vec![b"zero".to_vec(), b"one".to_vec(), b"two".to_vec()].iter()).0.encode() + ordered_trie_root::(vec![b"zero".to_vec(), b"one".to_vec(), b"two".to_vec()].iter()).as_fixed_bytes().encode() ); } diff --git a/substrate/core/executor/wasm/Cargo.lock b/substrate/core/executor/wasm/Cargo.lock index 691a9291a2..94dd14381d 100644 --- a/substrate/core/executor/wasm/Cargo.lock +++ b/substrate/core/executor/wasm/Cargo.lock @@ -17,10 +17,18 @@ version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] -name = "fixed-hash" -version = "0.2.2" +name = "crunchy" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "fixed-hash" +version = "0.3.0-beta.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "static_assertions 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "hash-db" version = "0.9.0" @@ -141,13 +149,18 @@ dependencies = [ "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "static_assertions" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "substrate-primitives" version = "0.1.0" dependencies = [ "byteorder 1.2.6 (registry+https://github.com/rust-lang/crates.io-index)", - "crunchy 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", - "fixed-hash 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "crunchy 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "fixed-hash 0.3.0-beta.3 (registry+https://github.com/rust-lang/crates.io-index)", "hash-db 0.9.0 (git+https://github.com/paritytech/trie)", "hash256-std-hasher 0.9.0 (git+https://github.com/paritytech/trie)", "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", @@ -155,7 +168,7 @@ dependencies = [ "rustc-hex 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", "sr-std 0.1.0", - "uint 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", + "uint 0.5.0-beta.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -170,11 +183,11 @@ dependencies = [ [[package]] name = "uint" -version = "0.4.1" +version = "0.5.0-beta.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "byteorder 1.2.6 (registry+https://github.com/rust-lang/crates.io-index)", - "crunchy 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", + "crunchy 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-hex 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -187,7 +200,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum arrayvec 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)" = "a1e964f9e24d588183fcb43503abda40d288c8657dfc27311516ce2f05675aef" "checksum byteorder 1.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "90492c5858dd7d2e78691cfb89f90d273a2800fc11d98f60786e5d87e2f83781" "checksum crunchy 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "a2f4a431c5c9f662e1200b7c7f02c34e91361150e382089a8f2dec3ba680cbda" -"checksum fixed-hash 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "0d5ec8112f00ea8a483e04748a85522184418fd1cf02890b626d8fc28683f7de" +"checksum crunchy 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c240f247c278fa08a6d4820a6a222bfc6e0d999e51ba67be94f44c905b2161f2" +"checksum fixed-hash 0.3.0-beta.3 (registry+https://github.com/rust-lang/crates.io-index)" = "4e71c99c903a9fe54baed1bc701b43daba8c6dc6d4aec89a32f667ab6b3094c4" "checksum hash-db 0.9.0 (git+https://github.com/paritytech/trie)" = "" "checksum hash256-std-hasher 0.9.0 (git+https://github.com/paritytech/trie)" = "" "checksum nodrop 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)" = "9a2228dca57108069a5262f2ed8bd2e82496d2e074a06d1ccc7ce1687b6ae0a2" @@ -200,6 +214,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" "checksum semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" "checksum serde 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)" = "84257ccd054dc351472528c8587b4de2dbf0dc0fe2e634030c1a90bfdacebaa9" +"checksum static_assertions 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)" = "c19be23126415861cb3a23e501d34a708f7f9b2183c5252d690941c2e69199d5" "checksum syn 0.14.9 (registry+https://github.com/rust-lang/crates.io-index)" = "261ae9ecaa397c42b960649561949d69311f08eeaea86a65696e6e46517cf741" -"checksum uint 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "754ba11732b9161b94c41798e5197e5e75388d012f760c42adb5000353e98646" +"checksum uint 0.5.0-beta.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4630460173a57c0af94b8306091e018025d988473f641a4af754b6cde980e1e3" "checksum unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" diff --git a/substrate/core/network/src/on_demand.rs b/substrate/core/network/src/on_demand.rs index 399ba3f408..bc0f3aec9c 100644 --- a/substrate/core/network/src/on_demand.rs +++ b/substrate/core/network/src/on_demand.rs @@ -820,7 +820,11 @@ pub mod tests { }); let thread = ::std::thread::spawn(move || { let result = response.wait().unwrap(); - assert_eq!(result.hash(), "0x6443a0b46e0412e626363028115a9f2cf963eeed526b8b33e5316f08b50d0dc3".into()); + assert_eq!( + result.hash(), + "6443a0b46e0412e626363028115a9f2c\ + f963eeed526b8b33e5316f08b50d0dc3".parse().unwrap() + ); }); on_demand.on_remote_header_response(&mut network, 0, message::RemoteHeaderResponse { diff --git a/substrate/core/network/src/test/mod.rs b/substrate/core/network/src/test/mod.rs index 0da6523d0d..843ad836e0 100644 --- a/substrate/core/network/src/test/mod.rs +++ b/substrate/core/network/src/test/mod.rs @@ -255,7 +255,7 @@ impl> Peer { amount: 1, nonce, }; - let signature = Keyring::from_raw_public(transfer.from.0).unwrap().sign(&transfer.encode()).into(); + let signature = Keyring::from_raw_public(transfer.from.to_fixed_bytes()).unwrap().sign(&transfer.encode()).into(); builder.push(Extrinsic { transfer, signature }).unwrap(); nonce = nonce + 1; }); diff --git a/substrate/core/primitives/Cargo.toml b/substrate/core/primitives/Cargo.toml index 29914fc4ce..171841f1e2 100644 --- a/substrate/core/primitives/Cargo.toml +++ b/substrate/core/primitives/Cargo.toml @@ -4,15 +4,15 @@ version = "0.1.0" authors = ["Parity Technologies "] [dependencies] -crunchy = "0.1" +crunchy = { version = "0.2", default-features = false } sr-std = { path = "../sr-std", default-features = false } parity-codec = { version = "2.1", default-features = false } parity-codec-derive = { version = "2.1", default-features = false } -fixed-hash = { version = "0.2.2", default-features = false } +fixed-hash = { version = "0.3.0-beta", default-features = false } rustc-hex = { version = "2.0", default-features = false } serde = { version = "1.0", default-features = false } serde_derive = { version = "1.0", optional = true } -uint = { version = "0.4.1", default-features = false } +uint = { version = "0.5.0-beta", default-features = false } twox-hash = { version = "1.1.0", optional = true } byteorder = { version = "1.1", default-features = false } wasmi = { version = "0.4.1", optional = true } @@ -32,10 +32,13 @@ heapsize = "0.4" [features] default = ["std"] std = [ + "crunchy/std", "wasmi", "uint/std", "fixed-hash/std", - "fixed-hash/heapsizeof", + "fixed-hash/heapsize", + "fixed-hash/byteorder", + "fixed-hash/rustc-hex", "fixed-hash/libc", "parity-codec/std", "hash256-std-hasher/std", diff --git a/substrate/core/primitives/src/ed25519.rs b/substrate/core/primitives/src/ed25519.rs index 027298b4b1..2e30653e81 100644 --- a/substrate/core/primitives/src/ed25519.rs +++ b/substrate/core/primitives/src/ed25519.rs @@ -241,7 +241,7 @@ impl Pair { pub fn derive_child_probably_bad(&self, chain_data: &[u8]) -> Pair { let sig = self.sign(chain_data); let mut seed = [0u8; 32]; - seed.copy_from_slice(&sig.0[..32]); + seed.copy_from_slice(&sig[..32]); Pair::from_seed(&seed) } @@ -251,7 +251,7 @@ impl Pair { pub fn verify_strong>(sig: &Signature, message: &[u8], pubkey: P) -> bool { let public_key = untrusted::Input::from(&pubkey.as_ref().0[..]); let msg = untrusted::Input::from(message); - let sig = untrusted::Input::from(&sig.0[..]); + let sig = untrusted::Input::from(&sig.as_bytes()); match signature::verify(&signature::ED25519, public_key, msg, sig) { Ok(_) => true, @@ -316,7 +316,7 @@ mod test { assert_eq!(public, Public::from_raw(hex!("2f8c6129d816cf51c374bc7f08c3e63ed156cf78aefb4a6550d97b87997977ee"))); let message = hex!("2f8c6129d816cf51c374bc7f08c3e63ed156cf78aefb4a6550d97b87997977ee00000000000000000200d75a980182b10ab7d54bfed3c964073a0ee172f3daa62325af021a68f707511a4500000000000000"); let signature = pair.sign(&message[..]); - println!("Correct signature: {}", HexDisplay::from(&signature.0)); + println!("Correct signature: {}", HexDisplay::from(&signature.as_bytes())); assert!(verify_strong(&signature, &message[..], &public)); } diff --git a/substrate/core/primitives/src/hash.rs b/substrate/core/primitives/src/hash.rs index 840be7e8a4..5733a738c9 100644 --- a/substrate/core/primitives/src/hash.rs +++ b/substrate/core/primitives/src/hash.rs @@ -35,7 +35,7 @@ macro_rules! impl_rest { impl<'de> Deserialize<'de> for $name { fn deserialize(deserializer: D) -> Result where D: Deserializer<'de> { bytes::deserialize_check_len(deserializer, bytes::ExpectedLen::Exact($len)) - .map(|x| (&*x).into()) + .map(|x| $name::from_slice(&x)) } } @@ -49,12 +49,29 @@ macro_rules! impl_rest { <[u8; $len] as ::codec::Decode>::decode(input).map($name) } } + + #[cfg(feature = "std")] + impl From for $name { + fn from(val: u64) -> Self { + Self::from_low_u64_be(val) + } + } } } -construct_hash!(H160, 20); -construct_hash!(H256, 32); -construct_hash!(H512, 64); +construct_fixed_hash!{ + /// Fixed-size uninterpreted hash type with 20 bytes (160 bits) size. + pub struct H160(20); +} +construct_fixed_hash!{ + /// Fixed-size uninterpreted hash type with 32 bytes (256 bits) size. + pub struct H256(32); +} +construct_fixed_hash!{ + /// Fixed-size uninterpreted hash type with 64 bytes (512 bits) size. + pub struct H512(64); +} + impl_rest!(H160, 20); impl_rest!(H256, 32); impl_rest!(H512, 64); @@ -113,7 +130,7 @@ mod tests { #[test] fn test_heapsizeof() { use heapsize::HeapSizeOf; - let h = H256::new(); + let h = H256::zero(); assert_eq!(h.heap_size_of_children(), 0); } } diff --git a/substrate/core/rpc/src/author/tests.rs b/substrate/core/rpc/src/author/tests.rs index 249d3187c7..7032355ef2 100644 --- a/substrate/core/rpc/src/author/tests.rs +++ b/substrate/core/rpc/src/author/tests.rs @@ -35,7 +35,7 @@ fn uxt(sender: Keyring, nonce: u64) -> Extrinsic { from: sender.to_raw_public().into(), to: Default::default(), }; - let signature = Keyring::from_raw_public(tx.from.0).unwrap().sign(&tx.encode()).into(); + let signature = Keyring::from_raw_public(tx.from.to_fixed_bytes()).unwrap().sign(&tx.encode()).into(); Extrinsic { transfer: tx, signature } } @@ -105,7 +105,7 @@ fn should_watch_extrinsic() { from: Keyring::Alice.to_raw_public().into(), to: Default::default(), }; - let signature = Keyring::from_raw_public(tx.from.0).unwrap().sign(&tx.encode()).into(); + let signature = Keyring::from_raw_public(tx.from.to_fixed_bytes()).unwrap().sign(&tx.encode()).into(); Extrinsic { transfer: tx, signature } }; AuthorApi::submit_rich_extrinsic(&p, replacement).unwrap(); diff --git a/substrate/core/rpc/src/chain/tests.rs b/substrate/core/rpc/src/chain/tests.rs index 644c7fed07..e673fe0af7 100644 --- a/substrate/core/rpc/src/chain/tests.rs +++ b/substrate/core/rpc/src/chain/tests.rs @@ -36,7 +36,7 @@ fn should_return_header() { parent_hash: 0.into(), number: 0, state_root: x.state_root.clone(), - extrinsics_root: "03170a2e7597b7b7e3d84c05391d139a62b157e78786d8c082f29dcf4c111314".into(), + extrinsics_root: "03170a2e7597b7b7e3d84c05391d139a62b157e78786d8c082f29dcf4c111314".parse().unwrap(), digest: Default::default(), } ); @@ -47,7 +47,7 @@ fn should_return_header() { parent_hash: 0.into(), number: 0, state_root: x.state_root.clone(), - extrinsics_root: "03170a2e7597b7b7e3d84c05391d139a62b157e78786d8c082f29dcf4c111314".into(), + extrinsics_root: "03170a2e7597b7b7e3d84c05391d139a62b157e78786d8c082f29dcf4c111314".parse().unwrap(), digest: Default::default(), } ); @@ -86,7 +86,7 @@ fn should_return_a_block() { parent_hash: api.client.genesis_hash(), number: 1, state_root: x.block.header.state_root.clone(), - extrinsics_root: "03170a2e7597b7b7e3d84c05391d139a62b157e78786d8c082f29dcf4c111314".into(), + extrinsics_root: "03170a2e7597b7b7e3d84c05391d139a62b157e78786d8c082f29dcf4c111314".parse().unwrap(), digest: Default::default(), }, extrinsics: vec![], @@ -100,7 +100,7 @@ fn should_return_a_block() { parent_hash: api.client.genesis_hash(), number: 1, state_root: x.block.header.state_root.clone(), - extrinsics_root: "03170a2e7597b7b7e3d84c05391d139a62b157e78786d8c082f29dcf4c111314".into(), + extrinsics_root: "03170a2e7597b7b7e3d84c05391d139a62b157e78786d8c082f29dcf4c111314".parse().unwrap(), digest: Default::default(), }, extrinsics: vec![], diff --git a/substrate/core/sr-io/with_std.rs b/substrate/core/sr-io/with_std.rs index ccadb89efc..72fa107469 100644 --- a/substrate/core/sr-io/with_std.rs +++ b/substrate/core/sr-io/with_std.rs @@ -146,7 +146,7 @@ pub fn chain_id() -> u64 { pub fn storage_root() -> H256 { ext::with(|ext| ext.storage_root() - ).unwrap_or(H256::new()) + ).unwrap_or(H256::zero()) } /// "Commit" all existing operations and compute the resultant child storage root. diff --git a/substrate/core/sr-primitives/src/lib.rs b/substrate/core/sr-primitives/src/lib.rs index 42dcd37a2c..a8759a4890 100644 --- a/substrate/core/sr-primitives/src/lib.rs +++ b/substrate/core/sr-primitives/src/lib.rs @@ -198,7 +198,7 @@ pub struct Ed25519Signature(pub H512); impl Verify for Ed25519Signature { type Signer = H256; fn verify>(&self, mut msg: L, signer: &Self::Signer) -> bool { - runtime_io::ed25519_verify(&(self.0).0, msg.get(), &signer.0[..]) + runtime_io::ed25519_verify((self.0).as_fixed_bytes(), msg.get(), &signer.as_bytes()) } } diff --git a/substrate/core/sr-primitives/src/traits.rs b/substrate/core/sr-primitives/src/traits.rs index 0ee2db117a..5c568460ee 100644 --- a/substrate/core/sr-primitives/src/traits.rs +++ b/substrate/core/sr-primitives/src/traits.rs @@ -322,8 +322,8 @@ impl CheckEqual for substrate_primitives::H256 { #[cfg(feature = "std")] fn check_equal(&self, other: &Self) { use substrate_primitives::hexdisplay::HexDisplay; - if &self.0 != &other.0 { - println!("Hash: given={}, expected={}", HexDisplay::from(&self.0), HexDisplay::from(&other.0)); + if self != other { + println!("Hash: given={}, expected={}", HexDisplay::from(self.as_fixed_bytes()), HexDisplay::from(other.as_fixed_bytes())); } } @@ -331,8 +331,8 @@ impl CheckEqual for substrate_primitives::H256 { fn check_equal(&self, other: &Self) { if self != other { runtime_io::print("Hash not equal"); - runtime_io::print(&self.0[..]); - runtime_io::print(&other.0[..]); + runtime_io::print(self.as_bytes()); + runtime_io::print(other.as_bytes()); } } } diff --git a/substrate/core/state-db/src/lib.rs b/substrate/core/state-db/src/lib.rs index 598f0c4705..261d768560 100644 --- a/substrate/core/state-db/src/lib.rs +++ b/substrate/core/state-db/src/lib.rs @@ -363,14 +363,59 @@ mod tests { let mut db = make_db(&[91, 921, 922, 93, 94]); let state_db = StateDb::new(settings, &db).unwrap(); - db.commit(&state_db.insert_block::(&H256::from(1), 1, &H256::from(0), make_changeset(&[1], &[91])).unwrap()); - db.commit(&state_db.insert_block::(&H256::from(21), 2, &H256::from(1), make_changeset(&[21], &[921, 1])).unwrap()); - db.commit(&state_db.insert_block::(&H256::from(22), 2, &H256::from(1), make_changeset(&[22], &[922])).unwrap()); - db.commit(&state_db.insert_block::(&H256::from(3), 3, &H256::from(21), make_changeset(&[3], &[93])).unwrap()); - db.commit(&state_db.canonicalize_block(&H256::from(1))); - db.commit(&state_db.insert_block::(&H256::from(4), 4, &H256::from(3), make_changeset(&[4], &[94])).unwrap()); - db.commit(&state_db.canonicalize_block(&H256::from(21))); - db.commit(&state_db.canonicalize_block(&H256::from(3))); + db.commit( + &state_db + .insert_block::( + &H256::from_low_u64_be(1), + 1, + &H256::from_low_u64_be(0), + make_changeset(&[1], &[91]), + ) + .unwrap(), + ); + db.commit( + &state_db + .insert_block::( + &H256::from_low_u64_be(21), + 2, + &H256::from_low_u64_be(1), + make_changeset(&[21], &[921, 1]), + ) + .unwrap(), + ); + db.commit( + &state_db + .insert_block::( + &H256::from_low_u64_be(22), + 2, + &H256::from_low_u64_be(1), + make_changeset(&[22], &[922]), + ) + .unwrap(), + ); + db.commit( + &state_db + .insert_block::( + &H256::from_low_u64_be(3), + 3, + &H256::from_low_u64_be(21), + make_changeset(&[3], &[93]), + ) + .unwrap(), + ); + db.commit(&state_db.canonicalize_block(&H256::from_low_u64_be(1))); + db.commit( + &state_db + .insert_block::( + &H256::from_low_u64_be(4), + 4, + &H256::from_low_u64_be(3), + make_changeset(&[4], &[94]), + ) + .unwrap(), + ); + db.commit(&state_db.canonicalize_block(&H256::from_low_u64_be(21))); + db.commit(&state_db.canonicalize_block(&H256::from_low_u64_be(3))); (db, state_db) } diff --git a/substrate/core/state-db/src/noncanonical.rs b/substrate/core/state-db/src/noncanonical.rs index b6cd4862e7..b1d34c09ad 100644 --- a/substrate/core/state-db/src/noncanonical.rs +++ b/substrate/core/state-db/src/noncanonical.rs @@ -275,7 +275,7 @@ mod tests { use test::{make_db, make_changeset}; fn contains(overlay: &NonCanonicalOverlay, key: u64) -> bool { - overlay.get(&H256::from(key)) == Some(H256::from(key).to_vec()) + overlay.get(&H256::from_low_u64_be(key)) == Some(H256::from_low_u64_be(key).as_bytes().to_vec()) } #[test] diff --git a/substrate/core/state-db/src/test.rs b/substrate/core/state-db/src/test.rs index 3c83bb03cf..487a5c641d 100644 --- a/substrate/core/state-db/src/test.rs +++ b/substrate/core/state-db/src/test.rs @@ -62,8 +62,13 @@ impl TestDb { pub fn make_changeset(inserted: &[u64], deleted: &[u64]) -> ChangeSet { ChangeSet { - inserted: inserted.iter().map(|v| (H256::from(*v), H256::from(*v).to_vec())).collect(), - deleted: deleted.iter().map(|v| H256::from(*v)).collect(), + inserted: inserted + .iter() + .map(|v| { + (H256::from_low_u64_be(*v), H256::from_low_u64_be(*v).as_bytes().to_vec()) + }) + .collect(), + deleted: deleted.iter().map(|v| H256::from_low_u64_be(*v)).collect(), } } @@ -76,7 +81,12 @@ pub fn make_commit(inserted: &[u64], deleted: &[u64]) -> CommitSet { pub fn make_db(inserted: &[u64]) -> TestDb { TestDb { - data: inserted.iter().map(|v| (H256::from(*v), H256::from(*v).to_vec())).collect(), + data: inserted + .iter() + .map(|v| { + (H256::from_low_u64_be(*v), H256::from_low_u64_be(*v).as_bytes().to_vec()) + }) + .collect(), meta: Default::default(), } } diff --git a/substrate/core/state-machine/src/overlayed_changes.rs b/substrate/core/state-machine/src/overlayed_changes.rs index 15012ac66e..239dc0b438 100644 --- a/substrate/core/state-machine/src/overlayed_changes.rs +++ b/substrate/core/state-machine/src/overlayed_changes.rs @@ -371,7 +371,7 @@ mod tests { let changes_trie_storage = InMemoryChangesTrieStorage::new(); let mut ext = Ext::new(&mut overlay, &backend, Some(&changes_trie_storage)); const ROOT: [u8; 32] = hex!("0b41e488cccbd67d1f1089592c2c235f5c5399b053f7fe9152dd4b5f279914cd"); - assert_eq!(ext.storage_root(), H256(ROOT)); + assert_eq!(ext.storage_root(), H256::from(ROOT)); } #[test] diff --git a/substrate/core/state-machine/src/proving_backend.rs b/substrate/core/state-machine/src/proving_backend.rs index 6aa6eb9da3..a46fd74b5f 100644 --- a/substrate/core/state-machine/src/proving_backend.rs +++ b/substrate/core/state-machine/src/proving_backend.rs @@ -211,7 +211,8 @@ mod tests { #[test] fn proof_is_invalid_when_does_not_contains_root() { - assert!(create_proof_check_backend::(1.into(), vec![]).is_err()); + use primitives::H256; + assert!(create_proof_check_backend::(H256::from_low_u64_be(1), vec![]).is_err()); } #[test] diff --git a/substrate/core/state-machine/src/testing.rs b/substrate/core/state-machine/src/testing.rs index ea67773ed2..75ad342b6b 100644 --- a/substrate/core/state-machine/src/testing.rs +++ b/substrate/core/state-machine/src/testing.rs @@ -158,6 +158,6 @@ mod tests { ext.set_storage(b"dog".to_vec(), b"puppy".to_vec()); ext.set_storage(b"dogglesworth".to_vec(), b"cat".to_vec()); const ROOT: [u8; 32] = hex!("0b41e488cccbd67d1f1089592c2c235f5c5399b053f7fe9152dd4b5f279914cd"); - assert_eq!(ext.storage_root(), H256(ROOT)); + assert_eq!(ext.storage_root(), H256::from(ROOT)); } } diff --git a/substrate/core/state-machine/src/trie_backend.rs b/substrate/core/state-machine/src/trie_backend.rs index c40a5019f3..6dcaf3868e 100644 --- a/substrate/core/state-machine/src/trie_backend.rs +++ b/substrate/core/state-machine/src/trie_backend.rs @@ -212,7 +212,7 @@ pub mod tests { #[test] fn storage_root_is_non_default() { - assert!(test_trie().storage_root(::std::iter::empty()).0 != H256([0; 32])); + assert!(test_trie().storage_root(::std::iter::empty()).0 != H256::repeat_byte(0)); } #[test] diff --git a/substrate/core/test-client/src/block_builder_ext.rs b/substrate/core/test-client/src/block_builder_ext.rs index b2f15db739..11dd859c07 100644 --- a/substrate/core/test-client/src/block_builder_ext.rs +++ b/substrate/core/test-client/src/block_builder_ext.rs @@ -40,6 +40,6 @@ impl<'a, B, E> BlockBuilderExt for client::block_builder::BlockBuilder<'a, B, E, } fn sign_tx(transfer: runtime::Transfer) -> runtime::Extrinsic { - let signature = keyring::Keyring::from_raw_public(transfer.from.0.clone()).unwrap().sign(&codec::Encode::encode(&transfer)).into(); + let signature = keyring::Keyring::from_raw_public(transfer.from.to_fixed_bytes()).unwrap().sign(&codec::Encode::encode(&transfer)).into(); runtime::Extrinsic { transfer, signature } } diff --git a/substrate/core/test-runtime/src/genesismap.rs b/substrate/core/test-runtime/src/genesismap.rs index f212e2c86f..5e6adec86a 100644 --- a/substrate/core/test-runtime/src/genesismap.rs +++ b/substrate/core/test-runtime/src/genesismap.rs @@ -70,6 +70,6 @@ impl GenesisConfig { pub fn additional_storage_with_genesis(genesis_block: &::Block) -> HashMap, Vec> { map![ - twox_128(&b"latest"[..]).to_vec() => genesis_block.hash().0.to_vec() + twox_128(&b"latest"[..]).to_vec() => genesis_block.hash().as_fixed_bytes().to_vec() ] } diff --git a/substrate/core/test-runtime/src/system.rs b/substrate/core/test-runtime/src/system.rs index 6bc70368a1..a3041647d4 100644 --- a/substrate/core/test-runtime/src/system.rs +++ b/substrate/core/test-runtime/src/system.rs @@ -117,7 +117,7 @@ pub fn validate_transaction(utx: Extrinsic) -> TransactionValidity { } let hash = |from: &AccountId, nonce: u64| { - twox_128(&nonce.to_keyed_vec(&*from)).to_vec() + twox_128(&nonce.to_keyed_vec(from.as_bytes())).to_vec() }; let requires = if tx.nonce != expected_nonce && tx.nonce > 0 { let mut deps = Vec::new(); @@ -221,7 +221,11 @@ fn execute_transaction_backend(utx: &Extrinsic) -> ApplyResult { fn info_expect_equal_hash(given: &Hash, expected: &Hash) { use primitives::hexdisplay::HexDisplay; if given != expected { - println!("Hash: given={}, expected={}", HexDisplay::from(&given.0), HexDisplay::from(&expected.0)); + println!( + "Hash: given={}, expected={}", + HexDisplay::from(given.as_fixed_bytes()), + HexDisplay::from(expected.as_fixed_bytes()) + ); } } @@ -229,8 +233,8 @@ fn info_expect_equal_hash(given: &Hash, expected: &Hash) { fn info_expect_equal_hash(given: &Hash, expected: &Hash) { if given != expected { ::runtime_io::print("Hash not equal"); - ::runtime_io::print(&given.0[..]); - ::runtime_io::print(&expected.0[..]); + ::runtime_io::print(given.as_bytes()); + ::runtime_io::print(expected.as_bytes()); } } @@ -257,7 +261,7 @@ mod tests { } fn construct_signed_tx(tx: Transfer) -> Extrinsic { - let signature = Keyring::from_raw_public(tx.from.0).unwrap().sign(&tx.encode()).into(); + let signature = Keyring::from_raw_public(tx.from.to_fixed_bytes()).unwrap().sign(&tx.encode()).into(); Extrinsic { transfer: tx, signature } } diff --git a/substrate/core/test-runtime/wasm/Cargo.lock b/substrate/core/test-runtime/wasm/Cargo.lock index 990164654c..9e33aaa02e 100644 --- a/substrate/core/test-runtime/wasm/Cargo.lock +++ b/substrate/core/test-runtime/wasm/Cargo.lock @@ -84,6 +84,11 @@ name = "crunchy" version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "crunchy" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "elastic-array" version = "0.10.0" @@ -99,13 +104,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "fixed-hash" -version = "0.2.2" +version = "0.3.0-beta.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ + "byteorder 1.2.6 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", - "rand 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-hex 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-hex 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", + "static_assertions 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -406,11 +413,6 @@ dependencies = [ "untrusted 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", ] -[[package]] -name = "rustc-hex" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" - [[package]] name = "rustc-hex" version = "2.0.1" @@ -544,6 +546,11 @@ name = "stable_deref_trait" version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "static_assertions" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "substrate-metadata" version = "0.1.0" @@ -561,8 +568,8 @@ dependencies = [ "base58 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "blake2-rfc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", "byteorder 1.2.6 (registry+https://github.com/rust-lang/crates.io-index)", - "crunchy 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", - "fixed-hash 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "crunchy 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "fixed-hash 0.3.0-beta.3 (registry+https://github.com/rust-lang/crates.io-index)", "hash-db 0.9.0 (git+https://github.com/paritytech/trie)", "hash256-std-hasher 0.9.0 (git+https://github.com/paritytech/trie)", "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", @@ -574,7 +581,7 @@ dependencies = [ "serde_derive 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", "sr-std 0.1.0", "twox-hash 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "uint 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", + "uint 0.5.0-beta.1 (registry+https://github.com/rust-lang/crates.io-index)", "untrusted 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", "wasmi 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -672,11 +679,11 @@ dependencies = [ [[package]] name = "uint" -version = "0.4.1" +version = "0.5.0-beta.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "byteorder 1.2.6 (registry+https://github.com/rust-lang/crates.io-index)", - "crunchy 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", + "crunchy 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-hex 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -751,9 +758,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum crossbeam-epoch 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "927121f5407de9956180ff5e936fe3cf4324279280001cd56b669d28ee7e9150" "checksum crossbeam-utils 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "2760899e32a1d58d5abb31129f8fae5de75220bc2176e77ff7c627ae45c918d9" "checksum crunchy 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "a2f4a431c5c9f662e1200b7c7f02c34e91361150e382089a8f2dec3ba680cbda" +"checksum crunchy 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c240f247c278fa08a6d4820a6a222bfc6e0d999e51ba67be94f44c905b2161f2" "checksum elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "88d4851b005ef16de812ea9acdb7bece2f0a40dd86c07b85631d7dafa54537bb" "checksum environmental 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "db746025e3ea695bfa0ae744dbacd5fcfc8db51b9760cf8bd0ab69708bb93c49" -"checksum fixed-hash 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "0d5ec8112f00ea8a483e04748a85522184418fd1cf02890b626d8fc28683f7de" +"checksum fixed-hash 0.3.0-beta.3 (registry+https://github.com/rust-lang/crates.io-index)" = "4e71c99c903a9fe54baed1bc701b43daba8c6dc6d4aec89a32f667ab6b3094c4" "checksum fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82" "checksum fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7" "checksum gcc 0.3.54 (registry+https://github.com/rust-lang/crates.io-index)" = "5e33ec290da0d127825013597dbdfc28bee4964690c7ce1166cbc2a7bd08b1bb" @@ -793,7 +801,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum rayon 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)" = "b614fe08b6665cb9a231d07ac1364b0ef3cb3698f1239ee0c4c3a88a524f54c8" "checksum rayon-core 1.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b055d1e92aba6877574d8fe604a63c8b5df60f60e5982bf7ccbb1338ea527356" "checksum ring 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)" = "6f7d28b30a72c01b458428e0ae988d4149c20d902346902be881e3edc4bb325c" -"checksum rustc-hex 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0ceb8ce7a5e520de349e1fa172baeba4a9e8d5ef06c47471863530bc4972ee1e" "checksum rustc-hex 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "403bb3a286107a04825a5f82e1270acc1e14028d3d554d7a1e08914549575ab8" "checksum rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" "checksum scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "94258f53601af11e6a49f722422f6e3425c52b06245a5cf9bc09908b174f5e27" @@ -803,12 +810,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum serde_derive 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)" = "31569d901045afbff7a9479f793177fe9259819aff10ab4f89ef69bbc5f567fe" "checksum smallvec 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)" = "153ffa32fd170e9944f7e0838edf824a754ec4c1fc64746fcc9fe1f8fa602e5d" "checksum stable_deref_trait 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "dba1a27d3efae4351c8051072d619e3ade2820635c3958d826bfea39d59b54c8" +"checksum static_assertions 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)" = "c19be23126415861cb3a23e501d34a708f7f9b2183c5252d690941c2e69199d5" "checksum syn 0.14.9 (registry+https://github.com/rust-lang/crates.io-index)" = "261ae9ecaa397c42b960649561949d69311f08eeaea86a65696e6e46517cf741" "checksum syn 0.15.6 (registry+https://github.com/rust-lang/crates.io-index)" = "854b08a640fc8f54728fb95321e3ec485b365a97fe47609797c671addd1dde69" "checksum trie-db 0.9.0 (git+https://github.com/paritytech/trie)" = "" "checksum trie-root 0.9.0 (git+https://github.com/paritytech/trie)" = "" "checksum twox-hash 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4f85be565a110ed72ed7048cf56570db04ce0a592c98aa59b7dacde3e5718750" -"checksum uint 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "754ba11732b9161b94c41798e5197e5e75388d012f760c42adb5000353e98646" +"checksum uint 0.5.0-beta.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4630460173a57c0af94b8306091e018025d988473f641a4af754b6cde980e1e3" "checksum unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" "checksum unreachable 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "382810877fe448991dfc7f0dd6e3ae5d58088fd0ea5e35189655f84e6814fa56" "checksum untrusted 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f392d7819dbe58833e26872f5f6f0d68b7bbbe90fc3667e98731c4a15ad9a7ae" diff --git a/substrate/core/test-runtime/wasm/target/wasm32-unknown-unknown/release/substrate_test_runtime.compact.wasm b/substrate/core/test-runtime/wasm/target/wasm32-unknown-unknown/release/substrate_test_runtime.compact.wasm index 736d1d423bd86cc4ca37926218ea43b7b5afaec0..ff19b2bdf76deecda9e138a4641b8e0854adc158 100644 GIT binary patch delta 6718 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 Ihg&B97nTz9Gynhq delta 7021 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 -> Self::Hash { - (uxt.transfer.from.low_u64() << 5) + uxt.transfer.nonce + (uxt.transfer.from.to_low_u64_be() << 5) + uxt.transfer.nonce } } diff --git a/substrate/core/trie/src/lib.rs b/substrate/core/trie/src/lib.rs index 68dacf2668..06598ed63b 100644 --- a/substrate/core/trie/src/lib.rs +++ b/substrate/core/trie/src/lib.rs @@ -428,7 +428,7 @@ mod tests { #[test] fn random_should_work() { - let mut seed = ::Out::new(); + let mut seed = ::Out::zero(); for test_i in 0..10000 { if test_i % 50 == 0 { println!("{:?} of 10000 stress tests done", test_i); @@ -439,7 +439,7 @@ mod tests { journal_key: 0, value_mode: ValueMode::Index, count: 100, - }.make_with(&mut seed.0); + }.make_with(seed.as_fixed_bytes_mut()); let real = trie_root::(x.clone()); let mut memdb = MemoryDB::default(); diff --git a/substrate/node/cli/src/chain_spec.rs b/substrate/node/cli/src/chain_spec.rs index 53cf074767..5058f0de60 100644 --- a/substrate/node/cli/src/chain_spec.rs +++ b/substrate/node/cli/src/chain_spec.rs @@ -191,7 +191,7 @@ fn testnet_genesis(initial_authorities: Vec, upgrade_key: AccountId }), council_seats: Some(CouncilSeatsConfig { active_council: endowed_accounts.iter() - .filter(|a| initial_authorities.iter().find(|&b| a.0 == b.0).is_none()) + .filter(|a| initial_authorities.iter().find(|&b| a.as_bytes() == b.0).is_none()) .map(|a| (a.clone(), 1000000)).collect(), candidacy_bond: 10, voter_bond: 2, diff --git a/substrate/node/executor/src/lib.rs b/substrate/node/executor/src/lib.rs index 2e9bd1099d..fd68aadd51 100644 --- a/substrate/node/executor/src/lib.rs +++ b/substrate/node/executor/src/lib.rs @@ -268,7 +268,10 @@ mod tests { use trie::ordered_trie_root; let extrinsics = extrinsics.into_iter().map(sign).collect::>(); - let extrinsics_root = ordered_trie_root::(extrinsics.iter().map(Encode::encode)).0.into(); + let extrinsics_root = ordered_trie_root::(extrinsics.iter() + .map(Encode::encode)) + .to_fixed_bytes() + .into(); let mut digest = generic::Digest::::default(); if let Some(changes_root) = changes_root { diff --git a/substrate/node/runtime/src/lib.rs b/substrate/node/runtime/src/lib.rs index 6dad8ca740..d1afc82c44 100644 --- a/substrate/node/runtime/src/lib.rs +++ b/substrate/node/runtime/src/lib.rs @@ -145,7 +145,7 @@ impl timestamp::Trait for Runtime { pub struct SessionKeyConversion; impl Convert for SessionKeyConversion { fn convert(a: AccountId) -> SessionKey { - a.0.into() + a.to_fixed_bytes().into() } } diff --git a/substrate/node/runtime/wasm/Cargo.lock b/substrate/node/runtime/wasm/Cargo.lock index dc519d15fb..355963104b 100644 --- a/substrate/node/runtime/wasm/Cargo.lock +++ b/substrate/node/runtime/wasm/Cargo.lock @@ -84,6 +84,11 @@ name = "crunchy" version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "crunchy" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "elastic-array" version = "0.10.0" @@ -99,13 +104,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "fixed-hash" -version = "0.2.2" +version = "0.3.0-beta.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ + "byteorder 1.2.6 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", - "rand 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-hex 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-hex 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", + "static_assertions 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -458,11 +465,6 @@ dependencies = [ "untrusted 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", ] -[[package]] -name = "rustc-hex" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" - [[package]] name = "rustc-hex" version = "2.0.1" @@ -840,6 +842,11 @@ name = "stable_deref_trait" version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "static_assertions" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "substrate-keyring" version = "0.1.0" @@ -866,8 +873,8 @@ dependencies = [ "base58 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "blake2-rfc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", "byteorder 1.2.6 (registry+https://github.com/rust-lang/crates.io-index)", - "crunchy 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", - "fixed-hash 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "crunchy 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "fixed-hash 0.3.0-beta.3 (registry+https://github.com/rust-lang/crates.io-index)", "hash-db 0.9.0 (git+https://github.com/paritytech/trie)", "hash256-std-hasher 0.9.0 (git+https://github.com/paritytech/trie)", "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", @@ -879,7 +886,7 @@ dependencies = [ "serde_derive 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", "sr-std 0.1.0", "twox-hash 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "uint 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", + "uint 0.5.0-beta.1 (registry+https://github.com/rust-lang/crates.io-index)", "untrusted 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", "wasmi 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -960,11 +967,11 @@ dependencies = [ [[package]] name = "uint" -version = "0.4.1" +version = "0.5.0-beta.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "byteorder 1.2.6 (registry+https://github.com/rust-lang/crates.io-index)", - "crunchy 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", + "crunchy 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-hex 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1039,9 +1046,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum crossbeam-epoch 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "927121f5407de9956180ff5e936fe3cf4324279280001cd56b669d28ee7e9150" "checksum crossbeam-utils 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "2760899e32a1d58d5abb31129f8fae5de75220bc2176e77ff7c627ae45c918d9" "checksum crunchy 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "a2f4a431c5c9f662e1200b7c7f02c34e91361150e382089a8f2dec3ba680cbda" +"checksum crunchy 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c240f247c278fa08a6d4820a6a222bfc6e0d999e51ba67be94f44c905b2161f2" "checksum elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "88d4851b005ef16de812ea9acdb7bece2f0a40dd86c07b85631d7dafa54537bb" "checksum environmental 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "db746025e3ea695bfa0ae744dbacd5fcfc8db51b9760cf8bd0ab69708bb93c49" -"checksum fixed-hash 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "0d5ec8112f00ea8a483e04748a85522184418fd1cf02890b626d8fc28683f7de" +"checksum fixed-hash 0.3.0-beta.3 (registry+https://github.com/rust-lang/crates.io-index)" = "4e71c99c903a9fe54baed1bc701b43daba8c6dc6d4aec89a32f667ab6b3094c4" "checksum fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82" "checksum fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7" "checksum gcc 0.3.54 (registry+https://github.com/rust-lang/crates.io-index)" = "5e33ec290da0d127825013597dbdfc28bee4964690c7ce1166cbc2a7bd08b1bb" @@ -1082,7 +1090,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum rayon 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)" = "b614fe08b6665cb9a231d07ac1364b0ef3cb3698f1239ee0c4c3a88a524f54c8" "checksum rayon-core 1.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b055d1e92aba6877574d8fe604a63c8b5df60f60e5982bf7ccbb1338ea527356" "checksum ring 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)" = "6f7d28b30a72c01b458428e0ae988d4149c20d902346902be881e3edc4bb325c" -"checksum rustc-hex 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0ceb8ce7a5e520de349e1fa172baeba4a9e8d5ef06c47471863530bc4972ee1e" "checksum rustc-hex 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "403bb3a286107a04825a5f82e1270acc1e14028d3d554d7a1e08914549575ab8" "checksum rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" "checksum safe-mix 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7f7bf422d23a88c16d5090d455f182bc99c60af4df6a345c63428acf5129e347" @@ -1093,12 +1100,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum serde_derive 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)" = "31569d901045afbff7a9479f793177fe9259819aff10ab4f89ef69bbc5f567fe" "checksum smallvec 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)" = "153ffa32fd170e9944f7e0838edf824a754ec4c1fc64746fcc9fe1f8fa602e5d" "checksum stable_deref_trait 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "dba1a27d3efae4351c8051072d619e3ade2820635c3958d826bfea39d59b54c8" +"checksum static_assertions 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)" = "c19be23126415861cb3a23e501d34a708f7f9b2183c5252d690941c2e69199d5" "checksum syn 0.14.9 (registry+https://github.com/rust-lang/crates.io-index)" = "261ae9ecaa397c42b960649561949d69311f08eeaea86a65696e6e46517cf741" "checksum syn 0.15.6 (registry+https://github.com/rust-lang/crates.io-index)" = "854b08a640fc8f54728fb95321e3ec485b365a97fe47609797c671addd1dde69" "checksum trie-db 0.9.0 (git+https://github.com/paritytech/trie)" = "" "checksum trie-root 0.9.0 (git+https://github.com/paritytech/trie)" = "" "checksum twox-hash 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4f85be565a110ed72ed7048cf56570db04ce0a592c98aa59b7dacde3e5718750" -"checksum uint 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "754ba11732b9161b94c41798e5197e5e75388d012f760c42adb5000353e98646" +"checksum uint 0.5.0-beta.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4630460173a57c0af94b8306091e018025d988473f641a4af754b6cde980e1e3" "checksum unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" "checksum unreachable 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "382810877fe448991dfc7f0dd6e3ae5d58088fd0ea5e35189655f84e6814fa56" "checksum untrusted 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f392d7819dbe58833e26872f5f6f0d68b7bbbe90fc3667e98731c4a15ad9a7ae" diff --git a/substrate/node/runtime/wasm/target/wasm32-unknown-unknown/release/node_runtime.compact.wasm b/substrate/node/runtime/wasm/target/wasm32-unknown-unknown/release/node_runtime.compact.wasm index 5021eb25b6991f9bfe5a70b669644c08464e5196..36962bb6a13a887a90a601b19437244038d86f68 100644 GIT binary patch delta 90613 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Ⓢ#OX;NGHE}I9?3JNoyVmzq-cmbMp|q=)MDIpCjk><=bQ3 z_bYA3@r90a;!Ws&09T6>@8M*$2crn^3!-seg|Gk?5U3!l6I*jQ!AfwYczM8vXJ_tL zdN;GsKnsobS8{?Pw1s7f)-Vk}uM^@*b%24h1r8`(Bm0`Q^njPNKy;i~EVf{zX4$$A zjnRPk4BKUwA5iM2VTKWNGlzC``o?As?Xj~CmBDU{bJzlYb>wn%uOZPK&O*DF@fL5Q z8BypCmNB$fw+7vUv>f^@c<~24wz0x)QdD`mjTO|w*DG*ZP>sDY zW48jFHkT$$(QxhMD$0{*m=1VbQV&x(9m9-^Oo8+k(%2jk+p*C5gLU!b8|ctM!l<2ZJkNGt|P_ zD+O?}WlgkI2MiYY=ks1bJxx-=-eR(|2f0OJ5mmfUU#NPlm46u5!MI-ll@NuB8ugxCOf=9@}aQd;cq(Za{rChm_$J zU~oXPqh@Sj)*;0|#jeen6GwBf+qKh3hsHSQ!*&q$81L8IP6zL!uF?GyL@v$@?Pfa< zDQ#8C#0cB4TmG)p3_wItZqv3=htZ6}cg#Z3ZSqEZNXDbcMQKT=4V6Tt#mnIO*EA9SEc@*?Qarq@@!!gF z!q7ketxRnsjB`bh)=fa1NaackO%tqYzLM<)*@_l6l>p-WPENB@Xy9!gA7IxaVN$iA66y|u%RtQnBi7C55H{pMC(>aHX^RzE`>s z3GewHho|VF^hag1G>>Y6=|Wyj1nv^T*Fi1RxN72)TnTuzP|+eC$ZLyq1mdQANDU4F zqT2Q!Wi2%u{;%?dL<%s~>&G4^0;NSYsJ8~`1q0ygA6JS~_07#XY_UmtWVvdO>Rw5` zq_jP^I{G+PM}4!^!Nw_S?NJO<=bQ%@__jbVrc@Uw#5YTc9+;fBX};+-qF>+zs2Ed@ zQaw@XElwql=L0mtJp+2#&CpWdyi4=~$Q#h1RkfrHqFxxWTbQn@?b{GP21~2JCsNpP zsyYNOIbDJD#;Qa=lzW9&?I0Pt5Z5qVOOZ%z zgeu&N;{27Eat9UV+-ZTgYHpMg0|2lmU%xGUxOQLEJ*Szp)mey)R1*v6FvTU}Yu?t!Q?J$R+Hm)7%nO=UA zlrYfC=g>=mcgXMj8nwkENIy^Ylmw)M>cv73tdUzu#8|OPa6y;I7QD9Fx#>77_%CYl z2bxza)k1UT@?JK-8e?m=KvTX_d+wVrPnM{-twaQ{F-p>RO&fI(>@wb4h>pZOH}i1@ zMgn{pfSdbD>F7Rg3xm#4Cq9t@`wcHeIh=)4^DM67(gBxgHcP0bQQ7mF?^J?&0nqP! z15Ur2QS2a~NphwRjpGX>&HW)E1med&Z;K>O^+#C5&cseDe;3v&k>}14d}0rHXi#}O zD?th9RdXkJ0tl|T5izB6*(YUc{Y<9X^~z)ze0wRxipuftyW=~a&=&% zf|b=!Ta);ddi(_M@DAQ#t_0Xk=b3bZ@;F8$XBc(jjVk!hkO$PzGN5vJ93=WgBbpm+ zH6l;v&i+&**9RPWXyd|(Lps%Y+NU~3aP^WeGrKC^Ya}x5nFl>LPl}Ll*kclX;7RBd z4zP-(fP~(oPMUv`uUjhAQN1Y_^hCr7A`~lxWIbqAye?MFq)N5357d}nMA&^`11i;y zV_T9_^RzmA0*K8Mq^;(lPt8O}!=#mXh+ST(M!_yHW8m^N0nF4$I8cr&e@-fU9-LpQ zZNQ(M?xFN&q_StZe~h>Q23qMFyQ6VI=!&s(#sGS+&o3Binkb~%B2yQPud9Jx!dY8@ zuT3LR-&_MyKnwMOw(b-(+&0fTs7hiC0d}cR?KvjEaa|sOljkKV@io!h!=Sk;?8egF zaUdPu1F&0#)(qzWJc9MYdrlGdrB5AGFim1!oM{q0s%9rushwp$O_l7NDz(S3UpzTA z#pdLlDm7Zl=Y+MbRwo&ixSa=IAPba3LvAys{5Mh}f-&8Tqu})B89qJ$i6keYNc%m; z2_eR=s#be9Djak$lJBA=M`viLUnASmW{N}5_6d5NQn6(N@JcJo=3sU79doYPi#a2{ zXhYJ)6gb^QFR6p5;pu|%OKu|i{)(d-jHD0^LMYf(LXE*8S}~2TIvuGGZ&nTO@(^_S zPIS4Nt@5jZ#x@hmFP0L+ka#2_%dyzg0?9zC-11ML9c_)z+xB4M&t3L8^Mb z)O%EDYrfDj6w;3X8Eg&sw z-lc>|POCUjN@hf&g_*ERqL;nbN{Q#GYwOXqDmcMkpvZ5ip8=R4V7uNH1fQ@^kK3bg zSsF82dOeX(?7hSXvS?ZULh@Xa{fz~K^2k5>5+{fA&h~28N*aR8&&UoU5#wU5JE&cb zYt|15r$5`6;95V|CiR@H?x6OPD%lMk)Nx_Qzv}CNjZ1#CAM)Ed68x-(4vaX5dl4Cw ze=VRxN45VT2V9&W=HNU6NnTH zG5>oT8-f=zJKpwp*ZXO>E&a&%)A*USL!U6K9>qR*h*vMIW!KiLqrA9^;@x`nG8`OE z_f>l$xU4TyT`#xs!n?m=t@^16*?BQ*N3YT-yP%)SUwzuyPrW2RvZ?*i^>RQcFyY}8i?5+OlJ>|`>;rQt4k}C$Ny7%9ou^j`{o9V?6YoNNGUUm3tpgNh- zj~S$%Nr&j@MM3u0LF&kEE`&<7+2>8@bQK4Gwe_{H*{}w+OUJ!3EPbnF}2I?w*5ezS5rf>{p`I!a+kb5EcYoils^XpZhwdPM0b@9#4Zib^2g+`4Oq?)gkJuK?41it-d-`T_yR(TPx=U zmMmQr$Sgm@TIBJtF~_KbYFw>0EL*X3K_<0oC0l=ts}`;%V($!ZtO8&FUSteP?K!<32MLkUpx<2o}jMt{&MidEcKR( z;zRl&tM(|K6FvPXIk}amtM7Y@7RoJHpw25Tn#Dd}sv5;}!pp!SJ?x}q>IrP*32L8T zJTN9LS34E2b5Nt&H8*{^y4w4zXGvP6j{n77$Sq%`?v{QrII~u(^L{z>*Q?d_MaP%h ze5QJLDLZC^I-XsAo|-5Q^znJBAr;R8erA-irq$|%U(uVj>X_oSO}$v%t>o%9sIM1q zj#X|{f0uh;qx!YR&R?xg{KakNs;0=$w}8GpC^mwI?3Z{kFXT+UI>%;j!ZSeRS1dChY_|$I2>UO!sDIv zO$bjyd>#JUc{~x%VI*`xeoD#bOHLZM}Zm#qbTiNNp5}#)=+xnw4`2gVh zHTpd0R`c&z+3pJ^6vC=3kW)K%+y;=2$liyLhJPIX>hKq3Gji(E+ASy8z3&E;lp^_4 ze6R_<_WT!NIl?XMWmbDgQMT`CwSBJ+u9_&9e)mqcyI{vWo+@_Wd9}S1U_E!JxMJB= z?>dzB3NVC)sGzLZ01w3T-(!FWvYUTyc+u~Mjy_H%1QcK9^OQNz<~cr(3ZeVv4z()l zM0l2apvN!wacokCGCe=&p(renvEJ38PcaLql>gqlEZQR zardBSp~Iq%p~w>hA=uFc@wtF)LmBuL!cHoH-93iayMP1FC}=e80)BLrjj_j_c`L`l zBaBxeBy3;V$zB)&PUH(j2)HUX?HM@GMfL~itAXP8A`BxG>7v*|q$iLr*7Ij*W(eY= z@kcmV+}Vdk=<)oui_dck!XNNQl&&Lvm@C~2U`lu38=DLGoD5MxdnbP8c|K1M6ew)4 z2@Q=$`erPt3WQBv?G?BcA*DZu^0?u{vo+xJ#3^*rJ7G2{eHzlod%Al(n@|C982Y_~ zMDa}VnQX^ywSDiN8}bv4YWeRYfYQ!pOZmK1qj(~RaIj0lJ8LpZ|Wqkolco2jA z{ptAugpel&eoB$DBMN%uw9}X_fc>D(N9gxF%Bu2dkVLig9P|s-yyC6On;T4GM z2yscUrzgVc2#MwLUyuBX|FNK*nkzUi8U-j16%-H?-4g&}pp-e(6&LAMfETD9?aC+k zQ(SR@bg5^a_t^+L9VCcKW}(1ggd`j3R}skrwgTUxk&QwAY@X}!#PBSzE!JWk(nxyH zuLKPd`HP>;zI#o(IzJ{chH8Me6>tb`(B89(fc7bF!xYK(hcPWkLKzcbkg9o&i`f^91j}TI-6yHUgHE z4uL`UGPoLfoty?Y6)AgPK|3}pY1~o-H0OX8YsTH=R##c4WzSBOCF~a~JM-*32Jf=V z+GHhw|AfLv8=t%IHdn)#o;)>I8brhB4e_z? z1LJa(?RZh`+;%p=+$&%n;$Gsz?DsFIWt{O$>Fe|KLxcaV_j#rvd;?)$gc}f&w2C8~ zf$;M_KF<_{Pa+(I@D7Be9Pr!i+GRZt_0MYsLII!oGw{=qCq{YvQlF={Q_mQr3(hX; z*^RnKqkT^qGD!!cU$F)${aFADbPL|v9%&~cPjq}S;$sp2x}V+fa|j1eVf@^JRCHh< z@~0BO8azxus3D}~LBB82DM1$$=RAN`ZAZ}@r3%{q8qf-x_GhTf?rZ|#KZs;8m#f&( zDO^7;YcsZPI5z}--YLX_^U!XVNRsqjc4+9??;0aiu8SWriLFwdLLK%+js`^t?Rr9Z4#&iq4IqS`3~4b|Fi6 z1h%_sqs-S`alr^1;Y|~4W!JIxa|UTbavzIlA!km-vx<7oiTFIz5xx|G=qH_`J2Lts zq~A(p7FIY5X+(tdn}%o6_z8HXF;yWP&U0IGS<#^%F(@%7pW#`Q|0;~-MpXO?5;>K_ zML}~fe1uV;2Lh^j`HhI#)O!`u+{>&m{c^z3fXrET{UU!W(g@T0kWZH3p+-E6$Aj<% zh;<%|+ao#|d4#gQL+#}w+;m@I*wpa@Lu|2ud)7T&5uXM)s&6}b*TWTm(uoWBJCQdS ze~lvHeng0QY&yms;XZ^^k#I(gaN@$5v1qt$3tx_q`27$xAjs=`q!CFIhUn)OAGm?p z&H05u$OBgZK=5TMT*bY8MVDF^fYR)UcDPS{2+~ped#&1Ts`<2sz?{`Oz@GxKnPoc7{ z5?CG7Lb5{<=t0PJ&+1nwO>z1~k=NaR^aNaGog~kR$QR6%(u8SN?}8P0PXgABO=0rs zMPR=_t7yHw7VSK8w98Ph8#9e;?z`}8$BI;Y1wh5nsJk|3Ix{c^*c3E2m62R}FFp;u|e~7r40^#nVhGrEs{PZZ>oVyue z0Qu)5tVK8mAt?ZdNBTUI5#EDv3c|AxlANA65%RK37}_SMTV&adNn!X0!gs}b{(!^ZOy(6y}0j#+KdZypqfE7x_S%4MOMR}qzdZynt zSH0^1D~b81%tGKt0W8qRfeFa@6~aFKD`1_?6<$;0rl0At;D*9-I0c(6gm%FX1nNax zgkq@*1!EsNN6TVR zZ^1K(dLix~L|hDL^nLkfs^>Pu1(qmI3*Yl73W$+BTu`9q{`?dO)R%$}iU!&W{Tk-%~ z{(_;6Wdh|S6 zt)mD0db-NmDLAZwd_mNd_Vr}jKQX`sOZBdrYWwhaBcxfXLwFn&KuGm(pF-|XkLNOk zA%t@g_C=UL*d1Xjgu>VM6UqoS)APan1Od!5194!{z6WIz&0@?rfxs zbt86YDcw398KU>1qOM32Oz%gaOe_p>JmpEG4M*W22#KX!g|I)>hTo+aguouf?VbN# zZ@Z8yX76ejQu3gE4-^5t37}%43AFi;K;x$c(51)Q&cfGG!T{u*2nEt2$P;}FJe;3x zsxgMRV1*Q?-@zGq_^H;7w^ z`%bX^I)c3kx6Zvtr;fgZkY?&{2t{YzXMWZ`;_f);XMKwVIE+wGjHJ-ReM154VZaK~ zxea-uLA3ALUI62sWP1fG9DITWjz;zCk&csxJXV%7W~V1=dTh7A;f zRZlKnZ+#Kiwty82-CeI<1U7IK*jN$R{spj+lbQ7{9OEO3z>Wbdk)s%E1aZNy-Cl_C zMaoWc+7V^ln%)=Cg@yV#4P`M-TB`YmW;zZ1uflhsuwbJCHjA>wCPe+?k&|~;ao9#* zA*^Lf)xC3l9uxh%5Fu%qry}fyum&Mf_P^)YTxmZ-;!3|i)!wlX%HV5=ld{$~bv%mT$j+{QXCGlGn?#rtw?rGVF{IHWh zZE3!4ce!1FA>P2bs9Rj`Mur%PNMDUKntQ>?Dxka*hdUpCf)>XjO%VEC48T30k6i;o z5zjQhI!ve0Q@D+KumIR?DSU%Gp)ycKHQV!;68w1&DyN0=CPMPk`~hKSgj*1{M=0Rz z5aSmNUW6F{4gjFw!-b>WiX}~SFbyHmhoFN489OcxMC!=z=ztk?VrWDs@)1$TJd6}ZXuC#)pJ9UvOADZDoU}ke?p#cyWVE^ zk=Ski_dWm!O~ne2Jxar(^k>Ky{timB58<)n|Bdruhmhx{7AJ2b<$aGl>ah4Z=oT!P zl0|pac`awLhV3|vV`eY?TP^D(iVp>h7$c=kn#Tos-@Qd}H5;&QWg?4scd~06Uw1)M zEuSs2&wSm5a3taxgv9?lAe@Zw#f7${nvIZ9`Upbu7Y{^8?hOTDZ-g%|uocGn2uUFA zLP%7BPZaYb-=EI+c}8$ahle@Hcnu+m%-IOZ!#x}!89m>ktHe;AL^v4X#R!Sb(y#yG zJXNlLHotHvZ+k(U(qe!Yi*7ISOWgMEfL(cgTFk>lR|7MUFVd;9MXtD5v9ka#=46#C zpWxRcF8IF)=QW~$po!aD094?hD=zr^YQT%lh?3`8cBl*DqGDkfTl%?T+9}Wr&!VU95e!1Qm`|a6P!V?r z!~n)DvtQJ>3E_OeC{BX}-?SuOkLXb2*-(W}Lgs4-X*~}>LBZ&Yq4Z)@LYVmg;WUH> z%5_IbKX(JdsnHK`CnB#JAua2tKreKD#EElF%kwhkLa?VoSLP|tx1{p70V`;sP)k}= z0Q)Img)m%Ikhg}%?e@_hoGt^fAgr~>6qHVR*SHF|RFyoQr&rmkx=6nhaWay`@q`74 z4?|pR`-sqs^phtbLnx51BO#7BQ9Lmkp=uSTBg?bjwPQeWp=t=iqBOy*j-oykJy{@J znpB>Cm1l!sxu7Uk^Uu97b_`02Idzw{>xCl#`GjuKOZVvyw{7W^wI@md&qHCNQV~A` zaZ+RHC$`P#xmd%Sex~7@kk^9>;@7gQLn!Xu?71(tq|BBD>`L6PuAK#VH&MCa#X#Of z2L#i&%UwUU?=B!JdKU$RwY$Szpa5R*`GbHL0_5l5MJL4GF(1Es^H^liINfu1wD;ut zoReoPZutM8Lqhlnra^Tc4|uW8^*s<2qDPcDZBI*7rT{D)698@jJJ$s(UO*FTvoL%a z^^8FMw<9FJzXBn7)o(v%ww(|-x1~9=3~{o@pTK+&V;AwK5RV`(*7jk*k@ixDKbmW? zwt0H)kXJj?TWLlzX+5fE(=k1jjAq#CQmwZy84IWNcr+G|Mk1kLFwX8R)$}SoqGzpG zOpm8R!Av?H@62xMuk~SnEyF(}dTAZ1g0YltMY2Z93gQj~Gu(w;FKZL4f{|1*5>4rm zq;5s^pw*Qbiq?+3T&k6IoRd6zRc7$udC_pjNa^WpI+@C%c(5D6^s6?_h#rhsW;m7# z>&bMmyU7|tT3aexS#3lOD`=*($#5{7&7`vdS7v20o6cq;!BE_?Qb9{+TNUlP>X4C* zCJj9tOB&&D#ERFAW1GsgZfw4)b*#>W;#nhP1kG?XYZ#eykD)xX+qfA$2M=D6Svmh4 z>SzS$NQP69j2Xp$mdW<1TGy&n77d|J8bvCSw0f~uRjmuEG(z!I*woEnG?E zlxahKk&tefX3~i3dd$+ZI-6Feomdr3#X&MLD;kc)4I|RvDp3_OaXm)bj3v`n5R)I& zc`H@nOgt9OhJ(7Ho5^S-Y}m<>B(Q0u)3I1AYKCHwpq(6xSwMU!l#ZFHpn*xZljG4; z1f*o8b$lGn+1FzNh2Kzrg7DWo(@_@G;BuCu;;X*RO`XIR{_bhK%A9m!3eDjS!AuGmNSS5~be2kI;wxL0ZC_Wmc$N3vKLATKMLjgBZb<_aH( zHIm6@Of#J_W6@-URn=$_^f#1>$1tooAIJ!bU!rW&oC9|e-pU|P>)Bhhd;sfWxI`=CY} zRfXPVv+0Z;iGtZABV&itFgmkoZMB-}D5x_X*Nu26ZeXRv#|>row9~rPW>+j-JZJIJ z^cjn2g~vd9>0~m7^=f2dhB^L9sd<)WRfn<}T@Qip7{RQLDVi{ceb7N0&Ms}I`F!zg zG!%_x4GT;)lr|#l&UV@()v2JKPDN7DtZBu;dGv|rv1OgK5$yi<+CX0fm&Rapv9uM_ zV@b@$=k2vA)sYz3NhTRG!`w%)g$E8R<|mosGxLSfGB;qD8A04+_P@L6b-+6pM$$;Pb&KJFTNO zusRk2#|U27sjAX%0lHhvT zZ1ltltjezi*qF{*M_&-MlgUKWVLgOVM^kJ`XRX#}>SX~$UHhXW0*4>v$nej-(GJ;^2Xe7wicF~4c z$Ff-~OIP=R$;Yx0LLm5b)5GIKI3RxDj12A2dC zXVMWY*kCqmMzaeOB+Ysf%2@3Ht=@-aj2Vw(ZN<}ATPYT<1&w8lOvZvl2!lZ5sbGd} zuGJcsfX6FGNZ>ZuUN3bbTl2+*}r;dGpgcQ6G9726r9h3v^s-z z@2wqMrDL7Z5Fk;Kv0yyB+D^7W?~yQsE?8B{3TMx>lR-4GEUu%9gLi_bCeN~yBPlZt z78MJHLON*PI-4i^z-*#mx=`#$n~FzRx86|Pu#S>C1WG8Q18HXVT)PefyacP?0+R|w zKzM6NSLLCJsoD1eYDZlF)Sn#Vj*IIin6iz`IA^xAI)G}CuwbbF-Ywo z^p}(oi)O;%6nmhLHnCa#$F-Yb#q*gMMj$R-osj4pQ z(t0i855}Td2*3>L3W9^_7fQ#o<#QmBJNE-4*}PQqu^xSi0Y%MNI39^v8IS_#hOI@a zA8Zi3Cz7%PxVKS4^lo?H5BBgEMjVEX- zo8M21`!nHGHi=mV?*pb{p-UyM^Gs&@Dz$di83XD~2I^5fY$b!ibs}?9nby_^E*_4? zAUwiYV5zvpZs@PgtAhS(>cMC{8>Xwq%;e?l>4BPAWd);<>!CQLT09tunZIHC251={ z#9SOGL}q18_R0V)>rcj^8%E;s3|4$HZ5SJ*)wb%kWS};}XQfh^R4igf!HUzN zRE9k@Pz(D3XXz%i7U;&oOft1mI+HaG0$KwNP-9;iq;>XzKC&V73Q{_o3}vJ2yg}Mx zKh*zBB$u-Z5z2sfKzH6`Xct$dL!oRWlme^8YBJJM#;!E9 zwU|nS>-w;gP<=?*ExA@k(W-UlVJ-M0+u&)Q0sb$ zTQq(h3JWA3mNAqtEU({6BiXhP`0d6J1gsTCk76({;*cgr)?oLAw0>3LU?>7v6^cio zp+RZCk=;){Sat^KP0+N>sFe<;vr$^YaaL<;W(|lOj2=7-I+X?9bF*}n#Fn1|b@r94 zb|N>|{1F3e6?`q52760I&8^a0d(A969VQl8bUrf)B{rEfLOPHZi>BFWVJ+aZ(y*0M zQNu`rHxsI^2x|@1u@G*%3xR&1_NLSE=C8|ZLvYD)z(t~=?NW%t-2k&P4qgt@N zW7$D;gUdnrgr*im&)EA>ZLlABK~tGb8q8RS>iBzU0=3njoftz;lh9)zRMNT$rUEj& z*U9acT4Ak9&6|^2y6kLp7+elKBa#7Mj6!?2*p8UC+y`9>8mWP`OF|hsdm^qatAuhM zgj7pGa2sK0Wjo^9l1iA}(Nr{!+XjOeS(*(StX=Gb8j_6#vtSMJC?ur8UK4@rMyH_U_iwrvQO08|t+2=N)wQ+Tk9hwWu4 zmfYBybTAmTz=T8Lh>m_n9+AMD`La9^hmrKvP;H_g!X|~zqM{HiJ|p(1bS;}cT$@1L zqBYw(ObgWngK0Apg`pn_S?QRO%t@Cx)wDWBJK3)%BhYuU>0l(Au`*WjvBDb6Y9j(m zBdx=rh+>T;AD7118e`w#V4=Y{lm!@rAQC8QVVzAGu5GB%VL`!OP6kOkGY#_z={HWJ zZANHwstn3cg;G&SA2S*?w=-#sb~>Az(Bvu|(+r~~19dD7uR-R?7I{!Zqfs)rVT-3S zPqD8@YE!FVCF&-$HyD&y&ZhY^n?6eG+Og120CgN%TD{_f&Czu6jqJ(j4Lmy16x39+>E5-(7>K`=LLiCX{1cdZ5T6a?xMWK@aTl~DD-~_ zamegs^f{jF)6+&Y0$n_b^$N;OZyuv9slqCNbcYyE!Z-~Y#tU{8X39urzeft!QN_U*VLbEdT-jXuU;y2Nd17mmlx z5UZL9M~MaTgh_;UXvM-{?(Ecw;Hzm^DqOpOX8_AL#WqaThWkV5B$S>Iv8@dFYy3^= zShi`R7O5f5LVh~b3mFv-VIhQA-%02e+$K;G!G;ZpZZl)P4F)-25{5!*mp>SVxex|3 z37c8?{$lTdY4L&T^Ry~|GGoR~c(EW2!SYj?cTtw-a+M8~VrC=cQX$*eO0&t6p*$q9 zJfMFEVXtQ57!kX1vNqUf#G%Jz!dW8>hXPnD`(&~<(hv6;JRd2jTkvm%lh*q{^R&rO zsgIwc_4DgdBM#Fo86+VBkKuml6l&eiem4co7|H@1g~@Onw5rFg1Jaj#zWuD#RP7~S z5R(eT;yP9nq#H`J_or$@V9>@wnT(#s)Y1~QKE#J)mTHsO`Dsmq1wqDP7%CKGB~($i zX`1$URWylF1c|3Z@I}qkC+wE#THmhom&{)^-&!<(CD9&q(I8~Ll?02k;HzU>r)yCk zEQ<(Meg=(V9H|)lWV*J+hioh<2rQ^HnGAef8;{e*_+TP|{gcHPg_fNRvyYF{c2%dL zZ$;pSjAE|gYe^oIn6yNz?~QJAU~XV;Rn+%YyC?)b@OT{9GJPdAAZD; zo(aMPf&hyoBi~4;vSk@3*B69o5DiA)<$`Pqg@bJUiP|Dx7;Y!)R|g^ zRFjHkU@SwCjY0WCKmIFivu2lc`$Z?cRXLh?7&G{rOzB8%MPBb&8!H+Uj&mNl}*Db z3=idO?IORP&R9kWYEC)}sTmDj;=P0=29wwARA?AC4#o{au<%n*p<%H@a|p)_w&WCT zJPa0Sb!H4i8isQ;5?SZnKm~iVLv!Kmf@7(Qbv{)afTf<+p}N7B2=)b~>M}3a26}Bi z4Z7CT?X|Ae&`0rq3|3l5k42J~AK8PD5r$JGYC)AUKss?|ou)1GK}UhgousV;IGm#< z``|R~{7M*v8CbqCK!cm6*^)WhY(Eye1p^O`@eC|dBYlN;G{9<29~LXMgnuSEq)7x7z>-Q1;OFXY-p2rHo4BmFrNjnoP;ieWdatcqZ7%{mFzD| z@JZwp96}I)U~uq38>W7h_cS84@ojD8QIC^5(Sr79q~ZBuIZNy54~E0(6vSf?K4&bS z&^6whY3eTRm|D7c@qFqaJf>kC7B%K02#i7JO={Qrjby}xnUmI`X(i!t*z5&aqk|aQ zsujea!9&qGm{HkK1g?}Q^DZTTUhIjKHn@s5QgkQ{L5PS5)RrxL1l7?@47x+gh|;Qv z#nRV#xh7o=dl1Gc<{+6QoTje#a>q^;a7XSctUj13DLwmJRy$YQz{%SeOTjMyc@@Pr z0^D3lwm73558gwB3ti5zzyRZEwlAZ-RTF{F6Wbebc|c-j!{M8}8}mlPLO+B;3e*kk z#lkT6jGHl7Zezn<=;u#jX8@Ro{t-_l;a%P8J(0vzfA;q2T4z6|DFbi!i{Tg_n;7)_#aNRuZ0UvzoFc|bu7+VTh z79n=>e65cUswUj`agZmtOD1KoE9YyqmDxD_esJca08CVa?VPU})lpiwa6!T81%4B~ z)7!unEzml2ST%p?63iG}nb=2w`v_|p1ev^x&7QCIt^y^(4+5PCKGBS2ChunP1sXoK z2d_2lAq0&W)ZUPF4_mMRKK6_bHxHDzEL1`hDi?cq0R$pO1}7|>z)?&I6jau8A&gZE z>@XPxt?GKjfIr|q?-cge1zJD$(L$}ppN5wLO9@taGGt(7-S3@b=bDSO>MCqkq*5`6 zdzfc%B1itf{<1(D&~^3FRhbnl=fJm)0YS&c3W6>`bO_%T+q#JCeR4$^2DEuBInV(+ zvl3^i%vy(J1hZsA7Hbbz!pUW(P1xcFe21AJ`|o0ST#``h3|I@W(=u5j8-5rw z%Dc_A2snY@3B=xx9s}9O(vNt@*tuMbNMl)oL!w?dhhqkK^b)PM8Xh9pLfBO!$1%1U za$dG$pce9FV02)Gq_c*eNx|pNrY+S@Dly=iWcMxAW>tk^w8ug|9ndtkh5pF?uvDAO z1$+%S4kj}SLjzW*Zl<1SLDJRW9dO}6rv?D{YjV52qWpk{6BymJAco;le$tzlbSfKo z4(#J)%R#tVn2}~M3C0YcANI@Grsdi~_za*=>sTq!n1iuQ=xOiS&2my@eOG8x;Ddlz zgC+&*HJVMr4|VAZt=110G0bGJgs=`*L(JIe9VOJsm6;W*N$&uoh>*dajRa{0v;VBn z!j<3(SrdK*SPk$zr&wYoW;hBZ$b@zh&O%gV^&q=)r8de32Rt^^VEhrUgNe;PUa9r> zfkFTaV;h1l3@T*ZS82oiKzJyYrEOm$i}C3%fN^u7ebFlLSGre%wWq1bb`H_R~_kQ>)K#6FvX#*fiq^|M}Ezl z*Q&a(8E0v2{b(1`5!*&E=|~a!v!FFNAG%u0UtyTJiN$jITrv$%%3osae(*@EW>luvE1kFSK!mVh& z<(=*#T2AuR7he<#a|~8F2n{5t>#Xt|?HE5C7%)qt*pP~Y6r!1TL=U-Bl$YLgj@H@- z)r~ed;ChDF1dNv5a}G2;I8q^3!yuM;3f`A6>wPZf304D~WaNH=K>}{gR-LN_eb}l9 UVpAXr%N5QoY0s`I_x?a)sT321K1VKOr1fvwL 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