diff --git a/aptos-move/framework/aptos-stdlib/doc/big_ordered_map.md b/aptos-move/framework/aptos-stdlib/doc/big_ordered_map.md index 019e1f3ff3760..5475eeecea2a3 100644 --- a/aptos-move/framework/aptos-stdlib/doc/big_ordered_map.md +++ b/aptos-move/framework/aptos-stdlib/doc/big_ordered_map.md @@ -21,6 +21,12 @@ operation touch only few resources once it contains enough keys +TODO: all iterator functions are public(friend) for now, so that they can be modified in a +backward incompatible way. +They are waiting for Move improvement that will allow references to be part of the struct +Allowing cleaner iterator APIs + + - [Struct `Node`](#0x1_big_ordered_map_Node) - [Enum `Child`](#0x1_big_ordered_map_Child) - [Enum `Iterator`](#0x1_big_ordered_map_Iterator) @@ -345,51 +351,51 @@ The BigOrderedMap data structure. ## Constants - + -Internal errors. +Trying to do an operation on an Iterator that would go out of bounds -
const EINTERNAL_INVARIANT_BROKEN: u64 = 20;
+
const EITER_OUT_OF_BOUNDS: u64 = 3;
 
- + +Map key already exists -
const NULL_INDEX: u64 = 0;
+
const EKEY_ALREADY_EXISTS: u64 = 1;
 
- + -Trying to do an operation on an Iterator that would go out of bounds +Map key is not found -
const EITER_OUT_OF_BOUNDS: u64 = 3;
+
const EKEY_NOT_FOUND: u64 = 2;
 
- + -Map key already exists +Internal errors. -
const EKEY_ALREADY_EXISTS: u64 = 1;
+
const EINTERNAL_INVARIANT_BROKEN: u64 = 20;
 
- + -Map key is not found -
const EKEY_NOT_FOUND: u64 = 2;
+
const NULL_INDEX: u64 = 0;
 
@@ -700,7 +706,7 @@ Returns an iterator pointing to the first element that is greater or equal to th key, or an end iterator if such element doesn't exist. -
public fun lower_bound<K: copy, drop, store, V: store>(self: &big_ordered_map::BigOrderedMap<K, V>, key: &K): big_ordered_map::Iterator<K>
+
public(friend) fun lower_bound<K: copy, drop, store, V: store>(self: &big_ordered_map::BigOrderedMap<K, V>, key: &K): big_ordered_map::Iterator<K>
 
@@ -709,7 +715,7 @@ key, or an end iterator if such element doesn't exist. Implementation -
public fun lower_bound<K: drop + copy + store, V: store>(self: &BigOrderedMap<K, V>, key: &K): Iterator<K> {
+
public(friend) fun lower_bound<K: drop + copy + store, V: store>(self: &BigOrderedMap<K, V>, key: &K): Iterator<K> {
     let leaf = self.find_leaf(key);
     if (leaf == NULL_INDEX) {
         return self.new_end_iter()
@@ -740,7 +746,7 @@ Returns an iterator pointing to the element that equals to the provided key, or
 iterator if the key is not found.
 
 
-
public fun find<K: copy, drop, store, V: store>(self: &big_ordered_map::BigOrderedMap<K, V>, key: &K): big_ordered_map::Iterator<K>
+
public(friend) fun find<K: copy, drop, store, V: store>(self: &big_ordered_map::BigOrderedMap<K, V>, key: &K): big_ordered_map::Iterator<K>
 
@@ -749,7 +755,7 @@ iterator if the key is not found. Implementation -
public fun find<K: drop + copy + store, V: store>(self: &BigOrderedMap<K, V>, key: &K): Iterator<K> {
+
public(friend) fun find<K: drop + copy + store, V: store>(self: &BigOrderedMap<K, V>, key: &K): Iterator<K> {
     let lower_bound = self.lower_bound(key);
     if (lower_bound.iter_is_end(self)) {
         lower_bound
@@ -863,7 +869,7 @@ Returns a mutable reference to the element with its key at the given index, abor
 Return the begin iterator.
 
 
-
public fun new_begin_iter<K: copy, store, V: store>(self: &big_ordered_map::BigOrderedMap<K, V>): big_ordered_map::Iterator<K>
+
public(friend) fun new_begin_iter<K: copy, store, V: store>(self: &big_ordered_map::BigOrderedMap<K, V>): big_ordered_map::Iterator<K>
 
@@ -872,7 +878,7 @@ Return the begin iterator. Implementation -
public fun new_begin_iter<K: copy + store, V: store>(self: &BigOrderedMap<K, V>): Iterator<K> {
+
public(friend) fun new_begin_iter<K: copy + store, V: store>(self: &BigOrderedMap<K, V>): Iterator<K> {
     if (self.is_empty()) {
         return Iterator::End;
     };
@@ -896,7 +902,7 @@ Return the begin iterator.
 Return the end iterator.
 
 
-
public fun new_end_iter<K: copy, store, V: store>(self: &big_ordered_map::BigOrderedMap<K, V>): big_ordered_map::Iterator<K>
+
public(friend) fun new_end_iter<K: copy, store, V: store>(self: &big_ordered_map::BigOrderedMap<K, V>): big_ordered_map::Iterator<K>
 
@@ -905,7 +911,7 @@ Return the end iterator. Implementation -
public fun new_end_iter<K: copy + store, V: store>(self: &BigOrderedMap<K, V>): Iterator<K> {
+
public(friend) fun new_end_iter<K: copy + store, V: store>(self: &BigOrderedMap<K, V>): Iterator<K> {
     Iterator::End
 }
 
@@ -920,7 +926,7 @@ Return the end iterator. -
public fun iter_is_begin<K: store, V: store>(self: &big_ordered_map::Iterator<K>, map: &big_ordered_map::BigOrderedMap<K, V>): bool
+
public(friend) fun iter_is_begin<K: store, V: store>(self: &big_ordered_map::Iterator<K>, map: &big_ordered_map::BigOrderedMap<K, V>): bool
 
@@ -929,7 +935,7 @@ Return the end iterator. Implementation -
public fun iter_is_begin<K: store, V: store>(self: &Iterator<K>, map: &BigOrderedMap<K, V>): bool {
+
public(friend) fun iter_is_begin<K: store, V: store>(self: &Iterator<K>, map: &BigOrderedMap<K, V>): bool {
     if (self is Iterator::End<K>) {
         map.is_empty()
     } else {
@@ -948,7 +954,7 @@ Return the end iterator.
 
 
 
-
public fun iter_is_end<K: store, V: store>(self: &big_ordered_map::Iterator<K>, _map: &big_ordered_map::BigOrderedMap<K, V>): bool
+
public(friend) fun iter_is_end<K: store, V: store>(self: &big_ordered_map::Iterator<K>, _map: &big_ordered_map::BigOrderedMap<K, V>): bool
 
@@ -957,7 +963,7 @@ Return the end iterator. Implementation -
public fun iter_is_end<K: store, V: store>(self: &Iterator<K>, _map: &BigOrderedMap<K, V>): bool {
+
public(friend) fun iter_is_end<K: store, V: store>(self: &Iterator<K>, _map: &BigOrderedMap<K, V>): bool {
     self is Iterator::End<K>
 }
 
@@ -973,7 +979,7 @@ Return the end iterator. Returns the key of the given iterator. -
public fun iter_get_key<K>(self: &big_ordered_map::Iterator<K>): &K
+
public(friend) fun iter_get_key<K>(self: &big_ordered_map::Iterator<K>): &K
 
@@ -982,7 +988,7 @@ Returns the key of the given iterator. Implementation -
public fun iter_get_key<K>(self: &Iterator<K>): &K {
+
public(friend) fun iter_get_key<K>(self: &Iterator<K>): &K {
     assert!(!(self is Iterator::End<K>), error::invalid_argument(EITER_OUT_OF_BOUNDS));
     &self.key
 }
@@ -1000,7 +1006,7 @@ Returns the next iterator, or none if already at the end iterator.
 Requires the map is not changed after the input iterator is generated.
 
 
-
public fun iter_next<K: copy, drop, store, V: store>(self: big_ordered_map::Iterator<K>, map: &big_ordered_map::BigOrderedMap<K, V>): big_ordered_map::Iterator<K>
+
public(friend) fun iter_next<K: copy, drop, store, V: store>(self: big_ordered_map::Iterator<K>, map: &big_ordered_map::BigOrderedMap<K, V>): big_ordered_map::Iterator<K>
 
@@ -1009,7 +1015,7 @@ Requires the map is not changed after the input iterator is generated. Implementation -
public fun iter_next<K: drop + copy + store, V: store>(self: Iterator<K>, map: &BigOrderedMap<K, V>): Iterator<K> {
+
public(friend) fun iter_next<K: drop + copy + store, V: store>(self: Iterator<K>, map: &BigOrderedMap<K, V>): Iterator<K> {
     assert!(!(self is Iterator::End<K>), error::invalid_argument(EITER_OUT_OF_BOUNDS));
 
     let node_index = self.node_index;
@@ -1049,7 +1055,7 @@ Returns the previous iterator, or none if already at the begin iterator.
 Requires the map is not changed after the input iterator is generated.
 
 
-
public fun iter_prev<K: copy, drop, store, V: store>(self: big_ordered_map::Iterator<K>, map: &big_ordered_map::BigOrderedMap<K, V>): big_ordered_map::Iterator<K>
+
public(friend) fun iter_prev<K: copy, drop, store, V: store>(self: big_ordered_map::Iterator<K>, map: &big_ordered_map::BigOrderedMap<K, V>): big_ordered_map::Iterator<K>
 
@@ -1058,7 +1064,7 @@ Requires the map is not changed after the input iterator is generated. Implementation -
public fun iter_prev<K: drop + copy + store, V: store>(self: Iterator<K>, map: &BigOrderedMap<K, V>): Iterator<K> {
+
public(friend) fun iter_prev<K: drop + copy + store, V: store>(self: Iterator<K>, map: &BigOrderedMap<K, V>): Iterator<K> {
     let prev_index = if (self is Iterator::End<K>) {
         map.max_leaf_index
     } else {
diff --git a/aptos-move/framework/aptos-stdlib/sources/data_structures/big_ordered_map.move b/aptos-move/framework/aptos-stdlib/sources/data_structures/big_ordered_map.move
index 8daab94747b72..c406edeb109a1 100644
--- a/aptos-move/framework/aptos-stdlib/sources/data_structures/big_ordered_map.move
+++ b/aptos-move/framework/aptos-stdlib/sources/data_structures/big_ordered_map.move
@@ -14,6 +14,12 @@
 ///   operation touch only few resources
 /// * it allows for parallelism for keys that are not close to each other,
 ///   once it contains enough keys
+///
+///
+/// TODO: all iterator functions are public(friend) for now, so that they can be modified in a
+/// backward incompatible way.
+/// They are waiting for Move improvement that will allow references to be part of the struct
+/// Allowing cleaner iterator APIs
 module aptos_std::big_ordered_map {
     use std::error;
     use std::vector;
@@ -218,7 +224,7 @@ module aptos_std::big_ordered_map {
 
     /// Returns an iterator pointing to the first element that is greater or equal to the provided
     /// key, or an end iterator if such element doesn't exist.
-    public fun lower_bound(self: &BigOrderedMap, key: &K): Iterator {
+    public(friend) fun lower_bound(self: &BigOrderedMap, key: &K): Iterator {
         let leaf = self.find_leaf(key);
         if (leaf == NULL_INDEX) {
             return self.new_end_iter()
@@ -238,7 +244,7 @@ module aptos_std::big_ordered_map {
 
     /// Returns an iterator pointing to the element that equals to the provided key, or an end
     /// iterator if the key is not found.
-    public fun find(self: &BigOrderedMap, key: &K): Iterator {
+    public(friend) fun find(self: &BigOrderedMap, key: &K): Iterator {
         let lower_bound = self.lower_bound(key);
         if (lower_bound.iter_is_end(self)) {
             lower_bound
@@ -283,7 +289,7 @@ module aptos_std::big_ordered_map {
     // ========================= Iterator functions ===========================
 
     /// Return the begin iterator.
-    public fun new_begin_iter(self: &BigOrderedMap): Iterator {
+    public(friend) fun new_begin_iter(self: &BigOrderedMap): Iterator {
         if (self.is_empty()) {
             return Iterator::End;
         };
@@ -296,12 +302,12 @@ module aptos_std::big_ordered_map {
     }
 
     /// Return the end iterator.
-    public fun new_end_iter(self: &BigOrderedMap): Iterator {
+    public(friend) fun new_end_iter(self: &BigOrderedMap): Iterator {
         Iterator::End
     }
 
     // Returns true iff the iterator is a begin iterator.
-    public fun iter_is_begin(self: &Iterator, map: &BigOrderedMap): bool {
+    public(friend) fun iter_is_begin(self: &Iterator, map: &BigOrderedMap): bool {
         if (self is Iterator::End) {
             map.is_empty()
         } else {
@@ -310,19 +316,19 @@ module aptos_std::big_ordered_map {
     }
 
     // Returns true iff the iterator is an end iterator.
-    public fun iter_is_end(self: &Iterator, _map: &BigOrderedMap): bool {
+    public(friend) fun iter_is_end(self: &Iterator, _map: &BigOrderedMap): bool {
         self is Iterator::End
     }
 
     /// Returns the key of the given iterator.
-    public fun iter_get_key(self: &Iterator): &K {
+    public(friend) fun iter_get_key(self: &Iterator): &K {
         assert!(!(self is Iterator::End), error::invalid_argument(EITER_OUT_OF_BOUNDS));
         &self.key
     }
 
     /// Returns the next iterator, or none if already at the end iterator.
     /// Requires the map is not changed after the input iterator is generated.
-    public fun iter_next(self: Iterator, map: &BigOrderedMap): Iterator {
+    public(friend) fun iter_next(self: Iterator, map: &BigOrderedMap): Iterator {
         assert!(!(self is Iterator::End), error::invalid_argument(EITER_OUT_OF_BOUNDS));
 
         let node_index = self.node_index;
@@ -351,7 +357,7 @@ module aptos_std::big_ordered_map {
 
     /// Returns the previous iterator, or none if already at the begin iterator.
     /// Requires the map is not changed after the input iterator is generated.
-    public fun iter_prev(self: Iterator, map: &BigOrderedMap): Iterator {
+    public(friend) fun iter_prev(self: Iterator, map: &BigOrderedMap): Iterator {
         let prev_index = if (self is Iterator::End) {
             map.max_leaf_index
         } else {
diff --git a/aptos-move/framework/aptos-stdlib/sources/data_structures/ordered_map.move b/aptos-move/framework/aptos-stdlib/sources/data_structures/ordered_map.move
index c5fde5cce61a6..2aa56f6bb5d1c 100644
--- a/aptos-move/framework/aptos-stdlib/sources/data_structures/ordered_map.move
+++ b/aptos-move/framework/aptos-stdlib/sources/data_structures/ordered_map.move
@@ -177,7 +177,7 @@ module aptos_std::ordered_map {
 
     /// Add multiple key/value pairs to the map, overwrites values if they exist already,
     /// or if duplicate keys are passed in.s
-    public fun upsert_all(self: &mut OrderedMap, keys: vector, values: vector) {
+    public fun upsert_all(self: &mut OrderedMap, keys: vector, values: vector) {
         // TODO: Can be optimized, by sorting keys and values, and then creating map.
         vector::zip(keys, values, |key, value| {
             upsert(self, key, value);
@@ -235,6 +235,7 @@ module aptos_std::ordered_map {
             };
         };
 
+        other_entries.destroy_empty();
         self.entries.reverse_append(reverse_result);
     }
 
diff --git a/crates/transaction-generator-lib/src/publishing/raw_module_data.rs b/crates/transaction-generator-lib/src/publishing/raw_module_data.rs
index 150fac67e0d74..1ab5a36273c70 100644
--- a/crates/transaction-generator-lib/src/publishing/raw_module_data.rs
+++ b/crates/transaction-generator-lib/src/publishing/raw_module_data.rs
@@ -1000,11 +1000,11 @@ pub static MODULES_SIMPLE: Lazy>> = Lazy::new(|| { vec![
 pub static PACKAGE_FRAMEWORK_USECASES_METADATA: Lazy> = Lazy::new(|| {
 	vec![
 		17, 70, 114, 97, 109, 101, 119, 111, 114, 107, 85, 115, 101, 99, 97, 115, 101, 115,
-		1, 0, 0, 0, 0, 0, 0, 0, 0, 64, 49, 50, 65, 65, 52, 57, 48, 67,
-		57, 53, 51, 70, 49, 50, 52, 51, 52, 67, 54, 49, 54, 48, 66, 66, 54, 55,
-		57, 53, 52, 53, 55, 54, 48, 66, 68, 57, 56, 49, 54, 51, 70, 68, 48, 57,
-		65, 70, 55, 49, 57, 69, 54, 48, 70, 49, 49, 53, 57, 48, 65, 68, 54, 51,
-		54, 54, 215, 1, 31, 139, 8, 0, 0, 0, 0, 0, 2, 255, 165, 144, 187, 142,
+		1, 0, 0, 0, 0, 0, 0, 0, 0, 64, 51, 68, 54, 69, 51, 48, 54, 53,
+		54, 52, 67, 68, 68, 69, 68, 69, 57, 50, 53, 68, 69, 52, 55, 52, 52, 57,
+		69, 67, 51, 66, 66, 53, 48, 67, 67, 67, 49, 56, 69, 70, 70, 66, 55, 56,
+		53, 66, 49, 69, 57, 70, 52, 68, 49, 55, 56, 66, 50, 68, 68, 66, 65, 57,
+		56, 51, 215, 1, 31, 139, 8, 0, 0, 0, 0, 0, 2, 255, 165, 144, 187, 142,
 		194, 64, 12, 69, 251, 249, 10, 107, 182, 38, 236, 15, 108, 193, 238, 138, 150, 6,
 		170, 8, 33, 51, 49, 33, 100, 176, 163, 241, 240, 144, 16, 255, 78, 44, 30, 130,
 		22, 100, 23, 215, 246, 189, 167, 112, 217, 97, 104, 177, 166, 185, 99, 220, 18, 252,
@@ -1243,48 +1243,104 @@ pub static MODULE_FRAMEWORK_USECASES_FUNGIBLE_ASSET_EXAMPLE: Lazy> = Laz
 #[rustfmt::skip]
 pub static MODULE_FRAMEWORK_USECASES_MAPS_EXAMPLE: Lazy> = Lazy::new(|| {
 	vec![
-		161, 28, 235, 11, 7, 0, 0, 10, 9, 1, 0, 6, 2, 6, 16, 3, 22, 54,
-		4, 76, 12, 5, 88, 102, 7, 190, 1, 88, 8, 150, 2, 64, 16, 214, 2, 31,
-		12, 245, 2, 208, 2, 0, 0, 1, 2, 1, 5, 1, 4, 7, 2, 0, 0, 0,
-		0, 2, 6, 7, 2, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 3, 1,
-		3, 2, 4, 4, 1, 2, 3, 1, 4, 2, 0, 0, 1, 1, 7, 5, 1, 2,
-		4, 4, 1, 2, 7, 6, 1, 2, 0, 0, 1, 1, 8, 7, 8, 2, 4, 4,
-		1, 2, 8, 9, 10, 2, 2, 0, 1, 1, 2, 2, 2, 3, 2, 4, 2, 5,
-		2, 6, 2, 3, 3, 3, 1, 0, 2, 3, 3, 1, 11, 0, 2, 9, 0, 9,
-		1, 1, 11, 1, 2, 9, 0, 9, 1, 3, 7, 11, 0, 2, 9, 0, 9, 1,
-		9, 0, 9, 1, 3, 7, 11, 1, 2, 9, 0, 9, 1, 9, 0, 9, 1, 2,
-		7, 11, 0, 2, 9, 0, 9, 1, 6, 9, 0, 2, 9, 0, 9, 1, 2, 7,
-		11, 1, 2, 9, 0, 9, 1, 6, 9, 0, 1, 9, 1, 11, 3, 3, 11, 0,
-		2, 3, 3, 11, 1, 2, 3, 3, 3, 1, 3, 1, 3, 3, 3, 12, 109, 97,
-		112, 115, 95, 101, 120, 97, 109, 112, 108, 101, 15, 116, 101, 115, 116, 95, 97, 100,
-		100, 95, 114, 101, 109, 111, 118, 101, 10, 115, 105, 109, 112, 108, 101, 95, 109, 97,
-		112, 3, 110, 101, 119, 9, 83, 105, 109, 112, 108, 101, 77, 97, 112, 11, 111, 114,
-		100, 101, 114, 101, 100, 95, 109, 97, 112, 10, 79, 114, 100, 101, 114, 101, 100, 77,
-		97, 112, 3, 97, 100, 100, 6, 114, 101, 109, 111, 118, 101, 0, 0, 0, 0, 0,
+		161, 28, 235, 11, 7, 0, 0, 10, 10, 1, 0, 8, 2, 8, 36, 3, 44, 90,
+		4, 134, 1, 18, 5, 152, 1, 183, 1, 7, 207, 2, 142, 2, 8, 221, 4, 64,
+		16, 157, 5, 31, 10, 188, 5, 27, 12, 215, 5, 203, 7, 0, 0, 1, 4, 1,
+		7, 1, 10, 0, 1, 8, 0, 1, 3, 4, 2, 4, 0, 4, 0, 0, 5, 8,
+		0, 2, 6, 7, 2, 0, 0, 0, 0, 0, 8, 8, 0, 3, 9, 7, 2, 0,
+		0, 0, 0, 0, 11, 0, 1, 0, 1, 1, 12, 3, 4, 2, 4, 4, 1, 1,
+		13, 5, 1, 2, 7, 4, 1, 1, 14, 6, 7, 2, 7, 4, 1, 0, 15, 9,
+		1, 0, 1, 2, 16, 1, 10, 2, 0, 0, 1, 2, 13, 11, 1, 2, 0, 0,
+		1, 2, 14, 12, 7, 2, 2, 0, 1, 0, 17, 9, 1, 0, 1, 3, 16, 1,
+		14, 2, 4, 4, 1, 3, 13, 15, 1, 2, 4, 4, 1, 3, 14, 16, 17, 2,
+		4, 4, 1, 1, 2, 2, 2, 3, 2, 5, 2, 6, 2, 7, 2, 9, 2, 10,
+		2, 11, 2, 5, 6, 12, 3, 3, 13, 13, 0, 2, 3, 3, 4, 13, 13, 1,
+		14, 1, 11, 1, 2, 9, 0, 9, 1, 3, 7, 11, 1, 2, 9, 0, 9, 1,
+		9, 0, 9, 1, 2, 7, 11, 1, 2, 9, 0, 9, 1, 6, 9, 0, 1, 9,
+		1, 13, 14, 1, 11, 1, 2, 3, 3, 3, 3, 3, 3, 1, 3, 3, 3, 3,
+		8, 0, 3, 6, 12, 3, 3, 1, 11, 3, 2, 9, 0, 9, 1, 3, 7, 11,
+		3, 2, 9, 0, 9, 1, 9, 0, 9, 1, 2, 7, 11, 3, 2, 9, 0, 9,
+		1, 6, 9, 0, 12, 11, 3, 2, 3, 3, 3, 3, 3, 1, 3, 1, 3, 3,
+		3, 3, 8, 2, 1, 11, 5, 2, 9, 0, 9, 1, 3, 7, 11, 5, 2, 9,
+		0, 9, 1, 9, 0, 9, 1, 2, 7, 11, 5, 2, 9, 0, 9, 1, 6, 9,
+		0, 2, 9, 0, 9, 1, 12, 11, 5, 2, 3, 3, 3, 3, 3, 1, 3, 1,
+		3, 3, 3, 3, 8, 4, 12, 109, 97, 112, 115, 95, 101, 120, 97, 109, 112, 108,
+		101, 21, 66, 105, 103, 79, 114, 100, 101, 114, 101, 100, 77, 97, 112, 82, 101, 115,
+		111, 117, 114, 99, 101, 5, 118, 97, 108, 117, 101, 13, 66, 105, 103, 79, 114, 100,
+		101, 114, 101, 100, 77, 97, 112, 15, 98, 105, 103, 95, 111, 114, 100, 101, 114, 101,
+		100, 95, 109, 97, 112, 18, 79, 114, 100, 101, 114, 101, 100, 77, 97, 112, 82, 101,
+		115, 111, 117, 114, 99, 101, 10, 79, 114, 100, 101, 114, 101, 100, 77, 97, 112, 11,
+		111, 114, 100, 101, 114, 101, 100, 95, 109, 97, 112, 17, 83, 105, 109, 112, 108, 101,
+		77, 97, 112, 82, 101, 115, 111, 117, 114, 99, 101, 9, 83, 105, 109, 112, 108, 101,
+		77, 97, 112, 10, 115, 105, 109, 112, 108, 101, 95, 109, 97, 112, 31, 116, 101, 115,
+		116, 95, 97, 100, 100, 95, 114, 101, 109, 111, 118, 101, 95, 98, 105, 103, 95, 111,
+		114, 100, 101, 114, 101, 100, 95, 109, 97, 112, 15, 110, 101, 119, 95, 119, 105, 116,
+		104, 95, 99, 111, 110, 102, 105, 103, 3, 97, 100, 100, 6, 114, 101, 109, 111, 118,
+		101, 27, 116, 101, 115, 116, 95, 97, 100, 100, 95, 114, 101, 109, 111, 118, 101, 95,
+		111, 114, 100, 101, 114, 101, 100, 95, 109, 97, 112, 3, 110, 101, 119, 26, 116, 101,
+		115, 116, 95, 97, 100, 100, 95, 114, 101, 109, 111, 118, 101, 95, 115, 105, 109, 112,
+		108, 101, 95, 109, 97, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-		0, 0, 0, 0, 0, 0, 0, 171, 205, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-		0, 0, 0, 0, 1, 20, 99, 111, 109, 112, 105, 108, 97, 116, 105, 111, 110, 95,
-		109, 101, 116, 97, 100, 97, 116, 97, 9, 0, 3, 50, 46, 48, 3, 50, 46, 49,
-		0, 1, 4, 0, 11, 123, 6, 210, 4, 0, 0, 0, 0, 0, 0, 12, 3, 6,
-		210, 4, 0, 0, 0, 0, 0, 0, 12, 4, 56, 0, 12, 5, 56, 1, 12, 6,
-		6, 0, 0, 0, 0, 0, 0, 0, 0, 12, 7, 9, 12, 8, 5, 14, 5, 50,
-		10, 8, 4, 120, 11, 7, 6, 1, 0, 0, 0, 0, 0, 0, 0, 22, 12, 7,
-		10, 7, 10, 0, 35, 3, 25, 5, 50, 10, 2, 4, 45, 13, 5, 10, 3, 10,
-		3, 56, 2, 11, 3, 6, 177, 30, 4, 0, 0, 0, 0, 0, 22, 12, 3, 10,
-		3, 6, 64, 66, 15, 0, 0, 0, 0, 0, 36, 3, 40, 5, 12, 11, 3, 6,
-		64, 66, 15, 0, 0, 0, 0, 0, 23, 12, 3, 5, 12, 13, 6, 10, 3, 10,
-		3, 56, 3, 5, 31, 6, 0, 0, 0, 0, 0, 0, 0, 0, 12, 9, 9, 12,
-		10, 11, 1, 12, 11, 5, 58, 5, 116, 10, 10, 4, 117, 11, 9, 6, 1, 0,
-		0, 0, 0, 0, 0, 0, 22, 12, 9, 10, 9, 10, 11, 35, 3, 69, 5, 116,
-		10, 2, 4, 107, 13, 5, 10, 3, 10, 3, 56, 2, 13, 5, 14, 4, 56, 4,
-		1, 1, 11, 3, 6, 177, 30, 4, 0, 0, 0, 0, 0, 22, 12, 3, 10, 3,
-		6, 64, 66, 15, 0, 0, 0, 0, 0, 36, 3, 89, 5, 93, 11, 3, 6, 64,
-		66, 15, 0, 0, 0, 0, 0, 23, 12, 3, 11, 4, 6, 177, 30, 4, 0, 0,
-		0, 0, 0, 22, 12, 4, 10, 4, 6, 64, 66, 15, 0, 0, 0, 0, 0, 36,
-		3, 102, 5, 56, 11, 4, 6, 64, 66, 15, 0, 0, 0, 0, 0, 23, 12, 4,
-		5, 56, 13, 6, 10, 3, 10, 3, 56, 3, 13, 6, 14, 4, 56, 5, 1, 5,
-		80, 2, 8, 12, 10, 5, 64, 8, 12, 8, 5, 20, 0,
+		171, 205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 20, 99,
+		111, 109, 112, 105, 108, 97, 116, 105, 111, 110, 95, 109, 101, 116, 97, 100, 97, 116,
+		97, 9, 0, 3, 50, 46, 48, 3, 50, 46, 49, 0, 2, 1, 2, 11, 1, 2,
+		3, 3, 2, 2, 1, 2, 11, 3, 2, 3, 3, 4, 2, 1, 2, 11, 5, 2,
+		3, 3, 0, 1, 4, 0, 8, 118, 11, 3, 11, 4, 9, 73, 0, 0, 0, 0,
+		56, 0, 12, 7, 6, 210, 4, 0, 0, 0, 0, 0, 0, 12, 8, 6, 210, 4,
+		0, 0, 0, 0, 0, 0, 12, 9, 6, 0, 0, 0, 0, 0, 0, 0, 0, 12,
+		10, 9, 12, 6, 5, 16, 5, 47, 10, 6, 4, 115, 11, 10, 6, 1, 0, 0,
+		0, 0, 0, 0, 0, 22, 12, 10, 10, 10, 10, 1, 35, 3, 27, 5, 47, 10,
+		8, 12, 11, 13, 7, 10, 11, 11, 11, 56, 1, 11, 8, 6, 177, 30, 4, 0,
+		0, 0, 0, 0, 22, 12, 8, 10, 8, 6, 64, 66, 15, 0, 0, 0, 0, 0,
+		36, 3, 42, 5, 14, 11, 8, 6, 64, 66, 15, 0, 0, 0, 0, 0, 23, 12,
+		8, 5, 14, 6, 0, 0, 0, 0, 0, 0, 0, 0, 12, 11, 9, 12, 12, 11,
+		2, 12, 13, 5, 55, 5, 105, 10, 12, 4, 112, 11, 11, 6, 1, 0, 0, 0,
+		0, 0, 0, 0, 22, 12, 11, 10, 11, 10, 13, 35, 3, 66, 5, 105, 10, 8,
+		12, 14, 13, 7, 10, 14, 11, 14, 56, 1, 10, 9, 12, 15, 13, 7, 14, 15,
+		56, 2, 1, 11, 8, 6, 177, 30, 4, 0, 0, 0, 0, 0, 22, 12, 8, 10,
+		8, 6, 64, 66, 15, 0, 0, 0, 0, 0, 36, 3, 87, 5, 91, 11, 8, 6,
+		64, 66, 15, 0, 0, 0, 0, 0, 23, 12, 8, 11, 9, 6, 177, 30, 4, 0,
+		0, 0, 0, 0, 22, 12, 9, 10, 9, 6, 64, 66, 15, 0, 0, 0, 0, 0,
+		36, 3, 100, 5, 53, 11, 9, 6, 64, 66, 15, 0, 0, 0, 0, 0, 23, 12,
+		9, 5, 53, 11, 7, 18, 0, 12, 17, 11, 0, 11, 17, 45, 0, 2, 8, 12,
+		12, 5, 61, 8, 12, 6, 5, 22, 4, 1, 4, 0, 13, 114, 56, 3, 12, 3,
+		6, 210, 4, 0, 0, 0, 0, 0, 0, 12, 4, 6, 210, 4, 0, 0, 0, 0,
+		0, 0, 12, 5, 6, 0, 0, 0, 0, 0, 0, 0, 0, 12, 6, 9, 12, 7,
+		5, 12, 5, 43, 10, 7, 4, 111, 11, 6, 6, 1, 0, 0, 0, 0, 0, 0,
+		0, 22, 12, 6, 10, 6, 10, 1, 35, 3, 23, 5, 43, 10, 4, 12, 8, 13,
+		3, 10, 8, 11, 8, 56, 4, 11, 4, 6, 177, 30, 4, 0, 0, 0, 0, 0,
+		22, 12, 4, 10, 4, 6, 64, 66, 15, 0, 0, 0, 0, 0, 36, 3, 38, 5,
+		10, 11, 4, 6, 64, 66, 15, 0, 0, 0, 0, 0, 23, 12, 4, 5, 10, 6,
+		0, 0, 0, 0, 0, 0, 0, 0, 12, 8, 9, 12, 9, 11, 2, 12, 10, 5,
+		51, 5, 101, 10, 9, 4, 108, 11, 8, 6, 1, 0, 0, 0, 0, 0, 0, 0,
+		22, 12, 8, 10, 8, 10, 10, 35, 3, 62, 5, 101, 10, 4, 12, 11, 13, 3,
+		10, 11, 11, 11, 56, 4, 10, 5, 12, 12, 13, 3, 14, 12, 56, 5, 1, 11,
+		4, 6, 177, 30, 4, 0, 0, 0, 0, 0, 22, 12, 4, 10, 4, 6, 64, 66,
+		15, 0, 0, 0, 0, 0, 36, 3, 83, 5, 87, 11, 4, 6, 64, 66, 15, 0,
+		0, 0, 0, 0, 23, 12, 4, 11, 5, 6, 177, 30, 4, 0, 0, 0, 0, 0,
+		22, 12, 5, 10, 5, 6, 64, 66, 15, 0, 0, 0, 0, 0, 36, 3, 96, 5,
+		49, 11, 5, 6, 64, 66, 15, 0, 0, 0, 0, 0, 23, 12, 5, 5, 49, 11,
+		3, 18, 1, 12, 14, 11, 0, 11, 14, 45, 1, 2, 8, 12, 9, 5, 57, 8,
+		12, 7, 5, 18, 8, 1, 4, 0, 18, 115, 56, 6, 12, 3, 6, 210, 4, 0,
+		0, 0, 0, 0, 0, 12, 4, 6, 210, 4, 0, 0, 0, 0, 0, 0, 12, 5,
+		6, 0, 0, 0, 0, 0, 0, 0, 0, 12, 6, 9, 12, 7, 5, 12, 5, 43,
+		10, 7, 4, 112, 11, 6, 6, 1, 0, 0, 0, 0, 0, 0, 0, 22, 12, 6,
+		10, 6, 10, 1, 35, 3, 23, 5, 43, 10, 4, 12, 8, 13, 3, 10, 8, 11,
+		8, 56, 7, 11, 4, 6, 177, 30, 4, 0, 0, 0, 0, 0, 22, 12, 4, 10,
+		4, 6, 64, 66, 15, 0, 0, 0, 0, 0, 36, 3, 38, 5, 10, 11, 4, 6,
+		64, 66, 15, 0, 0, 0, 0, 0, 23, 12, 4, 5, 10, 6, 0, 0, 0, 0,
+		0, 0, 0, 0, 12, 8, 9, 12, 9, 11, 2, 12, 10, 5, 51, 5, 102, 10,
+		9, 4, 109, 11, 8, 6, 1, 0, 0, 0, 0, 0, 0, 0, 22, 12, 8, 10,
+		8, 10, 10, 35, 3, 62, 5, 102, 10, 4, 12, 11, 13, 3, 10, 11, 11, 11,
+		56, 7, 10, 5, 12, 12, 13, 3, 14, 12, 56, 8, 1, 1, 11, 4, 6, 177,
+		30, 4, 0, 0, 0, 0, 0, 22, 12, 4, 10, 4, 6, 64, 66, 15, 0, 0,
+		0, 0, 0, 36, 3, 84, 5, 88, 11, 4, 6, 64, 66, 15, 0, 0, 0, 0,
+		0, 23, 12, 4, 11, 5, 6, 177, 30, 4, 0, 0, 0, 0, 0, 22, 12, 5,
+		10, 5, 6, 64, 66, 15, 0, 0, 0, 0, 0, 36, 3, 97, 5, 49, 11, 5,
+		6, 64, 66, 15, 0, 0, 0, 0, 0, 23, 12, 5, 5, 49, 11, 3, 18, 2,
+		12, 14, 11, 0, 11, 14, 45, 2, 2, 8, 12, 9, 5, 57, 8, 12, 7, 5,
+		18, 0,
 	]
 });